From bd2ac68fcd004edb5920a2a6693c4eba564333d7 Mon Sep 17 00:00:00 2001 From: David Ortner Date: Tue, 4 Jul 2023 13:13:32 +0200 Subject: [PATCH] #873@trivial: Continue on implementation. --- package-lock.json | 621 ++++++++++++++++++ packages/global-registrator/.eslintrc.cjs | 4 +- packages/global-registrator/.prettierrc.cjs | 2 +- packages/global-registrator/package.json | 43 +- packages/global-registrator/src/index.ts | 2 +- .../test/react/React.test.tsx | 4 +- packages/global-registrator/tsconfig.json | 5 +- .../happy-dom/bin/change-file-extension.cjs | 100 +++ packages/happy-dom/package.json | 38 +- packages/integration-test/.eslintrc.cjs | 4 +- packages/integration-test/.prettierrc.cjs | 2 +- packages/integration-test/test/index.js | 32 +- .../{CommonJS.test.js => CommonJS.test.cjs} | 2 +- .../test/tests/WindowGlobals.test.js | 2 +- .../test/tests/XMLHttpRequest.test.js | 1 - .../test/utilities/TestFunctions.js | 57 +- packages/jest-environment/.eslintrc.cjs | 2 +- packages/jest-environment/.prettierrc.cjs | 2 +- 18 files changed, 849 insertions(+), 74 deletions(-) create mode 100644 packages/happy-dom/bin/change-file-extension.cjs rename packages/integration-test/test/tests/{CommonJS.test.js => CommonJS.test.cjs} (87%) diff --git a/package-lock.json b/package-lock.json index ca9e78bc0..27c5c5362 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2141,6 +2141,15 @@ "node": ">=0.10.0" } }, + "node_modules/array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "dev": true, + "engines": { + "node": ">=12.17" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -2873,6 +2882,143 @@ "node": ">= 0.8" } }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-args/node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/command-line-args/node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/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, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/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, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/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 + }, + "node_modules/command-line-usage/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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/comment-parser": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", @@ -3327,6 +3473,15 @@ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, + "node_modules/current-module-paths": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/current-module-paths/-/current-module-paths-1.1.1.tgz", + "integrity": "sha512-8Ga5T8oMXBaSsHq9Gj+bddX7kHSaJKsl2vaAd3ep51eQLkr4W18eFEmEZM5bLo1zrz8tt3jE1U8QK9QGhaLR4g==", + "dev": true, + "engines": { + "node": ">=12.17" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3387,6 +3542,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -4614,6 +4778,19 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-set": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-5.1.3.tgz", + "integrity": "sha512-mQ6dqz+z59on3B50IGF3ujNGbZmY1TAeLHpNfhLEeNM6Lky31w3RUlbCyqZWQs0DuZJQU4R2qDuVd9ojyzadcg==", + "dev": true, + "dependencies": { + "array-back": "^6.2.2", + "glob": "^7.2.0" + }, + "engines": { + "node": ">=12.17" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4658,6 +4835,27 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-replace/node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4934,6 +5132,21 @@ "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", @@ -5384,6 +5597,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -7039,6 +7261,18 @@ "@types/trusted-types": "^2.0.2" } }, + "node_modules/load-module": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/load-module/-/load-module-4.2.1.tgz", + "integrity": "sha512-Sbfg6R4LjvyThJpqUoADHMjyoI2+cL4msbCQeZ9kkY/CqP/TT2938eftKm7x4I2gd4/A+DEe6nePkbfWYbXwSw==", + "dev": true, + "dependencies": { + "array-back": "^6.2.0" + }, + "engines": { + "node": ">=12.17" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -8088,6 +8322,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", + "dev": true, + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -8322,6 +8568,15 @@ "node": ">=8" } }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -8379,6 +8634,32 @@ "node": ">=0.1.14" } }, + "node_modules/renamer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/renamer/-/renamer-4.0.0.tgz", + "integrity": "sha512-yurufcXxbJfFBVAUoByNyDVH811zTZ/MrKo6gUH8pHGeAmdK7J5egj2lSNe57HuVIvnVzSalzeVGu8pi8UHGxg==", + "dev": true, + "dependencies": { + "array-back": "^6.2.0", + "chalk": "^4.1.2", + "command-line-args": "^5.2.0", + "command-line-usage": "^6.1.1", + "current-module-paths": "^1.1.0", + "fast-diff": "^1.2.0", + "file-set": "^5.1.2", + "global-dirs": "^3.0.0", + "load-module": "^4.2.1", + "printj": "^1.3.0", + "stream-read-all": "^3.0.1", + "typical": "^7.1.1" + }, + "bin": { + "renamer": "bin/cli.js" + }, + "engines": { + "node": ">=12.17" + } + }, "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", @@ -9245,6 +9526,15 @@ "node": ">= 0.4" } }, + "node_modules/stream-read-all": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", + "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -9391,6 +9681,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -9756,6 +10079,15 @@ "node": ">=12.20" } }, + "node_modules/typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "dev": true, + "engines": { + "node": ">=12.17" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -10118,6 +10450,28 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -10267,6 +10621,7 @@ "eslint-plugin-turbo": "^0.0.7", "jest": "^29.4.0", "prettier": "^2.6.0", + "renamer": "^4.0.0", "ts-jest": "^29.0.5", "typescript": "^5.0.4" } @@ -12051,6 +12406,12 @@ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true }, + "array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "dev": true + }, "array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -12605,6 +12966,114 @@ "delayed-stream": "~1.0.0" } }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true + } + } + }, + "command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "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, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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, + "requires": { + "color-name": "1.1.3" + } + }, + "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 + }, + "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 + }, + "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 + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, "comment-parser": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", @@ -12977,6 +13446,12 @@ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, + "current-module-paths": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/current-module-paths/-/current-module-paths-1.1.1.tgz", + "integrity": "sha512-8Ga5T8oMXBaSsHq9Gj+bddX7kHSaJKsl2vaAd3ep51eQLkr4W18eFEmEZM5bLo1zrz8tt3jE1U8QK9QGhaLR4g==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -13023,6 +13498,12 @@ "which-typed-array": "^1.1.9" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -13985,6 +14466,16 @@ "flat-cache": "^3.0.4" } }, + "file-set": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-5.1.3.tgz", + "integrity": "sha512-mQ6dqz+z59on3B50IGF3ujNGbZmY1TAeLHpNfhLEeNM6Lky31w3RUlbCyqZWQs0DuZJQU4R2qDuVd9ojyzadcg==", + "dev": true, + "requires": { + "array-back": "^6.2.2", + "glob": "^7.2.0" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -14025,6 +14516,23 @@ } } }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "requires": { + "array-back": "^3.0.1" + }, + "dependencies": { + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true + } + } + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -14225,6 +14733,15 @@ "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true }, + "global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, "globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", @@ -14299,6 +14816,7 @@ "iconv-lite": "^0.6.3", "jest": "^29.4.0", "prettier": "^2.6.0", + "renamer": "^4.0.0", "ts-jest": "^29.0.5", "typescript": "^5.0.4", "webidl-conversions": "^7.0.0", @@ -14578,6 +15096,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, "internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -15811,6 +16335,15 @@ "@types/trusted-types": "^2.0.2" } }, + "load-module": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/load-module/-/load-module-4.2.1.tgz", + "integrity": "sha512-Sbfg6R4LjvyThJpqUoADHMjyoI2+cL4msbCQeZ9kkY/CqP/TT2938eftKm7x4I2gd4/A+DEe6nePkbfWYbXwSw==", + "dev": true, + "requires": { + "array-back": "^6.2.0" + } + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -16593,6 +17126,12 @@ } } }, + "printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", + "dev": true + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -16762,6 +17301,12 @@ } } }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -16801,6 +17346,26 @@ "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", "dev": true }, + "renamer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/renamer/-/renamer-4.0.0.tgz", + "integrity": "sha512-yurufcXxbJfFBVAUoByNyDVH811zTZ/MrKo6gUH8pHGeAmdK7J5egj2lSNe57HuVIvnVzSalzeVGu8pi8UHGxg==", + "dev": true, + "requires": { + "array-back": "^6.2.0", + "chalk": "^4.1.2", + "command-line-args": "^5.2.0", + "command-line-usage": "^6.1.1", + "current-module-paths": "^1.1.0", + "fast-diff": "^1.2.0", + "file-set": "^5.1.2", + "global-dirs": "^3.0.0", + "load-module": "^4.2.1", + "printj": "^1.3.0", + "stream-read-all": "^3.0.1", + "typical": "^7.1.1" + } + }, "repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", @@ -17487,6 +18052,12 @@ "internal-slot": "^1.0.4" } }, + "stream-read-all": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", + "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", + "dev": true + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -17588,6 +18159,32 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -17834,6 +18431,12 @@ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "dev": true }, + "typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "dev": true + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -18121,6 +18724,24 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/packages/global-registrator/.eslintrc.cjs b/packages/global-registrator/.eslintrc.cjs index d2a457002..b619a27bd 100644 --- a/packages/global-registrator/.eslintrc.cjs +++ b/packages/global-registrator/.eslintrc.cjs @@ -1,9 +1,9 @@ -module.exports = require('happy-dom/.eslintrc'); +module.exports = require('happy-dom/.eslintrc.cjs'); for (const override of module.exports.overrides.filter( (override) => override.files.includes('*.ts') || override.files.includes('*.js') )) { - override.exports = override.exports.filter((item) => !item.includes('jest')); + override.extends = override.extends.filter((item) => !item.includes('jest')); override.plugins = override.plugins.filter((item) => !item.includes('jest')); for (const name of Object.keys(override.rules)) { diff --git a/packages/global-registrator/.prettierrc.cjs b/packages/global-registrator/.prettierrc.cjs index ea9e3b599..7b9cd9691 100644 --- a/packages/global-registrator/.prettierrc.cjs +++ b/packages/global-registrator/.prettierrc.cjs @@ -1 +1 @@ -module.exports = require('../happy-dom/.prettierrc.js'); +module.exports = require('../happy-dom/.prettierrc.cjs'); diff --git a/packages/global-registrator/package.json b/packages/global-registrator/package.json index 74d2f7b8d..3b57e863c 100644 --- a/packages/global-registrator/package.json +++ b/packages/global-registrator/package.json @@ -6,23 +6,49 @@ "repository": "https://github.com/capricorn86/happy-dom", "author": "David Ortner", "description": "Use Happy DOM globally in a Node.js environment for testing.", - "main": "cjs/index.js", - "module": "lib/index.js", + "main": "lib/index.js", + "type": "module", "exports": { ".": { "import": "./lib/index.js", - "require": "./cjs/index.js", + "require": "./cjs/index.cjs", "default": "./lib/index.js" }, "./lib/*.js": { "import": "./lib/*.js", - "require": "./cjs/*.js", + "require": "./cjs/*.cjs", "default": "./lib/*.js" }, + "./lib/*.ts": { + "import": "./lib/*.ts", + "require": "./cjs/*.ts", + "default": "./lib/*.ts" + }, + "./lib/*.map": { + "import": "./lib/*.map", + "require": "./cjs/*.map", + "default": "./lib/*.map" + }, + "./cjs/*.js": { + "import": "./lib/*.js", + "require": "./cjs/*.cjs", + "default": "./lib/*.js" + }, + "./cjs/*.ts": { + "import": "./lib/*.ts", + "require": "./cjs/*.ts", + "default": "./lib/*.ts" + }, + "./cjs/*.map": { + "import": "./lib/*.map", + "require": "./cjs/*.map", + "default": "./lib/*.map" + }, "./src/*.ts": "./src/*.ts", - "./package.json": "./package.json" + "./package.json": "./package.json", + "./.eslintrc": "./.eslintrc.js" }, - "keywords": [ + "keywords": [ "jsdom", "happy", "dom", @@ -39,11 +65,12 @@ "access": "public" }, "scripts": { - "compile": "tsc && tsc --module CommonJS --outDir cjs", + "compile": "tsc && tsc --module CommonJS --outDir cjs && npm run change-cjs-file-extension", + "change-cjs-file-extension": "node ../happy-dom/bin/change-file-extension.cjs --dir=./cjs --fromExt=.js --toExt=.cjs", "watch": "npm run compile && tsc -w --preserveWatchOutput", "lint": "eslint --ignore-path .gitignore --max-warnings 0 .", "lint:fix": "eslint --ignore-path .gitignore --max-warnings 0 --fix .", - "test": "tsc --project ./test && node ./tmp/react/React.test.js", + "test": "tsc --project ./test && node ../happy-dom/bin/change-file-extension.cjs --dir=./tmp --fromExt=.js --toExt=.cjs && node ./tmp/react/React.test.cjs", "test:debug": "tsc --project ./test && node --inspect-brk ./tmp/react/React.test.js" }, "dependencies": { diff --git a/packages/global-registrator/src/index.ts b/packages/global-registrator/src/index.ts index 5f62b5ff7..1e34adc8a 100644 --- a/packages/global-registrator/src/index.ts +++ b/packages/global-registrator/src/index.ts @@ -1,3 +1,3 @@ -import GlobalRegistrator from './GlobalRegistrator'; +import GlobalRegistrator from './GlobalRegistrator.js'; export { GlobalRegistrator }; diff --git a/packages/global-registrator/test/react/React.test.tsx b/packages/global-registrator/test/react/React.test.tsx index 29f68d90d..b5978c6f4 100644 --- a/packages/global-registrator/test/react/React.test.tsx +++ b/packages/global-registrator/test/react/React.test.tsx @@ -1,7 +1,7 @@ -import GlobalRegistrator from '../../cjs/GlobalRegistrator'; +import GlobalRegistrator from '../../cjs/GlobalRegistrator.cjs'; import React from 'react'; import ReactDOM from 'react-dom'; -import ReactComponent from './ReactComponent'; +import ReactComponent from './ReactComponent.js'; GlobalRegistrator.register(); diff --git a/packages/global-registrator/tsconfig.json b/packages/global-registrator/tsconfig.json index cb0ad2ab0..090480aff 100644 --- a/packages/global-registrator/tsconfig.json +++ b/packages/global-registrator/tsconfig.json @@ -7,7 +7,7 @@ "declaration": true, "declarationMap": true, "module": "es2020", - "moduleResolution": "node", + "moduleResolution": "node16", "esModuleInterop": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, @@ -22,9 +22,6 @@ "composite": true, "incremental": true, "jsx": "react", - "typeRoots": [ - "node_modules/@types" - ], "types": [ "node" ], diff --git a/packages/happy-dom/bin/change-file-extension.cjs b/packages/happy-dom/bin/change-file-extension.cjs new file mode 100644 index 000000000..8000b421a --- /dev/null +++ b/packages/happy-dom/bin/change-file-extension.cjs @@ -0,0 +1,100 @@ +/* eslint-disable no-console*/ +/* eslint-disable @typescript-eslint/no-var-requires*/ + +const Path = require('path'); +const FS = require('fs'); + +process.on('unhandledRejection', (reason) => { + console.error(reason); + process.exit(1); +}); + +main(); + +function getArguments() { + const args = { + dir: null, + fromExt: null, + toExt: null + }; + + for (const arg of process.argv) { + if (arg.startsWith('--dir=')) { + args.dir = arg.split('=')[1]; + } else if (arg.startsWith('--fromExt=')) { + args.fromExt = arg.split('=')[1]; + } else if (arg.startsWith('--toExt=')) { + args.toExt = arg.split('=')[1]; + } + } + + return args; +} + +async function readDirectory(directory) { + const resolvedDirectory = Path.resolve(directory); + const files = await FS.promises.readdir(resolvedDirectory); + const statsPromises = []; + let allFiles = []; + + for (const file of files) { + const filePath = Path.join(resolvedDirectory, file); + statsPromises.push( + FS.promises.stat(filePath).then((stats) => { + if (stats.isDirectory()) { + return readDirectory(filePath).then((files) => (allFiles = allFiles.concat(files))); + } + allFiles.push(filePath); + }) + ); + } + + await Promise.all(statsPromises); + + return allFiles; +} + +async function renameFiles(files, args) { + const newFiles = files.map((file) => ({ + oldPath: file, + newPath: file.replace(args.fromExt, args.toExt) + })); + const writePromises = []; + + for (const file of newFiles) { + writePromises.push( + FS.promises.readFile(file.oldPath).then((content) => { + return FS.promises + .writeFile( + file.newPath, + content + .toString() + .replace( + new RegExp(`${args.fromExt.replace('.', '\\.')}\\.map`, 'g'), + `${args.toExt}.map` + ) + .replace( + new RegExp(`${args.fromExt.replace('.', '\\.')}(["'])`, 'g'), + `${args.toExt}$1` + ) + ) + .then(() => { + if (file.oldPath !== file.newPath) { + return FS.promises.unlink(file.oldPath); + } + }); + }) + ); + } + + await Promise.all(writePromises); +} + +async function main() { + const args = getArguments(); + if (!args.dir || !args.fromExt || !args.toExt) { + throw new Error('Invalid arguments'); + } + const files = await readDirectory(args.dir); + await renameFiles(files, args); +} diff --git a/packages/happy-dom/package.json b/packages/happy-dom/package.json index 5e9ccf9c0..785eba315 100644 --- a/packages/happy-dom/package.json +++ b/packages/happy-dom/package.json @@ -6,23 +6,48 @@ "repository": "https://github.com/capricorn86/happy-dom", "author": "David Ortner", "description": "Happy DOM is a JavaScript implementation of a web browser without its graphical user interface. It includes many web standards from WHATWG DOM and HTML.", - "main": "cjs/index.js", - "module": "lib/index.js", + "main": "lib/index.js", "type": "module", "exports": { ".": { "import": "./lib/index.js", - "require": "./cjs/index.js", + "require": "./cjs/index.cjs", "default": "./lib/index.js" }, "./lib/*.js": { "import": "./lib/*.js", - "require": "./cjs/*.js", + "require": "./cjs/*.cjs", "default": "./lib/*.js" }, + "./lib/*.ts": { + "import": "./lib/*.ts", + "require": "./cjs/*.ts", + "default": "./lib/*.ts" + }, + "./lib/*.map": { + "import": "./lib/*.map", + "require": "./cjs/*.map", + "default": "./lib/*.map" + }, + "./cjs/*.js": { + "import": "./lib/*.js", + "require": "./cjs/*.cjs", + "default": "./lib/*.js" + }, + "./cjs/*.ts": { + "import": "./lib/*.ts", + "require": "./cjs/*.ts", + "default": "./lib/*.ts" + }, + "./cjs/*.map": { + "import": "./lib/*.map", + "require": "./cjs/*.map", + "default": "./lib/*.map" + }, "./src/*.ts": "./src/*.ts", "./package.json": "./package.json", - "./.eslintrc": "./.eslintrc.js" + "./.eslintrc.cjs": "./.eslintrc.cjs", + "./.prettierrc.cjs": "./.prettierrc.cjs" }, "keywords": [ "jsdom", @@ -40,7 +65,8 @@ "access": "public" }, "scripts": { - "compile": "tsc && tsc --module CommonJS --outDir cjs", + "compile": "tsc && tsc --module CommonJS --outDir cjs && npm run change-cjs-file-extension", + "change-cjs-file-extension": "node ./bin/change-file-extension.cjs --dir=./cjs --fromExt=.js --toExt=.cjs", "watch": "tsc -w --preserveWatchOutput", "lint": "eslint --ignore-path .gitignore --max-warnings 0 .", "lint:fix": "eslint --ignore-path .gitignore --max-warnings 0 --fix .", diff --git a/packages/integration-test/.eslintrc.cjs b/packages/integration-test/.eslintrc.cjs index 285ff6549..fef0b2327 100644 --- a/packages/integration-test/.eslintrc.cjs +++ b/packages/integration-test/.eslintrc.cjs @@ -1,8 +1,8 @@ -module.exports = require('happy-dom/.eslintrc'); +module.exports = require('happy-dom/.eslintrc.cjs'); const override = module.exports.overrides.find((override) => override.files.includes('*.js')); -override.exports = override.exports.filter((item) => !item.includes('jest')); +override.extends = override.extends.filter((item) => !item.includes('jest')); override.plugins = override.plugins.filter((item) => !item.includes('jest')); for (const name of Object.keys(override.rules)) { diff --git a/packages/integration-test/.prettierrc.cjs b/packages/integration-test/.prettierrc.cjs index ea9e3b599..7b9cd9691 100644 --- a/packages/integration-test/.prettierrc.cjs +++ b/packages/integration-test/.prettierrc.cjs @@ -1 +1 @@ -module.exports = require('../happy-dom/.prettierrc.js'); +module.exports = require('../happy-dom/.prettierrc.cjs'); diff --git a/packages/integration-test/test/index.js b/packages/integration-test/test/index.js index e7f62f461..1e9730581 100644 --- a/packages/integration-test/test/index.js +++ b/packages/integration-test/test/index.js @@ -1,34 +1,6 @@ -import ChildProcess from 'node:child_process'; -import FS from 'node:fs'; -import Path from 'node:path'; - -// ES6 tests await Promise.all([ import('./tests/Fetch.test.js'), import('./tests/XMLHttpRequest.test.js'), - import('./tests/WindowGlobals.test.js') + import('./tests/WindowGlobals.test.js'), + import('./tests/CommonJS.test.cjs') ]); - -// CommonJS test -const packageJSONPath = Path.resolve('./package.json'); -const packageJSONContent = FS.readFileSync(packageJSONPath); - -FS.writeFileSync(packageJSONPath, packageJSONContent.replace('"type": "module",', '')); - -ChildProcess.exec('node ./tests/CommonJS.test.js', {}, (error, stdout, stderr) => { - FS.writeFileSync(packageJSONPath, packageJSONContent); - - if (stdout) { - console.log(stdout); - } - if (stderr) { - console.error(stderr); - } - if (error) { - console.error(stderr); - } - - if (error || stderr) { - process.exit(1); - } -}); diff --git a/packages/integration-test/test/tests/CommonJS.test.js b/packages/integration-test/test/tests/CommonJS.test.cjs similarity index 87% rename from packages/integration-test/test/tests/CommonJS.test.js rename to packages/integration-test/test/tests/CommonJS.test.cjs index 5bf27d085..62dccfbd4 100644 --- a/packages/integration-test/test/tests/CommonJS.test.js +++ b/packages/integration-test/test/tests/CommonJS.test.cjs @@ -1,4 +1,4 @@ -const { Window } = 'happy-dom'; +const { Window } = require('happy-dom'); const window = new Window(); const document = window.document; diff --git a/packages/integration-test/test/tests/WindowGlobals.test.js b/packages/integration-test/test/tests/WindowGlobals.test.js index a5d895285..833289c08 100644 --- a/packages/integration-test/test/tests/WindowGlobals.test.js +++ b/packages/integration-test/test/tests/WindowGlobals.test.js @@ -8,7 +8,7 @@ describe('WindowGlobals', () => { window.addEventListener('error', (event) => (error = event.error)); window.document.write(` diff --git a/packages/integration-test/test/tests/XMLHttpRequest.test.js b/packages/integration-test/test/tests/XMLHttpRequest.test.js index 756ead2ba..eedc4975c 100644 --- a/packages/integration-test/test/tests/XMLHttpRequest.test.js +++ b/packages/integration-test/test/tests/XMLHttpRequest.test.js @@ -13,7 +13,6 @@ describe('XMLHttpRequest', () => { }); const server = express.listen(3000); - const request = new window.XMLHttpRequest(); request.open('GET', 'http://localhost:3000/get/json', true); diff --git a/packages/integration-test/test/utilities/TestFunctions.js b/packages/integration-test/test/utilities/TestFunctions.js index c1bf8c0fb..ecb15ed45 100644 --- a/packages/integration-test/test/utilities/TestFunctions.js +++ b/packages/integration-test/test/utilities/TestFunctions.js @@ -1,22 +1,55 @@ +/* eslint-disable no-console*/ + +const tests = []; +let timeout = null; +let testDescribe = ''; let testDescription = ''; export function describe(description, callback) { - testDescription += testDescription ? ' > ' : ' - '; - testDescription += description; + testDescribe = '- ' + description; callback(); } export function it(description, callback) { - testDescription += testDescription ? ' > ' : ' - '; - testDescription += description; - console.log(testDescription); - const result = callback(() => {}); - if (result instanceof Promise) { - result.catch((error) => { - console.error(testDescription); - console.error(error); - }); - } + testDescription = testDescribe + ' > ' + description; + run(testDescription, callback); +} + +export function run(description, callback) { + tests.push({ + description, + callback + }); + clearTimeout(timeout); + timeout = setTimeout(async () => { + for (const test of tests) { + console.log(test.description); + const callbackString = test.callback.toString(); + const callback = + callbackString.startsWith('()') || callbackString.startsWith('async ()') + ? test.callback + : () => { + return new Promise((resolve) => test.callback(() => resolve())); + }; + const result = callback(); + if (result instanceof Promise) { + const testTimeout = setTimeout(() => { + console.error('Test timed out.'); + process.exit(1); + }, 2000); + try { + await result; + clearTimeout(testTimeout); + } catch (error) { + console.error(error); + process.exit(1); + } + } + } + + console.log(''); + console.log('All tests passed.'); + }, 100); } export function expect(value) { diff --git a/packages/jest-environment/.eslintrc.cjs b/packages/jest-environment/.eslintrc.cjs index a5b589ba7..f4088a566 100644 --- a/packages/jest-environment/.eslintrc.cjs +++ b/packages/jest-environment/.eslintrc.cjs @@ -1 +1 @@ -module.exports = require('happy-dom/.eslintrc'); +module.exports = require('happy-dom/.eslintrc.cjs'); diff --git a/packages/jest-environment/.prettierrc.cjs b/packages/jest-environment/.prettierrc.cjs index ea9e3b599..7b9cd9691 100644 --- a/packages/jest-environment/.prettierrc.cjs +++ b/packages/jest-environment/.prettierrc.cjs @@ -1 +1 @@ -module.exports = require('../happy-dom/.prettierrc.js'); +module.exports = require('../happy-dom/.prettierrc.cjs');