Skip to content

Commit f1fb8dd

Browse files
authored
ci: use specific dependencies for different Svelte/Node versions (#436)
1 parent 6096f05 commit f1fb8dd

File tree

12 files changed

+153
-63
lines changed

12 files changed

+153
-63
lines changed

.github/workflows/release.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@ jobs:
7575
- name: ⎔ Setup node
7676
uses: actions/setup-node@v4
7777
with:
78-
node-version: 20
78+
node-version: 22
7979

8080
- name: 📥 Download deps
81-
run: npm install --no-package-lock
81+
run: npm install
8282

8383
- name: 🏗️ Build types
8484
run: npm run build
@@ -102,7 +102,7 @@ jobs:
102102
- name: ⎔ Setup node
103103
uses: actions/setup-node@v4
104104
with:
105-
node-version: 20
105+
node-version: 22
106106

107107
- name: 📥 Downloads types build
108108
uses: actions/download-artifact@v4

.npmrc

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
package-lock=false
2+
engine-strict=true

CONTRIBUTING.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,24 @@ npm run preview-release
2828

2929
## Development setup
3030

31-
After cloning the repository, install the project's dependencies and run the `validate` script to run all checks and tests to verify your setup.
31+
After cloning the repository, use the `setup` script to install dependencies and run all checks:
3232

3333
```shell
34-
npm install # or `pnpm install`, or `yarn install`, etc.
35-
npm run validate
34+
npm run setup
3635
```
3736

3837
### Lint and format
3938

4039
Run auto-formatting to ensure any changes adhere to the code style of the repository:
4140

4241
```shell
43-
npm run format:delta
42+
npm run format
4443
```
4544

4645
To run lint and format checks without making any changes:
4746

4847
```shell
49-
npm run lint:delta
48+
npm run lint
5049
```
5150

5251
### Test
@@ -63,18 +62,19 @@ npm run test:watch
6362
Use the provided script to set up your environment for different versions of Svelte:
6463

6564
```shell
66-
# install Svelte 5
65+
# Svelte 5
6766
npm run install:5
67+
npm run all
6868

69-
# install Svelte 4
69+
# Svelte 4
7070
npm run install:4
71+
npm run all:legacy
7172

72-
# install Svelte 3
73+
# Svelte 3
7374
npm run install:3
75+
npm run all:legacy
7476
```
7577

76-
Not all checks will pass on `svelte<5`. Reference the CI workflows to see which checks are expected to pass on older versions.
77-
7878
### Docs
7979

8080
Use the `toc` script to ensure the README's table of contents is up to date:

package.json

+17-24
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,18 @@
5353
],
5454
"scripts": {
5555
"all": "npm-run-all contributors:generate toc format types build test:vitest:* test:jest",
56+
"all:legacy": "npm-run-all types:legacy test:vitest:* test:jest",
5657
"toc": "doctoc README.md",
5758
"lint": "prettier . --check && eslint .",
58-
"lint:delta": "npm-run-all -p prettier:delta eslint:delta",
59-
"prettier:delta": "prettier --check `./scripts/changed-files`",
60-
"eslint:delta": "eslint `./scripts/changed-files`",
6159
"format": "prettier . --write && eslint . --fix",
62-
"format:delta": "npm-run-all format:prettier:delta format:eslint:delta",
63-
"format:prettier:delta": "prettier --write `./scripts/changed-files`",
64-
"format:eslint:delta": "eslint --fix `./scripts/changed-files`",
65-
"setup": "npm install && npm run all",
60+
"setup": "npm run install:5 && npm run all",
6661
"test": "vitest run --coverage",
6762
"test:watch": "vitest",
6863
"test:vitest:jsdom": "vitest run --coverage --environment jsdom",
6964
"test:vitest:happy-dom": "vitest run --coverage --environment happy-dom",
7065
"test:jest": "npx --node-options=\"--experimental-vm-modules --no-warnings\" jest --coverage",
7166
"types": "svelte-check",
7267
"types:legacy": "svelte-check --tsconfig tsconfig.legacy.json",
73-
"validate": "npm-run-all test:vitest:* test:jest types build",
7468
"build": "tsc -p tsconfig.build.json && cp src/component-types.d.ts types",
7569
"contributors:add": "all-contributors add",
7670
"contributors:generate": "all-contributors generate",
@@ -93,19 +87,18 @@
9387
}
9488
},
9589
"dependencies": {
96-
"@testing-library/dom": "^10.0.0"
90+
"@testing-library/dom": "9.x.x || 10.x.x"
9791
},
9892
"devDependencies": {
9993
"@jest/globals": "^29.7.0",
100-
"@sveltejs/vite-plugin-svelte": "^2.0.0 || ^3.0.0 || ^4.0.0",
101-
"@testing-library/jest-dom": "^6.3.0",
102-
"@testing-library/user-event": "^14.5.2",
94+
"@sveltejs/vite-plugin-svelte": "^5.0.3",
95+
"@testing-library/jest-dom": "^6.6.3",
96+
"@testing-library/user-event": "^14.6.1",
10397
"@typescript-eslint/eslint-plugin": "^8.0.0",
10498
"@typescript-eslint/parser": "^8.0.0",
105-
"@vitest/coverage-v8": "0.x.x || ^1.0.0 || ^2.0.2",
99+
"@vitest/coverage-v8": "^3.1.3",
106100
"all-contributors-cli": "^6.26.1",
107101
"doctoc": "^2.2.1",
108-
"esbuild": "*",
109102
"eslint": "^8.57.0",
110103
"eslint-config-prettier": "^9.1.0",
111104
"eslint-config-standard": "^17.1.0",
@@ -114,20 +107,20 @@
114107
"eslint-plugin-promise": "^6.4.0",
115108
"eslint-plugin-simple-import-sort": "^12.1.1",
116109
"eslint-plugin-svelte": "^2.42.0",
117-
"expect-type": "^1.1.0",
118-
"happy-dom": "^16.3.0",
110+
"expect-type": "^1.2.1",
111+
"happy-dom": "^17.4.6",
119112
"jest": "^29.7.0",
120113
"jest-environment-jsdom": "^29.7.0",
121-
"jsdom": "^25.0.0",
114+
"jsdom": "^26.1.0",
122115
"npm-run-all": "^4.1.5",
123-
"prettier": "^3.3.3",
124-
"prettier-plugin-svelte": "^3.2.5",
125-
"svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0",
126-
"svelte-check": "^3.0.0 || ^4.0.4",
116+
"prettier": "^3.5.3",
117+
"prettier-plugin-svelte": "^3.3.3",
118+
"svelte": "^5.28.2",
119+
"svelte-check": "^4.1.7",
127120
"svelte-jester": "^5.0.0",
128-
"typescript": "^5.5.3",
121+
"typescript": "^5.8.3",
129122
"typescript-svelte-plugin": "^0.3.46",
130-
"vite": "^4.0.0 || ^5.3.3",
131-
"vitest": "0.x.x || ^1.0.0 || ^2.0.2"
123+
"vite": "^6.3.5",
124+
"vitest": "^3.1.3"
132125
}
133126
}

scripts/changed-files

-3
This file was deleted.

scripts/install-dependencies

+24-20
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,34 @@
22
# Install dependencies for a given version of Svelte
33
set -euxo pipefail
44

5-
svelte_version=${1}
6-
node_version=$(node --version)
5+
svelte_version="${1-}"
6+
node_version=$(node --version | sed 's/^v\([0-9]*\).*/\1/')
7+
env_dir="tests/envs/svelte$svelte_version"
8+
env_dir_by_node="$env_dir/node$node_version"
79

8-
rm -rf node_modules
9-
npm install --no-package-lock
10-
11-
if [[ "${svelte_version}" == "3" ]]; then
12-
npm uninstall --no-save vite vitest @vitest/coverage-v8 @sveltejs/vite-plugin-svelte svelte-check svelte
13-
npm install --no-save vite@4 [email protected] @vitest/[email protected] @sveltejs/vite-plugin-svelte@2 svelte-check@3 svelte@3
14-
elif [[ "${svelte_version}" == "4" ]]; then
15-
npm uninstall --no-save @sveltejs/vite-plugin-svelte svelte
16-
npm install --no-save @sveltejs/vite-plugin-svelte@3 svelte@4
10+
if [[ -d $env_dir_by_node ]]; then
11+
env_dir="$env_dir_by_node"
1712
fi
1813

19-
if [[ "${node_version}" =~ "v16" ]]; then
20-
npm uninstall --no-save vite vitest @vitest/coverage-v8 @sveltejs/vite-plugin-svelte
21-
npm install --no-save vite@4 [email protected] @vitest/[email protected] @sveltejs/vite-plugin-svelte@2
14+
if [[ "$svelte_version" == "5" ]]; then
15+
rm -rf coverage node_modules
16+
npm install
17+
exit 0
2218
fi
2319

24-
npm dedupe
25-
installed_version=$(npm ls --depth=0 --parseable svelte@${svelte_version})
26-
27-
if [[ -z "${installed_version}" ]]; then
28-
echo "Error: expected svelte@${svelte_version}"
29-
npm ls --depth=0 svelte
20+
if [[ -z "$svelte_version" ]]; then
21+
echo "Invalid usage: missing Svelte version" >&2;
3022
exit 1
3123
fi
24+
25+
if [[ ! -d "$env_dir" ]]; then
26+
echo "Error: package.json for Svelte $svelte_version, Node $node_version not found" 1>&2
27+
exit 2
28+
fi
29+
30+
rm -rf coverage node_modules "$env_dir/node_modules"
31+
pushd "$env_dir"
32+
npm install --no-package-lock --engine-strict
33+
npm ls "$env_dir" svelte
34+
popd
35+
mv "$env_dir/node_modules" .

src/component-types.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-redundant-type-constituents */
1+
/* eslint-disable @typescript-eslint/no-explicit-any */
22
import type {
33
Component as ModernComponent,
44
ComponentConstructorOptions as LegacyConstructorOptions,
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"private": true,
3+
"engines": {
4+
"node": "16.x.x"
5+
},
6+
"devDependencies": {
7+
"@sveltejs/vite-plugin-svelte": "2.x.x",
8+
"@testing-library/dom": "9.x.x",
9+
"@testing-library/jest-dom": "^6.6.3",
10+
"@testing-library/user-event": "^14.6.1",
11+
"@vitest/coverage-v8": "0.x.x",
12+
"expect-type": "^1.2.1",
13+
"happy-dom": "14.x.x",
14+
"jest": "^29.7.0",
15+
"jest-environment-jsdom": "^29.7.0",
16+
"jsdom": "22.x.x",
17+
"npm-run-all": "^4.1.5",
18+
"svelte": "3.x.x",
19+
"svelte-check": "3.x.x",
20+
"svelte-jester": "3.x.x",
21+
"vite": "4.x.x",
22+
"vitest": "0.x.x"
23+
}
24+
}

tests/envs/svelte3/package.json

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"private": true,
3+
"engines": {
4+
"node": ">=18"
5+
},
6+
"devDependencies": {
7+
"@sveltejs/vite-plugin-svelte": "2.x.x",
8+
"@testing-library/dom": "^10.4.0",
9+
"@testing-library/jest-dom": "^6.6.3",
10+
"@testing-library/user-event": "^14.6.1",
11+
"@vitest/coverage-v8": "0.x.x",
12+
"expect-type": "^1.2.1",
13+
"happy-dom": "^17.4.6",
14+
"jest": "^29.7.0",
15+
"jest-environment-jsdom": "^29.7.0",
16+
"jsdom": "^26.1.0",
17+
"npm-run-all": "^4.1.5",
18+
"svelte": "3.x.x",
19+
"svelte-check": "3.x.x",
20+
"svelte-jester": "3.x.x",
21+
"vite": "4.x.x",
22+
"vitest": "0.x.x"
23+
}
24+
}
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"private": true,
3+
"engines": {
4+
"node": "16.x.x"
5+
},
6+
"devDependencies": {
7+
"@sveltejs/vite-plugin-svelte": "2.x.x",
8+
"@testing-library/dom": "9.x.x",
9+
"@testing-library/jest-dom": "^6.6.3",
10+
"@testing-library/user-event": "^14.6.1",
11+
"@vitest/coverage-v8": "0.x.x",
12+
"expect-type": "^1.2.1",
13+
"happy-dom": "14.x.x",
14+
"jest": "^29.7.0",
15+
"jest-environment-jsdom": "^29.7.0",
16+
"jsdom": "22.x.x",
17+
"npm-run-all": "^4.1.5",
18+
"svelte": "4.x.x",
19+
"svelte-check": "3.x.x",
20+
"svelte-jester": "3.x.x",
21+
"vite": "4.x.x",
22+
"vitest": "0.x.x"
23+
}
24+
}

tests/envs/svelte4/package.json

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"private": true,
3+
"engines": {
4+
"node": ">=18"
5+
},
6+
"devDependencies": {
7+
"@sveltejs/vite-plugin-svelte": "3.x.x",
8+
"@testing-library/dom": "^10.4.0",
9+
"@testing-library/jest-dom": "^6.6.3",
10+
"@testing-library/user-event": "^14.6.1",
11+
"@vitest/coverage-v8": "2.x.x",
12+
"expect-type": "^1.2.1",
13+
"happy-dom": "^17.4.6",
14+
"jest": "^29.7.0",
15+
"jest-environment-jsdom": "^29.7.0",
16+
"jsdom": "^26.1.0",
17+
"npm-run-all": "^4.1.5",
18+
"svelte": "4.x.x",
19+
"svelte-check": "^4.1.7",
20+
"svelte-jester": "^5.0.0",
21+
"vite": "5.x.x",
22+
"vitest": "2.x.x"
23+
}
24+
}

vite.config.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ import { defineConfig } from 'vite'
66

77
const require = createRequire(import.meta.url)
88

9-
// https://vitejs.dev/config/
109
export default defineConfig({
11-
plugins: [svelte(), svelteTesting()],
10+
plugins: [svelte({ hot: false }), svelteTesting()],
1211
test: {
1312
environment: 'jsdom',
1413
setupFiles: ['./tests/_vitest-setup.js'],

0 commit comments

Comments
 (0)