Skip to content

chore(ci): upgrade built to ts7 rc#166

Open
coryrylan wants to merge 1 commit into
mainfrom
topic-typescript-update
Open

chore(ci): upgrade built to ts7 rc#166
coryrylan wants to merge 1 commit into
mainfrom
topic-typescript-update

Conversation

@coryrylan

@coryrylan coryrylan commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added support for a newer TypeScript release in the internal toolchain.
    • Updated the Vue starter to a newer Vue version, along with related Vue tooling.
  • Bug Fixes

    • Adjusted the build process to use the standard TypeScript compiler path for faster, more reliable initial builds.
    • Removed outdated platform-specific preview package exclusions from release-age checks.

Signed-off-by: Cory Rylan <crylan@nvidia.com>
@coryrylan coryrylan self-assigned this Jun 30, 2026
@github-actions github-actions Bot added scope(ci) scope(internals) dependencies Pull requests that update a dependency file scope(starters) labels Jun 30, 2026
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR migrates TypeScript tooling from @typescript/native-preview to a new typescript-7 catalog package (typescript@7.0.1-rc), updates the vite plugin's TSC invocation to use tsc instead of tsgo.js, adds a typescript dependency to the eslint package, and bumps vue/vitejs-related dependencies in starter projects.

Changes

TypeScript 7 Catalog Migration

Layer / File(s) Summary
Catalog and dependency wiring for typescript-7
pnpm-workspace.yaml, projects/internals/eslint/package.json, projects/internals/vite/package.json
Adds typescript-7 catalog entry aliasing npm:typescript@7.0.1-rc, removes @typescript/native-preview minimumReleaseAgeExclude entries, adds typescript dependency to eslint package, and replaces @typescript/native-preview with typescript-7 in vite's dependencies.
TSC invocation switch
projects/internals/vite/src/plugins/tsc.js
Resolves tscPath from typescript-7's bin/tsc and uses it in execFileSync during buildStart, replacing the prior tsgoPath/tsgo.js invocation.

Starter Project Dependency Bumps

Layer / File(s) Summary
Vue and tooling version bumps
projects/starters/nuxt/package.json, projects/starters/vue/package.json
Bumps vue to 3.5.39 in nuxt starter, and bumps vue, @vitejs/plugin-vue, and vue-tsc versions in vue starter's devDependencies.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~5 minutes

Possibly related PRs

  • NVIDIA/elements#87: Both PRs touch the TypeScript 7 upgrade path for projects/internals/vite, modifying pnpm-workspace.yaml/projects/internals/vite/package.json around @typescript/native-preview and the TSC invocation in projects/internals/vite/src/plugins/tsc.js.

Suggested reviewers

  • johnyanarella
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and matches the main change: upgrading the build tooling to TypeScript 7 RC.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch topic-typescript-update

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pnpm-workspace.yaml`:
- Around line 113-114: The pnpm age-policy exemption is incomplete because the
minimumReleaseAgeExclude list currently covers only the base TypeScript alias,
not the aliased package name used for the release candidate. Update the
workspace configuration so the same exclusion list explicitly includes the
typescript-7 alias alongside the existing typescript entry, ensuring installs
that resolve through typescript-7 are matched correctly by pnpm.

In `@projects/starters/vue/package.json`:
- Around line 27-29: The starter package dependency set is resolving vue-tsc
3.3.5 against a TypeScript 7 RC, which can break the build flow. Update the
dependency declarations in the Vue starter package so that vue-tsc is pinned to
a TypeScript 6-compatible release, or otherwise ensure the package does not
resolve `typescript` from the `typescript-7` catalog. Keep the fix localized to
the package.json dependency entries for `typescript` and `vue-tsc`.
🪄 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.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 3a519fd7-ec49-4766-b067-e3a30c861d21

📥 Commits

Reviewing files that changed from the base of the PR and between e2e225c and d493f4c.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • pnpm-workspace.yaml
  • projects/internals/eslint/package.json
  • projects/internals/vite/package.json
  • projects/internals/vite/src/plugins/tsc.js
  • projects/starters/nuxt/package.json
  • projects/starters/vue/package.json

Comment thread pnpm-workspace.yaml
Comment on lines 113 to +114
typescript: 6.0.3
typescript-7: npm:typescript@7.0.1-rc

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

pnpm minimumReleaseAgeExclude default minimumReleaseAge behavior

💡 Result:

In pnpm, minimumReleaseAgeExclude is a configuration setting used to exempt specific dependencies from the minimumReleaseAge restriction [1][2]. The minimumReleaseAge setting defines a "cooldown" period in minutes that must pass after a package version is published before pnpm will allow it to be installed [2][3]. As of pnpm v11, this defaults to 1440 minutes (1 day) to protect against supply chain attacks [4][5][6]. Regarding minimumReleaseAgeExclude: * Default Behavior: The default value is undefined [1]. When not configured, all dependencies must satisfy the minimumReleaseAge requirement [1][3]. * Functionality: When you list packages under minimumReleaseAgeExclude, those packages are exempted from the release age restriction and can be installed immediately, regardless of how recently they were published [1][7]. * Configuration Options: You can exclude packages by name, using glob patterns (such as scopes like @myorg/*), or by pinning to specific versions (e.g., webpack@4.47.0 || 5.102.1) [1][7]. If you set minimumReleaseAge explicitly in your configuration, pnpm automatically treats minimumReleaseAgeStrict as true (unless you manually set it to false), ensuring that if no version satisfies both the range and the age requirement, pnpm will not silently fall back to an immature version [8]. The built-in default of 1440 minutes remains non-strict for backward compatibility [8].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== relevant files ==\n'
git ls-files | rg '(^|/)(pnpm-workspace\.yaml|\.npmrc|package\.json|pnpm-lock\.yaml|README\.md)$'

printf '\n== pnpm-workspace.yaml excerpt ==\n'
if [ -f pnpm-workspace.yaml ]; then
  cat -n pnpm-workspace.yaml | sed -n '1,220p'
fi

printf '\n== search for minimumReleaseAge settings ==\n'
rg -n "minimumReleaseAge|typescript-7|typescript@7\.0\.1-rc|catalog" -S .

Repository: NVIDIA/elements

Length of output: 50371


🌐 Web query:

pnpm minimumReleaseAgeExclude alias dependency name npm alias underlying package name

💡 Result:

In pnpm, when using the minimumReleaseAgeExclude configuration setting, the exclusion logic matches against the alias name used in your dependency definition, not the underlying package name [1][2]. If you have aliased a package—for instance, installing awesome-lodash as lodash via pnpm add lodash@npm:awesome-lodash—you must list the alias (lodash) in the minimumReleaseAgeExclude array to exempt it from the minimumReleaseAge restriction [1][3]. Key details regarding minimumReleaseAgeExclude behavior: - Scope and Matching: The setting supports exact package names, glob patterns (e.g., @myorg/*), and specific version pinning (e.g., webpack@4.47.0 || 5.102.1) [1][4]. - Alias Handling: Because pnpm resolves dependencies by alias, the minimumReleaseAgeExclude check is performed against the alias provided in the package.json [2]. - Usage: This feature is intended to allow specific dependencies to be installed immediately, bypassing the configured minimumReleaseAge (which defaults to 1440 minutes in pnpm v11+) [1][4]. If you are using aliases to maintain multiple versions of the same package, you must ensure that the specific alias names used in your project are included in the exclusion list if you wish to bypass the maturity requirement for those specific instances [1][3].

Citations:


Add typescript-7 to minimumReleaseAgeExclude. pnpm matches this list against the dependency alias, so the existing typescript entry does not exempt typescript-7; installs resolving typescript@7.0.1-rc can still be blocked by the age policy.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pnpm-workspace.yaml` around lines 113 - 114, The pnpm age-policy exemption is
incomplete because the minimumReleaseAgeExclude list currently covers only the
base TypeScript alias, not the aliased package name used for the release
candidate. Update the workspace configuration so the same exclusion list
explicitly includes the typescript-7 alias alongside the existing typescript
entry, ensuring installs that resolve through typescript-7 are matched correctly
by pnpm.

Comment on lines 27 to +29
"typescript": "catalog:",
"vite": "catalog:",
"vue-tsc": "3.2.7"
"vue-tsc": "3.3.5"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

Does vue-tsc 3.3.5 support TypeScript 7.0.1-rc?

💡 Result:

As of June 30, 2026, there is no official documentation stating that vue-tsc 3.3.5 has verified support for TypeScript 7.0.1-rc [1][2]. vue-tsc acts as a wrapper around the TypeScript compiler (tsc) [3], and it typically maintains compatibility with the TypeScript versions supported by the underlying Vue Language Tools [3]. While vue-tsc allows users to point to a custom tsc path [1][4], it is not designed to guarantee support for unreleased or release candidate (rc) versions of TypeScript unless explicitly stated in the release notes or compatibility matrices for the specific version of the vue-tsc package. To check for compatibility, you can attempt to use the specific TypeScript version by installing it alongside vue-tsc and verifying that your type checking processes (e.g., vue-tsc --noEmit) complete without errors. Given that vue-tsc 3.3.5 was released on June 13, 2026 [1][2], you should review the official vuejs/language-tools GitHub repository releases for any updates regarding experimental support for newer TypeScript versions [5].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== package files ==\n'
git ls-files 'projects/starters/vue/package.json' 'package.json' '**/catalog*' '**/typescript*' | sed -n '1,120p'

printf '\n== starter package.json ==\n'
cat -n projects/starters/vue/package.json

printf '\n== search for typescript-7 catalog ==\n'
rg -n '"typescript-7"|typescript-7|catalog:' -S . --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' | sed -n '1,200p'

Repository: NVIDIA/elements

Length of output: 14350


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json, urllib.request
for pkg, version in [('vue-tsc','3.3.5'), ('typescript','7.0.1-rc')]:
    url = f'https://registry.npmjs.org/{pkg}/{version}'
    try:
        with urllib.request.urlopen(url, timeout=20) as r:
            data = json.load(r)
        print(f'== {pkg}@{version} ==')
        for k in ['name','version','peerDependencies','dependencies','engines','keywords']:
            if k in data:
                print(k, data[k])
        print()
    except Exception as e:
        print(f'FAILED {pkg}@{version}: {e}')
PY

Repository: NVIDIA/elements

Length of output: 471


🌐 Web query:

vue-tsc 3.3.5 peerDependencies TypeScript 7 support

💡 Result:

As of June 30, 2026, vue-tsc version 3.3.5 does not provide official support for TypeScript 7 (often referred to as TypeScript Native or tsgo) [1][2]. The current TypeScript 7 project is a public preview port of the TypeScript compiler to Go [1]. Because vue-tsc relies on patching the standard TypeScript (tsc) JavaScript implementation to integrate Vue-specific type checking, it is not currently compatible with the Go-based TypeScript architecture, which lacks the same internal plugin and patching mechanisms [1][3]. Additionally, vue-tsc continues to maintain its peerDependencies based on the standard Node.js-based TypeScript releases (typically requiring >= 5.0.0) [4]. There have been no announcements or documentation in the vue-tsc 3.3.5 release notes indicating integration with or support for TypeScript 7 [5][6]. Work regarding the potential implications of a non-JavaScript-based TypeScript implementation on Vue Language Tools is still in the early, speculative, or discussion phases [1][2][3].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
python3 - <<'PY'
import json, urllib.request
url='https://registry.npmjs.org/vue-tsc/3.3.5'
with urllib.request.urlopen(url, timeout=20) as r:
    data=json.load(r)
print(json.dumps({
    'peerDependencies': data.get('peerDependencies'),
    'dependencies': data.get('dependencies'),
    'engines': data.get('engines'),
    'version': data.get('version'),
}, indent=2))
PY

Repository: NVIDIA/elements

Length of output: 2747


Pin vue-tsc to a TypeScript 6-compatible release or keep typescript off typescript-7. vue-tsc 3.3.5 tracks the standard Node-based TypeScript compiler line; resolving typescript to 7.0.1-rc can break the vue-tsc --build step.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/starters/vue/package.json` around lines 27 - 29, The starter package
dependency set is resolving vue-tsc 3.3.5 against a TypeScript 7 RC, which can
break the build flow. Update the dependency declarations in the Vue starter
package so that vue-tsc is pinned to a TypeScript 6-compatible release, or
otherwise ensure the package does not resolve `typescript` from the
`typescript-7` catalog. Keep the fix localized to the package.json dependency
entries for `typescript` and `vue-tsc`.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file scope(ci) scope(internals) scope(starters)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant