vite-plus 0.1.13-alpha.5 → 0.1.14-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/AGENTS.md +12 -0
  2. package/README.md +4 -0
  3. package/dist/global/{agent-gbykY0o2.js → agent-DTz-Dh1r.js} +14 -32
  4. package/dist/global/{cli-truncate-BmIULUG7.js → cli-truncate-Da6Y8aM8.js} +2 -2
  5. package/dist/global/compat-Ch3iWOnQ.js +14 -0
  6. package/dist/global/config.js +3 -2
  7. package/dist/global/create.js +13 -4
  8. package/dist/global/{log-update-Beldo2tV.js → log-update-C8WCYCbc.js} +3 -3
  9. package/dist/global/migrate.js +22 -5
  10. package/dist/global/{package-D0VpX-8d.js → package-Y1UTfJnZ.js} +26 -1
  11. package/dist/global/report-C7xbSNED.js +28 -0
  12. package/dist/global/{slice-ansi-1i6Zdm-R.js → slice-ansi-Fap0ehe9.js} +1 -1
  13. package/dist/global/staged.js +64 -8
  14. package/dist/global/version.js +1 -1
  15. package/dist/global/{workspace-BUJYxGAP.js → workspace-BlrOxcHM.js} +3 -3
  16. package/dist/global/wrap-ansi-Ou9oAs-a.js +3 -0
  17. package/dist/global/{wrap-ansi-CnYUWev2.js → wrap-ansi-eywLlPVQ.js} +1 -1
  18. package/dist/index.d.ts +2 -2
  19. package/dist/migration/migrator.js +26 -11
  20. package/dist/pack-bin.js +3 -1
  21. package/dist/resolve-vite-config.d.ts +9 -1
  22. package/dist/resolve-vite-config.js +78 -1
  23. package/dist/utils/constants.d.ts +6 -0
  24. package/dist/utils/constants.js +8 -0
  25. package/dist/utils/editor.js +1 -1
  26. package/dist/utils/package.d.ts +6 -0
  27. package/dist/utils/package.js +19 -0
  28. package/package.json +12 -12
  29. package/skills/vite-plus/docs/config/build.md +21 -0
  30. package/skills/vite-plus/docs/config/fmt.md +18 -0
  31. package/skills/vite-plus/docs/config/index.md +31 -0
  32. package/skills/vite-plus/docs/config/lint.md +24 -0
  33. package/skills/vite-plus/docs/config/pack.md +17 -0
  34. package/skills/vite-plus/docs/config/run.md +231 -0
  35. package/skills/vite-plus/docs/config/staged.md +15 -0
  36. package/skills/vite-plus/docs/config/test.md +18 -0
  37. package/skills/vite-plus/docs/guide/build.md +40 -0
  38. package/skills/vite-plus/docs/guide/cache.md +119 -0
  39. package/skills/vite-plus/docs/guide/check.md +41 -0
  40. package/skills/vite-plus/docs/guide/ci.md +64 -0
  41. package/skills/vite-plus/docs/guide/commit-hooks.md +51 -0
  42. package/skills/vite-plus/docs/guide/create.md +88 -0
  43. package/skills/vite-plus/docs/guide/dev.md +24 -0
  44. package/skills/vite-plus/docs/guide/env.md +84 -0
  45. package/skills/vite-plus/docs/guide/fmt.md +41 -0
  46. package/skills/vite-plus/docs/guide/ide-integration.md +36 -0
  47. package/skills/vite-plus/docs/guide/implode.md +23 -0
  48. package/skills/vite-plus/docs/guide/index.md +93 -0
  49. package/skills/vite-plus/docs/guide/install.md +130 -0
  50. package/skills/vite-plus/docs/guide/lint.md +50 -0
  51. package/skills/vite-plus/docs/guide/migrate.md +174 -0
  52. package/skills/vite-plus/docs/guide/pack.md +61 -0
  53. package/skills/vite-plus/docs/guide/run.md +292 -0
  54. package/skills/vite-plus/docs/guide/test.md +35 -0
  55. package/skills/vite-plus/docs/guide/troubleshooting.md +71 -0
  56. package/skills/vite-plus/docs/guide/upgrade.md +28 -0
  57. package/skills/vite-plus/docs/guide/vpx.md +66 -0
  58. package/skills/vite-plus/docs/guide/why.md +39 -0
  59. package/templates/monorepo/tsconfig.json +2 -2
  60. package/dist/global/wrap-ansi-DAqB-SZm.js +0 -3
  61. package/dist/oxfmt-config.d.ts +0 -1
  62. package/dist/oxfmt-config.js +0 -0
  63. /package/dist/global/{src-FkMgH-SM.js → src-B-pcmd0F.js} +0 -0
  64. /package/dist/global/{strip-ansi-DbamwI77.js → strip-ansi-CE-VDMdw.js} +0 -0
package/AGENTS.md CHANGED
@@ -69,6 +69,18 @@ These commands map to their corresponding tools. For example, `vp dev --port 300
69
69
  - **Import JavaScript modules from `vite-plus`:** Instead of importing from `vite` or `vitest`, all modules should be imported from the project's `vite-plus` dependency. For example, `import { defineConfig } from 'vite-plus';` or `import { expect, test, vi } from 'vite-plus/test';`. You must not install `vitest` to import test utilities.
70
70
  - **Type-Aware Linting:** There is no need to install `oxlint-tsgolint`, `vp lint --type-aware` works out of the box.
71
71
 
72
+ ## CI Integration
73
+
74
+ For GitHub Actions, consider using [`voidzero-dev/setup-vp`](https://github.com/voidzero-dev/setup-vp) to replace separate `actions/setup-node`, package-manager setup, cache, and install steps with a single action.
75
+
76
+ ```yaml
77
+ - uses: voidzero-dev/setup-vp@v1
78
+ with:
79
+ cache: true
80
+ - run: vp check
81
+ - run: vp test
82
+ ```
83
+
72
84
  ## Review Checklist for Agents
73
85
 
74
86
  - [ ] Run `vp install` after pulling remote changes and before getting started.
package/README.md CHANGED
@@ -202,3 +202,7 @@ Or, if you are using Yarn:
202
202
  "vitest": "npm:@voidzero-dev/vite-plus-test@latest"
203
203
  }
204
204
  ```
205
+
206
+ ## Sponsors
207
+
208
+ Thanks to [namespace.so](https://namespace.so) for powering our CI/CD pipelines with fast, free macOS and Linux runners.
@@ -1,12 +1,13 @@
1
1
  import { r as __toESM, t as __commonJSMin } from "./chunk-BoAXSpZd.js";
2
2
  import { _ as YAMLMap, g as YAMLSeq, i as parseDocument, n as parse, y as Scalar } from "./browser-09BZLUYM.js";
3
- import { a as editJsonFile, d as VITE_PLUS_OVERRIDE_PACKAGES, f as VITE_PLUS_VERSION, l as BASEURL_TSCONFIG_WARNING, o as isJsonFile, s as readJsonFile, t as detectPackageMetadata, u as VITE_PLUS_NAME } from "./package-D0VpX-8d.js";
3
+ import { c as readJsonFile, d as VITE_PLUS_NAME, f as VITE_PLUS_OVERRIDE_PACKAGES, m as isForceOverrideMode, n as detectPackageMetadata, o as editJsonFile, p as VITE_PLUS_VERSION, s as isJsonFile, u as BASEURL_TSCONFIG_WARNING } from "./package-Y1UTfJnZ.js";
4
4
  import { n as accent } from "./help-HviKaKAU.js";
5
+ import { n as addMigrationWarning, t as addManualStep } from "./report-C7xbSNED.js";
5
6
  import path from "node:path";
6
7
  import { stripVTControlCharacters, styleText } from "node:util";
7
8
  import process$1, { stdin, stdout } from "node:process";
8
9
  import * as k from "node:readline";
9
- import ot from "node:readline";
10
+ import c from "node:readline";
10
11
  import { ReadStream } from "node:tty";
11
12
  import color from "picocolors";
12
13
  import fs from "node:fs";
@@ -358,7 +359,7 @@ var B = class {
358
359
  this.state = "cancel", this.close();
359
360
  }, { once: !0 });
360
361
  }
361
- this.rl = ot.createInterface({
362
+ this.rl = c.createInterface({
362
363
  input: this.input,
363
364
  tabSize: 2,
364
365
  prompt: "",
@@ -3176,33 +3177,6 @@ function detectConfigs(projectPath) {
3176
3177
  return configs;
3177
3178
  }
3178
3179
  //#endregion
3179
- //#region src/migration/report.ts
3180
- function createMigrationReport() {
3181
- return {
3182
- createdViteConfigCount: 0,
3183
- mergedConfigCount: 0,
3184
- mergedStagedConfigCount: 0,
3185
- inlinedLintStagedConfigCount: 0,
3186
- removedConfigCount: 0,
3187
- tsdownImportCount: 0,
3188
- rewrittenImportFileCount: 0,
3189
- rewrittenImportErrors: [],
3190
- eslintMigrated: false,
3191
- prettierMigrated: false,
3192
- gitHooksConfigured: false,
3193
- warnings: [],
3194
- manualSteps: []
3195
- };
3196
- }
3197
- function addMigrationWarning(report, warning) {
3198
- if (!report || report.warnings.includes(warning)) return;
3199
- report.warnings.push(warning);
3200
- }
3201
- function addManualStep(report, step) {
3202
- if (!report || report.manualSteps.includes(step)) return;
3203
- report.manualSteps.push(step);
3204
- }
3205
- //#endregion
3206
3180
  //#region src/migration/migrator.ts
3207
3181
  var import_semver = /* @__PURE__ */ __toESM(require_semver(), 1);
3208
3182
  const LINT_STAGED_JSON_CONFIG_FILES = [".lintstagedrc.json", ".lintstagedrc"];
@@ -3734,7 +3708,15 @@ function rewriteRootWorkspacePackageJson(projectPath, packageManager, skipStaged
3734
3708
  ...VITE_PLUS_OVERRIDE_PACKAGES
3735
3709
  };
3736
3710
  else if (packageManager === PackageManager.pnpm) {
3737
- for (const key of [...Object.keys(VITE_PLUS_OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
3711
+ if (isForceOverrideMode()) pkg.pnpm = {
3712
+ ...pkg.pnpm,
3713
+ overrides: {
3714
+ ...pkg.pnpm?.overrides,
3715
+ ...VITE_PLUS_OVERRIDE_PACKAGES,
3716
+ [VITE_PLUS_NAME]: VITE_PLUS_VERSION
3717
+ }
3718
+ };
3719
+ else for (const key of [...Object.keys(VITE_PLUS_OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
3738
3720
  if (pkg.pnpm?.overrides?.[key]) delete pkg.pnpm.overrides[key];
3739
3721
  if (pkg.resolutions?.[key]) delete pkg.resolutions[key];
3740
3722
  }
@@ -4605,4 +4587,4 @@ function getMarkedRange(content, startMarker, endMarker) {
4605
4587
  };
4606
4588
  }
4607
4589
  //#endregion
4608
- export { displayRelative as A, outro as B, defaultInteractive as C, runViteInstall as D, runViteFmt as E, cancel as F, spinner as H, confirm as I, intro as L, DependencyType as M, PackageManager as N, selectPackageManager as O, require_semver as P, log as R, cancelAndExit as S, promptGitHooks as T, text as U, select as V, Ct as W, rewriteMonorepoProject as _, writeAgentInstructions as a, editYamlFile as b, detectEslintProject as c, installGitHooks as d, mergeViteConfigFiles as f, rewriteMonorepo as g, preflightGitHooksSetup as h, updateExistingAgentInstructions as i, templatesDir as j, upgradeYarn as k, detectPrettierProject as l, migratePrettierToOxfmt as m, detectExistingAgentTargetPaths as n, checkViteVersion as o, migrateEslintToOxlint as p, selectAgentTargetPaths as r, checkVitestVersion as s, detectAgentConflicts as t, ensurePreCommitHook as u, rewriteStandaloneProject as v, downloadPackageManager$1 as w, readYamlFile as x, createMigrationReport as y, multiselect as z };
4590
+ export { templatesDir as A, select as B, downloadPackageManager$1 as C, selectPackageManager as D, runViteInstall as E, confirm as F, text as H, intro as I, log as L, PackageManager as M, require_semver as N, upgradeYarn as O, cancel as P, multiselect as R, defaultInteractive as S, runViteFmt as T, Ct as U, spinner as V, rewriteMonorepoProject as _, writeAgentInstructions as a, readYamlFile as b, detectEslintProject as c, installGitHooks as d, mergeViteConfigFiles as f, rewriteMonorepo as g, preflightGitHooksSetup as h, updateExistingAgentInstructions as i, DependencyType as j, displayRelative as k, detectPrettierProject as l, migratePrettierToOxfmt as m, detectExistingAgentTargetPaths as n, checkViteVersion as o, migrateEslintToOxlint as p, selectAgentTargetPaths as r, checkVitestVersion as s, detectAgentConflicts as t, ensurePreCommitHook as u, rewriteStandaloneProject as v, promptGitHooks as w, cancelAndExit as x, editYamlFile as y, outro as z };
@@ -1,5 +1,5 @@
1
- import { n as eastAsianWidth, t as stripAnsi } from "./strip-ansi-DbamwI77.js";
2
- import { t as sliceAnsi } from "./slice-ansi-1i6Zdm-R.js";
1
+ import { n as eastAsianWidth, t as stripAnsi } from "./strip-ansi-CE-VDMdw.js";
2
+ import { t as sliceAnsi } from "./slice-ansi-Fap0ehe9.js";
3
3
  //#region ../../node_modules/.pnpm/string-width@8.1.0/node_modules/string-width/index.js
4
4
  /**
5
5
  Logic:
@@ -0,0 +1,14 @@
1
+ import { n as addMigrationWarning } from "./report-C7xbSNED.js";
2
+ //#region src/migration/compat.ts
3
+ /**
4
+ * Check for Rolldown-incompatible manualChunks config patterns.
5
+ */
6
+ function checkManualChunksCompat(output, report) {
7
+ const outputs = Array.isArray(output) ? output : output ? [output] : [];
8
+ for (const out of outputs) if (out.manualChunks != null && typeof out.manualChunks !== "function") {
9
+ addMigrationWarning(report, "Object-form `build.rollupOptions.output.manualChunks` is not supported by Rolldown. Convert it to function form or use `build.rolldownOptions.output.codeSplitting`. See: https://rolldown.rs/options/output#manualchunks and https://rolldown.rs/in-depth/manual-code-splitting");
10
+ break;
11
+ }
12
+ }
13
+ //#endregion
14
+ export { checkManualChunksCompat };
@@ -1,8 +1,9 @@
1
- import { C as defaultInteractive, T as promptGitHooks, i as updateExistingAgentInstructions, u as ensurePreCommitHook } from "./agent-gbykY0o2.js";
1
+ import { S as defaultInteractive, i as updateExistingAgentInstructions, u as ensurePreCommitHook, w as promptGitHooks } from "./agent-DTz-Dh1r.js";
2
2
  import { t as lib_default } from "./lib-DxappLRQ.js";
3
3
  import "./browser-09BZLUYM.js";
4
- import "./package-D0VpX-8d.js";
4
+ import "./package-Y1UTfJnZ.js";
5
5
  import { i as log, t as renderCliDoc } from "./help-HviKaKAU.js";
6
+ import "./report-C7xbSNED.js";
6
7
  import { join } from "node:path";
7
8
  import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
8
9
  import { vitePlusHeader } from "../../binding/index.js";
@@ -1,10 +1,11 @@
1
1
  import { r as __toESM, t as __commonJSMin } from "./chunk-BoAXSpZd.js";
2
- import { A as displayRelative, C as defaultInteractive, D as runViteInstall, E as runViteFmt, F as cancel, H as spinner, I as confirm, L as intro, M as DependencyType, N as PackageManager, O as selectPackageManager, R as log, T as promptGitHooks, U as text, V as select, W as Ct, _ as rewriteMonorepoProject, a as writeAgentInstructions, d as installGitHooks, g as rewriteMonorepo, j as templatesDir, n as detectExistingAgentTargetPaths, r as selectAgentTargetPaths, v as rewriteStandaloneProject, w as downloadPackageManager$1, z as multiselect } from "./agent-gbykY0o2.js";
2
+ import { A as templatesDir, B as select, C as downloadPackageManager$1, D as selectPackageManager, E as runViteInstall, F as confirm, H as text, I as intro, L as log, M as PackageManager, P as cancel, R as multiselect, S as defaultInteractive, T as runViteFmt, U as Ct, V as spinner, _ as rewriteMonorepoProject, a as writeAgentInstructions, d as installGitHooks, g as rewriteMonorepo, j as DependencyType, k as displayRelative, n as detectExistingAgentTargetPaths, r as selectAgentTargetPaths, v as rewriteStandaloneProject, w as promptGitHooks } from "./agent-DTz-Dh1r.js";
3
3
  import { t as lib_default } from "./lib-DxappLRQ.js";
4
4
  import "./browser-09BZLUYM.js";
5
- import { a as editJsonFile, s as readJsonFile } from "./package-D0VpX-8d.js";
5
+ import { c as readJsonFile, o as editJsonFile, t as checkNpmPackageExists } from "./package-Y1UTfJnZ.js";
6
6
  import { a as muted, i as log$1, n as accent, o as success, t as renderCliDoc } from "./help-HviKaKAU.js";
7
- import { a as detectExistingEditor, n as updatePackageJsonWithDeps, o as selectEditor, r as updateWorkspaceConfig, s as writeEditorConfigs, t as detectWorkspace$1 } from "./workspace-BUJYxGAP.js";
7
+ import "./report-C7xbSNED.js";
8
+ import { a as detectExistingEditor, n as updatePackageJsonWithDeps, o as selectEditor, r as updateWorkspaceConfig, s as writeEditorConfigs, t as detectWorkspace$1 } from "./workspace-BlrOxcHM.js";
8
9
  import path from "node:path";
9
10
  import { styleText } from "node:util";
10
11
  import color from "picocolors";
@@ -3421,7 +3422,15 @@ async function executeRemoteTemplate(workspaceInfo, templateInfo, options) {
3421
3422
  cwd: workspaceInfo.rootDir,
3422
3423
  envs
3423
3424
  }, templateInfo.parentDir);
3424
- } else result = await runRemoteTemplateCommand(workspaceInfo, workspaceInfo.rootDir, templateInfo, true, silent);
3425
+ } else {
3426
+ if (!isGitHubTemplate) {
3427
+ if (!await checkNpmPackageExists(templateInfo.command)) {
3428
+ if (!silent) log.error(`Template "${templateInfo.command}" not found on npm. Run ${yellow("vp create --list")} to see available templates.`);
3429
+ return { exitCode: 1 };
3430
+ }
3431
+ }
3432
+ result = await runRemoteTemplateCommand(workspaceInfo, workspaceInfo.rootDir, templateInfo, true, silent);
3433
+ }
3425
3434
  const exitCode = result.exitCode;
3426
3435
  if (exitCode === 127) {
3427
3436
  log.info(yellow("\nTroubleshooting:"));
@@ -1,6 +1,6 @@
1
- import { t as stripAnsi } from "./strip-ansi-DbamwI77.js";
2
- import { t as sliceAnsi } from "./slice-ansi-1i6Zdm-R.js";
3
- import { t as wrapAnsi } from "./wrap-ansi-CnYUWev2.js";
1
+ import { t as stripAnsi } from "./strip-ansi-CE-VDMdw.js";
2
+ import { t as sliceAnsi } from "./slice-ansi-Fap0ehe9.js";
3
+ import { t as wrapAnsi } from "./wrap-ansi-eywLlPVQ.js";
4
4
  import process$1 from "node:process";
5
5
  import nodeos__default from "node:os";
6
6
  //#region ../../node_modules/.pnpm/environment@1.1.0/node_modules/environment/index.js
@@ -1,10 +1,11 @@
1
1
  import { r as __toESM } from "./chunk-BoAXSpZd.js";
2
- import { A as displayRelative, B as outro, C as defaultInteractive, D as runViteInstall, H as spinner, I as confirm, N as PackageManager, O as selectPackageManager, P as require_semver, R as log, S as cancelAndExit, T as promptGitHooks, V as select, W as Ct, a as writeAgentInstructions, c as detectEslintProject, d as installGitHooks, f as mergeViteConfigFiles, g as rewriteMonorepo, h as preflightGitHooksSetup, k as upgradeYarn, l as detectPrettierProject, m as migratePrettierToOxfmt, n as detectExistingAgentTargetPaths, o as checkViteVersion, p as migrateEslintToOxlint, r as selectAgentTargetPaths, s as checkVitestVersion, t as detectAgentConflicts, v as rewriteStandaloneProject, w as downloadPackageManager$1, y as createMigrationReport } from "./agent-gbykY0o2.js";
2
+ import { B as select, C as downloadPackageManager$1, D as selectPackageManager, E as runViteInstall, F as confirm, L as log, M as PackageManager, N as require_semver, O as upgradeYarn, S as defaultInteractive, U as Ct, V as spinner, a as writeAgentInstructions, c as detectEslintProject, d as installGitHooks, f as mergeViteConfigFiles, g as rewriteMonorepo, h as preflightGitHooksSetup, k as displayRelative, l as detectPrettierProject, m as migratePrettierToOxfmt, n as detectExistingAgentTargetPaths, o as checkViteVersion, p as migrateEslintToOxlint, r as selectAgentTargetPaths, s as checkVitestVersion, t as detectAgentConflicts, v as rewriteStandaloneProject, w as promptGitHooks, x as cancelAndExit, z as outro } from "./agent-DTz-Dh1r.js";
3
3
  import { t as lib_default } from "./lib-DxappLRQ.js";
4
4
  import "./browser-09BZLUYM.js";
5
- import { i as readNearestPackageJson, r as hasVitePlusDependency } from "./package-D0VpX-8d.js";
5
+ import { a as readNearestPackageJson, i as hasVitePlusDependency, m as isForceOverrideMode } from "./package-Y1UTfJnZ.js";
6
6
  import { a as muted, i as log$1, n as accent, t as renderCliDoc } from "./help-HviKaKAU.js";
7
- import { i as detectEditorConflicts, o as selectEditor, s as writeEditorConfigs, t as detectWorkspace$1 } from "./workspace-BUJYxGAP.js";
7
+ import { r as createMigrationReport } from "./report-C7xbSNED.js";
8
+ import { i as detectEditorConflicts, o as selectEditor, s as writeEditorConfigs, t as detectWorkspace$1 } from "./workspace-BlrOxcHM.js";
8
9
  import path from "node:path";
9
10
  import { styleText } from "node:util";
10
11
  import { vitePlusHeader } from "../../binding/index.js";
@@ -315,6 +316,17 @@ function showMigrationSummary(options) {
315
316
  for (const step of report.manualSteps) log$1(` - ${step}`);
316
317
  }
317
318
  }
319
+ async function checkRolldownCompatibility(rootDir, report) {
320
+ try {
321
+ const { resolveConfig } = await import("./src-B-pcmd0F.js");
322
+ const { checkManualChunksCompat } = await import("./compat-Ch3iWOnQ.js");
323
+ checkManualChunksCompat((await resolveConfig({
324
+ root: rootDir,
325
+ logLevel: "silent",
326
+ configLoader: "runner"
327
+ }, "build")).build?.rollupOptions?.output, report);
328
+ } catch {}
329
+ }
318
330
  async function executeMigrationPlan(workspaceInfoOptional, plan, interactive) {
319
331
  const report = createMigrationReport();
320
332
  const migrationProgress = interactive ? spinner({ indicator: "timer" }) : void 0;
@@ -368,6 +380,9 @@ async function executeMigrationPlan(workspaceInfoOptional, plan, interactive) {
368
380
  failMigrationProgress("Migration failed");
369
381
  cancelAndExit("Vite+ cannot automatically migrate this project yet.", 1);
370
382
  }
383
+ updateMigrationProgress("Checking config compatibility");
384
+ await checkRolldownCompatibility(workspaceInfo.rootDir, report);
385
+ if (workspaceInfo.packages) for (const pkg of workspaceInfo.packages) await checkRolldownCompatibility(path.join(workspaceInfo.rootDir, pkg.path), report);
371
386
  if (plan.migrateEslint) {
372
387
  updateMigrationProgress("Migrating ESLint");
373
388
  if (!await migrateEslintToOxlint(workspaceInfo.rootDir, interactive, plan.eslintConfigFile, workspaceInfo.packages, {
@@ -433,7 +448,7 @@ async function main() {
433
448
  const workspaceInfoOptional = await detectWorkspace$1(projectPath);
434
449
  const resolvedPackageManager = workspaceInfoOptional.packageManager ?? "unknown";
435
450
  const rootPkg = readNearestPackageJson(workspaceInfoOptional.rootDir);
436
- if (hasVitePlusDependency(rootPkg)) {
451
+ if (hasVitePlusDependency(rootPkg) && !isForceOverrideMode()) {
437
452
  let didMigrate = false;
438
453
  let installDurationMs = 0;
439
454
  const report = createMigrationReport();
@@ -471,7 +486,9 @@ async function main() {
471
486
  if (shouldSetupHooks) updateMigrationProgress("Configuring git hooks");
472
487
  if (shouldSetupHooks && installGitHooks(workspaceInfoOptional.rootDir, true, report)) didMigrate = true;
473
488
  }
474
- if (didMigrate) {
489
+ await checkRolldownCompatibility(workspaceInfoOptional.rootDir, report);
490
+ if (workspaceInfoOptional.packages) for (const pkg of workspaceInfoOptional.packages) await checkRolldownCompatibility(path.join(workspaceInfoOptional.rootDir, pkg.path), report);
491
+ if (didMigrate || report.warnings.length > 0) {
475
492
  clearMigrationProgress();
476
493
  showMigrationSummary({
477
494
  projectRoot: workspaceInfoOptional.rootDir,
@@ -8,6 +8,14 @@ const VITE_PLUS_OVERRIDE_PACKAGES = process.env.VITE_PLUS_OVERRIDE_PACKAGES ? JS
8
8
  vite: "npm:@voidzero-dev/vite-plus-core@latest",
9
9
  vitest: "npm:@voidzero-dev/vite-plus-test@latest"
10
10
  };
11
+ /**
12
+ * When VITE_PLUS_FORCE_MIGRATE is set, force full dependency rewriting
13
+ * even for projects already using vite-plus. Used by ecosystem CI to
14
+ * override dependencies with locally built tgz packages.
15
+ */
16
+ function isForceOverrideMode() {
17
+ return process.env.VITE_PLUS_FORCE_MIGRATE === "1";
18
+ }
11
19
  createRequire(import.meta.url);
12
20
  const BASEURL_TSCONFIG_WARNING = "Skipped typeAware/typeCheck: tsconfig.json contains baseUrl which is not yet supported by the oxlint type checker.\n Run `npx @andrewbranch/ts5to6 --fixBaseUrl .` to remove baseUrl from your tsconfig.";
13
21
  process.versions.node, process.release.name;
@@ -930,5 +938,22 @@ function readNearestPackageJson(currentDir) {
930
938
  function hasVitePlusDependency(pkg) {
931
939
  return Boolean(pkg?.dependencies?.["vite-plus"] || pkg?.devDependencies?.["vite-plus"]);
932
940
  }
941
+ /**
942
+ * Check if an npm package exists in the public registry.
943
+ * Returns true if the package exists or if the check could not be performed (network error, timeout).
944
+ * Returns false only if the registry definitively responds with 404.
945
+ */
946
+ async function checkNpmPackageExists(packageName) {
947
+ const atIndex = packageName.indexOf("@", 2);
948
+ const name = atIndex === -1 ? packageName : packageName.slice(0, atIndex);
949
+ try {
950
+ return (await fetch(`https://registry.npmjs.org/${name}`, {
951
+ method: "HEAD",
952
+ signal: AbortSignal.timeout(3e3)
953
+ })).status !== 404;
954
+ } catch {
955
+ return true;
956
+ }
957
+ }
933
958
  //#endregion
934
- export { editJsonFile as a, writeJsonFile as c, VITE_PLUS_OVERRIDE_PACKAGES as d, VITE_PLUS_VERSION as f, readNearestPackageJson as i, BASEURL_TSCONFIG_WARNING as l, getScopeFromPackageName as n, isJsonFile as o, hasVitePlusDependency as r, readJsonFile as s, detectPackageMetadata as t, VITE_PLUS_NAME as u };
959
+ export { readNearestPackageJson as a, readJsonFile as c, VITE_PLUS_NAME as d, VITE_PLUS_OVERRIDE_PACKAGES as f, hasVitePlusDependency as i, writeJsonFile as l, isForceOverrideMode as m, detectPackageMetadata as n, editJsonFile as o, VITE_PLUS_VERSION as p, getScopeFromPackageName as r, isJsonFile as s, checkNpmPackageExists as t, BASEURL_TSCONFIG_WARNING as u };
@@ -0,0 +1,28 @@
1
+ //#region src/migration/report.ts
2
+ function createMigrationReport() {
3
+ return {
4
+ createdViteConfigCount: 0,
5
+ mergedConfigCount: 0,
6
+ mergedStagedConfigCount: 0,
7
+ inlinedLintStagedConfigCount: 0,
8
+ removedConfigCount: 0,
9
+ tsdownImportCount: 0,
10
+ rewrittenImportFileCount: 0,
11
+ rewrittenImportErrors: [],
12
+ eslintMigrated: false,
13
+ prettierMigrated: false,
14
+ gitHooksConfigured: false,
15
+ warnings: [],
16
+ manualSteps: []
17
+ };
18
+ }
19
+ function addMigrationWarning(report, warning) {
20
+ if (!report || report.warnings.includes(warning)) return;
21
+ report.warnings.push(warning);
22
+ }
23
+ function addManualStep(report, step) {
24
+ if (!report || report.manualSteps.includes(step)) return;
25
+ report.manualSteps.push(step);
26
+ }
27
+ //#endregion
28
+ export { addMigrationWarning as n, createMigrationReport as r, addManualStep as t };
@@ -1,4 +1,4 @@
1
- import { a as ansiStyles, i as isWide, r as isFullWidth } from "./strip-ansi-DbamwI77.js";
1
+ import { a as ansiStyles, i as isWide, r as isFullWidth } from "./strip-ansi-CE-VDMdw.js";
2
2
  //#region ../../node_modules/.pnpm/is-fullwidth-code-point@5.1.0/node_modules/is-fullwidth-code-point/index.js
3
3
  function isFullwidthCodePoint(codePoint) {
4
4
  if (!Number.isInteger(codePoint)) return false;
@@ -4,9 +4,9 @@ import { i as log, r as errorMsg, t as renderCliDoc } from "./help-HviKaKAU.js";
4
4
  import path, { delimiter, dirname, normalize, resolve } from "node:path";
5
5
  import { formatWithOptions, inspect, promisify } from "node:util";
6
6
  import { cwd } from "node:process";
7
- import ot from "node:readline";
7
+ import c from "node:readline";
8
8
  import nodeTty from "node:tty";
9
- import { constants } from "node:fs";
9
+ import fs, { constants } from "node:fs";
10
10
  import { vitePlusHeader } from "../../binding/index.js";
11
11
  import { createRequire } from "node:module";
12
12
  import fsPromises, { constants as constants$1 } from "node:fs/promises";
@@ -637,7 +637,7 @@ var L = class {
637
637
  if (this._streamErr) t.push(this._streamErr);
638
638
  if (this._streamOut) t.push(this._streamOut);
639
639
  const n = g(t);
640
- const r = ot.createInterface({ input: n });
640
+ const r = c.createInterface({ input: n });
641
641
  for await (const e of r) yield e.toString();
642
642
  await this._processClosed;
643
643
  e.removeAllListeners();
@@ -1817,9 +1817,9 @@ var DefaultRenderer = class DefaultRenderer {
1817
1817
  this.logger.options.color = this.options.color;
1818
1818
  }
1819
1819
  async render() {
1820
- const { createLogUpdate } = await import("./log-update-Beldo2tV.js");
1821
- const { default: truncate } = await import("./cli-truncate-BmIULUG7.js");
1822
- const { default: wrap } = await import("./wrap-ansi-DAqB-SZm.js");
1820
+ const { createLogUpdate } = await import("./log-update-C8WCYCbc.js");
1821
+ const { default: truncate } = await import("./cli-truncate-Da6Y8aM8.js");
1822
+ const { default: wrap } = await import("./wrap-ansi-Ou9oAs-a.js");
1823
1823
  this.updater = createLogUpdate(this.logger.process.stdout);
1824
1824
  this.truncate = truncate;
1825
1825
  this.wrap = wrap;
@@ -6653,11 +6653,67 @@ const lintStaged = async ({ allowEmpty = false, color = SUPPORTS_COLOR, concurre
6653
6653
  };
6654
6654
  //#endregion
6655
6655
  //#region src/resolve-vite-config.ts
6656
+ const VITE_CONFIG_FILES = [
6657
+ "vite.config.ts",
6658
+ "vite.config.js",
6659
+ "vite.config.mjs",
6660
+ "vite.config.mts",
6661
+ "vite.config.cjs",
6662
+ "vite.config.cts"
6663
+ ];
6664
+ /**
6665
+ * Find a vite config file by walking up from `startDir` to `stopDir`.
6666
+ * Returns the absolute path of the first config file found, or undefined.
6667
+ */
6668
+ function findViteConfigUp(startDir, stopDir) {
6669
+ let dir = path.resolve(startDir);
6670
+ const stop = path.resolve(stopDir);
6671
+ while (true) {
6672
+ for (const filename of VITE_CONFIG_FILES) {
6673
+ const filePath = path.join(dir, filename);
6674
+ if (fs.existsSync(filePath)) return filePath;
6675
+ }
6676
+ const parent = path.dirname(dir);
6677
+ if (parent === dir || !parent.startsWith(stop)) break;
6678
+ dir = parent;
6679
+ }
6680
+ }
6681
+ function hasViteConfig(dir) {
6682
+ return VITE_CONFIG_FILES.some((f) => fs.existsSync(path.join(dir, f)));
6683
+ }
6684
+ /**
6685
+ * Find the workspace root by walking up from `startDir` looking for
6686
+ * monorepo indicators (pnpm-workspace.yaml, workspaces in package.json, lerna.json).
6687
+ */
6688
+ function findWorkspaceRoot(startDir) {
6689
+ let dir = path.resolve(startDir);
6690
+ while (true) {
6691
+ if (fs.existsSync(path.join(dir, "pnpm-workspace.yaml"))) return dir;
6692
+ const pkgPath = path.join(dir, "package.json");
6693
+ if (fs.existsSync(pkgPath)) try {
6694
+ if (JSON.parse(fs.readFileSync(pkgPath, "utf-8")).workspaces) return dir;
6695
+ } catch {}
6696
+ if (fs.existsSync(path.join(dir, "lerna.json"))) return dir;
6697
+ const parent = path.dirname(dir);
6698
+ if (parent === dir) break;
6699
+ dir = parent;
6700
+ }
6701
+ }
6656
6702
  /**
6657
6703
  * Resolve vite.config.ts and return the config object.
6658
6704
  */
6659
- async function resolveViteConfig(cwd) {
6660
- const { resolveConfig } = await import("./src-FkMgH-SM.js");
6705
+ async function resolveViteConfig(cwd, options) {
6706
+ const { resolveConfig } = await import("./src-B-pcmd0F.js");
6707
+ if (options?.traverseUp && !hasViteConfig(cwd)) {
6708
+ const workspaceRoot = findWorkspaceRoot(cwd);
6709
+ if (workspaceRoot) {
6710
+ const configFile = findViteConfigUp(path.dirname(cwd), workspaceRoot);
6711
+ if (configFile) return resolveConfig({
6712
+ root: cwd,
6713
+ configFile
6714
+ }, "build");
6715
+ }
6716
+ }
6661
6717
  return resolveConfig({ root: cwd }, "build");
6662
6718
  }
6663
6719
  //#endregion
@@ -1,4 +1,4 @@
1
- import { r as hasVitePlusDependency, t as detectPackageMetadata, u as VITE_PLUS_NAME } from "./package-D0VpX-8d.js";
1
+ import { d as VITE_PLUS_NAME, i as hasVitePlusDependency, n as detectPackageMetadata } from "./package-Y1UTfJnZ.js";
2
2
  import { i as log, n as accent, t as renderCliDoc } from "./help-HviKaKAU.js";
3
3
  import path from "node:path";
4
4
  import fs from "node:fs";
@@ -1,6 +1,6 @@
1
- import { N as PackageManager, R as log, V as select, W as Ct, b as editYamlFile, x as readYamlFile } from "./agent-gbykY0o2.js";
1
+ import { B as select, L as log, M as PackageManager, U as Ct, b as readYamlFile, y as editYamlFile } from "./agent-DTz-Dh1r.js";
2
2
  import { g as YAMLSeq, y as Scalar } from "./browser-09BZLUYM.js";
3
- import { a as editJsonFile, c as writeJsonFile, n as getScopeFromPackageName, s as readJsonFile } from "./package-D0VpX-8d.js";
3
+ import { c as readJsonFile, l as writeJsonFile, o as editJsonFile, r as getScopeFromPackageName } from "./package-Y1UTfJnZ.js";
4
4
  import path, { posix, win32 } from "node:path";
5
5
  import * as actualFS from "node:fs";
6
6
  import fs from "node:fs";
@@ -112,7 +112,7 @@ const ZED_SETTINGS = {
112
112
  prettier: { allowed: false },
113
113
  formatter: [{ language_server: { name: "oxfmt" } }]
114
114
  },
115
- Vue: {
115
+ "Vue.js": {
116
116
  format_on_save: "on",
117
117
  prettier: { allowed: false },
118
118
  formatter: [{ language_server: { name: "oxfmt" } }]
@@ -0,0 +1,3 @@
1
+ import "./strip-ansi-CE-VDMdw.js";
2
+ import { t as wrapAnsi } from "./wrap-ansi-eywLlPVQ.js";
3
+ export { wrapAnsi as default };
@@ -1,4 +1,4 @@
1
- import { a as ansiStyles, n as eastAsianWidth, t as stripAnsi } from "./strip-ansi-DbamwI77.js";
1
+ import { a as ansiStyles, n as eastAsianWidth, t as stripAnsi } from "./strip-ansi-CE-VDMdw.js";
2
2
  //#region ../../node_modules/.pnpm/emoji-regex@10.6.0/node_modules/emoji-regex/index.mjs
3
3
  var emoji_regex_default = () => {
4
4
  return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { type Plugin as VitestPlugin } from '@voidzero-dev/vite-plus-test/config';
2
+ import type { OxfmtConfig } from 'oxfmt';
2
3
  import type { OxlintConfig } from 'oxlint';
3
4
  import { defineConfig } from './define-config.js';
4
- import type { FormatOptions } from './oxfmt-config';
5
5
  import type { PackUserConfig } from './pack';
6
6
  import type { RunConfig } from './run-config';
7
7
  import type { StagedConfig } from './staged-config';
@@ -11,7 +11,7 @@ declare module '@voidzero-dev/vite-plus-core' {
11
11
  * Options for oxlint
12
12
  */
13
13
  lint?: OxlintConfig;
14
- fmt?: FormatOptions;
14
+ fmt?: OxfmtConfig;
15
15
  pack?: PackUserConfig | PackUserConfig[];
16
16
  run?: RunConfig;
17
17
  staged?: StagedConfig;
@@ -7,7 +7,7 @@ import { Scalar, YAMLMap, YAMLSeq } from 'yaml';
7
7
  import { mergeJsonConfig, mergeTsdownConfig, rewriteEslint, rewritePrettier, rewriteScripts, rewriteImportsInDirectory, } from '../../binding/index.js';
8
8
  import { PackageManager } from '../types/index.js';
9
9
  import { runCommandSilently } from '../utils/command.js';
10
- import { BASEURL_TSCONFIG_WARNING, VITE_PLUS_NAME, VITE_PLUS_OVERRIDE_PACKAGES, VITE_PLUS_VERSION, } from '../utils/constants.js';
10
+ import { BASEURL_TSCONFIG_WARNING, VITE_PLUS_NAME, VITE_PLUS_OVERRIDE_PACKAGES, VITE_PLUS_VERSION, isForceOverrideMode, } from '../utils/constants.js';
11
11
  import { editJsonFile, isJsonFile, readJsonFile } from '../utils/json.js';
12
12
  import { detectPackageMetadata } from '../utils/package.js';
13
13
  import { displayRelative, rulesDir } from '../utils/path.js';
@@ -741,16 +741,31 @@ function rewriteRootWorkspacePackageJson(projectPath, packageManager, skipStaged
741
741
  };
742
742
  }
743
743
  else if (packageManager === PackageManager.pnpm) {
744
- // pnpm use overrides field at pnpm-workspace.yaml
745
- // so we don't need to set overrides field at package.json
746
- // remove packages from `resolutions` field and `pnpm.overrides` field if they exist
747
- // https://pnpm.io/9.x/package_json#resolutions
748
- for (const key of [...Object.keys(VITE_PLUS_OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
749
- if (pkg.pnpm?.overrides?.[key]) {
750
- delete pkg.pnpm.overrides[key];
751
- }
752
- if (pkg.resolutions?.[key]) {
753
- delete pkg.resolutions[key];
744
+ if (isForceOverrideMode()) {
745
+ // In force-override mode, keep overrides in package.json pnpm.overrides
746
+ // because pnpm ignores pnpm-workspace.yaml overrides when pnpm.overrides
747
+ // exists in package.json (even with unrelated entries like rollup).
748
+ pkg.pnpm = {
749
+ ...pkg.pnpm,
750
+ overrides: {
751
+ ...pkg.pnpm?.overrides,
752
+ ...VITE_PLUS_OVERRIDE_PACKAGES,
753
+ [VITE_PLUS_NAME]: VITE_PLUS_VERSION,
754
+ },
755
+ };
756
+ }
757
+ else {
758
+ // pnpm use overrides field at pnpm-workspace.yaml
759
+ // so we don't need to set overrides field at package.json
760
+ // remove packages from `resolutions` field and `pnpm.overrides` field if they exist
761
+ // https://pnpm.io/9.x/package_json#resolutions
762
+ for (const key of [...Object.keys(VITE_PLUS_OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
763
+ if (pkg.pnpm?.overrides?.[key]) {
764
+ delete pkg.pnpm.overrides[key];
765
+ }
766
+ if (pkg.resolutions?.[key]) {
767
+ delete pkg.resolutions[key];
768
+ }
754
769
  }
755
770
  }
756
771
  // remove dependency selector from vite, e.g. "vite-plugin-svgr>vite": "npm:vite@7.0.12"
package/dist/pack-bin.js CHANGED
@@ -104,7 +104,9 @@ cli
104
104
  flags.envPrefix = DEFAULT_ENV_PREFIXES;
105
105
  }
106
106
  async function runBuild() {
107
- const viteConfig = await resolveViteConfig(process.cwd());
107
+ const viteConfig = await resolveViteConfig(process.cwd(), {
108
+ traverseUp: flags.config !== false,
109
+ });
108
110
  const configFiles = [];
109
111
  if (viteConfig.configFile) {
110
112
  configFiles.push(viteConfig.configFile);
@@ -1,5 +1,13 @@
1
+ /**
2
+ * Find a vite config file by walking up from `startDir` to `stopDir`.
3
+ * Returns the absolute path of the first config file found, or undefined.
4
+ */
5
+ export declare function findViteConfigUp(startDir: string, stopDir: string): string | undefined;
6
+ export interface ResolveViteConfigOptions {
7
+ traverseUp?: boolean;
8
+ }
1
9
  /**
2
10
  * Resolve vite.config.ts and return the config object.
3
11
  */
4
- export declare function resolveViteConfig(cwd: string): Promise<import("@voidzero-dev/vite-plus-core").ResolvedConfig>;
12
+ export declare function resolveViteConfig(cwd: string, options?: ResolveViteConfigOptions): Promise<import("@voidzero-dev/vite-plus-core").ResolvedConfig>;
5
13
  export declare function resolveUniversalViteConfig(err: null | Error, viteConfigCwd: string): Promise<string>;