vize 0.91.0 → 0.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.d.mts CHANGED
@@ -1 +1,7 @@
1
- export { };
1
+ //#region src/cli.d.ts
2
+ declare function shouldPreferWorkspaceBinding(resolvedPath: string | null): boolean;
3
+ declare function sanitizeTerminalText(value: unknown): string;
4
+ declare function displayPath(filePath: string): string;
5
+ //#endregion
6
+ export { displayPath, sanitizeTerminalText, shouldPreferWorkspaceBinding };
7
+ //# sourceMappingURL=cli.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.mts","names":[],"sources":["../src/cli.ts"],"mappings":";iBA6IgB,4BAAA,CAA6B,YAAA;AAAA,iBAwxB7B,oBAAA,CAAqB,KAAA;AAAA,iBA+DrB,WAAA,CAAY,QAAA"}
package/dist/cli.mjs CHANGED
@@ -274,7 +274,7 @@ async function runBuild(args) {
274
274
  else if (config?.compiler?.scriptExt === "js") options.scriptExt = "downcompile";
275
275
  const files = collectVueFiles(patterns);
276
276
  if (files.length === 0) {
277
- process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\n`);
277
+ process.stderr.write(`No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\n`);
278
278
  process.exit(1);
279
279
  }
280
280
  const native = loadNative("build");
@@ -295,8 +295,8 @@ async function runBuild(args) {
295
295
  const results = [...result.results].sort((left, right) => left.path.localeCompare(right.path));
296
296
  for (const fileResult of results) {
297
297
  const source = sourceByPath.get(fileResult.path) ?? "";
298
- for (const warning of fileResult.warnings) process.stderr.write(`warning: ${displayPath(fileResult.path)} ${warning}\n`);
299
- for (const error of fileResult.errors) process.stderr.write(`error: ${displayPath(fileResult.path)} ${error}\n`);
298
+ for (const warning of fileResult.warnings) process.stderr.write(`warning: ${displayPath(fileResult.path)} ${sanitizeTerminalText(warning)}\n`);
299
+ for (const error of fileResult.errors) process.stderr.write(`error: ${displayPath(fileResult.path)} ${sanitizeTerminalText(error)}\n`);
300
300
  if (fileResult.errors.length > 0 || options.format === "stats") continue;
301
301
  const extension = options.format === "json" ? "json" : getOutputExtension(source, options.scriptExt);
302
302
  writeFileSync(path.join(options.output, outputFileName(fileResult.path, extension)), options.format === "json" ? JSON.stringify(fileResult, null, 2) : fileResult.code);
@@ -386,7 +386,7 @@ async function runFmt(args) {
386
386
  options.singleQuote ??= config?.formatter?.singleQuote;
387
387
  const files = collectVueFiles(patterns);
388
388
  if (files.length === 0) {
389
- process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\n`);
389
+ process.stderr.write(`No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\n`);
390
390
  return;
391
391
  }
392
392
  const native = loadNative("fmt");
@@ -405,7 +405,7 @@ async function runFmt(args) {
405
405
  } else process.stderr.write(`Would reformat: ${displayPath(file)}\n`);
406
406
  } catch (error) {
407
407
  errored++;
408
- process.stderr.write(`Error formatting ${displayPath(file)}: ${error instanceof Error ? error.message : String(error)}\n`);
408
+ process.stderr.write(`Error formatting ${displayPath(file)}: ${sanitizeTerminalText(error instanceof Error ? error.message : String(error))}\n`);
409
409
  }
410
410
  }
411
411
  process.stderr.write(`\x1b[32mOK\x1b[0m Formatted ${files.length} Vue file(s), ${changed} changed\n`);
@@ -457,10 +457,50 @@ function hasGlobSyntax(pattern) {
457
457
  function normalizePath(filePath) {
458
458
  return filePath.split(path.sep).join("/");
459
459
  }
460
+ function sanitizeTerminalText(value) {
461
+ const text = String(value);
462
+ let sanitized = "";
463
+ for (let i = 0; i < text.length; i++) {
464
+ const code = text.charCodeAt(i);
465
+ if (code === 27) {
466
+ i = skipTerminalEscapeSequence(text, i);
467
+ continue;
468
+ }
469
+ if (isUnsafeTerminalControl(code)) continue;
470
+ sanitized += text[i];
471
+ }
472
+ return sanitized;
473
+ }
474
+ function skipTerminalEscapeSequence(text, escapeIndex) {
475
+ const introducer = text.charCodeAt(escapeIndex + 1);
476
+ if (introducer === 91) return skipUntilAnsiFinalByte(text, escapeIndex + 2);
477
+ if (introducer === 93 || introducer === 80 || introducer === 94 || introducer === 95) return skipUntilStringTerminator(text, escapeIndex + 2);
478
+ if (Number.isNaN(introducer)) return escapeIndex;
479
+ return escapeIndex + 1;
480
+ }
481
+ function skipUntilAnsiFinalByte(text, index) {
482
+ for (let i = index; i < text.length; i++) {
483
+ const code = text.charCodeAt(i);
484
+ if (code >= 64 && code <= 126) return i;
485
+ }
486
+ return text.length - 1;
487
+ }
488
+ function skipUntilStringTerminator(text, index) {
489
+ for (let i = index; i < text.length; i++) {
490
+ const code = text.charCodeAt(i);
491
+ if (code === 7) return i;
492
+ if (code === 27 && text.charCodeAt(i + 1) === 92) return i + 1;
493
+ }
494
+ return text.length - 1;
495
+ }
496
+ function isUnsafeTerminalControl(code) {
497
+ if (code === 9 || code === 10 || code === 13) return false;
498
+ return code >= 0 && code <= 31 || code >= 127 && code <= 159;
499
+ }
460
500
  function displayPath(filePath) {
461
501
  const relative = path.relative(process.cwd(), filePath);
462
- if (relative && !relative.startsWith("..") && !path.isAbsolute(relative)) return normalizePath(relative);
463
- return normalizePath(filePath);
502
+ if (relative && !relative.startsWith("..") && !path.isAbsolute(relative)) return sanitizeTerminalText(normalizePath(relative));
503
+ return sanitizeTerminalText(normalizePath(filePath));
464
504
  }
465
505
  function isVueFile(filePath) {
466
506
  return path.extname(filePath) === ".vue";
@@ -615,16 +655,16 @@ function renderCheckText(results, options, timeMs, declarations = []) {
615
655
  for (const { file, source, result } of results) {
616
656
  totalErrors += result.errorCount;
617
657
  totalWarnings += result.warningCount;
618
- if (options.includeVirtualTs && result.virtualTs) process.stderr.write(`\n=== ${displayPath(file)} ===\n${result.virtualTs}\n`);
658
+ if (options.includeVirtualTs && result.virtualTs) process.stderr.write(`\n=== ${displayPath(file)} ===\n${sanitizeTerminalText(result.virtualTs)}\n`);
619
659
  if (options.quiet || result.diagnostics.length === 0) continue;
620
660
  const starts = lineStarts(source);
621
661
  process.stdout.write(`\n\x1b[4m${displayPath(file)}\x1b[0m\n`);
622
662
  for (const diagnostic of result.diagnostics) {
623
663
  const color = diagnostic.severity === "error" ? "\x1B[31m" : "\x1B[33m";
624
664
  const location = offsetToLineColumn(starts, diagnostic.start);
625
- const code = diagnostic.code ? ` [${diagnostic.code}]` : "";
626
- process.stdout.write(` ${color}${diagnostic.severity}:${location.line}:${location.column}\x1b[0m${code} ${diagnostic.message}\n`);
627
- if (diagnostic.help) process.stdout.write(` help: ${diagnostic.help}\n`);
665
+ const code = diagnostic.code ? ` [${sanitizeTerminalText(diagnostic.code)}]` : "";
666
+ process.stdout.write(` ${color}${diagnostic.severity}:${location.line}:${location.column}\x1b[0m${code} ${sanitizeTerminalText(diagnostic.message)}\n`);
667
+ if (diagnostic.help) process.stdout.write(` help: ${sanitizeTerminalText(diagnostic.help)}\n`);
628
668
  }
629
669
  }
630
670
  const status = totalErrors > 0 ? "\x1B[31mERR\x1B[0m" : "\x1B[32mOK\x1B[0m";
@@ -659,7 +699,7 @@ async function runCheck(args) {
659
699
  options.checkTemplateBindings ??= config?.typeChecker?.checkTemplateBindings;
660
700
  const files = collectVueFiles(patterns);
661
701
  if (files.length === 0) {
662
- process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\n`);
702
+ process.stderr.write(`No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\n`);
663
703
  return;
664
704
  }
665
705
  const native = loadNative("check");
@@ -720,7 +760,7 @@ async function runLint(args) {
720
760
  preset: options.preset
721
761
  });
722
762
  if (result.output) {
723
- process.stdout.write(result.output);
763
+ process.stdout.write(sanitizeTerminalText(result.output));
724
764
  if (!result.output.endsWith("\n")) process.stdout.write("\n");
725
765
  }
726
766
  if (options.fix) process.stderr.write("\nNote: --fix is not yet implemented\n");
@@ -920,30 +960,16 @@ async function main() {
920
960
  }
921
961
  } else {
922
962
  printUsage();
923
- console.error(`Unknown command: ${command}`);
963
+ console.error(`Unknown command: ${sanitizeTerminalText(command)}`);
924
964
  console.error("For commands not yet available via NAPI, install from source: cargo install vize");
925
965
  process.exit(1);
926
966
  }
927
967
  }
928
- if (!import.meta.vitest) main().catch((error) => {
929
- console.error(error instanceof Error ? error.message : String(error));
968
+ if (!(Boolean(import.meta.vitest) || process.env.VITEST === "true" || process.env.NODE_ENV === "test")) main().catch((error) => {
969
+ console.error(sanitizeTerminalText(error instanceof Error ? error.message : String(error)));
930
970
  process.exit(1);
931
971
  });
932
- if (import.meta.vitest) {
933
- const { describe, expect, it } = import.meta.vitest;
934
- describe("shouldPreferWorkspaceBinding", () => {
935
- it("detects the local workspace native package", () => {
936
- expect(shouldPreferWorkspaceBinding(`${path.sep}Users${path.sep}example${path.sep}repo${path.sep}npm${path.sep}vize-native${path.sep}index.js`)).toBe(true);
937
- });
938
- it("ignores published platform packages", () => {
939
- expect(shouldPreferWorkspaceBinding(`${path.sep}repo${path.sep}node_modules${path.sep}.pnpm${path.sep}@vizejs+native-darwin-arm64${path.sep}node_modules${path.sep}@vizejs${path.sep}native-darwin-arm64${path.sep}index.js`)).toBe(false);
940
- });
941
- it("returns false when the fallback package cannot be resolved", () => {
942
- expect(shouldPreferWorkspaceBinding(null)).toBe(false);
943
- });
944
- });
945
- }
946
972
  //#endregion
947
- export {};
973
+ export { displayPath, sanitizeTerminalText, shouldPreferWorkspaceBinding };
948
974
 
949
975
  //# sourceMappingURL=cli.mjs.map
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\nimport * as path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport { loadConfig } from \"./config.js\";\n\nconst require = createRequire(import.meta.url);\nconst WORKSPACE_BINDING_PATH = \"../../vize-native\";\nconst BUILD_BATCH_SIZE = 128;\nconst SKIPPED_VUE_FILE_DIRECTORIES = new Set([\n \"node_modules\",\n \"dist\",\n \".git\",\n \".nuxt\",\n \".output\",\n \".nitro\",\n \"coverage\",\n]);\n\n// ============================================================================\n// Native binding loader (oxlint pattern)\n// ============================================================================\n\nfunction isMusl(): boolean {\n const report = process.report?.getReport();\n if (typeof report === \"object\" && report !== null && \"header\" in report) {\n const header = (report as { header: { glibcVersionRuntime?: string } }).header;\n return !header.glibcVersionRuntime;\n }\n try {\n const lddPath = require(\"child_process\").execSync(\"which ldd\").toString().trim();\n return readFileSync(lddPath, \"utf8\").includes(\"musl\");\n } catch {\n return true;\n }\n}\n\nfunction getBindingPackageName(): string {\n const { platform, arch } = process;\n\n switch (platform) {\n case \"darwin\":\n switch (arch) {\n case \"x64\":\n return \"@vizejs/native-darwin-x64\";\n case \"arm64\":\n return \"@vizejs/native-darwin-arm64\";\n default:\n throw new Error(`Unsupported architecture on macOS: ${arch}`);\n }\n case \"win32\":\n switch (arch) {\n case \"x64\":\n return \"@vizejs/native-win32-x64-msvc\";\n case \"arm64\":\n return \"@vizejs/native-win32-arm64-msvc\";\n default:\n throw new Error(`Unsupported architecture on Windows: ${arch}`);\n }\n case \"linux\":\n switch (arch) {\n case \"x64\":\n return isMusl() ? \"@vizejs/native-linux-x64-musl\" : \"@vizejs/native-linux-x64-gnu\";\n case \"arm64\":\n return isMusl() ? \"@vizejs/native-linux-arm64-musl\" : \"@vizejs/native-linux-arm64-gnu\";\n default:\n throw new Error(`Unsupported architecture on Linux: ${arch}`);\n }\n default:\n throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`);\n }\n}\n\ninterface NativeBinding {\n compileSfcBatchWithResults: (\n files: BatchFileInput[],\n options?: NativeBuildOptions,\n ) => BatchCompileResult;\n formatSfc: (source: string, options?: NativeFormatOptions) => FormatResult;\n typeCheck: (source: string, options?: NativeTypeCheckOptions) => TypeCheckResult;\n generateDeclaration?: (source: string, options?: NativeDeclarationOptions) => DeclarationResult;\n lint: (\n patterns: string[],\n options?: {\n format?: string;\n max_warnings?: number;\n quiet?: boolean;\n fix?: boolean;\n help_level?: string;\n preset?: string;\n },\n ) => LintResult;\n}\n\ntype NativeCommand = \"build\" | \"check\" | \"fmt\" | \"lint\";\n\nconst REQUIRED_BINDINGS: Record<NativeCommand, keyof NativeBinding> = {\n build: \"compileSfcBatchWithResults\",\n check: \"typeCheck\",\n fmt: \"formatSfc\",\n lint: \"lint\",\n};\n\nfunction loadNative(command: NativeCommand): NativeBinding {\n const attemptedPackages = getAttemptedPackages();\n let lastError: unknown = null;\n const requiredBinding = REQUIRED_BINDINGS[command];\n\n for (const packageName of attemptedPackages) {\n try {\n const binding = require(packageName) as Partial<NativeBinding>;\n if (typeof binding[requiredBinding] !== \"function\") {\n throw new Error(`${packageName} does not expose the ${command} binding.`);\n }\n return binding as NativeBinding;\n } catch (error) {\n lastError = error;\n }\n }\n\n console.error(`Failed to load native binding. Tried: ${attemptedPackages.join(\", \")}`);\n console.error(\"Try reinstalling: npm install vize\");\n throw lastError instanceof Error ? lastError : new Error(\"Failed to load native binding\");\n}\n\nfunction getAttemptedPackages(): readonly string[] {\n const platformBindingPackage = getBindingPackageName();\n return shouldPreferWorkspaceBinding(resolveWorkspaceBindingPath())\n ? [WORKSPACE_BINDING_PATH, platformBindingPackage]\n : [platformBindingPackage, WORKSPACE_BINDING_PATH];\n}\n\nfunction resolveWorkspaceBindingPath(): string | null {\n try {\n return require.resolve(WORKSPACE_BINDING_PATH);\n } catch {\n return null;\n }\n}\n\nfunction shouldPreferWorkspaceBinding(resolvedPath: string | null): boolean {\n const override = process.env.VIZE_PREFER_WORKSPACE_BINDING;\n if (override === \"1\" || override === \"true\") {\n return true;\n }\n if (override === \"0\" || override === \"false\") {\n return false;\n }\n if (resolvedPath == null) {\n return false;\n }\n\n return resolvedPath.includes(`${path.sep}npm${path.sep}vize-native${path.sep}`);\n}\n\n// ============================================================================\n// Lint command\n// ============================================================================\n\ninterface LintOptions {\n format?: string;\n maxWarnings?: number;\n quiet?: boolean;\n fix?: boolean;\n helpLevel?: string;\n preset?: string;\n}\n\ninterface LintResult {\n output: string;\n errorCount: number;\n warningCount: number;\n fileCount: number;\n timeMs: number;\n}\n\ninterface SharedConfigOptions {\n configFile?: string;\n configMode: \"root\" | \"none\";\n}\n\ninterface ParsedLintCommand {\n patterns: string[];\n options: LintOptions;\n sharedConfig: SharedConfigOptions;\n}\n\nfunction printUsage(): void {\n console.error(\"Usage: vize <command> [options]\");\n console.error(\"Commands: build, fmt, check, lint, upgrade, ready, musea\");\n}\n\nfunction printBuildUsage(): void {\n console.error(\"Usage: vize build [options] [files-or-directories]\");\n console.error(\"Options:\");\n console.error(\" -o, --output <dir> Output directory\");\n console.error(\" -f, --format <js|json|stats> Output format\");\n console.error(\" --ssr Enable SSR compilation\");\n console.error(\" --script-ext <mode> preserve or downcompile\");\n console.error(\" -j, --threads <number> Worker thread count\");\n}\n\nfunction printFmtUsage(): void {\n console.error(\"Usage: vize fmt [options] [files-or-directories]\");\n console.error(\"Options:\");\n console.error(\" --check Exit with an error if files need formatting\");\n console.error(\" -w, --write Write formatted output\");\n console.error(\" --single-quote Use single quotes\");\n console.error(\" --print-width <number> Maximum line width\");\n console.error(\" --tab-width <number> Indentation width\");\n console.error(\" --use-tabs Indent with tabs\");\n console.error(\" --no-semi Omit semicolons\");\n}\n\nfunction printCheckUsage(): void {\n console.error(\"Usage: vize check [options] [files-or-directories]\");\n console.error(\"Options:\");\n console.error(\" -f, --format <text|json> Output format\");\n console.error(\" -q, --quiet Show summary only\");\n console.error(\" --strict Enable strict checks\");\n console.error(\" --show-virtual-ts Print generated Virtual TS\");\n console.error(\" --declaration Emit Vue component .d.ts files\");\n console.error(\" --declaration-dir <dir> Output directory for declarations\");\n console.error(\" --max-warnings <number> Fail when warnings exceed the limit\");\n console.error(\" -c, --config <path> Use a specific vize config file\");\n console.error(\" --no-config Disable config discovery\");\n console.error(\"\");\n console.error(\n \"Note: npm `vize check` uses the packaged NAPI checker. Install the Rust CLI for project-backed Corsa diagnostics.\",\n );\n}\n\nfunction printUpgradeUsage(): void {\n console.error(\"Usage: vize upgrade [options]\");\n console.error(\"Options:\");\n console.error(\" --package-manager <name> npm, pnpm, yarn, bun, or vp\");\n console.error(\" -g, --global Upgrade the global installation\");\n console.error(\" --dry-run Print the command without running it\");\n}\n\nfunction printReadyUsage(): void {\n console.error(\"Usage: vize ready [options] [files-or-directories]\");\n console.error(\"Runs: fmt --write -> lint -> check -> build\");\n console.error(\"Options:\");\n console.error(\" -o, --output <dir> Output directory for build\");\n console.error(\" --ssr Enable SSR compilation for build\");\n console.error(\" --script-ext <mode> preserve or downcompile\");\n}\n\nfunction resolvePackageBinaryFromCwd(packageName: string, binName: string = packageName): string {\n const cwdRequire = createRequire(pathToFileURL(path.join(process.cwd(), \"package.json\")).href);\n const packageJsonPath = cwdRequire.resolve(`${packageName}/package.json`);\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n bin?: string | Record<string, string>;\n };\n\n const bin = typeof packageJson.bin === \"string\" ? packageJson.bin : packageJson.bin?.[binName];\n\n if (!bin) {\n throw new Error(`Could not resolve binary '${binName}' from package '${packageName}'`);\n }\n\n return path.resolve(path.dirname(packageJsonPath), bin);\n}\n\nfunction runMusea(args: string[]): void {\n const isHelp = args.includes(\"--help\") || args.includes(\"-h\");\n if (isHelp) {\n console.error(\"Usage: vize musea [--build] [...vite options]\");\n console.error(\" --build Run `vite build` instead of `vite dev`\");\n return;\n }\n\n const isBuild = args.includes(\"--build\");\n const viteArgs = args.filter((arg) => arg !== \"--build\");\n const viteCommand = isBuild ? \"build\" : \"dev\";\n const viteBin = resolvePackageBinaryFromCwd(\"vite\");\n const result = spawnSync(process.execPath, [viteBin, viteCommand, ...viteArgs], {\n stdio: \"inherit\",\n cwd: process.cwd(),\n env: process.env,\n });\n\n if (result.error) {\n throw result.error;\n }\n\n process.exit(result.status ?? 1);\n}\n\nfunction parseLintCommand(args: string[]): ParsedLintCommand {\n const patterns: string[] = [];\n const options: LintOptions = {};\n const sharedConfig: SharedConfigOptions = {\n configMode: \"root\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--format\" || arg === \"-f\") {\n options.format = args[++i];\n } else if (arg === \"--max-warnings\") {\n options.maxWarnings = Number.parseInt(args[++i], 10);\n } else if (arg === \"--quiet\" || arg === \"-q\") {\n options.quiet = true;\n } else if (arg === \"--fix\") {\n options.fix = true;\n } else if (arg === \"--help-level\") {\n options.helpLevel = args[++i];\n } else if (arg === \"--preset\") {\n options.preset = args[++i];\n } else if (arg === \"--config\" || arg === \"-c\") {\n const configFile = args[++i];\n if (!configFile) {\n throw new Error(\"Missing path after --config\");\n }\n sharedConfig.configFile = configFile;\n } else if (arg === \"--no-config\") {\n sharedConfig.configMode = \"none\";\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options, sharedConfig };\n}\n\n// ============================================================================\n// Build command\n// ============================================================================\n\ninterface NativeBuildOptions {\n ssr?: boolean;\n vapor?: boolean;\n customRenderer?: boolean;\n custom_renderer?: boolean;\n isTs?: boolean;\n is_ts?: boolean;\n threads?: number;\n}\n\ninterface BatchFileInput {\n path: string;\n source: string;\n}\n\ninterface MacroArtifact {\n kind: string;\n name: string;\n source: string;\n content: string;\n moduleCode?: string;\n start: number;\n end: number;\n}\n\ninterface BatchFileResult {\n path: string;\n code: string;\n css?: string;\n errors: string[];\n warnings: string[];\n scopeId?: string;\n scope_id?: string;\n hasScoped?: boolean;\n has_scoped?: boolean;\n macroArtifacts?: MacroArtifact[];\n macro_artifacts?: MacroArtifact[];\n}\n\ninterface BatchCompileResult {\n results: BatchFileResult[];\n successCount?: number;\n success_count?: number;\n failedCount?: number;\n failed_count?: number;\n timeMs?: number;\n time_ms?: number;\n}\n\ninterface BuildOptions {\n output: string;\n format: \"js\" | \"json\" | \"stats\";\n ssr?: boolean;\n vapor?: boolean;\n customRenderer?: boolean;\n scriptExt: \"preserve\" | \"downcompile\";\n threads?: number;\n help?: boolean;\n}\n\ninterface ParsedBuildCommand {\n patterns: string[];\n options: BuildOptions;\n sharedConfig: SharedConfigOptions;\n}\n\nfunction parseBuildCommand(args: string[]): ParsedBuildCommand {\n const patterns: string[] = [];\n const options: BuildOptions = {\n output: \"./dist\",\n format: \"js\",\n scriptExt: \"downcompile\",\n };\n const sharedConfig: SharedConfigOptions = {\n configMode: \"root\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--output\" || arg === \"-o\") {\n options.output = args[++i] ?? options.output;\n } else if (arg === \"--format\" || arg === \"-f\") {\n const format = args[++i];\n if (format === \"js\" || format === \"json\" || format === \"stats\") {\n options.format = format;\n }\n } else if (arg === \"--ssr\") {\n options.ssr = true;\n } else if (arg === \"--vapor\") {\n options.vapor = true;\n } else if (arg === \"--custom-renderer\") {\n options.customRenderer = true;\n } else if (arg === \"--script-ext\") {\n const scriptExt = args[++i];\n if (scriptExt === \"preserve\" || scriptExt === \"downcompile\") {\n options.scriptExt = scriptExt;\n }\n } else if (arg === \"--threads\" || arg === \"-j\") {\n options.threads = Number.parseInt(args[++i], 10);\n } else if (arg === \"--config\" || arg === \"-c\") {\n const configFile = args[++i];\n if (!configFile) {\n throw new Error(\"Missing path after --config\");\n }\n sharedConfig.configFile = configFile;\n } else if (arg === \"--no-config\") {\n sharedConfig.configMode = \"none\";\n } else if (arg === \"--profile\" || arg === \"--continue-on-error\") {\n // Accepted for command compatibility. The npm build path prints a compact summary.\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options, sharedConfig };\n}\n\nfunction getScriptLang(source: string): string {\n const match = source.match(/<script\\b[^>]*\\blang=[\"']([^\"']+)[\"']/i);\n return match?.[1] ?? \"js\";\n}\n\nfunction getOutputExtension(source: string, scriptExt: BuildOptions[\"scriptExt\"]): string {\n if (scriptExt === \"downcompile\") {\n return \"js\";\n }\n const lang = getScriptLang(source);\n return lang === \"ts\" || lang === \"tsx\" || lang === \"jsx\" ? lang : \"js\";\n}\n\nfunction outputFileName(file: string, extension: string): string {\n return path.basename(file).replace(/\\.vue$/i, `.${extension}`);\n}\n\nfunction toNativeBuildOptions(options: BuildOptions): NativeBuildOptions {\n const isTs = options.scriptExt === \"preserve\";\n return {\n ssr: options.ssr,\n vapor: options.vapor,\n customRenderer: options.customRenderer,\n custom_renderer: options.customRenderer,\n isTs,\n is_ts: isTs,\n threads: options.threads,\n };\n}\n\nasync function runBuild(args: string[]): Promise<void> {\n const { patterns, options, sharedConfig } = parseBuildCommand(args);\n if (options.help) {\n printBuildUsage();\n return;\n }\n\n const config = await loadConfig(process.cwd(), {\n mode: sharedConfig.configMode,\n configFile: sharedConfig.configFile,\n env: {\n mode: process.env.NODE_ENV ?? \"development\",\n command: \"build\",\n },\n });\n\n if (sharedConfig.configFile && !config) {\n throw new Error(`Could not find config file: ${sharedConfig.configFile}`);\n }\n\n options.ssr ??= config?.compiler?.ssr;\n options.vapor ??= config?.compiler?.vapor;\n options.customRenderer ??= config?.compiler?.customRenderer;\n if (config?.compiler?.scriptExt === \"ts\") {\n options.scriptExt = \"preserve\";\n } else if (config?.compiler?.scriptExt === \"js\") {\n options.scriptExt = \"downcompile\";\n }\n\n const files = collectVueFiles(patterns);\n if (files.length === 0) {\n process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\\n`);\n process.exit(1);\n }\n\n const native = loadNative(\"build\");\n const startedAt = performance.now();\n\n if (options.format !== \"stats\") {\n mkdirSync(options.output, { recursive: true });\n }\n\n let nativeTimeMs = 0;\n let failed = 0;\n let success = 0;\n\n for (let start = 0; start < files.length; start += BUILD_BATCH_SIZE) {\n const inputs = files.slice(start, start + BUILD_BATCH_SIZE).map((file) => ({\n path: file,\n source: readFileSync(file, \"utf8\"),\n }));\n const sourceByPath = new Map(inputs.map((input) => [input.path, input.source]));\n const chunkStartedAt = performance.now();\n const result = native.compileSfcBatchWithResults(inputs, toNativeBuildOptions(options));\n nativeTimeMs += result.timeMs ?? result.time_ms ?? performance.now() - chunkStartedAt;\n const results = [...result.results].sort((left, right) => left.path.localeCompare(right.path));\n\n for (const fileResult of results) {\n const source = sourceByPath.get(fileResult.path) ?? \"\";\n for (const warning of fileResult.warnings) {\n process.stderr.write(`warning: ${displayPath(fileResult.path)} ${warning}\\n`);\n }\n for (const error of fileResult.errors) {\n process.stderr.write(`error: ${displayPath(fileResult.path)} ${error}\\n`);\n }\n\n if (fileResult.errors.length > 0 || options.format === \"stats\") {\n continue;\n }\n\n const extension =\n options.format === \"json\" ? \"json\" : getOutputExtension(source, options.scriptExt);\n const outputPath = path.join(options.output, outputFileName(fileResult.path, extension));\n const content =\n options.format === \"json\" ? JSON.stringify(fileResult, null, 2) : fileResult.code;\n writeFileSync(outputPath, content);\n }\n\n const chunkFailed =\n result.failedCount ?? result.failed_count ?? results.filter((r) => r.errors.length).length;\n failed += chunkFailed;\n success += result.successCount ?? result.success_count ?? results.length - chunkFailed;\n }\n\n const timeMs = nativeTimeMs || performance.now() - startedAt;\n process.stderr.write(\n `\\x1b[32mOK\\x1b[0m Built ${success} Vue file(s) in ${timeMs.toFixed(2)}ms\\n`,\n );\n\n if (failed > 0) {\n process.stderr.write(`\\x1b[31mERR\\x1b[0m ${failed} file(s) failed\\n`);\n process.exit(1);\n }\n}\n\n// ============================================================================\n// Format command\n// ============================================================================\n\ninterface NativeFormatOptions {\n printWidth?: number;\n print_width?: number;\n tabWidth?: number;\n tab_width?: number;\n useTabs?: boolean;\n use_tabs?: boolean;\n semi?: boolean;\n singleQuote?: boolean;\n single_quote?: boolean;\n sortAttributes?: boolean;\n sort_attributes?: boolean;\n singleAttributePerLine?: boolean;\n single_attribute_per_line?: boolean;\n maxAttributesPerLine?: number;\n max_attributes_per_line?: number;\n normalizeDirectiveShorthands?: boolean;\n normalize_directive_shorthands?: boolean;\n}\n\ninterface FormatResult {\n code: string;\n changed: boolean;\n}\n\ninterface FmtOptions extends NativeFormatOptions {\n check?: boolean;\n write?: boolean;\n help?: boolean;\n}\n\ninterface ParsedFmtCommand {\n patterns: string[];\n options: FmtOptions;\n sharedConfig: SharedConfigOptions;\n}\n\nfunction parseFmtCommand(args: string[]): ParsedFmtCommand {\n const patterns: string[] = [];\n const options: FmtOptions = {};\n const sharedConfig: SharedConfigOptions = {\n configMode: \"root\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--check\") {\n options.check = true;\n } else if (arg === \"--write\" || arg === \"-w\") {\n options.write = true;\n } else if (arg === \"--single-quote\") {\n options.singleQuote = true;\n } else if (arg === \"--print-width\") {\n options.printWidth = Number.parseInt(args[++i], 10);\n } else if (arg === \"--tab-width\") {\n options.tabWidth = Number.parseInt(args[++i], 10);\n } else if (arg === \"--use-tabs\") {\n options.useTabs = true;\n } else if (arg === \"--no-semi\") {\n options.semi = false;\n } else if (arg === \"--sort-attributes\") {\n options.sortAttributes = true;\n } else if (arg === \"--single-attribute-per-line\") {\n options.singleAttributePerLine = true;\n } else if (arg === \"--max-attributes-per-line\") {\n options.maxAttributesPerLine = Number.parseInt(args[++i], 10);\n } else if (arg === \"--normalize-directive-shorthands\") {\n options.normalizeDirectiveShorthands = true;\n } else if (arg === \"--config\" || arg === \"-c\") {\n const configFile = args[++i];\n if (!configFile) {\n throw new Error(\"Missing path after --config\");\n }\n sharedConfig.configFile = configFile;\n } else if (arg === \"--no-config\") {\n sharedConfig.configMode = \"none\";\n } else if (arg === \"--profile\") {\n // Accepted for command compatibility. The npm fmt path prints a compact summary.\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options, sharedConfig };\n}\n\nfunction toNativeFormatOptions(options: FmtOptions): NativeFormatOptions {\n return {\n printWidth: options.printWidth,\n print_width: options.printWidth,\n tabWidth: options.tabWidth,\n tab_width: options.tabWidth,\n useTabs: options.useTabs,\n use_tabs: options.useTabs,\n semi: options.semi,\n singleQuote: options.singleQuote,\n single_quote: options.singleQuote,\n sortAttributes: options.sortAttributes,\n sort_attributes: options.sortAttributes,\n singleAttributePerLine: options.singleAttributePerLine,\n single_attribute_per_line: options.singleAttributePerLine,\n maxAttributesPerLine: options.maxAttributesPerLine,\n max_attributes_per_line: options.maxAttributesPerLine,\n normalizeDirectiveShorthands: options.normalizeDirectiveShorthands,\n normalize_directive_shorthands: options.normalizeDirectiveShorthands,\n };\n}\n\nasync function runFmt(args: string[]): Promise<void> {\n const { patterns, options, sharedConfig } = parseFmtCommand(args);\n if (options.help) {\n printFmtUsage();\n return;\n }\n\n const config = await loadConfig(process.cwd(), {\n mode: sharedConfig.configMode,\n configFile: sharedConfig.configFile,\n env: {\n mode: process.env.NODE_ENV ?? \"development\",\n command: \"fmt\",\n },\n });\n\n if (sharedConfig.configFile && !config) {\n throw new Error(`Could not find config file: ${sharedConfig.configFile}`);\n }\n\n options.printWidth ??= config?.formatter?.printWidth;\n options.tabWidth ??= config?.formatter?.tabWidth;\n options.useTabs ??= config?.formatter?.useTabs;\n options.semi ??= config?.formatter?.semi;\n options.singleQuote ??= config?.formatter?.singleQuote;\n\n const files = collectVueFiles(patterns);\n if (files.length === 0) {\n process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\\n`);\n return;\n }\n\n const native = loadNative(\"fmt\");\n let changed = 0;\n let errored = 0;\n\n for (const file of files) {\n const source = readFileSync(file, \"utf8\");\n try {\n const result = native.formatSfc(source, toNativeFormatOptions(options));\n if (!result.changed) {\n continue;\n }\n changed++;\n if (options.check) {\n process.stderr.write(`Would reformat: ${displayPath(file)}\\n`);\n } else if (options.write) {\n writeFileSync(file, result.code);\n process.stderr.write(`Reformatted: ${displayPath(file)}\\n`);\n } else {\n process.stderr.write(`Would reformat: ${displayPath(file)}\\n`);\n }\n } catch (error) {\n errored++;\n process.stderr.write(\n `Error formatting ${displayPath(file)}: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n }\n }\n\n process.stderr.write(\n `\\x1b[32mOK\\x1b[0m Formatted ${files.length} Vue file(s), ${changed} changed\\n`,\n );\n\n if (errored > 0 || (options.check && changed > 0)) {\n process.exit(1);\n }\n}\n\n// ============================================================================\n// Check command\n// ============================================================================\n\ninterface NativeTypeCheckOptions {\n filename?: string;\n strict?: boolean;\n includeVirtualTs?: boolean;\n include_virtual_ts?: boolean;\n checkProps?: boolean;\n check_props?: boolean;\n checkEmits?: boolean;\n check_emits?: boolean;\n checkTemplateBindings?: boolean;\n check_template_bindings?: boolean;\n checkReactivity?: boolean;\n check_reactivity?: boolean;\n checkSetupContext?: boolean;\n check_setup_context?: boolean;\n checkInvalidExports?: boolean;\n check_invalid_exports?: boolean;\n checkFallthroughAttrs?: boolean;\n check_fallthrough_attrs?: boolean;\n}\n\ninterface NativeDeclarationOptions {\n filename?: string;\n}\n\ninterface DeclarationResult {\n code: string;\n}\n\ninterface TypeDiagnostic {\n severity: string;\n message: string;\n start: number;\n end: number;\n code?: string;\n help?: string;\n related?: Array<{\n message: string;\n start: number;\n end: number;\n filename?: string;\n }>;\n}\n\ninterface TypeCheckResult {\n diagnostics: TypeDiagnostic[];\n virtualTs?: string;\n errorCount: number;\n warningCount: number;\n analysisTimeMs?: number;\n}\n\ninterface CheckOptions {\n format?: string;\n quiet?: boolean;\n strict?: boolean;\n includeVirtualTs?: boolean;\n maxWarnings?: number;\n checkProps?: boolean;\n checkEmits?: boolean;\n checkTemplateBindings?: boolean;\n checkReactivity?: boolean;\n checkSetupContext?: boolean;\n checkInvalidExports?: boolean;\n checkFallthroughAttrs?: boolean;\n declaration?: boolean;\n declarationDir?: string;\n help?: boolean;\n}\n\ninterface ParsedCheckCommand {\n patterns: string[];\n options: CheckOptions;\n sharedConfig: SharedConfigOptions;\n}\n\ninterface CheckedFileResult {\n file: string;\n source: string;\n result: TypeCheckResult;\n}\n\ninterface EmittedDeclaration {\n file: string;\n path: string;\n}\n\nfunction parseCheckCommand(args: string[]): ParsedCheckCommand {\n const patterns: string[] = [];\n const options: CheckOptions = {};\n const sharedConfig: SharedConfigOptions = {\n configMode: \"root\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--format\" || arg === \"-f\") {\n options.format = args[++i];\n } else if (arg === \"--quiet\" || arg === \"-q\") {\n options.quiet = true;\n } else if (arg === \"--strict\") {\n options.strict = true;\n } else if (arg === \"--no-strict\") {\n options.strict = false;\n } else if (arg === \"--show-virtual-ts\" || arg === \"--include-virtual-ts\") {\n options.includeVirtualTs = true;\n } else if (arg === \"--max-warnings\") {\n options.maxWarnings = Number.parseInt(args[++i], 10);\n } else if (arg === \"--no-check-props\") {\n options.checkProps = false;\n } else if (arg === \"--no-check-emits\") {\n options.checkEmits = false;\n } else if (arg === \"--no-check-template-bindings\") {\n options.checkTemplateBindings = false;\n } else if (arg === \"--no-check-reactivity\") {\n options.checkReactivity = false;\n } else if (arg === \"--no-check-setup-context\") {\n options.checkSetupContext = false;\n } else if (arg === \"--no-check-invalid-exports\") {\n options.checkInvalidExports = false;\n } else if (arg === \"--no-check-fallthrough-attrs\") {\n options.checkFallthroughAttrs = false;\n } else if (arg === \"--declaration\") {\n options.declaration = true;\n } else if (arg === \"--declaration-dir\") {\n const declarationDir = args[++i];\n if (!declarationDir) {\n throw new Error(\"Missing path after --declaration-dir\");\n }\n options.declarationDir = declarationDir;\n } else if (arg === \"--config\" || arg === \"-c\") {\n const configFile = args[++i];\n if (!configFile) {\n throw new Error(\"Missing path after --config\");\n }\n sharedConfig.configFile = configFile;\n } else if (arg === \"--no-config\") {\n sharedConfig.configMode = \"none\";\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n } else if (arg === \"--tsconfig\" || arg === \"--corsa-path\" || arg === \"--servers\") {\n i++;\n } else if (arg === \"--socket\" || arg === \"-s\") {\n i++;\n } else if (arg === \"--profile\") {\n // Accepted for package-script compatibility with the Rust CLI.\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options, sharedConfig };\n}\n\nfunction hasGlobSyntax(pattern: string): boolean {\n return pattern.includes(\"*\") || pattern.includes(\"?\") || pattern.includes(\"[\");\n}\n\nfunction normalizePath(filePath: string): string {\n return filePath.split(path.sep).join(\"/\");\n}\n\nfunction displayPath(filePath: string): string {\n const relative = path.relative(process.cwd(), filePath);\n if (relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative)) {\n return normalizePath(relative);\n }\n return normalizePath(filePath);\n}\n\nfunction isVueFile(filePath: string): boolean {\n return path.extname(filePath) === \".vue\";\n}\n\nfunction collectVueFilesFromDirectory(directory: string, recursive: boolean): string[] {\n const files: string[] = [];\n const entries = readdirSync(directory, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(directory, entry.name);\n if (entry.isDirectory()) {\n if (SKIPPED_VUE_FILE_DIRECTORIES.has(entry.name)) {\n continue;\n }\n if (recursive) {\n files.push(...collectVueFilesFromDirectory(entryPath, true));\n }\n } else if (entry.isFile() && isVueFile(entryPath)) {\n files.push(entryPath);\n }\n }\n\n return files;\n}\n\nfunction globBase(pattern: string): string {\n const normalized = normalizePath(pattern);\n const globIndex = normalized.search(/[*?[]/);\n if (globIndex === -1) {\n return normalized;\n }\n\n const beforeGlob = normalized.slice(0, globIndex);\n const slashIndex = beforeGlob.lastIndexOf(\"/\");\n if (slashIndex === -1) {\n return \".\";\n }\n return beforeGlob.slice(0, slashIndex) || \"/\";\n}\n\nfunction globToRegExp(pattern: string): RegExp {\n const normalized = normalizePath(pattern);\n let source = \"\";\n\n for (let i = 0; i < normalized.length; i++) {\n const char = normalized[i];\n const next = normalized[i + 1];\n const afterNext = normalized[i + 2];\n\n if (char === \"*\" && next === \"*\" && afterNext === \"/\") {\n source += \"(?:.*/)?\";\n i += 2;\n } else if (char === \"*\" && next === \"*\") {\n source += \".*\";\n i++;\n } else if (char === \"*\") {\n source += \"[^/]*\";\n } else if (char === \"?\") {\n source += \"[^/]\";\n } else if (\"\\\\^$+?.()|{}[]\".includes(char)) {\n source += `\\\\${char}`;\n } else {\n source += char;\n }\n }\n\n return new RegExp(`^${source}$`);\n}\n\nfunction shouldRecurseGlob(pattern: string, base: string): boolean {\n const normalizedPattern = normalizePath(pattern);\n const normalizedBase = normalizePath(base);\n const rest =\n normalizedBase === \".\"\n ? normalizedPattern\n : normalizedPattern.slice(normalizedBase.length).replace(/^\\/+/, \"\");\n return rest.includes(\"/\");\n}\n\nfunction collectVueFilesFromGlob(pattern: string): string[] {\n const basePattern = globBase(pattern);\n const base = path.resolve(process.cwd(), basePattern);\n if (!existsSync(base)) {\n return [];\n }\n\n const isAbsolutePattern = path.isAbsolute(pattern);\n const normalizedPattern = normalizePath(isAbsolutePattern ? path.resolve(pattern) : pattern);\n const regex = globToRegExp(normalizedPattern);\n const candidates = collectVueFilesFromDirectory(base, shouldRecurseGlob(pattern, basePattern));\n\n return candidates.filter((file) => {\n const comparable = isAbsolutePattern\n ? normalizePath(file)\n : normalizePath(path.relative(process.cwd(), file));\n return regex.test(comparable);\n });\n}\n\nfunction collectVueFiles(patterns: string[]): string[] {\n const files = new Set<string>();\n const inputs = patterns.length === 0 ? [\".\"] : patterns;\n\n for (const input of inputs) {\n if (hasGlobSyntax(input)) {\n for (const file of collectVueFilesFromGlob(input)) {\n files.add(path.resolve(file));\n }\n continue;\n }\n\n const resolved = path.resolve(process.cwd(), input);\n if (!existsSync(resolved)) {\n continue;\n }\n\n const stats = statSync(resolved);\n if (stats.isDirectory()) {\n for (const file of collectVueFilesFromDirectory(resolved, true)) {\n files.add(path.resolve(file));\n }\n } else if (stats.isFile() && isVueFile(resolved)) {\n files.add(resolved);\n }\n }\n\n return Array.from(files).sort();\n}\n\nfunction commonSourceDirectory(results: CheckedFileResult[]): string {\n let common = path.dirname(results[0]?.file ?? process.cwd());\n\n for (let i = 1; i < results.length; i++) {\n const directory = path.dirname(results[i].file);\n while (common !== path.dirname(common)) {\n const relative = path.relative(common, directory);\n if (relative !== \"..\" && !relative.startsWith(`..${path.sep}`)) {\n break;\n }\n common = path.dirname(common);\n }\n }\n\n return common;\n}\n\nfunction emitCheckDeclarations(\n results: CheckedFileResult[],\n native: NativeBinding,\n options: CheckOptions,\n): EmittedDeclaration[] {\n if (!options.declaration) {\n return [];\n }\n\n if (typeof native.generateDeclaration !== \"function\") {\n throw new Error(\"The loaded native binding does not support declaration generation.\");\n }\n\n const outDir = path.resolve(process.cwd(), options.declarationDir ?? \"dist/types\");\n const sourceRoot = commonSourceDirectory(results);\n const declarations: EmittedDeclaration[] = [];\n\n for (const { file, source } of results) {\n const relative = normalizePath(path.relative(sourceRoot, file));\n const outputPath = path.join(outDir, `${relative}.d.ts`);\n mkdirSync(path.dirname(outputPath), { recursive: true });\n\n const declaration = native.generateDeclaration(source, { filename: file });\n writeFileSync(outputPath, declaration.code);\n declarations.push({\n file: displayPath(outputPath),\n path: outputPath,\n });\n }\n\n return declarations;\n}\n\nfunction lineStarts(source: string): number[] {\n const starts = [0];\n for (let i = 0; i < source.length; i++) {\n if (source.charCodeAt(i) === 10) {\n starts.push(i + 1);\n }\n }\n return starts;\n}\n\nfunction offsetToLineColumn(starts: number[], offset: number): { line: number; column: number } {\n let low = 0;\n let high = starts.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n if (starts[mid] <= offset) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n const lineIndex = Math.max(0, high);\n return {\n line: lineIndex + 1,\n column: offset - starts[lineIndex] + 1,\n };\n}\n\nfunction toNativeTypeCheckOptions(file: string, options: CheckOptions): NativeTypeCheckOptions {\n return {\n filename: file,\n strict: options.strict,\n includeVirtualTs: options.includeVirtualTs,\n include_virtual_ts: options.includeVirtualTs,\n checkProps: options.checkProps,\n check_props: options.checkProps,\n checkEmits: options.checkEmits,\n check_emits: options.checkEmits,\n checkTemplateBindings: options.checkTemplateBindings,\n check_template_bindings: options.checkTemplateBindings,\n checkReactivity: options.checkReactivity,\n check_reactivity: options.checkReactivity,\n checkSetupContext: options.checkSetupContext,\n check_setup_context: options.checkSetupContext,\n checkInvalidExports: options.checkInvalidExports,\n check_invalid_exports: options.checkInvalidExports,\n checkFallthroughAttrs: options.checkFallthroughAttrs,\n check_fallthrough_attrs: options.checkFallthroughAttrs,\n };\n}\n\nfunction renderCheckText(\n results: CheckedFileResult[],\n options: CheckOptions,\n timeMs: number,\n declarations: EmittedDeclaration[] = [],\n): void {\n let totalErrors = 0;\n let totalWarnings = 0;\n\n for (const { file, source, result } of results) {\n totalErrors += result.errorCount;\n totalWarnings += result.warningCount;\n\n if (options.includeVirtualTs && result.virtualTs) {\n process.stderr.write(`\\n=== ${displayPath(file)} ===\\n${result.virtualTs}\\n`);\n }\n\n if (options.quiet || result.diagnostics.length === 0) {\n continue;\n }\n\n const starts = lineStarts(source);\n process.stdout.write(`\\n\\x1b[4m${displayPath(file)}\\x1b[0m\\n`);\n for (const diagnostic of result.diagnostics) {\n const color = diagnostic.severity === \"error\" ? \"\\x1b[31m\" : \"\\x1b[33m\";\n const location = offsetToLineColumn(starts, diagnostic.start);\n const code = diagnostic.code ? ` [${diagnostic.code}]` : \"\";\n process.stdout.write(\n ` ${color}${diagnostic.severity}:${location.line}:${location.column}\\x1b[0m${code} ${diagnostic.message}\\n`,\n );\n if (diagnostic.help) {\n process.stdout.write(` help: ${diagnostic.help}\\n`);\n }\n }\n }\n\n const status = totalErrors > 0 ? \"\\x1b[31mERR\\x1b[0m\" : \"\\x1b[32mOK\\x1b[0m\";\n process.stdout.write(\n `\\n${status} Type checked ${results.length} Vue files in ${timeMs.toFixed(2)}ms\\n`,\n );\n if (totalErrors > 0) {\n process.stdout.write(` \\x1b[31m${totalErrors} error(s)\\x1b[0m\\n`);\n } else {\n process.stdout.write(\" \\x1b[32mNo type errors found!\\x1b[0m\\n\");\n }\n if (totalWarnings > 0) {\n process.stdout.write(` \\x1b[33m${totalWarnings} warning(s)\\x1b[0m\\n`);\n }\n if (declarations.length > 0) {\n process.stdout.write(` \\x1b[32mEmitted ${declarations.length} declaration file(s)\\x1b[0m\\n`);\n }\n}\n\nasync function runCheck(args: string[]): Promise<void> {\n const { patterns, options, sharedConfig } = parseCheckCommand(args);\n if (options.help) {\n printCheckUsage();\n return;\n }\n\n const config = await loadConfig(process.cwd(), {\n mode: sharedConfig.configMode,\n configFile: sharedConfig.configFile,\n env: {\n mode: process.env.NODE_ENV ?? \"development\",\n command: \"check\",\n },\n });\n\n if (sharedConfig.configFile && !config) {\n throw new Error(`Could not find config file: ${sharedConfig.configFile}`);\n }\n\n if (config?.typeChecker?.enabled === false) {\n process.stderr.write(\n \"[vize] Skipping check because typeChecker.enabled is false in vize.config.\\n\",\n );\n return;\n }\n\n options.strict ??= config?.typeChecker?.strict;\n options.checkProps ??= config?.typeChecker?.checkProps;\n options.checkEmits ??= config?.typeChecker?.checkEmits;\n options.checkTemplateBindings ??= config?.typeChecker?.checkTemplateBindings;\n\n const files = collectVueFiles(patterns);\n if (files.length === 0) {\n process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\\n`);\n return;\n }\n\n const native = loadNative(\"check\");\n const start = performance.now();\n const results = files.map((file) => {\n const source = readFileSync(file, \"utf8\");\n return {\n file,\n source,\n result: native.typeCheck(source, toNativeTypeCheckOptions(file, options)),\n };\n });\n const timeMs = performance.now() - start;\n const declarations = emitCheckDeclarations(results, native, options);\n const totalErrors = results.reduce((sum, { result }) => sum + result.errorCount, 0);\n const totalWarnings = results.reduce((sum, { result }) => sum + result.warningCount, 0);\n\n if (options.format === \"json\") {\n process.stdout.write(\n `${JSON.stringify(\n {\n files: results.map(({ file, result }) => ({\n file: displayPath(file),\n diagnostics: result.diagnostics,\n virtualTs: result.virtualTs,\n })),\n errorCount: totalErrors,\n warningCount: totalWarnings,\n fileCount: results.length,\n declarations: declarations.map(({ file }) => file),\n },\n null,\n 2,\n )}\\n`,\n );\n } else {\n renderCheckText(results, options, timeMs, declarations);\n }\n\n if (totalErrors > 0) {\n process.exit(1);\n }\n\n if (options.maxWarnings !== undefined && totalWarnings > options.maxWarnings) {\n process.stderr.write(`\\nToo many warnings (${totalWarnings} > max ${options.maxWarnings})\\n`);\n process.exit(1);\n }\n}\n\nasync function runLint(args: string[]): Promise<void> {\n const { patterns, options, sharedConfig } = parseLintCommand(args);\n const config = await loadConfig(process.cwd(), {\n mode: sharedConfig.configMode,\n configFile: sharedConfig.configFile,\n env: {\n mode: process.env.NODE_ENV ?? \"development\",\n command: \"lint\",\n },\n });\n\n if (sharedConfig.configFile && !config) {\n throw new Error(`Could not find config file: ${sharedConfig.configFile}`);\n }\n\n if (config?.linter?.enabled === false) {\n process.stderr.write(\"[vize] Skipping lint because linter.enabled is false in vize.config.\\n\");\n return;\n }\n\n options.preset ??= config?.linter?.preset;\n\n if (patterns.length === 0) {\n patterns.push(\".\");\n }\n\n const native = loadNative(\"lint\");\n const result = native.lint(patterns, {\n format: options.format,\n max_warnings: options.maxWarnings,\n quiet: options.quiet,\n fix: options.fix,\n help_level: options.helpLevel,\n preset: options.preset,\n });\n\n if (result.output) {\n process.stdout.write(result.output);\n if (!result.output.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n }\n\n if (options.fix) {\n process.stderr.write(\"\\nNote: --fix is not yet implemented\\n\");\n }\n\n if (result.errorCount > 0) {\n process.exit(1);\n }\n\n if (options.maxWarnings !== undefined && result.warningCount > options.maxWarnings) {\n process.stderr.write(\n `\\nToo many warnings (${result.warningCount} > max ${options.maxWarnings})\\n`,\n );\n process.exit(1);\n }\n}\n\n// ============================================================================\n// Upgrade command\n// ============================================================================\n\ntype PackageManager = \"bun\" | \"npm\" | \"pnpm\" | \"vp\" | \"yarn\";\n\ninterface UpgradeOptions {\n packageManager?: PackageManager;\n global?: boolean;\n dryRun?: boolean;\n help?: boolean;\n}\n\nfunction parseUpgradeCommand(args: string[]): UpgradeOptions {\n const options: UpgradeOptions = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--package-manager\") {\n const packageManager = args[++i];\n if (\n packageManager === \"bun\" ||\n packageManager === \"npm\" ||\n packageManager === \"pnpm\" ||\n packageManager === \"vp\" ||\n packageManager === \"yarn\"\n ) {\n options.packageManager = packageManager;\n }\n } else if (arg === \"--global\" || arg === \"-g\") {\n options.global = true;\n } else if (arg === \"--dry-run\") {\n options.dryRun = true;\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n }\n }\n\n return options;\n}\n\nfunction readCwdPackageJson(): {\n packageManager?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n} | null {\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (!existsSync(packageJsonPath)) {\n return null;\n }\n return JSON.parse(readFileSync(packageJsonPath, \"utf8\"));\n}\n\nfunction detectPackageManager(explicit?: PackageManager): PackageManager {\n if (explicit) {\n return explicit;\n }\n\n const userAgent = process.env.npm_config_user_agent ?? \"\";\n if (userAgent.startsWith(\"pnpm\")) {\n return \"pnpm\";\n }\n if (userAgent.startsWith(\"yarn\")) {\n return \"yarn\";\n }\n if (userAgent.startsWith(\"bun\")) {\n return \"bun\";\n }\n if (userAgent.startsWith(\"npm\")) {\n return \"npm\";\n }\n\n const packageManager = readCwdPackageJson()?.packageManager;\n if (packageManager?.startsWith(\"pnpm\")) {\n return \"pnpm\";\n }\n if (packageManager?.startsWith(\"yarn\")) {\n return \"yarn\";\n }\n if (packageManager?.startsWith(\"bun\")) {\n return \"bun\";\n }\n return \"npm\";\n}\n\nfunction buildUpgradeCommand(\n packageManager: PackageManager,\n options: UpgradeOptions,\n): { command: string; args: string[] } {\n const packageJson = readCwdPackageJson();\n const saveDev = !packageJson?.dependencies?.vize;\n const packageSpec = \"vize@latest\";\n\n if (packageManager === \"vp\") {\n return {\n command: \"vp\",\n args: [\"install\", ...(options.global ? [\"-g\"] : saveDev ? [\"-D\"] : []), packageSpec],\n };\n }\n if (packageManager === \"pnpm\") {\n return {\n command: \"pnpm\",\n args: [\"add\", ...(options.global ? [\"-g\"] : saveDev ? [\"-D\"] : []), packageSpec],\n };\n }\n if (packageManager === \"yarn\") {\n return {\n command: \"yarn\",\n args: options.global\n ? [\"global\", \"add\", packageSpec]\n : [\"add\", ...(saveDev ? [\"-D\"] : []), packageSpec],\n };\n }\n if (packageManager === \"bun\") {\n return {\n command: \"bun\",\n args: [\"add\", ...(options.global ? [\"-g\"] : saveDev ? [\"-d\"] : []), packageSpec],\n };\n }\n return {\n command: \"npm\",\n args: [\"install\", ...(options.global ? [\"-g\"] : saveDev ? [\"-D\"] : []), packageSpec],\n };\n}\n\nfunction runUpgrade(args: string[]): void {\n const options = parseUpgradeCommand(args);\n if (options.help) {\n printUpgradeUsage();\n return;\n }\n\n const packageManager = detectPackageManager(options.packageManager);\n const command = buildUpgradeCommand(packageManager, options);\n\n if (options.dryRun) {\n process.stdout.write(`${command.command} ${command.args.join(\" \")}\\n`);\n return;\n }\n\n const result = spawnSync(command.command, command.args, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n env: process.env,\n });\n\n if (result.error) {\n throw result.error;\n }\n\n process.exit(result.status ?? 1);\n}\n\n// ============================================================================\n// Ready command\n// ============================================================================\n\ninterface ReadyOptions {\n output: string;\n ssr?: boolean;\n scriptExt: \"preserve\" | \"downcompile\";\n help?: boolean;\n}\n\ninterface ParsedReadyCommand {\n patterns: string[];\n options: ReadyOptions;\n}\n\nfunction parseReadyCommand(args: string[]): ParsedReadyCommand {\n const patterns: string[] = [];\n const options: ReadyOptions = {\n output: \"./dist\",\n scriptExt: \"downcompile\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--output\" || arg === \"-o\") {\n options.output = args[++i] ?? options.output;\n } else if (arg === \"--ssr\") {\n options.ssr = true;\n } else if (arg === \"--script-ext\") {\n const scriptExt = args[++i];\n if (scriptExt === \"preserve\" || scriptExt === \"downcompile\") {\n options.scriptExt = scriptExt;\n }\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options };\n}\n\nasync function runReady(args: string[]): Promise<void> {\n const { patterns, options } = parseReadyCommand(args);\n if (options.help) {\n printReadyUsage();\n return;\n }\n\n process.stderr.write(\"vize ready: fmt\\n\");\n await runFmt([\"--write\", ...patterns]);\n\n process.stderr.write(\"vize ready: lint\\n\");\n await runLint(patterns);\n\n process.stderr.write(\"vize ready: check\\n\");\n await runCheck(patterns);\n\n process.stderr.write(\"vize ready: build\\n\");\n await runBuild([\n \"--output\",\n options.output,\n \"--script-ext\",\n options.scriptExt,\n ...(options.ssr ? [\"--ssr\"] : []),\n ...patterns,\n ]);\n}\n\n// ============================================================================\n// Command router\n// ============================================================================\n\nconst NAPI_COMMANDS = new Set([\"build\", \"check\", \"fmt\", \"lint\"]);\nconst JS_COMMANDS = new Set([\"musea\", \"ready\", \"upgrade\"]);\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (!command || command === \"--help\" || command === \"-h\") {\n printUsage();\n process.exit(1);\n }\n\n if (NAPI_COMMANDS.has(command)) {\n const commandArgs = args.slice(1);\n switch (command) {\n case \"build\":\n await runBuild(commandArgs);\n break;\n case \"check\":\n await runCheck(commandArgs);\n break;\n case \"fmt\":\n await runFmt(commandArgs);\n break;\n case \"lint\":\n await runLint(commandArgs);\n break;\n }\n } else if (JS_COMMANDS.has(command)) {\n const commandArgs = args.slice(1);\n switch (command) {\n case \"musea\":\n runMusea(commandArgs);\n break;\n case \"ready\":\n await runReady(commandArgs);\n break;\n case \"upgrade\":\n runUpgrade(commandArgs);\n break;\n }\n } else {\n printUsage();\n console.error(`Unknown command: ${command}`);\n console.error(\n \"For commands not yet available via NAPI, install from source: cargo install vize\",\n );\n process.exit(1);\n }\n}\n\nif (!import.meta.vitest) {\n void main().catch((error) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n });\n}\n\nif (import.meta.vitest) {\n const { describe, expect, it } = import.meta.vitest;\n\n describe(\"shouldPreferWorkspaceBinding\", () => {\n it(\"detects the local workspace native package\", () => {\n expect(\n shouldPreferWorkspaceBinding(\n `${path.sep}Users${path.sep}example${path.sep}repo${path.sep}npm${path.sep}vize-native${path.sep}index.js`,\n ),\n ).toBe(true);\n });\n\n it(\"ignores published platform packages\", () => {\n expect(\n shouldPreferWorkspaceBinding(\n `${path.sep}repo${path.sep}node_modules${path.sep}.pnpm${path.sep}@vizejs+native-darwin-arm64${path.sep}node_modules${path.sep}@vizejs${path.sep}native-darwin-arm64${path.sep}index.js`,\n ),\n ).toBe(false);\n });\n\n it(\"returns false when the fallback package cannot be resolved\", () => {\n expect(shouldPreferWorkspaceBinding(null)).toBe(false);\n });\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\nimport * as path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport { loadConfig } from \"./config.js\";\n\nconst require = createRequire(import.meta.url);\nconst WORKSPACE_BINDING_PATH = \"../../vize-native\";\nconst BUILD_BATCH_SIZE = 128;\nconst SKIPPED_VUE_FILE_DIRECTORIES = new Set([\n \"node_modules\",\n \"dist\",\n \".git\",\n \".nuxt\",\n \".output\",\n \".nitro\",\n \"coverage\",\n]);\n\n// ============================================================================\n// Native binding loader (oxlint pattern)\n// ============================================================================\n\nfunction isMusl(): boolean {\n const report = process.report?.getReport();\n if (typeof report === \"object\" && report !== null && \"header\" in report) {\n const header = (report as { header: { glibcVersionRuntime?: string } }).header;\n return !header.glibcVersionRuntime;\n }\n try {\n const lddPath = require(\"child_process\").execSync(\"which ldd\").toString().trim();\n return readFileSync(lddPath, \"utf8\").includes(\"musl\");\n } catch {\n return true;\n }\n}\n\nfunction getBindingPackageName(): string {\n const { platform, arch } = process;\n\n switch (platform) {\n case \"darwin\":\n switch (arch) {\n case \"x64\":\n return \"@vizejs/native-darwin-x64\";\n case \"arm64\":\n return \"@vizejs/native-darwin-arm64\";\n default:\n throw new Error(`Unsupported architecture on macOS: ${arch}`);\n }\n case \"win32\":\n switch (arch) {\n case \"x64\":\n return \"@vizejs/native-win32-x64-msvc\";\n case \"arm64\":\n return \"@vizejs/native-win32-arm64-msvc\";\n default:\n throw new Error(`Unsupported architecture on Windows: ${arch}`);\n }\n case \"linux\":\n switch (arch) {\n case \"x64\":\n return isMusl() ? \"@vizejs/native-linux-x64-musl\" : \"@vizejs/native-linux-x64-gnu\";\n case \"arm64\":\n return isMusl() ? \"@vizejs/native-linux-arm64-musl\" : \"@vizejs/native-linux-arm64-gnu\";\n default:\n throw new Error(`Unsupported architecture on Linux: ${arch}`);\n }\n default:\n throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`);\n }\n}\n\ninterface NativeBinding {\n compileSfcBatchWithResults: (\n files: BatchFileInput[],\n options?: NativeBuildOptions,\n ) => BatchCompileResult;\n formatSfc: (source: string, options?: NativeFormatOptions) => FormatResult;\n typeCheck: (source: string, options?: NativeTypeCheckOptions) => TypeCheckResult;\n generateDeclaration?: (source: string, options?: NativeDeclarationOptions) => DeclarationResult;\n lint: (\n patterns: string[],\n options?: {\n format?: string;\n max_warnings?: number;\n quiet?: boolean;\n fix?: boolean;\n help_level?: string;\n preset?: string;\n },\n ) => LintResult;\n}\n\ntype NativeCommand = \"build\" | \"check\" | \"fmt\" | \"lint\";\n\nconst REQUIRED_BINDINGS: Record<NativeCommand, keyof NativeBinding> = {\n build: \"compileSfcBatchWithResults\",\n check: \"typeCheck\",\n fmt: \"formatSfc\",\n lint: \"lint\",\n};\n\nfunction loadNative(command: NativeCommand): NativeBinding {\n const attemptedPackages = getAttemptedPackages();\n let lastError: unknown = null;\n const requiredBinding = REQUIRED_BINDINGS[command];\n\n for (const packageName of attemptedPackages) {\n try {\n const binding = require(packageName) as Partial<NativeBinding>;\n if (typeof binding[requiredBinding] !== \"function\") {\n throw new Error(`${packageName} does not expose the ${command} binding.`);\n }\n return binding as NativeBinding;\n } catch (error) {\n lastError = error;\n }\n }\n\n console.error(`Failed to load native binding. Tried: ${attemptedPackages.join(\", \")}`);\n console.error(\"Try reinstalling: npm install vize\");\n throw lastError instanceof Error ? lastError : new Error(\"Failed to load native binding\");\n}\n\nfunction getAttemptedPackages(): readonly string[] {\n const platformBindingPackage = getBindingPackageName();\n return shouldPreferWorkspaceBinding(resolveWorkspaceBindingPath())\n ? [WORKSPACE_BINDING_PATH, platformBindingPackage]\n : [platformBindingPackage, WORKSPACE_BINDING_PATH];\n}\n\nfunction resolveWorkspaceBindingPath(): string | null {\n try {\n return require.resolve(WORKSPACE_BINDING_PATH);\n } catch {\n return null;\n }\n}\n\nexport function shouldPreferWorkspaceBinding(resolvedPath: string | null): boolean {\n const override = process.env.VIZE_PREFER_WORKSPACE_BINDING;\n if (override === \"1\" || override === \"true\") {\n return true;\n }\n if (override === \"0\" || override === \"false\") {\n return false;\n }\n if (resolvedPath == null) {\n return false;\n }\n\n return resolvedPath.includes(`${path.sep}npm${path.sep}vize-native${path.sep}`);\n}\n\n// ============================================================================\n// Lint command\n// ============================================================================\n\ninterface LintOptions {\n format?: string;\n maxWarnings?: number;\n quiet?: boolean;\n fix?: boolean;\n helpLevel?: string;\n preset?: string;\n}\n\ninterface LintResult {\n output: string;\n errorCount: number;\n warningCount: number;\n fileCount: number;\n timeMs: number;\n}\n\ninterface SharedConfigOptions {\n configFile?: string;\n configMode: \"root\" | \"none\";\n}\n\ninterface ParsedLintCommand {\n patterns: string[];\n options: LintOptions;\n sharedConfig: SharedConfigOptions;\n}\n\nfunction printUsage(): void {\n console.error(\"Usage: vize <command> [options]\");\n console.error(\"Commands: build, fmt, check, lint, upgrade, ready, musea\");\n}\n\nfunction printBuildUsage(): void {\n console.error(\"Usage: vize build [options] [files-or-directories]\");\n console.error(\"Options:\");\n console.error(\" -o, --output <dir> Output directory\");\n console.error(\" -f, --format <js|json|stats> Output format\");\n console.error(\" --ssr Enable SSR compilation\");\n console.error(\" --script-ext <mode> preserve or downcompile\");\n console.error(\" -j, --threads <number> Worker thread count\");\n}\n\nfunction printFmtUsage(): void {\n console.error(\"Usage: vize fmt [options] [files-or-directories]\");\n console.error(\"Options:\");\n console.error(\" --check Exit with an error if files need formatting\");\n console.error(\" -w, --write Write formatted output\");\n console.error(\" --single-quote Use single quotes\");\n console.error(\" --print-width <number> Maximum line width\");\n console.error(\" --tab-width <number> Indentation width\");\n console.error(\" --use-tabs Indent with tabs\");\n console.error(\" --no-semi Omit semicolons\");\n}\n\nfunction printCheckUsage(): void {\n console.error(\"Usage: vize check [options] [files-or-directories]\");\n console.error(\"Options:\");\n console.error(\" -f, --format <text|json> Output format\");\n console.error(\" -q, --quiet Show summary only\");\n console.error(\" --strict Enable strict checks\");\n console.error(\" --show-virtual-ts Print generated Virtual TS\");\n console.error(\" --declaration Emit Vue component .d.ts files\");\n console.error(\" --declaration-dir <dir> Output directory for declarations\");\n console.error(\" --max-warnings <number> Fail when warnings exceed the limit\");\n console.error(\" -c, --config <path> Use a specific vize config file\");\n console.error(\" --no-config Disable config discovery\");\n console.error(\"\");\n console.error(\n \"Note: npm `vize check` uses the packaged NAPI checker. Install the Rust CLI for project-backed Corsa diagnostics.\",\n );\n}\n\nfunction printUpgradeUsage(): void {\n console.error(\"Usage: vize upgrade [options]\");\n console.error(\"Options:\");\n console.error(\" --package-manager <name> npm, pnpm, yarn, bun, or vp\");\n console.error(\" -g, --global Upgrade the global installation\");\n console.error(\" --dry-run Print the command without running it\");\n}\n\nfunction printReadyUsage(): void {\n console.error(\"Usage: vize ready [options] [files-or-directories]\");\n console.error(\"Runs: fmt --write -> lint -> check -> build\");\n console.error(\"Options:\");\n console.error(\" -o, --output <dir> Output directory for build\");\n console.error(\" --ssr Enable SSR compilation for build\");\n console.error(\" --script-ext <mode> preserve or downcompile\");\n}\n\nfunction resolvePackageBinaryFromCwd(packageName: string, binName: string = packageName): string {\n const cwdRequire = createRequire(pathToFileURL(path.join(process.cwd(), \"package.json\")).href);\n const packageJsonPath = cwdRequire.resolve(`${packageName}/package.json`);\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n bin?: string | Record<string, string>;\n };\n\n const bin = typeof packageJson.bin === \"string\" ? packageJson.bin : packageJson.bin?.[binName];\n\n if (!bin) {\n throw new Error(`Could not resolve binary '${binName}' from package '${packageName}'`);\n }\n\n return path.resolve(path.dirname(packageJsonPath), bin);\n}\n\nfunction runMusea(args: string[]): void {\n const isHelp = args.includes(\"--help\") || args.includes(\"-h\");\n if (isHelp) {\n console.error(\"Usage: vize musea [--build] [...vite options]\");\n console.error(\" --build Run `vite build` instead of `vite dev`\");\n return;\n }\n\n const isBuild = args.includes(\"--build\");\n const viteArgs = args.filter((arg) => arg !== \"--build\");\n const viteCommand = isBuild ? \"build\" : \"dev\";\n const viteBin = resolvePackageBinaryFromCwd(\"vite\");\n const result = spawnSync(process.execPath, [viteBin, viteCommand, ...viteArgs], {\n stdio: \"inherit\",\n cwd: process.cwd(),\n env: process.env,\n });\n\n if (result.error) {\n throw result.error;\n }\n\n process.exit(result.status ?? 1);\n}\n\nfunction parseLintCommand(args: string[]): ParsedLintCommand {\n const patterns: string[] = [];\n const options: LintOptions = {};\n const sharedConfig: SharedConfigOptions = {\n configMode: \"root\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--format\" || arg === \"-f\") {\n options.format = args[++i];\n } else if (arg === \"--max-warnings\") {\n options.maxWarnings = Number.parseInt(args[++i], 10);\n } else if (arg === \"--quiet\" || arg === \"-q\") {\n options.quiet = true;\n } else if (arg === \"--fix\") {\n options.fix = true;\n } else if (arg === \"--help-level\") {\n options.helpLevel = args[++i];\n } else if (arg === \"--preset\") {\n options.preset = args[++i];\n } else if (arg === \"--config\" || arg === \"-c\") {\n const configFile = args[++i];\n if (!configFile) {\n throw new Error(\"Missing path after --config\");\n }\n sharedConfig.configFile = configFile;\n } else if (arg === \"--no-config\") {\n sharedConfig.configMode = \"none\";\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options, sharedConfig };\n}\n\n// ============================================================================\n// Build command\n// ============================================================================\n\ninterface NativeBuildOptions {\n ssr?: boolean;\n vapor?: boolean;\n customRenderer?: boolean;\n custom_renderer?: boolean;\n isTs?: boolean;\n is_ts?: boolean;\n threads?: number;\n}\n\ninterface BatchFileInput {\n path: string;\n source: string;\n}\n\ninterface MacroArtifact {\n kind: string;\n name: string;\n source: string;\n content: string;\n moduleCode?: string;\n start: number;\n end: number;\n}\n\ninterface BatchFileResult {\n path: string;\n code: string;\n css?: string;\n errors: string[];\n warnings: string[];\n scopeId?: string;\n scope_id?: string;\n hasScoped?: boolean;\n has_scoped?: boolean;\n macroArtifacts?: MacroArtifact[];\n macro_artifacts?: MacroArtifact[];\n}\n\ninterface BatchCompileResult {\n results: BatchFileResult[];\n successCount?: number;\n success_count?: number;\n failedCount?: number;\n failed_count?: number;\n timeMs?: number;\n time_ms?: number;\n}\n\ninterface BuildOptions {\n output: string;\n format: \"js\" | \"json\" | \"stats\";\n ssr?: boolean;\n vapor?: boolean;\n customRenderer?: boolean;\n scriptExt: \"preserve\" | \"downcompile\";\n threads?: number;\n help?: boolean;\n}\n\ninterface ParsedBuildCommand {\n patterns: string[];\n options: BuildOptions;\n sharedConfig: SharedConfigOptions;\n}\n\nfunction parseBuildCommand(args: string[]): ParsedBuildCommand {\n const patterns: string[] = [];\n const options: BuildOptions = {\n output: \"./dist\",\n format: \"js\",\n scriptExt: \"downcompile\",\n };\n const sharedConfig: SharedConfigOptions = {\n configMode: \"root\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--output\" || arg === \"-o\") {\n options.output = args[++i] ?? options.output;\n } else if (arg === \"--format\" || arg === \"-f\") {\n const format = args[++i];\n if (format === \"js\" || format === \"json\" || format === \"stats\") {\n options.format = format;\n }\n } else if (arg === \"--ssr\") {\n options.ssr = true;\n } else if (arg === \"--vapor\") {\n options.vapor = true;\n } else if (arg === \"--custom-renderer\") {\n options.customRenderer = true;\n } else if (arg === \"--script-ext\") {\n const scriptExt = args[++i];\n if (scriptExt === \"preserve\" || scriptExt === \"downcompile\") {\n options.scriptExt = scriptExt;\n }\n } else if (arg === \"--threads\" || arg === \"-j\") {\n options.threads = Number.parseInt(args[++i], 10);\n } else if (arg === \"--config\" || arg === \"-c\") {\n const configFile = args[++i];\n if (!configFile) {\n throw new Error(\"Missing path after --config\");\n }\n sharedConfig.configFile = configFile;\n } else if (arg === \"--no-config\") {\n sharedConfig.configMode = \"none\";\n } else if (arg === \"--profile\" || arg === \"--continue-on-error\") {\n // Accepted for command compatibility. The npm build path prints a compact summary.\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options, sharedConfig };\n}\n\nfunction getScriptLang(source: string): string {\n const match = source.match(/<script\\b[^>]*\\blang=[\"']([^\"']+)[\"']/i);\n return match?.[1] ?? \"js\";\n}\n\nfunction getOutputExtension(source: string, scriptExt: BuildOptions[\"scriptExt\"]): string {\n if (scriptExt === \"downcompile\") {\n return \"js\";\n }\n const lang = getScriptLang(source);\n return lang === \"ts\" || lang === \"tsx\" || lang === \"jsx\" ? lang : \"js\";\n}\n\nfunction outputFileName(file: string, extension: string): string {\n return path.basename(file).replace(/\\.vue$/i, `.${extension}`);\n}\n\nfunction toNativeBuildOptions(options: BuildOptions): NativeBuildOptions {\n const isTs = options.scriptExt === \"preserve\";\n return {\n ssr: options.ssr,\n vapor: options.vapor,\n customRenderer: options.customRenderer,\n custom_renderer: options.customRenderer,\n isTs,\n is_ts: isTs,\n threads: options.threads,\n };\n}\n\nasync function runBuild(args: string[]): Promise<void> {\n const { patterns, options, sharedConfig } = parseBuildCommand(args);\n if (options.help) {\n printBuildUsage();\n return;\n }\n\n const config = await loadConfig(process.cwd(), {\n mode: sharedConfig.configMode,\n configFile: sharedConfig.configFile,\n env: {\n mode: process.env.NODE_ENV ?? \"development\",\n command: \"build\",\n },\n });\n\n if (sharedConfig.configFile && !config) {\n throw new Error(`Could not find config file: ${sharedConfig.configFile}`);\n }\n\n options.ssr ??= config?.compiler?.ssr;\n options.vapor ??= config?.compiler?.vapor;\n options.customRenderer ??= config?.compiler?.customRenderer;\n if (config?.compiler?.scriptExt === \"ts\") {\n options.scriptExt = \"preserve\";\n } else if (config?.compiler?.scriptExt === \"js\") {\n options.scriptExt = \"downcompile\";\n }\n\n const files = collectVueFiles(patterns);\n if (files.length === 0) {\n process.stderr.write(\n `No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\\n`,\n );\n process.exit(1);\n }\n\n const native = loadNative(\"build\");\n const startedAt = performance.now();\n\n if (options.format !== \"stats\") {\n mkdirSync(options.output, { recursive: true });\n }\n\n let nativeTimeMs = 0;\n let failed = 0;\n let success = 0;\n\n for (let start = 0; start < files.length; start += BUILD_BATCH_SIZE) {\n const inputs = files.slice(start, start + BUILD_BATCH_SIZE).map((file) => ({\n path: file,\n source: readFileSync(file, \"utf8\"),\n }));\n const sourceByPath = new Map(inputs.map((input) => [input.path, input.source]));\n const chunkStartedAt = performance.now();\n const result = native.compileSfcBatchWithResults(inputs, toNativeBuildOptions(options));\n nativeTimeMs += result.timeMs ?? result.time_ms ?? performance.now() - chunkStartedAt;\n const results = [...result.results].sort((left, right) => left.path.localeCompare(right.path));\n\n for (const fileResult of results) {\n const source = sourceByPath.get(fileResult.path) ?? \"\";\n for (const warning of fileResult.warnings) {\n process.stderr.write(\n `warning: ${displayPath(fileResult.path)} ${sanitizeTerminalText(warning)}\\n`,\n );\n }\n for (const error of fileResult.errors) {\n process.stderr.write(\n `error: ${displayPath(fileResult.path)} ${sanitizeTerminalText(error)}\\n`,\n );\n }\n\n if (fileResult.errors.length > 0 || options.format === \"stats\") {\n continue;\n }\n\n const extension =\n options.format === \"json\" ? \"json\" : getOutputExtension(source, options.scriptExt);\n const outputPath = path.join(options.output, outputFileName(fileResult.path, extension));\n const content =\n options.format === \"json\" ? JSON.stringify(fileResult, null, 2) : fileResult.code;\n writeFileSync(outputPath, content);\n }\n\n const chunkFailed =\n result.failedCount ?? result.failed_count ?? results.filter((r) => r.errors.length).length;\n failed += chunkFailed;\n success += result.successCount ?? result.success_count ?? results.length - chunkFailed;\n }\n\n const timeMs = nativeTimeMs || performance.now() - startedAt;\n process.stderr.write(\n `\\x1b[32mOK\\x1b[0m Built ${success} Vue file(s) in ${timeMs.toFixed(2)}ms\\n`,\n );\n\n if (failed > 0) {\n process.stderr.write(`\\x1b[31mERR\\x1b[0m ${failed} file(s) failed\\n`);\n process.exit(1);\n }\n}\n\n// ============================================================================\n// Format command\n// ============================================================================\n\ninterface NativeFormatOptions {\n printWidth?: number;\n print_width?: number;\n tabWidth?: number;\n tab_width?: number;\n useTabs?: boolean;\n use_tabs?: boolean;\n semi?: boolean;\n singleQuote?: boolean;\n single_quote?: boolean;\n sortAttributes?: boolean;\n sort_attributes?: boolean;\n singleAttributePerLine?: boolean;\n single_attribute_per_line?: boolean;\n maxAttributesPerLine?: number;\n max_attributes_per_line?: number;\n normalizeDirectiveShorthands?: boolean;\n normalize_directive_shorthands?: boolean;\n}\n\ninterface FormatResult {\n code: string;\n changed: boolean;\n}\n\ninterface FmtOptions extends NativeFormatOptions {\n check?: boolean;\n write?: boolean;\n help?: boolean;\n}\n\ninterface ParsedFmtCommand {\n patterns: string[];\n options: FmtOptions;\n sharedConfig: SharedConfigOptions;\n}\n\nfunction parseFmtCommand(args: string[]): ParsedFmtCommand {\n const patterns: string[] = [];\n const options: FmtOptions = {};\n const sharedConfig: SharedConfigOptions = {\n configMode: \"root\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--check\") {\n options.check = true;\n } else if (arg === \"--write\" || arg === \"-w\") {\n options.write = true;\n } else if (arg === \"--single-quote\") {\n options.singleQuote = true;\n } else if (arg === \"--print-width\") {\n options.printWidth = Number.parseInt(args[++i], 10);\n } else if (arg === \"--tab-width\") {\n options.tabWidth = Number.parseInt(args[++i], 10);\n } else if (arg === \"--use-tabs\") {\n options.useTabs = true;\n } else if (arg === \"--no-semi\") {\n options.semi = false;\n } else if (arg === \"--sort-attributes\") {\n options.sortAttributes = true;\n } else if (arg === \"--single-attribute-per-line\") {\n options.singleAttributePerLine = true;\n } else if (arg === \"--max-attributes-per-line\") {\n options.maxAttributesPerLine = Number.parseInt(args[++i], 10);\n } else if (arg === \"--normalize-directive-shorthands\") {\n options.normalizeDirectiveShorthands = true;\n } else if (arg === \"--config\" || arg === \"-c\") {\n const configFile = args[++i];\n if (!configFile) {\n throw new Error(\"Missing path after --config\");\n }\n sharedConfig.configFile = configFile;\n } else if (arg === \"--no-config\") {\n sharedConfig.configMode = \"none\";\n } else if (arg === \"--profile\") {\n // Accepted for command compatibility. The npm fmt path prints a compact summary.\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options, sharedConfig };\n}\n\nfunction toNativeFormatOptions(options: FmtOptions): NativeFormatOptions {\n return {\n printWidth: options.printWidth,\n print_width: options.printWidth,\n tabWidth: options.tabWidth,\n tab_width: options.tabWidth,\n useTabs: options.useTabs,\n use_tabs: options.useTabs,\n semi: options.semi,\n singleQuote: options.singleQuote,\n single_quote: options.singleQuote,\n sortAttributes: options.sortAttributes,\n sort_attributes: options.sortAttributes,\n singleAttributePerLine: options.singleAttributePerLine,\n single_attribute_per_line: options.singleAttributePerLine,\n maxAttributesPerLine: options.maxAttributesPerLine,\n max_attributes_per_line: options.maxAttributesPerLine,\n normalizeDirectiveShorthands: options.normalizeDirectiveShorthands,\n normalize_directive_shorthands: options.normalizeDirectiveShorthands,\n };\n}\n\nasync function runFmt(args: string[]): Promise<void> {\n const { patterns, options, sharedConfig } = parseFmtCommand(args);\n if (options.help) {\n printFmtUsage();\n return;\n }\n\n const config = await loadConfig(process.cwd(), {\n mode: sharedConfig.configMode,\n configFile: sharedConfig.configFile,\n env: {\n mode: process.env.NODE_ENV ?? \"development\",\n command: \"fmt\",\n },\n });\n\n if (sharedConfig.configFile && !config) {\n throw new Error(`Could not find config file: ${sharedConfig.configFile}`);\n }\n\n options.printWidth ??= config?.formatter?.printWidth;\n options.tabWidth ??= config?.formatter?.tabWidth;\n options.useTabs ??= config?.formatter?.useTabs;\n options.semi ??= config?.formatter?.semi;\n options.singleQuote ??= config?.formatter?.singleQuote;\n\n const files = collectVueFiles(patterns);\n if (files.length === 0) {\n process.stderr.write(\n `No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\\n`,\n );\n return;\n }\n\n const native = loadNative(\"fmt\");\n let changed = 0;\n let errored = 0;\n\n for (const file of files) {\n const source = readFileSync(file, \"utf8\");\n try {\n const result = native.formatSfc(source, toNativeFormatOptions(options));\n if (!result.changed) {\n continue;\n }\n changed++;\n if (options.check) {\n process.stderr.write(`Would reformat: ${displayPath(file)}\\n`);\n } else if (options.write) {\n writeFileSync(file, result.code);\n process.stderr.write(`Reformatted: ${displayPath(file)}\\n`);\n } else {\n process.stderr.write(`Would reformat: ${displayPath(file)}\\n`);\n }\n } catch (error) {\n errored++;\n process.stderr.write(\n `Error formatting ${displayPath(file)}: ${sanitizeTerminalText(error instanceof Error ? error.message : String(error))}\\n`,\n );\n }\n }\n\n process.stderr.write(\n `\\x1b[32mOK\\x1b[0m Formatted ${files.length} Vue file(s), ${changed} changed\\n`,\n );\n\n if (errored > 0 || (options.check && changed > 0)) {\n process.exit(1);\n }\n}\n\n// ============================================================================\n// Check command\n// ============================================================================\n\ninterface NativeTypeCheckOptions {\n filename?: string;\n strict?: boolean;\n includeVirtualTs?: boolean;\n include_virtual_ts?: boolean;\n checkProps?: boolean;\n check_props?: boolean;\n checkEmits?: boolean;\n check_emits?: boolean;\n checkTemplateBindings?: boolean;\n check_template_bindings?: boolean;\n checkReactivity?: boolean;\n check_reactivity?: boolean;\n checkSetupContext?: boolean;\n check_setup_context?: boolean;\n checkInvalidExports?: boolean;\n check_invalid_exports?: boolean;\n checkFallthroughAttrs?: boolean;\n check_fallthrough_attrs?: boolean;\n}\n\ninterface NativeDeclarationOptions {\n filename?: string;\n}\n\ninterface DeclarationResult {\n code: string;\n}\n\ninterface TypeDiagnostic {\n severity: string;\n message: string;\n start: number;\n end: number;\n code?: string;\n help?: string;\n related?: Array<{\n message: string;\n start: number;\n end: number;\n filename?: string;\n }>;\n}\n\ninterface TypeCheckResult {\n diagnostics: TypeDiagnostic[];\n virtualTs?: string;\n errorCount: number;\n warningCount: number;\n analysisTimeMs?: number;\n}\n\ninterface CheckOptions {\n format?: string;\n quiet?: boolean;\n strict?: boolean;\n includeVirtualTs?: boolean;\n maxWarnings?: number;\n checkProps?: boolean;\n checkEmits?: boolean;\n checkTemplateBindings?: boolean;\n checkReactivity?: boolean;\n checkSetupContext?: boolean;\n checkInvalidExports?: boolean;\n checkFallthroughAttrs?: boolean;\n declaration?: boolean;\n declarationDir?: string;\n help?: boolean;\n}\n\ninterface ParsedCheckCommand {\n patterns: string[];\n options: CheckOptions;\n sharedConfig: SharedConfigOptions;\n}\n\ninterface CheckedFileResult {\n file: string;\n source: string;\n result: TypeCheckResult;\n}\n\ninterface EmittedDeclaration {\n file: string;\n path: string;\n}\n\nfunction parseCheckCommand(args: string[]): ParsedCheckCommand {\n const patterns: string[] = [];\n const options: CheckOptions = {};\n const sharedConfig: SharedConfigOptions = {\n configMode: \"root\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--format\" || arg === \"-f\") {\n options.format = args[++i];\n } else if (arg === \"--quiet\" || arg === \"-q\") {\n options.quiet = true;\n } else if (arg === \"--strict\") {\n options.strict = true;\n } else if (arg === \"--no-strict\") {\n options.strict = false;\n } else if (arg === \"--show-virtual-ts\" || arg === \"--include-virtual-ts\") {\n options.includeVirtualTs = true;\n } else if (arg === \"--max-warnings\") {\n options.maxWarnings = Number.parseInt(args[++i], 10);\n } else if (arg === \"--no-check-props\") {\n options.checkProps = false;\n } else if (arg === \"--no-check-emits\") {\n options.checkEmits = false;\n } else if (arg === \"--no-check-template-bindings\") {\n options.checkTemplateBindings = false;\n } else if (arg === \"--no-check-reactivity\") {\n options.checkReactivity = false;\n } else if (arg === \"--no-check-setup-context\") {\n options.checkSetupContext = false;\n } else if (arg === \"--no-check-invalid-exports\") {\n options.checkInvalidExports = false;\n } else if (arg === \"--no-check-fallthrough-attrs\") {\n options.checkFallthroughAttrs = false;\n } else if (arg === \"--declaration\") {\n options.declaration = true;\n } else if (arg === \"--declaration-dir\") {\n const declarationDir = args[++i];\n if (!declarationDir) {\n throw new Error(\"Missing path after --declaration-dir\");\n }\n options.declarationDir = declarationDir;\n } else if (arg === \"--config\" || arg === \"-c\") {\n const configFile = args[++i];\n if (!configFile) {\n throw new Error(\"Missing path after --config\");\n }\n sharedConfig.configFile = configFile;\n } else if (arg === \"--no-config\") {\n sharedConfig.configMode = \"none\";\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n } else if (arg === \"--tsconfig\" || arg === \"--corsa-path\" || arg === \"--servers\") {\n i++;\n } else if (arg === \"--socket\" || arg === \"-s\") {\n i++;\n } else if (arg === \"--profile\") {\n // Accepted for package-script compatibility with the Rust CLI.\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options, sharedConfig };\n}\n\nfunction hasGlobSyntax(pattern: string): boolean {\n return pattern.includes(\"*\") || pattern.includes(\"?\") || pattern.includes(\"[\");\n}\n\nfunction normalizePath(filePath: string): string {\n return filePath.split(path.sep).join(\"/\");\n}\n\nexport function sanitizeTerminalText(value: unknown): string {\n const text = String(value);\n let sanitized = \"\";\n\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n if (code === 0x1b) {\n i = skipTerminalEscapeSequence(text, i);\n continue;\n }\n if (isUnsafeTerminalControl(code)) {\n continue;\n }\n sanitized += text[i];\n }\n\n return sanitized;\n}\n\nfunction skipTerminalEscapeSequence(text: string, escapeIndex: number): number {\n const introducer = text.charCodeAt(escapeIndex + 1);\n if (introducer === 0x5b) {\n return skipUntilAnsiFinalByte(text, escapeIndex + 2);\n }\n if (introducer === 0x5d || introducer === 0x50 || introducer === 0x5e || introducer === 0x5f) {\n return skipUntilStringTerminator(text, escapeIndex + 2);\n }\n if (Number.isNaN(introducer)) {\n return escapeIndex;\n }\n return escapeIndex + 1;\n}\n\nfunction skipUntilAnsiFinalByte(text: string, index: number): number {\n for (let i = index; i < text.length; i++) {\n const code = text.charCodeAt(i);\n if (code >= 0x40 && code <= 0x7e) {\n return i;\n }\n }\n return text.length - 1;\n}\n\nfunction skipUntilStringTerminator(text: string, index: number): number {\n for (let i = index; i < text.length; i++) {\n const code = text.charCodeAt(i);\n if (code === 0x07) {\n return i;\n }\n if (code === 0x1b && text.charCodeAt(i + 1) === 0x5c) {\n return i + 1;\n }\n }\n return text.length - 1;\n}\n\nfunction isUnsafeTerminalControl(code: number): boolean {\n if (code === 0x09 || code === 0x0a || code === 0x0d) {\n return false;\n }\n return (code >= 0x00 && code <= 0x1f) || (code >= 0x7f && code <= 0x9f);\n}\n\nexport function displayPath(filePath: string): string {\n const relative = path.relative(process.cwd(), filePath);\n if (relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative)) {\n return sanitizeTerminalText(normalizePath(relative));\n }\n return sanitizeTerminalText(normalizePath(filePath));\n}\n\nfunction isVueFile(filePath: string): boolean {\n return path.extname(filePath) === \".vue\";\n}\n\nfunction collectVueFilesFromDirectory(directory: string, recursive: boolean): string[] {\n const files: string[] = [];\n const entries = readdirSync(directory, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(directory, entry.name);\n if (entry.isDirectory()) {\n if (SKIPPED_VUE_FILE_DIRECTORIES.has(entry.name)) {\n continue;\n }\n if (recursive) {\n files.push(...collectVueFilesFromDirectory(entryPath, true));\n }\n } else if (entry.isFile() && isVueFile(entryPath)) {\n files.push(entryPath);\n }\n }\n\n return files;\n}\n\nfunction globBase(pattern: string): string {\n const normalized = normalizePath(pattern);\n const globIndex = normalized.search(/[*?[]/);\n if (globIndex === -1) {\n return normalized;\n }\n\n const beforeGlob = normalized.slice(0, globIndex);\n const slashIndex = beforeGlob.lastIndexOf(\"/\");\n if (slashIndex === -1) {\n return \".\";\n }\n return beforeGlob.slice(0, slashIndex) || \"/\";\n}\n\nfunction globToRegExp(pattern: string): RegExp {\n const normalized = normalizePath(pattern);\n let source = \"\";\n\n for (let i = 0; i < normalized.length; i++) {\n const char = normalized[i];\n const next = normalized[i + 1];\n const afterNext = normalized[i + 2];\n\n if (char === \"*\" && next === \"*\" && afterNext === \"/\") {\n source += \"(?:.*/)?\";\n i += 2;\n } else if (char === \"*\" && next === \"*\") {\n source += \".*\";\n i++;\n } else if (char === \"*\") {\n source += \"[^/]*\";\n } else if (char === \"?\") {\n source += \"[^/]\";\n } else if (\"\\\\^$+?.()|{}[]\".includes(char)) {\n source += `\\\\${char}`;\n } else {\n source += char;\n }\n }\n\n return new RegExp(`^${source}$`);\n}\n\nfunction shouldRecurseGlob(pattern: string, base: string): boolean {\n const normalizedPattern = normalizePath(pattern);\n const normalizedBase = normalizePath(base);\n const rest =\n normalizedBase === \".\"\n ? normalizedPattern\n : normalizedPattern.slice(normalizedBase.length).replace(/^\\/+/, \"\");\n return rest.includes(\"/\");\n}\n\nfunction collectVueFilesFromGlob(pattern: string): string[] {\n const basePattern = globBase(pattern);\n const base = path.resolve(process.cwd(), basePattern);\n if (!existsSync(base)) {\n return [];\n }\n\n const isAbsolutePattern = path.isAbsolute(pattern);\n const normalizedPattern = normalizePath(isAbsolutePattern ? path.resolve(pattern) : pattern);\n const regex = globToRegExp(normalizedPattern);\n const candidates = collectVueFilesFromDirectory(base, shouldRecurseGlob(pattern, basePattern));\n\n return candidates.filter((file) => {\n const comparable = isAbsolutePattern\n ? normalizePath(file)\n : normalizePath(path.relative(process.cwd(), file));\n return regex.test(comparable);\n });\n}\n\nfunction collectVueFiles(patterns: string[]): string[] {\n const files = new Set<string>();\n const inputs = patterns.length === 0 ? [\".\"] : patterns;\n\n for (const input of inputs) {\n if (hasGlobSyntax(input)) {\n for (const file of collectVueFilesFromGlob(input)) {\n files.add(path.resolve(file));\n }\n continue;\n }\n\n const resolved = path.resolve(process.cwd(), input);\n if (!existsSync(resolved)) {\n continue;\n }\n\n const stats = statSync(resolved);\n if (stats.isDirectory()) {\n for (const file of collectVueFilesFromDirectory(resolved, true)) {\n files.add(path.resolve(file));\n }\n } else if (stats.isFile() && isVueFile(resolved)) {\n files.add(resolved);\n }\n }\n\n return Array.from(files).sort();\n}\n\nfunction commonSourceDirectory(results: CheckedFileResult[]): string {\n let common = path.dirname(results[0]?.file ?? process.cwd());\n\n for (let i = 1; i < results.length; i++) {\n const directory = path.dirname(results[i].file);\n while (common !== path.dirname(common)) {\n const relative = path.relative(common, directory);\n if (relative !== \"..\" && !relative.startsWith(`..${path.sep}`)) {\n break;\n }\n common = path.dirname(common);\n }\n }\n\n return common;\n}\n\nfunction emitCheckDeclarations(\n results: CheckedFileResult[],\n native: NativeBinding,\n options: CheckOptions,\n): EmittedDeclaration[] {\n if (!options.declaration) {\n return [];\n }\n\n if (typeof native.generateDeclaration !== \"function\") {\n throw new Error(\"The loaded native binding does not support declaration generation.\");\n }\n\n const outDir = path.resolve(process.cwd(), options.declarationDir ?? \"dist/types\");\n const sourceRoot = commonSourceDirectory(results);\n const declarations: EmittedDeclaration[] = [];\n\n for (const { file, source } of results) {\n const relative = normalizePath(path.relative(sourceRoot, file));\n const outputPath = path.join(outDir, `${relative}.d.ts`);\n mkdirSync(path.dirname(outputPath), { recursive: true });\n\n const declaration = native.generateDeclaration(source, { filename: file });\n writeFileSync(outputPath, declaration.code);\n declarations.push({\n file: displayPath(outputPath),\n path: outputPath,\n });\n }\n\n return declarations;\n}\n\nfunction lineStarts(source: string): number[] {\n const starts = [0];\n for (let i = 0; i < source.length; i++) {\n if (source.charCodeAt(i) === 10) {\n starts.push(i + 1);\n }\n }\n return starts;\n}\n\nfunction offsetToLineColumn(starts: number[], offset: number): { line: number; column: number } {\n let low = 0;\n let high = starts.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n if (starts[mid] <= offset) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n const lineIndex = Math.max(0, high);\n return {\n line: lineIndex + 1,\n column: offset - starts[lineIndex] + 1,\n };\n}\n\nfunction toNativeTypeCheckOptions(file: string, options: CheckOptions): NativeTypeCheckOptions {\n return {\n filename: file,\n strict: options.strict,\n includeVirtualTs: options.includeVirtualTs,\n include_virtual_ts: options.includeVirtualTs,\n checkProps: options.checkProps,\n check_props: options.checkProps,\n checkEmits: options.checkEmits,\n check_emits: options.checkEmits,\n checkTemplateBindings: options.checkTemplateBindings,\n check_template_bindings: options.checkTemplateBindings,\n checkReactivity: options.checkReactivity,\n check_reactivity: options.checkReactivity,\n checkSetupContext: options.checkSetupContext,\n check_setup_context: options.checkSetupContext,\n checkInvalidExports: options.checkInvalidExports,\n check_invalid_exports: options.checkInvalidExports,\n checkFallthroughAttrs: options.checkFallthroughAttrs,\n check_fallthrough_attrs: options.checkFallthroughAttrs,\n };\n}\n\nfunction renderCheckText(\n results: CheckedFileResult[],\n options: CheckOptions,\n timeMs: number,\n declarations: EmittedDeclaration[] = [],\n): void {\n let totalErrors = 0;\n let totalWarnings = 0;\n\n for (const { file, source, result } of results) {\n totalErrors += result.errorCount;\n totalWarnings += result.warningCount;\n\n if (options.includeVirtualTs && result.virtualTs) {\n process.stderr.write(\n `\\n=== ${displayPath(file)} ===\\n${sanitizeTerminalText(result.virtualTs)}\\n`,\n );\n }\n\n if (options.quiet || result.diagnostics.length === 0) {\n continue;\n }\n\n const starts = lineStarts(source);\n process.stdout.write(`\\n\\x1b[4m${displayPath(file)}\\x1b[0m\\n`);\n for (const diagnostic of result.diagnostics) {\n const color = diagnostic.severity === \"error\" ? \"\\x1b[31m\" : \"\\x1b[33m\";\n const location = offsetToLineColumn(starts, diagnostic.start);\n const code = diagnostic.code ? ` [${sanitizeTerminalText(diagnostic.code)}]` : \"\";\n process.stdout.write(\n ` ${color}${diagnostic.severity}:${location.line}:${location.column}\\x1b[0m${code} ${sanitizeTerminalText(diagnostic.message)}\\n`,\n );\n if (diagnostic.help) {\n process.stdout.write(` help: ${sanitizeTerminalText(diagnostic.help)}\\n`);\n }\n }\n }\n\n const status = totalErrors > 0 ? \"\\x1b[31mERR\\x1b[0m\" : \"\\x1b[32mOK\\x1b[0m\";\n process.stdout.write(\n `\\n${status} Type checked ${results.length} Vue files in ${timeMs.toFixed(2)}ms\\n`,\n );\n if (totalErrors > 0) {\n process.stdout.write(` \\x1b[31m${totalErrors} error(s)\\x1b[0m\\n`);\n } else {\n process.stdout.write(\" \\x1b[32mNo type errors found!\\x1b[0m\\n\");\n }\n if (totalWarnings > 0) {\n process.stdout.write(` \\x1b[33m${totalWarnings} warning(s)\\x1b[0m\\n`);\n }\n if (declarations.length > 0) {\n process.stdout.write(` \\x1b[32mEmitted ${declarations.length} declaration file(s)\\x1b[0m\\n`);\n }\n}\n\nasync function runCheck(args: string[]): Promise<void> {\n const { patterns, options, sharedConfig } = parseCheckCommand(args);\n if (options.help) {\n printCheckUsage();\n return;\n }\n\n const config = await loadConfig(process.cwd(), {\n mode: sharedConfig.configMode,\n configFile: sharedConfig.configFile,\n env: {\n mode: process.env.NODE_ENV ?? \"development\",\n command: \"check\",\n },\n });\n\n if (sharedConfig.configFile && !config) {\n throw new Error(`Could not find config file: ${sharedConfig.configFile}`);\n }\n\n if (config?.typeChecker?.enabled === false) {\n process.stderr.write(\n \"[vize] Skipping check because typeChecker.enabled is false in vize.config.\\n\",\n );\n return;\n }\n\n options.strict ??= config?.typeChecker?.strict;\n options.checkProps ??= config?.typeChecker?.checkProps;\n options.checkEmits ??= config?.typeChecker?.checkEmits;\n options.checkTemplateBindings ??= config?.typeChecker?.checkTemplateBindings;\n\n const files = collectVueFiles(patterns);\n if (files.length === 0) {\n process.stderr.write(\n `No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\\n`,\n );\n return;\n }\n\n const native = loadNative(\"check\");\n const start = performance.now();\n const results = files.map((file) => {\n const source = readFileSync(file, \"utf8\");\n return {\n file,\n source,\n result: native.typeCheck(source, toNativeTypeCheckOptions(file, options)),\n };\n });\n const timeMs = performance.now() - start;\n const declarations = emitCheckDeclarations(results, native, options);\n const totalErrors = results.reduce((sum, { result }) => sum + result.errorCount, 0);\n const totalWarnings = results.reduce((sum, { result }) => sum + result.warningCount, 0);\n\n if (options.format === \"json\") {\n process.stdout.write(\n `${JSON.stringify(\n {\n files: results.map(({ file, result }) => ({\n file: displayPath(file),\n diagnostics: result.diagnostics,\n virtualTs: result.virtualTs,\n })),\n errorCount: totalErrors,\n warningCount: totalWarnings,\n fileCount: results.length,\n declarations: declarations.map(({ file }) => file),\n },\n null,\n 2,\n )}\\n`,\n );\n } else {\n renderCheckText(results, options, timeMs, declarations);\n }\n\n if (totalErrors > 0) {\n process.exit(1);\n }\n\n if (options.maxWarnings !== undefined && totalWarnings > options.maxWarnings) {\n process.stderr.write(`\\nToo many warnings (${totalWarnings} > max ${options.maxWarnings})\\n`);\n process.exit(1);\n }\n}\n\nasync function runLint(args: string[]): Promise<void> {\n const { patterns, options, sharedConfig } = parseLintCommand(args);\n const config = await loadConfig(process.cwd(), {\n mode: sharedConfig.configMode,\n configFile: sharedConfig.configFile,\n env: {\n mode: process.env.NODE_ENV ?? \"development\",\n command: \"lint\",\n },\n });\n\n if (sharedConfig.configFile && !config) {\n throw new Error(`Could not find config file: ${sharedConfig.configFile}`);\n }\n\n if (config?.linter?.enabled === false) {\n process.stderr.write(\"[vize] Skipping lint because linter.enabled is false in vize.config.\\n\");\n return;\n }\n\n options.preset ??= config?.linter?.preset;\n\n if (patterns.length === 0) {\n patterns.push(\".\");\n }\n\n const native = loadNative(\"lint\");\n const result = native.lint(patterns, {\n format: options.format,\n max_warnings: options.maxWarnings,\n quiet: options.quiet,\n fix: options.fix,\n help_level: options.helpLevel,\n preset: options.preset,\n });\n\n if (result.output) {\n process.stdout.write(sanitizeTerminalText(result.output));\n if (!result.output.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n }\n\n if (options.fix) {\n process.stderr.write(\"\\nNote: --fix is not yet implemented\\n\");\n }\n\n if (result.errorCount > 0) {\n process.exit(1);\n }\n\n if (options.maxWarnings !== undefined && result.warningCount > options.maxWarnings) {\n process.stderr.write(\n `\\nToo many warnings (${result.warningCount} > max ${options.maxWarnings})\\n`,\n );\n process.exit(1);\n }\n}\n\n// ============================================================================\n// Upgrade command\n// ============================================================================\n\ntype PackageManager = \"bun\" | \"npm\" | \"pnpm\" | \"vp\" | \"yarn\";\n\ninterface UpgradeOptions {\n packageManager?: PackageManager;\n global?: boolean;\n dryRun?: boolean;\n help?: boolean;\n}\n\nfunction parseUpgradeCommand(args: string[]): UpgradeOptions {\n const options: UpgradeOptions = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--package-manager\") {\n const packageManager = args[++i];\n if (\n packageManager === \"bun\" ||\n packageManager === \"npm\" ||\n packageManager === \"pnpm\" ||\n packageManager === \"vp\" ||\n packageManager === \"yarn\"\n ) {\n options.packageManager = packageManager;\n }\n } else if (arg === \"--global\" || arg === \"-g\") {\n options.global = true;\n } else if (arg === \"--dry-run\") {\n options.dryRun = true;\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n }\n }\n\n return options;\n}\n\nfunction readCwdPackageJson(): {\n packageManager?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n} | null {\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (!existsSync(packageJsonPath)) {\n return null;\n }\n return JSON.parse(readFileSync(packageJsonPath, \"utf8\"));\n}\n\nfunction detectPackageManager(explicit?: PackageManager): PackageManager {\n if (explicit) {\n return explicit;\n }\n\n const userAgent = process.env.npm_config_user_agent ?? \"\";\n if (userAgent.startsWith(\"pnpm\")) {\n return \"pnpm\";\n }\n if (userAgent.startsWith(\"yarn\")) {\n return \"yarn\";\n }\n if (userAgent.startsWith(\"bun\")) {\n return \"bun\";\n }\n if (userAgent.startsWith(\"npm\")) {\n return \"npm\";\n }\n\n const packageManager = readCwdPackageJson()?.packageManager;\n if (packageManager?.startsWith(\"pnpm\")) {\n return \"pnpm\";\n }\n if (packageManager?.startsWith(\"yarn\")) {\n return \"yarn\";\n }\n if (packageManager?.startsWith(\"bun\")) {\n return \"bun\";\n }\n return \"npm\";\n}\n\nfunction buildUpgradeCommand(\n packageManager: PackageManager,\n options: UpgradeOptions,\n): { command: string; args: string[] } {\n const packageJson = readCwdPackageJson();\n const saveDev = !packageJson?.dependencies?.vize;\n const packageSpec = \"vize@latest\";\n\n if (packageManager === \"vp\") {\n return {\n command: \"vp\",\n args: [\"install\", ...(options.global ? [\"-g\"] : saveDev ? [\"-D\"] : []), packageSpec],\n };\n }\n if (packageManager === \"pnpm\") {\n return {\n command: \"pnpm\",\n args: [\"add\", ...(options.global ? [\"-g\"] : saveDev ? [\"-D\"] : []), packageSpec],\n };\n }\n if (packageManager === \"yarn\") {\n return {\n command: \"yarn\",\n args: options.global\n ? [\"global\", \"add\", packageSpec]\n : [\"add\", ...(saveDev ? [\"-D\"] : []), packageSpec],\n };\n }\n if (packageManager === \"bun\") {\n return {\n command: \"bun\",\n args: [\"add\", ...(options.global ? [\"-g\"] : saveDev ? [\"-d\"] : []), packageSpec],\n };\n }\n return {\n command: \"npm\",\n args: [\"install\", ...(options.global ? [\"-g\"] : saveDev ? [\"-D\"] : []), packageSpec],\n };\n}\n\nfunction runUpgrade(args: string[]): void {\n const options = parseUpgradeCommand(args);\n if (options.help) {\n printUpgradeUsage();\n return;\n }\n\n const packageManager = detectPackageManager(options.packageManager);\n const command = buildUpgradeCommand(packageManager, options);\n\n if (options.dryRun) {\n process.stdout.write(`${command.command} ${command.args.join(\" \")}\\n`);\n return;\n }\n\n const result = spawnSync(command.command, command.args, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n env: process.env,\n });\n\n if (result.error) {\n throw result.error;\n }\n\n process.exit(result.status ?? 1);\n}\n\n// ============================================================================\n// Ready command\n// ============================================================================\n\ninterface ReadyOptions {\n output: string;\n ssr?: boolean;\n scriptExt: \"preserve\" | \"downcompile\";\n help?: boolean;\n}\n\ninterface ParsedReadyCommand {\n patterns: string[];\n options: ReadyOptions;\n}\n\nfunction parseReadyCommand(args: string[]): ParsedReadyCommand {\n const patterns: string[] = [];\n const options: ReadyOptions = {\n output: \"./dist\",\n scriptExt: \"downcompile\",\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--output\" || arg === \"-o\") {\n options.output = args[++i] ?? options.output;\n } else if (arg === \"--ssr\") {\n options.ssr = true;\n } else if (arg === \"--script-ext\") {\n const scriptExt = args[++i];\n if (scriptExt === \"preserve\" || scriptExt === \"downcompile\") {\n options.scriptExt = scriptExt;\n }\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.help = true;\n } else if (!arg.startsWith(\"-\")) {\n patterns.push(arg);\n }\n }\n\n return { patterns, options };\n}\n\nasync function runReady(args: string[]): Promise<void> {\n const { patterns, options } = parseReadyCommand(args);\n if (options.help) {\n printReadyUsage();\n return;\n }\n\n process.stderr.write(\"vize ready: fmt\\n\");\n await runFmt([\"--write\", ...patterns]);\n\n process.stderr.write(\"vize ready: lint\\n\");\n await runLint(patterns);\n\n process.stderr.write(\"vize ready: check\\n\");\n await runCheck(patterns);\n\n process.stderr.write(\"vize ready: build\\n\");\n await runBuild([\n \"--output\",\n options.output,\n \"--script-ext\",\n options.scriptExt,\n ...(options.ssr ? [\"--ssr\"] : []),\n ...patterns,\n ]);\n}\n\n// ============================================================================\n// Command router\n// ============================================================================\n\nconst NAPI_COMMANDS = new Set([\"build\", \"check\", \"fmt\", \"lint\"]);\nconst JS_COMMANDS = new Set([\"musea\", \"ready\", \"upgrade\"]);\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (!command || command === \"--help\" || command === \"-h\") {\n printUsage();\n process.exit(1);\n }\n\n if (NAPI_COMMANDS.has(command)) {\n const commandArgs = args.slice(1);\n switch (command) {\n case \"build\":\n await runBuild(commandArgs);\n break;\n case \"check\":\n await runCheck(commandArgs);\n break;\n case \"fmt\":\n await runFmt(commandArgs);\n break;\n case \"lint\":\n await runLint(commandArgs);\n break;\n }\n } else if (JS_COMMANDS.has(command)) {\n const commandArgs = args.slice(1);\n switch (command) {\n case \"musea\":\n runMusea(commandArgs);\n break;\n case \"ready\":\n await runReady(commandArgs);\n break;\n case \"upgrade\":\n runUpgrade(commandArgs);\n break;\n }\n } else {\n printUsage();\n console.error(`Unknown command: ${sanitizeTerminalText(command)}`);\n console.error(\n \"For commands not yet available via NAPI, install from source: cargo install vize\",\n );\n process.exit(1);\n }\n}\n\nconst isTestRuntime =\n Boolean(import.meta.vitest) || process.env.VITEST === \"true\" || process.env.NODE_ENV === \"test\";\n\nif (!isTestRuntime) {\n void main().catch((error) => {\n console.error(sanitizeTerminalText(error instanceof Error ? error.message : String(error)));\n process.exit(1);\n });\n}\n"],"mappings":"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"}
@@ -468,7 +468,7 @@ interface GlobalTypeDeclaration {
468
468
  }
469
469
  //#endregion
470
470
  //#region src/types/rules.d.ts
471
- declare const LINT_RULE_NAMES: readonly ["a11y/alt-text", "a11y/anchor-has-content", "a11y/anchor-is-valid", "a11y/aria-props", "a11y/aria-role", "a11y/aria-unsupported-elements", "a11y/click-events-have-key-events", "a11y/form-control-has-label", "a11y/heading-has-content", "a11y/heading-levels", "a11y/iframe-has-title", "a11y/img-alt", "a11y/interactive-supports-focus", "a11y/label-has-for", "a11y/landmark-roles", "a11y/media-has-caption", "a11y/mouse-events-have-key-events", "a11y/no-access-key", "a11y/no-aria-hidden-on-focusable", "a11y/no-autofocus", "a11y/no-distracting-elements", "a11y/no-i-for-icon", "a11y/no-redundant-roles", "a11y/no-refer-to-non-existent-id", "a11y/no-role-presentation-on-focusable", "a11y/no-static-element-interactions", "a11y/placeholder-label-option", "a11y/role-has-required-aria-props", "a11y/tabindex-no-positive", "a11y/use-list", "html/deprecated-attr", "html/deprecated-element", "html/id-duplication", "html/no-consecutive-br", "html/no-duplicate-dt", "html/no-empty-palpable-content", "html/require-datetime", "script/no-get-current-instance", "script/no-next-tick", "script/no-options-api", "ssr/no-browser-globals-in-ssr", "ssr/no-hydration-mismatch", "type/no-floating-promises", "type/no-reactivity-loss", "type/no-unsafe-template-binding", "type/require-typed-emits", "type/require-typed-props", "vapor/no-inline-template", "vapor/no-vue-lifecycle-events", "vapor/prefer-static-class", "vapor/require-vapor-attribute", "vue/attribute-hyphenation", "vue/attribute-order", "vue/component-definition-name-casing", "vue/component-name-in-template-casing", "vue/html-quotes", "vue/html-self-closing", "vue/multi-word-component-names", "vue/mustache-interpolation-spacing", "vue/no-boolean-attr-value", "vue/no-child-content", "vue/no-dupe-v-else-if", "vue/no-duplicate-attributes", "vue/no-inline-style", "vue/no-lone-template", "vue/no-multi-spaces", "vue/no-mutating-props", "vue/no-preprocessor-lang", "vue/no-reserved-component-names", "vue/no-script-non-standard-lang", "vue/no-src-attribute", "vue/no-template-key", "vue/no-template-lang", "vue/no-template-shadow", "vue/no-textarea-mustache", "vue/no-unsafe-url", "vue/no-unused-components", "vue/no-unused-properties", "vue/no-unused-vars", "vue/no-use-v-if-with-v-for", "vue/no-useless-template-attributes", "vue/no-v-html", "vue/no-v-text-v-html-on-component", "vue/permitted-contents", "vue/prefer-props-shorthand", "vue/prop-name-casing", "vue/require-component-is", "vue/require-component-registration", "vue/require-scoped-style", "vue/require-v-for-key", "vue/scoped-event-names", "vue/sfc-element-order", "vue/single-style-block", "vue/use-unique-element-ids", "vue/use-v-on-exact", "vue/v-bind-style", "vue/v-on-style", "vue/v-slot-style", "vue/valid-attribute-name", "vue/valid-v-bind", "vue/valid-v-else", "vue/valid-v-for", "vue/valid-v-if", "vue/valid-v-memo", "vue/valid-v-model", "vue/valid-v-on", "vue/valid-v-show", "vue/valid-v-slot", "vue/warn-custom-block", "vue/warn-custom-directive"];
471
+ declare const LINT_RULE_NAMES: readonly ["a11y/alt-text", "a11y/anchor-has-content", "a11y/anchor-is-valid", "a11y/aria-props", "a11y/aria-role", "a11y/aria-unsupported-elements", "a11y/click-events-have-key-events", "a11y/form-control-has-label", "a11y/heading-has-content", "a11y/heading-levels", "a11y/iframe-has-title", "a11y/img-alt", "a11y/interactive-supports-focus", "a11y/label-has-for", "a11y/landmark-roles", "a11y/media-has-caption", "a11y/mouse-events-have-key-events", "a11y/no-access-key", "a11y/no-aria-hidden-on-focusable", "a11y/no-autofocus", "a11y/no-distracting-elements", "a11y/no-i-for-icon", "a11y/no-redundant-roles", "a11y/no-refer-to-non-existent-id", "a11y/no-role-presentation-on-focusable", "a11y/no-static-element-interactions", "a11y/placeholder-label-option", "a11y/role-has-required-aria-props", "a11y/tabindex-no-positive", "a11y/use-list", "ecosystem/nuxt-prefer-nuxt-link", "ecosystem/pinia-prefer-store-to-refs", "ecosystem/router-link-require-to", "ecosystem/vue-i18n-no-missing-key", "ecosystem/vue-router-prefer-named-link", "ecosystem/vue-router-prefer-named-push", "ecosystem/vue-test-utils-no-html-snapshot", "html/deprecated-attr", "html/deprecated-element", "html/id-duplication", "html/no-consecutive-br", "html/no-duplicate-dt", "html/no-empty-palpable-content", "html/require-datetime", "script/no-get-current-instance", "script/no-next-tick", "script/no-options-api", "ssr/no-browser-globals-in-ssr", "ssr/no-hydration-mismatch", "type/no-floating-promises", "type/no-reactivity-loss", "type/no-unsafe-template-binding", "type/require-typed-emits", "type/require-typed-props", "vapor/no-inline-template", "vapor/no-vue-lifecycle-events", "vapor/prefer-static-class", "vapor/require-vapor-attribute", "vue/attribute-hyphenation", "vue/attribute-order", "vue/component-definition-name-casing", "vue/component-name-in-template-casing", "vue/html-quotes", "vue/html-self-closing", "vue/multi-word-component-names", "vue/mustache-interpolation-spacing", "vue/no-boolean-attr-value", "vue/no-child-content", "vue/no-dupe-v-else-if", "vue/no-duplicate-attributes", "vue/no-inline-style", "vue/no-lone-template", "vue/no-multi-spaces", "vue/no-mutating-props", "vue/no-preprocessor-lang", "vue/no-reserved-component-names", "vue/no-script-non-standard-lang", "vue/no-src-attribute", "vue/no-template-key", "vue/no-template-lang", "vue/no-template-shadow", "vue/no-textarea-mustache", "vue/no-unsafe-url", "vue/no-unused-components", "vue/no-unused-properties", "vue/no-unused-vars", "vue/no-use-v-if-with-v-for", "vue/no-useless-template-attributes", "vue/no-v-html", "vue/no-v-text-v-html-on-component", "vue/permitted-contents", "vue/prefer-props-shorthand", "vue/prop-name-casing", "vue/require-component-is", "vue/require-component-registration", "vue/require-scoped-style", "vue/require-v-for-key", "vue/scoped-event-names", "vue/sfc-element-order", "vue/single-style-block", "vue/use-unique-element-ids", "vue/use-v-on-exact", "vue/v-bind-style", "vue/v-on-style", "vue/v-slot-style", "vue/valid-attribute-name", "vue/valid-v-bind", "vue/valid-v-else", "vue/valid-v-for", "vue/valid-v-if", "vue/valid-v-memo", "vue/valid-v-model", "vue/valid-v-on", "vue/valid-v-show", "vue/valid-v-slot", "vue/warn-custom-block", "vue/warn-custom-directive"];
472
472
  type LintRuleName = (typeof LINT_RULE_NAMES)[number];
473
473
  type LintRulesConfig = Partial<Record<LintRuleName, RuleSeverity>>;
474
474
  //#endregion
@@ -531,4 +531,4 @@ declare function loadConfig(root: string, options?: LoadConfigOptions): Promise<
531
531
  declare function normalizeGlobalTypes(config: GlobalTypesConfig): Record<string, GlobalTypeDeclaration>;
532
532
  //#endregion
533
533
  export { MuseaConfig as C, TypeCheckerConfig as D, RuleSeverity as E, VitePluginConfig as O, MuseaAutogenConfig as S, RuleCategory as T, GlobalTypesConfig as _, loadConfig as a, LinterConfig as b, ConfigEnv as c, UserConfigExport as d, LintRuleName as f, GlobalTypeDeclaration as g, FormatterConfig as h, defineConfig as i, VizeConfig as k, LoadConfigOptions as l, CompilerConfig as m, VIZE_CONFIG_JSON_SCHEMA_PATH as n, normalizeGlobalTypes as o, LintRulesConfig as p, VIZE_CONFIG_PKL_SCHEMA_PATH as r, LspConfig as s, CONFIG_FILE_NAMES as t, MaybePromise as u, LanguageServerConfig as v, MuseaVrtConfig as w, MuseaA11yConfig as x, LintPreset as y };
534
- //# sourceMappingURL=config-XMCb6V8W.d.mts.map
534
+ //# sourceMappingURL=config-tvugwdpH.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-XMCb6V8W.d.mts","names":[],"sources":["../src/types/generated.ts","../src/types/rules.ts","../src/types/runtime.ts","../src/types/index.ts","../src/config.ts"],"mappings":"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"}
1
+ {"version":3,"file":"config-tvugwdpH.d.mts","names":[],"sources":["../src/types/generated.ts","../src/types/rules.ts","../src/types/runtime.ts","../src/types/index.ts","../src/config.ts"],"mappings":"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"}
package/dist/config.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as loadConfig, i as defineConfig, n as VIZE_CONFIG_JSON_SCHEMA_PATH, o as normalizeGlobalTypes, r as VIZE_CONFIG_PKL_SCHEMA_PATH, t as CONFIG_FILE_NAMES } from "./config-XMCb6V8W.mjs";
1
+ import { a as loadConfig, i as defineConfig, n as VIZE_CONFIG_JSON_SCHEMA_PATH, o as normalizeGlobalTypes, r as VIZE_CONFIG_PKL_SCHEMA_PATH, t as CONFIG_FILE_NAMES } from "./config-tvugwdpH.mjs";
2
2
  export { CONFIG_FILE_NAMES, VIZE_CONFIG_JSON_SCHEMA_PATH, VIZE_CONFIG_PKL_SCHEMA_PATH, defineConfig, loadConfig, normalizeGlobalTypes };
package/dist/index.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { C as MuseaConfig, D as TypeCheckerConfig, E as RuleSeverity, O as VitePluginConfig, S as MuseaAutogenConfig, T as RuleCategory, _ as GlobalTypesConfig, a as loadConfig, b as LinterConfig, c as ConfigEnv, d as UserConfigExport, f as LintRuleName, g as GlobalTypeDeclaration, h as FormatterConfig, i as defineConfig, k as VizeConfig, l as LoadConfigOptions, m as CompilerConfig, n as VIZE_CONFIG_JSON_SCHEMA_PATH, o as normalizeGlobalTypes, p as LintRulesConfig, r as VIZE_CONFIG_PKL_SCHEMA_PATH, s as LspConfig, t as CONFIG_FILE_NAMES, u as MaybePromise, v as LanguageServerConfig, w as MuseaVrtConfig, x as MuseaA11yConfig, y as LintPreset } from "./config-XMCb6V8W.mjs";
1
+ import { C as MuseaConfig, D as TypeCheckerConfig, E as RuleSeverity, O as VitePluginConfig, S as MuseaAutogenConfig, T as RuleCategory, _ as GlobalTypesConfig, a as loadConfig, b as LinterConfig, c as ConfigEnv, d as UserConfigExport, f as LintRuleName, g as GlobalTypeDeclaration, h as FormatterConfig, i as defineConfig, k as VizeConfig, l as LoadConfigOptions, m as CompilerConfig, n as VIZE_CONFIG_JSON_SCHEMA_PATH, o as normalizeGlobalTypes, p as LintRulesConfig, r as VIZE_CONFIG_PKL_SCHEMA_PATH, s as LspConfig, t as CONFIG_FILE_NAMES, u as MaybePromise, v as LanguageServerConfig, w as MuseaVrtConfig, x as MuseaA11yConfig, y as LintPreset } from "./config-tvugwdpH.mjs";
2
2
  export { CONFIG_FILE_NAMES, type CompilerConfig, type ConfigEnv, type FormatterConfig, type GlobalTypeDeclaration, type GlobalTypesConfig, type LanguageServerConfig, type LintPreset, type LintRuleName, type LintRulesConfig, type LinterConfig, type LoadConfigOptions, type LspConfig, type MaybePromise, type MuseaA11yConfig, type MuseaAutogenConfig, type MuseaConfig, type MuseaVrtConfig, type RuleCategory, type RuleSeverity, type TypeCheckerConfig, type UserConfigExport, VIZE_CONFIG_JSON_SCHEMA_PATH, VIZE_CONFIG_PKL_SCHEMA_PATH, type VitePluginConfig, type VizeConfig, defineConfig, loadConfig, normalizeGlobalTypes };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vize",
3
- "version": "0.91.0",
3
+ "version": "0.94.0",
4
4
  "description": "Vize - High-performance Vue.js toolchain in Rust",
5
5
  "keywords": [
6
6
  "cli",
@@ -57,14 +57,14 @@
57
57
  },
58
58
  "optionalDependencies": {
59
59
  "@pkl-community/pkl": "0.27.2",
60
- "@vizejs/native-darwin-arm64": "0.91.0",
61
- "@vizejs/native-darwin-x64": "0.91.0",
62
- "@vizejs/native-linux-arm64-gnu": "0.91.0",
63
- "@vizejs/native-linux-arm64-musl": "0.91.0",
64
- "@vizejs/native-linux-x64-gnu": "0.91.0",
65
- "@vizejs/native-linux-x64-musl": "0.91.0",
66
- "@vizejs/native-win32-arm64-msvc": "0.91.0",
67
- "@vizejs/native-win32-x64-msvc": "0.91.0"
60
+ "@vizejs/native-darwin-arm64": "0.94.0",
61
+ "@vizejs/native-darwin-x64": "0.94.0",
62
+ "@vizejs/native-linux-arm64-gnu": "0.94.0",
63
+ "@vizejs/native-linux-arm64-musl": "0.94.0",
64
+ "@vizejs/native-linux-x64-gnu": "0.94.0",
65
+ "@vizejs/native-linux-x64-musl": "0.94.0",
66
+ "@vizejs/native-win32-arm64-msvc": "0.94.0",
67
+ "@vizejs/native-win32-x64-msvc": "0.94.0"
68
68
  },
69
69
  "engines": {
70
70
  "node": ">=22"
@@ -0,0 +1,45 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import * as path from "node:path";
3
+ import { displayPath, sanitizeTerminalText, shouldPreferWorkspaceBinding } from "./cli";
4
+
5
+ describe("shouldPreferWorkspaceBinding", () => {
6
+ it("detects the local workspace native package", () => {
7
+ expect(
8
+ shouldPreferWorkspaceBinding(
9
+ `${path.sep}Users${path.sep}example${path.sep}repo${path.sep}npm${path.sep}vize-native${path.sep}index.js`,
10
+ ),
11
+ ).toBe(true);
12
+ });
13
+
14
+ it("ignores published platform packages", () => {
15
+ expect(
16
+ shouldPreferWorkspaceBinding(
17
+ `${path.sep}repo${path.sep}node_modules${path.sep}.pnpm${path.sep}@vizejs+native-darwin-arm64${path.sep}node_modules${path.sep}@vizejs${path.sep}native-darwin-arm64${path.sep}index.js`,
18
+ ),
19
+ ).toBe(false);
20
+ });
21
+
22
+ it("returns false when the fallback package cannot be resolved", () => {
23
+ expect(shouldPreferWorkspaceBinding(null)).toBe(false);
24
+ });
25
+ });
26
+
27
+ describe("sanitizeTerminalText", () => {
28
+ it("strips terminal escape and control sequences", () => {
29
+ const sanitized = sanitizeTerminalText("bad\x1b]52;c;AAAA\x07\x1b[31mname");
30
+
31
+ expect(sanitized).not.toContain("\x1b");
32
+ expect(sanitized).not.toContain("\x07");
33
+ expect(sanitized).toBe("badname");
34
+ });
35
+
36
+ it("keeps ordinary multiline terminal text readable", () => {
37
+ expect(sanitizeTerminalText("line 1\n\tline 2\r\n")).toBe("line 1\n\tline 2\r\n");
38
+ });
39
+
40
+ it("sanitizes displayed path segments", () => {
41
+ const unsafePath = path.join(process.cwd(), "bad\x1b[31m.vue");
42
+
43
+ expect(displayPath(unsafePath)).toBe("bad.vue");
44
+ });
45
+ });
package/src/cli.ts CHANGED
@@ -139,7 +139,7 @@ function resolveWorkspaceBindingPath(): string | null {
139
139
  }
140
140
  }
141
141
 
142
- function shouldPreferWorkspaceBinding(resolvedPath: string | null): boolean {
142
+ export function shouldPreferWorkspaceBinding(resolvedPath: string | null): boolean {
143
143
  const override = process.env.VIZE_PREFER_WORKSPACE_BINDING;
144
144
  if (override === "1" || override === "true") {
145
145
  return true;
@@ -510,7 +510,9 @@ async function runBuild(args: string[]): Promise<void> {
510
510
 
511
511
  const files = collectVueFiles(patterns);
512
512
  if (files.length === 0) {
513
- process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\n`);
513
+ process.stderr.write(
514
+ `No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\n`,
515
+ );
514
516
  process.exit(1);
515
517
  }
516
518
 
@@ -539,10 +541,14 @@ async function runBuild(args: string[]): Promise<void> {
539
541
  for (const fileResult of results) {
540
542
  const source = sourceByPath.get(fileResult.path) ?? "";
541
543
  for (const warning of fileResult.warnings) {
542
- process.stderr.write(`warning: ${displayPath(fileResult.path)} ${warning}\n`);
544
+ process.stderr.write(
545
+ `warning: ${displayPath(fileResult.path)} ${sanitizeTerminalText(warning)}\n`,
546
+ );
543
547
  }
544
548
  for (const error of fileResult.errors) {
545
- process.stderr.write(`error: ${displayPath(fileResult.path)} ${error}\n`);
549
+ process.stderr.write(
550
+ `error: ${displayPath(fileResult.path)} ${sanitizeTerminalText(error)}\n`,
551
+ );
546
552
  }
547
553
 
548
554
  if (fileResult.errors.length > 0 || options.format === "stats") {
@@ -716,7 +722,9 @@ async function runFmt(args: string[]): Promise<void> {
716
722
 
717
723
  const files = collectVueFiles(patterns);
718
724
  if (files.length === 0) {
719
- process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\n`);
725
+ process.stderr.write(
726
+ `No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\n`,
727
+ );
720
728
  return;
721
729
  }
722
730
 
@@ -743,7 +751,7 @@ async function runFmt(args: string[]): Promise<void> {
743
751
  } catch (error) {
744
752
  errored++;
745
753
  process.stderr.write(
746
- `Error formatting ${displayPath(file)}: ${error instanceof Error ? error.message : String(error)}\n`,
754
+ `Error formatting ${displayPath(file)}: ${sanitizeTerminalText(error instanceof Error ? error.message : String(error))}\n`,
747
755
  );
748
756
  }
749
757
  }
@@ -923,12 +931,75 @@ function normalizePath(filePath: string): string {
923
931
  return filePath.split(path.sep).join("/");
924
932
  }
925
933
 
926
- function displayPath(filePath: string): string {
934
+ export function sanitizeTerminalText(value: unknown): string {
935
+ const text = String(value);
936
+ let sanitized = "";
937
+
938
+ for (let i = 0; i < text.length; i++) {
939
+ const code = text.charCodeAt(i);
940
+ if (code === 0x1b) {
941
+ i = skipTerminalEscapeSequence(text, i);
942
+ continue;
943
+ }
944
+ if (isUnsafeTerminalControl(code)) {
945
+ continue;
946
+ }
947
+ sanitized += text[i];
948
+ }
949
+
950
+ return sanitized;
951
+ }
952
+
953
+ function skipTerminalEscapeSequence(text: string, escapeIndex: number): number {
954
+ const introducer = text.charCodeAt(escapeIndex + 1);
955
+ if (introducer === 0x5b) {
956
+ return skipUntilAnsiFinalByte(text, escapeIndex + 2);
957
+ }
958
+ if (introducer === 0x5d || introducer === 0x50 || introducer === 0x5e || introducer === 0x5f) {
959
+ return skipUntilStringTerminator(text, escapeIndex + 2);
960
+ }
961
+ if (Number.isNaN(introducer)) {
962
+ return escapeIndex;
963
+ }
964
+ return escapeIndex + 1;
965
+ }
966
+
967
+ function skipUntilAnsiFinalByte(text: string, index: number): number {
968
+ for (let i = index; i < text.length; i++) {
969
+ const code = text.charCodeAt(i);
970
+ if (code >= 0x40 && code <= 0x7e) {
971
+ return i;
972
+ }
973
+ }
974
+ return text.length - 1;
975
+ }
976
+
977
+ function skipUntilStringTerminator(text: string, index: number): number {
978
+ for (let i = index; i < text.length; i++) {
979
+ const code = text.charCodeAt(i);
980
+ if (code === 0x07) {
981
+ return i;
982
+ }
983
+ if (code === 0x1b && text.charCodeAt(i + 1) === 0x5c) {
984
+ return i + 1;
985
+ }
986
+ }
987
+ return text.length - 1;
988
+ }
989
+
990
+ function isUnsafeTerminalControl(code: number): boolean {
991
+ if (code === 0x09 || code === 0x0a || code === 0x0d) {
992
+ return false;
993
+ }
994
+ return (code >= 0x00 && code <= 0x1f) || (code >= 0x7f && code <= 0x9f);
995
+ }
996
+
997
+ export function displayPath(filePath: string): string {
927
998
  const relative = path.relative(process.cwd(), filePath);
928
999
  if (relative && !relative.startsWith("..") && !path.isAbsolute(relative)) {
929
- return normalizePath(relative);
1000
+ return sanitizeTerminalText(normalizePath(relative));
930
1001
  }
931
- return normalizePath(filePath);
1002
+ return sanitizeTerminalText(normalizePath(filePath));
932
1003
  }
933
1004
 
934
1005
  function isVueFile(filePath: string): boolean {
@@ -1176,7 +1247,9 @@ function renderCheckText(
1176
1247
  totalWarnings += result.warningCount;
1177
1248
 
1178
1249
  if (options.includeVirtualTs && result.virtualTs) {
1179
- process.stderr.write(`\n=== ${displayPath(file)} ===\n${result.virtualTs}\n`);
1250
+ process.stderr.write(
1251
+ `\n=== ${displayPath(file)} ===\n${sanitizeTerminalText(result.virtualTs)}\n`,
1252
+ );
1180
1253
  }
1181
1254
 
1182
1255
  if (options.quiet || result.diagnostics.length === 0) {
@@ -1188,12 +1261,12 @@ function renderCheckText(
1188
1261
  for (const diagnostic of result.diagnostics) {
1189
1262
  const color = diagnostic.severity === "error" ? "\x1b[31m" : "\x1b[33m";
1190
1263
  const location = offsetToLineColumn(starts, diagnostic.start);
1191
- const code = diagnostic.code ? ` [${diagnostic.code}]` : "";
1264
+ const code = diagnostic.code ? ` [${sanitizeTerminalText(diagnostic.code)}]` : "";
1192
1265
  process.stdout.write(
1193
- ` ${color}${diagnostic.severity}:${location.line}:${location.column}\x1b[0m${code} ${diagnostic.message}\n`,
1266
+ ` ${color}${diagnostic.severity}:${location.line}:${location.column}\x1b[0m${code} ${sanitizeTerminalText(diagnostic.message)}\n`,
1194
1267
  );
1195
1268
  if (diagnostic.help) {
1196
- process.stdout.write(` help: ${diagnostic.help}\n`);
1269
+ process.stdout.write(` help: ${sanitizeTerminalText(diagnostic.help)}\n`);
1197
1270
  }
1198
1271
  }
1199
1272
  }
@@ -1249,7 +1322,9 @@ async function runCheck(args: string[]): Promise<void> {
1249
1322
 
1250
1323
  const files = collectVueFiles(patterns);
1251
1324
  if (files.length === 0) {
1252
- process.stderr.write(`No Vue files found matching inputs: ${JSON.stringify(patterns)}\n`);
1325
+ process.stderr.write(
1326
+ `No Vue files found matching inputs: ${sanitizeTerminalText(JSON.stringify(patterns))}\n`,
1327
+ );
1253
1328
  return;
1254
1329
  }
1255
1330
 
@@ -1337,7 +1412,7 @@ async function runLint(args: string[]): Promise<void> {
1337
1412
  });
1338
1413
 
1339
1414
  if (result.output) {
1340
- process.stdout.write(result.output);
1415
+ process.stdout.write(sanitizeTerminalText(result.output));
1341
1416
  if (!result.output.endsWith("\n")) {
1342
1417
  process.stdout.write("\n");
1343
1418
  }
@@ -1630,7 +1705,7 @@ async function main(): Promise<void> {
1630
1705
  }
1631
1706
  } else {
1632
1707
  printUsage();
1633
- console.error(`Unknown command: ${command}`);
1708
+ console.error(`Unknown command: ${sanitizeTerminalText(command)}`);
1634
1709
  console.error(
1635
1710
  "For commands not yet available via NAPI, install from source: cargo install vize",
1636
1711
  );
@@ -1638,35 +1713,12 @@ async function main(): Promise<void> {
1638
1713
  }
1639
1714
  }
1640
1715
 
1641
- if (!import.meta.vitest) {
1716
+ const isTestRuntime =
1717
+ Boolean(import.meta.vitest) || process.env.VITEST === "true" || process.env.NODE_ENV === "test";
1718
+
1719
+ if (!isTestRuntime) {
1642
1720
  void main().catch((error) => {
1643
- console.error(error instanceof Error ? error.message : String(error));
1721
+ console.error(sanitizeTerminalText(error instanceof Error ? error.message : String(error)));
1644
1722
  process.exit(1);
1645
1723
  });
1646
1724
  }
1647
-
1648
- if (import.meta.vitest) {
1649
- const { describe, expect, it } = import.meta.vitest;
1650
-
1651
- describe("shouldPreferWorkspaceBinding", () => {
1652
- it("detects the local workspace native package", () => {
1653
- expect(
1654
- shouldPreferWorkspaceBinding(
1655
- `${path.sep}Users${path.sep}example${path.sep}repo${path.sep}npm${path.sep}vize-native${path.sep}index.js`,
1656
- ),
1657
- ).toBe(true);
1658
- });
1659
-
1660
- it("ignores published platform packages", () => {
1661
- expect(
1662
- shouldPreferWorkspaceBinding(
1663
- `${path.sep}repo${path.sep}node_modules${path.sep}.pnpm${path.sep}@vizejs+native-darwin-arm64${path.sep}node_modules${path.sep}@vizejs${path.sep}native-darwin-arm64${path.sep}index.js`,
1664
- ),
1665
- ).toBe(false);
1666
- });
1667
-
1668
- it("returns false when the fallback package cannot be resolved", () => {
1669
- expect(shouldPreferWorkspaceBinding(null)).toBe(false);
1670
- });
1671
- });
1672
- }
@@ -34,6 +34,13 @@ export const LINT_RULE_NAMES = [
34
34
  "a11y/role-has-required-aria-props",
35
35
  "a11y/tabindex-no-positive",
36
36
  "a11y/use-list",
37
+ "ecosystem/nuxt-prefer-nuxt-link",
38
+ "ecosystem/pinia-prefer-store-to-refs",
39
+ "ecosystem/router-link-require-to",
40
+ "ecosystem/vue-i18n-no-missing-key",
41
+ "ecosystem/vue-router-prefer-named-link",
42
+ "ecosystem/vue-router-prefer-named-push",
43
+ "ecosystem/vue-test-utils-no-html-snapshot",
37
44
  "html/deprecated-attr",
38
45
  "html/deprecated-element",
39
46
  "html/id-duplication",