vite-plus 0.1.22 → 0.1.24

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 (67) hide show
  1. package/binding/index.cjs +119 -52
  2. package/binding/index.d.cts +3222 -2
  3. package/dist/agent-Nuk-9l77.js +2470 -0
  4. package/dist/bin.js +13 -8
  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.d.ts +1 -1
  10. package/dist/create/bin.js +194 -87
  11. package/dist/{define-config-IMCGDS2K.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-owlRxmBM.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-NRrY6krx.js → log-update-lyIiuflf.js} +111 -24
  24. package/dist/migration/bin.js +81 -39
  25. package/dist/{oxlint-plugin-config-BkQeR4FR.js → oxlint-plugin-config-B89iKTKN.js} +1 -1
  26. package/dist/oxlint-plugin.d.ts +2 -4
  27. package/dist/oxlint-plugin.js +1 -1
  28. package/dist/pack-bin.js +1 -1
  29. package/dist/pack.d.ts +1 -1
  30. package/dist/{package-BoLLED6j.js → package-PmBUZ-ve.js} +2 -2
  31. package/dist/staged/bin.js +157 -424
  32. package/dist/strip-ansi-C3wrWz9t.js +853 -0
  33. package/dist/{agent-BWLe0i9g.js → tsconfig-DFb5BKyT.js} +681 -2114
  34. package/dist/version.js +5 -5
  35. package/dist/versions.js +7 -7
  36. package/dist/{workspace-Bi_9spVt.js → workspace-NL-m9wgM.js} +22 -21
  37. package/dist/wrap-ansi-CeQuiQ31.js +2 -0
  38. package/dist/{wrap-ansi-DtUeUCjE.js → wrap-ansi-k7Dn4VtV.js} +1 -1
  39. package/docs/_data/team.ts +3 -3
  40. package/docs/config/run.md +39 -4
  41. package/docs/guide/cache.md +10 -1
  42. package/docs/guide/env.md +3 -0
  43. package/docs/guide/ide-integration.md +2 -2
  44. package/docs/guide/index.md +4 -0
  45. package/docs/guide/install.md +19 -0
  46. package/docs/guide/migrate.md +1 -1
  47. package/docs/guide/run.md +2 -0
  48. package/docs/guide/troubleshooting.md +6 -29
  49. package/docs/guide/upgrade.md +12 -1
  50. package/package.json +20 -20
  51. package/templates/monorepo/_gitignore +1 -0
  52. package/dist/cli-truncate-B62YnW2m.js +0 -138
  53. package/dist/dist-DZfItHAr.js +0 -3
  54. package/dist/slice-ansi-e4todZeH.js +0 -113
  55. package/dist/strip-ansi-D-eYYcD2.js +0 -198
  56. package/dist/tsconfig-BVyzXJ_o.js +0 -517
  57. package/dist/wrap-ansi-3S3qJ7j8.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-CzWdQTt2.js → define-config-BRC7qPNE.js} +0 -0
  61. /package/dist/{help-DK5wuu34.js → help-YP84FSEz.js} +0 -0
  62. /package/dist/{lib-DpwyUJWo.js → lib-L3DWSRQp.js} +0 -0
  63. /package/dist/{main-DhsO6ndq.js → main-DpJl3LoU.js} +0 -0
  64. /package/dist/{pack-K7H72Cum.d.ts → pack-Ciiho0Tq.d.ts} +0 -0
  65. /package/dist/{report-CYPv1VK1.js → report-DgSBQUdz.js} +0 -0
  66. /package/dist/{resolve-vite-config-C5AjksTj.js → resolve-vite-config-TTvhycU1.js} +0 -0
  67. /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.24";
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",
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"
2
+ "vite": "8.0.16",
3
+ "rolldown": "1.0.3",
4
+ "tsdown": "0.22.1",
5
+ "vitest": "4.1.8",
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 R$1, C as log, E as select, v as PackageManager, w as multiselect } from "./tsconfig-DFb5BKyT.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-Nuk-9l77.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
  },
@@ -155,7 +156,7 @@ async function selectEditor({ interactive, editor, onCancel }) {
155
156
  options: [...editorOptions, otherOption],
156
157
  initialValue: "vscode"
157
158
  });
158
- if (q(selectedEditor)) {
159
+ if (R$1(selectedEditor)) {
159
160
  onCancel();
160
161
  return;
161
162
  }
@@ -177,7 +178,7 @@ async function selectEditors({ interactive, editor, onCancel }) {
177
178
  initialValues: ["vscode"],
178
179
  required: false
179
180
  });
180
- if (q(selectedEditors)) {
181
+ if (R$1(selectedEditors)) {
181
182
  onCancel();
182
183
  return;
183
184
  }
@@ -259,7 +260,7 @@ async function writeEditorConfig({ projectRoot, editorId, interactive, conflictD
259
260
  }],
260
261
  initialValue: "skip"
261
262
  });
262
- conflictAction = q(action) || action === "skip" ? "skip" : "merge";
263
+ conflictAction = R$1(action) || action === "skip" ? "skip" : "merge";
263
264
  } else conflictAction = "merge";
264
265
  if (conflictAction === "merge") mergeAndWriteEditorConfig(filePath, incoming, fileName, displayPath, silent);
265
266
  else if (!silent) log.info(`Skipped writing ${displayPath}`);
@@ -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,18 +3248,18 @@ 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 });
3261
- const normalize = (s) => {
3262
+ const normalize$1 = (s) => {
3262
3263
  const c = normalizeCache.get(s);
3263
3264
  if (c) return c;
3264
3265
  const n = s.normalize("NFKD");
@@ -3269,7 +3270,7 @@ const normalizeNocaseCache = new L({ max: 2 ** 12 });
3269
3270
  const normalizeNocase = (s) => {
3270
3271
  const c = normalizeNocaseCache.get(s);
3271
3272
  if (c) return c;
3272
- const n = normalize(s.toLowerCase());
3273
+ const n = normalize$1(s.toLowerCase());
3273
3274
  normalizeNocaseCache.set(s, n);
3274
3275
  return n;
3275
3276
  };
@@ -3458,7 +3459,7 @@ var PathBase = class {
3458
3459
  */
3459
3460
  constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
3460
3461
  this.name = name;
3461
- this.#matchName = nocase ? normalizeNocase(name) : normalize(name);
3462
+ this.#matchName = nocase ? normalizeNocase(name) : normalize$1(name);
3462
3463
  this.#type = type & TYPEMASK;
3463
3464
  this.nocase = nocase;
3464
3465
  this.roots = roots;
@@ -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
  /**
@@ -3534,7 +3535,7 @@ var PathBase = class {
3534
3535
  if (pathPart === "" || pathPart === ".") return this;
3535
3536
  if (pathPart === "..") return this.parent || this;
3536
3537
  const children = this.children();
3537
- const name = this.nocase ? normalizeNocase(pathPart) : normalize(pathPart);
3538
+ const name = this.nocase ? normalizeNocase(pathPart) : normalize$1(pathPart);
3538
3539
  for (const p of children) if (p.#matchName === name) return p;
3539
3540
  const s = this.parent ? this.sep : "";
3540
3541
  const fullpath = this.#fullpath ? this.#fullpath + s + pathPart : void 0;
@@ -3749,7 +3750,7 @@ var PathBase = class {
3749
3750
  * directly.
3750
3751
  */
3751
3752
  isNamed(n) {
3752
- return !this.nocase ? this.#matchName === normalize(n) : this.#matchName === normalizeNocase(n);
3753
+ return !this.nocase ? this.#matchName === normalize$1(n) : this.#matchName === normalizeNocase(n);
3753
3754
  }
3754
3755
  /**
3755
3756
  * Return the Path object corresponding to the target of a symbolic link.
@@ -3861,7 +3862,7 @@ var PathBase = class {
3861
3862
  #readdirMaybePromoteChild(e, c) {
3862
3863
  for (let p = c.provisional; p < c.length; p++) {
3863
3864
  const pchild = c[p];
3864
- if ((this.nocase ? normalizeNocase(e.name) : normalize(e.name)) !== pchild.#matchName) continue;
3865
+ if ((this.nocase ? normalizeNocase(e.name) : normalize$1(e.name)) !== pchild.#matchName) continue;
3865
3866
  return this.#readdirPromoteChild(e, pchild, p, c);
3866
3867
  }
3867
3868
  }
@@ -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;
@@ -10,11 +10,11 @@ export const core: DefaultTheme.TeamMember[] = [
10
10
  ],
11
11
  },
12
12
  {
13
- avatar: 'https://github.com/branchseer.png',
13
+ avatar: 'https://github.com/wan9chi.png',
14
14
  name: 'Wang Chi',
15
15
  links: [
16
- { icon: 'github', link: 'https://github.com/branchseer' },
17
- { icon: 'x', link: 'https://x.com/branchseer' },
16
+ { icon: 'github', link: 'https://github.com/wan9chi' },
17
+ { icon: 'x', link: 'https://x.com/wan9chi' },
18
18
  ],
19
19
  },
20
20
  {
@@ -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.
@@ -4,6 +4,10 @@ Vite+ is the unified toolchain and entry point for web development. It manages y
4
4
 
5
5
  Vite+ ships in two parts: `vp`, the global command-line tool, and `vite-plus`, the local package installed in each project. If you already have a Vite project, use [`vp migrate`](/guide/migrate) to migrate it to Vite+, or paste our [migration prompt](/guide/migrate#migration-prompt) into your coding agent.
6
6
 
7
+ Building with an AI assistant? Copy a ready-made setup prompt:
8
+
9
+ <CopyPrompt />
10
+
7
11
  ## Install `vp`
8
12
 
9
13
  ### macOS / Linux
@@ -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
@@ -149,3 +151,20 @@ vp pm config get registry
149
151
  vp pm cache clean --force
150
152
  vp pm exec tsc --version
151
153
  ```
154
+
155
+ #### Staged publishing
156
+
157
+ `vp pm stage` exposes [npm's staged publishing](https://docs.npmjs.com/staged-publishing) workflow: a build is uploaded to a staging area (no 2FA, CI-friendly), then a maintainer approves or rejects it from a trusted device (2FA). It adapts to the detected package manager.
158
+
159
+ ```bash
160
+ vp pm stage publish # upload the package to staging (no 2FA)
161
+ vp pm stage list # list staged versions
162
+ vp pm stage view <stage-id> # inspect a staged version
163
+ vp pm stage download <stage-id> # download the staged tarball
164
+ vp pm stage approve <stage-id> # promote to the live registry (2FA)
165
+ vp pm stage reject <stage-id> # discard a staged version (2FA)
166
+ ```
167
+
168
+ - pnpm (`pnpm stage`, requires pnpm ≥ 11.3) and npm (`npm stage`, requires npm ≥ 11.15 and Node ≥ 22.14) pass through directly.
169
+ - yarn (Berry) uses its npm plugin (`yarn npm publish --staged`, `yarn npm stage …`); `view`/`download` fall back to npm.
170
+ - yarn Classic and bun have no staged-publishing support and fall back to `npm stage`.
@@ -76,7 +76,7 @@ After the migration:
76
76
 
77
77
  - Confirm `vite` imports were rewritten to `vite-plus` where needed
78
78
  - Confirm `vitest` imports were rewritten to `vite-plus/test` where needed
79
- - Remove old `vite` and `vitest` dependencies only after those rewrites are confirmed
79
+ - On pnpm, keep the `vite` / `vitest` entries that `vp migrate` aliased to the Vite+ packages so the workspace override stays effective; with other package managers you can remove them once those rewrites are confirmed
80
80
  - Move remaining tool-specific config into the appropriate blocks in `vite.config.ts`
81
81
 
82
82
  Command mapping to keep in mind:
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,41 +18,18 @@ 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
- ## `vp lint` / `vp fmt` may fail to read `vite.config.ts`
26
-
27
- `vp lint`, `vp fmt`, and the Oxc VS Code extension all read the `lint` / `fmt` blocks from `vite.config.ts`. Today that support has important limitations.
28
-
29
- ### What is currently supported
30
-
31
- - Static object export:
32
- - `export default { ... }`
33
- - `export default defineConfig({ ... })`
34
-
35
- ### What can fail in current integrations
36
-
37
- - Functional or async config:
38
- - `defineConfig((env) => ({ ... }))`
39
- - `defineConfig(async (env) => ({ ... }))`
40
- - Config files that rely on Vite transform/bundling behavior to execute.
41
-
42
- In scenarios reported in issue #930, Oxc-side integrations that read `vite.config.ts` can behave closer to native ESM loading (similar to Vite `--configLoader native`) than Vite's bundled default loader. That means configs depending on bundling/transforms can fail to load for lint/fmt/editor paths. See: https://github.com/voidzero-dev/vite-plus/issues/930
43
-
44
- ### Workarounds
45
-
46
- - Prefer a static `defineConfig({ ... })` export when you need `lint` / `fmt` in `vite.config.ts`.
47
- - Avoid Node-specific globals (`__dirname` in ESM), unresolved TS-only imports, or JSON imports without import attributes in config code used by lint/fmt.
48
- - If needed, keep `.oxlintrc.*` / `.oxfmtrc.*` as temporary fallback, [although we do not recommend doing this normally](/guide/lint##configuration), while this integration behavior is being improved.
49
-
50
- ### VS Code multi-root workspace note
28
+ ## VS Code extension does not read `vite.config.ts`
51
29
 
52
30
  If VS Code has multiple folders open, the shared Oxc language server may pick a different workspace than expected. That can make it look like `vite.config.ts` support is missing.
53
31
 
54
32
  - Confirm the extension is using the intended workspace.
55
- - Confirm the workspace resolves to a recent Oxc/Oxlint/Oxfmt toolchain.
56
33
 
57
34
  ## `vp build` does not run my build script
58
35
 
@@ -14,9 +14,20 @@ You can upgrade both of them independently.
14
14
  ## Global `vp`
15
15
 
16
16
  ```bash
17
- vp upgrade
17
+ vp upgrade # upgrade to the latest version
18
+ vp upgrade --check # check for updates without installing
18
19
  ```
19
20
 
21
+ ### Rollback
22
+
23
+ Vite+ keeps the **3 most recent** versions installed so you can revert quickly:
24
+
25
+ ```bash
26
+ vp upgrade --rollback
27
+ ```
28
+
29
+ Older versions are pruned automatically after each upgrade. The active version and the previous version are always kept, so a rollback target is never removed.
30
+
20
31
  ## Local `vite-plus`
21
32
 
22
33
  Update the project dependency with the package manager commands in Vite+:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plus",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
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-core": "0.1.24",
337
+ "@voidzero-dev/vite-plus-test": "0.1.24"
338
338
  },
339
339
  "devDependencies": {
340
340
  "@napi-rs/cli": "^3.6.1",
@@ -354,14 +354,14 @@
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",
359
- "tsdown": "^0.22.0",
357
+ "rolldown-plugin-dts": "^0.25.1",
358
+ "semver": "^7.8.0",
359
+ "tsdown": "^0.22.1",
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",
364
- "@voidzero-dev/vite-plus-tools": "0.0.0"
363
+ "@voidzero-dev/vite-plus-tools": "0.0.0",
364
+ "vite": "npm:@voidzero-dev/vite-plus-core@0.1.24"
365
365
  },
366
366
  "napi": {
367
367
  "binaryName": "vite-plus",
@@ -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.24",
385
+ "@voidzero-dev/vite-plus-darwin-x64": "0.1.24",
386
+ "@voidzero-dev/vite-plus-linux-arm64-gnu": "0.1.24",
387
+ "@voidzero-dev/vite-plus-linux-arm64-musl": "0.1.24",
388
+ "@voidzero-dev/vite-plus-linux-x64-gnu": "0.1.24",
389
+ "@voidzero-dev/vite-plus-linux-x64-musl": "0.1.24",
390
+ "@voidzero-dev/vite-plus-win32-x64-msvc": "0.1.24",
391
+ "@voidzero-dev/vite-plus-win32-arm64-msvc": "0.1.24"
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