vite-plus 0.1.22 → 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 (62) hide show
  1. package/binding/index.cjs +119 -52
  2. package/binding/index.d.cts +3222 -2
  3. package/dist/agent-aSGY0osq.js +2461 -0
  4. package/dist/bin.js +6 -5
  5. package/dist/cli-truncate-CWsmbK3p.js +867 -0
  6. package/dist/{compat-OlmU9EQz.js → compat-DXZgnEyq.js} +1 -1
  7. package/dist/config/bin.js +18 -5
  8. package/dist/{constants-kDaYqyWd.js → constants-DCBWlNrn.js} +7 -2
  9. package/dist/create/bin.js +135 -64
  10. package/dist/{define-config-IMCGDS2K.d.ts → define-config-COdn-tsn.d.ts} +7 -5
  11. package/dist/define-config.cjs +1 -1
  12. package/dist/define-config.d.ts +1 -1
  13. package/dist/define-config.js +1 -1
  14. package/dist/dist-Bapm49IR.js +3 -0
  15. package/dist/{dist-owlRxmBM.js → dist-BgQuvbtq.js} +136 -110
  16. package/dist/fmt.d.ts +1 -1
  17. package/dist/index.cjs +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/is-fullwidth-code-point-BUNlIICg.js +8 -0
  21. package/dist/lint.d.ts +1 -1
  22. package/dist/{log-update-NRrY6krx.js → log-update-lyIiuflf.js} +111 -24
  23. package/dist/migration/bin.js +71 -30
  24. package/dist/{oxlint-plugin-config-BkQeR4FR.js → oxlint-plugin-config-B89iKTKN.js} +1 -1
  25. package/dist/oxlint-plugin.d.ts +2 -4
  26. package/dist/oxlint-plugin.js +1 -1
  27. package/dist/pack-bin.js +1 -1
  28. package/dist/pack.d.ts +1 -1
  29. package/dist/{package-BoLLED6j.js → package-PmBUZ-ve.js} +2 -2
  30. package/dist/staged/bin.js +10 -10
  31. package/dist/strip-ansi-C3wrWz9t.js +853 -0
  32. package/dist/{agent-BWLe0i9g.js → tsconfig-DlUVXT3J.js} +648 -2089
  33. package/dist/version.js +5 -5
  34. package/dist/versions.js +6 -6
  35. package/dist/{workspace-Bi_9spVt.js → workspace-DElv730L.js} +13 -12
  36. package/dist/wrap-ansi-CeQuiQ31.js +2 -0
  37. package/dist/{wrap-ansi-DtUeUCjE.js → wrap-ansi-k7Dn4VtV.js} +1 -1
  38. package/docs/config/run.md +39 -4
  39. package/docs/guide/cache.md +10 -1
  40. package/docs/guide/env.md +3 -0
  41. package/docs/guide/ide-integration.md +2 -2
  42. package/docs/guide/install.md +2 -0
  43. package/docs/guide/run.md +2 -0
  44. package/docs/guide/troubleshooting.md +5 -2
  45. package/package.json +18 -18
  46. package/templates/monorepo/_gitignore +1 -0
  47. package/dist/cli-truncate-B62YnW2m.js +0 -138
  48. package/dist/dist-DZfItHAr.js +0 -3
  49. package/dist/slice-ansi-e4todZeH.js +0 -113
  50. package/dist/strip-ansi-D-eYYcD2.js +0 -198
  51. package/dist/tsconfig-BVyzXJ_o.js +0 -517
  52. package/dist/wrap-ansi-3S3qJ7j8.js +0 -2
  53. /package/dist/{chunk-q7NCDQ7-.js → chunk-DnnnRqeS.js} +0 -0
  54. /package/dist/{define-config-GqLoRwH9.cjs → define-config-BR1Y88zz.cjs} +0 -0
  55. /package/dist/{define-config-CzWdQTt2.js → define-config-BRC7qPNE.js} +0 -0
  56. /package/dist/{help-DK5wuu34.js → help-YP84FSEz.js} +0 -0
  57. /package/dist/{lib-DpwyUJWo.js → lib-L3DWSRQp.js} +0 -0
  58. /package/dist/{main-DhsO6ndq.js → main-DpJl3LoU.js} +0 -0
  59. /package/dist/{pack-K7H72Cum.d.ts → pack-Ciiho0Tq.d.ts} +0 -0
  60. /package/dist/{report-CYPv1VK1.js → report-DgSBQUdz.js} +0 -0
  61. /package/dist/{resolve-vite-config-C5AjksTj.js → resolve-vite-config-TTvhycU1.js} +0 -0
  62. /package/dist/{terminal-D_Kg-AA6.js → terminal-uTv0ZaMr.js} +0 -0
package/dist/version.js CHANGED
@@ -1,11 +1,11 @@
1
- import "./constants-kDaYqyWd.js";
2
- import { a as printHeader, r as log, t as accent } from "./terminal-D_Kg-AA6.js";
3
- import { i as hasVitePlusDependency, n as detectPackageMetadata } from "./package-BoLLED6j.js";
4
- import { t as renderCliDoc } from "./help-DK5wuu34.js";
1
+ import "./constants-DCBWlNrn.js";
2
+ import { a as printHeader, r as log, t as accent } from "./terminal-uTv0ZaMr.js";
3
+ import { i as hasVitePlusDependency, n as detectPackageMetadata } from "./package-PmBUZ-ve.js";
4
+ import { t as renderCliDoc } from "./help-YP84FSEz.js";
5
5
  import path from "node:path";
6
6
  import fs from "node:fs";
7
7
  //#region package.json
8
- var version = "0.1.22";
8
+ var version = "0.1.23";
9
9
  //#endregion
10
10
  //#region src/version.ts
11
11
  /** Tool display names in the order shown by `vp --version`. */
package/dist/versions.js CHANGED
@@ -1,9 +1,9 @@
1
1
  export const versions = {
2
- "vite": "8.0.11",
3
- "rolldown": "1.0.0",
2
+ "vite": "8.0.14",
3
+ "rolldown": "1.0.3",
4
4
  "tsdown": "0.22.0",
5
- "vitest": "4.1.6",
6
- "oxlint": "1.63.0",
7
- "oxfmt": "0.48.0",
8
- "oxlint-tsgolint": "0.22.1"
5
+ "vitest": "4.1.7",
6
+ "oxlint": "1.67.0",
7
+ "oxfmt": "0.52.0",
8
+ "oxlint-tsgolint": "0.23.0"
9
9
  };
@@ -1,6 +1,7 @@
1
- import { $ as log, F as readYamlFile, J as PackageManager, P as editYamlFile, et as multiselect, nt as select, ot as q } from "./agent-BWLe0i9g.js";
2
- import { t as require_dist } from "./dist-owlRxmBM.js";
3
- import { c as editJsonFile, d as writeJsonFile, r as getScopeFromPackageName, u as readJsonFile } from "./package-BoLLED6j.js";
1
+ import { A as q, C as log, E as select, v as PackageManager, w as multiselect } from "./tsconfig-DlUVXT3J.js";
2
+ import { t as require_dist } from "./dist-BgQuvbtq.js";
3
+ import { c as editJsonFile, d as writeJsonFile, r as getScopeFromPackageName, u as readJsonFile } from "./package-PmBUZ-ve.js";
4
+ import { B as editYamlFile, V as readYamlFile } from "./agent-aSGY0osq.js";
4
5
  import path, { posix, win32 } from "node:path";
5
6
  import { detectWorkspace } from "../binding/index.js";
6
7
  import * as actualFS from "node:fs";
@@ -43,7 +44,7 @@ const EDITORS = [{
43
44
  unusedDisableDirectives: "deny"
44
45
  } } },
45
46
  oxfmt: { initialization_options: { settings: {
46
- configPath: "./vite.config.ts",
47
+ "fmt.configPath": "./vite.config.ts",
47
48
  run: "onSave"
48
49
  } } }
49
50
  },
@@ -713,8 +714,8 @@ const justDots = new Set(["..", "."]);
713
714
  const reSpecials = /* @__PURE__ */ new Set("().*{}+?[]^$\\!");
714
715
  const regExpEscape$1 = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
715
716
  const qmark = "[^/]";
716
- const star$1 = qmark + "*?";
717
- const starNoEmpty = qmark + "+?";
717
+ const star$1 = "[^/]*?";
718
+ const starNoEmpty = "[^/]+?";
718
719
  let ID = 0;
719
720
  var AST = class {
720
721
  type;
@@ -1061,7 +1062,7 @@ var AST = class {
1061
1062
  let final = "";
1062
1063
  if (this.type === "!" && this.#emptyExt) final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty;
1063
1064
  else {
1064
- const close = this.type === "!" ? "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + star$1 + ")" : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`;
1065
+ const close = this.type === "!" ? "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + "[^/]*?)" : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`;
1065
1066
  final = start + body + close;
1066
1067
  }
1067
1068
  return [
@@ -3247,14 +3248,14 @@ const IFREG = 8;
3247
3248
  const IFLNK = 10;
3248
3249
  const IFSOCK = 12;
3249
3250
  const IFMT = 15;
3250
- const IFMT_UNKNOWN = ~IFMT;
3251
+ const IFMT_UNKNOWN = -16;
3251
3252
  const READDIR_CALLED = 16;
3252
3253
  const LSTAT_CALLED = 32;
3253
3254
  const ENOTDIR = 64;
3254
3255
  const ENOENT = 128;
3255
3256
  const ENOREADLINK = 256;
3256
3257
  const ENOREALPATH = 512;
3257
- const ENOCHILD = ENOENT | 576;
3258
+ const ENOCHILD = 704;
3258
3259
  const TYPEMASK = 1023;
3259
3260
  const entToType = (s) => s.isFile() ? IFREG : s.isDirectory() ? IFDIR : s.isSymbolicLink() ? IFLNK : s.isCharacterDevice() ? IFCHR : s.isBlockDevice() ? IFBLK : s.isSocket() ? IFSOCK : s.isFIFO() ? IFIFO : UNKNOWN;
3260
3261
  const normalizeCache = new L({ max: 2 ** 12 });
@@ -3514,7 +3515,7 @@ var PathBase = class {
3514
3515
  if (cached) return cached;
3515
3516
  const children = Object.assign([], { provisional: 0 });
3516
3517
  this.#children.set(this, children);
3517
- this.#type &= ~READDIR_CALLED;
3518
+ this.#type &= -17;
3518
3519
  return children;
3519
3520
  }
3520
3521
  /**
@@ -4059,7 +4060,7 @@ var PathBase = class {
4059
4060
  */
4060
4061
  async realpath() {
4061
4062
  if (this.#realpath) return this.#realpath;
4062
- if ((ENOREADLINK | 640) & this.#type) return void 0;
4063
+ if (896 & this.#type) return void 0;
4063
4064
  try {
4064
4065
  const rp = await this.#fs.promises.realpath(this.fullpath());
4065
4066
  return this.#realpath = this.resolve(rp);
@@ -4072,7 +4073,7 @@ var PathBase = class {
4072
4073
  */
4073
4074
  realpathSync() {
4074
4075
  if (this.#realpath) return this.#realpath;
4075
- if ((ENOREADLINK | 640) & this.#type) return void 0;
4076
+ if (896 & this.#type) return void 0;
4076
4077
  try {
4077
4078
  const rp = this.#fs.realpathSync(this.fullpath());
4078
4079
  return this.#realpath = this.resolve(rp);
@@ -0,0 +1,2 @@
1
+ import { t as wrapAnsi } from "./wrap-ansi-k7Dn4VtV.js";
2
+ export { wrapAnsi as default };
@@ -1,4 +1,4 @@
1
- import { a as ansiStyles, n as eastAsianWidth, t as stripAnsi } from "./strip-ansi-D-eYYcD2.js";
1
+ import { a as ansiStyles, n as eastAsianWidth, t as stripAnsi } from "./strip-ansi-C3wrWz9t.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;
@@ -61,15 +61,35 @@ export default defineConfig({
61
61
 
62
62
  ## `run.tasks`
63
63
 
64
- - **Type:** `Record<string, TaskConfig>`
64
+ - **Type:** `Record<string, Task | string | string[]>`
65
65
 
66
66
  Defines tasks that can be run with `vp run <task>`.
67
67
 
68
+ As a shorthand, a task value can be a command string or an array of command strings directly:
69
+
70
+ ```ts [vite.config.ts]
71
+ tasks: {
72
+ build: 'vp build',
73
+ check: ['vp lint', 'vp build'],
74
+ }
75
+ ```
76
+
77
+ These are equivalent to setting only `command` on a task config:
78
+
79
+ ```ts [vite.config.ts]
80
+ tasks: {
81
+ build: { command: 'vp build' },
82
+ check: { command: ['vp lint', 'vp build'] },
83
+ }
84
+ ```
85
+
86
+ Use the object form when a task needs other fields like `cache`, `dependsOn`, `env`, or `input`.
87
+
68
88
  ### `command`
69
89
 
70
- - **Type:** `string`
90
+ - **Type:** `string | string[]`
71
91
 
72
- Defines the shell command to run for the task.
92
+ Defines the shell command to run for the task. The string is interpreted by a shell, so spaces, quoting, `&&`, pipes, and redirects all work as written on the command line.
73
93
 
74
94
  ```ts [vite.config.ts]
75
95
  tasks: {
@@ -79,9 +99,24 @@ tasks: {
79
99
  }
80
100
  ```
81
101
 
102
+ An array runs each entry as its own command, sequentially, equivalent to joining them with `&&`. It is **not** a way to split one command into argv tokens — `['vp', 'build']` would try to run a command called `vp` with no arguments, then a command called `build`, instead of `vp build`.
103
+
104
+ ```ts [vite.config.ts]
105
+ tasks: {
106
+ check: {
107
+ // Two commands, run in order
108
+ command: ['vp lint', 'vp build'],
109
+ },
110
+ bad: {
111
+ // Wrong: this is NOT `vp build`; it is `vp` followed by `build`
112
+ command: ['vp', 'build'],
113
+ },
114
+ }
115
+ ```
116
+
82
117
  Each task defined in `vite.config.ts` must include its own `command`. You cannot define a task in both `vite.config.ts` and `package.json` with the same task name.
83
118
 
84
- Commands joined with `&&` are automatically split into independently cached sub-tasks. See [Compound Commands](/guide/run#compound-commands).
119
+ Commands joined with `&&` (or supplied as an array) are automatically split into independently cached sub-tasks. See [Compound Commands](/guide/run#compound-commands).
85
120
 
86
121
  ### `dependsOn`
87
122
 
@@ -13,9 +13,18 @@ When a task runs successfully (exit code 0), its terminal output (stdout/stderr)
13
13
  If everything matches, the cached output is replayed instantly, and the command does not run.
14
14
 
15
15
  ::: info
16
- Currently, only terminal output is cached and replayed. Output files such as `dist/` are not cached. If you delete them, use `--no-cache` to force a re-run. Output file caching is planned for a future release.
16
+ By default, only terminal output is cached and replayed. To cache files produced by a task, configure [`output`](/config/run#output) globs. Matching files are archived after a successful run and restored on a cache hit.
17
17
  :::
18
18
 
19
+ ```ts [vite.config.ts]
20
+ tasks: {
21
+ build: {
22
+ command: 'vp build',
23
+ output: ['dist/**'],
24
+ },
25
+ }
26
+ ```
27
+
19
28
  When a cache miss occurs, Vite Task tells you exactly why:
20
29
 
21
30
  ```
package/docs/guide/env.md CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  Managed mode is on by default, so `node`, `npm`, and related shims resolve through Vite+ and pick the right Node.js version for the current project.
8
8
 
9
+ When a project declares `packageManager` in `package.json`, matching package-manager shims also use that exact package-manager version. For example, `packageManager: "npm@10.9.4"` makes both `npm` and `npx` run through npm 10.9.4. Alias pairs follow the installed package-manager shims: `npm`/`npx`, `pnpm`/`pnpx`, `yarn`/`yarnpkg`, and `bun`/`bunx`. Vite+ does not translate mismatched commands, so a project pinned to `pnpm` still lets `npm` fall back to the npm that comes with the resolved Node.js runtime.
10
+
9
11
  By default, Vite+ stores its managed runtime and related files in `~/.vite-plus`. If needed, you can override that location with `VP_HOME`.
10
12
 
11
13
  If you want to keep that behavior, run:
@@ -99,6 +101,7 @@ vp env use --unset # Remove the session override
99
101
  vp env current # Show current resolved environment
100
102
  vp env current --json # JSON output for automation
101
103
  vp env which node # Show which node binary will be used
104
+ vp env which npx # Show pinned package-manager alias when packageManager matches
102
105
  vp env list-remote --lts # List only LTS versions
103
106
 
104
107
  # Execute
@@ -71,7 +71,7 @@ You can also manually set up the Zed config:
71
71
  "oxfmt": {
72
72
  "initialization_options": {
73
73
  "settings": {
74
- "configPath": "./vite.config.ts",
74
+ "fmt.configPath": "./vite.config.ts",
75
75
  "run": "onSave"
76
76
  }
77
77
  }
@@ -98,4 +98,4 @@ You can also manually set up the Zed config:
98
98
  }
99
99
  ```
100
100
 
101
- Setting `oxfmt.configPath` to `./vite.config.ts` keeps editor format-on-save aligned with the `fmt` block in your Vite+ config. The full generated config covers additional languages (CSS, HTML, JSON, Markdown, etc.) — run `vp create` or `vp migrate` to get the complete file written automatically.
101
+ Setting `oxfmt.fmt.configPath` to `./vite.config.ts` keeps editor format-on-save aligned with the `fmt` block in your Vite+ config. The full generated config covers additional languages (CSS, HTML, JSON, Markdown, etc.) — run `vp create` or `vp migrate` to get the complete file written automatically.
@@ -20,6 +20,8 @@ Vite+ detects the package manager from the workspace root in this order:
20
20
 
21
21
  If none of those files are present, `vp` falls back to `pnpm` by default. Vite+ automatically downloads the matching package manager and uses it for the command you ran.
22
22
 
23
+ The explicit `packageManager` field also affects matching package-manager shims. If a project has `packageManager: "npm@10.9.4"`, `npm` and `npx` use npm 10.9.4. Other generated alias pairs behave the same way: `pnpm`/`pnpx`, `yarn`/`yarnpkg`, and `bun`/`bunx`. Mismatched tools are not translated; `npm` in a `pnpm` project still resolves as npm.
24
+
23
25
  ## Usage
24
26
 
25
27
  ```bash
package/docs/guide/run.md CHANGED
@@ -171,6 +171,8 @@ vp run --filter "@my/*" --filter "!@my/utils" build
171
171
 
172
172
  Multiple `--filter` flags are combined as a union. Exclusion filters are applied after all inclusions.
173
173
 
174
+ When a `--filter` matches no packages, Vite+ prints a warning and exits successfully. Pass `--fail-if-no-match` to abort the run when any filter matches nothing instead.
175
+
174
176
  ### Workspace Root (`-w`)
175
177
 
176
178
  Explicitly run the task in the workspace root package:
@@ -18,9 +18,12 @@ If you are migrating an existing project and it still depends on older Vite or V
18
18
  ## `vp check` does not run type-aware lint rules or type checks
19
19
 
20
20
  - Confirm that `lint.options.typeAware` and `lint.options.typeCheck` are enabled in `vite.config.ts`
21
- - Check whether your `tsconfig.json` uses `compilerOptions.baseUrl`
21
+ - Check whether your `tsconfig.json` still uses `compilerOptions.baseUrl`
22
22
 
23
- The Oxlint type checker path powered by `tsgolint` does not support `baseUrl`, so Vite+ skips `typeAware` and `typeCheck` when that setting is present.
23
+ The Oxlint type checker path powered by `tsgolint` does not support `baseUrl`.
24
+ `vp migrate` and `vp lint --init` try to run the `vp dlx @andrewbranch/ts5to6 --fixBaseUrl .`
25
+ fix before enabling type-aware linting. If that fix fails or is declined, Vite+
26
+ skips `typeAware` and `typeCheck`.
24
27
 
25
28
  ## `vp lint` / `vp fmt` may fail to read `vite.config.ts`
26
29
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plus",
3
- "version": "0.1.22",
3
+ "version": "0.1.23",
4
4
  "description": "The Unified Toolchain for the Web",
5
5
  "homepage": "https://viteplus.dev/guide",
6
6
  "bugs": {
@@ -328,13 +328,13 @@
328
328
  }
329
329
  },
330
330
  "dependencies": {
331
- "@oxc-project/types": "=0.129.0",
331
+ "@oxc-project/types": "=0.133.0",
332
332
  "@oxlint/plugins": "=1.61.0",
333
- "oxfmt": "=0.48.0",
334
- "oxlint": "=1.63.0",
335
- "oxlint-tsgolint": "=0.22.1",
336
- "@voidzero-dev/vite-plus-core": "0.1.22",
337
- "@voidzero-dev/vite-plus-test": "0.1.22"
333
+ "oxfmt": "=0.52.0",
334
+ "oxlint": "=1.67.0",
335
+ "oxlint-tsgolint": "=0.23.0",
336
+ "@voidzero-dev/vite-plus-test": "0.1.23",
337
+ "@voidzero-dev/vite-plus-core": "0.1.23"
338
338
  },
339
339
  "devDependencies": {
340
340
  "@napi-rs/cli": "^3.6.1",
@@ -354,13 +354,13 @@
354
354
  "mri": "^1.2.0",
355
355
  "nanotar": "^0.3.0",
356
356
  "picocolors": "^1.1.1",
357
- "rolldown-plugin-dts": "^0.23.0",
358
- "semver": "^7.7.3",
357
+ "rolldown-plugin-dts": "^0.25.1",
358
+ "semver": "^7.8.0",
359
359
  "tsdown": "^0.22.0",
360
360
  "validate-npm-package-name": "^7.0.2",
361
361
  "yaml": "^2.8.1",
362
362
  "@voidzero-dev/vite-plus-prompts": "0.0.0",
363
- "vite": "npm:@voidzero-dev/vite-plus-core@0.1.22",
363
+ "vite": "npm:@voidzero-dev/vite-plus-core@0.1.23",
364
364
  "@voidzero-dev/vite-plus-tools": "0.0.0"
365
365
  },
366
366
  "napi": {
@@ -381,14 +381,14 @@
381
381
  "node": "^20.19.0 || >=22.12.0"
382
382
  },
383
383
  "optionalDependencies": {
384
- "@voidzero-dev/vite-plus-darwin-arm64": "0.1.22",
385
- "@voidzero-dev/vite-plus-darwin-x64": "0.1.22",
386
- "@voidzero-dev/vite-plus-linux-arm64-gnu": "0.1.22",
387
- "@voidzero-dev/vite-plus-linux-arm64-musl": "0.1.22",
388
- "@voidzero-dev/vite-plus-linux-x64-gnu": "0.1.22",
389
- "@voidzero-dev/vite-plus-linux-x64-musl": "0.1.22",
390
- "@voidzero-dev/vite-plus-win32-x64-msvc": "0.1.22",
391
- "@voidzero-dev/vite-plus-win32-arm64-msvc": "0.1.22"
384
+ "@voidzero-dev/vite-plus-darwin-arm64": "0.1.23",
385
+ "@voidzero-dev/vite-plus-darwin-x64": "0.1.23",
386
+ "@voidzero-dev/vite-plus-linux-arm64-gnu": "0.1.23",
387
+ "@voidzero-dev/vite-plus-linux-arm64-musl": "0.1.23",
388
+ "@voidzero-dev/vite-plus-linux-x64-gnu": "0.1.23",
389
+ "@voidzero-dev/vite-plus-linux-x64-musl": "0.1.23",
390
+ "@voidzero-dev/vite-plus-win32-x64-msvc": "0.1.23",
391
+ "@voidzero-dev/vite-plus-win32-arm64-msvc": "0.1.23"
392
392
  },
393
393
  "scripts": {
394
394
  "build": "oxnode -C dev ./build.ts",
@@ -14,6 +14,7 @@ dist-ssr
14
14
 
15
15
  # Editor directories and files
16
16
  .vscode/*
17
+ !.vscode/settings.json
17
18
  !.vscode/extensions.json
18
19
  .idea
19
20
  .DS_Store
@@ -1,138 +0,0 @@
1
- import { n as eastAsianWidth, t as stripAnsi } from "./strip-ansi-D-eYYcD2.js";
2
- import { t as sliceAnsi } from "./slice-ansi-e4todZeH.js";
3
- //#region ../../node_modules/.pnpm/string-width@8.1.0/node_modules/string-width/index.js
4
- /**
5
- Logic:
6
- - Segment graphemes to match how terminals render clusters.
7
- - Width rules:
8
- 1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.
9
- 2. RGI emoji clusters (\p{RGI_Emoji}) are double-width.
10
- 3. Otherwise use East Asian Width of the cluster’s first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).
11
- */
12
- const segmenter = new Intl.Segmenter();
13
- const zeroWidthClusterRegex = /^(?:\p{Default_Ignorable_Code_Point}|\p{Control}|\p{Mark}|\p{Surrogate})+$/v;
14
- const leadingNonPrintingRegex = /^[\p{Default_Ignorable_Code_Point}\p{Control}\p{Format}\p{Mark}\p{Surrogate}]+/v;
15
- const rgiEmojiRegex = /^\p{RGI_Emoji}$/v;
16
- function baseVisible(segment) {
17
- return segment.replace(leadingNonPrintingRegex, "");
18
- }
19
- function isZeroWidthCluster(segment) {
20
- return zeroWidthClusterRegex.test(segment);
21
- }
22
- function trailingHalfwidthWidth(segment, eastAsianWidthOptions) {
23
- let extra = 0;
24
- if (segment.length > 1) {
25
- for (const char of segment.slice(1)) if (char >= "＀" && char <= "￯") extra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);
26
- }
27
- return extra;
28
- }
29
- function stringWidth(input, options = {}) {
30
- if (typeof input !== "string" || input.length === 0) return 0;
31
- const { ambiguousIsNarrow = true, countAnsiEscapeCodes = false } = options;
32
- let string = input;
33
- if (!countAnsiEscapeCodes) string = stripAnsi(string);
34
- if (string.length === 0) return 0;
35
- let width = 0;
36
- const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
37
- for (const { segment } of segmenter.segment(string)) {
38
- if (isZeroWidthCluster(segment)) continue;
39
- if (rgiEmojiRegex.test(segment)) {
40
- width += 2;
41
- continue;
42
- }
43
- const codePoint = baseVisible(segment).codePointAt(0);
44
- width += eastAsianWidth(codePoint, eastAsianWidthOptions);
45
- width += trailingHalfwidthWidth(segment, eastAsianWidthOptions);
46
- }
47
- return width;
48
- }
49
- //#endregion
50
- //#region ../../node_modules/.pnpm/cli-truncate@5.1.1/node_modules/cli-truncate/index.js
51
- function getIndexOfNearestSpace(string, wantedIndex, shouldSearchRight) {
52
- if (string.charAt(wantedIndex) === " ") return wantedIndex;
53
- const direction = shouldSearchRight ? 1 : -1;
54
- for (let index = 0; index <= 3; index++) {
55
- const finalIndex = wantedIndex + index * direction;
56
- if (string.charAt(finalIndex) === " ") return finalIndex;
57
- }
58
- return wantedIndex;
59
- }
60
- function cliTruncate(text, columns, options = {}) {
61
- const { position = "end", space = false, preferTruncationOnSpace = false } = options;
62
- let { truncationCharacter = "…" } = options;
63
- if (typeof text !== "string") throw new TypeError(`Expected \`input\` to be a string, got ${typeof text}`);
64
- if (typeof columns !== "number") throw new TypeError(`Expected \`columns\` to be a number, got ${typeof columns}`);
65
- if (columns < 1) return "";
66
- const length = stringWidth(text);
67
- if (length <= columns) return text;
68
- if (columns === 1) return truncationCharacter;
69
- const ANSI = {
70
- ESC: 27,
71
- LEFT_BRACKET: 91,
72
- LETTER_M: 109
73
- };
74
- const isSgrParameter = (code) => code >= 48 && code <= 57 || code === 59;
75
- function leadingSgrSpanEndIndex(string) {
76
- let index = 0;
77
- while (index + 2 < string.length && string.codePointAt(index) === ANSI.ESC && string.codePointAt(index + 1) === ANSI.LEFT_BRACKET) {
78
- let j = index + 2;
79
- while (j < string.length && isSgrParameter(string.codePointAt(j))) j++;
80
- if (j < string.length && string.codePointAt(j) === ANSI.LETTER_M) {
81
- index = j + 1;
82
- continue;
83
- }
84
- break;
85
- }
86
- return index;
87
- }
88
- function trailingSgrSpanStartIndex(string) {
89
- let start = string.length;
90
- while (start > 1 && string.codePointAt(start - 1) === ANSI.LETTER_M) {
91
- let j = start - 2;
92
- while (j >= 0 && isSgrParameter(string.codePointAt(j))) j--;
93
- if (j >= 1 && string.codePointAt(j - 1) === ANSI.ESC && string.codePointAt(j) === ANSI.LEFT_BRACKET) {
94
- start = j - 1;
95
- continue;
96
- }
97
- break;
98
- }
99
- return start;
100
- }
101
- function appendWithInheritedStyleFromEnd(visible, suffix) {
102
- const start = trailingSgrSpanStartIndex(visible);
103
- if (start === visible.length) return visible + suffix;
104
- return visible.slice(0, start) + suffix + visible.slice(start);
105
- }
106
- function prependWithInheritedStyleFromStart(prefix, visible) {
107
- const end = leadingSgrSpanEndIndex(visible);
108
- if (end === 0) return prefix + visible;
109
- return visible.slice(0, end) + prefix + visible.slice(end);
110
- }
111
- if (position === "start") {
112
- if (preferTruncationOnSpace) {
113
- const right = sliceAnsi(text, getIndexOfNearestSpace(text, length - columns + 1, true), length).trim();
114
- return prependWithInheritedStyleFromStart(truncationCharacter, right);
115
- }
116
- if (space) truncationCharacter += " ";
117
- const right = sliceAnsi(text, length - columns + stringWidth(truncationCharacter), length);
118
- return prependWithInheritedStyleFromStart(truncationCharacter, right);
119
- }
120
- if (position === "middle") {
121
- if (space) truncationCharacter = ` ${truncationCharacter} `;
122
- const half = Math.floor(columns / 2);
123
- if (preferTruncationOnSpace) {
124
- const spaceNearFirstBreakPoint = getIndexOfNearestSpace(text, half);
125
- const spaceNearSecondBreakPoint = getIndexOfNearestSpace(text, length - (columns - half) + 1, true);
126
- return sliceAnsi(text, 0, spaceNearFirstBreakPoint) + truncationCharacter + sliceAnsi(text, spaceNearSecondBreakPoint, length).trim();
127
- }
128
- return sliceAnsi(text, 0, half) + truncationCharacter + sliceAnsi(text, length - (columns - half) + stringWidth(truncationCharacter), length);
129
- }
130
- if (position === "end") {
131
- if (preferTruncationOnSpace) return appendWithInheritedStyleFromEnd(sliceAnsi(text, 0, getIndexOfNearestSpace(text, columns - 1)), truncationCharacter);
132
- if (space) truncationCharacter = ` ${truncationCharacter}`;
133
- return appendWithInheritedStyleFromEnd(sliceAnsi(text, 0, columns - stringWidth(truncationCharacter)), truncationCharacter);
134
- }
135
- throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${position}`);
136
- }
137
- //#endregion
138
- export { cliTruncate as default };
@@ -1,3 +0,0 @@
1
- import { t as require_dist } from "./dist-owlRxmBM.js";
2
- export default require_dist();
3
- export {};
@@ -1,113 +0,0 @@
1
- import { a as ansiStyles, i as isWide, r as isFullWidth } from "./strip-ansi-D-eYYcD2.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
- //#region ../../node_modules/.pnpm/slice-ansi@7.1.2/node_modules/slice-ansi/index.js
9
- const ESCAPES = new Set([27, 155]);
10
- const CODE_POINT_0 = "0".codePointAt(0);
11
- const CODE_POINT_9 = "9".codePointAt(0);
12
- const MAX_ANSI_SEQUENCE_LENGTH = 19;
13
- const endCodesSet = /* @__PURE__ */ new Set();
14
- const endCodesMap = /* @__PURE__ */ new Map();
15
- for (const [start, end] of ansiStyles.codes) {
16
- endCodesSet.add(ansiStyles.color.ansi(end));
17
- endCodesMap.set(ansiStyles.color.ansi(start), ansiStyles.color.ansi(end));
18
- }
19
- function getEndCode(code) {
20
- if (endCodesSet.has(code)) return code;
21
- if (endCodesMap.has(code)) return endCodesMap.get(code);
22
- code = code.slice(2);
23
- if (code.includes(";")) code = code[0] + "0";
24
- const returnValue = ansiStyles.codes.get(Number.parseInt(code, 10));
25
- if (returnValue) return ansiStyles.color.ansi(returnValue);
26
- return ansiStyles.reset.open;
27
- }
28
- function findNumberIndex(string) {
29
- for (let index = 0; index < string.length; index++) {
30
- const codePoint = string.codePointAt(index);
31
- if (codePoint >= CODE_POINT_0 && codePoint <= CODE_POINT_9) return index;
32
- }
33
- return -1;
34
- }
35
- function parseAnsiCode(string, offset) {
36
- string = string.slice(offset, offset + MAX_ANSI_SEQUENCE_LENGTH);
37
- const startIndex = findNumberIndex(string);
38
- if (startIndex !== -1) {
39
- let endIndex = string.indexOf("m", startIndex);
40
- if (endIndex === -1) endIndex = string.length;
41
- return string.slice(0, endIndex + 1);
42
- }
43
- }
44
- function tokenize(string, endCharacter = Number.POSITIVE_INFINITY) {
45
- const returnValue = [];
46
- let index = 0;
47
- let visibleCount = 0;
48
- while (index < string.length) {
49
- const codePoint = string.codePointAt(index);
50
- if (ESCAPES.has(codePoint)) {
51
- const code = parseAnsiCode(string, index);
52
- if (code) {
53
- returnValue.push({
54
- type: "ansi",
55
- code,
56
- endCode: getEndCode(code)
57
- });
58
- index += code.length;
59
- continue;
60
- }
61
- }
62
- const isFullWidth = isFullwidthCodePoint(codePoint);
63
- const character = String.fromCodePoint(codePoint);
64
- returnValue.push({
65
- type: "character",
66
- value: character,
67
- isFullWidth
68
- });
69
- index += character.length;
70
- visibleCount += isFullWidth ? 2 : character.length;
71
- if (visibleCount >= endCharacter) break;
72
- }
73
- return returnValue;
74
- }
75
- function reduceAnsiCodes(codes) {
76
- let returnValue = [];
77
- for (const code of codes) if (code.code === ansiStyles.reset.open) returnValue = [];
78
- else if (endCodesSet.has(code.code)) returnValue = returnValue.filter((returnValueCode) => returnValueCode.endCode !== code.code);
79
- else {
80
- returnValue = returnValue.filter((returnValueCode) => returnValueCode.endCode !== code.endCode);
81
- returnValue.push(code);
82
- }
83
- return returnValue;
84
- }
85
- function undoAnsiCodes(codes) {
86
- return reduceAnsiCodes(codes).map(({ endCode }) => endCode).reverse().join("");
87
- }
88
- function sliceAnsi(string, start, end) {
89
- const tokens = tokenize(string, end);
90
- let activeCodes = [];
91
- let position = 0;
92
- let returnValue = "";
93
- let include = false;
94
- for (const token of tokens) {
95
- if (end !== void 0 && position >= end) break;
96
- if (token.type === "ansi") {
97
- activeCodes.push(token);
98
- if (include) returnValue += token.code;
99
- } else {
100
- if (!include && position >= start) {
101
- include = true;
102
- activeCodes = reduceAnsiCodes(activeCodes);
103
- returnValue = activeCodes.map(({ code }) => code).join("");
104
- }
105
- if (include) returnValue += token.value;
106
- position += token.isFullWidth ? 2 : token.value.length;
107
- }
108
- }
109
- returnValue += undoAnsiCodes(activeCodes);
110
- return returnValue;
111
- }
112
- //#endregion
113
- export { sliceAnsi as t };