vize 0.0.1-alpha.20 → 0.0.1-alpha.99

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.
@@ -0,0 +1,126 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { transform } from "oxc-transform";
5
+
6
+ //#region src/config.ts
7
+ const CONFIG_FILE_NAMES = [
8
+ "vize.config.ts",
9
+ "vize.config.js",
10
+ "vize.config.mjs",
11
+ "vize.config.json"
12
+ ];
13
+ const DEFAULT_CONFIG_ENV = {
14
+ mode: "development",
15
+ command: "serve"
16
+ };
17
+ /**
18
+ * Define a Vize configuration with type checking.
19
+ * Accepts a plain object or a function that receives ConfigEnv.
20
+ */
21
+ function defineConfig(config) {
22
+ return config;
23
+ }
24
+ /**
25
+ * Load vize.config file from the specified directory
26
+ */
27
+ async function loadConfig(root, options = {}) {
28
+ const { mode = "root", configFile, env } = options;
29
+ if (mode === "none") return null;
30
+ if (configFile) {
31
+ const absolutePath = path.isAbsolute(configFile) ? configFile : path.resolve(root, configFile);
32
+ if (fs.existsSync(absolutePath)) return loadConfigFile(absolutePath, env);
33
+ return null;
34
+ }
35
+ if (mode === "auto") {
36
+ const configPath$1 = findConfigFileAuto(root);
37
+ if (!configPath$1) return null;
38
+ return loadConfigFile(configPath$1, env);
39
+ }
40
+ const configPath = findConfigFileInDir(root);
41
+ if (!configPath) return null;
42
+ return loadConfigFile(configPath, env);
43
+ }
44
+ /**
45
+ * Find config file in a specific directory
46
+ */
47
+ function findConfigFileInDir(dir) {
48
+ for (const name of CONFIG_FILE_NAMES) {
49
+ const filePath = path.join(dir, name);
50
+ if (fs.existsSync(filePath)) return filePath;
51
+ }
52
+ return null;
53
+ }
54
+ /**
55
+ * Find config file by searching from cwd upward
56
+ */
57
+ function findConfigFileAuto(startDir) {
58
+ let currentDir = path.resolve(startDir);
59
+ const root = path.parse(currentDir).root;
60
+ while (currentDir !== root) {
61
+ const configPath = findConfigFileInDir(currentDir);
62
+ if (configPath) return configPath;
63
+ currentDir = path.dirname(currentDir);
64
+ }
65
+ return null;
66
+ }
67
+ /**
68
+ * Load and evaluate a config file
69
+ */
70
+ async function loadConfigFile(filePath, env) {
71
+ if (!fs.existsSync(filePath)) return null;
72
+ const ext = path.extname(filePath);
73
+ if (ext === ".json") {
74
+ const content = fs.readFileSync(filePath, "utf-8");
75
+ return JSON.parse(content);
76
+ }
77
+ if (ext === ".ts") return loadTypeScriptConfig(filePath, env);
78
+ return loadESMConfig(filePath, env);
79
+ }
80
+ /**
81
+ * Resolve a UserConfigExport to a VizeConfig
82
+ */
83
+ async function resolveConfigExport(exported, env) {
84
+ if (typeof exported === "function") return exported(env ?? DEFAULT_CONFIG_ENV);
85
+ return exported;
86
+ }
87
+ /**
88
+ * Load TypeScript config file using oxc-transform
89
+ */
90
+ async function loadTypeScriptConfig(filePath, env) {
91
+ const source = fs.readFileSync(filePath, "utf-8");
92
+ const result = transform(filePath, source, { typescript: { onlyRemoveTypeImports: true } });
93
+ const code = result.code;
94
+ const tempFile = filePath.replace(/\.ts$/, `.temp.${Date.now()}.mjs`);
95
+ fs.writeFileSync(tempFile, code);
96
+ try {
97
+ const fileUrl = pathToFileURL(tempFile).href;
98
+ const module = await import(fileUrl);
99
+ const exported = module.default || module;
100
+ return resolveConfigExport(exported, env);
101
+ } finally {
102
+ fs.unlinkSync(tempFile);
103
+ }
104
+ }
105
+ /**
106
+ * Load ESM config file
107
+ */
108
+ async function loadESMConfig(filePath, env) {
109
+ const fileUrl = pathToFileURL(filePath).href;
110
+ const module = await import(fileUrl);
111
+ const exported = module.default || module;
112
+ return resolveConfigExport(exported, env);
113
+ }
114
+ /**
115
+ * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects
116
+ */
117
+ function normalizeGlobalTypes(config) {
118
+ const result = {};
119
+ for (const [key, value] of Object.entries(config)) if (typeof value === "string") result[key] = { type: value };
120
+ else result[key] = value;
121
+ return result;
122
+ }
123
+
124
+ //#endregion
125
+ export { defineConfig, loadConfig, normalizeGlobalTypes };
126
+ //# sourceMappingURL=config-CVmInrFP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-CVmInrFP.js","names":["DEFAULT_CONFIG_ENV: ConfigEnv","config: UserConfigExport","root: string","options: LoadConfigOptions","configPath","dir: string","startDir: string","filePath: string","env?: ConfigEnv","exported: UserConfigExport","config: GlobalTypesConfig","result: Record<string, GlobalTypeDeclaration>"],"sources":["../src/config.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { transform } from \"oxc-transform\";\nimport type {\n VizeConfig,\n LoadConfigOptions,\n UserConfigExport,\n ConfigEnv,\n GlobalTypesConfig,\n GlobalTypeDeclaration,\n} from \"./types.js\";\n\nconst CONFIG_FILE_NAMES = [\n \"vize.config.ts\",\n \"vize.config.js\",\n \"vize.config.mjs\",\n \"vize.config.json\",\n];\n\nconst DEFAULT_CONFIG_ENV: ConfigEnv = {\n mode: \"development\",\n command: \"serve\",\n};\n\n/**\n * Define a Vize configuration with type checking.\n * Accepts a plain object or a function that receives ConfigEnv.\n */\nexport function defineConfig(config: UserConfigExport): UserConfigExport {\n return config;\n}\n\n/**\n * Load vize.config file from the specified directory\n */\nexport async function loadConfig(\n root: string,\n options: LoadConfigOptions = {},\n): Promise<VizeConfig | null> {\n const { mode = \"root\", configFile, env } = options;\n\n if (mode === \"none\") {\n return null;\n }\n\n // Custom config file path\n if (configFile) {\n const absolutePath = path.isAbsolute(configFile) ? configFile : path.resolve(root, configFile);\n if (fs.existsSync(absolutePath)) {\n return loadConfigFile(absolutePath, env);\n }\n return null;\n }\n\n // Search for config file\n if (mode === \"auto\") {\n const configPath = findConfigFileAuto(root);\n if (!configPath) {\n return null;\n }\n return loadConfigFile(configPath, env);\n }\n\n // mode === \"root\"\n const configPath = findConfigFileInDir(root);\n if (!configPath) {\n return null;\n }\n return loadConfigFile(configPath, env);\n}\n\n/**\n * Find config file in a specific directory\n */\nfunction findConfigFileInDir(dir: string): string | null {\n for (const name of CONFIG_FILE_NAMES) {\n const filePath = path.join(dir, name);\n if (fs.existsSync(filePath)) {\n return filePath;\n }\n }\n return null;\n}\n\n/**\n * Find config file by searching from cwd upward\n */\nfunction findConfigFileAuto(startDir: string): string | null {\n let currentDir = path.resolve(startDir);\n const root = path.parse(currentDir).root;\n\n while (currentDir !== root) {\n const configPath = findConfigFileInDir(currentDir);\n if (configPath) {\n return configPath;\n }\n currentDir = path.dirname(currentDir);\n }\n\n return null;\n}\n\n/**\n * Load and evaluate a config file\n */\nasync function loadConfigFile(filePath: string, env?: ConfigEnv): Promise<VizeConfig | null> {\n if (!fs.existsSync(filePath)) {\n return null;\n }\n\n const ext = path.extname(filePath);\n\n if (ext === \".json\") {\n const content = fs.readFileSync(filePath, \"utf-8\");\n return JSON.parse(content);\n }\n\n if (ext === \".ts\") {\n return loadTypeScriptConfig(filePath, env);\n }\n\n // .js, .mjs - ESM\n return loadESMConfig(filePath, env);\n}\n\n/**\n * Resolve a UserConfigExport to a VizeConfig\n */\nasync function resolveConfigExport(\n exported: UserConfigExport,\n env?: ConfigEnv,\n): Promise<VizeConfig> {\n if (typeof exported === \"function\") {\n return exported(env ?? DEFAULT_CONFIG_ENV);\n }\n return exported;\n}\n\n/**\n * Load TypeScript config file using oxc-transform\n */\nasync function loadTypeScriptConfig(filePath: string, env?: ConfigEnv): Promise<VizeConfig> {\n const source = fs.readFileSync(filePath, \"utf-8\");\n const result = transform(filePath, source, {\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n const code = result.code;\n\n // Write to temp file and import (use Date.now() to avoid race conditions)\n const tempFile = filePath.replace(/\\.ts$/, `.temp.${Date.now()}.mjs`);\n fs.writeFileSync(tempFile, code);\n\n try {\n const fileUrl = pathToFileURL(tempFile).href;\n const module = await import(fileUrl);\n const exported: UserConfigExport = module.default || module;\n return resolveConfigExport(exported, env);\n } finally {\n fs.unlinkSync(tempFile);\n }\n}\n\n/**\n * Load ESM config file\n */\nasync function loadESMConfig(filePath: string, env?: ConfigEnv): Promise<VizeConfig> {\n const fileUrl = pathToFileURL(filePath).href;\n const module = await import(fileUrl);\n const exported: UserConfigExport = module.default || module;\n return resolveConfigExport(exported, env);\n}\n\n/**\n * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects\n */\nexport function normalizeGlobalTypes(\n config: GlobalTypesConfig,\n): Record<string, GlobalTypeDeclaration> {\n const result: Record<string, GlobalTypeDeclaration> = {};\n for (const [key, value] of Object.entries(config)) {\n if (typeof value === \"string\") {\n result[key] = { type: value };\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n"],"mappings":";;;;;;AAaA,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;AACD;AAED,MAAMA,qBAAgC;CACpC,MAAM;CACN,SAAS;AACV;;;;;AAMD,SAAgB,aAAaC,QAA4C;AACvE,QAAO;AACR;;;;AAKD,eAAsB,WACpBC,MACAC,UAA6B,CAAE,GACH;CAC5B,MAAM,EAAE,OAAO,QAAQ,YAAY,KAAK,GAAG;AAE3C,KAAI,SAAS,OACX,QAAO;AAIT,KAAI,YAAY;EACd,MAAM,eAAe,KAAK,WAAW,WAAW,GAAG,aAAa,KAAK,QAAQ,MAAM,WAAW;AAC9F,MAAI,GAAG,WAAW,aAAa,CAC7B,QAAO,eAAe,cAAc,IAAI;AAE1C,SAAO;CACR;AAGD,KAAI,SAAS,QAAQ;EACnB,MAAMC,eAAa,mBAAmB,KAAK;AAC3C,OAAKA,aACH,QAAO;AAET,SAAO,eAAeA,cAAY,IAAI;CACvC;CAGD,MAAM,aAAa,oBAAoB,KAAK;AAC5C,MAAK,WACH,QAAO;AAET,QAAO,eAAe,YAAY,IAAI;AACvC;;;;AAKD,SAAS,oBAAoBC,KAA4B;AACvD,MAAK,MAAM,QAAQ,mBAAmB;EACpC,MAAM,WAAW,KAAK,KAAK,KAAK,KAAK;AACrC,MAAI,GAAG,WAAW,SAAS,CACzB,QAAO;CAEV;AACD,QAAO;AACR;;;;AAKD,SAAS,mBAAmBC,UAAiC;CAC3D,IAAI,aAAa,KAAK,QAAQ,SAAS;CACvC,MAAM,OAAO,KAAK,MAAM,WAAW,CAAC;AAEpC,QAAO,eAAe,MAAM;EAC1B,MAAM,aAAa,oBAAoB,WAAW;AAClD,MAAI,WACF,QAAO;AAET,eAAa,KAAK,QAAQ,WAAW;CACtC;AAED,QAAO;AACR;;;;AAKD,eAAe,eAAeC,UAAkBC,KAA6C;AAC3F,MAAK,GAAG,WAAW,SAAS,CAC1B,QAAO;CAGT,MAAM,MAAM,KAAK,QAAQ,SAAS;AAElC,KAAI,QAAQ,SAAS;EACnB,MAAM,UAAU,GAAG,aAAa,UAAU,QAAQ;AAClD,SAAO,KAAK,MAAM,QAAQ;CAC3B;AAED,KAAI,QAAQ,MACV,QAAO,qBAAqB,UAAU,IAAI;AAI5C,QAAO,cAAc,UAAU,IAAI;AACpC;;;;AAKD,eAAe,oBACbC,UACAD,KACqB;AACrB,YAAW,aAAa,WACtB,QAAO,SAAS,OAAO,mBAAmB;AAE5C,QAAO;AACR;;;;AAKD,eAAe,qBAAqBD,UAAkBC,KAAsC;CAC1F,MAAM,SAAS,GAAG,aAAa,UAAU,QAAQ;CACjD,MAAM,SAAS,UAAU,UAAU,QAAQ,EACzC,YAAY,EACV,uBAAuB,KACxB,EACF,EAAC;CAEF,MAAM,OAAO,OAAO;CAGpB,MAAM,WAAW,SAAS,QAAQ,UAAU,QAAQ,KAAK,KAAK,CAAC,MAAM;AACrE,IAAG,cAAc,UAAU,KAAK;AAEhC,KAAI;EACF,MAAM,UAAU,cAAc,SAAS,CAAC;EACxC,MAAM,SAAS,MAAM,OAAO;EAC5B,MAAMC,WAA6B,OAAO,WAAW;AACrD,SAAO,oBAAoB,UAAU,IAAI;CAC1C,UAAS;AACR,KAAG,WAAW,SAAS;CACxB;AACF;;;;AAKD,eAAe,cAAcF,UAAkBC,KAAsC;CACnF,MAAM,UAAU,cAAc,SAAS,CAAC;CACxC,MAAM,SAAS,MAAM,OAAO;CAC5B,MAAMC,WAA6B,OAAO,WAAW;AACrD,QAAO,oBAAoB,UAAU,IAAI;AAC1C;;;;AAKD,SAAgB,qBACdC,QACuC;CACvC,MAAMC,SAAgD,CAAE;AACxD,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,OAAO,CAC/C,YAAW,UAAU,SACnB,QAAO,OAAO,EAAE,MAAM,MAAO;KAE7B,QAAO,OAAO;AAGlB,QAAO;AACR"}
@@ -0,0 +1,422 @@
1
+ //#region src/types.d.ts
2
+ type MaybePromise<T> = T | Promise<T>;
3
+ interface ConfigEnv {
4
+ mode: string;
5
+ command: "serve" | "build" | "check" | "lint" | "fmt";
6
+ isSsrBuild?: boolean;
7
+ }
8
+ type UserConfigExport = VizeConfig | ((env: ConfigEnv) => MaybePromise<VizeConfig>);
9
+ type RuleSeverity = "off" | "warn" | "error";
10
+ type RuleCategory = "correctness" | "suspicious" | "style" | "perf" | "a11y" | "security";
11
+ /**
12
+ * Vize configuration options
13
+ */
14
+ interface VizeConfig {
15
+ /**
16
+ * Vue compiler options
17
+ */
18
+ compiler?: CompilerConfig;
19
+ /**
20
+ * Vite plugin options
21
+ */
22
+ vite?: VitePluginConfig;
23
+ /**
24
+ * Linter options
25
+ */
26
+ linter?: LinterConfig;
27
+ /**
28
+ * Type checker options
29
+ */
30
+ typeChecker?: TypeCheckerConfig;
31
+ /**
32
+ * Formatter options
33
+ */
34
+ formatter?: FormatterConfig;
35
+ /**
36
+ * LSP options
37
+ */
38
+ lsp?: LspConfig;
39
+ /**
40
+ * Musea component gallery options
41
+ */
42
+ musea?: MuseaConfig;
43
+ /**
44
+ * Global type declarations
45
+ */
46
+ globalTypes?: GlobalTypesConfig;
47
+ }
48
+ /**
49
+ * Compiler configuration
50
+ */
51
+ interface CompilerConfig {
52
+ /**
53
+ * Compilation mode
54
+ * @default 'module'
55
+ */
56
+ mode?: "module" | "function";
57
+ /**
58
+ * Enable Vapor mode compilation
59
+ * @default false
60
+ */
61
+ vapor?: boolean;
62
+ /**
63
+ * Enable SSR mode
64
+ * @default false
65
+ */
66
+ ssr?: boolean;
67
+ /**
68
+ * Enable source map generation
69
+ * @default true in development, false in production
70
+ */
71
+ sourceMap?: boolean;
72
+ /**
73
+ * Prefix template identifiers with _ctx
74
+ * @default false
75
+ */
76
+ prefixIdentifiers?: boolean;
77
+ /**
78
+ * Hoist static nodes
79
+ * @default true
80
+ */
81
+ hoistStatic?: boolean;
82
+ /**
83
+ * Cache v-on handlers
84
+ * @default true
85
+ */
86
+ cacheHandlers?: boolean;
87
+ /**
88
+ * Enable TypeScript parsing in <script> blocks
89
+ * @default true
90
+ */
91
+ isTs?: boolean;
92
+ /**
93
+ * Script file extension for generated output
94
+ * @default 'ts'
95
+ */
96
+ scriptExt?: "ts" | "js";
97
+ /**
98
+ * Module name for runtime imports
99
+ * @default 'vue'
100
+ */
101
+ runtimeModuleName?: string;
102
+ /**
103
+ * Global variable name for runtime (IIFE builds)
104
+ * @default 'Vue'
105
+ */
106
+ runtimeGlobalName?: string;
107
+ }
108
+ /**
109
+ * Vite plugin configuration
110
+ */
111
+ interface VitePluginConfig {
112
+ /**
113
+ * Files to include in compilation
114
+ * @default /\.vue$/
115
+ */
116
+ include?: string | RegExp | (string | RegExp)[];
117
+ /**
118
+ * Files to exclude from compilation
119
+ * @default /node_modules/
120
+ */
121
+ exclude?: string | RegExp | (string | RegExp)[];
122
+ /**
123
+ * Glob patterns to scan for .vue files during pre-compilation
124
+ * @default ['**\/*.vue']
125
+ */
126
+ scanPatterns?: string[];
127
+ /**
128
+ * Glob patterns to ignore during pre-compilation
129
+ * @default ['node_modules/**', 'dist/**', '.git/**']
130
+ */
131
+ ignorePatterns?: string[];
132
+ }
133
+ /**
134
+ * Linter configuration
135
+ */
136
+ interface LinterConfig {
137
+ /**
138
+ * Enable linting
139
+ */
140
+ enabled?: boolean;
141
+ /**
142
+ * Rules to enable/disable
143
+ */
144
+ rules?: Record<string, RuleSeverity>;
145
+ /**
146
+ * Category-level severity overrides
147
+ */
148
+ categories?: Partial<Record<RuleCategory, RuleSeverity>>;
149
+ }
150
+ /**
151
+ * Type checker configuration
152
+ */
153
+ interface TypeCheckerConfig {
154
+ /**
155
+ * Enable type checking
156
+ * @default false
157
+ */
158
+ enabled?: boolean;
159
+ /**
160
+ * Enable strict mode
161
+ * @default false
162
+ */
163
+ strict?: boolean;
164
+ /**
165
+ * Check component props
166
+ * @default true
167
+ */
168
+ checkProps?: boolean;
169
+ /**
170
+ * Check component emits
171
+ * @default true
172
+ */
173
+ checkEmits?: boolean;
174
+ /**
175
+ * Check template bindings
176
+ * @default true
177
+ */
178
+ checkTemplateBindings?: boolean;
179
+ /**
180
+ * Path to tsconfig.json
181
+ * @default auto-detected
182
+ */
183
+ tsconfig?: string;
184
+ /**
185
+ * Path to tsgo binary
186
+ */
187
+ tsgoPath?: string;
188
+ }
189
+ /**
190
+ * Formatter configuration
191
+ */
192
+ interface FormatterConfig {
193
+ /**
194
+ * Max line width
195
+ * @default 80
196
+ */
197
+ printWidth?: number;
198
+ /**
199
+ * Indentation width
200
+ * @default 2
201
+ */
202
+ tabWidth?: number;
203
+ /**
204
+ * Use tabs for indentation
205
+ * @default false
206
+ */
207
+ useTabs?: boolean;
208
+ /**
209
+ * Print semicolons
210
+ * @default true
211
+ */
212
+ semi?: boolean;
213
+ /**
214
+ * Use single quotes
215
+ * @default false
216
+ */
217
+ singleQuote?: boolean;
218
+ /**
219
+ * Trailing commas
220
+ * @default 'all'
221
+ */
222
+ trailingComma?: "all" | "none" | "es5";
223
+ }
224
+ /**
225
+ * LSP configuration
226
+ */
227
+ interface LspConfig {
228
+ /**
229
+ * Enable LSP
230
+ * @default true
231
+ */
232
+ enabled?: boolean;
233
+ /**
234
+ * Enable diagnostics
235
+ * @default true
236
+ */
237
+ diagnostics?: boolean;
238
+ /**
239
+ * Enable completions
240
+ * @default true
241
+ */
242
+ completion?: boolean;
243
+ /**
244
+ * Enable hover information
245
+ * @default true
246
+ */
247
+ hover?: boolean;
248
+ /**
249
+ * Enable go-to-definition
250
+ * @default true
251
+ */
252
+ definition?: boolean;
253
+ /**
254
+ * Enable formatting via LSP
255
+ * @default true
256
+ */
257
+ formatting?: boolean;
258
+ /**
259
+ * Enable code actions
260
+ * @default true
261
+ */
262
+ codeActions?: boolean;
263
+ /**
264
+ * Use tsgo for type checking in LSP
265
+ * @default false
266
+ */
267
+ tsgo?: boolean;
268
+ }
269
+ /**
270
+ * VRT (Visual Regression Testing) configuration for Musea
271
+ */
272
+ interface MuseaVrtConfig {
273
+ /**
274
+ * Threshold for pixel comparison (0-1)
275
+ * @default 0.1
276
+ */
277
+ threshold?: number;
278
+ /**
279
+ * Output directory for screenshots
280
+ * @default '__musea_snapshots__'
281
+ */
282
+ outDir?: string;
283
+ /**
284
+ * Viewport sizes
285
+ */
286
+ viewports?: Array<{
287
+ width: number;
288
+ height: number;
289
+ name?: string;
290
+ }>;
291
+ }
292
+ /**
293
+ * A11y configuration for Musea
294
+ */
295
+ interface MuseaA11yConfig {
296
+ /**
297
+ * Enable a11y checking
298
+ * @default false
299
+ */
300
+ enabled?: boolean;
301
+ /**
302
+ * Axe-core rules to enable/disable
303
+ */
304
+ rules?: Record<string, boolean>;
305
+ }
306
+ /**
307
+ * Autogen configuration for Musea
308
+ */
309
+ interface MuseaAutogenConfig {
310
+ /**
311
+ * Enable auto-generation of variants
312
+ * @default false
313
+ */
314
+ enabled?: boolean;
315
+ /**
316
+ * Max variants to generate per component
317
+ * @default 10
318
+ */
319
+ maxVariants?: number;
320
+ }
321
+ /**
322
+ * Musea component gallery configuration
323
+ */
324
+ interface MuseaConfig {
325
+ /**
326
+ * Glob patterns for art files
327
+ * @default ['**\/*.art.vue']
328
+ */
329
+ include?: string[];
330
+ /**
331
+ * Glob patterns to exclude
332
+ * @default ['node_modules/**', 'dist/**']
333
+ */
334
+ exclude?: string[];
335
+ /**
336
+ * Base path for gallery
337
+ * @default '/__musea__'
338
+ */
339
+ basePath?: string;
340
+ /**
341
+ * Enable Storybook compatibility
342
+ * @default false
343
+ */
344
+ storybookCompat?: boolean;
345
+ /**
346
+ * Enable inline art detection in .vue files
347
+ * @default false
348
+ */
349
+ inlineArt?: boolean;
350
+ /**
351
+ * VRT configuration
352
+ */
353
+ vrt?: MuseaVrtConfig;
354
+ /**
355
+ * A11y configuration
356
+ */
357
+ a11y?: MuseaA11yConfig;
358
+ /**
359
+ * Autogen configuration
360
+ */
361
+ autogen?: MuseaAutogenConfig;
362
+ }
363
+ /**
364
+ * Global type declaration
365
+ */
366
+ interface GlobalTypeDeclaration {
367
+ /**
368
+ * TypeScript type string
369
+ */
370
+ type: string;
371
+ /**
372
+ * Default value
373
+ */
374
+ defaultValue?: string;
375
+ }
376
+ /**
377
+ * Global types configuration
378
+ */
379
+ type GlobalTypesConfig = Record<string, GlobalTypeDeclaration | string>;
380
+ /**
381
+ * Options for loading vize.config file
382
+ */
383
+ interface LoadConfigOptions {
384
+ /**
385
+ * Config file search mode
386
+ * - 'root': Search only in the specified root directory
387
+ * - 'auto': Search from cwd upward until finding a config file
388
+ * - 'none': Don't load config file
389
+ * @default 'root'
390
+ */
391
+ mode?: "root" | "auto" | "none";
392
+ /**
393
+ * Custom config file path (overrides automatic search)
394
+ */
395
+ configFile?: string;
396
+ /**
397
+ * Config environment for dynamic config resolution
398
+ */
399
+ env?: ConfigEnv;
400
+ } //#endregion
401
+ //#region src/config.d.ts
402
+
403
+ //# sourceMappingURL=types.d.ts.map
404
+ /**
405
+ * Define a Vize configuration with type checking.
406
+ * Accepts a plain object or a function that receives ConfigEnv.
407
+ */
408
+ declare function defineConfig(config: UserConfigExport): UserConfigExport;
409
+ /**
410
+ * Load vize.config file from the specified directory
411
+ */
412
+ declare function loadConfig(root: string, options?: LoadConfigOptions): Promise<VizeConfig | null>;
413
+ /**
414
+ * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects
415
+ */
416
+ declare function normalizeGlobalTypes(config: GlobalTypesConfig): Record<string, GlobalTypeDeclaration>;
417
+
418
+ //#endregion
419
+ //# sourceMappingURL=config.d.ts.map
420
+
421
+ export { CompilerConfig, ConfigEnv, FormatterConfig, GlobalTypeDeclaration, GlobalTypesConfig, LinterConfig, LoadConfigOptions, LspConfig, MaybePromise, MuseaA11yConfig, MuseaAutogenConfig, MuseaConfig, MuseaVrtConfig, RuleCategory, RuleSeverity, TypeCheckerConfig, UserConfigExport, VitePluginConfig, VizeConfig, defineConfig as defineConfig$1, loadConfig as loadConfig$1, normalizeGlobalTypes as normalizeGlobalTypes$1 };
422
+ //# sourceMappingURL=config-Cu4Hn1JG.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-Cu4Hn1JG.d.ts","names":[],"sources":["../src/types.ts","../src/config.ts"],"sourcesContent":null,"mappings":";KAIY,kBAAkB,IAAI,QAAQ;AAA9B,UAEK,SAAA,CAFO;EAAA,IAAA,EAAA,MAAA;EAAA,OAAM,EAAA,OAAA,GAAA,OAAA,GAAA,OAAA,GAAA,MAAA,GAAA,KAAA;EAAC,UAAW,CAAA,EAAA,OAAA;;AAAD,KAQ7B,gBAAA,GAAmB,UARU,GAAA,CAAA,CAAA,GAAA,EAQU,SARV,EAAA,GAQwB,YARxB,CAQqC,UARrC,CAAA,CAAA;AAExB,KAYL,YAAA,GAZc,KAAA,GAAA,MAAA,GAAA,OAAA;AAMd,KAQA,YAAA,GARgB,aAAA,GAAA,YAAA,GAAA,OAAA,GAAA,MAAA,GAAA,MAAA,GAAA,UAAA;;;;AAAkD,UAiB7D,UAAA,CAjB6D;EAAU;AAAX;AAM7E;EAEY,QAAA,CAAA,EAaC,cAbW;;;;EASP,IAAA,CAAA,EASR,gBATkB;EAAA;;;EASF,MAKd,CAAA,EAAA,YAAA;EAAY;;;EAeN,WAKP,CAAA,EAfM,iBAeN;EAAW;AAKY;;cAfnB;;AAyBd;;QApBQ;;AA+FR;;EAAiC,KAKZ,CAAA,EA/FX,WA+FW;EAAM;;;EAMmB,WAAA,CAAA,EAhG9B,iBAgG8B;;;;AAsB9C;AAA6B,UA5GZ,cAAA,CA4GY;EAAA;;;;EAc2B,IAAjC,CAAA,EAAA,QAAA,GAAA,UAAA;EAAM;AAAP;;;;EAUL;;;;EAkDA,GAAA,CAAA,EAAA,OAAA;;;;AA6CjB;;;;AAyDA;;;;AAsBA;;;;EAgBiB;;;;EAiBA,aAAA,CAAW,EAAA,OAAA;EAAA;;;;EA4CE,IAAA,CAAA,EAAA,OAAA;;;;AAU9B;;;;AAeA;;EAA6B,iBAAkB,CAAA,EAAA,MAAA;EAAqB;AAA9B;;;;AAStC;;;;UAtViB,gBAAA;;;;AC5HjB;EAA4B,OAAA,CAAA,EAAA,MAAA,GDiIP,MCjIO,GAAA,CAAA,MAAA,GDiIY,MCjIZ,CAAA,EAAA;EAAA;;AAA4C;;qBDuInD,mBAAmB;;AChIxC;;;EAEiC,YACtB,CAAA,EAAA,MAAA,EAAA;EAAU;AAAX;;;;AA4IV;;;;AAEG,UDKc,YAAA,CCLd;EAAM;;;;;;;UDcC,eAAe;;;;eAKV,QAAQ,OAAO,cAAc;;;;;UAU3B,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAkDA,eAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6CA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAyDA,cAAA;;;;;;;;;;;;;;cAgBH;;;;;;;;;UAMG,eAAA;;;;;;;;;UAUP;;;;;UAMO,kBAAA;;;;;;;;;;;;;;;UAiBA,WAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkCT;;;;SAKC;;;;YAKG;;;;;UAUK,qBAAA;;;;;;;;;;;;;KAeL,iBAAA,GAAoB,eAAe;;;;UAS9B,iBAAA;;;;;;;;;;;;;;;;QAkBT;;;;;AA7fR;;;;AAAkC,iBCyBlB,YAAA,CDzBkB,MAAA,ECyBG,gBDzBH,CAAA,ECyBsB,gBDzBtB;AAAO;AAEzC;AAMA;AAA4B,iBCwBN,UAAA,CDxBM,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EC0BjB,iBD1BiB,CAAA,EC2BzB,OD3ByB,CC2BjB,UD3BiB,GAAA,IAAA,CAAA;;;;AAAqC,iBCuKjD,oBAAA,CDvKiD,MAAA,ECwKvD,iBDxKuD,CAAA,ECyK9D,MDzK8D,CAAA,MAAA,ECyK/C,qBDzK+C,CAAA;;;AAAY"}
@@ -0,0 +1,2 @@
1
+ import { defineConfig$1 as defineConfig, loadConfig$1 as loadConfig, normalizeGlobalTypes$1 as normalizeGlobalTypes } from "./config-Cu4Hn1JG.js";
2
+ export { defineConfig, loadConfig, normalizeGlobalTypes };
package/dist/config.js ADDED
@@ -0,0 +1,3 @@
1
+ import { defineConfig, loadConfig, normalizeGlobalTypes } from "./config-CVmInrFP.js";
2
+
3
+ export { defineConfig, loadConfig, normalizeGlobalTypes };
@@ -0,0 +1,2 @@
1
+ import { CompilerConfig, ConfigEnv, FormatterConfig, GlobalTypeDeclaration, GlobalTypesConfig, LinterConfig, LoadConfigOptions, LspConfig, MaybePromise, MuseaA11yConfig, MuseaAutogenConfig, MuseaConfig, MuseaVrtConfig, RuleCategory, RuleSeverity, TypeCheckerConfig, UserConfigExport, VitePluginConfig, VizeConfig, defineConfig$1 as defineConfig, loadConfig$1 as loadConfig, normalizeGlobalTypes$1 as normalizeGlobalTypes } from "./config-Cu4Hn1JG.js";
2
+ export { CompilerConfig, ConfigEnv, FormatterConfig, GlobalTypeDeclaration, GlobalTypesConfig, LinterConfig, LoadConfigOptions, LspConfig, MaybePromise, MuseaA11yConfig, MuseaAutogenConfig, MuseaConfig, MuseaVrtConfig, RuleCategory, RuleSeverity, TypeCheckerConfig, UserConfigExport, VitePluginConfig, VizeConfig, defineConfig, loadConfig, normalizeGlobalTypes };
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import { defineConfig, loadConfig, normalizeGlobalTypes } from "./config-CVmInrFP.js";
2
+
3
+ export { defineConfig, loadConfig, normalizeGlobalTypes };
package/package.json CHANGED
@@ -1,22 +1,36 @@
1
1
  {
2
2
  "name": "vize",
3
- "version": "0.0.1-alpha.20",
3
+ "version": "0.0.1-alpha.99",
4
4
  "description": "Vize - High-performance Vue.js toolchain in Rust",
5
5
  "publishConfig": {
6
- "provenance": true,
6
+ "provenance": false,
7
7
  "access": "public"
8
8
  },
9
9
  "type": "module",
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ },
17
+ "./config": {
18
+ "import": "./dist/config.js",
19
+ "types": "./dist/config.d.ts"
20
+ }
21
+ },
10
22
  "bin": {
11
23
  "vize": "bin/vize"
12
24
  },
13
25
  "files": [
14
26
  "bin",
15
- "scripts"
27
+ "scripts",
28
+ "dist",
29
+ "src"
16
30
  ],
17
31
  "repository": {
18
32
  "type": "git",
19
- "url": "https://github.com/vizejs/vize"
33
+ "url": "https://github.com/ubugeeei/vize"
20
34
  },
21
35
  "keywords": [
22
36
  "vue",
@@ -31,7 +45,20 @@
31
45
  "engines": {
32
46
  "node": ">=18"
33
47
  },
48
+ "dependencies": {
49
+ "oxc-transform": "^0.56.0"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^22.0.0",
53
+ "tsdown": "^0.9.0",
54
+ "typescript": "~5.6.0"
55
+ },
34
56
  "scripts": {
35
- "postinstall": "node scripts/postinstall.js"
57
+ "build": "tsdown",
58
+ "postinstall": "node scripts/postinstall.js",
59
+ "lint": "oxlint --deny-warnings --type-aware --tsconfig tsconfig.json",
60
+ "lint:fix": "oxlint --type-aware --tsconfig tsconfig.json --fix",
61
+ "fmt": "oxfmt --write src",
62
+ "fmt:check": "oxfmt src"
36
63
  }
37
64
  }
@@ -4,7 +4,6 @@ import { createWriteStream, chmodSync, existsSync, mkdirSync, unlinkSync } from
4
4
  import { dirname, join } from "path";
5
5
  import { fileURLToPath } from "url";
6
6
  import { pipeline } from "stream/promises";
7
- import { createGunzip } from "zlib";
8
7
 
9
8
  const __dirname = dirname(fileURLToPath(import.meta.url));
10
9
  const packageJson = await import("../package.json", { with: { type: "json" } });
@@ -130,9 +129,9 @@ async function extractTarGz(archivePath, destDir, binaryName) {
130
129
  }
131
130
  }
132
131
 
133
- async function extractZip(archivePath, destDir, binaryName) {
132
+ async function extractZip(archivePath, destDir, _binaryName) {
134
133
  const { execSync } = await import("child_process");
135
134
  execSync(`unzip -o "${archivePath}" -d "${destDir}"`, { stdio: "inherit" });
136
135
  }
137
136
 
138
- main();
137
+ void main();
package/src/config.ts ADDED
@@ -0,0 +1,192 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { transform } from "oxc-transform";
5
+ import type {
6
+ VizeConfig,
7
+ LoadConfigOptions,
8
+ UserConfigExport,
9
+ ConfigEnv,
10
+ GlobalTypesConfig,
11
+ GlobalTypeDeclaration,
12
+ } from "./types.js";
13
+
14
+ const CONFIG_FILE_NAMES = [
15
+ "vize.config.ts",
16
+ "vize.config.js",
17
+ "vize.config.mjs",
18
+ "vize.config.json",
19
+ ];
20
+
21
+ const DEFAULT_CONFIG_ENV: ConfigEnv = {
22
+ mode: "development",
23
+ command: "serve",
24
+ };
25
+
26
+ /**
27
+ * Define a Vize configuration with type checking.
28
+ * Accepts a plain object or a function that receives ConfigEnv.
29
+ */
30
+ export function defineConfig(config: UserConfigExport): UserConfigExport {
31
+ return config;
32
+ }
33
+
34
+ /**
35
+ * Load vize.config file from the specified directory
36
+ */
37
+ export async function loadConfig(
38
+ root: string,
39
+ options: LoadConfigOptions = {},
40
+ ): Promise<VizeConfig | null> {
41
+ const { mode = "root", configFile, env } = options;
42
+
43
+ if (mode === "none") {
44
+ return null;
45
+ }
46
+
47
+ // Custom config file path
48
+ if (configFile) {
49
+ const absolutePath = path.isAbsolute(configFile) ? configFile : path.resolve(root, configFile);
50
+ if (fs.existsSync(absolutePath)) {
51
+ return loadConfigFile(absolutePath, env);
52
+ }
53
+ return null;
54
+ }
55
+
56
+ // Search for config file
57
+ if (mode === "auto") {
58
+ const configPath = findConfigFileAuto(root);
59
+ if (!configPath) {
60
+ return null;
61
+ }
62
+ return loadConfigFile(configPath, env);
63
+ }
64
+
65
+ // mode === "root"
66
+ const configPath = findConfigFileInDir(root);
67
+ if (!configPath) {
68
+ return null;
69
+ }
70
+ return loadConfigFile(configPath, env);
71
+ }
72
+
73
+ /**
74
+ * Find config file in a specific directory
75
+ */
76
+ function findConfigFileInDir(dir: string): string | null {
77
+ for (const name of CONFIG_FILE_NAMES) {
78
+ const filePath = path.join(dir, name);
79
+ if (fs.existsSync(filePath)) {
80
+ return filePath;
81
+ }
82
+ }
83
+ return null;
84
+ }
85
+
86
+ /**
87
+ * Find config file by searching from cwd upward
88
+ */
89
+ function findConfigFileAuto(startDir: string): string | null {
90
+ let currentDir = path.resolve(startDir);
91
+ const root = path.parse(currentDir).root;
92
+
93
+ while (currentDir !== root) {
94
+ const configPath = findConfigFileInDir(currentDir);
95
+ if (configPath) {
96
+ return configPath;
97
+ }
98
+ currentDir = path.dirname(currentDir);
99
+ }
100
+
101
+ return null;
102
+ }
103
+
104
+ /**
105
+ * Load and evaluate a config file
106
+ */
107
+ async function loadConfigFile(filePath: string, env?: ConfigEnv): Promise<VizeConfig | null> {
108
+ if (!fs.existsSync(filePath)) {
109
+ return null;
110
+ }
111
+
112
+ const ext = path.extname(filePath);
113
+
114
+ if (ext === ".json") {
115
+ const content = fs.readFileSync(filePath, "utf-8");
116
+ return JSON.parse(content);
117
+ }
118
+
119
+ if (ext === ".ts") {
120
+ return loadTypeScriptConfig(filePath, env);
121
+ }
122
+
123
+ // .js, .mjs - ESM
124
+ return loadESMConfig(filePath, env);
125
+ }
126
+
127
+ /**
128
+ * Resolve a UserConfigExport to a VizeConfig
129
+ */
130
+ async function resolveConfigExport(
131
+ exported: UserConfigExport,
132
+ env?: ConfigEnv,
133
+ ): Promise<VizeConfig> {
134
+ if (typeof exported === "function") {
135
+ return exported(env ?? DEFAULT_CONFIG_ENV);
136
+ }
137
+ return exported;
138
+ }
139
+
140
+ /**
141
+ * Load TypeScript config file using oxc-transform
142
+ */
143
+ async function loadTypeScriptConfig(filePath: string, env?: ConfigEnv): Promise<VizeConfig> {
144
+ const source = fs.readFileSync(filePath, "utf-8");
145
+ const result = transform(filePath, source, {
146
+ typescript: {
147
+ onlyRemoveTypeImports: true,
148
+ },
149
+ });
150
+
151
+ const code = result.code;
152
+
153
+ // Write to temp file and import (use Date.now() to avoid race conditions)
154
+ const tempFile = filePath.replace(/\.ts$/, `.temp.${Date.now()}.mjs`);
155
+ fs.writeFileSync(tempFile, code);
156
+
157
+ try {
158
+ const fileUrl = pathToFileURL(tempFile).href;
159
+ const module = await import(fileUrl);
160
+ const exported: UserConfigExport = module.default || module;
161
+ return resolveConfigExport(exported, env);
162
+ } finally {
163
+ fs.unlinkSync(tempFile);
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Load ESM config file
169
+ */
170
+ async function loadESMConfig(filePath: string, env?: ConfigEnv): Promise<VizeConfig> {
171
+ const fileUrl = pathToFileURL(filePath).href;
172
+ const module = await import(fileUrl);
173
+ const exported: UserConfigExport = module.default || module;
174
+ return resolveConfigExport(exported, env);
175
+ }
176
+
177
+ /**
178
+ * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects
179
+ */
180
+ export function normalizeGlobalTypes(
181
+ config: GlobalTypesConfig,
182
+ ): Record<string, GlobalTypeDeclaration> {
183
+ const result: Record<string, GlobalTypeDeclaration> = {};
184
+ for (const [key, value] of Object.entries(config)) {
185
+ if (typeof value === "string") {
186
+ result[key] = { type: value };
187
+ } else {
188
+ result[key] = value;
189
+ }
190
+ }
191
+ return result;
192
+ }
package/src/index.ts ADDED
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Vize - High-performance Vue.js toolchain in Rust
3
+ *
4
+ * This package provides:
5
+ * - CLI binary for compilation, linting, and formatting
6
+ * - Configuration utilities for programmatic use
7
+ */
8
+
9
+ // Types
10
+ export type {
11
+ VizeConfig,
12
+ CompilerConfig,
13
+ VitePluginConfig,
14
+ LinterConfig,
15
+ TypeCheckerConfig,
16
+ FormatterConfig,
17
+ LspConfig,
18
+ MuseaConfig,
19
+ MuseaVrtConfig,
20
+ MuseaA11yConfig,
21
+ MuseaAutogenConfig,
22
+ GlobalTypesConfig,
23
+ GlobalTypeDeclaration,
24
+ LoadConfigOptions,
25
+ ConfigEnv,
26
+ UserConfigExport,
27
+ MaybePromise,
28
+ RuleSeverity,
29
+ RuleCategory,
30
+ } from "./types.js";
31
+
32
+ // Config utilities
33
+ export { defineConfig, loadConfig, normalizeGlobalTypes } from "./config.js";
package/src/types.ts ADDED
@@ -0,0 +1,515 @@
1
+ // ============================================================================
2
+ // Dynamic config support
3
+ // ============================================================================
4
+
5
+ export type MaybePromise<T> = T | Promise<T>;
6
+
7
+ export interface ConfigEnv {
8
+ mode: string;
9
+ command: "serve" | "build" | "check" | "lint" | "fmt";
10
+ isSsrBuild?: boolean;
11
+ }
12
+
13
+ export type UserConfigExport = VizeConfig | ((env: ConfigEnv) => MaybePromise<VizeConfig>);
14
+
15
+ // ============================================================================
16
+ // Rule severity
17
+ // ============================================================================
18
+
19
+ export type RuleSeverity = "off" | "warn" | "error";
20
+
21
+ export type RuleCategory = "correctness" | "suspicious" | "style" | "perf" | "a11y" | "security";
22
+
23
+ // ============================================================================
24
+ // VizeConfig
25
+ // ============================================================================
26
+
27
+ /**
28
+ * Vize configuration options
29
+ */
30
+ export interface VizeConfig {
31
+ /**
32
+ * Vue compiler options
33
+ */
34
+ compiler?: CompilerConfig;
35
+
36
+ /**
37
+ * Vite plugin options
38
+ */
39
+ vite?: VitePluginConfig;
40
+
41
+ /**
42
+ * Linter options
43
+ */
44
+ linter?: LinterConfig;
45
+
46
+ /**
47
+ * Type checker options
48
+ */
49
+ typeChecker?: TypeCheckerConfig;
50
+
51
+ /**
52
+ * Formatter options
53
+ */
54
+ formatter?: FormatterConfig;
55
+
56
+ /**
57
+ * LSP options
58
+ */
59
+ lsp?: LspConfig;
60
+
61
+ /**
62
+ * Musea component gallery options
63
+ */
64
+ musea?: MuseaConfig;
65
+
66
+ /**
67
+ * Global type declarations
68
+ */
69
+ globalTypes?: GlobalTypesConfig;
70
+ }
71
+
72
+ // ============================================================================
73
+ // CompilerConfig
74
+ // ============================================================================
75
+
76
+ /**
77
+ * Compiler configuration
78
+ */
79
+ export interface CompilerConfig {
80
+ /**
81
+ * Compilation mode
82
+ * @default 'module'
83
+ */
84
+ mode?: "module" | "function";
85
+
86
+ /**
87
+ * Enable Vapor mode compilation
88
+ * @default false
89
+ */
90
+ vapor?: boolean;
91
+
92
+ /**
93
+ * Enable SSR mode
94
+ * @default false
95
+ */
96
+ ssr?: boolean;
97
+
98
+ /**
99
+ * Enable source map generation
100
+ * @default true in development, false in production
101
+ */
102
+ sourceMap?: boolean;
103
+
104
+ /**
105
+ * Prefix template identifiers with _ctx
106
+ * @default false
107
+ */
108
+ prefixIdentifiers?: boolean;
109
+
110
+ /**
111
+ * Hoist static nodes
112
+ * @default true
113
+ */
114
+ hoistStatic?: boolean;
115
+
116
+ /**
117
+ * Cache v-on handlers
118
+ * @default true
119
+ */
120
+ cacheHandlers?: boolean;
121
+
122
+ /**
123
+ * Enable TypeScript parsing in <script> blocks
124
+ * @default true
125
+ */
126
+ isTs?: boolean;
127
+
128
+ /**
129
+ * Script file extension for generated output
130
+ * @default 'ts'
131
+ */
132
+ scriptExt?: "ts" | "js";
133
+
134
+ /**
135
+ * Module name for runtime imports
136
+ * @default 'vue'
137
+ */
138
+ runtimeModuleName?: string;
139
+
140
+ /**
141
+ * Global variable name for runtime (IIFE builds)
142
+ * @default 'Vue'
143
+ */
144
+ runtimeGlobalName?: string;
145
+ }
146
+
147
+ // ============================================================================
148
+ // VitePluginConfig
149
+ // ============================================================================
150
+
151
+ /**
152
+ * Vite plugin configuration
153
+ */
154
+ export interface VitePluginConfig {
155
+ /**
156
+ * Files to include in compilation
157
+ * @default /\.vue$/
158
+ */
159
+ include?: string | RegExp | (string | RegExp)[];
160
+
161
+ /**
162
+ * Files to exclude from compilation
163
+ * @default /node_modules/
164
+ */
165
+ exclude?: string | RegExp | (string | RegExp)[];
166
+
167
+ /**
168
+ * Glob patterns to scan for .vue files during pre-compilation
169
+ * @default ['**\/*.vue']
170
+ */
171
+ scanPatterns?: string[];
172
+
173
+ /**
174
+ * Glob patterns to ignore during pre-compilation
175
+ * @default ['node_modules/**', 'dist/**', '.git/**']
176
+ */
177
+ ignorePatterns?: string[];
178
+ }
179
+
180
+ // ============================================================================
181
+ // LinterConfig
182
+ // ============================================================================
183
+
184
+ /**
185
+ * Linter configuration
186
+ */
187
+ export interface LinterConfig {
188
+ /**
189
+ * Enable linting
190
+ */
191
+ enabled?: boolean;
192
+
193
+ /**
194
+ * Rules to enable/disable
195
+ */
196
+ rules?: Record<string, RuleSeverity>;
197
+
198
+ /**
199
+ * Category-level severity overrides
200
+ */
201
+ categories?: Partial<Record<RuleCategory, RuleSeverity>>;
202
+ }
203
+
204
+ // ============================================================================
205
+ // TypeCheckerConfig
206
+ // ============================================================================
207
+
208
+ /**
209
+ * Type checker configuration
210
+ */
211
+ export interface TypeCheckerConfig {
212
+ /**
213
+ * Enable type checking
214
+ * @default false
215
+ */
216
+ enabled?: boolean;
217
+
218
+ /**
219
+ * Enable strict mode
220
+ * @default false
221
+ */
222
+ strict?: boolean;
223
+
224
+ /**
225
+ * Check component props
226
+ * @default true
227
+ */
228
+ checkProps?: boolean;
229
+
230
+ /**
231
+ * Check component emits
232
+ * @default true
233
+ */
234
+ checkEmits?: boolean;
235
+
236
+ /**
237
+ * Check template bindings
238
+ * @default true
239
+ */
240
+ checkTemplateBindings?: boolean;
241
+
242
+ /**
243
+ * Path to tsconfig.json
244
+ * @default auto-detected
245
+ */
246
+ tsconfig?: string;
247
+
248
+ /**
249
+ * Path to tsgo binary
250
+ */
251
+ tsgoPath?: string;
252
+ }
253
+
254
+ // ============================================================================
255
+ // FormatterConfig
256
+ // ============================================================================
257
+
258
+ /**
259
+ * Formatter configuration
260
+ */
261
+ export interface FormatterConfig {
262
+ /**
263
+ * Max line width
264
+ * @default 80
265
+ */
266
+ printWidth?: number;
267
+
268
+ /**
269
+ * Indentation width
270
+ * @default 2
271
+ */
272
+ tabWidth?: number;
273
+
274
+ /**
275
+ * Use tabs for indentation
276
+ * @default false
277
+ */
278
+ useTabs?: boolean;
279
+
280
+ /**
281
+ * Print semicolons
282
+ * @default true
283
+ */
284
+ semi?: boolean;
285
+
286
+ /**
287
+ * Use single quotes
288
+ * @default false
289
+ */
290
+ singleQuote?: boolean;
291
+
292
+ /**
293
+ * Trailing commas
294
+ * @default 'all'
295
+ */
296
+ trailingComma?: "all" | "none" | "es5";
297
+ }
298
+
299
+ // ============================================================================
300
+ // LspConfig
301
+ // ============================================================================
302
+
303
+ /**
304
+ * LSP configuration
305
+ */
306
+ export interface LspConfig {
307
+ /**
308
+ * Enable LSP
309
+ * @default true
310
+ */
311
+ enabled?: boolean;
312
+
313
+ /**
314
+ * Enable diagnostics
315
+ * @default true
316
+ */
317
+ diagnostics?: boolean;
318
+
319
+ /**
320
+ * Enable completions
321
+ * @default true
322
+ */
323
+ completion?: boolean;
324
+
325
+ /**
326
+ * Enable hover information
327
+ * @default true
328
+ */
329
+ hover?: boolean;
330
+
331
+ /**
332
+ * Enable go-to-definition
333
+ * @default true
334
+ */
335
+ definition?: boolean;
336
+
337
+ /**
338
+ * Enable formatting via LSP
339
+ * @default true
340
+ */
341
+ formatting?: boolean;
342
+
343
+ /**
344
+ * Enable code actions
345
+ * @default true
346
+ */
347
+ codeActions?: boolean;
348
+
349
+ /**
350
+ * Use tsgo for type checking in LSP
351
+ * @default false
352
+ */
353
+ tsgo?: boolean;
354
+ }
355
+
356
+ // ============================================================================
357
+ // MuseaConfig
358
+ // ============================================================================
359
+
360
+ /**
361
+ * VRT (Visual Regression Testing) configuration for Musea
362
+ */
363
+ export interface MuseaVrtConfig {
364
+ /**
365
+ * Threshold for pixel comparison (0-1)
366
+ * @default 0.1
367
+ */
368
+ threshold?: number;
369
+
370
+ /**
371
+ * Output directory for screenshots
372
+ * @default '__musea_snapshots__'
373
+ */
374
+ outDir?: string;
375
+
376
+ /**
377
+ * Viewport sizes
378
+ */
379
+ viewports?: Array<{ width: number; height: number; name?: string }>;
380
+ }
381
+
382
+ /**
383
+ * A11y configuration for Musea
384
+ */
385
+ export interface MuseaA11yConfig {
386
+ /**
387
+ * Enable a11y checking
388
+ * @default false
389
+ */
390
+ enabled?: boolean;
391
+
392
+ /**
393
+ * Axe-core rules to enable/disable
394
+ */
395
+ rules?: Record<string, boolean>;
396
+ }
397
+
398
+ /**
399
+ * Autogen configuration for Musea
400
+ */
401
+ export interface MuseaAutogenConfig {
402
+ /**
403
+ * Enable auto-generation of variants
404
+ * @default false
405
+ */
406
+ enabled?: boolean;
407
+
408
+ /**
409
+ * Max variants to generate per component
410
+ * @default 10
411
+ */
412
+ maxVariants?: number;
413
+ }
414
+
415
+ /**
416
+ * Musea component gallery configuration
417
+ */
418
+ export interface MuseaConfig {
419
+ /**
420
+ * Glob patterns for art files
421
+ * @default ['**\/*.art.vue']
422
+ */
423
+ include?: string[];
424
+
425
+ /**
426
+ * Glob patterns to exclude
427
+ * @default ['node_modules/**', 'dist/**']
428
+ */
429
+ exclude?: string[];
430
+
431
+ /**
432
+ * Base path for gallery
433
+ * @default '/__musea__'
434
+ */
435
+ basePath?: string;
436
+
437
+ /**
438
+ * Enable Storybook compatibility
439
+ * @default false
440
+ */
441
+ storybookCompat?: boolean;
442
+
443
+ /**
444
+ * Enable inline art detection in .vue files
445
+ * @default false
446
+ */
447
+ inlineArt?: boolean;
448
+
449
+ /**
450
+ * VRT configuration
451
+ */
452
+ vrt?: MuseaVrtConfig;
453
+
454
+ /**
455
+ * A11y configuration
456
+ */
457
+ a11y?: MuseaA11yConfig;
458
+
459
+ /**
460
+ * Autogen configuration
461
+ */
462
+ autogen?: MuseaAutogenConfig;
463
+ }
464
+
465
+ // ============================================================================
466
+ // GlobalTypesConfig
467
+ // ============================================================================
468
+
469
+ /**
470
+ * Global type declaration
471
+ */
472
+ export interface GlobalTypeDeclaration {
473
+ /**
474
+ * TypeScript type string
475
+ */
476
+ type: string;
477
+
478
+ /**
479
+ * Default value
480
+ */
481
+ defaultValue?: string;
482
+ }
483
+
484
+ /**
485
+ * Global types configuration
486
+ */
487
+ export type GlobalTypesConfig = Record<string, GlobalTypeDeclaration | string>;
488
+
489
+ // ============================================================================
490
+ // LoadConfigOptions
491
+ // ============================================================================
492
+
493
+ /**
494
+ * Options for loading vize.config file
495
+ */
496
+ export interface LoadConfigOptions {
497
+ /**
498
+ * Config file search mode
499
+ * - 'root': Search only in the specified root directory
500
+ * - 'auto': Search from cwd upward until finding a config file
501
+ * - 'none': Don't load config file
502
+ * @default 'root'
503
+ */
504
+ mode?: "root" | "auto" | "none";
505
+
506
+ /**
507
+ * Custom config file path (overrides automatic search)
508
+ */
509
+ configFile?: string;
510
+
511
+ /**
512
+ * Config environment for dynamic config resolution
513
+ */
514
+ env?: ConfigEnv;
515
+ }