vite-plus 0.1.21 → 0.1.23

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 (66) hide show
  1. package/AGENTS.md +1 -0
  2. package/binding/index.cjs +120 -52
  3. package/binding/index.d.cts +3232 -2
  4. package/dist/agent-aSGY0osq.js +2461 -0
  5. package/dist/bin.js +9 -14
  6. package/dist/cli-truncate-CWsmbK3p.js +867 -0
  7. package/dist/{compat-DdC7fHjB.js → compat-DXZgnEyq.js} +1 -1
  8. package/dist/config/bin.js +18 -5
  9. package/dist/constants-DCBWlNrn.js +33 -0
  10. package/dist/create/bin.js +215 -77
  11. package/dist/{define-config-cWg3Z2bC.d.ts → define-config-COdn-tsn.d.ts} +7 -5
  12. package/dist/define-config.cjs +1 -1
  13. package/dist/define-config.d.ts +1 -1
  14. package/dist/define-config.js +1 -1
  15. package/dist/dist-Bapm49IR.js +3 -0
  16. package/dist/{dist-DjG9AYbK.js → dist-BgQuvbtq.js} +136 -110
  17. package/dist/fmt.d.ts +1 -1
  18. package/dist/index.cjs +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/is-fullwidth-code-point-BUNlIICg.js +8 -0
  22. package/dist/lint.d.ts +1 -1
  23. package/dist/{log-update-CLxR0iRf.js → log-update-lyIiuflf.js} +111 -24
  24. package/dist/{main-A6UrSTYb.js → main-DpJl3LoU.js} +1 -28
  25. package/dist/migration/bin.js +71 -30
  26. package/dist/oxlint-plugin-config-B89iKTKN.js +37 -0
  27. package/dist/oxlint-plugin.d.ts +6 -0
  28. package/dist/oxlint-plugin.js +91 -0
  29. package/dist/pack-bin.js +1 -1
  30. package/dist/pack.d.ts +1 -1
  31. package/dist/{package-CrKanQYM.js → package-PmBUZ-ve.js} +2 -1
  32. package/dist/staged/bin.js +10 -10
  33. package/dist/strip-ansi-C3wrWz9t.js +853 -0
  34. package/dist/{agent-D2ocSU01.js → tsconfig-DlUVXT3J.js} +666 -2090
  35. package/dist/version.js +5 -5
  36. package/dist/versions.js +6 -6
  37. package/dist/{workspace-QXeJWs3P.js → workspace-DElv730L.js} +15 -15
  38. package/dist/wrap-ansi-CeQuiQ31.js +2 -0
  39. package/dist/{wrap-ansi-Dy0LjO7Q.js → wrap-ansi-k7Dn4VtV.js} +1 -1
  40. package/docs/config/run.md +39 -4
  41. package/docs/guide/cache.md +10 -1
  42. package/docs/guide/create.md +3 -1
  43. package/docs/guide/env.md +26 -1
  44. package/docs/guide/ide-integration.md +2 -2
  45. package/docs/guide/install.md +6 -0
  46. package/docs/guide/run.md +2 -0
  47. package/docs/guide/troubleshooting.md +5 -2
  48. package/docs/package.json +3 -1
  49. package/docs/pnpm-lock.yaml +798 -62
  50. package/package.json +27 -19
  51. package/templates/monorepo/_gitignore +1 -0
  52. package/dist/cli-truncate-DJcN4dJ8.js +0 -138
  53. package/dist/dist-D2_BiE1V.js +0 -3
  54. package/dist/slice-ansi-CwJYd1aw.js +0 -113
  55. package/dist/strip-ansi-D86nYqKl.js +0 -198
  56. package/dist/tsconfig-lBAWm4sf.js +0 -517
  57. package/dist/wrap-ansi-DbY7Idw_.js +0 -2
  58. /package/dist/{chunk-q7NCDQ7-.js → chunk-DnnnRqeS.js} +0 -0
  59. /package/dist/{define-config-GqLoRwH9.cjs → define-config-BR1Y88zz.cjs} +0 -0
  60. /package/dist/{define-config-B62DkkqH.js → define-config-BRC7qPNE.js} +0 -0
  61. /package/dist/{help-BtkjXtRM.js → help-YP84FSEz.js} +0 -0
  62. /package/dist/{lib-BamM40b7.js → lib-L3DWSRQp.js} +0 -0
  63. /package/dist/{pack-BcBvbQgt.d.ts → pack-Ciiho0Tq.d.ts} +0 -0
  64. /package/dist/{report-DbrfjWiP.js → report-DgSBQUdz.js} +0 -0
  65. /package/dist/{resolve-vite-config-C1KX9CZU.js → resolve-vite-config-TTvhycU1.js} +0 -0
  66. /package/dist/{terminal-CxTMfsxZ.js → terminal-uTv0ZaMr.js} +0 -0
package/dist/fmt.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { format } from "oxfmt";
2
- export * from "oxfmt";
2
+ export type * from "oxfmt";
3
3
  export { format };
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_define_config = require("./define-config-GqLoRwH9.cjs");
1
+ const require_define_config = require("./define-config-BR1Y88zz.cjs");
2
2
  //#region src/index.cts
3
3
  const vite = require("@voidzero-dev/vite-plus-core");
4
4
  const vitest = require("@voidzero-dev/vite-plus-test/config");
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as lazyPlugins, t as defineConfig } from "./define-config-cWg3Z2bC.js";
1
+ import { n as lazyPlugins, t as defineConfig } from "./define-config-COdn-tsn.js";
2
2
  export * from "@voidzero-dev/vite-plus-test/config";
3
3
  export * from "@voidzero-dev/vite-plus-core";
4
4
  export { defineConfig, lazyPlugins };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as lazyPlugins, t as defineConfig } from "./define-config-B62DkkqH.js";
1
+ import { n as lazyPlugins, t as defineConfig } from "./define-config-BRC7qPNE.js";
2
2
  export * from "@voidzero-dev/vite-plus-test/config";
3
3
  export * from "@voidzero-dev/vite-plus-core";
4
4
  export { defineConfig, lazyPlugins };
@@ -0,0 +1,8 @@
1
+ import { i as isWide, r as isFullWidth } from "./strip-ansi-C3wrWz9t.js";
2
+ //#region ../../node_modules/.pnpm/is-fullwidth-code-point@5.1.0/node_modules/is-fullwidth-code-point/index.js
3
+ function isFullwidthCodePoint(codePoint) {
4
+ if (!Number.isInteger(codePoint)) return false;
5
+ return isFullWidth(codePoint) || isWide(codePoint);
6
+ }
7
+ //#endregion
8
+ export { isFullwidthCodePoint as t };
package/dist/lint.d.ts CHANGED
@@ -1 +1 @@
1
- export * from "oxlint";
1
+ export type * from "oxlint";
@@ -1,6 +1,6 @@
1
- import { t as stripAnsi } from "./strip-ansi-D86nYqKl.js";
2
- import { t as sliceAnsi } from "./slice-ansi-CwJYd1aw.js";
3
- import { t as wrapAnsi } from "./wrap-ansi-Dy0LjO7Q.js";
1
+ import { a as ansiStyles, t as stripAnsi } from "./strip-ansi-C3wrWz9t.js";
2
+ import { t as isFullwidthCodePoint } from "./is-fullwidth-code-point-BUNlIICg.js";
3
+ import { t as wrapAnsi } from "./wrap-ansi-k7Dn4VtV.js";
4
4
  import process$1 from "node:process";
5
5
  import os from "node:os";
6
6
  //#region ../../node_modules/.pnpm/environment@1.1.0/node_modules/environment/index.js
@@ -23,34 +23,18 @@ platform === "Android" || globalThis.navigator?.platform === "Android" || global
23
23
  //#endregion
24
24
  //#region ../../node_modules/.pnpm/ansi-escapes@7.2.0/node_modules/ansi-escapes/base.js
25
25
  const ESC = "\x1B[";
26
- const isTerminalApp = !isBrowser && process$1.env.TERM_PROGRAM === "Apple_Terminal";
26
+ !isBrowser && process$1.env.TERM_PROGRAM;
27
27
  const isWindows = !isBrowser && process$1.platform === "win32";
28
28
  !isBrowser && (process$1.env.TERM?.startsWith("screen") || process$1.env.TERM?.startsWith("tmux") || process$1.env.TMUX);
29
29
  isBrowser || process$1.cwd;
30
30
  const cursorUp = (count = 1) => ESC + count + "A";
31
- ESC + "";
32
- isTerminalApp || ESC + "";
33
- isTerminalApp || ESC + "";
34
- ESC + "";
35
- ESC + "";
36
- ESC + "";
37
- ESC + "";
38
- ESC + "";
39
31
  const eraseLines = (count) => {
40
32
  let clear = "";
41
33
  for (let i = 0; i < count; i++) clear += eraseLine + (i < count - 1 ? cursorUp() : "");
42
34
  if (count) clear += "\x1B[G";
43
35
  return clear;
44
36
  };
45
- ESC + "";
46
- ESC + "";
47
- const eraseLine = ESC + "2K";
48
- ESC + "";
49
- ESC + "";
50
- const eraseScreen = ESC + "2J";
51
- ESC + "";
52
- ESC + "";
53
- `${eraseScreen}${ESC}`;
37
+ const eraseLine = "\x1B[2K";
54
38
  const isOldWindows = () => {
55
39
  if (isBrowser || !isWindows) return false;
56
40
  const parts = os.release().split(".");
@@ -60,9 +44,7 @@ const isOldWindows = () => {
60
44
  if (major === 10 && build < 10586) return true;
61
45
  return false;
62
46
  };
63
- isOldWindows() ? `${eraseScreen}${ESC}` : `${eraseScreen}${ESC}${ESC}`;
64
- ESC + "";
65
- ESC + "";
47
+ isOldWindows();
66
48
  //#endregion
67
49
  //#region ../../node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js
68
50
  const copyProperty = (to, from, property, ignoreNonConfigurable) => {
@@ -355,6 +337,111 @@ cliCursor.toggle = (force, writableStream) => {
355
337
  else cliCursor.hide(writableStream);
356
338
  };
357
339
  //#endregion
340
+ //#region ../../node_modules/.pnpm/slice-ansi@7.1.2/node_modules/slice-ansi/index.js
341
+ const ESCAPES = new Set([27, 155]);
342
+ const CODE_POINT_0 = "0".codePointAt(0);
343
+ const CODE_POINT_9 = "9".codePointAt(0);
344
+ const MAX_ANSI_SEQUENCE_LENGTH = 19;
345
+ const endCodesSet = /* @__PURE__ */ new Set();
346
+ const endCodesMap = /* @__PURE__ */ new Map();
347
+ for (const [start, end] of ansiStyles.codes) {
348
+ endCodesSet.add(ansiStyles.color.ansi(end));
349
+ endCodesMap.set(ansiStyles.color.ansi(start), ansiStyles.color.ansi(end));
350
+ }
351
+ function getEndCode(code) {
352
+ if (endCodesSet.has(code)) return code;
353
+ if (endCodesMap.has(code)) return endCodesMap.get(code);
354
+ code = code.slice(2);
355
+ if (code.includes(";")) code = code[0] + "0";
356
+ const returnValue = ansiStyles.codes.get(Number.parseInt(code, 10));
357
+ if (returnValue) return ansiStyles.color.ansi(returnValue);
358
+ return ansiStyles.reset.open;
359
+ }
360
+ function findNumberIndex(string) {
361
+ for (let index = 0; index < string.length; index++) {
362
+ const codePoint = string.codePointAt(index);
363
+ if (codePoint >= CODE_POINT_0 && codePoint <= CODE_POINT_9) return index;
364
+ }
365
+ return -1;
366
+ }
367
+ function parseAnsiCode(string, offset) {
368
+ string = string.slice(offset, offset + MAX_ANSI_SEQUENCE_LENGTH);
369
+ const startIndex = findNumberIndex(string);
370
+ if (startIndex !== -1) {
371
+ let endIndex = string.indexOf("m", startIndex);
372
+ if (endIndex === -1) endIndex = string.length;
373
+ return string.slice(0, endIndex + 1);
374
+ }
375
+ }
376
+ function tokenize(string, endCharacter = Number.POSITIVE_INFINITY) {
377
+ const returnValue = [];
378
+ let index = 0;
379
+ let visibleCount = 0;
380
+ while (index < string.length) {
381
+ const codePoint = string.codePointAt(index);
382
+ if (ESCAPES.has(codePoint)) {
383
+ const code = parseAnsiCode(string, index);
384
+ if (code) {
385
+ returnValue.push({
386
+ type: "ansi",
387
+ code,
388
+ endCode: getEndCode(code)
389
+ });
390
+ index += code.length;
391
+ continue;
392
+ }
393
+ }
394
+ const isFullWidth = isFullwidthCodePoint(codePoint);
395
+ const character = String.fromCodePoint(codePoint);
396
+ returnValue.push({
397
+ type: "character",
398
+ value: character,
399
+ isFullWidth
400
+ });
401
+ index += character.length;
402
+ visibleCount += isFullWidth ? 2 : character.length;
403
+ if (visibleCount >= endCharacter) break;
404
+ }
405
+ return returnValue;
406
+ }
407
+ function reduceAnsiCodes(codes) {
408
+ let returnValue = [];
409
+ for (const code of codes) if (code.code === ansiStyles.reset.open) returnValue = [];
410
+ else if (endCodesSet.has(code.code)) returnValue = returnValue.filter((returnValueCode) => returnValueCode.endCode !== code.code);
411
+ else {
412
+ returnValue = returnValue.filter((returnValueCode) => returnValueCode.endCode !== code.endCode);
413
+ returnValue.push(code);
414
+ }
415
+ return returnValue;
416
+ }
417
+ function undoAnsiCodes(codes) {
418
+ return reduceAnsiCodes(codes).map(({ endCode }) => endCode).reverse().join("");
419
+ }
420
+ function sliceAnsi(string, start, end) {
421
+ const tokens = tokenize(string, end);
422
+ let activeCodes = [];
423
+ let position = 0;
424
+ let returnValue = "";
425
+ let include = false;
426
+ for (const token of tokens) {
427
+ if (end !== void 0 && position >= end) break;
428
+ if (token.type === "ansi") {
429
+ activeCodes.push(token);
430
+ if (include) returnValue += token.code;
431
+ } else {
432
+ if (!include && position >= start) {
433
+ include = true;
434
+ activeCodes = reduceAnsiCodes(activeCodes);
435
+ returnValue = activeCodes.map(({ code }) => code).join("");
436
+ }
437
+ if (include) returnValue += token.value;
438
+ position += token.isFullWidth ? 2 : token.value.length;
439
+ }
440
+ }
441
+ returnValue += undoAnsiCodes(activeCodes);
442
+ return returnValue;
443
+ }
444
+ //#endregion
358
445
  //#region ../../node_modules/.pnpm/log-update@6.1.0/node_modules/log-update/index.js
359
446
  const defaultTerminalHeight = 24;
360
447
  const getWidth = ({ columns = 80 }) => columns;
@@ -1,30 +1,3 @@
1
- import { createRequire } from "node:module";
2
- //#region src/utils/constants.ts
3
- const VITE_PLUS_NAME = "vite-plus";
4
- const VITE_PLUS_VERSION = process.env.VP_VERSION || "latest";
5
- const VITE_PLUS_OVERRIDE_PACKAGES = process.env.VP_OVERRIDE_PACKAGES ? JSON.parse(process.env.VP_OVERRIDE_PACKAGES) : {
6
- vite: "npm:@voidzero-dev/vite-plus-core@latest",
7
- vitest: "npm:@voidzero-dev/vite-plus-test@latest"
8
- };
9
- /**
10
- * When VP_FORCE_MIGRATE is set, force full dependency rewriting
11
- * even for projects already using vite-plus. Used by ecosystem CI to
12
- * override dependencies with locally built tgz packages.
13
- */
14
- function isForceOverrideMode() {
15
- return process.env.VP_FORCE_MIGRATE === "1";
16
- }
17
- const require = createRequire(import.meta.url);
18
- function resolve(path) {
19
- return require.resolve(path, { paths: [process.cwd(), import.meta.dirname] });
20
- }
21
- 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.";
22
- const DEFAULT_ENVS = {
23
- JS_RUNTIME_VERSION: process.versions.node,
24
- JS_RUNTIME_NAME: process.release.name,
25
- NODE_PACKAGE_MANAGER: "vite-plus"
26
- };
27
- //#endregion
28
1
  //#region ../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/scanner.js
29
2
  /**
30
3
  * Creates a JSON scanner on the given text.
@@ -1250,4 +1223,4 @@ function applyEdits(text, edits) {
1250
1223
  return text;
1251
1224
  }
1252
1225
  //#endregion
1253
- export { DEFAULT_ENVS as a, VITE_PLUS_VERSION as c, BASEURL_TSCONFIG_WARNING as i, isForceOverrideMode as l, modify as n, VITE_PLUS_NAME as o, parse as r, VITE_PLUS_OVERRIDE_PACKAGES as s, applyEdits as t, resolve as u };
1226
+ export { modify as n, parse as r, applyEdits as t };
@@ -1,12 +1,13 @@
1
- import { r as __toESM } from "../chunk-q7NCDQ7-.js";
2
- import { l as isForceOverrideMode } from "../main-A6UrSTYb.js";
3
- import { a as printHeader, i as muted, r as log, t as accent } from "../terminal-CxTMfsxZ.js";
4
- import { C as migratePrettierToOxfmt, D as rewriteMonorepo, E as promptPrettierMigration, H as selectPackageManager, I as cancelAndExit, J as require_semver, L as defaultInteractive, M as warnPackageLevelEslint, N as warnPackageLevelPrettier, Q as log$1, R as downloadPackageManager, S as migrateNodeVersionManagerFile, T as promptEslintMigration, U as upgradeYarn, V as runViteInstall, W as displayRelative, X as confirm, a as writeAgentInstructions, at as q, b as mergeViteConfigFiles, c as checkVitestVersion, d as detectEslintProject, et as outro, f as detectFramework, g as hasFrameworkShim, j as warnLegacyEslintConfig, k as rewriteStandaloneProject, l as confirmEslintMigration, m as detectPrettierProject, n as detectExistingAgentTargetPaths, nt as spinner, o as addFrameworkShim, p as detectNodeVersionManagerFile, q as PackageManager, r as selectAgentTargetPaths, s as checkViteVersion, t as detectAgentConflicts, tt as select, u as confirmPrettierMigration, w as preflightGitHooksSetup, x as migrateEslintToOxlint, y as installGitHooks, z as promptGitHooks } from "../agent-D2ocSU01.js";
5
- import { t as lib_default } from "../lib-BamM40b7.js";
6
- import { a as readNearestPackageJson, i as hasVitePlusDependency } from "../package-CrKanQYM.js";
7
- import { r as createMigrationReport } from "../report-DbrfjWiP.js";
8
- import { c as writeEditorConfigs, i as detectEditorConflicts, o as selectEditor, t as detectWorkspace } from "../workspace-QXeJWs3P.js";
9
- import { t as renderCliDoc } from "../help-BtkjXtRM.js";
1
+ import { r as __toESM } from "../chunk-DnnnRqeS.js";
2
+ import { c as isForceOverrideMode } from "../constants-DCBWlNrn.js";
3
+ import { A as q, C as log, D as spinner, E as select, T as outro, c as defaultInteractive, d as promptGitHooks, g as upgradeYarn, h as selectPackageManager, i as hasBaseUrlInTsconfig, l as downloadPackageManager, m as runViteInstall, r as fixBaseUrlInTsconfig, s as cancelAndExit, t as confirmBaseUrlFix, v as PackageManager, x as confirm, y as require_semver } from "../tsconfig-DlUVXT3J.js";
4
+ import { a as printHeader, i as muted, r as log$1, t as accent } from "../terminal-uTv0ZaMr.js";
5
+ import { t as lib_default } from "../lib-L3DWSRQp.js";
6
+ import { a as readNearestPackageJson, i as hasVitePlusDependency } from "../package-PmBUZ-ve.js";
7
+ import { A as promptEslintMigration, C as injectLintTypeCheckDefaults, D as migrateNodeVersionManagerFile, E as migrateEslintToOxlint, H as displayRelative, I as warnIncompatibleEslintIntegration, L as warnLegacyEslintConfig, M as rewriteMonorepo, O as migratePrettierToOxfmt, P as rewriteStandaloneProject, R as warnPackageLevelEslint, T as mergeViteConfigFiles, _ as detectNodeVersionManagerFile, b as hasFrameworkShim, d as checkVitestVersion, f as confirmEslintMigration, g as detectIncompatibleEslintIntegration, h as detectFramework, i as selectAgentTargetPaths, j as promptPrettierMigration, k as preflightGitHooksSetup, l as addFrameworkShim, m as detectEslintProject, n as detectAgentConflicts, p as confirmPrettierMigration, r as detectExistingAgentTargetPaths, s as writeAgentInstructions, u as checkViteVersion, v as detectPrettierProject, w as installGitHooks, z as warnPackageLevelPrettier } from "../agent-aSGY0osq.js";
8
+ import { n as addMigrationWarning, r as createMigrationReport } from "../report-DgSBQUdz.js";
9
+ import { c as writeEditorConfigs, i as detectEditorConflicts, o as selectEditor, t as detectWorkspace } from "../workspace-DElv730L.js";
10
+ import { t as renderCliDoc } from "../help-YP84FSEz.js";
10
11
  import path from "node:path";
11
12
  import { styleText } from "node:util";
12
13
  //#region src/migration/bin.ts
@@ -41,6 +42,31 @@ async function confirmFrameworkShim(framework, interactive) {
41
42
  }
42
43
  return true;
43
44
  }
45
+ async function fixBaseUrlForWorkspace(workspaceInfo, fixBaseUrl, updateProgress, report) {
46
+ if (!fixBaseUrl) return [];
47
+ const fixedProjectPaths = [];
48
+ for (const projectPath of getWorkspaceProjectPaths(workspaceInfo)) {
49
+ if (!hasBaseUrlInTsconfig(projectPath)) continue;
50
+ updateProgress?.(`Fixing tsconfig baseUrl${projectPath === workspaceInfo.rootDir ? "" : ` in ${displayRelative(projectPath, workspaceInfo.rootDir)}`}`);
51
+ const status = await fixBaseUrlInTsconfig(projectPath, {
52
+ confirmed: true,
53
+ silent: true
54
+ });
55
+ if (status === "failed") addMigrationWarning(report, `Failed to remove tsconfig baseUrl in ${displayRelative(projectPath, workspaceInfo.rootDir) || "."}. Run \`vp dlx @andrewbranch/ts5to6 --fixBaseUrl <tsconfig path>\` manually and re-run the migration.`);
56
+ if (status === "fixed") fixedProjectPaths.push(projectPath);
57
+ }
58
+ return fixedProjectPaths;
59
+ }
60
+ function getWorkspaceProjectPaths(workspaceInfo) {
61
+ return [workspaceInfo.rootDir, ...(workspaceInfo.packages ?? []).map((pkg) => path.join(workspaceInfo.rootDir, pkg.path))];
62
+ }
63
+ function hasBaseUrlInWorkspace(workspaceInfo) {
64
+ for (const projectPath of getWorkspaceProjectPaths(workspaceInfo)) {
65
+ if (!hasBaseUrlInTsconfig(projectPath)) continue;
66
+ return true;
67
+ }
68
+ return false;
69
+ }
44
70
  const helpMessage = renderCliDoc({
45
71
  usage: "vp migrate [PATH] [OPTIONS]",
46
72
  summary: "Migrate standalone Vite, Vitest, Oxlint, Oxfmt, and Prettier projects to unified Vite+.",
@@ -176,7 +202,7 @@ async function collectMigrationPlan(rootDir, detectedPackageManager, options, pa
176
202
  if (shouldSetupHooks) {
177
203
  const reason = preflightGitHooksSetup(rootDir);
178
204
  if (reason) {
179
- log$1.warn(`⚠ ${reason}`);
205
+ log.warn(`⚠ ${reason}`);
180
206
  shouldSetupHooks = false;
181
207
  }
182
208
  }
@@ -236,14 +262,20 @@ async function collectMigrationPlan(rootDir, detectedPackageManager, options, pa
236
262
  editorConflictDecisions.set(conflict.fileName, action);
237
263
  } else editorConflictDecisions.set(conflict.fileName, "merge");
238
264
  const eslintProject = detectEslintProject(rootDir, packages);
265
+ const incompatibleEslintIntegration = detectIncompatibleEslintIntegration(rootDir, packages);
239
266
  let migrateEslint = false;
240
- if (eslintProject.hasDependency && !eslintProject.configFile && eslintProject.legacyConfigFile) warnLegacyEslintConfig(eslintProject.legacyConfigFile);
267
+ if (incompatibleEslintIntegration) warnIncompatibleEslintIntegration(incompatibleEslintIntegration);
268
+ else if (eslintProject.hasDependency && !eslintProject.configFile && eslintProject.legacyConfigFile) warnLegacyEslintConfig(eslintProject.legacyConfigFile);
241
269
  else if (eslintProject.hasDependency && eslintProject.configFile) migrateEslint = await confirmEslintMigration(options.interactive);
242
270
  else if (eslintProject.hasDependency) warnPackageLevelEslint();
243
271
  const prettierProject = detectPrettierProject(rootDir, packages);
244
272
  let migratePrettier = false;
245
273
  if (prettierProject.hasDependency && prettierProject.configFile) migratePrettier = await confirmPrettierMigration(options.interactive);
246
274
  else if (prettierProject.hasDependency) warnPackageLevelPrettier();
275
+ const fixBaseUrl = hasBaseUrlInWorkspace({
276
+ rootDir,
277
+ packages
278
+ }) ? await confirmBaseUrlFix(options.interactive) : false;
247
279
  const nodeVersionDetection = detectNodeVersionManagerFile(rootDir);
248
280
  let migrateNodeVersionFile = false;
249
281
  if (nodeVersionDetection) migrateNodeVersionFile = await confirmNodeVersionFileMigration(options.interactive, nodeVersionDetection);
@@ -267,6 +299,7 @@ async function collectMigrationPlan(rootDir, detectedPackageManager, options, pa
267
299
  eslintConfigFile: eslintProject.configFile,
268
300
  migratePrettier,
269
301
  prettierConfigFile: prettierProject.configFile,
302
+ fixBaseUrl,
270
303
  migrateNodeVersionFile,
271
304
  nodeVersionDetection,
272
305
  frameworkShimFrameworks: frameworkShimFrameworks.length > 0 ? frameworkShimFrameworks : void 0
@@ -282,33 +315,33 @@ function showMigrationSummary(options) {
282
315
  const { projectRoot, packageManager, packageManagerVersion, installDurationMs, report, updatedExistingVitePlus } = options;
283
316
  const projectLabel = displayRelative(projectRoot) || ".";
284
317
  const configUpdates = report.createdViteConfigCount + report.mergedConfigCount + report.mergedStagedConfigCount + report.inlinedLintStagedConfigCount + report.removedConfigCount + report.tsdownImportCount;
285
- log(`${styleText("magenta", "◇")} ${updatedExistingVitePlus ? "Updated" : "Migrated"} ${accent(projectLabel)}${updatedExistingVitePlus ? "" : " to Vite+"}`);
286
- log(`${styleText("gray", "•")} Node ${process.versions.node} ${packageManager} ${packageManagerVersion}`);
287
- if (installDurationMs > 0) log(`${styleText("green", "✓")} Dependencies installed in ${formatDuration(installDurationMs)}`);
318
+ log$1(`${styleText("magenta", "◇")} ${updatedExistingVitePlus ? "Updated" : "Migrated"} ${accent(projectLabel)}${updatedExistingVitePlus ? "" : " to Vite+"}`);
319
+ log$1(`${styleText("gray", "•")} Node ${process.versions.node} ${packageManager} ${packageManagerVersion}`);
320
+ if (installDurationMs > 0) log$1(`${styleText("green", "✓")} Dependencies installed in ${formatDuration(installDurationMs)}`);
288
321
  if (configUpdates > 0 || report.rewrittenImportFileCount > 0) {
289
322
  const parts = [];
290
323
  if (configUpdates > 0) parts.push(`${configUpdates} ${configUpdates === 1 ? "config update" : "config updates"} applied`);
291
324
  if (report.rewrittenImportFileCount > 0) parts.push(`${report.rewrittenImportFileCount} ${report.rewrittenImportFileCount === 1 ? "file had" : "files had"} imports rewritten`);
292
- log(`${styleText("gray", "•")} ${parts.join(", ")}`);
325
+ log$1(`${styleText("gray", "•")} ${parts.join(", ")}`);
293
326
  }
294
- if (report.eslintMigrated) log(`${styleText("gray", "•")} ESLint rules migrated to Oxlint`);
295
- if (report.prettierMigrated) log(`${styleText("gray", "•")} Prettier migrated to Oxfmt`);
296
- if (report.nodeVersionFileMigrated) log(`${styleText("gray", "•")} Node version manager file migrated to .node-version`);
297
- if (report.gitHooksConfigured) log(`${styleText("gray", "•")} Git hooks configured`);
298
- if (report.frameworkShimAdded) log(`${styleText("gray", "•")} TypeScript shim added for framework component files`);
327
+ if (report.eslintMigrated) log$1(`${styleText("gray", "•")} ESLint rules migrated to Oxlint`);
328
+ if (report.prettierMigrated) log$1(`${styleText("gray", "•")} Prettier migrated to Oxfmt`);
329
+ if (report.nodeVersionFileMigrated) log$1(`${styleText("gray", "•")} Node version manager file migrated to .node-version`);
330
+ if (report.gitHooksConfigured) log$1(`${styleText("gray", "•")} Git hooks configured`);
331
+ if (report.frameworkShimAdded) log$1(`${styleText("gray", "•")} TypeScript shim added for framework component files`);
299
332
  if (report.warnings.length > 0) {
300
- log(`${styleText("yellow", "!")} Warnings:`);
301
- for (const warning of report.warnings) log(` - ${warning}`);
333
+ log$1(`${styleText("yellow", "!")} Warnings:`);
334
+ for (const warning of report.warnings) log$1(` - ${warning}`);
302
335
  }
303
336
  if (report.manualSteps.length > 0) {
304
- log(`${styleText("blue", "→")} Manual follow-up:`);
305
- for (const step of report.manualSteps) log(` - ${step}`);
337
+ log$1(`${styleText("blue", "→")} Manual follow-up:`);
338
+ for (const step of report.manualSteps) log$1(` - ${step}`);
306
339
  }
307
340
  }
308
341
  async function checkRolldownCompatibility(rootDir, report) {
309
342
  try {
310
343
  const { resolveConfig } = await import("../index.js");
311
- const { checkManualChunksCompat } = await import("../compat-DdC7fHjB.js");
344
+ const { checkManualChunksCompat } = await import("../compat-DXZgnEyq.js");
312
345
  checkManualChunksCompat((await resolveConfig({
313
346
  root: rootDir,
314
347
  logLevel: "silent",
@@ -353,11 +386,11 @@ async function executeMigrationPlan(workspaceInfoOptional, plan, interactive) {
353
386
  await upgradeYarn(workspaceInfo.rootDir, interactive, true);
354
387
  } else if (plan.packageManager === PackageManager.pnpm && import_semver.default.satisfies(downloadResult.version, "< 9.5.0")) {
355
388
  failMigrationProgress("Migration failed");
356
- log$1.error(`✘ pnpm@${downloadResult.version} is not supported by auto migration, please upgrade pnpm to >=9.5.0 first`);
389
+ log.error(`✘ pnpm@${downloadResult.version} is not supported by auto migration, please upgrade pnpm to >=9.5.0 first`);
357
390
  cancelAndExit("Vite+ cannot automatically migrate this project yet.", 1);
358
391
  } else if (plan.packageManager === PackageManager.npm && import_semver.default.satisfies(downloadResult.version, "< 8.3.0")) {
359
392
  failMigrationProgress("Migration failed");
360
- log$1.error(`✘ npm@${downloadResult.version} is not supported by auto migration, please upgrade npm to >=8.3.0 first`);
393
+ log.error(`✘ npm@${downloadResult.version} is not supported by auto migration, please upgrade npm to >=8.3.0 first`);
361
394
  cancelAndExit("Vite+ cannot automatically migrate this project yet.", 1);
362
395
  }
363
396
  if (plan.migrateNodeVersionFile && plan.nodeVersionDetection) {
@@ -380,6 +413,7 @@ async function executeMigrationPlan(workspaceInfoOptional, plan, interactive) {
380
413
  updateMigrationProgress("Checking config compatibility");
381
414
  await checkRolldownCompatibility(workspaceInfo.rootDir, report);
382
415
  if (workspaceInfo.packages) for (const pkg of workspaceInfo.packages) await checkRolldownCompatibility(path.join(workspaceInfo.rootDir, pkg.path), report);
416
+ await fixBaseUrlForWorkspace(workspaceInfo, plan.fixBaseUrl, updateMigrationProgress, report);
383
417
  if (plan.migrateEslint) {
384
418
  updateMigrationProgress("Migrating ESLint");
385
419
  if (!await migrateEslintToOxlint(workspaceInfo.rootDir, interactive, plan.eslintConfigFile, workspaceInfo.packages, {
@@ -452,7 +486,7 @@ async function main() {
452
486
  const { projectPath, options } = parseArgs();
453
487
  if (options.help) {
454
488
  printHeader();
455
- log(helpMessage);
489
+ log$1(helpMessage);
456
490
  return;
457
491
  }
458
492
  printHeader();
@@ -480,6 +514,13 @@ async function main() {
480
514
  migrationProgressStarted = false;
481
515
  }
482
516
  };
517
+ const fixedBaseUrlProjectPaths = await fixBaseUrlForWorkspace(workspaceInfoOptional, hasBaseUrlInWorkspace(workspaceInfoOptional) ? await confirmBaseUrlFix(options.interactive) : false, updateMigrationProgress, report);
518
+ if (fixedBaseUrlProjectPaths.length > 0) {
519
+ updateMigrationProgress("Updating lint defaults");
520
+ for (const projectPath of fixedBaseUrlProjectPaths) injectLintTypeCheckDefaults(projectPath, true, report);
521
+ didMigrate = true;
522
+ }
523
+ clearMigrationProgress();
483
524
  const eslintMigrated = await promptEslintMigration(workspaceInfoOptional.rootDir, options.interactive, workspaceInfoOptional.packages);
484
525
  const prettierMigrated = await promptPrettierMigration(workspaceInfoOptional.rootDir, options.interactive, workspaceInfoOptional.packages);
485
526
  const nodeVersionDetection = detectNodeVersionManagerFile(workspaceInfoOptional.rootDir);
@@ -488,7 +529,7 @@ async function main() {
488
529
  }
489
530
  if (eslintMigrated || prettierMigrated) {
490
531
  updateMigrationProgress("Rewriting configs");
491
- mergeViteConfigFiles(workspaceInfoOptional.rootDir, true, report);
532
+ mergeViteConfigFiles(workspaceInfoOptional.rootDir, true, report, workspaceInfoOptional.packages);
492
533
  updateMigrationProgress("Installing dependencies");
493
534
  let resolvedVersion = workspaceInfoOptional.packageManagerVersion;
494
535
  if (workspaceInfoOptional.packageManager && !import_semver.default.valid(import_semver.default.coerce(resolvedVersion) ?? "")) resolvedVersion = (await downloadPackageManager(workspaceInfoOptional.packageManager, resolvedVersion, options.interactive, true)).version;
@@ -533,7 +574,7 @@ async function main() {
533
574
  });
534
575
  }
535
576
  main().catch((err) => {
536
- log$1.error(err.message);
577
+ log.error(err.message);
537
578
  console.error(err);
538
579
  process.exit(1);
539
580
  });
@@ -0,0 +1,37 @@
1
+ import { i as VITE_PLUS_NAME } from "./constants-DCBWlNrn.js";
2
+ //#region src/oxlint-plugin-config.ts
3
+ const VITE_PLUS_OXLINT_PLUGIN_NAME = VITE_PLUS_NAME;
4
+ const VITE_PLUS_OXLINT_PLUGIN_SPECIFIER = `${VITE_PLUS_NAME}/oxlint-plugin`;
5
+ const PREFER_VITE_PLUS_IMPORTS_RULE_NAME = "prefer-vite-plus-imports";
6
+ const PREFER_VITE_PLUS_IMPORTS_RULE = `${VITE_PLUS_OXLINT_PLUGIN_NAME}/${PREFER_VITE_PLUS_IMPORTS_RULE_NAME}`;
7
+ function hasVitePlusPlugin(entry) {
8
+ if (typeof entry === "string") return entry === VITE_PLUS_OXLINT_PLUGIN_SPECIFIER;
9
+ return entry.specifier === VITE_PLUS_OXLINT_PLUGIN_SPECIFIER;
10
+ }
11
+ function isRuleRecord(value) {
12
+ return typeof value === "object" && value !== null && !Array.isArray(value);
13
+ }
14
+ function ensureVitePlusImportRuleDefaults(config) {
15
+ const jsPlugins = Array.isArray(config.jsPlugins) ? [...config.jsPlugins] : [];
16
+ if (!jsPlugins.some(hasVitePlusPlugin)) jsPlugins.push({
17
+ name: VITE_PLUS_OXLINT_PLUGIN_NAME,
18
+ specifier: VITE_PLUS_OXLINT_PLUGIN_SPECIFIER
19
+ });
20
+ const rules = isRuleRecord(config.rules) ? { ...config.rules } : {};
21
+ if (!(PREFER_VITE_PLUS_IMPORTS_RULE in rules)) rules[PREFER_VITE_PLUS_IMPORTS_RULE] = "error";
22
+ return {
23
+ ...config,
24
+ jsPlugins,
25
+ rules
26
+ };
27
+ }
28
+ function createDefaultVitePlusLintConfig(options) {
29
+ const config = ensureVitePlusImportRuleDefaults({});
30
+ if (options?.includeTypeAwareDefaults) config.options = {
31
+ typeAware: true,
32
+ typeCheck: true
33
+ };
34
+ return config;
35
+ }
36
+ //#endregion
37
+ export { ensureVitePlusImportRuleDefaults as i, VITE_PLUS_OXLINT_PLUGIN_NAME as n, createDefaultVitePlusLintConfig as r, PREFER_VITE_PLUS_IMPORTS_RULE_NAME as t };
@@ -0,0 +1,6 @@
1
+ //#region src/oxlint-plugin.d.ts
2
+ declare function rewriteVitePlusImportSpecifier(specifier: string): string | null;
3
+ declare const preferVitePlusImportsRule: import("@oxlint/plugins").Rule;
4
+ declare const plugin: import("@oxlint/plugins").Plugin;
5
+ //#endregion
6
+ export { plugin as default, preferVitePlusImportsRule, rewriteVitePlusImportSpecifier };
@@ -0,0 +1,91 @@
1
+ import { n as VITE_PLUS_OXLINT_PLUGIN_NAME, t as PREFER_VITE_PLUS_IMPORTS_RULE_NAME } from "./oxlint-plugin-config-B89iKTKN.js";
2
+ import { definePlugin, defineRule } from "@oxlint/plugins";
3
+ //#region src/oxlint-plugin.ts
4
+ function rewriteVitePlusImportSpecifier(specifier) {
5
+ if (specifier === "vite") return "vite-plus";
6
+ if (specifier.startsWith("vite/")) return `vite-plus/${specifier.slice(5)}`;
7
+ if (specifier === "vitest/config") return "vite-plus";
8
+ if (specifier === "vitest") return "vite-plus/test";
9
+ if (specifier.startsWith("vitest/")) return `vite-plus/test/${specifier.slice(7)}`;
10
+ if (specifier === "@vitest/browser") return "vite-plus/test/browser";
11
+ const browserSubpathRewrites = {
12
+ "@vitest/browser/context": "vite-plus/test/browser/context",
13
+ "@vitest/browser/client": "vite-plus/test/client",
14
+ "@vitest/browser/locators": "vite-plus/test/locators"
15
+ };
16
+ if (specifier in browserSubpathRewrites) return browserSubpathRewrites[specifier];
17
+ for (const [prefix, provider] of [
18
+ ["@vitest/browser-playwright", "playwright"],
19
+ ["@vitest/browser-preview", "preview"],
20
+ ["@vitest/browser-webdriverio", "webdriverio"]
21
+ ]) {
22
+ if (specifier === prefix) return `vite-plus/test/${prefix.slice(8)}`;
23
+ if (specifier === `${prefix}/context`) return "vite-plus/test/browser/context";
24
+ if (specifier === `${prefix}/provider`) return `vite-plus/test/browser/providers/${provider}`;
25
+ }
26
+ return null;
27
+ }
28
+ function quoteSpecifier(literal, replacement) {
29
+ const quote = literal.raw?.startsWith("'") ? "'" : "\"";
30
+ return `${quote}${replacement}${quote}`;
31
+ }
32
+ function maybeReportLiteral(context, literal) {
33
+ if (!literal || literal.type !== "Literal" || typeof literal.value !== "string") return;
34
+ const replacement = rewriteVitePlusImportSpecifier(literal.value);
35
+ if (!replacement) return;
36
+ context.report({
37
+ node: literal,
38
+ messageId: "preferVitePlusImports",
39
+ data: {
40
+ from: literal.value,
41
+ to: replacement
42
+ },
43
+ fix(fixer) {
44
+ return fixer.replaceText(literal, quoteSpecifier(literal, replacement));
45
+ }
46
+ });
47
+ }
48
+ const preferVitePlusImportsRule = defineRule({
49
+ meta: {
50
+ type: "problem",
51
+ docs: {
52
+ description: "Prefer vite-plus module specifiers over vite and vitest packages.",
53
+ recommended: true,
54
+ url: "https://github.com/voidzero-dev/vite-plus/issues/1301"
55
+ },
56
+ fixable: "code",
57
+ messages: { preferVitePlusImports: "Use '{{to}}' instead of '{{from}}' in Vite+ projects." }
58
+ },
59
+ createOnce(context) {
60
+ return {
61
+ ImportDeclaration(node) {
62
+ maybeReportLiteral(context, node.source);
63
+ },
64
+ ExportAllDeclaration(node) {
65
+ maybeReportLiteral(context, node.source);
66
+ },
67
+ ExportNamedDeclaration(node) {
68
+ maybeReportLiteral(context, node.source);
69
+ },
70
+ ImportExpression(node) {
71
+ maybeReportLiteral(context, node.source);
72
+ },
73
+ TSImportType(node) {
74
+ maybeReportLiteral(context, node.source);
75
+ },
76
+ TSExternalModuleReference(node) {
77
+ maybeReportLiteral(context, node.expression);
78
+ },
79
+ TSModuleDeclaration(node) {
80
+ if (node.global) return;
81
+ maybeReportLiteral(context, node.id);
82
+ }
83
+ };
84
+ }
85
+ });
86
+ const plugin = definePlugin({
87
+ meta: { name: VITE_PLUS_OXLINT_PLUGIN_NAME },
88
+ rules: { [PREFER_VITE_PLUS_IMPORTS_RULE_NAME]: preferVitePlusImportsRule }
89
+ });
90
+ //#endregion
91
+ export { plugin as default, preferVitePlusImportsRule, rewriteVitePlusImportSpecifier };
package/dist/pack-bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as resolveViteConfig } from "./resolve-vite-config-C1KX9CZU.js";
2
+ import { i as resolveViteConfig } from "./resolve-vite-config-TTvhycU1.js";
3
3
  import module from "node:module";
4
4
  import { buildWithConfigs, enableDebug, globalLogger, resolveUserConfig } from "@voidzero-dev/vite-plus-core/pack";
5
5
  //#region ../../node_modules/.pnpm/cac@7.0.0/node_modules/cac/dist/index.js
package/dist/pack.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { t as PackUserConfig } from "./pack-BcBvbQgt.js";
1
+ import { t as PackUserConfig } from "./pack-Ciiho0Tq.js";
2
2
  export * from "@voidzero-dev/vite-plus-core/pack";
3
3
  export { PackUserConfig };
@@ -1,4 +1,5 @@
1
- import { r as parse } from "./main-A6UrSTYb.js";
1
+ import "./constants-DCBWlNrn.js";
2
+ import { r as parse } from "./main-DpJl3LoU.js";
2
3
  import { createRequire } from "node:module";
3
4
  import path from "node:path";
4
5
  import fs from "node:fs";