vize 0.92.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 +7 -1
- package/dist/cli.d.mts.map +1 -0
- package/dist/cli.mjs +57 -31
- package/dist/cli.mjs.map +1 -1
- package/dist/{config-XMCb6V8W.d.mts → config-tvugwdpH.d.mts} +2 -2
- package/dist/{config-XMCb6V8W.d.mts.map → config-tvugwdpH.d.mts.map} +1 -1
- package/dist/config.d.mts +1 -1
- package/dist/index.d.mts +1 -1
- package/package.json +9 -9
- package/src/cli.test.ts +45 -0
- package/src/cli.ts +96 -44
- package/src/types/rules.ts +7 -0
package/dist/cli.d.mts
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
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-
|
|
534
|
+
//# sourceMappingURL=config-tvugwdpH.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-
|
|
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-
|
|
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-
|
|
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.
|
|
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.
|
|
61
|
-
"@vizejs/native-darwin-x64": "0.
|
|
62
|
-
"@vizejs/native-linux-arm64-gnu": "0.
|
|
63
|
-
"@vizejs/native-linux-arm64-musl": "0.
|
|
64
|
-
"@vizejs/native-linux-x64-gnu": "0.
|
|
65
|
-
"@vizejs/native-linux-x64-musl": "0.
|
|
66
|
-
"@vizejs/native-win32-arm64-msvc": "0.
|
|
67
|
-
"@vizejs/native-win32-x64-msvc": "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"
|
package/src/cli.test.ts
ADDED
|
@@ -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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
}
|
package/src/types/rules.ts
CHANGED
|
@@ -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",
|