From 44bea41e392ff4b1fdf0919cec90d649d0e8fca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 15 Aug 2026 01:45:34 +0200 Subject: [PATCH] Upgrade effect-view to Effect v4 RC and tsgo (#72) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Upgrade Effect and effect-lens from beta to RC versions. - Replace `@effect/language-service` with `@effect/tsgo`. - Update TypeScript, VS Code, and package configuration for tsgo. - Adapt `MutationForm`, `PubSub`, and fiber interruption code to RC APIs. - Bump `effect-view` to `0.1.3` and update its published file set. - Update documentation and examples from Effect v4 beta to RC. ## Testing - `bun run lint:tsc` - `bun run test` — 59 tests passed --------- Co-authored-by: Julien Valverdé Reviewed-on: https://git.valverde.cloud/Thilawyn/effect-view/pulls/72 --- .dockerignore | 52 ++++++++++++++++++ .gitea/workflows/lint.yaml | 2 +- .gitea/workflows/publish.yaml | 7 +-- .gitea/workflows/test-build.yaml | 7 +-- .vscode/settings.json | 5 +- Dockerfile | 2 +- bun.lock | 56 +++++++++++--------- package.json | 3 +- packages/effect-fc/src/Subscribable.test.tsx | 2 +- packages/effect-view/README.md | 6 +-- packages/effect-view/package.json | 15 +++--- packages/effect-view/src/MutationForm.ts | 6 +-- packages/effect-view/src/PubSub.ts | 2 +- packages/effect-view/tsconfig.json | 3 +- packages/example/package.json | 6 +-- 15 files changed, 115 insertions(+), 59 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4b0f1c5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,52 @@ +# Version control and local agent/editor metadata +.git +.gitea +.github +.agents +.codex +.vscode + +# Dependencies and package-manager caches +node_modules +.npm +.yarn +.pnpm-store +.bun + +# Build output and task-runner caches +dist +build +out +.turbo +*.tsbuildinfo +.cache +.parcel-cache +.docusaurus +.vite +*.vite* + +# Test, coverage, and diagnostic output +coverage +.nyc_output +*.lcov +reports +report.*.json + +# Logs and temporary files +*.log +*.pid +*.seed +tmp +temp +*.tmp +*.swp +*.swo + +# Local environment and secrets +.env +.env.* +!.env.example + +# Package artifacts +*.tgz +*.tar diff --git a/.gitea/workflows/lint.yaml b/.gitea/workflows/lint.yaml index 0a3d7b6..f0a85fa 100644 --- a/.gitea/workflows/lint.yaml +++ b/.gitea/workflows/lint.yaml @@ -8,7 +8,7 @@ jobs: steps: - name: Setup Bun uses: oven-sh/setup-bun@v2 - - name: Clone repo + - name: Checkout uses: actions/checkout@v6 - name: Install dependencies run: bun install --frozen-lockfile diff --git a/.gitea/workflows/publish.yaml b/.gitea/workflows/publish.yaml index 3625031..302d6cd 100644 --- a/.gitea/workflows/publish.yaml +++ b/.gitea/workflows/publish.yaml @@ -20,7 +20,7 @@ jobs: username: ${{ secrets.DOCKER_REGISTRY_USERNAME }} password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} - - name: Clone repo + - name: Checkout uses: actions/checkout@v6 - name: Install dependencies run: bun install --frozen-lockfile @@ -55,11 +55,6 @@ jobs: token: ${{ secrets.NPM_TOKEN }} registry: https://registry.npmjs.org - - name: Clean before Docker build - run: | - bun clean:cache - bun clean:dist - bun clean:modules - name: Generate Docker metadata id: meta uses: docker/metadata-action@v5 diff --git a/.gitea/workflows/test-build.yaml b/.gitea/workflows/test-build.yaml index 52f6681..ccb9743 100644 --- a/.gitea/workflows/test-build.yaml +++ b/.gitea/workflows/test-build.yaml @@ -16,7 +16,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Clone repo + - name: Checkout uses: actions/checkout@v6 - name: Install dependencies run: bun install --frozen-lockfile @@ -32,11 +32,6 @@ jobs: - name: Pack run: bun pack - - name: Clean before Docker build - run: | - bun clean:cache - bun clean:dist - bun clean:modules - name: Generate Docker metadata id: meta uses: docker/metadata-action@v5 diff --git a/.vscode/settings.json b/.vscode/settings.json index 723e209..3b04626 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,8 @@ { - "typescript.tsdk": "node_modules/typescript/lib", + "js/ts.tsdk.path": "./node_modules/typescript/lib", + "js/ts.tsdk.additionalLocations": ["./node_modules/typescript/bin"], + "js/ts.tsdk.promptToUseWorkspaceVersion": true, + "js/ts.experimental.useTsgo": true, "editor.codeActionsOnSave": { "source.fixAll.biome": "explicit" } diff --git a/Dockerfile b/Dockerfile index 6dac0e3..328a633 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,4 +9,4 @@ RUN bun install --frozen-lockfile && \ bun run build && \ bun clean:cache && \ bun clean:modules && \ - bun install --production --frozen-lockfile + bun install --production --frozen-lockfile --ignore-scripts diff --git a/bun.lock b/bun.lock index 31bb3e6..854ac25 100644 --- a/bun.lock +++ b/bun.lock @@ -6,7 +6,7 @@ "name": "@effect-view/monorepo", "devDependencies": { "@biomejs/biome": "^2.5.5", - "@effect/language-service": "^0.87.1", + "@effect/tsgo": "0.36.4", "@types/bun": "^1.3.14", "npm-check-updates": "^23.0.0", "npm-sort": "^0.0.4", @@ -82,21 +82,21 @@ }, "packages/effect-view": { "name": "effect-view", - "version": "0.1.2", + "version": "0.1.3", "dependencies": { "@standard-schema/spec": "^1.1.0", - "effect-lens": "2.0.1-beta.103", + "effect-lens": "2.0.1-rc.109", }, "devDependencies": { - "@effect/platform-browser": "4.0.0-beta.103", + "@effect/platform-browser": "4.0.0-rc.109", "@testing-library/react": "^16.3.0", - "effect": "4.0.0-beta.103", + "effect": "4.0.0-rc.109", "jsdom": "^26.1.0", "vitest": "^3.2.4", }, "peerDependencies": { "@types/react": "^19.2.0", - "effect": "4.0.0-beta.103", + "effect": "4.0.0-rc.109", "react": "^19.2.0", }, }, @@ -104,9 +104,9 @@ "name": "@effect-view/example", "version": "0.0.0", "dependencies": { - "@effect/platform-browser": "4.0.0-beta.103", + "@effect/platform-browser": "4.0.0-rc.109", "@radix-ui/themes": "^3.3.0", - "effect": "4.0.0-beta.103", + "effect": "4.0.0-rc.109", "effect-view": "workspace:*", "react-icons": "^5.6.0", }, @@ -578,12 +578,26 @@ "@effect-view/vite-plugin": ["@effect-view/vite-plugin@workspace:packages/vite-plugin"], - "@effect/language-service": ["@effect/language-service@0.87.1", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-kcljlJmEgqg5mFAM6UShJYJjMqJb3TbHHxrK8Qoubvwugc0aVWpRkbdgQvK5b17puOt3BKXXKOmcV+oQt0oQqQ=="], - "@effect/platform": ["@effect/platform@0.96.3", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.10", "multipasta": "^0.2.7" }, "peerDependencies": { "effect": "^3.21.5" } }, "sha512-LzvIj4HYE++TcTv/cVTCI/GRvQTV0ymwRmgjZMzNB5dU4OS05pTN36RKN0npiOm5orLJgw4yjIv1dNZoYGh/vg=="], "@effect/platform-browser": ["@effect/platform-browser@0.76.0", "", { "dependencies": { "multipasta": "^0.2.7" }, "peerDependencies": { "@effect/platform": "^0.96.0", "effect": "^3.21.0" } }, "sha512-cUyBpcLstrP/HiNsIePMBAI6R1+u6aRFlAUZb4wf08y1d1Vqf/Dmxsq14ZjBfnSYiqBPrCeYf1ZI+qMGQQL0RA=="], + "@effect/tsgo": ["@effect/tsgo@0.36.4", "", { "optionalDependencies": { "@effect/tsgo-darwin-arm64": "0.36.4", "@effect/tsgo-darwin-x64": "0.36.4", "@effect/tsgo-linux-arm": "0.36.4", "@effect/tsgo-linux-arm64": "0.36.4", "@effect/tsgo-linux-x64": "0.36.4", "@effect/tsgo-win32-arm64": "0.36.4", "@effect/tsgo-win32-x64": "0.36.4" }, "bin": { "effect-tsgo": "dist/effect-tsgo.cjs" } }, "sha512-fNmdUV6FgXnvIcG18AVS1SRXt7z9jsyBh5CKuJYmTsE+DgbLaWF0CevKHx7hQPcidDWRVmdJYfU66Jvc/ZEt6w=="], + + "@effect/tsgo-darwin-arm64": ["@effect/tsgo-darwin-arm64@0.36.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oOcWdKQucNch6G4CvidHEzmfgeKEPMvFcz+DXuKGonBLwVHX+i1VYGbZwccEOoiitOg7eWVl4e8S0qKMXg3/gg=="], + + "@effect/tsgo-darwin-x64": ["@effect/tsgo-darwin-x64@0.36.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-4QZh0n/nUoTI7sp4o7gDEviJ/jXH+IFTVqIyQ2w2fqqPoOvaGl9bVoR/2f9j/67hvY4DHcXKaccpmyoRYhaYsw=="], + + "@effect/tsgo-linux-arm": ["@effect/tsgo-linux-arm@0.36.4", "", { "os": "linux", "cpu": "arm" }, "sha512-10oTUnOK/RCfmTMFvMndNIfk61uviyYBRpbxhDd/SiU6DYCmWlnZ/xhGmgyj5uiysOiFNsp3NKxT0d9y4uAz8g=="], + + "@effect/tsgo-linux-arm64": ["@effect/tsgo-linux-arm64@0.36.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-aOv+wVbZWgBt9PGXPA874qgw151GrzkWqaswe+4TXjhdw/M4i35PCUH5T+uaQj3FnQ1NWiPqHIGfNBRjf3xG6w=="], + + "@effect/tsgo-linux-x64": ["@effect/tsgo-linux-x64@0.36.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+BuwiG5d8dLNrrN1PB5GA3gRkBwvlUYmMkm/XkttaLnppp9jePFkB8CgAiNV8j290q7BVO2nQjao5aPkVwmluw=="], + + "@effect/tsgo-win32-arm64": ["@effect/tsgo-win32-arm64@0.36.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-HsW90wbMWOeorUeNMdTqTcMZIDcCXdkeFGXTUkx9K1R21fXSw+QEdPtTmEyKsRMXEH4vqek/HQa0yMkUT0CJzA=="], + + "@effect/tsgo-win32-x64": ["@effect/tsgo-win32-x64@0.36.4", "", { "os": "win32", "cpu": "x64" }, "sha512-q4j1q0ESYxxookjA0ECz/84DEH2MsP51K0aZb3uXKfxagHDASPoWDcVu4BJTcwrK5kdZzvw9QrCPjAXe9WZqng=="], + "@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="], "@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="], @@ -1942,7 +1956,7 @@ "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - "ini": ["ini@7.0.0", "", {}, "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w=="], + "ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], @@ -2046,8 +2060,6 @@ "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], - "kubernetes-types": ["kubernetes-types@1.30.0", "", {}, "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="], - "latest-version": ["latest-version@7.0.0", "", { "dependencies": { "package-json": "^8.1.0" } }, "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg=="], "launch-editor": ["launch-editor@2.14.1", "", { "dependencies": { "picocolors": "^1.1.1", "shell-quote": "^1.8.4" } }, "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA=="], @@ -2856,8 +2868,6 @@ "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - "toml": ["toml@4.3.0", "", {}, "sha512-lVb8X9BsPVuH0M4BKeS91tXAmJvCjQ5UIyAbQFaxkKGyUFK2RPkhwaFSQH8vbpl1d23eu/IBH+dwVMHWaq9A5A=="], - "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], "tough-cookie": ["tough-cookie@5.1.2", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A=="], @@ -2940,7 +2950,7 @@ "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - "uuid": ["uuid@14.0.1", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew=="], + "uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], "value-equal": ["value-equal@1.0.1", "", {}, "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="], @@ -3052,9 +3062,9 @@ "@docusaurus/utils/jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - "@effect-view/example/@effect/platform-browser": ["@effect/platform-browser@4.0.0-beta.103", "", { "dependencies": { "multipasta": "^0.2.8" }, "peerDependencies": { "effect": "^4.0.0-beta.103" } }, "sha512-3GXGzjv+dB5E9sCCj/JhPVyNB2NrBquGY2tYQ8VQqGK4uOpME6I5oLqRt+MmB7BWqWYPXUqvXj0wvMJRlQC4fw=="], + "@effect-view/example/@effect/platform-browser": ["@effect/platform-browser@4.0.0-rc.109", "", { "peerDependencies": { "effect": "^4.0.0-rc.109" } }, "sha512-63/hM2dCh0HQb7sRkAhAoZjO4swjRD2vT/eUrs8nXA0LzJMz52ChPsxdnL1D0yg+ZeXtMHQM0MFJxITJXjv+EA=="], - "@effect-view/example/effect": ["effect@4.0.0-beta.103", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.9.0", "find-my-way-ts": "^0.1.6", "ini": "^7.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^2.0.4", "multipasta": "^0.2.8", "toml": "^4.1.2", "uuid": "^14.0.1", "yaml": "^2.9.0" } }, "sha512-pE8TxF4m2tQzVI+77dIlm3s+81TACV1AiX1JEkvY+zVuxgQQ8aGSkqXNJF6b/ST+coCSk5cUdbULpQ7sm4oHyw=="], + "@effect-view/example/effect": ["effect@4.0.0-rc.109", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.9.0", "msgpackr": "^2.0.4" } }, "sha512-6ubcOCtfdbmFO5+vgcT2HsTw5s+n3aMUj4eAIbVpUxP7+VYCwXxxcBHgiWgizOrGO1eGmuOBFek3mM0dFcwaWA=="], "@effect-view/vite-plugin/typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], @@ -3122,11 +3132,11 @@ "dot-prop/is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], - "effect-view/@effect/platform-browser": ["@effect/platform-browser@4.0.0-beta.103", "", { "dependencies": { "multipasta": "^0.2.8" }, "peerDependencies": { "effect": "^4.0.0-beta.103" } }, "sha512-3GXGzjv+dB5E9sCCj/JhPVyNB2NrBquGY2tYQ8VQqGK4uOpME6I5oLqRt+MmB7BWqWYPXUqvXj0wvMJRlQC4fw=="], + "effect-view/@effect/platform-browser": ["@effect/platform-browser@4.0.0-rc.109", "", { "peerDependencies": { "effect": "^4.0.0-rc.109" } }, "sha512-63/hM2dCh0HQb7sRkAhAoZjO4swjRD2vT/eUrs8nXA0LzJMz52ChPsxdnL1D0yg+ZeXtMHQM0MFJxITJXjv+EA=="], - "effect-view/effect": ["effect@4.0.0-beta.103", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.9.0", "find-my-way-ts": "^0.1.6", "ini": "^7.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^2.0.4", "multipasta": "^0.2.8", "toml": "^4.1.2", "uuid": "^14.0.1", "yaml": "^2.9.0" } }, "sha512-pE8TxF4m2tQzVI+77dIlm3s+81TACV1AiX1JEkvY+zVuxgQQ8aGSkqXNJF6b/ST+coCSk5cUdbULpQ7sm4oHyw=="], + "effect-view/effect": ["effect@4.0.0-rc.109", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.9.0", "msgpackr": "^2.0.4" } }, "sha512-6ubcOCtfdbmFO5+vgcT2HsTw5s+n3aMUj4eAIbVpUxP7+VYCwXxxcBHgiWgizOrGO1eGmuOBFek3mM0dFcwaWA=="], - "effect-view/effect-lens": ["effect-lens@2.0.1-beta.103", "", { "peerDependencies": { "effect": "4.0.0-beta.103" } }, "sha512-Z9yiCnC4Dhol68gjTqyj+YZ+ldu1ou5eOGCT7kX01j1/apx/VU6HCYi9bqOoe1i0RG/wr+yCf2kJgodvTXCFfg=="], + "effect-view/effect-lens": ["effect-lens@2.0.1-rc.109", "", { "peerDependencies": { "effect": "4.0.0-rc.109" } }, "sha512-rMluFV/QGvLyXWoLu7YGaEUus/E40LeUXB0bAnzR3yvF1euch0g/gVISYuGlu+mvUahzBEH//+QNi45/0IwfTQ=="], "esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], @@ -3142,8 +3152,6 @@ "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - "global-dirs/ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], - "got/@sindresorhus/is": ["@sindresorhus/is@5.6.0", "", {}, "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g=="], "hpack.js/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], @@ -3338,8 +3346,6 @@ "sitemap/@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="], - "sockjs/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], diff --git a/package.json b/package.json index fcfb038..4b53245 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "./packages/*" ], "scripts": { + "prepare": "effect-tsgo patch --typescript --no-oxlint", "lint:tsc": "turbo lint:tsc", "lint:biome": "turbo lint:biome", "test": "turbo test", @@ -17,7 +18,7 @@ }, "devDependencies": { "@biomejs/biome": "^2.5.5", - "@effect/language-service": "^0.87.1", + "@effect/tsgo": "0.36.4", "@types/bun": "^1.3.14", "npm-check-updates": "^23.0.0", "npm-sort": "^0.0.4", diff --git a/packages/effect-fc/src/Subscribable.test.tsx b/packages/effect-fc/src/Subscribable.test.tsx index c76132a..4e6bd0f 100644 --- a/packages/effect-fc/src/Subscribable.test.tsx +++ b/packages/effect-fc/src/Subscribable.test.tsx @@ -51,7 +51,7 @@ describe("Subscribable", () => { await Effect.runPromise(Lens.set(right, "b")) await waitFor(() => expect(values).toContainEqual([2, "b"])) - Fiber.interruptFork(collector) + await Effect.runPromise(Fiber.interrupt(collector)) }) it("useAll returns the latest values and rerenders when any input changes", async () => { diff --git a/packages/effect-view/README.md b/packages/effect-view/README.md index 842f04e..d1e90ac 100644 --- a/packages/effect-view/README.md +++ b/packages/effect-view/README.md @@ -25,12 +25,12 @@ data modeling into React 19 without replacing React's component model. Yield Effects and services from a component body, let scopes follow the React lifecycle, and return ordinary JSX. -> **Effect v4 beta:** Effect View is built for the Effect v4 beta release. If +> **Effect v4 RC:** Effect View is built for the Effect v4 release candidate. If > your application uses Effect v3, use the legacy > [`effect-fc` package](https://www.npmjs.com/package/effect-fc) instead. ```bash -npm install effect-view effect@beta react +npm install effect-view effect@rc react ``` Effect View does not depend on `react-dom`. Install the renderer used by your @@ -127,7 +127,7 @@ The complete documentation is available at **[thila.dev/effect-view](https://thi ## Requirements - React 19.2 or newer -- **Effect v4 beta** (`effect@beta`) +- **Effect v4 RC** (`effect@rc`) - TypeScript and `@types/react` for TypeScript projects Effect View is renderer-independent and does not require `react-dom`. diff --git a/packages/effect-view/package.json b/packages/effect-view/package.json index 557e48e..e655309 100644 --- a/packages/effect-view/package.json +++ b/packages/effect-view/package.json @@ -1,11 +1,14 @@ { "name": "effect-view", "description": "Write React function components with Effect", - "version": "0.1.2", + "version": "0.1.3", "type": "module", "files": [ "./README.md", - "./dist" + "./src/**/*.ts", + "./dist/**/*.js", + "./dist/**/*.js.map", + "./dist/**/*.d.ts" ], "license": "MIT", "repository": { @@ -97,19 +100,19 @@ "clean:modules": "rm -rf node_modules" }, "devDependencies": { - "@effect/platform-browser": "4.0.0-beta.103", + "@effect/platform-browser": "4.0.0-rc.109", "@testing-library/react": "^16.3.0", - "effect": "4.0.0-beta.103", + "effect": "4.0.0-rc.109", "jsdom": "^26.1.0", "vitest": "^3.2.4" }, "peerDependencies": { "@types/react": "^19.2.0", - "effect": "4.0.0-beta.103", + "effect": "4.0.0-rc.109", "react": "^19.2.0" }, "dependencies": { "@standard-schema/spec": "^1.1.0", - "effect-lens": "2.0.1-beta.103" + "effect-lens": "2.0.1-rc.109" } } diff --git a/packages/effect-view/src/MutationForm.ts b/packages/effect-view/src/MutationForm.ts index 27debad..cfcc3c8 100644 --- a/packages/effect-view/src/MutationForm.ts +++ b/packages/effect-view/src/MutationForm.ts @@ -1,5 +1,5 @@ import type { StandardSchemaV1 } from "@standard-schema/spec" -import { Array, Cause, type Context, Effect, Fiber, Option, Pipeable, Predicate, Schema, SchemaError, SchemaIssue, type Scope, Semaphore, SubscriptionRef } from "effect" +import { Array, Cause, type Context, Effect, Fiber, Option, Pipeable, Predicate, Schema, SchemaIssue, type Scope, Semaphore, SubscriptionRef } from "effect" import { AsyncResult } from "effect/unstable/reactivity" import * as Form from "./Form.js" import * as Lens from "./Lens.js" @@ -112,7 +112,7 @@ extends Pipeable.Class implements MutationForm { Effect.tap(() => Lens.set(this.issues, Array.empty())), Effect.flatMap(value => Lens.set(this.value, Option.some(value))), Effect.catchIf( - SchemaError.isSchemaError, + Schema.isSchemaError, error => Lens.set(this.issues, SchemaIssue.makeFormatterStandardSchemaV1()(error.issue).issues), ), @@ -145,7 +145,7 @@ extends Pipeable.Class implements MutationForm { ? Option.match( Array.findFirst( result.cause.reasons, - reason => Cause.isFailReason(reason) && SchemaError.isSchemaError(reason.error) + reason => Cause.isFailReason(reason) && Schema.isSchemaError(reason.error) ? Option.some(reason.error) : Option.none(), ), diff --git a/packages/effect-view/src/PubSub.ts b/packages/effect-view/src/PubSub.ts index 17c44bc..dfd7f53 100644 --- a/packages/effect-view/src/PubSub.ts +++ b/packages/effect-view/src/PubSub.ts @@ -11,7 +11,7 @@ export const useFromReactiveValues = Effect.fnUntraced(function* Effect.acquireRelease(PubSub.unbounded(), PubSub.shutdown)) yield* Component.useReactEffect(() => Effect.flatMap( PubSub.isShutdown(pubsub), - shutdown => shutdown ? Effect.succeed(undefined) : Effect.asVoid(PubSub.publish(pubsub, values)), + shutdown => shutdown ? Effect.void : Effect.asVoid(PubSub.publish(pubsub, values)), ), values) return pubsub }) diff --git a/packages/effect-view/tsconfig.json b/packages/effect-view/tsconfig.json index f5ac024..cea4d84 100644 --- a/packages/effect-view/tsconfig.json +++ b/packages/effect-view/tsconfig.json @@ -1,4 +1,5 @@ { + "$schema": "../../node_modules/@effect/tsgo/schema.json", "compilerOptions": { // Enable latest features "lib": ["ESNext", "DOM"], @@ -35,5 +36,5 @@ ] }, - "include": ["./src"], + "include": ["./src"] } diff --git a/packages/example/package.json b/packages/example/package.json index 756954a..cb07d4f 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -27,15 +27,15 @@ "vite": "^8.0.16" }, "dependencies": { - "@effect/platform-browser": "4.0.0-beta.103", + "@effect/platform-browser": "4.0.0-rc.109", "@radix-ui/themes": "^3.3.0", - "effect": "4.0.0-beta.103", + "effect": "4.0.0-rc.109", "effect-view": "workspace:*", "react-icons": "^5.6.0" }, "overrides": { "@types/react": "^19.2.15", - "effect": "4.0.0-beta.103", + "effect": "4.0.0-rc.109", "react": "^19.2.6" } }