From cea4a30cff9d6a91cf2f98599ecbb5585ef887f9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:04:12 +0000 Subject: [PATCH 1/5] Initial plan From 8cdb20ae91d72a3b94c510bf8c29ead6e7fa7edf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:09:40 +0000 Subject: [PATCH 2/5] chore: rename package from poku-react-testing to @pokujs/react Agent-Logs-Url: https://github.com/Lojhan/poku-react-testing/sessions/9683d7e3-c7ff-4ebc-9926-57cd02c81556 Co-authored-by: Lojhan <47763156+Lojhan@users.noreply.github.com> --- .github/codeql/codeql-config.yml | 2 +- .github/workflows/cd_publish.yml | 2 +- CHANGELOG.md | 14 +- README.md | 16 +- benchmark/REPORT.md | 6 +- benchmark/package-lock.json | 621 ++++++++++++++++--------------- benchmark/package.json | 2 +- benchmark/poku.config.js | 2 +- package-lock.json | 4 +- package.json | 8 +- src/dom-setup-jsdom.ts | 2 +- src/plugin-command.ts | 2 +- src/plugin-metrics.ts | 2 +- src/plugin-setup.ts | 2 +- src/react-testing.ts | 2 +- 15 files changed, 361 insertions(+), 326 deletions(-) diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml index 6e9ccc8..ff1546d 100644 --- a/.github/codeql/codeql-config.yml +++ b/.github/codeql/codeql-config.yml @@ -1,4 +1,4 @@ -name: poku-react-testing-codeql +name: pokujs-react-codeql queries: - uses: security-extended - uses: security-and-quality diff --git a/.github/workflows/cd_publish.yml b/.github/workflows/cd_publish.yml index 2682ba9..305126f 100644 --- a/.github/workflows/cd_publish.yml +++ b/.github/workflows/cd_publish.yml @@ -25,7 +25,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} release-type: node - package-name: poku-react-testing + package-name: '@pokujs/react' - name: โž• Actions - Checkout uses: actions/checkout@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 00e2770..599bdd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,26 +1,26 @@ # Changelog -## [1.2.0](https://github.com/Lojhan/poku-react-testing/compare/v1.1.0...v1.2.0) (2026-04-01) +## [1.2.0](https://github.com/pokujs/react/compare/v1.1.0...v1.2.0) (2026-04-01) ### Features -* refactor plugin internals and stabilize isolation:none ([#8](https://github.com/Lojhan/poku-react-testing/issues/8)) ([cd2d93d](https://github.com/Lojhan/poku-react-testing/commit/cd2d93d41f913c0a581663a8f9e261c2c6574f27)) +* refactor plugin internals and stabilize isolation:none ([#8](https://github.com/pokujs/react/issues/8)) ([cd2d93d](https://github.com/pokujs/react/commit/cd2d93d41f913c0a581663a8f9e261c2c6574f27)) -## [1.1.0](https://github.com/Lojhan/poku-react-testing/compare/v1.0.1...v1.1.0) (2026-03-31) +## [1.1.0](https://github.com/pokujs/react/compare/v1.0.1...v1.1.0) (2026-03-31) ### Features -- optimize react testing runtime and add prettier ([#6](https://github.com/Lojhan/poku-react-testing/issues/6)) ([424194b](https://github.com/Lojhan/poku-react-testing/commit/424194b2c5bdc5f8c3d3c7a41bc91b50d51dd38c)) +- optimize react testing runtime and add prettier ([#6](https://github.com/pokujs/react/issues/6)) ([424194b](https://github.com/pokujs/react/commit/424194b2c5bdc5f8c3d3c7a41bc91b50d51dd38c)) -## [1.0.1](https://github.com/Lojhan/poku-react-testing/compare/v1.0.0...v1.0.1) (2026-03-31) +## [1.0.1](https://github.com/pokujs/react/compare/v1.0.0...v1.0.1) (2026-03-31) ### Bug Fixes -- add repository metadata required for npm provenance ([#4](https://github.com/Lojhan/poku-react-testing/issues/4)) ([f20b16a](https://github.com/Lojhan/poku-react-testing/commit/f20b16a9ab72bb957743c7739a926d0bfb851f68)) +- add repository metadata required for npm provenance ([#4](https://github.com/pokujs/react/issues/4)) ([f20b16a](https://github.com/pokujs/react/commit/f20b16a9ab72bb957743c7739a926d0bfb851f68)) ## 1.0.0 (2026-03-31) ### Bug Fixes -- clarify Deno compatibility guidance in README ([#2](https://github.com/Lojhan/poku-react-testing/issues/2)) ([ee28792](https://github.com/Lojhan/poku-react-testing/commit/ee28792965b9cc9dacc8bee2fc96a5f84088f2d1)) +- clarify Deno compatibility guidance in README ([#2](https://github.com/pokujs/react/issues/2)) ([ee28792](https://github.com/pokujs/react/commit/ee28792965b9cc9dacc8bee2fc96a5f84088f2d1)) diff --git a/README.md b/README.md index 0f1bde7..0732aa4 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,19 @@
Poku's Logo -# poku-react-testing +# @pokujs/react Enjoying **Poku**? [Give him a star to show your support](https://github.com/wellwelwel/poku) ๐ŸŒŸ --- -๐Ÿ“˜ [**Documentation**](https://github.com/Lojhan/poku-react-testing#readme) +๐Ÿ“˜ [**Documentation**](https://github.com/pokujs/react#readme)
--- -๐Ÿงช [**poku-react-testing**](https://github.com/Lojhan/poku-react-testing) is a **Poku** plugin for React component testing with DOM adapters. +๐Ÿงช [**@pokujs/react**](https://github.com/pokujs/react) is a **Poku** plugin for React component testing with DOM adapters. > [!TIP] > @@ -31,7 +31,7 @@ Enjoying **Poku**? [Give him a star to show your support](https://github.com/wel ```bash # Node.js -npm i -D poku-react-testing +npm i -D @pokujs/react ``` @@ -39,7 +39,7 @@ npm i -D poku-react-testing ```bash # Bun -bun add -d poku-react-testing +bun add -d @pokujs/react ``` @@ -47,7 +47,7 @@ bun add -d poku-react-testing ```bash # Deno (optional) -deno add npm:poku-react-testing +deno add npm:@pokujs/react ``` @@ -83,7 +83,7 @@ npm i -D jsdom ```js // poku.config.js import { defineConfig } from 'poku'; -import { reactTestingPlugin } from 'poku-react-testing/plugin'; +import { reactTestingPlugin } from '@pokujs/react/plugin'; export default defineConfig({ plugins: [ @@ -99,7 +99,7 @@ export default defineConfig({ ```tsx // tests/my-component.test.tsx import { afterEach, assert, test } from 'poku'; -import { cleanup, render, screen } from 'poku-react-testing'; +import { cleanup, render, screen } from '@pokujs/react'; afterEach(cleanup); diff --git a/benchmark/REPORT.md b/benchmark/REPORT.md index e38c66a..058ae62 100644 --- a/benchmark/REPORT.md +++ b/benchmark/REPORT.md @@ -29,8 +29,8 @@ Each scenario runs the **same 9 React tests** across 5 test files: | Combination | DOM layer | Assertion style | | --------------------------------- | ------------------------------ | -------------------- | -| poku + poku-react-testing | happy-dom | `assert.strictEqual` | -| poku + poku-react-testing | jsdom | `assert.strictEqual` | +| poku + @pokujs/react | happy-dom | `assert.strictEqual` | +| poku + @pokujs/react | jsdom | `assert.strictEqual` | | jest 29 + @testing-library/react | jsdom (jest-environment-jsdom) | `expect().toBe()` | | vitest 3 + @testing-library/react | jsdom | `expect().toBe()` | | vitest 3 + @testing-library/react | happy-dom | `expect().toBe()` | @@ -94,7 +94,7 @@ Each scenario runs the **same 9 React tests** across 5 test files: ### Interpretation -**poku + poku-react-testing** avoids the multi-process or bundler startup that jest (babel transform +**poku + @pokujs/react** avoids the multi-process or bundler startup that jest (babel transform pipeline) and vitest (Vite + module graph) require. Its architecture โ€” isolated per-file Node.js processes with minimal bootstrap โ€” means cold-start overhead is proportional to the number of test files, not to the framework's own initialization. diff --git a/benchmark/package-lock.json b/benchmark/package-lock.json index 4182dc8..076f824 100644 --- a/benchmark/package-lock.json +++ b/benchmark/package-lock.json @@ -11,6 +11,7 @@ "@babel/core": "^7.29.0", "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", + "@pokujs/react": "file:..", "@testing-library/react": "^16.3.2", "@vitejs/plugin-react": "^4.7.0", "babel-jest": "^30.3.0", @@ -19,15 +20,14 @@ "jest-environment-jsdom": "^30.3.0", "jsdom": "26.1.0", "poku": "4.2.0", - "poku-react-testing": "file:..", "react": "^19.2.4", "react-dom": "^19.2.4", "vitest": "^3.2.4" } }, "..": { - "name": "poku-react-testing", - "version": "1.1.0", + "name": "@pokujs/react", + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { @@ -1730,6 +1730,40 @@ "dev": true, "license": "MIT" }, + "node_modules/@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", @@ -2610,6 +2644,19 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "dev": true, @@ -2630,6 +2677,10 @@ "url": "https://opencollective.com/pkgr" } }, + "node_modules/@pokujs/react": { + "resolved": "..", + "link": true + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", @@ -3055,6 +3106,17 @@ } } }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -3205,6 +3267,34 @@ "dev": true, "license": "ISC" }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, "node_modules/@unrs/resolver-binding-darwin-arm64": { "version": "1.11.1", "cpu": [ @@ -3217,6 +3307,233 @@ "darwin" ] }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@vitejs/plugin-react": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", @@ -4101,18 +4418,6 @@ "node": ">=6" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "dev": true, @@ -5666,280 +5971,6 @@ "node": ">=6" } }, - "node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "dev": true, - "license": "MPL-2.0", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "dev": true, @@ -6372,10 +6403,6 @@ "url": "https://github.com/sponsors/wellwelwel" } }, - "node_modules/poku-react-testing": { - "resolved": "..", - "link": true - }, "node_modules/postcss": { "version": "8.5.8", "dev": true, @@ -7118,6 +7145,14 @@ "node": ">=18" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, "node_modules/type-detect": { "version": "4.0.8", "dev": true, diff --git a/benchmark/package.json b/benchmark/package.json index 1b98bf6..7fe6243 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -21,7 +21,7 @@ "jest-environment-jsdom": "^30.3.0", "jsdom": "26.1.0", "poku": "4.2.0", - "poku-react-testing": "file:..", + "@pokujs/react": "file:..", "react": "^19.2.4", "react-dom": "^19.2.4", "vitest": "^3.2.4" diff --git a/benchmark/poku.config.js b/benchmark/poku.config.js index a2d3d9e..afca985 100644 --- a/benchmark/poku.config.js +++ b/benchmark/poku.config.js @@ -1,5 +1,5 @@ import { defineConfig } from 'poku'; -import { reactTestingPlugin } from 'poku-react-testing/plugin'; +import { reactTestingPlugin } from '@pokujs/react/plugin'; const dom = process.env.POKU_REACT_TEST_DOM; if (!dom) { diff --git a/package-lock.json b/package-lock.json index fad4ae4..f64a774 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "poku-react-testing", + "name": "@pokujs/react", "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "poku-react-testing", + "name": "@pokujs/react", "version": "1.2.0", "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index d9470d0..b560bc8 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "poku-react-testing", + "name": "@pokujs/react", "version": "1.2.0", "private": false, "description": "React testing helpers and Poku plugin for DOM-backed component tests.", @@ -56,11 +56,11 @@ "author": "Lojhan", "repository": { "type": "git", - "url": "https://github.com/Lojhan/poku-react-testing" + "url": "https://github.com/pokujs/react" }, - "homepage": "https://github.com/Lojhan/poku-react-testing#readme", + "homepage": "https://github.com/pokujs/react#readme", "bugs": { - "url": "https://github.com/Lojhan/poku-react-testing/issues" + "url": "https://github.com/pokujs/react/issues" }, "license": "MIT", "publishConfig": { diff --git a/src/dom-setup-jsdom.ts b/src/dom-setup-jsdom.ts index e5e80a3..0bc62a1 100644 --- a/src/dom-setup-jsdom.ts +++ b/src/dom-setup-jsdom.ts @@ -23,7 +23,7 @@ const createJSDOMEnvironment = async () => { mod = await import('jsdom'); } catch { throw new Error( - '[poku-react-testing] DOM adapter "jsdom" requires the "jsdom" package. Install it with "npm install --save-dev jsdom".' + '[@pokujs/react] DOM adapter "jsdom" requires the "jsdom" package. Install it with "npm install --save-dev jsdom".' ); } diff --git a/src/plugin-command.ts b/src/plugin-command.ts index a5d8cda..c516049 100644 --- a/src/plugin-command.ts +++ b/src/plugin-command.ts @@ -60,7 +60,7 @@ export const resolveDomSetupPath = (adapter: ReactDomAdapter | undefined) => { if (!existsSync(customPath)) { throw new Error( - `[poku-react-testing] Custom DOM setup module not found: "${customPath}"\n` + + `[@pokujs/react] Custom DOM setup module not found: "${customPath}"\n` + `Check the "dom.setupModule" option in your poku.config.js.` ); } diff --git a/src/plugin-metrics.ts b/src/plugin-metrics.ts index 1e58bd8..4fbf3e3 100644 --- a/src/plugin-metrics.ts +++ b/src/plugin-metrics.ts @@ -156,6 +156,6 @@ export const printMetricsSummary = (summary: ReactMetricsSummary) => { ` - ${metric.componentName} in ${metric.file}: ${metric.durationMs.toFixed(2)}ms` ); - console.log('\n[poku-react-testing] Slowest component renders'); + console.log('\n[@pokujs/react] Slowest component renders'); for (const line of lines) console.log(line); }; diff --git a/src/plugin-setup.ts b/src/plugin-setup.ts index ec800fc..ae6b625 100644 --- a/src/plugin-setup.ts +++ b/src/plugin-setup.ts @@ -30,7 +30,7 @@ const registerNodeTsxLoader = async () => { return mod.register(); } catch (error) { throw new Error( - '[poku-react-testing] isolation "none" in Node.js requires a working "tsx" installation to load .tsx/.jsx test files.', + '[@pokujs/react] isolation "none" in Node.js requires a working "tsx" installation to load .tsx/.jsx test files.', { cause: error } ); } diff --git a/src/react-testing.ts b/src/react-testing.ts index 8188c2b..d201c28 100644 --- a/src/react-testing.ts +++ b/src/react-testing.ts @@ -72,7 +72,7 @@ type MetricsRuntimeState = { listenersRegistered: boolean; }; -const metricsStateKey = Symbol.for('poku-react-testing.metrics-runtime-state'); +const metricsStateKey = Symbol.for('@pokujs/react.metrics-runtime-state'); type MetricsStateGlobal = typeof globalThis & { [metricsStateKey]?: MetricsRuntimeState; From f4948dcb373d9ff663434fb7479af0ab9322bd9c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:51:27 +0000 Subject: [PATCH 3/5] ci: add NPM_TOKEN validation check to publish step Agent-Logs-Url: https://github.com/pokujs/react/sessions/658d8061-9c07-454c-8266-3c8c33bd8dbb Co-authored-by: Lojhan <47763156+Lojhan@users.noreply.github.com> --- .github/workflows/cd_publish.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cd_publish.yml b/.github/workflows/cd_publish.yml index 305126f..529e991 100644 --- a/.github/workflows/cd_publish.yml +++ b/.github/workflows/cd_publish.yml @@ -63,4 +63,9 @@ jobs: if: ${{ steps.release.outputs.releases_created }} env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - run: npm publish --provenance --access public + run: | + if [ -z "$NODE_AUTH_TOKEN" ]; then + echo "::error::NPM_TOKEN secret is not set. Please configure the NPM_TOKEN secret." + exit 1 + fi + npm publish --provenance --access public From f31e331c05626c53f2c93063dbab3d59199d129c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Apr 2026 14:24:10 +0000 Subject: [PATCH 4/5] chore: remove redundant token check and restore CHANGELOG history Agent-Logs-Url: https://github.com/pokujs/react/sessions/deceeda4-06f8-4768-858c-08b0c42d9496 Co-authored-by: Lojhan <47763156+Lojhan@users.noreply.github.com> --- .github/workflows/cd_publish.yml | 7 +------ CHANGELOG.md | 14 +++++++------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/.github/workflows/cd_publish.yml b/.github/workflows/cd_publish.yml index 529e991..305126f 100644 --- a/.github/workflows/cd_publish.yml +++ b/.github/workflows/cd_publish.yml @@ -63,9 +63,4 @@ jobs: if: ${{ steps.release.outputs.releases_created }} env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - run: | - if [ -z "$NODE_AUTH_TOKEN" ]; then - echo "::error::NPM_TOKEN secret is not set. Please configure the NPM_TOKEN secret." - exit 1 - fi - npm publish --provenance --access public + run: npm publish --provenance --access public diff --git a/CHANGELOG.md b/CHANGELOG.md index 599bdd4..00e2770 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,26 +1,26 @@ # Changelog -## [1.2.0](https://github.com/pokujs/react/compare/v1.1.0...v1.2.0) (2026-04-01) +## [1.2.0](https://github.com/Lojhan/poku-react-testing/compare/v1.1.0...v1.2.0) (2026-04-01) ### Features -* refactor plugin internals and stabilize isolation:none ([#8](https://github.com/pokujs/react/issues/8)) ([cd2d93d](https://github.com/pokujs/react/commit/cd2d93d41f913c0a581663a8f9e261c2c6574f27)) +* refactor plugin internals and stabilize isolation:none ([#8](https://github.com/Lojhan/poku-react-testing/issues/8)) ([cd2d93d](https://github.com/Lojhan/poku-react-testing/commit/cd2d93d41f913c0a581663a8f9e261c2c6574f27)) -## [1.1.0](https://github.com/pokujs/react/compare/v1.0.1...v1.1.0) (2026-03-31) +## [1.1.0](https://github.com/Lojhan/poku-react-testing/compare/v1.0.1...v1.1.0) (2026-03-31) ### Features -- optimize react testing runtime and add prettier ([#6](https://github.com/pokujs/react/issues/6)) ([424194b](https://github.com/pokujs/react/commit/424194b2c5bdc5f8c3d3c7a41bc91b50d51dd38c)) +- optimize react testing runtime and add prettier ([#6](https://github.com/Lojhan/poku-react-testing/issues/6)) ([424194b](https://github.com/Lojhan/poku-react-testing/commit/424194b2c5bdc5f8c3d3c7a41bc91b50d51dd38c)) -## [1.0.1](https://github.com/pokujs/react/compare/v1.0.0...v1.0.1) (2026-03-31) +## [1.0.1](https://github.com/Lojhan/poku-react-testing/compare/v1.0.0...v1.0.1) (2026-03-31) ### Bug Fixes -- add repository metadata required for npm provenance ([#4](https://github.com/pokujs/react/issues/4)) ([f20b16a](https://github.com/pokujs/react/commit/f20b16a9ab72bb957743c7739a926d0bfb851f68)) +- add repository metadata required for npm provenance ([#4](https://github.com/Lojhan/poku-react-testing/issues/4)) ([f20b16a](https://github.com/Lojhan/poku-react-testing/commit/f20b16a9ab72bb957743c7739a926d0bfb851f68)) ## 1.0.0 (2026-03-31) ### Bug Fixes -- clarify Deno compatibility guidance in README ([#2](https://github.com/pokujs/react/issues/2)) ([ee28792](https://github.com/pokujs/react/commit/ee28792965b9cc9dacc8bee2fc96a5f84088f2d1)) +- clarify Deno compatibility guidance in README ([#2](https://github.com/Lojhan/poku-react-testing/issues/2)) ([ee28792](https://github.com/Lojhan/poku-react-testing/commit/ee28792965b9cc9dacc8bee2fc96a5f84088f2d1)) From 6260ad6905758582e669c5808e63f259c9707ba8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Apr 2026 14:32:48 +0000 Subject: [PATCH 5/5] chore: update benchmark files to use @pokujs/react Agent-Logs-Url: https://github.com/pokujs/react/sessions/15e8343c-8ca3-401b-9e46-6f80fb7e4cba Co-authored-by: Lojhan <47763156+Lojhan@users.noreply.github.com> --- benchmark/REPORT.md | 4 ++-- benchmark/run.mjs | 14 +++++++------- benchmark/tests/poku/concurrency.test.jsx | 2 +- benchmark/tests/poku/context.test.jsx | 2 +- benchmark/tests/poku/counter.test.jsx | 2 +- benchmark/tests/poku/hooks.test.jsx | 2 +- benchmark/tests/poku/lifecycle.test.jsx | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/benchmark/REPORT.md b/benchmark/REPORT.md index 058ae62..a2d273e 100644 --- a/benchmark/REPORT.md +++ b/benchmark/REPORT.md @@ -29,8 +29,8 @@ Each scenario runs the **same 9 React tests** across 5 test files: | Combination | DOM layer | Assertion style | | --------------------------------- | ------------------------------ | -------------------- | -| poku + @pokujs/react | happy-dom | `assert.strictEqual` | -| poku + @pokujs/react | jsdom | `assert.strictEqual` | +| poku + @pokujs/react | happy-dom | `assert.strictEqual` | +| poku + @pokujs/react | jsdom | `assert.strictEqual` | | jest 29 + @testing-library/react | jsdom (jest-environment-jsdom) | `expect().toBe()` | | vitest 3 + @testing-library/react | jsdom | `expect().toBe()` | | vitest 3 + @testing-library/react | happy-dom | `expect().toBe()` | diff --git a/benchmark/run.mjs b/benchmark/run.mjs index ae076d3..032c86c 100644 --- a/benchmark/run.mjs +++ b/benchmark/run.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node /** * React Testing Framework Benchmark - * Compares: poku+poku-react-testing vs jest+RTL vs vitest+RTL + * Compares: poku+@pokujs/react vs jest+RTL vs vitest+RTL * * Metrics: wall-clock time, user CPU, sys CPU, peak RSS (macOS /usr/bin/time -l) * Strategy: RUNS per scenario, drop 1 slowest + 1 fastest, report trimmed mean. @@ -35,12 +35,12 @@ const POKU_BIN = join(BENCH, 'node_modules', 'poku', 'lib', 'bin', 'index.js'); // โ”€โ”€โ”€ local build sync โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ /** - * Replace the benchmark's poku-react-testing installation with a clean copy + * Replace the benchmark's @pokujs/react installation with a clean copy * of the local dist/ so that Node resolves react/react-dom from * benchmark/node_modules instead of following a symlink to the workspace root. */ function syncLocalBuild() { - const dest = join(BENCH, 'node_modules', 'poku-react-testing'); + const dest = join(BENCH, 'node_modules', '@pokujs', 'react'); rmSync(dest, { recursive: true, force: true }); mkdirSync(join(dest, 'dist'), { recursive: true }); copyFileSync(join(ROOT, 'package.json'), join(dest, 'package.json')); @@ -267,7 +267,7 @@ if (!existsSync(join(BENCH, 'node_modules', 'poku'))) { // โ”€โ”€โ”€ sync local build โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ if (existsSync(join(ROOT, 'dist'))) { - process.stdout.write(' Syncing local poku-react-testing build... '); + process.stdout.write(' Syncing local @pokujs/react build... '); syncLocalBuild(); process.stdout.write('done\n\n'); } @@ -474,8 +474,8 @@ Each scenario runs the **same 9 React tests** across 5 test files: | Combination | DOM layer | Assertion style | |---|---|---| -| poku + poku-react-testing | happy-dom | \`assert.strictEqual\` | -| poku + poku-react-testing | jsdom | \`assert.strictEqual\` | +| poku + @pokujs/react | happy-dom | \`assert.strictEqual\` | +| poku + @pokujs/react | jsdom | \`assert.strictEqual\` | | jest 29 + @testing-library/react | jsdom (jest-environment-jsdom) | \`expect().toBe()\` | | vitest 3 + @testing-library/react | jsdom | \`expect().toBe()\` | | vitest 3 + @testing-library/react | happy-dom | \`expect().toBe()\` | @@ -557,7 +557,7 @@ ${results ### Interpretation -**poku + poku-react-testing** avoids the multi-process or bundler startup that jest (babel transform +**poku + @pokujs/react** avoids the multi-process or bundler startup that jest (babel transform pipeline) and vitest (Vite + module graph) require. Its architecture โ€” isolated per-file Node.js processes with minimal bootstrap โ€” means cold-start overhead is proportional to the number of test files, not to the framework's own initialization. diff --git a/benchmark/tests/poku/concurrency.test.jsx b/benchmark/tests/poku/concurrency.test.jsx index cb15731..dea6f4a 100644 --- a/benchmark/tests/poku/concurrency.test.jsx +++ b/benchmark/tests/poku/concurrency.test.jsx @@ -1,5 +1,5 @@ import { afterEach, assert, test } from 'poku'; -import { cleanup, fireEvent, render, screen } from 'poku-react-testing'; +import { cleanup, fireEvent, render, screen } from '@pokujs/react'; import React, { Suspense, use, useState, useTransition } from 'react'; afterEach(cleanup); diff --git a/benchmark/tests/poku/context.test.jsx b/benchmark/tests/poku/context.test.jsx index 3d37996..b89e70e 100644 --- a/benchmark/tests/poku/context.test.jsx +++ b/benchmark/tests/poku/context.test.jsx @@ -1,5 +1,5 @@ import { afterEach, assert, test } from 'poku'; -import { cleanup, render, screen } from 'poku-react-testing'; +import { cleanup, render, screen } from '@pokujs/react'; import React, { createContext, useContext } from 'react'; afterEach(cleanup); diff --git a/benchmark/tests/poku/counter.test.jsx b/benchmark/tests/poku/counter.test.jsx index 8e77616..6188b4d 100644 --- a/benchmark/tests/poku/counter.test.jsx +++ b/benchmark/tests/poku/counter.test.jsx @@ -1,5 +1,5 @@ import { afterEach, assert, test } from 'poku'; -import { cleanup, fireEvent, render, screen } from 'poku-react-testing'; +import { cleanup, fireEvent, render, screen } from '@pokujs/react'; import React, { useState } from 'react'; afterEach(cleanup); diff --git a/benchmark/tests/poku/hooks.test.jsx b/benchmark/tests/poku/hooks.test.jsx index a945d6b..47104a3 100644 --- a/benchmark/tests/poku/hooks.test.jsx +++ b/benchmark/tests/poku/hooks.test.jsx @@ -5,7 +5,7 @@ import { render, renderHook, screen, -} from 'poku-react-testing'; +} from '@pokujs/react'; import React, { useMemo, useState } from 'react'; afterEach(cleanup); diff --git a/benchmark/tests/poku/lifecycle.test.jsx b/benchmark/tests/poku/lifecycle.test.jsx index 423c3a9..f53598f 100644 --- a/benchmark/tests/poku/lifecycle.test.jsx +++ b/benchmark/tests/poku/lifecycle.test.jsx @@ -1,5 +1,5 @@ import { afterEach, assert, test } from 'poku'; -import { cleanup, render, screen } from 'poku-react-testing'; +import { cleanup, render, screen } from '@pokujs/react'; import React, { useEffect } from 'react'; afterEach(cleanup);