diff --git a/package.json b/package.json index a3ae7ff190..dba36fec87 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "eslint-plugin-security": "^1.7.1", "express": "^4.20.0", "extract-zip": "^2.0.1", - "fake-indexeddb": "^4.0.2", + "fake-indexeddb": "^6.2.4", "fork-ts-checker-webpack-plugin": "^9.0.2", "generic-names": "^4.0.0", "grunt": "^1.6.1", diff --git a/src/tests/unit/FixJSDOMEnvironment.ts b/src/tests/unit/FixJSDOMEnvironment.ts new file mode 100644 index 0000000000..ed4864255b --- /dev/null +++ b/src/tests/unit/FixJSDOMEnvironment.ts @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// Custom JSDOM environment that provides structuredClone to the test environment +// This is required for fake-indexeddb v5+ which needs structuredClone to be globally available +// See: https://github.com/dumbmatter/fakeIndexedDB/issues/88 + +import type { EnvironmentContext, JestEnvironmentConfig } from '@jest/environment'; +import JSDOMEnvironment from 'jest-environment-jsdom'; + +export default class FixJSDOMEnvironment extends JSDOMEnvironment { + constructor(config: JestEnvironmentConfig, context: EnvironmentContext) { + super(config, context); + + // Node.js 17+ has structuredClone as a global + // We inject it into the JSDOM environment so it's available to tests + if (typeof structuredClone === 'function') { + this.global.structuredClone = structuredClone; + } + } +} diff --git a/src/tests/unit/jest.config.js b/src/tests/unit/jest.config.js index dd8fc2dacb..d00010775f 100644 --- a/src/tests/unit/jest.config.js +++ b/src/tests/unit/jest.config.js @@ -22,6 +22,6 @@ module.exports = { rootDir: rootDir, roots: [currentDir], setupFiles: [`${currentDir}/jest-setup.ts`], - testEnvironment: 'jsdom', + testEnvironment: `${currentDir}/FixJSDOMEnvironment.ts`, testMatch: [`${currentDir}/**/*.test.(ts|tsx|js)`], }; diff --git a/yarn.lock b/yarn.lock index 26a824b8f9..59f8fe8cb8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3102,7 +3102,7 @@ __metadata: eslint-plugin-security: ^1.7.1 express: ^4.20.0 extract-zip: ^2.0.1 - fake-indexeddb: ^4.0.2 + fake-indexeddb: ^6.2.4 fork-ts-checker-webpack-plugin: ^9.0.2 generic-names: ^4.0.0 grunt: ^1.6.1 @@ -3702,13 +3702,6 @@ __metadata: languageName: node linkType: hard -"base64-arraybuffer-es6@npm:^0.7.0": - version: 0.7.0 - resolution: "base64-arraybuffer-es6@npm:0.7.0" - checksum: 6d2fd114df49201b476cea5d470504e5d4e8c4cd42544152b312c9bdcb824313086fe83f1ffc34262e9e276b82d46aefc6e63bb85553f016932061137b355cdf - languageName: node - linkType: hard - "binary-extensions@npm:^2.0.0": version: 2.3.0 resolution: "binary-extensions@npm:2.3.0" @@ -4713,15 +4706,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^1.0.1": - version: 1.0.1 - resolution: "domexception@npm:1.0.1" - dependencies: - webidl-conversions: ^4.0.2 - checksum: f564a9c0915dcb83ceefea49df14aaed106b1468fbe505119e8bcb0b77e242534f3aba861978537c0fc9dc6f35b176d0ffc77b3e342820fb27a8f215e7ae4d52 - languageName: node - linkType: hard - "domexception@npm:^4.0.0": version: 4.0.0 resolution: "domexception@npm:4.0.0" @@ -5747,12 +5731,10 @@ __metadata: languageName: node linkType: hard -"fake-indexeddb@npm:^4.0.2": - version: 4.0.2 - resolution: "fake-indexeddb@npm:4.0.2" - dependencies: - realistic-structured-clone: ^3.0.0 - checksum: ad257e5cc6273d9ea667b4129d8b0798830d56a68c7c77ddba752b3fd0088cb33e34b9569b218d16dfc8a78733d360d325f89c2ce352b70a0587c1f46f6f881d +"fake-indexeddb@npm:^6.2.4": + version: 6.2.4 + resolution: "fake-indexeddb@npm:6.2.4" + checksum: e5a54cdac3b3bd4e887a3cdf01b53a2ed6d3652920dd43277c72caabcdc1746d57d7d2705246a2ad2a836ad7221ee6b1cc9fca6e40332b1b78587dc0921267e7 languageName: node linkType: hard @@ -8470,7 +8452,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.10, lodash@npm:^4.17.14, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.19, lodash@npm:~4.17.21": +"lodash@npm:^4.17.10, lodash@npm:^4.17.14, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:~4.17.19, lodash@npm:~4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -10245,17 +10227,6 @@ __metadata: languageName: node linkType: hard -"realistic-structured-clone@npm:^3.0.0": - version: 3.0.0 - resolution: "realistic-structured-clone@npm:3.0.0" - dependencies: - domexception: ^1.0.1 - typeson: ^6.1.0 - typeson-registry: ^1.0.0-alpha.20 - checksum: b4521b299c8dc320a5e3ef44678f80a92b0f1837901a5fbd1c7be06808110fb0b591b417114306ec55b44ef47fd17968aacca079afc9665afbe1c528026295ec - languageName: node - linkType: hard - "recast@npm:^0.23.9": version: 0.23.9 resolution: "recast@npm:0.23.9" @@ -11739,15 +11710,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 - languageName: node - linkType: hard - "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -12002,24 +11964,6 @@ __metadata: languageName: node linkType: hard -"typeson-registry@npm:^1.0.0-alpha.20": - version: 1.0.0-alpha.39 - resolution: "typeson-registry@npm:1.0.0-alpha.39" - dependencies: - base64-arraybuffer-es6: ^0.7.0 - typeson: ^6.0.0 - whatwg-url: ^8.4.0 - checksum: c6b629697acf4652aecfff7be760356d764600afc9beca253278bbfc44fae0fe635b7619201b83e497cdc30645cbce7614d12a04b5726d9b8b505f73e6a3fc2a - languageName: node - linkType: hard - -"typeson@npm:^6.0.0, typeson@npm:^6.1.0": - version: 6.1.0 - resolution: "typeson@npm:6.1.0" - checksum: 00a77b03ac8f704acb103307bad9295fe47d6b304c386297f078ec3be63875c0b81e022a4815edb9dc2c7da0a72a431345411d35c755a8510af4a420e9e46cdc - languageName: node - linkType: hard - "ua-parser-js@npm:^1.0.37": version: 1.0.37 resolution: "ua-parser-js@npm:1.0.37" @@ -12287,20 +12231,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^4.0.2": - version: 4.0.2 - resolution: "webidl-conversions@npm:4.0.2" - checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -12455,17 +12385,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^8.4.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" - dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2"