Skip to content

chore(web): adopt @vue/tsconfig preset#435

Merged
Aureliolo merged 1 commit intomainfrom
chore/vue-tsconfig-preset
Mar 15, 2026
Merged

chore(web): adopt @vue/tsconfig preset#435
Aureliolo merged 1 commit intomainfrom
chore/vue-tsconfig-preset

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

Summary

  • Extend @vue/tsconfig/tsconfig.dom.json instead of manually specifying all compiler options
  • Gains Vue-recommended settings we were missing: verbatimModuleSyntax, moduleDetection: "force", jsxImportSource: "vue", resolveJsonModule
  • Removed 12 redundant settings already provided by the preset
  • Dropped importHelpers (no-op with noEmit: true, tslib not installed) and isolatedModules (superseded by verbatimModuleSyntax)
  • Kept project-specific overrides: baseUrl, paths (@/* alias), types: ["vitest/globals"]

Closes #386

Test plan

  • npm --prefix web run type-check — passes clean (no verbatimModuleSyntax errors)
  • npm --prefix web run build — production build succeeds (715 modules)
  • npm --prefix web run test — 520 tests pass
  • npm --prefix web run lint — no new errors (only pre-existing warnings)

Extend @vue/tsconfig/tsconfig.dom.json instead of manually specifying
all compiler options. This gains Vue-recommended settings we were
missing (verbatimModuleSyntax, moduleDetection, jsxImportSource,
resolveJsonModule) and keeps config aligned with Vue ecosystem updates.

Removed redundant settings already provided by the preset. Dropped
importHelpers (no-op with noEmit, tslib not installed) and
isolatedModules (superseded by verbatimModuleSyntax).

Closes #386
@github-actions
Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors the TypeScript configuration for the web project. By adopting the @vue/tsconfig/tsconfig.dom.json preset, the configuration becomes more concise and aligned with Vue's recommended best practices. This change not only simplifies maintenance by reducing manual option management but also implicitly introduces several beneficial compiler settings, enhancing type checking and module resolution for the Vue application.

Highlights

  • Configuration Simplification: The TypeScript configuration now extends @vue/tsconfig/tsconfig.dom.json, replacing a large set of manually specified compiler options with a standardized preset.
  • Adopted Vue-Recommended Settings: The project gains essential Vue-recommended TypeScript settings, including verbatimModuleSyntax, moduleDetection: "force", jsxImportSource: "vue", and resolveJsonModule, ensuring better compatibility and practices for Vue development.
  • Redundant Settings Removed: Twelve compiler options that were already provided by the new preset have been removed, streamlining the configuration file.
  • Obsolete Options Dropped: importHelpers was dropped as it's a no-op with noEmit: true and tslib not installed, and isolatedModules was removed as it's superseded by verbatimModuleSyntax.
  • Project-Specific Overrides Maintained: Crucial project-specific settings such as baseUrl, paths (@/* alias), and types: ["vitest/globals"] have been preserved to maintain existing project structure and functionality.
Changelog
  • web/tsconfig.json
    • Adopted @vue/tsconfig/tsconfig.dom.json preset.
    • Removed numerous redundant compiler options.
    • Retained project-specific baseUrl and paths configurations.
Activity
  • Type-checking with npm --prefix web run type-check passed without errors.
  • Production build with npm --prefix web run build succeeded.
  • All 520 tests passed when running npm --prefix web run test.
  • Linting with npm --prefix web run lint reported no new errors.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 15, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: fe1a3402-0bf6-4ac0-975b-cbab885e6956

📥 Commits

Reviewing files that changed from the base of the PR and between 239aaf7 and 0a83d6d.

📒 Files selected for processing (1)
  • web/tsconfig.json
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Build Backend
  • GitHub Check: Build Web
  • GitHub Check: Greptile Review
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T01:53:24.084Z
Learning: Applies to web/**/*.ts : Use fast-check for property-based testing in Vue with `fc.assert` + `fc.property`.
📚 Learning: 2026-03-15T01:53:24.084Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T01:53:24.084Z
Learning: Applies to web/**/*.ts : Use fast-check for property-based testing in Vue with `fc.assert` + `fc.property`.

Applied to files:

  • web/tsconfig.json
🔇 Additional comments (1)
web/tsconfig.json (1)

1-11: LGTM! Clean adoption of the Vue TypeScript preset.

The refactoring correctly extends @vue/tsconfig/tsconfig.dom.json (verified in v0.9.x) while preserving the necessary project-specific overrides. The baseUrl/paths for aliases and types: ["vitest/globals"] appropriately override the preset's settings to meet this project's needs. This eliminates redundant config and automatically picks up Vue-recommended settings.


📝 Walkthrough

Summary by CodeRabbit

  • Chores
    • Simplified TypeScript configuration by adopting Vue framework standards, improving consistency and maintainability of the development environment.

Walkthrough

The change refactors web/tsconfig.json to extend Vue's official TypeScript configuration preset (@vue/tsconfig/tsconfig.dom.json), removing redundant manual compiler options while preserving project-specific settings like path aliases and custom types.

Changes

Cohort / File(s) Summary
TypeScript Configuration
web/tsconfig.json
Extends @vue/tsconfig/tsconfig.dom.json preset and removes redundant compilerOptions (target, module, moduleResolution, strict, jsx, importHelpers, etc.). Retains project-specific baseUrl, path aliases, custom types, include, and references.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~4 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore(web): adopt @vue/tsconfig preset' is concise and clearly summarizes the main change of adopting the Vue TypeScript config preset.
Description check ✅ Passed The description is well-related to the changeset, explaining what was changed (extending Vue preset), why (missing Vue settings), what was removed (redundant options), and testing performed.
Linked Issues check ✅ Passed The PR fulfills issue #386 requirements: extends @vue/tsconfig/tsconfig.dom.json, gains Vue-recommended settings (verbatimModuleSyntax, moduleDetection, jsxImportSource, resolveJsonModule), removes redundant settings, preserves local overrides, and all tests pass.
Out of Scope Changes check ✅ Passed All changes are directly related to adopting the @vue/tsconfig preset in web/tsconfig.json as specified in issue #386; no extraneous modifications detected.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/vue-tsconfig-preset
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch chore/vue-tsconfig-preset
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request simplifies the TypeScript configuration by adopting the @vue/tsconfig/tsconfig.dom.json preset in web/tsconfig.json. This is a great improvement, as it removes many redundant options and aligns the project with Vue's recommended settings, including the modern verbatimModuleSyntax. The change is well-explained and thoroughly tested. While this PR correctly focuses on the main tsconfig.json, a potential follow-up could be to also refactor web/tsconfig.node.json to extend a corresponding preset from @vue/tsconfig, which would bring similar benefits of simplification and standardization to the Node.js-specific parts of your configuration.

@greptile-apps
Copy link
Copy Markdown

greptile-apps bot commented Mar 15, 2026

Greptile Summary

This PR simplifies web/tsconfig.json by extending the @vue/tsconfig/tsconfig.dom.json preset instead of manually maintaining 12 compiler options, and gains several Vue-recommended settings (verbatimModuleSyntax, moduleDetection: "force", jsxImportSource: "vue", resolveJsonModule) in the process.

  • Removed 12 compiler options that are now provided by the preset (target, module, moduleResolution, strict, jsx, allowImportingTsExtensions, noEmit, esModuleInterop, forceConsistentCasingInFileNames, skipLibCheck).
  • Dropped importHelpers (correctly identified as a no-op without tslib and with noEmit: true) and isolatedModules (superseded by verbatimModuleSyntax from the preset).
  • Retained project-specific overrides: baseUrl, paths (@/* alias), and types: ["vitest/globals"].
  • @vue/tsconfig is already present as a devDependency (^0.9), so no new dependency is introduced.
  • One minor consideration: the types array override completely replaces any types defined by the preset rather than merging with them — this is safe here because env.d.ts (included in the include list) handles Vite client types via triple-slash directive, but it's worth verifying explicitly.

Confidence Score: 5/5

  • This PR is safe to merge — it is a well-contained configuration simplification with no runtime impact and a fully passing test suite.
  • The change touches a single non-runtime file (tsconfig.json). The removed options are demonstrably redundant with the preset, the preset package is already installed, and the PR author validated type-check, build, and 520 tests all pass. The only non-trivial point (the types override behavior) is handled safely by env.d.ts.
  • No files require special attention.

Important Files Changed

Filename Overview
web/tsconfig.json Extends @vue/tsconfig/tsconfig.dom.json instead of hand-rolling 12 compiler options; retains project-specific baseUrl, paths, and types overrides. Clean, well-motivated change with no logic errors. Minor note: the types array override replaces (rather than merges) any types set by the preset, but the project's env.d.ts triple-slash reference handles Vite client types, so this is safe in practice.

Comments Outside Diff (1)

  1. web/tsconfig.json, line 8 (link)

    types override silently drops any types defined in the preset

    TypeScript's types array does not merge with a parent config — it fully replaces it. If @vue/tsconfig/tsconfig.dom.json (v0.9) includes anything in its own types array (e.g. vite/client), this line will silently drop those entries.

    In practice this appears safe because env.d.ts is included in the project and likely carries a /// <reference types="vite/client" /> triple-slash directive. However, it's worth double-checking the preset's resolved types with:

    node -e "console.log(require('@vue/tsconfig/tsconfig.dom.json').compilerOptions?.types)"

    If the preset does define types, you may want to merge explicitly:

Prompt To Fix All With AI
This is a comment left during a code review.
Path: web/tsconfig.json
Line: 8

Comment:
**`types` override silently drops any types defined in the preset**

TypeScript's `types` array does **not merge** with a parent config — it fully replaces it. If `@vue/tsconfig/tsconfig.dom.json` (v0.9) includes anything in its own `types` array (e.g. `vite/client`), this line will silently drop those entries.

In practice this appears safe because `env.d.ts` is included in the project and likely carries a `/// <reference types="vite/client" />` triple-slash directive. However, it's worth double-checking the preset's resolved `types` with:

```bash
node -e "console.log(require('@vue/tsconfig/tsconfig.dom.json').compilerOptions?.types)"
```

If the preset does define `types`, you may want to merge explicitly:

```suggestion
    "types": ["vite/client", "vitest/globals"]
```

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: 0a83d6d

@Aureliolo Aureliolo merged commit 7d4b214 into main Mar 15, 2026
28 checks passed
@Aureliolo Aureliolo deleted the chore/vue-tsconfig-preset branch March 15, 2026 10:39
Aureliolo added a commit that referenced this pull request Mar 15, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.2.4](v0.2.3...v0.2.4)
(2026-03-15)


### Bug Fixes

* attach cosign signatures and provenance bundle to release assets
([#438](#438))
([f191a4d](f191a4d))
* create git tag explicitly for draft releases
([#432](#432))
([1f5120e](1f5120e))
* docker healthcheck, CI optimization, and container hardening
([#436](#436))
([4d32bca](4d32bca))
* ensure security headers on all HTTP responses
([#437](#437))
([837f2fc](837f2fc))
* make install scripts usable immediately without terminal restart
([#433](#433))
([b45533c](b45533c))
* migrate pids_limit to deploy.resources.limits.pids
([#439](#439))
([66b94fd](66b94fd))


### Refactoring

* redesign release notes layout
([#434](#434))
([239aaf7](239aaf7))


### Maintenance

* **site:** replace hero CTA with license link and scroll arrow
([#440](#440))
([56af41c](56af41c))
* **web:** adopt @vue/tsconfig preset
([#435](#435))
([7d4b214](7d4b214))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
This was referenced Mar 15, 2026
Aureliolo added a commit that referenced this pull request Mar 15, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.2.4](v0.2.3...v0.2.4)
(2026-03-15)


### Bug Fixes

* attach cosign signatures and provenance bundle to release assets
([#438](#438))
([f191a4d](f191a4d))
* create git tag explicitly for draft releases
([#432](#432))
([1f5120e](1f5120e))
* docker healthcheck, CI optimization, and container hardening
([#436](#436))
([4d32bca](4d32bca))
* ensure security headers on all HTTP responses
([#437](#437))
([837f2fc](837f2fc))
* make install scripts usable immediately without terminal restart
([#433](#433))
([b45533c](b45533c))
* migrate pids_limit to deploy.resources.limits.pids
([#439](#439))
([66b94fd](66b94fd))
* use cosign --bundle flag for checksums signing
([#443](#443))
([19735b9](19735b9))


### Refactoring

* redesign release notes layout
([#434](#434))
([239aaf7](239aaf7))


### Maintenance

* **main:** release 0.2.4
([#431](#431))
([63b03c4](63b03c4))
* remove stale v0.2.4 changelog section from failed release
([#446](#446))
([769de10](769de10))
* reset version to 0.2.3 for re-release
([#444](#444))
([8579993](8579993))
* **site:** replace hero CTA with license link and scroll arrow
([#440](#440))
([56af41c](56af41c))
* **web:** adopt @vue/tsconfig preset
([#435](#435))
([7d4b214](7d4b214))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore(web): adopt @vue/tsconfig preset instead of manual tsconfig

1 participant