test(vite): narrow and validate Vite 7/8 support#367
Conversation
The SQL provider was updated to use context.configDir but the mongo provider was missed, causing watcher/loader path divergence when cwd differs from the config directory.
…onfigDir - Switch config-loader from node:path to pathe for consistency with the rest of the tooling layer. - Resolve .ts contract paths inside load() via context.configDir instead of capturing process.cwd() at config-definition time, so the watcher and loader always reference the same file.
The paths branch omitted the config file from the watch set, so edits to prisma-next.config.ts (e.g. changing paths or swapping provider) would not trigger re-emit. Also surface a partial-coverage warning when loadConfig fails instead of silently falling back.
Close D1 from the PR #356 review by driving a real Vite dev server through both scenarios that were previously only unit-mocked: modifying `contract.prisma` re-emits the contract, and editing the config to swap the declared PSL input re-emits against the new file.
Align with the Mongo PSL provider and with the parser step's sourceId. The absolute form stays accessible via meta.absoluteSchemaPath for downstream consumers that need it.
Collapse the ~20-line inline provider that postgres and mongo facades each build around a dynamic import of the user's `contract.ts`. The logic (path resolution, pathToFileURL, default-export extraction) is family-agnostic, so each contract-ts package exposes it as a sibling to typescriptContract.
- handleTrackedFileChange now runs ctx.file through pathe.resolve before comparing against watchedFiles / ignoredOutputFiles, so symlinked or case-folded paths line up with the resolved entries. - resolveContractOutputFiles no longer falls back to the hardcoded 'src/prisma/contract.json' when contract.output is missing. The filter simply skips; defineConfig() guarantees output is present in the happy path, and raw-object configs get a clean no-op instead of a path the CLI never actually writes.
…ceContext Left over from the split that moved configDir out of ContractSourceContext into ContractSourceEnvironment — the context builder no longer needs it.
…ma/prisma-next into tml-2276-authoritative-watch-inputs
…uts' into tml-2277-vite-plugin-watch-behavior
…watch-behavior # Conflicts: # packages/1-framework/3-tooling/cli/src/config-path-validation.ts # packages/1-framework/3-tooling/cli/test/config-loader.test.ts # packages/1-framework/3-tooling/vite-plugin-contract-emit/README.md # packages/1-framework/3-tooling/vite-plugin-contract-emit/src/plugin.ts # packages/1-framework/3-tooling/vite-plugin-contract-emit/test/plugin.test.ts
Extend the Vite plugin HMR integration suite with a PSL recovery journey. The new test proves a bad edit preserves the last good artifacts on disk and that a subsequent valid edit re-emits both contract files. Refs TML-2293
Add two short comments to the Vite HMR recovery integration test so the intentional failure phase and the expected recovery phase are easier to scan in review.
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 34 minutes and 17 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThis pull request adds explicit Vite version support (7 and 8) to the Vite plugin via GitHub Actions CI testing, updated peer dependency constraints, and expanded integration test coverage. A new parallel test matrix job validates the plugin against both Vite versions. Documentation clarifies the supported version scope. Minor code cleanup and test refinements are included. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
@prisma-next/mongo-runtime
@prisma-next/family-mongo
@prisma-next/sql-runtime
@prisma-next/family-sql
@prisma-next/middleware-telemetry
@prisma-next/mongo
@prisma-next/extension-paradedb
@prisma-next/extension-pgvector
@prisma-next/postgres
@prisma-next/sql-orm-client
@prisma-next/sqlite
@prisma-next/target-mongo
@prisma-next/adapter-mongo
@prisma-next/driver-mongo
@prisma-next/contract
@prisma-next/utils
@prisma-next/config
@prisma-next/errors
@prisma-next/framework-components
@prisma-next/operations
@prisma-next/ts-render
@prisma-next/contract-authoring
@prisma-next/ids
@prisma-next/psl-parser
@prisma-next/psl-printer
@prisma-next/cli
@prisma-next/emitter
@prisma-next/migration-tools
prisma-next
@prisma-next/vite-plugin-contract-emit
@prisma-next/runtime-executor
@prisma-next/mongo-codec
@prisma-next/mongo-contract
@prisma-next/mongo-value
@prisma-next/mongo-contract-psl
@prisma-next/mongo-contract-ts
@prisma-next/mongo-emitter
@prisma-next/mongo-schema-ir
@prisma-next/mongo-query-ast
@prisma-next/mongo-orm
@prisma-next/mongo-query-builder
@prisma-next/mongo-lowering
@prisma-next/mongo-wire
@prisma-next/sql-contract
@prisma-next/sql-errors
@prisma-next/sql-operations
@prisma-next/sql-schema-ir
@prisma-next/sql-contract-psl
@prisma-next/sql-contract-ts
@prisma-next/sql-contract-emitter
@prisma-next/sql-lane-query-builder
@prisma-next/sql-relational-core
@prisma-next/sql-builder
@prisma-next/target-postgres
@prisma-next/target-sqlite
@prisma-next/adapter-postgres
@prisma-next/adapter-sqlite
@prisma-next/driver-postgres
@prisma-next/driver-sqlite
commit: |
Co-authored-by: Alberto Schiabel <jkomyno@users.noreply.github.com> Signed-off-by: Alberto Schiabel <jkomyno@users.noreply.github.com>
Signed-off-by: Alberto Schiabel <jkomyno@users.noreply.github.com>
SevInf
left a comment
There was a problem hiding this comment.
I would prefer we'd make it easier to run tests loсally. Right now, specific vite version are hardcoded in CI, pnpm outdated and renovate will not find them and we are almost certainly will forget to update them in time.
Additionally, running it locally requires copying very specific command from a GH Workflow and then not forgetting to undo your changes before you commit.
My suggestion is to do it that way:
- Add both versions to our dependencies explicitly under different aliases.
- Importing both in the test file:
import * as vite7 from 'vite7'
import * as vite8 from 'vite8'- Wrapping existing tests into a function that accepts generalized version of
vite.createServeras an input - run those tests over both
vite7.createServerandvite8.createServer
…-matrix # Conflicts: # packages/1-framework/3-tooling/cli/src/config-path-validation.ts # packages/1-framework/3-tooling/vite-plugin-contract-emit/src/plugin.ts # packages/1-framework/3-tooling/vite-plugin-contract-emit/test/plugin.test.ts
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
packages/1-framework/3-tooling/vite-plugin-contract-emit/README.md (1)
14-14: Simplify the compatibility note by removing internal implementation detail.The phrase "there is no Vite-8-specific code path today, so the support matrix exists to catch future hook or overlay regressions early" is internal implementation reasoning that doesn't materially affect how users interact with the plugin. As per coding guidelines, user-facing package READMEs should avoid internal implementation detail unless it materially affects usage.
📝 Simplified compatibility note
-- Compatibility note: the current implementation uses the same `configureServer` and `handleHotUpdate` flow on Vite 7 and Vite 8; there is no Vite-8-specific code path today, so the support matrix exists to catch future hook or overlay regressions early +- Compatibility note: the plugin uses the same `configureServer` and `handleHotUpdate` flow on both Vite 7 and Vite 8Or remove it entirely if the implementation approach doesn't affect usage decisions.
As per coding guidelines: "For user-facing packages, keep README.md focused on what the package does, when to use it, and a few concrete examples. Avoid internal implementation detail unless it materially affects usage"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/1-framework/3-tooling/vite-plugin-contract-emit/README.md` at line 14, The compatibility note in README.md includes internal implementation detail ("there is no Vite-8-specific code path today, so the support matrix exists to catch future hook or overlay regressions early"); remove that clause or replace it with a short, user-focused statement such as "Compatibility: works with Vite 7 and Vite 8" so the README only communicates compatibility to users and omits internal reasoning; edit the line containing the compatibility note to delete the internal explanation and keep a concise, user-facing compatibility message.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/ci.yml:
- Around line 188-209: The new CI job "test-vite-support" is missing the
TEST_TIMEOUT_MULTIPLIER environment setting used by other test jobs, causing
flakiness; modify the test-vite-support job to include an env block that sets
TEST_TIMEOUT_MULTIPLIER: 2 (same as other CI test jobs) so the Vite matrix runs
use the shared timeout multiplier; locate the job by the name test-vite-support
in the workflow and add the env entry alongside existing keys to ensure the HMR
suite uses the increased timeout under CI load.
In `@test/integration/test/vite-plugin.hmr.e2e.test.ts`:
- Around line 443-557: Remove the duplicated "it('preserves the last good
artifacts after a bad PSL edit and recovers on the next good edit')" test block
(keep only the intended single copy), replace the hardcoded setTimeout delay
(new Promise(resolve => setTimeout(resolve, 100))) with the shared short timeout
helper from `@prisma-next/test-utils` (use the project's timeouts constant, e.g.
timeouts.fileWatchDebounce or a similar named helper), and avoid waiting the
full long TypeScript compilation timeout on the passing path by changing the
waitForFileChange calls that pass initialJsonStats.mtimeMs /
initialDtsStats.mtimeMs with timeouts.typeScriptCompilation to use a shorter
helper timeout (or a smaller explicit timeout constant from timeouts) for the
success path; adjust calls to waitForFileChange, readJsonFileWhenReady,
replaceInFileOrThrow and server.watcher.emit accordingly so the test is no
longer duplicated and uses the shared timeout helpers instead of raw numbers.
---
Nitpick comments:
In `@packages/1-framework/3-tooling/vite-plugin-contract-emit/README.md`:
- Line 14: The compatibility note in README.md includes internal implementation
detail ("there is no Vite-8-specific code path today, so the support matrix
exists to catch future hook or overlay regressions early"); remove that clause
or replace it with a short, user-focused statement such as "Compatibility: works
with Vite 7 and Vite 8" so the README only communicates compatibility to users
and omits internal reasoning; edit the line containing the compatibility note to
delete the internal explanation and keep a concise, user-facing compatibility
message.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro
Run ID: 542d438a-2028-411f-ba89-8eeacd3ee72c
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (10)
.github/workflows/ci.ymldocs/reference/framework-integration-analysis.mdpackage.jsonpackages/1-framework/3-tooling/cli/src/config-path-validation.tspackages/1-framework/3-tooling/vite-plugin-contract-emit/README.mdpackages/1-framework/3-tooling/vite-plugin-contract-emit/package.jsonpackages/1-framework/3-tooling/vite-plugin-contract-emit/test/plugin.test.tstest/integration/README.mdtest/integration/package.jsontest/integration/test/vite-plugin.hmr.e2e.test.ts
💤 Files with no reviewable changes (1)
- packages/1-framework/3-tooling/cli/src/config-path-validation.ts
Summary
@prisma-next/vite-plugin-contract-emitpeer support to Vite 7 and 8Testing
pnpm test:vite-plugin@prisma-next/integration-teststovite@8.0.9locally and reranpnpm test:vite-pluginTracking
Summary by CodeRabbit
New Features
Tests
Documentation
Chores
^7.0.0 || ^8.0.0.