Skip to content

Commit 84df208

Browse files
bvaughnAndarist
andauthored
Make module ESM only; replace Jest with Vitest (#478)
Builds on top of #474; special thanks to @Andarist for putting this branch together! --------- Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com>
1 parent 96a4c5b commit 84df208

24 files changed

Lines changed: 1475 additions & 2493 deletions
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: "Jest"
1+
name: "Vitest"
22
on: [pull_request]
33
jobs:
44
tests-e2e:
@@ -13,5 +13,7 @@ jobs:
1313
run: pnpm install --frozen-lockfile --recursive
1414
- name: Build NPM packages
1515
run: pnpm run prerelease
16-
- name: Run tests
17-
run: cd packages/react-resizable-panels && pnpm run test
16+
- name: Run browser tests
17+
run: cd packages/react-resizable-panels && pnpm run test:browser
18+
- name: Run node tests
19+
run: cd packages/react-resizable-panels && pnpm run test:node

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@
2525
"devDependencies": {
2626
"@babel/preset-typescript": "^7.22.5",
2727
"@playwright/test": "^1.37.0",
28-
"@types/jest": "^29.5.3",
29-
"@types/node": "^18.17.5",
28+
"@types/node": "^22.15.3",
3029
"@types/react": "latest",
3130
"@types/react-dom": "latest",
3231
"@typescript-eslint/eslint-plugin": "^5.62.0",
@@ -36,8 +35,7 @@
3635
"parcel": "^2.9.3",
3736
"prettier": "latest",
3837
"process": "^0.11.10",
39-
"ts-jest": "^29.1.1",
40-
"typescript": "^5.1.6"
38+
"typescript": "^5.8.3"
4139
},
4240
"dependencies": {
4341
"@parcel/config-default": "^2.9.3",
@@ -46,7 +44,7 @@
4644
"@parcel/transformer-js": "^2.9.3",
4745
"@parcel/transformer-react-refresh-wrap": "^2.9.3",
4846
"@parcel/transformer-typescript-types": "^2.9.3",
49-
"@preconstruct/cli": "^2.8.1"
47+
"@preconstruct/cli": "^2.8.12"
5048
},
5149
"preconstruct": {
5250
"packages": [
@@ -56,7 +54,9 @@
5654
"importConditionDefaultExport": "default"
5755
},
5856
"___experimentalFlags_WILL_CHANGE_IN_PATCH": {
59-
"importsConditions": true
57+
"distInRoot": true,
58+
"importsConditions": true,
59+
"typeModule": true
6060
}
6161
},
6262
"@parcel/resolver-default": {

packages/react-resizable-panels/jest.config.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

packages/react-resizable-panels/package.json

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"name": "react-resizable-panels",
33
"version": "2.1.9",
4+
"type": "module",
45
"description": "React components for resizable panel groups/layouts",
56
"author": "Brian Vaughn <brian.david.vaughn@gmail.com>",
67
"license": "MIT",
@@ -9,8 +10,6 @@
910
"url": "git+https://github.com/bvaughn/react-resizable-panels.git"
1011
},
1112
"source": "src/index.ts",
12-
"main": "dist/react-resizable-panels.cjs.js",
13-
"module": "dist/react-resizable-panels.esm.js",
1413
"files": [
1514
"dist",
1615
"package.json",
@@ -19,38 +18,15 @@
1918
],
2019
"exports": {
2120
".": {
22-
"types": {
23-
"import": "./dist/react-resizable-panels.cjs.mjs",
24-
"default": "./dist/react-resizable-panels.cjs.js"
25-
},
21+
"types": "./dist/react-resizable-panels.js",
2622
"development": {
27-
"browser": {
28-
"module": "./dist/react-resizable-panels.browser.development.esm.js",
29-
"import": "./dist/react-resizable-panels.browser.development.cjs.mjs",
30-
"default": "./dist/react-resizable-panels.browser.development.cjs.js"
31-
},
32-
"node": {
33-
"module": "./dist/react-resizable-panels.development.node.esm.js",
34-
"import": "./dist/react-resizable-panels.development.node.cjs.mjs",
35-
"default": "./dist/react-resizable-panels.development.node.cjs.js"
36-
},
37-
"module": "./dist/react-resizable-panels.development.esm.js",
38-
"import": "./dist/react-resizable-panels.development.cjs.mjs",
39-
"default": "./dist/react-resizable-panels.development.cjs.js"
40-
},
41-
"browser": {
42-
"module": "./dist/react-resizable-panels.browser.esm.js",
43-
"import": "./dist/react-resizable-panels.browser.cjs.mjs",
44-
"default": "./dist/react-resizable-panels.browser.cjs.js"
45-
},
46-
"node": {
47-
"module": "./dist/react-resizable-panels.node.esm.js",
48-
"import": "./dist/react-resizable-panels.node.cjs.mjs",
49-
"default": "./dist/react-resizable-panels.node.cjs.js"
23+
"browser": "./dist/react-resizable-panels.browser.development.js",
24+
"node": "./dist/react-resizable-panels.development.node.js",
25+
"default": "./dist/react-resizable-panels.development.js"
5026
},
51-
"module": "./dist/react-resizable-panels.esm.js",
52-
"import": "./dist/react-resizable-panels.cjs.mjs",
53-
"default": "./dist/react-resizable-panels.cjs.js"
27+
"browser": "./dist/react-resizable-panels.browser.js",
28+
"node": "./dist/react-resizable-panels.node.js",
29+
"default": "./dist/react-resizable-panels.js"
5430
},
5531
"./package.json": "./package.json"
5632
},
@@ -71,19 +47,21 @@
7147
"clear:builds": "rm -rf ./packages/*/dist",
7248
"clear:node_modules": "rm -rf ./node_modules",
7349
"lint": "eslint \"src/**/*.{ts,tsx}\"",
74-
"test": "jest --config=jest.config.js",
75-
"test:watch": "jest --config=jest.config.js --watch",
50+
"test:browser": "vitest",
51+
"test:node": "vitest -c vitest.node.config.ts",
7652
"watch": "parcel watch --port=2345"
7753
},
7854
"devDependencies": {
7955
"@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
8056
"@babel/plugin-proposal-optional-chaining": "7.21.0",
57+
"@vitest/ui": "^3.1.2",
8158
"eslint": "^8.37.0",
8259
"eslint-plugin-react-hooks": "^4.6.0",
83-
"jest": "^29.7.0",
84-
"jest-environment-jsdom": "^29.7.0",
60+
"jsdom": "^26.1.0",
8561
"react": "experimental",
86-
"react-dom": "experimental"
62+
"react-dom": "experimental",
63+
"save-dev": "0.0.1-security",
64+
"vitest": "^3.1.2"
8765
},
8866
"peerDependencies": {
8967
"react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
2+
import { renderToStaticMarkup } from "react-dom/server";
3+
import { act } from "react-dom/test-utils";
4+
import { Panel } from "./Panel";
5+
import { PanelGroup } from "./PanelGroup";
6+
import { PanelResizeHandle } from "./PanelResizeHandle";
7+
8+
describe("PanelGroup", () => {
9+
let expectedWarnings: string[] = [];
10+
11+
function expectWarning(expectedMessage: string) {
12+
expectedWarnings.push(expectedMessage);
13+
}
14+
15+
beforeEach(() => {
16+
// @ts-expect-error
17+
global.IS_REACT_ACT_ENVIRONMENT = true;
18+
19+
expectedWarnings = [];
20+
21+
vi.spyOn(console, "warn").mockImplementation((actualMessage: string) => {
22+
const match = expectedWarnings.findIndex((expectedMessage) => {
23+
return actualMessage.includes(expectedMessage);
24+
});
25+
26+
if (match >= 0) {
27+
expectedWarnings.splice(match, 1);
28+
return;
29+
}
30+
31+
throw Error(`Unexpected warning: ${actualMessage}`);
32+
});
33+
});
34+
35+
afterEach(() => {
36+
vi.clearAllMocks();
37+
expect(expectedWarnings).toHaveLength(0);
38+
});
39+
40+
describe("DEV warnings", () => {
41+
test("should warn about server rendered panels with no default size", () => {
42+
act(() => {
43+
// No warning expected if default sizes provided
44+
renderToStaticMarkup(
45+
<PanelGroup direction="horizontal">
46+
<Panel defaultSize={100} />
47+
<PanelResizeHandle />
48+
<Panel defaultSize={1_000} />
49+
</PanelGroup>
50+
);
51+
});
52+
53+
expectWarning(
54+
"Panel defaultSize prop recommended to avoid layout shift after server rendering"
55+
);
56+
57+
act(() => {
58+
renderToStaticMarkup(
59+
<PanelGroup direction="horizontal">
60+
<Panel id="one" />
61+
</PanelGroup>
62+
);
63+
});
64+
});
65+
});
66+
});

0 commit comments

Comments
 (0)