Skip to content

fix(deps): remove unused @quasar/app-vite and bump vite to 8.1.4#265

Open
rlorenzo wants to merge 1 commit into
mainfrom
fix/vueapp-audit-esbuild-immutable
Open

fix(deps): remove unused @quasar/app-vite and bump vite to 8.1.4#265
rlorenzo wants to merge 1 commit into
mainfrom
fix/vueapp-audit-esbuild-immutable

Conversation

@rlorenzo

@rlorenzo rlorenzo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

What

Clears the high-severity findings in the VueApp production dependency audit (npm audit --prefix VueApp --omit=dev --audit-level=high). That audit step does not block deployment; it was marking the Jenkins Viper .NET deploy step as unstable.

  • Remove @quasar/app-vite (devDependency). The build does not use it (the build uses @quasar/vite-plugin via a hand-rolled vite.config.ts, there is no quasar.config, and the npm scripts call vite/vite build directly). Its only real use was supplying ESLint ignore globs via @quasar/app-vite/eslint; those are inlined into eslint.config.mjs in this PR. It was also the sole hard requirer of esbuild, and it pulled in the sass-embedded -> immutable chain plus a large unused subtree (@quasar/ssl-certificate, @peculiar/*, selfsigned, ...). Dropping it prunes esbuild, immutable, sass, sass-embedded entirely, clearing the high-severity immutable DoS advisories and the low-severity esbuild advisory from the production tree.
  • Inline the Quasar ESLint ignore globs into eslint.config.mjs so linting no longer imports from @quasar/app-vite.
  • Update vite 8.1.0 -> 8.1.4.

Why removal instead of version overrides

immutable and esbuild are transitive-only and reachable only through @quasar/app-vite. Since the build does not use that package, removing it fixes both findings at the source rather than pinning packages we do not ship. Vite 8 already uses rolldown + oxc for bundling and minification, so esbuild was vestigial.

Verification

  • npm audit --prefix VueApp --omit=dev --audit-level=high: found 0 vulnerabilities
  • npm run build (VueApp): passes (type-check + rolldown/oxc)
  • npm run test:run (VueApp): 55 files, 799 tests pass
  • npm run lint (VueApp): ESLint config loads without @quasar/app-vite
  • No .scss/.sass sources exist, so removing the Sass compiler is safe (Quasar uses precompiled CSS)

Note: the large package-lock.json delta is entirely the pruning of the @quasar/app-vite subtree.

Copilot AI review requested due to automatic review settings July 23, 2026 04:52
@codecov-commenter

codecov-commenter commented Jul 23, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 2.2kB (0.1%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
viper-frontend-esm 2.14MB 2.2kB (0.1%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: viper-frontend-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/GenericError-*.js -635 bytes 524.37kB -0.12%
assets/vendor-*.js 39 bytes 272.05kB 0.01%
assets/ManageLinkCollections-*.js 32 bytes 57.65kB 0.06%
assets/schedule-*.js 73 bytes 54.85kB 0.13%
assets/TermManagement-*.js 4 bytes 52.38kB 0.01%
assets/CourseDetail-*.js 44 bytes 39.37kB 0.11%
assets/PhotoGallery-*.js 42 bytes 36.13kB 0.12%
assets/InstructorEdit-*.js 47 bytes 28.61kB 0.16%
assets/InstructorList-*.js 43 bytes 25.95kB 0.17%
assets/StaffDashboard-*.js 41 bytes 25.51kB 0.16%
assets/effort-*.js 42 bytes 23.2kB 0.18%
assets/CrossListedCoursesSection-*.js 1 bytes 22.3kB 0.0%
assets/MultiYearReport-*.js 51 bytes 18.8kB 0.27%
assets/ClinicianScheduleView-*.js 41 bytes 18.67kB 0.22%
assets/AuditList-*.js 43 bytes 17.63kB 0.24%
assets/RotationScheduleView-*.js 43 bytes 17.24kB 0.25%
assets/EmergencyContactForm-*.js 43 bytes 17.2kB 0.25%
assets/MyAssessments-*.js 50 bytes 16.52kB 0.3%
assets/CourseList-*.js 42 bytes 15.9kB 0.26%
assets/AuditLogPage-*.js -1 bytes 11.26kB -0.01%
assets/EmergencyContactList-*.js 38 bytes 11.06kB 0.34%
assets/ManageBundleCompetencies-*.js 43 bytes 8.87kB 0.49%
assets/ReportFilterForm-*.js 43 bytes 8.86kB 0.49%
assets/StudentClassYear-*.js 61 bytes 8.45kB 0.73%
assets/MyEffort-*.js 38 bytes 8.21kB 0.47%
assets/EmergencyContactView-*.js 43 bytes 7.61kB 0.57%
assets/ManageSessionCompetencies-*.js 43 bytes 6.84kB 0.63%
assets/AssessmentList-*.js 18 bytes 6.81kB 0.27%
assets/dist-*.js -6.37kB 2.76kB -69.79%
assets/dist-*.js (New) 6.65kB 6.65kB 100.0% 🚀
assets/WebReports-*.js 16 bytes 6.38kB 0.25%
assets/CompetenciesBundleReport-*.js 4 bytes 6.07kB 0.07%
assets/use-*.js 3 bytes 742 bytes 0.41%
assets/use-*.js 43 bytes 6.01kB 0.72%
assets/AssessmentEpa-*.js 10 bytes 5.65kB 0.18%
assets/StudentSelect-*.js 27 bytes 5.42kB 0.5%
assets/ClinicalEffort-*.js 43 bytes 5.33kB 0.81%
assets/ManageEpas-*.js 3 bytes 5.21kB 0.06%
assets/InstructorDetail-*.js 43 bytes 5.01kB 0.87%
assets/TermSelection-*.js -1 bytes 4.54kB -0.02%
assets/ManageLevels-*.js -1 bytes 4.48kB -0.02%
assets/AssessmentEpaEdit-*.js 43 bytes 3.79kB 1.15%
assets/ManageCourseCompetencies-*.js 51 bytes 3.67kB 1.41%
assets/StudentClassYearImport-*.js 42 bytes 3.63kB 1.17%
assets/ClinicalSchedulerHome-*.js 43 bytes 3.52kB 1.24%
assets/students-*.js -7 bytes 3.19kB -0.22%
assets/AssessmentCompetency-*.js 48 bytes 3.0kB 1.62%
assets/ManageDomains-*.js 1 bytes 2.75kB 0.04%
assets/PercentAssignTypeList-*.js 43 bytes 2.72kB 1.6%
assets/LevelSelect-*.js 2 bytes 2.61kB 0.08%
assets/PercentAssignTypeInstructors-*.js 43 bytes 2.44kB 1.79%
assets/CtsHome-*.js 43 bytes 2.26kB 1.94%
assets/clinicalscheduler-*.js 5 bytes 1.72kB 0.29%
assets/cahfs-*.js 5 bytes 1.65kB 0.3%
assets/EffortHome-*.js 43 bytes 1.39kB 3.19%
assets/cms-*.js 5 bytes 1.38kB 0.36%
assets/computing-*.js 5 bytes 979 bytes 0.51%
assets/useApi-*.js (New) 852 bytes 852 bytes 100.0% 🚀
assets/CAHFSAuth-*.js 43 bytes 632 bytes 7.3% ⚠️
assets/CAHFSSection-*.js 3 bytes 513 bytes 0.59%
assets/ContentBlock-*.js 2 bytes 486 bytes 0.41%
assets/Error404-*.js 3 bytes 358 bytes 0.85%

Copilot AI 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.

Pull request overview

Removes an unused Quasar CLI dependency and bumps Vite to address production dependency audit findings in the VueApp build tooling.

Changes:

  • Removed @quasar/app-vite from devDependencies.
  • Bumped vite from ^8.1.0 to ^8.1.4.

Comment thread VueApp/package.json
@codecov-commenter

codecov-commenter commented Jul 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 45.38%. Comparing base (b52f541) to head (0a65ec1).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #265      +/-   ##
==========================================
- Coverage   45.39%   45.38%   -0.01%     
==========================================
  Files         916      916              
  Lines       52784    52787       +3     
  Branches     5005     5005              
==========================================
  Hits        23960    23960              
- Misses      28196    28199       +3     
  Partials      628      628              
Flag Coverage Δ
backend 45.42% <ø> (ø)
frontend 44.72% <ø> (-0.05%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

- Drop @quasar/app-vite: only used for its ESLint ignore-glob config and
  as the sole requirer of esbuild plus the sass-embedded -> immutable
  chain. Removing it drops the high-severity immutable DoS and esbuild
  advisories from the VueApp production tree.
- Inline the Quasar ESLint ignore globs into eslint.config.mjs so linting
  no longer imports from @quasar/app-vite.
- Update vite 8.1.0 -> 8.1.4.
Copilot AI review requested due to automatic review settings July 23, 2026 05:55
@rlorenzo
rlorenzo force-pushed the fix/vueapp-audit-esbuild-immutable branch from ee0896a to 0a65ec1 Compare July 23, 2026 05:55

Copilot AI 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.

Pull request overview

Copilot reviewed 2 out of 3 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

VueApp/eslint.config.mjs:23

  • The PR description says the only functional use of @quasar/app-vite was to supply ESLint ignore globs, but this change also removes the Quasar recommended ESLint config (...quasarEslint.configs.recommended()). If dropping Quasar-specific rules is intentional, the PR description should be updated to reflect that; otherwise, consider replacing those recommended rules via an alternative Quasar ESLint package/config so lint coverage doesn’t regress when removing @quasar/app-vite.
    // ESLint recommended rules
    eslint.configs.recommended,

    // Vue strongly recommended rules
    ...pluginVue.configs["flat/strongly-recommended"],

@rlorenzo
rlorenzo requested review from bniedzie and bsedwards July 23, 2026 06:32
@rlorenzo

Copy link
Copy Markdown
Contributor Author

@
Re: the suppressed low-confidence note about ...quasarEslint.configs.recommended() removing Quasar-specific rules, this is a false positive. In @quasar/app-vite v2, configs.recommended() does not add any rules, plugins, or language options. Its entire implementation just returns an ignore list:

// node_modules/@quasar/app-vite/exports/eslint/eslint.js
const ignoreList = ["dist/*", "src-capacitor/*", "src-cordova/*", ".quasar/*", "quasar.config.*.temporary.compiled*"]
export default {
  configs: {
    recommended() {
      return [{ ignores: ignoreList }]
    }
  }
}

So there are no Quasar-specific rules to lose. Those exact ignore globs are inlined into the ignores array in this PR (dist/* was already covered by dist/**), which is why the description says the only real use was supplying ignore globs. No lint coverage regresses.
@

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.

4 participants