From 8c38a93c19b06d0f5de46272f3739d856fced758 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 8 May 2024 13:06:07 +0900 Subject: [PATCH] chore: replace jsdom with happy-dom (#248) --- package.json | 1 + packages/tiny-react/vitest.config.ts | 2 +- packages/tiny-refresh/src/runtime.test.tsx | 2 +- packages/tiny-store/vitest.config.ts | 2 +- packages/utils-react/package.json | 1 - packages/utils-react/src/index.test.tsx | 30 +++--- packages/utils-react/vitest.config.ts | 2 +- pnpm-lock.yaml | 115 +++++++++++++-------- 8 files changed, 91 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index e41a6797..5010ddd8 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@types/node": "^20.11.19", "@vitest/ui": "^1.3.1", "esbuild": "^0.20.0", + "happy-dom": "^14.10.1", "tsup": "^8.0.2", "tsx": "^4.7.1", "typedoc": "^0.25.8", diff --git a/packages/tiny-react/vitest.config.ts b/packages/tiny-react/vitest.config.ts index 894882d9..cb148d74 100644 --- a/packages/tiny-react/vitest.config.ts +++ b/packages/tiny-react/vitest.config.ts @@ -4,7 +4,7 @@ import { defineConfig } from "vitest/config"; export default defineConfig({ test: { dir: "src", - environment: "jsdom", + environment: "happy-dom", alias: { "@hiogawa/tiny-react/jsx-dev-runtime": resolve( "src/helper/jsx-runtime.ts" diff --git a/packages/tiny-refresh/src/runtime.test.tsx b/packages/tiny-refresh/src/runtime.test.tsx index c391214b..5e374f25 100644 --- a/packages/tiny-refresh/src/runtime.test.tsx +++ b/packages/tiny-refresh/src/runtime.test.tsx @@ -1,4 +1,4 @@ -// @vitest-environment jsdom +// @vitest-environment happy-dom import { act, cleanup, render } from "@testing-library/react"; import React from "react"; diff --git a/packages/tiny-store/vitest.config.ts b/packages/tiny-store/vitest.config.ts index 9f6250a3..d22e699c 100644 --- a/packages/tiny-store/vitest.config.ts +++ b/packages/tiny-store/vitest.config.ts @@ -2,6 +2,6 @@ import { defineConfig } from "vitest/config"; export default defineConfig({ test: { - environment: "jsdom", + environment: "happy-dom", }, }); diff --git a/packages/utils-react/package.json b/packages/utils-react/package.json index 90e79987..c07267ae 100644 --- a/packages/utils-react/package.json +++ b/packages/utils-react/package.json @@ -31,7 +31,6 @@ "@testing-library/user-event": "^14.4.3", "@types/react": "^18.2.14", "@types/react-test-renderer": "^18.0.0", - "jsdom": "^22.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-test-renderer": "^18.2.0" diff --git a/packages/utils-react/src/index.test.tsx b/packages/utils-react/src/index.test.tsx index 078b334f..06aad4d3 100644 --- a/packages/utils-react/src/index.test.tsx +++ b/packages/utils-react/src/index.test.tsx @@ -247,17 +247,17 @@ describe(useMergeRefs, () => { render(); expect(fn.mock.calls.map((c) => c.join(":"))).toMatchInlineSnapshot(` [ - "inner-none:fun:[object HTMLElement]", - "inner-mut:fun:[object HTMLElement]", - "inner-fun:fun:[object HTMLElement]", - "outer-fun:[object HTMLElement]", - "inner-none:mut:[object HTMLElement]", + "inner-none:fun:
", + "inner-mut:fun:
", + "inner-fun:fun:
", + "outer-fun:
", + "inner-none:mut:
", "inner-none:forwarded:", - "inner-mut:mut:[object HTMLElement]", + "inner-mut:mut:
", "inner-mut:forwarded:[object Object]", - "inner-fun:mut:[object HTMLElement]", + "inner-fun:mut:
", "inner-fun:forwarded:(el) => fn("outer-fun", el)", - "outer-mut:[object HTMLElement]", + "outer-mut:
", ] `); fn.mockReset(); @@ -274,15 +274,15 @@ describe(useMergeRefs, () => { await userEvent.click(screen.getByRole("button")); expect(fn.mock.calls.map((c) => c.join(":"))).toMatchInlineSnapshot(` [ - "inner-none:fun:[object HTMLElement]", - "inner-mut:fun:[object HTMLElement]", - "inner-fun:fun:[object HTMLElement]", - "outer-fun:[object HTMLElement]", - "inner-none:mut:[object HTMLElement]", + "inner-none:fun:
", + "inner-mut:fun:
", + "inner-fun:fun:
", + "outer-fun:
", + "inner-none:mut:
", "inner-none:forwarded:", - "inner-mut:mut:[object HTMLElement]", + "inner-mut:mut:
", "inner-mut:forwarded:[object Object]", - "inner-fun:mut:[object HTMLElement]", + "inner-fun:mut:
", "inner-fun:forwarded:(el) => fn("outer-fun", el)", ] `); diff --git a/packages/utils-react/vitest.config.ts b/packages/utils-react/vitest.config.ts index 9f6250a3..d22e699c 100644 --- a/packages/utils-react/vitest.config.ts +++ b/packages/utils-react/vitest.config.ts @@ -2,6 +2,6 @@ import { defineConfig } from "vitest/config"; export default defineConfig({ test: { - environment: "jsdom", + environment: "happy-dom", }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ba2099f..5630d663 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: esbuild: specifier: ^0.20.0 version: 0.20.0 + happy-dom: + specifier: ^14.10.1 + version: 14.10.1 tsup: specifier: ^8.0.2 version: 8.0.2(@swc/core@1.3.95)(postcss@8.4.35)(typescript@5.3.3) @@ -58,7 +61,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.19)(@vitest/ui@1.3.1)(jsdom@22.1.0) + version: 1.3.1(@types/node@20.11.19)(@vitest/ui@1.3.1)(happy-dom@14.10.1)(jsdom@22.1.0) packages/changelog: devDependencies: @@ -528,9 +531,6 @@ importers: '@types/react-test-renderer': specifier: ^18.0.0 version: 18.0.0 - jsdom: - specifier: ^22.1.0 - version: 22.1.0 react: specifier: ^18.2.0 version: 18.2.0 @@ -1543,6 +1543,7 @@ packages: abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -1853,6 +1854,7 @@ packages: domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -2065,6 +2067,10 @@ packages: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} + happy-dom@14.10.1: + resolution: {integrity: sha512-GRbrZYIezi8+tTtffF4v2QcF8bk1h2loUTO5VYQz3GZdrL08Vk0fI+bwf/vFEBf4C/qVf/easLJ/MY1wwdhytA==} + engines: {node: '>=16.0.0'} + has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -2628,10 +2634,6 @@ packages: pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3160,18 +3162,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.16.0: resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'} @@ -3885,7 +3875,8 @@ snapshots: dependencies: '@testing-library/dom': 9.3.4 - '@tootallnate/once@2.0.0': {} + '@tootallnate/once@2.0.0': + optional: true '@trpc/client@10.33.0(@trpc/server@10.33.0)': dependencies: @@ -4159,7 +4150,7 @@ snapshots: pathe: 1.1.2 picocolors: 1.0.0 sirv: 2.0.4 - vitest: 1.3.1(@types/node@20.11.19)(@vitest/ui@1.3.1)(jsdom@22.1.0) + vitest: 1.3.1(@types/node@20.11.19)(@vitest/ui@1.3.1)(happy-dom@14.10.1)(jsdom@22.1.0) '@vitest/utils@1.3.1': dependencies: @@ -4168,7 +4159,8 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - abab@2.0.6: {} + abab@2.0.6: + optional: true accepts@1.3.8: dependencies: @@ -4186,6 +4178,7 @@ snapshots: debug: 4.3.4 transitivePeerDependencies: - supports-color + optional: true ansi-regex@5.0.1: {} @@ -4227,7 +4220,8 @@ snapshots: assertion-error@1.1.0: {} - asynckit@0.4.0: {} + asynckit@0.4.0: + optional: true available-typed-arrays@1.0.5: {} @@ -4363,6 +4357,7 @@ snapshots: combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + optional: true commander@4.1.1: {} @@ -4398,6 +4393,7 @@ snapshots: cssstyle@3.0.0: dependencies: rrweb-cssom: 0.6.0 + optional: true csstype@3.1.2: {} @@ -4406,6 +4402,7 @@ snapshots: abab: 2.0.6 whatwg-mimetype: 3.0.0 whatwg-url: 12.0.1 + optional: true debug@2.6.9: dependencies: @@ -4415,7 +4412,8 @@ snapshots: dependencies: ms: 2.1.2 - decimal.js@10.4.3: {} + decimal.js@10.4.3: + optional: true decompress-response@6.0.0: dependencies: @@ -4455,7 +4453,8 @@ snapshots: defu@6.1.4: {} - delayed-stream@1.0.0: {} + delayed-stream@1.0.0: + optional: true depd@2.0.0: {} @@ -4478,6 +4477,7 @@ snapshots: domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 + optional: true duplexer@0.1.2: {} @@ -4708,6 +4708,7 @@ snapshots: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + optional: true forwarded@0.2.0: {} @@ -4783,6 +4784,12 @@ snapshots: dependencies: duplexer: 0.1.2 + happy-dom@14.10.1: + dependencies: + entities: 4.5.0 + webidl-conversions: 7.0.0 + whatwg-mimetype: 3.0.0 + has-bigints@1.0.2: {} has-flag@3.0.0: {} @@ -4808,6 +4815,7 @@ snapshots: html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 + optional: true http-errors@2.0.0: dependencies: @@ -4824,6 +4832,7 @@ snapshots: debug: 4.3.4 transitivePeerDependencies: - supports-color + optional: true https-proxy-agent@5.0.1: dependencies: @@ -4831,6 +4840,7 @@ snapshots: debug: 4.3.4 transitivePeerDependencies: - supports-color + optional: true human-signals@2.1.0: {} @@ -4843,6 +4853,7 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true ieee754@1.2.1: {} @@ -4906,7 +4917,8 @@ snapshots: is-number@7.0.0: {} - is-potential-custom-element-name@1.0.1: {} + is-potential-custom-element-name@1.0.1: + optional: true is-regex@1.1.4: dependencies: @@ -4989,12 +5001,13 @@ snapshots: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 12.0.1 - ws: 8.13.0 + ws: 8.16.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + optional: true jsesc@2.5.2: {} @@ -5144,7 +5157,8 @@ snapshots: dependencies: path-key: 4.0.0 - nwsapi@2.2.5: {} + nwsapi@2.2.5: + optional: true object-assign@4.1.1: {} @@ -5201,6 +5215,7 @@ snapshots: parse5@7.1.2: dependencies: entities: 4.5.0 + optional: true parseurl@1.3.3: {} @@ -5294,15 +5309,14 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - psl@1.9.0: {} + psl@1.9.0: + optional: true pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - punycode@2.3.0: {} - punycode@2.3.1: {} pure-rand@6.0.2: {} @@ -5311,7 +5325,8 @@ snapshots: dependencies: side-channel: 1.0.4 - querystringify@2.2.0: {} + querystringify@2.2.0: + optional: true queue-microtask@1.2.3: {} @@ -5378,7 +5393,8 @@ snapshots: define-properties: 1.2.0 functions-have-names: 1.2.3 - requires-port@1.0.0: {} + requires-port@1.0.0: + optional: true resolve-from@5.0.0: {} @@ -5405,7 +5421,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.12.0 fsevents: 2.3.3 - rrweb-cssom@0.6.0: {} + rrweb-cssom@0.6.0: + optional: true run-parallel@1.2.0: dependencies: @@ -5418,6 +5435,7 @@ snapshots: saxes@6.0.0: dependencies: xmlchars: 2.2.0 + optional: true scheduler@0.23.0: dependencies: @@ -5571,7 +5589,8 @@ snapshots: dependencies: has-flag: 4.0.0 - symbol-tree@3.2.4: {} + symbol-tree@3.2.4: + optional: true tar-fs@2.1.1: dependencies: @@ -5615,9 +5634,10 @@ snapshots: tough-cookie@4.1.3: dependencies: psl: 1.9.0 - punycode: 2.3.0 + punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + optional: true tr46@1.0.1: dependencies: @@ -5625,7 +5645,8 @@ snapshots: tr46@4.1.1: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 + optional: true tree-kill@1.2.2: {} @@ -5698,7 +5719,8 @@ snapshots: undici-types@5.26.5: {} - universalify@0.2.0: {} + universalify@0.2.0: + optional: true unocss@0.58.5(postcss@8.4.35)(rollup@4.12.0)(vite@5.1.3(@types/node@20.11.19)): dependencies: @@ -5741,6 +5763,7 @@ snapshots: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + optional: true util-deprecate@1.0.2: {} @@ -5774,7 +5797,7 @@ snapshots: '@types/node': 20.11.19 fsevents: 2.3.3 - vitest@1.3.1(@types/node@20.11.19)(@vitest/ui@1.3.1)(jsdom@22.1.0): + vitest@1.3.1(@types/node@20.11.19)(@vitest/ui@1.3.1)(happy-dom@14.10.1)(jsdom@22.1.0): dependencies: '@vitest/expect': 1.3.1 '@vitest/runner': 1.3.1 @@ -5799,6 +5822,7 @@ snapshots: optionalDependencies: '@types/node': 20.11.19 '@vitest/ui': 1.3.1(vitest@1.3.1) + happy-dom: 14.10.1 jsdom: 22.1.0 transitivePeerDependencies: - less @@ -5816,6 +5840,7 @@ snapshots: w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 + optional: true webidl-conversions@4.0.2: {} @@ -5824,6 +5849,7 @@ snapshots: whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 + optional: true whatwg-mimetype@3.0.0: {} @@ -5831,6 +5857,7 @@ snapshots: dependencies: tr46: 4.1.1 webidl-conversions: 7.0.0 + optional: true whatwg-url@7.1.0: dependencies: @@ -5885,13 +5912,13 @@ snapshots: wrappy@1.0.2: {} - ws@8.13.0: {} - ws@8.16.0: {} - xml-name-validator@4.0.0: {} + xml-name-validator@4.0.0: + optional: true - xmlchars@2.2.0: {} + xmlchars@2.2.0: + optional: true yallist@3.1.1: {}