vize 0.174.0 → 0.175.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.
@@ -653,4 +653,4 @@ declare function resolveConfigExport(exported: UserConfigExport, env?: ConfigEnv
653
653
  declare function normalizeGlobalTypes(config: GlobalTypesConfig): Record<string, GlobalTypeDeclaration>;
654
654
  //#endregion
655
655
  export { RuleSeverity as A, LintPreset as C, MuseaConfig as D, MuseaAutogenConfig as E, VueVersion as F, VitePluginConfig as M, VizeConfig as N, MuseaVrtConfig as O, VizeConfigEntry as P, LanguageServerConfig as S, MuseaA11yConfig as T, CompilerCompatibilityConfig as _, loadConfig as a, GlobalTypeDeclaration as b, LspConfig as c, MaybePromise as d, ResolvedVizeConfig as f, LintRulesConfig as g, LintRuleName as h, defineConfig as i, TypeCheckerConfig as j, RuleCategory as k, ConfigEnv as l, UserConfigInput as m, VIZE_CONFIG_JSON_SCHEMA_PATH as n, normalizeGlobalTypes as o, UserConfigExport as p, VIZE_CONFIG_PKL_SCHEMA_PATH as r, resolveConfigExport as s, CONFIG_FILE_NAMES as t, LoadConfigOptions as u, CompilerConfig as v, LinterConfig as w, GlobalTypesConfig as x, FormatterConfig as y };
656
- //# sourceMappingURL=config-DqgVr12-.d.mts.map
656
+ //# sourceMappingURL=config-BD4XICzq.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-DqgVr12-.d.mts","names":[],"sources":["../src/types/generated.ts","../src/types/rules.ts","../src/types/runtime.ts","../src/types/index.ts","../src/config.ts"],"mappings":"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"}
1
+ {"version":3,"file":"config-BD4XICzq.d.mts","names":[],"sources":["../src/types/generated.ts","../src/types/rules.ts","../src/types/runtime.ts","../src/types/index.ts","../src/config.ts"],"mappings":";;AAOA;;;;KAAY,UAAA;AAAA,KAQA,YAAA;AAAA,KAEA,YAAA;;;;KAKA,UAAA;;;;UAKK,UAAA;EALL;;;EASV,IAAA;EAToB;AAKtB;;EAQE,QAAA;EAaW;;;EATX,KAAA;EAaY;;;EATZ,OAAA;EAac;;;EATd,OAAA;EACA,QAAA,GAAW,cAAA;EACX,IAAA,GAAO,gBAAA;EACP,MAAA,GAAS,YAAA;EACT,WAAA,GAAc,iBAAA;EACd,SAAA,GAAY,eAAA;EACZ,cAAA,GAAiB,oBAAA;EACjB,GAAA,GAAM,oBAAA;EACN,KAAA,GAAQ,WAAA;EACR,WAAA,GAAc,iBAAA;EANd;;;EAUA,OAAA,GAAU,eAAA;AAAA;;;;UAKK,cAAA;EAXT;;;EAeN,IAAA;EAbc;;;EAiBd,KAAA;EAbyB;AAK3B;;EAYE,cAAA;EAyC2C;;;EArC3C,GAAA;EAAA;;;EAIA,eAAA;EAYA;;;EARA,SAAA;EAwBA;;;EApBA,iBAAA;EAyB2C;;AAK7C;EA1BE,WAAA;;;;EAIA,aAAA;EA2BA;;;EAvBA,IAAA;EAuCA;;;EAnCA,SAAA;EAwC+B;;;EApC/B,iBAAA;EA4CmB;;;EAxCnB,iBAAA;EACA,aAAA,GAAgB,2BAAA;AAAA;;;;UAKD,2BAAA;EACf,UAAA,GAAa,UAAA;EAyCb;;;EArCA,YAAA;EA0C2B;;;EAtC3B,uBAAA;EA8CA;;;EA1CA,eAAA;EAqDE;;;EAjDF,WAAA;EAqDE;;;EAjDF,cAAA;AAAA;;;;UAKe,gBAAA;EA2Df;;;EAvDA,OAAA,YAAmB,MAAA,aAAmB,MAAA;EAuEtC;;;EAnEA,OAAA,YAAmB,MAAA,aAAmB,MAAA;EAmFtC;;;EA/EA,YAAA;EA+FA;;;EA3FA,cAAA;AAAA;;;;UAKe,YAAA;EAuGf;;;EAnGA,OAAA;EAmHA;;;EA/GA,MAAA;EA+HA;;;EA3HA,KAAA;IAAA,CACG,CAAA;EAAA;EAkJH;;;EA7IA,UAAA;IACE,WAAA;IACA,UAAA;IACA,KAAA;IACA,IAAA;IACA,IAAA;IACA,QAAA;EAAA;AAAA;;;;UAMa,iBAAA;EA8Kf;;;EA1KA,OAAA;EA0LA;;;EAtLA,MAAA;EAsMA;;;EAlMA,UAAA;EAkNA;;;EA9MA,UAAA;EA8NA;;;EA1NA,qBAAA;EAsOI;;AAKN;EAvOE,eAAA;;;;EAIA,iBAAA;EA0P4B;;;EAtP5B,mBAAA;EA2OA;;;EAvOA,qBAAA;EAgPM;;;EA5ON,UAAA;EA8OU;;;EA1OV,QAAA;EA+O6B;;;EA3O7B,SAAA;EAmPA;;;EA/OA,QAAA;EAmPyB;AAE3B;;EAjPE,WAAA;EAiP4B;;;EA7O5B,OAAA;AAAA;;AA8PF;;UAzPiB,eAAA;EAyPe;;;EArP9B,UAAA;EA8PY;;AAMd;EAhQE,QAAA;;;;EAIA,OAAA;EAyQgC;;;EArQhC,IAAA;EA2Qe;;;EAvQf,WAAA;EA+QY;AAKd;;EAhRE,cAAA;EAqSW;;;EAjSX,aAAA;EAqSY;;;EAjSZ,cAAA;EAqSc;;;EAjSd,eAAA;EA4QA;;;EAxQA,WAAA;EAqRA;;;EAjRA,SAAA;EAmRA;;;EA/QA,UAAA;EAiRA;;;EA7QA,sBAAA;EA+QA;;;EA3QA,uBAAA;EA6QA;;;EAzQA,cAAA;;;;EAIA,kBAAA;EC5MQ;;;EDgNR,wBAAA;EC9MU;;;EDkNV,oBAAA;EClNgD;AAElD;;EDoNE,eAAA;ECpN2C;;;EDwN3C,4BAAA;ECxNmC;;;ED4NnC,UAAA;AAAA;;;;UAKe,oBAAA;;;AE5VjB;EFgWE,OAAA;EEhWsB;;;EFoWtB,IAAA;EEpWuC;;;EFwWvC,WAAA;EExWgC;;;EF4WhC,SAAA;EE1We;;;EF8Wf,MAAA;EE7WA;;;EFiXA,SAAA;EE/WU;AAGZ;;EFgXE,UAAA;EE3W0B;;;EF+W1B,UAAA;EE/W0B;;AAG5B;EFgXE,KAAA;;;;EAIA,UAAA;EElX4B;;;EFsX5B,UAAA;EEjXA;;;EFqXA,eAAA;EElXU;;;EFsXV,gBAAA;EEpXS;;;EFwXT,UAAA;EExXmC;;;EF4XnC,WAAA;EE5XuB;;;EFgYvB,MAAA;EE1Xe;;;EF8Xf,QAAA;EEtXA;;;EF0XA,cAAA;EEhXe;;;EFoXf,aAAA;;AGlZF;;EHsZE,aAAA;EGtZmE;;;EH0ZnE,UAAA;;AI/ZF;;EJmaE,UAAA;EI7ZQ;;AASV;EJwZE,KAAA;;;;EAIA,IAAA;AAAA;;;;UAKe,WAAA;EIrZW;;;EJyZ1B,OAAA;EIzZ2B;;;EJ6Z3B,OAAA;EItZoB;;;EJ0ZpB,QAAA;EIvZS;;;EJ2ZT,eAAA;EI7ZA;;;EJiaA,SAAA;EACA,GAAA,GAAM,cAAA;EACN,IAAA,GAAO,eAAA;EACP,OAAA,GAAU,kBAAA;AAAA;;;;UAKK,cAAA;EI1UN;;;EJ8UT,SAAA;EIhVU;;;EJoVV,MAAA;EIlVC;;;EJsVD,SAAA,GAAY,aAAA;AAAA;AAAA,UAEG,aAAA;;;;EAIf,KAAA;EIrRO;;;EJyRP,MAAA;EIzRC;;;EJ6RD,IAAA;AAAA;;;;UAKe,eAAA;;;;EAIf,OAAA;;;;EAIA,KAAA;IAAA,CACG,CAAA;EAAA;AAAA;;;;UAMY,kBAAA;;;;EAIf,OAAA;;;;EAIA,WAAA;AAAA;;;;UAKe,iBAAA;EAAA,CACd,CAAA,oBAAqB,qBAAA;AAAA;;;;UAKP,qBAAA;;;;EAIf,IAAA;;;;EAIA,YAAA;AAAA;;;;UAKe,eAAA;;;;EAIf,IAAA;;;;EAIA,QAAA;;;;EAIA,KAAA;;;;EAIA,OAAA;;;;EAIA,OAAA;EACA,QAAA,GAAW,cAAA;EACX,IAAA,GAAO,gBAAA;EACP,MAAA,GAAS,YAAA;EACT,WAAA,GAAc,iBAAA;EACd,SAAA,GAAY,eAAA;EACZ,cAAA,GAAiB,oBAAA;EACjB,GAAA,GAAM,oBAAA;EACN,KAAA,GAAQ,WAAA;EACR,WAAA,GAAc,iBAAA;AAAA;;;cCzkBH,eAAA;AAAA,KA0HD,YAAA,WAAuB,eAAA;AAAA,KAEvB,eAAA,GAAkB,OAAA,CAAQ,MAAA,CAAO,YAAA,EAAc,YAAA;;;KC3H/C,YAAA,MAAkB,CAAA,GAAI,OAAA,CAAQ,CAAA;AAAA,UAEzB,SAAA;EACf,IAAA;EACA,OAAA;EACA,UAAA;AAAA;AAAA,KAGU,UAAA,GAAa,UAAA;;;;AFGzB;EEEE,GAAA,GAAM,oBAAA;AAAA;AAAA,KAGI,eAAA,GAAkB,UAAA,GAAa,eAAA;AAAA,KAE/B,kBAAA,GAAqB,UAAA;EFFrB;;;;EEOV,OAAA,EAAS,eAAA;AAAA;AAAA,KAGC,gBAAA,GACR,eAAA,KACE,GAAA,EAAK,SAAA,KAAc,YAAA,CAAa,eAAA;AAAA,UAMrB,iBAAA;EFQJ;;;;;;;EEAX,IAAA;EFQc;;;EEHd,UAAA;EFtBA;;;EE2BA,GAAA,GAAM,SAAA;AAAA;;;;;;KC9BI,SAAA,GAAS,oBAAA;;;cCLR,iBAAA;AAAA,cAeA,4BAAA;AAAA,cAMA,2BAAA;;;AJ7Bb;;iBImCgB,YAAA,CAAa,MAAA,EAAQ,gBAAA,GAAmB,gBAAA;;;AJjCxD;iBIwCsB,UAAA,CACpB,IAAA,UACA,OAAA,GAAS,iBAAA,GACR,OAAA,CAAQ,kBAAA;AAAA,iBA0FW,mBAAA,CACpB,QAAA,EAAU,gBAAA,EACV,GAAA,GAAM,SAAA,GACL,OAAA,CAAQ,kBAAA;;;AJnIX;iBIwMgB,oBAAA,CACd,MAAA,EAAQ,iBAAA,GACP,MAAA,SAAe,qBAAA"}
@@ -0,0 +1,223 @@
1
+ import { createRequire } from "node:module";
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { randomUUID } from "node:crypto";
5
+ import { fileURLToPath, pathToFileURL } from "node:url";
6
+ import { transform } from "oxc-transform";
7
+ import { execFileSync } from "node:child_process";
8
+ //#region src/config/pkl.js
9
+ const PACKAGE_ROOT$1 = path.resolve(fileURLToPath(new URL(".", import.meta.url)), "../..");
10
+ const DOCUMENTED_PKL_SCHEMA_IMPORT_RE = /^(\s*(?:amends|import)\s+)(["'])node_modules\/vize\/pkl\/(VizeConfig\.pkl|vize\.pkl)\2/gm;
11
+ /**
12
+ * Evaluate a `vize.config.pkl` file and return its JSON representation.
13
+ *
14
+ * The npm-facing loader keeps PKL execution in Node because it needs package
15
+ * resolution for `@pkl-community/pkl`, but all structural config normalization
16
+ * happens in Rust after this function returns. A missing PKL runtime returns
17
+ * `null` so config discovery can fall through to lower-priority formats; an
18
+ * evaluation failure throws because a present PKL config should not silently be
19
+ * ignored.
20
+ */
21
+ function loadPklConfigJson(filePath) {
22
+ const pklBin = findPklBinary();
23
+ if (!pklBin) {
24
+ console.warn("[vize] pkl CLI not found. Install @pkl-community/pkl or add pkl to PATH. Falling back to the next config format.");
25
+ return null;
26
+ }
27
+ const patchedFilePath = createPklConfigWithBundledSchemaImports(filePath);
28
+ const evalFilePath = patchedFilePath ?? filePath;
29
+ try {
30
+ return execFileSync(pklBin, [
31
+ "eval",
32
+ "-f",
33
+ "json",
34
+ evalFilePath
35
+ ], {
36
+ cwd: path.dirname(filePath),
37
+ encoding: "utf-8",
38
+ stdio: [
39
+ "ignore",
40
+ "pipe",
41
+ "pipe"
42
+ ],
43
+ timeout: 3e4
44
+ });
45
+ } catch (error) {
46
+ throw new Error(`Failed to evaluate vize PKL config at ${filePath}: ${getErrorMessage$1(error)}`);
47
+ } finally {
48
+ if (patchedFilePath) fs.rmSync(patchedFilePath, { force: true });
49
+ }
50
+ }
51
+ function findPklBinary() {
52
+ try {
53
+ const pklPkgPath = import.meta.resolve?.("@pkl-community/pkl");
54
+ if (pklPkgPath) {
55
+ const pklLibDir = path.dirname(fileURLToPath(pklPkgPath));
56
+ const pklPackageDir = path.dirname(pklLibDir);
57
+ const candidates = [
58
+ path.join(pklLibDir, "main.js"),
59
+ path.join(pklPackageDir, "pkl"),
60
+ path.join(pklPackageDir, "pkl.exe")
61
+ ];
62
+ for (const candidate of candidates) if (fs.existsSync(candidate)) try {
63
+ execFileSync(candidate, ["--version"], { stdio: "ignore" });
64
+ return candidate;
65
+ } catch {}
66
+ }
67
+ } catch {}
68
+ try {
69
+ execFileSync("pkl", ["--version"], { stdio: "ignore" });
70
+ return "pkl";
71
+ } catch {
72
+ return null;
73
+ }
74
+ }
75
+ function createPklConfigWithBundledSchemaImports(filePath) {
76
+ const configDir = path.dirname(filePath);
77
+ const source = fs.readFileSync(filePath, "utf-8");
78
+ let patched = false;
79
+ const content = source.replace(DOCUMENTED_PKL_SCHEMA_IMPORT_RE, (match, prefix, quote, schemaFile) => {
80
+ const projectSchemaPath = path.join(configDir, "node_modules", "vize", "pkl", schemaFile);
81
+ if (fs.existsSync(projectSchemaPath)) return match;
82
+ const bundledSchemaPath = path.join(PACKAGE_ROOT$1, "pkl", schemaFile);
83
+ if (!fs.existsSync(bundledSchemaPath)) return match;
84
+ patched = true;
85
+ return `${prefix}${quote}${pathToFileURL(bundledSchemaPath).href}${quote}`;
86
+ });
87
+ if (!patched) return null;
88
+ const tempFile = path.join(configDir, `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.pkl`);
89
+ fs.writeFileSync(tempFile, content, {
90
+ flag: "wx",
91
+ mode: 384
92
+ });
93
+ return tempFile;
94
+ }
95
+ function getErrorMessage$1(error) {
96
+ if (error instanceof Error) return error.message;
97
+ return String(error);
98
+ }
99
+ //#endregion
100
+ //#region src/config.ts
101
+ const native = createRequire(import.meta.url)("@vizejs/native");
102
+ const CONFIG_FILE_NAMES = [
103
+ "vize.config.pkl",
104
+ "vize.config.ts",
105
+ "vize.config.js",
106
+ "vize.config.mjs",
107
+ "vize.config.json"
108
+ ];
109
+ const DEFAULT_CONFIG_ENV = {
110
+ mode: "development",
111
+ command: "serve"
112
+ };
113
+ const PACKAGE_ROOT = path.resolve(fileURLToPath(new URL(".", import.meta.url)), "..");
114
+ const VIZE_CONFIG_JSON_SCHEMA_PATH = path.join(PACKAGE_ROOT, "schemas", "vize.config.schema.json");
115
+ const VIZE_CONFIG_PKL_SCHEMA_PATH = path.join(PACKAGE_ROOT, "pkl", "vize.pkl");
116
+ /**
117
+ * Define a Vize configuration with type checking.
118
+ * Accepts a plain object or a function that receives ConfigEnv.
119
+ */
120
+ function defineConfig(config) {
121
+ return config;
122
+ }
123
+ /**
124
+ * Load `vize.config.*` from the specified directory.
125
+ */
126
+ async function loadConfig(root, options = {}) {
127
+ const { mode = "root", configFile, env } = options;
128
+ if (mode === "none") return null;
129
+ if (configFile) {
130
+ const absolutePath = path.isAbsolute(configFile) ? configFile : path.resolve(root, configFile);
131
+ if (fs.existsSync(absolutePath)) return loadConfigFile(absolutePath, env);
132
+ return null;
133
+ }
134
+ if (mode === "auto") return loadConfigFromDirAuto(root, env);
135
+ return loadConfigFromDir(root, env);
136
+ }
137
+ async function loadConfigFromDir(dir, env) {
138
+ for (const name of CONFIG_FILE_NAMES) {
139
+ const filePath = path.join(dir, name);
140
+ if (!fs.existsSync(filePath)) continue;
141
+ const config = await loadConfigFile(filePath, env);
142
+ if (config !== null) return config;
143
+ }
144
+ return null;
145
+ }
146
+ async function loadConfigFromDirAuto(startDir, env) {
147
+ let currentDir = path.resolve(startDir);
148
+ while (true) {
149
+ const config = await loadConfigFromDir(currentDir, env);
150
+ if (config !== null) return config;
151
+ const parentDir = path.dirname(currentDir);
152
+ if (parentDir === currentDir) return null;
153
+ currentDir = parentDir;
154
+ }
155
+ }
156
+ async function loadConfigFile(filePath, env) {
157
+ const absolutePath = path.resolve(filePath);
158
+ if (!fs.existsSync(absolutePath)) return null;
159
+ const ext = path.extname(absolutePath);
160
+ if (ext === ".pkl") return loadPklConfig(absolutePath);
161
+ if (ext === ".json") return parseJsonConfig(fs.readFileSync(absolutePath, "utf-8"), absolutePath);
162
+ if (ext === ".ts") return loadTypeScriptConfig(absolutePath, env);
163
+ return loadESMConfig(absolutePath, env);
164
+ }
165
+ function loadPklConfig(filePath) {
166
+ const output = loadPklConfigJson(filePath);
167
+ return output === null ? null : parseJsonConfig(output, filePath);
168
+ }
169
+ async function resolveConfigExport(exported, env) {
170
+ if (typeof exported === "function") return normalizeLoadedConfig(await exported(env ?? DEFAULT_CONFIG_ENV));
171
+ return normalizeLoadedConfig(exported);
172
+ }
173
+ async function loadTypeScriptConfig(filePath, env) {
174
+ const result = await transform(filePath, fs.readFileSync(filePath, "utf-8"), { typescript: { onlyRemoveTypeImports: true } });
175
+ const tempFile = path.join(path.dirname(filePath), `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.mjs`);
176
+ fs.writeFileSync(tempFile, result.code, {
177
+ flag: "wx",
178
+ mode: 384
179
+ });
180
+ try {
181
+ const module = await importFresh(tempFile);
182
+ return resolveConfigExport(module.default || module, env);
183
+ } finally {
184
+ fs.rmSync(tempFile, { force: true });
185
+ }
186
+ }
187
+ async function loadESMConfig(filePath, env) {
188
+ const module = await importFresh(filePath);
189
+ return resolveConfigExport(module.default || module, env);
190
+ }
191
+ async function importFresh(filePath) {
192
+ const fileUrl = pathToFileURL(filePath);
193
+ fileUrl.searchParams.set("t", String(fs.statSync(filePath).mtimeMs));
194
+ return import(fileUrl.href);
195
+ }
196
+ function parseJsonConfig(content, filePath) {
197
+ try {
198
+ return normalizeLoadedConfig(JSON.parse(content));
199
+ } catch (error) {
200
+ throw new Error(`Failed to parse vize config JSON at ${filePath}: ${getErrorMessage(error)}`);
201
+ }
202
+ }
203
+ function normalizeLoadedConfig(config) {
204
+ return native.normalizeVizeConfig(config ?? null);
205
+ }
206
+ function getErrorMessage(error) {
207
+ if (error instanceof Error) return error.message;
208
+ return String(error);
209
+ }
210
+ /**
211
+ * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects
212
+ */
213
+ function normalizeGlobalTypes(config) {
214
+ const resolvedConfig = "types" in config && typeof config.types === "object" && config.types !== null && !Array.isArray(config.types) ? config.types : config;
215
+ const result = {};
216
+ for (const [key, value] of Object.entries(resolvedConfig)) if (typeof value === "string") result[key] = { type: value };
217
+ else result[key] = value;
218
+ return result;
219
+ }
220
+ //#endregion
221
+ export { loadConfig as a, defineConfig as i, VIZE_CONFIG_JSON_SCHEMA_PATH as n, normalizeGlobalTypes as o, VIZE_CONFIG_PKL_SCHEMA_PATH as r, resolveConfigExport as s, CONFIG_FILE_NAMES as t };
222
+
223
+ //# sourceMappingURL=config-D1BwAgHh.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-D1BwAgHh.mjs","names":["PACKAGE_ROOT","getErrorMessage"],"sources":["../src/config/pkl.js","../src/config.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { execFileSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nconst PACKAGE_ROOT = path.resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"../..\");\n\nconst DOCUMENTED_PKL_SCHEMA_IMPORT_RE =\n /^(\\s*(?:amends|import)\\s+)([\"'])node_modules\\/vize\\/pkl\\/(VizeConfig\\.pkl|vize\\.pkl)\\2/gm;\n\n/**\n * Evaluate a `vize.config.pkl` file and return its JSON representation.\n *\n * The npm-facing loader keeps PKL execution in Node because it needs package\n * resolution for `@pkl-community/pkl`, but all structural config normalization\n * happens in Rust after this function returns. A missing PKL runtime returns\n * `null` so config discovery can fall through to lower-priority formats; an\n * evaluation failure throws because a present PKL config should not silently be\n * ignored.\n */\nexport function loadPklConfigJson(filePath) {\n const pklBin = findPklBinary();\n if (!pklBin) {\n console.warn(\n \"[vize] pkl CLI not found. Install @pkl-community/pkl or add pkl to PATH. \" +\n \"Falling back to the next config format.\",\n );\n return null;\n }\n\n const patchedFilePath = createPklConfigWithBundledSchemaImports(filePath);\n const evalFilePath = patchedFilePath ?? filePath;\n try {\n return execFileSync(pklBin, [\"eval\", \"-f\", \"json\", evalFilePath], {\n cwd: path.dirname(filePath),\n encoding: \"utf-8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n timeout: 30_000,\n });\n } catch (error) {\n throw new Error(`Failed to evaluate vize PKL config at ${filePath}: ${getErrorMessage(error)}`);\n } finally {\n if (patchedFilePath) {\n fs.rmSync(patchedFilePath, { force: true });\n }\n }\n}\n\nfunction findPklBinary() {\n try {\n const pklPkgPath = import.meta.resolve?.(\"@pkl-community/pkl\");\n if (pklPkgPath) {\n const pklLibDir = path.dirname(fileURLToPath(pklPkgPath));\n const pklPackageDir = path.dirname(pklLibDir);\n const candidates = [\n path.join(pklLibDir, \"main.js\"),\n path.join(pklPackageDir, \"pkl\"),\n path.join(pklPackageDir, \"pkl.exe\"),\n ];\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n try {\n execFileSync(candidate, [\"--version\"], { stdio: \"ignore\" });\n return candidate;\n } catch {\n // Keep looking: the shim can exist when its runtime is unavailable.\n }\n }\n }\n }\n } catch {\n // Fall back to PATH below.\n }\n\n try {\n execFileSync(\"pkl\", [\"--version\"], { stdio: \"ignore\" });\n return \"pkl\";\n } catch {\n return null;\n }\n}\n\nfunction createPklConfigWithBundledSchemaImports(filePath) {\n const configDir = path.dirname(filePath);\n const source = fs.readFileSync(filePath, \"utf-8\");\n let patched = false;\n\n const content = source.replace(\n DOCUMENTED_PKL_SCHEMA_IMPORT_RE,\n (match, prefix, quote, schemaFile) => {\n const projectSchemaPath = path.join(configDir, \"node_modules\", \"vize\", \"pkl\", schemaFile);\n if (fs.existsSync(projectSchemaPath)) {\n return match;\n }\n\n const bundledSchemaPath = path.join(PACKAGE_ROOT, \"pkl\", schemaFile);\n if (!fs.existsSync(bundledSchemaPath)) {\n return match;\n }\n\n patched = true;\n return `${prefix}${quote}${pathToFileURL(bundledSchemaPath).href}${quote}`;\n },\n );\n\n if (!patched) {\n return null;\n }\n\n const tempFile = path.join(\n configDir,\n `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.pkl`,\n );\n fs.writeFileSync(tempFile, content, { flag: \"wx\", mode: 0o600 });\n return tempFile;\n}\n\nfunction getErrorMessage(error) {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { transform } from \"oxc-transform\";\nimport type {\n ResolvedVizeConfig,\n LoadConfigOptions,\n UserConfigExport,\n ConfigEnv,\n GlobalTypesConfig,\n GlobalTypeDeclaration,\n} from \"./types/index.js\";\nimport { loadPklConfigJson } from \"./config/pkl.js\";\n\ntype NativeConfigHelpers = {\n normalizeVizeConfig(value: unknown): unknown;\n};\n\nconst require = createRequire(import.meta.url);\nconst native = require(\"@vizejs/native\") as NativeConfigHelpers;\n\nexport const CONFIG_FILE_NAMES = [\n \"vize.config.pkl\",\n \"vize.config.ts\",\n \"vize.config.js\",\n \"vize.config.mjs\",\n \"vize.config.json\",\n] as const;\n\nconst DEFAULT_CONFIG_ENV: ConfigEnv = {\n mode: \"development\",\n command: \"serve\",\n};\n\nconst PACKAGE_ROOT = path.resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"..\");\n\nexport const VIZE_CONFIG_JSON_SCHEMA_PATH = path.join(\n PACKAGE_ROOT,\n \"schemas\",\n \"vize.config.schema.json\",\n);\n\nexport const VIZE_CONFIG_PKL_SCHEMA_PATH = path.join(PACKAGE_ROOT, \"pkl\", \"vize.pkl\");\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.*` from the specified directory.\n */\nexport async function loadConfig(\n root: string,\n options: LoadConfigOptions = {},\n): Promise<ResolvedVizeConfig | null> {\n const { mode = \"root\", configFile, env } = options;\n\n if (mode === \"none\") {\n return null;\n }\n\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 if (mode === \"auto\") {\n return loadConfigFromDirAuto(root, env);\n }\n\n return loadConfigFromDir(root, env);\n}\n\nasync function loadConfigFromDir(dir: string, env?: ConfigEnv): Promise<ResolvedVizeConfig | null> {\n for (const name of CONFIG_FILE_NAMES) {\n const filePath = path.join(dir, name);\n if (!fs.existsSync(filePath)) {\n continue;\n }\n\n const config = await loadConfigFile(filePath, env);\n if (config !== null) {\n return config;\n }\n }\n return null;\n}\n\nasync function loadConfigFromDirAuto(\n startDir: string,\n env?: ConfigEnv,\n): Promise<ResolvedVizeConfig | null> {\n let currentDir = path.resolve(startDir);\n\n while (true) {\n const config = await loadConfigFromDir(currentDir, env);\n if (config !== null) {\n return config;\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n return null;\n }\n\n currentDir = parentDir;\n }\n}\n\nasync function loadConfigFile(\n filePath: string,\n env?: ConfigEnv,\n): Promise<ResolvedVizeConfig | null> {\n const absolutePath = path.resolve(filePath);\n if (!fs.existsSync(absolutePath)) {\n return null;\n }\n\n const ext = path.extname(absolutePath);\n\n if (ext === \".pkl\") {\n return loadPklConfig(absolutePath);\n }\n\n if (ext === \".json\") {\n const content = fs.readFileSync(absolutePath, \"utf-8\");\n return parseJsonConfig(content, absolutePath);\n }\n\n if (ext === \".ts\") {\n return loadTypeScriptConfig(absolutePath, env);\n }\n\n return loadESMConfig(absolutePath, env);\n}\n\nfunction loadPklConfig(filePath: string): ResolvedVizeConfig | null {\n const output = loadPklConfigJson(filePath);\n return output === null ? null : parseJsonConfig(output, filePath);\n}\n\nexport async function resolveConfigExport(\n exported: UserConfigExport,\n env?: ConfigEnv,\n): Promise<ResolvedVizeConfig> {\n if (typeof exported === \"function\") {\n return normalizeLoadedConfig(await exported(env ?? DEFAULT_CONFIG_ENV));\n }\n\n return normalizeLoadedConfig(exported);\n}\n\nasync function loadTypeScriptConfig(\n filePath: string,\n env?: ConfigEnv,\n): Promise<ResolvedVizeConfig> {\n const source = fs.readFileSync(filePath, \"utf-8\");\n const result = await transform(filePath, source, {\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n const tempFile = path.join(\n path.dirname(filePath),\n `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.mjs`,\n );\n fs.writeFileSync(tempFile, result.code, { flag: \"wx\", mode: 0o600 });\n\n try {\n const module = await importFresh(tempFile);\n const exported: UserConfigExport = module.default || module;\n return resolveConfigExport(exported, env);\n } finally {\n fs.rmSync(tempFile, { force: true });\n }\n}\n\nasync function loadESMConfig(filePath: string, env?: ConfigEnv): Promise<ResolvedVizeConfig> {\n const module = await importFresh(filePath);\n const exported: UserConfigExport = module.default || module;\n return resolveConfigExport(exported, env);\n}\n\nasync function importFresh(filePath: string): Promise<Record<string, unknown>> {\n const fileUrl = pathToFileURL(filePath);\n fileUrl.searchParams.set(\"t\", String(fs.statSync(filePath).mtimeMs));\n return import(fileUrl.href);\n}\n\nfunction parseJsonConfig(content: string, filePath: string): ResolvedVizeConfig {\n try {\n return normalizeLoadedConfig(JSON.parse(content));\n } catch (error) {\n throw new Error(`Failed to parse vize config JSON at ${filePath}: ${getErrorMessage(error)}`);\n }\n}\n\nfunction normalizeLoadedConfig(config: unknown): ResolvedVizeConfig {\n return native.normalizeVizeConfig(config ?? null) as ResolvedVizeConfig;\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n\n/**\n * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects\n */\nexport function normalizeGlobalTypes(\n config: GlobalTypesConfig,\n): Record<string, GlobalTypeDeclaration> {\n const resolvedConfig =\n \"types\" in config &&\n typeof config.types === \"object\" &&\n config.types !== null &&\n !Array.isArray(config.types)\n ? config.types\n : config;\n\n const result: Record<string, GlobalTypeDeclaration> = {};\n for (const [key, value] of Object.entries(resolvedConfig)) {\n if (typeof value === \"string\") {\n result[key] = { type: value };\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n"],"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, s as resolveConfigExport, t as CONFIG_FILE_NAMES } from "./config-DqgVr12-.mjs";
1
+ import { a as loadConfig, i as defineConfig, n as VIZE_CONFIG_JSON_SCHEMA_PATH, o as normalizeGlobalTypes, r as VIZE_CONFIG_PKL_SCHEMA_PATH, s as resolveConfigExport, t as CONFIG_FILE_NAMES } from "./config-BD4XICzq.mjs";
2
2
  export { CONFIG_FILE_NAMES, VIZE_CONFIG_JSON_SCHEMA_PATH, VIZE_CONFIG_PKL_SCHEMA_PATH, defineConfig, loadConfig, normalizeGlobalTypes, resolveConfigExport };
package/dist/config.mjs CHANGED
@@ -1,270 +1,2 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { execFileSync } from "node:child_process";
4
- import { randomUUID } from "node:crypto";
5
- import { fileURLToPath, pathToFileURL } from "node:url";
6
- import { transform } from "oxc-transform";
7
- //#region src/config.ts
8
- const CONFIG_FILE_NAMES = [
9
- "vize.config.pkl",
10
- "vize.config.ts",
11
- "vize.config.js",
12
- "vize.config.mjs",
13
- "vize.config.json"
14
- ];
15
- const DEFAULT_CONFIG_ENV = {
16
- mode: "development",
17
- command: "serve"
18
- };
19
- const PACKAGE_ROOT = path.resolve(fileURLToPath(new URL(".", import.meta.url)), "..");
20
- const VIZE_CONFIG_JSON_SCHEMA_PATH = path.join(PACKAGE_ROOT, "schemas", "vize.config.schema.json");
21
- const VIZE_CONFIG_PKL_SCHEMA_PATH = path.join(PACKAGE_ROOT, "pkl", "vize.pkl");
22
- const DOCUMENTED_PKL_SCHEMA_IMPORT_RE = /^(\s*(?:amends|import)\s+)(["'])node_modules\/vize\/pkl\/(VizeConfig\.pkl|vize\.pkl)\2/gm;
23
- /**
24
- * Define a Vize configuration with type checking.
25
- * Accepts a plain object or a function that receives ConfigEnv.
26
- */
27
- function defineConfig(config) {
28
- return config;
29
- }
30
- /**
31
- * Load `vize.config.*` from the specified directory.
32
- */
33
- async function loadConfig(root, options = {}) {
34
- const { mode = "root", configFile, env } = options;
35
- if (mode === "none") return null;
36
- if (configFile) {
37
- const absolutePath = path.isAbsolute(configFile) ? configFile : path.resolve(root, configFile);
38
- if (fs.existsSync(absolutePath)) return loadConfigFile(absolutePath, env);
39
- return null;
40
- }
41
- if (mode === "auto") return loadConfigFromDirAuto(root, env);
42
- return loadConfigFromDir(root, env);
43
- }
44
- async function loadConfigFromDir(dir, env) {
45
- for (const name of CONFIG_FILE_NAMES) {
46
- const filePath = path.join(dir, name);
47
- if (!fs.existsSync(filePath)) continue;
48
- const config = await loadConfigFile(filePath, env);
49
- if (config !== null) return config;
50
- }
51
- return null;
52
- }
53
- async function loadConfigFromDirAuto(startDir, env) {
54
- let currentDir = path.resolve(startDir);
55
- while (true) {
56
- const config = await loadConfigFromDir(currentDir, env);
57
- if (config !== null) return config;
58
- const parentDir = path.dirname(currentDir);
59
- if (parentDir === currentDir) return null;
60
- currentDir = parentDir;
61
- }
62
- }
63
- async function loadConfigFile(filePath, env) {
64
- const absolutePath = path.resolve(filePath);
65
- if (!fs.existsSync(absolutePath)) return null;
66
- const ext = path.extname(absolutePath);
67
- if (ext === ".pkl") return loadPklConfig(absolutePath);
68
- if (ext === ".json") return parseJsonConfig(fs.readFileSync(absolutePath, "utf-8"), absolutePath);
69
- if (ext === ".ts") return loadTypeScriptConfig(absolutePath, env);
70
- return loadESMConfig(absolutePath, env);
71
- }
72
- function findPklBinary() {
73
- try {
74
- const pklPkgPath = import.meta.resolve?.("@pkl-community/pkl");
75
- if (pklPkgPath) {
76
- const pklLibDir = path.dirname(fileURLToPath(pklPkgPath));
77
- const pklPackageDir = path.dirname(pklLibDir);
78
- const candidates = [
79
- path.join(pklLibDir, "main.js"),
80
- path.join(pklPackageDir, "pkl"),
81
- path.join(pklPackageDir, "pkl.exe")
82
- ];
83
- for (const candidate of candidates) if (fs.existsSync(candidate)) try {
84
- execFileSync(candidate, ["--version"], { stdio: "ignore" });
85
- return candidate;
86
- } catch {}
87
- }
88
- } catch {}
89
- try {
90
- execFileSync("pkl", ["--version"], { stdio: "ignore" });
91
- return "pkl";
92
- } catch {
93
- return null;
94
- }
95
- }
96
- function loadPklConfig(filePath) {
97
- const pklBin = findPklBinary();
98
- if (!pklBin) {
99
- console.warn("[vize] pkl CLI not found. Install @pkl-community/pkl or add pkl to PATH. Falling back to the next config format.");
100
- return null;
101
- }
102
- let output;
103
- const patchedFilePath = createPklConfigWithBundledSchemaImports(filePath);
104
- const evalFilePath = patchedFilePath ?? filePath;
105
- try {
106
- output = execFileSync(pklBin, [
107
- "eval",
108
- "-f",
109
- "json",
110
- evalFilePath
111
- ], {
112
- cwd: path.dirname(filePath),
113
- encoding: "utf-8",
114
- stdio: [
115
- "ignore",
116
- "pipe",
117
- "pipe"
118
- ],
119
- timeout: 3e4
120
- });
121
- } catch (error) {
122
- throw new Error(`Failed to evaluate vize PKL config at ${filePath}: ${getErrorMessage(error)}`);
123
- } finally {
124
- if (patchedFilePath) fs.rmSync(patchedFilePath, { force: true });
125
- }
126
- return parseJsonConfig(output, filePath);
127
- }
128
- function createPklConfigWithBundledSchemaImports(filePath) {
129
- const configDir = path.dirname(filePath);
130
- const source = fs.readFileSync(filePath, "utf-8");
131
- let patched = false;
132
- const content = source.replace(DOCUMENTED_PKL_SCHEMA_IMPORT_RE, (match, prefix, quote, schemaFile) => {
133
- const projectSchemaPath = path.join(configDir, "node_modules", "vize", "pkl", schemaFile);
134
- if (fs.existsSync(projectSchemaPath)) return match;
135
- const bundledSchemaPath = path.join(PACKAGE_ROOT, "pkl", schemaFile);
136
- if (!fs.existsSync(bundledSchemaPath)) return match;
137
- patched = true;
138
- return `${prefix}${quote}${pathToFileURL(bundledSchemaPath).href}${quote}`;
139
- });
140
- if (!patched) return null;
141
- const tempFile = path.join(configDir, `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.pkl`);
142
- fs.writeFileSync(tempFile, content, {
143
- flag: "wx",
144
- mode: 384
145
- });
146
- return tempFile;
147
- }
148
- async function resolveConfigExport(exported, env) {
149
- if (typeof exported === "function") return normalizeLoadedConfig(await exported(env ?? DEFAULT_CONFIG_ENV));
150
- return normalizeLoadedConfig(exported);
151
- }
152
- async function loadTypeScriptConfig(filePath, env) {
153
- const result = await transform(filePath, fs.readFileSync(filePath, "utf-8"), { typescript: { onlyRemoveTypeImports: true } });
154
- const tempFile = path.join(path.dirname(filePath), `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.mjs`);
155
- fs.writeFileSync(tempFile, result.code, {
156
- flag: "wx",
157
- mode: 384
158
- });
159
- try {
160
- const module = await importFresh(tempFile);
161
- return resolveConfigExport(module.default || module, env);
162
- } finally {
163
- fs.rmSync(tempFile, { force: true });
164
- }
165
- }
166
- async function loadESMConfig(filePath, env) {
167
- const module = await importFresh(filePath);
168
- return resolveConfigExport(module.default || module, env);
169
- }
170
- async function importFresh(filePath) {
171
- const fileUrl = pathToFileURL(filePath);
172
- fileUrl.searchParams.set("t", String(fs.statSync(filePath).mtimeMs));
173
- return import(fileUrl.href);
174
- }
175
- function parseJsonConfig(content, filePath) {
176
- try {
177
- return normalizeLoadedConfig(JSON.parse(content));
178
- } catch (error) {
179
- throw new Error(`Failed to parse vize config JSON at ${filePath}: ${getErrorMessage(error)}`);
180
- }
181
- }
182
- function normalizeLoadedConfig(config) {
183
- const normalized = stripNullish(config);
184
- if (Array.isArray(normalized)) return normalizeConfigEntries(normalized);
185
- return normalizeConfigObject(normalized ?? {});
186
- }
187
- function normalizeConfigObject(config) {
188
- const { entries: rawEntries, ...rootConfig } = normalizeConfigAliases(config);
189
- const rootEntry = rootConfig;
190
- const entries = [...isEmptyConfigEntry(rootEntry) ? [] : [rootEntry], ...(rawEntries ?? []).map((entry) => normalizeConfigAliases(entry))];
191
- return {
192
- ...rootEntry,
193
- entries
194
- };
195
- }
196
- function normalizeConfigEntries(entries) {
197
- const normalizedEntries = entries.map((entry) => normalizeConfigAliases(entry));
198
- return {
199
- ...mergeConfigEntries(normalizedEntries.filter(isGlobalConfigEntry)),
200
- entries: normalizedEntries
201
- };
202
- }
203
- function mergeConfigEntries(entries) {
204
- const result = {};
205
- for (const entry of entries) deepMerge(result, stripEntryMetadata(entry));
206
- return result;
207
- }
208
- function stripEntryMetadata(entry) {
209
- const { name, basePath, files, ignores, extends: extendsConfig, ...config } = entry;
210
- return config;
211
- }
212
- function deepMerge(target, source) {
213
- for (const [key, value] of Object.entries(source)) {
214
- if (value === void 0) continue;
215
- const current = target[key];
216
- if (isPlainObject(current) && isPlainObject(value)) deepMerge(current, value);
217
- else target[key] = value;
218
- }
219
- }
220
- function isGlobalConfigEntry(entry) {
221
- return entry.basePath === void 0 && entry.files === void 0 && entry.ignores === void 0;
222
- }
223
- function isEmptyConfigEntry(entry) {
224
- return Object.keys(entry).length === 0;
225
- }
226
- function stripNullish(value) {
227
- if (value === null) return;
228
- if (Array.isArray(value)) return value.map((entry) => stripNullish(entry)).filter((entry) => entry !== void 0);
229
- if (isPlainObject(value)) {
230
- const result = {};
231
- for (const [key, entry] of Object.entries(value)) {
232
- const normalizedEntry = stripNullish(entry);
233
- if (normalizedEntry !== void 0) result[key] = normalizedEntry;
234
- }
235
- return result;
236
- }
237
- return value;
238
- }
239
- function isPlainObject(value) {
240
- if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
241
- const prototype = Object.getPrototypeOf(value);
242
- return prototype === Object.prototype || prototype === null;
243
- }
244
- function getErrorMessage(error) {
245
- if (error instanceof Error) return error.message;
246
- return String(error);
247
- }
248
- /**
249
- * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects
250
- */
251
- function normalizeGlobalTypes(config) {
252
- const resolvedConfig = "types" in config && typeof config.types === "object" && config.types !== null && !Array.isArray(config.types) ? config.types : config;
253
- const result = {};
254
- for (const [key, value] of Object.entries(resolvedConfig)) if (typeof value === "string") result[key] = { type: value };
255
- else result[key] = value;
256
- return result;
257
- }
258
- function normalizeConfigAliases(config) {
259
- if (config.lsp === void 0) return config;
260
- const { lsp, ...rest } = config;
261
- if (config.languageServer !== void 0) return rest;
262
- return {
263
- ...rest,
264
- languageServer: lsp
265
- };
266
- }
267
- //#endregion
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, s as resolveConfigExport, t as CONFIG_FILE_NAMES } from "./config-D1BwAgHh.mjs";
268
2
  export { CONFIG_FILE_NAMES, VIZE_CONFIG_JSON_SCHEMA_PATH, VIZE_CONFIG_PKL_SCHEMA_PATH, defineConfig, loadConfig, normalizeGlobalTypes, resolveConfigExport };
269
-
270
- //# sourceMappingURL=config.mjs.map
package/dist/index.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as RuleSeverity, C as LintPreset, D as MuseaConfig, E as MuseaAutogenConfig, F as VueVersion, M as VitePluginConfig, N as VizeConfig, O as MuseaVrtConfig, P as VizeConfigEntry, S as LanguageServerConfig, T as MuseaA11yConfig, _ as CompilerCompatibilityConfig, a as loadConfig, b as GlobalTypeDeclaration, c as LspConfig, d as MaybePromise, f as ResolvedVizeConfig, g as LintRulesConfig, h as LintRuleName, i as defineConfig, j as TypeCheckerConfig, k as RuleCategory, l as ConfigEnv, m as UserConfigInput, n as VIZE_CONFIG_JSON_SCHEMA_PATH, o as normalizeGlobalTypes, p as UserConfigExport, r as VIZE_CONFIG_PKL_SCHEMA_PATH, s as resolveConfigExport, t as CONFIG_FILE_NAMES, u as LoadConfigOptions, v as CompilerConfig, w as LinterConfig, x as GlobalTypesConfig, y as FormatterConfig } from "./config-DqgVr12-.mjs";
1
+ import { A as RuleSeverity, C as LintPreset, D as MuseaConfig, E as MuseaAutogenConfig, F as VueVersion, M as VitePluginConfig, N as VizeConfig, O as MuseaVrtConfig, P as VizeConfigEntry, S as LanguageServerConfig, T as MuseaA11yConfig, _ as CompilerCompatibilityConfig, a as loadConfig, b as GlobalTypeDeclaration, c as LspConfig, d as MaybePromise, f as ResolvedVizeConfig, g as LintRulesConfig, h as LintRuleName, i as defineConfig, j as TypeCheckerConfig, k as RuleCategory, l as ConfigEnv, m as UserConfigInput, n as VIZE_CONFIG_JSON_SCHEMA_PATH, o as normalizeGlobalTypes, p as UserConfigExport, r as VIZE_CONFIG_PKL_SCHEMA_PATH, s as resolveConfigExport, t as CONFIG_FILE_NAMES, u as LoadConfigOptions, v as CompilerConfig, w as LinterConfig, x as GlobalTypesConfig, y as FormatterConfig } from "./config-BD4XICzq.mjs";
2
2
  export { CONFIG_FILE_NAMES, type CompilerCompatibilityConfig, 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 ResolvedVizeConfig, type RuleCategory, type RuleSeverity, type TypeCheckerConfig, type UserConfigExport, type UserConfigInput, VIZE_CONFIG_JSON_SCHEMA_PATH, VIZE_CONFIG_PKL_SCHEMA_PATH, type VitePluginConfig, type VizeConfig, type VizeConfigEntry, type VueVersion, defineConfig, loadConfig, normalizeGlobalTypes, resolveConfigExport };
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { CONFIG_FILE_NAMES, VIZE_CONFIG_JSON_SCHEMA_PATH, VIZE_CONFIG_PKL_SCHEMA_PATH, defineConfig, loadConfig, normalizeGlobalTypes, resolveConfigExport } from "./config.mjs";
1
+ import { a as loadConfig, i as defineConfig, n as VIZE_CONFIG_JSON_SCHEMA_PATH, o as normalizeGlobalTypes, r as VIZE_CONFIG_PKL_SCHEMA_PATH, s as resolveConfigExport, t as CONFIG_FILE_NAMES } from "./config-D1BwAgHh.mjs";
2
2
  export { CONFIG_FILE_NAMES, VIZE_CONFIG_JSON_SCHEMA_PATH, VIZE_CONFIG_PKL_SCHEMA_PATH, defineConfig, loadConfig, normalizeGlobalTypes, resolveConfigExport };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vize",
3
- "version": "0.174.0",
3
+ "version": "0.175.0",
4
4
  "description": "Vize - High-performance Vue.js toolchain in Rust",
5
5
  "keywords": [
6
6
  "cli",
@@ -50,7 +50,7 @@
50
50
  "access": "public"
51
51
  },
52
52
  "dependencies": {
53
- "@vizejs/native": "0.174.0",
53
+ "@vizejs/native": "0.175.0",
54
54
  "oxc-transform": "0.130.0",
55
55
  "vue": "3.5.34"
56
56
  },
@@ -0,0 +1 @@
1
+ export function loadPklConfigJson(filePath: string): string | null;
@@ -0,0 +1,126 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { execFileSync } from "node:child_process";
4
+ import { randomUUID } from "node:crypto";
5
+ import { fileURLToPath, pathToFileURL } from "node:url";
6
+
7
+ const PACKAGE_ROOT = path.resolve(fileURLToPath(new URL(".", import.meta.url)), "../..");
8
+
9
+ const DOCUMENTED_PKL_SCHEMA_IMPORT_RE =
10
+ /^(\s*(?:amends|import)\s+)(["'])node_modules\/vize\/pkl\/(VizeConfig\.pkl|vize\.pkl)\2/gm;
11
+
12
+ /**
13
+ * Evaluate a `vize.config.pkl` file and return its JSON representation.
14
+ *
15
+ * The npm-facing loader keeps PKL execution in Node because it needs package
16
+ * resolution for `@pkl-community/pkl`, but all structural config normalization
17
+ * happens in Rust after this function returns. A missing PKL runtime returns
18
+ * `null` so config discovery can fall through to lower-priority formats; an
19
+ * evaluation failure throws because a present PKL config should not silently be
20
+ * ignored.
21
+ */
22
+ export function loadPklConfigJson(filePath) {
23
+ const pklBin = findPklBinary();
24
+ if (!pklBin) {
25
+ console.warn(
26
+ "[vize] pkl CLI not found. Install @pkl-community/pkl or add pkl to PATH. " +
27
+ "Falling back to the next config format.",
28
+ );
29
+ return null;
30
+ }
31
+
32
+ const patchedFilePath = createPklConfigWithBundledSchemaImports(filePath);
33
+ const evalFilePath = patchedFilePath ?? filePath;
34
+ try {
35
+ return execFileSync(pklBin, ["eval", "-f", "json", evalFilePath], {
36
+ cwd: path.dirname(filePath),
37
+ encoding: "utf-8",
38
+ stdio: ["ignore", "pipe", "pipe"],
39
+ timeout: 30_000,
40
+ });
41
+ } catch (error) {
42
+ throw new Error(`Failed to evaluate vize PKL config at ${filePath}: ${getErrorMessage(error)}`);
43
+ } finally {
44
+ if (patchedFilePath) {
45
+ fs.rmSync(patchedFilePath, { force: true });
46
+ }
47
+ }
48
+ }
49
+
50
+ function findPklBinary() {
51
+ try {
52
+ const pklPkgPath = import.meta.resolve?.("@pkl-community/pkl");
53
+ if (pklPkgPath) {
54
+ const pklLibDir = path.dirname(fileURLToPath(pklPkgPath));
55
+ const pklPackageDir = path.dirname(pklLibDir);
56
+ const candidates = [
57
+ path.join(pklLibDir, "main.js"),
58
+ path.join(pklPackageDir, "pkl"),
59
+ path.join(pklPackageDir, "pkl.exe"),
60
+ ];
61
+
62
+ for (const candidate of candidates) {
63
+ if (fs.existsSync(candidate)) {
64
+ try {
65
+ execFileSync(candidate, ["--version"], { stdio: "ignore" });
66
+ return candidate;
67
+ } catch {
68
+ // Keep looking: the shim can exist when its runtime is unavailable.
69
+ }
70
+ }
71
+ }
72
+ }
73
+ } catch {
74
+ // Fall back to PATH below.
75
+ }
76
+
77
+ try {
78
+ execFileSync("pkl", ["--version"], { stdio: "ignore" });
79
+ return "pkl";
80
+ } catch {
81
+ return null;
82
+ }
83
+ }
84
+
85
+ function createPklConfigWithBundledSchemaImports(filePath) {
86
+ const configDir = path.dirname(filePath);
87
+ const source = fs.readFileSync(filePath, "utf-8");
88
+ let patched = false;
89
+
90
+ const content = source.replace(
91
+ DOCUMENTED_PKL_SCHEMA_IMPORT_RE,
92
+ (match, prefix, quote, schemaFile) => {
93
+ const projectSchemaPath = path.join(configDir, "node_modules", "vize", "pkl", schemaFile);
94
+ if (fs.existsSync(projectSchemaPath)) {
95
+ return match;
96
+ }
97
+
98
+ const bundledSchemaPath = path.join(PACKAGE_ROOT, "pkl", schemaFile);
99
+ if (!fs.existsSync(bundledSchemaPath)) {
100
+ return match;
101
+ }
102
+
103
+ patched = true;
104
+ return `${prefix}${quote}${pathToFileURL(bundledSchemaPath).href}${quote}`;
105
+ },
106
+ );
107
+
108
+ if (!patched) {
109
+ return null;
110
+ }
111
+
112
+ const tempFile = path.join(
113
+ configDir,
114
+ `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.pkl`,
115
+ );
116
+ fs.writeFileSync(tempFile, content, { flag: "wx", mode: 0o600 });
117
+ return tempFile;
118
+ }
119
+
120
+ function getErrorMessage(error) {
121
+ if (error instanceof Error) {
122
+ return error.message;
123
+ }
124
+
125
+ return String(error);
126
+ }
package/src/config.ts CHANGED
@@ -1,13 +1,10 @@
1
1
  import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
- import { execFileSync } from "node:child_process";
4
3
  import { randomUUID } from "node:crypto";
4
+ import { createRequire } from "node:module";
5
5
  import { fileURLToPath, pathToFileURL } from "node:url";
6
6
  import { transform } from "oxc-transform";
7
7
  import type {
8
- LanguageServerConfig,
9
- VizeConfig,
10
- VizeConfigEntry,
11
8
  ResolvedVizeConfig,
12
9
  LoadConfigOptions,
13
10
  UserConfigExport,
@@ -15,6 +12,14 @@ import type {
15
12
  GlobalTypesConfig,
16
13
  GlobalTypeDeclaration,
17
14
  } from "./types/index.js";
15
+ import { loadPklConfigJson } from "./config/pkl.js";
16
+
17
+ type NativeConfigHelpers = {
18
+ normalizeVizeConfig(value: unknown): unknown;
19
+ };
20
+
21
+ const require = createRequire(import.meta.url);
22
+ const native = require("@vizejs/native") as NativeConfigHelpers;
18
23
 
19
24
  export const CONFIG_FILE_NAMES = [
20
25
  "vize.config.pkl",
@@ -39,17 +44,6 @@ export const VIZE_CONFIG_JSON_SCHEMA_PATH = path.join(
39
44
 
40
45
  export const VIZE_CONFIG_PKL_SCHEMA_PATH = path.join(PACKAGE_ROOT, "pkl", "vize.pkl");
41
46
 
42
- const DOCUMENTED_PKL_SCHEMA_IMPORT_RE =
43
- /^(\s*(?:amends|import)\s+)(["'])node_modules\/vize\/pkl\/(VizeConfig\.pkl|vize\.pkl)\2/gm;
44
-
45
- type CompatVizeConfig = VizeConfig & {
46
- lsp?: LanguageServerConfig;
47
- };
48
-
49
- type CompatVizeConfigEntry = VizeConfigEntry & {
50
- lsp?: LanguageServerConfig;
51
- };
52
-
53
47
  /**
54
48
  * Define a Vize configuration with type checking.
55
49
  * Accepts a plain object or a function that receives ConfigEnv.
@@ -149,104 +143,9 @@ async function loadConfigFile(
149
143
  return loadESMConfig(absolutePath, env);
150
144
  }
151
145
 
152
- function findPklBinary(): string | null {
153
- try {
154
- const pklPkgPath = import.meta.resolve?.("@pkl-community/pkl");
155
- if (pklPkgPath) {
156
- const pklLibDir = path.dirname(fileURLToPath(pklPkgPath));
157
- const pklPackageDir = path.dirname(pklLibDir);
158
- const candidates = [
159
- path.join(pklLibDir, "main.js"),
160
- path.join(pklPackageDir, "pkl"),
161
- path.join(pklPackageDir, "pkl.exe"),
162
- ];
163
-
164
- for (const candidate of candidates) {
165
- if (fs.existsSync(candidate)) {
166
- try {
167
- execFileSync(candidate, ["--version"], { stdio: "ignore" });
168
- return candidate;
169
- } catch {
170
- // Keep looking: the bundled shim can exist even when its runtime is unavailable.
171
- }
172
- }
173
- }
174
- }
175
- } catch {
176
- // Fall back to PATH below.
177
- }
178
-
179
- try {
180
- execFileSync("pkl", ["--version"], { stdio: "ignore" });
181
- return "pkl";
182
- } catch {
183
- return null;
184
- }
185
- }
186
-
187
146
  function loadPklConfig(filePath: string): ResolvedVizeConfig | null {
188
- const pklBin = findPklBinary();
189
- if (!pklBin) {
190
- console.warn(
191
- "[vize] pkl CLI not found. Install @pkl-community/pkl or add pkl to PATH. " +
192
- "Falling back to the next config format.",
193
- );
194
- return null;
195
- }
196
-
197
- let output: string;
198
- const patchedFilePath = createPklConfigWithBundledSchemaImports(filePath);
199
- const evalFilePath = patchedFilePath ?? filePath;
200
- try {
201
- output = execFileSync(pklBin, ["eval", "-f", "json", evalFilePath], {
202
- cwd: path.dirname(filePath),
203
- encoding: "utf-8",
204
- stdio: ["ignore", "pipe", "pipe"],
205
- timeout: 30_000,
206
- });
207
- } catch (error) {
208
- throw new Error(`Failed to evaluate vize PKL config at ${filePath}: ${getErrorMessage(error)}`);
209
- } finally {
210
- if (patchedFilePath) {
211
- fs.rmSync(patchedFilePath, { force: true });
212
- }
213
- }
214
- return parseJsonConfig(output, filePath);
215
- }
216
-
217
- function createPklConfigWithBundledSchemaImports(filePath: string): string | null {
218
- const configDir = path.dirname(filePath);
219
- const source = fs.readFileSync(filePath, "utf-8");
220
- let patched = false;
221
-
222
- const content = source.replace(
223
- DOCUMENTED_PKL_SCHEMA_IMPORT_RE,
224
- (match, prefix, quote, schemaFile) => {
225
- const projectSchemaPath = path.join(configDir, "node_modules", "vize", "pkl", schemaFile);
226
- if (fs.existsSync(projectSchemaPath)) {
227
- return match;
228
- }
229
-
230
- const bundledSchemaPath = path.join(PACKAGE_ROOT, "pkl", schemaFile);
231
- if (!fs.existsSync(bundledSchemaPath)) {
232
- return match;
233
- }
234
-
235
- patched = true;
236
- return `${prefix}${quote}${pathToFileURL(bundledSchemaPath).href}${quote}`;
237
- },
238
- );
239
-
240
- if (!patched) {
241
- return null;
242
- }
243
-
244
- const tempFile = path.join(
245
- configDir,
246
- `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.pkl`,
247
- );
248
- fs.writeFileSync(tempFile, content, { flag: "wx", mode: 0o600 });
249
- return tempFile;
147
+ const output = loadPklConfigJson(filePath);
148
+ return output === null ? null : parseJsonConfig(output, filePath);
250
149
  }
251
150
 
252
151
  export async function resolveConfigExport(
@@ -307,113 +206,7 @@ function parseJsonConfig(content: string, filePath: string): ResolvedVizeConfig
307
206
  }
308
207
 
309
208
  function normalizeLoadedConfig(config: unknown): ResolvedVizeConfig {
310
- const normalized = stripNullish(config);
311
- if (Array.isArray(normalized)) {
312
- return normalizeConfigEntries(normalized as CompatVizeConfigEntry[]);
313
- }
314
-
315
- return normalizeConfigObject((normalized ?? {}) as CompatVizeConfig);
316
- }
317
-
318
- function normalizeConfigObject(config: CompatVizeConfig): ResolvedVizeConfig {
319
- const { entries: rawEntries, ...rootConfig } = normalizeConfigAliases(config) as VizeConfig & {
320
- entries?: CompatVizeConfigEntry[];
321
- };
322
- const rootEntry = rootConfig as VizeConfigEntry;
323
- const entries = [
324
- ...(isEmptyConfigEntry(rootEntry) ? [] : [rootEntry]),
325
- ...(rawEntries ?? []).map((entry) => normalizeConfigAliases(entry) as VizeConfigEntry),
326
- ];
327
-
328
- return {
329
- ...rootEntry,
330
- entries,
331
- };
332
- }
333
-
334
- function normalizeConfigEntries(entries: CompatVizeConfigEntry[]): ResolvedVizeConfig {
335
- const normalizedEntries = entries.map(
336
- (entry) => normalizeConfigAliases(entry) as VizeConfigEntry,
337
- );
338
- const globalConfig = mergeConfigEntries(normalizedEntries.filter(isGlobalConfigEntry));
339
-
340
- return {
341
- ...globalConfig,
342
- entries: normalizedEntries,
343
- };
344
- }
345
-
346
- function mergeConfigEntries(entries: VizeConfigEntry[]): VizeConfigEntry {
347
- const result: Record<string, unknown> = {};
348
- for (const entry of entries) {
349
- deepMerge(result, stripEntryMetadata(entry));
350
- }
351
- return result as VizeConfigEntry;
352
- }
353
-
354
- function stripEntryMetadata(entry: VizeConfigEntry): Partial<VizeConfigEntry> {
355
- const { name, basePath, files, ignores, extends: extendsConfig, ...config } = entry;
356
- void name;
357
- void basePath;
358
- void files;
359
- void ignores;
360
- void extendsConfig;
361
- return config;
362
- }
363
-
364
- function deepMerge(target: Record<string, unknown>, source: Record<string, unknown>): void {
365
- for (const [key, value] of Object.entries(source)) {
366
- if (value === undefined) {
367
- continue;
368
- }
369
-
370
- const current = target[key];
371
- if (isPlainObject(current) && isPlainObject(value)) {
372
- deepMerge(current, value);
373
- } else {
374
- target[key] = value;
375
- }
376
- }
377
- }
378
-
379
- function isGlobalConfigEntry(entry: VizeConfigEntry): boolean {
380
- return entry.basePath === undefined && entry.files === undefined && entry.ignores === undefined;
381
- }
382
-
383
- function isEmptyConfigEntry(entry: VizeConfigEntry): boolean {
384
- return Object.keys(entry).length === 0;
385
- }
386
-
387
- function stripNullish(value: unknown): unknown {
388
- if (value === null) {
389
- return undefined;
390
- }
391
-
392
- if (Array.isArray(value)) {
393
- return value.map((entry) => stripNullish(entry)).filter((entry) => entry !== undefined);
394
- }
395
-
396
- if (isPlainObject(value)) {
397
- const result: Record<string, unknown> = {};
398
- for (const [key, entry] of Object.entries(value)) {
399
- const normalizedEntry = stripNullish(entry);
400
- if (normalizedEntry !== undefined) {
401
- result[key] = normalizedEntry;
402
- }
403
- }
404
- return result;
405
- }
406
-
407
- return value;
408
- }
409
-
410
- function isPlainObject(value: unknown): value is Record<string, unknown> {
411
- if (typeof value !== "object" || value === null || Array.isArray(value)) {
412
- return false;
413
- }
414
-
415
- const prototype = Object.getPrototypeOf(value);
416
- return prototype === Object.prototype || prototype === null;
209
+ return native.normalizeVizeConfig(config ?? null) as ResolvedVizeConfig;
417
210
  }
418
211
 
419
212
  function getErrorMessage(error: unknown): string {
@@ -448,19 +241,3 @@ export function normalizeGlobalTypes(
448
241
  }
449
242
  return result;
450
243
  }
451
-
452
- function normalizeConfigAliases(config: CompatVizeConfig): VizeConfig {
453
- if (config.lsp === undefined) {
454
- return config;
455
- }
456
-
457
- const { lsp, ...rest } = config;
458
- if (config.languageServer !== undefined) {
459
- return rest;
460
- }
461
-
462
- return {
463
- ...rest,
464
- languageServer: lsp,
465
- };
466
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.mjs","names":[],"sources":["../src/config.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { execFileSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { transform } from \"oxc-transform\";\nimport type {\n LanguageServerConfig,\n VizeConfig,\n VizeConfigEntry,\n ResolvedVizeConfig,\n LoadConfigOptions,\n UserConfigExport,\n ConfigEnv,\n GlobalTypesConfig,\n GlobalTypeDeclaration,\n} from \"./types/index.js\";\n\nexport const CONFIG_FILE_NAMES = [\n \"vize.config.pkl\",\n \"vize.config.ts\",\n \"vize.config.js\",\n \"vize.config.mjs\",\n \"vize.config.json\",\n] as const;\n\nconst DEFAULT_CONFIG_ENV: ConfigEnv = {\n mode: \"development\",\n command: \"serve\",\n};\n\nconst PACKAGE_ROOT = path.resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"..\");\n\nexport const VIZE_CONFIG_JSON_SCHEMA_PATH = path.join(\n PACKAGE_ROOT,\n \"schemas\",\n \"vize.config.schema.json\",\n);\n\nexport const VIZE_CONFIG_PKL_SCHEMA_PATH = path.join(PACKAGE_ROOT, \"pkl\", \"vize.pkl\");\n\nconst DOCUMENTED_PKL_SCHEMA_IMPORT_RE =\n /^(\\s*(?:amends|import)\\s+)([\"'])node_modules\\/vize\\/pkl\\/(VizeConfig\\.pkl|vize\\.pkl)\\2/gm;\n\ntype CompatVizeConfig = VizeConfig & {\n lsp?: LanguageServerConfig;\n};\n\ntype CompatVizeConfigEntry = VizeConfigEntry & {\n lsp?: LanguageServerConfig;\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.*` from the specified directory.\n */\nexport async function loadConfig(\n root: string,\n options: LoadConfigOptions = {},\n): Promise<ResolvedVizeConfig | null> {\n const { mode = \"root\", configFile, env } = options;\n\n if (mode === \"none\") {\n return null;\n }\n\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 if (mode === \"auto\") {\n return loadConfigFromDirAuto(root, env);\n }\n\n return loadConfigFromDir(root, env);\n}\n\nasync function loadConfigFromDir(dir: string, env?: ConfigEnv): Promise<ResolvedVizeConfig | null> {\n for (const name of CONFIG_FILE_NAMES) {\n const filePath = path.join(dir, name);\n if (!fs.existsSync(filePath)) {\n continue;\n }\n\n const config = await loadConfigFile(filePath, env);\n if (config !== null) {\n return config;\n }\n }\n return null;\n}\n\nasync function loadConfigFromDirAuto(\n startDir: string,\n env?: ConfigEnv,\n): Promise<ResolvedVizeConfig | null> {\n let currentDir = path.resolve(startDir);\n\n while (true) {\n const config = await loadConfigFromDir(currentDir, env);\n if (config !== null) {\n return config;\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n return null;\n }\n\n currentDir = parentDir;\n }\n}\n\nasync function loadConfigFile(\n filePath: string,\n env?: ConfigEnv,\n): Promise<ResolvedVizeConfig | null> {\n const absolutePath = path.resolve(filePath);\n if (!fs.existsSync(absolutePath)) {\n return null;\n }\n\n const ext = path.extname(absolutePath);\n\n if (ext === \".pkl\") {\n return loadPklConfig(absolutePath);\n }\n\n if (ext === \".json\") {\n const content = fs.readFileSync(absolutePath, \"utf-8\");\n return parseJsonConfig(content, absolutePath);\n }\n\n if (ext === \".ts\") {\n return loadTypeScriptConfig(absolutePath, env);\n }\n\n return loadESMConfig(absolutePath, env);\n}\n\nfunction findPklBinary(): string | null {\n try {\n const pklPkgPath = import.meta.resolve?.(\"@pkl-community/pkl\");\n if (pklPkgPath) {\n const pklLibDir = path.dirname(fileURLToPath(pklPkgPath));\n const pklPackageDir = path.dirname(pklLibDir);\n const candidates = [\n path.join(pklLibDir, \"main.js\"),\n path.join(pklPackageDir, \"pkl\"),\n path.join(pklPackageDir, \"pkl.exe\"),\n ];\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n try {\n execFileSync(candidate, [\"--version\"], { stdio: \"ignore\" });\n return candidate;\n } catch {\n // Keep looking: the bundled shim can exist even when its runtime is unavailable.\n }\n }\n }\n }\n } catch {\n // Fall back to PATH below.\n }\n\n try {\n execFileSync(\"pkl\", [\"--version\"], { stdio: \"ignore\" });\n return \"pkl\";\n } catch {\n return null;\n }\n}\n\nfunction loadPklConfig(filePath: string): ResolvedVizeConfig | null {\n const pklBin = findPklBinary();\n if (!pklBin) {\n console.warn(\n \"[vize] pkl CLI not found. Install @pkl-community/pkl or add pkl to PATH. \" +\n \"Falling back to the next config format.\",\n );\n return null;\n }\n\n let output: string;\n const patchedFilePath = createPklConfigWithBundledSchemaImports(filePath);\n const evalFilePath = patchedFilePath ?? filePath;\n try {\n output = execFileSync(pklBin, [\"eval\", \"-f\", \"json\", evalFilePath], {\n cwd: path.dirname(filePath),\n encoding: \"utf-8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n timeout: 30_000,\n });\n } catch (error) {\n throw new Error(`Failed to evaluate vize PKL config at ${filePath}: ${getErrorMessage(error)}`);\n } finally {\n if (patchedFilePath) {\n fs.rmSync(patchedFilePath, { force: true });\n }\n }\n return parseJsonConfig(output, filePath);\n}\n\nfunction createPklConfigWithBundledSchemaImports(filePath: string): string | null {\n const configDir = path.dirname(filePath);\n const source = fs.readFileSync(filePath, \"utf-8\");\n let patched = false;\n\n const content = source.replace(\n DOCUMENTED_PKL_SCHEMA_IMPORT_RE,\n (match, prefix, quote, schemaFile) => {\n const projectSchemaPath = path.join(configDir, \"node_modules\", \"vize\", \"pkl\", schemaFile);\n if (fs.existsSync(projectSchemaPath)) {\n return match;\n }\n\n const bundledSchemaPath = path.join(PACKAGE_ROOT, \"pkl\", schemaFile);\n if (!fs.existsSync(bundledSchemaPath)) {\n return match;\n }\n\n patched = true;\n return `${prefix}${quote}${pathToFileURL(bundledSchemaPath).href}${quote}`;\n },\n );\n\n if (!patched) {\n return null;\n }\n\n const tempFile = path.join(\n configDir,\n `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.pkl`,\n );\n fs.writeFileSync(tempFile, content, { flag: \"wx\", mode: 0o600 });\n return tempFile;\n}\n\nexport async function resolveConfigExport(\n exported: UserConfigExport,\n env?: ConfigEnv,\n): Promise<ResolvedVizeConfig> {\n if (typeof exported === \"function\") {\n return normalizeLoadedConfig(await exported(env ?? DEFAULT_CONFIG_ENV));\n }\n\n return normalizeLoadedConfig(exported);\n}\n\nasync function loadTypeScriptConfig(\n filePath: string,\n env?: ConfigEnv,\n): Promise<ResolvedVizeConfig> {\n const source = fs.readFileSync(filePath, \"utf-8\");\n const result = await transform(filePath, source, {\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n const tempFile = path.join(\n path.dirname(filePath),\n `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.mjs`,\n );\n fs.writeFileSync(tempFile, result.code, { flag: \"wx\", mode: 0o600 });\n\n try {\n const module = await importFresh(tempFile);\n const exported: UserConfigExport = module.default || module;\n return resolveConfigExport(exported, env);\n } finally {\n fs.rmSync(tempFile, { force: true });\n }\n}\n\nasync function loadESMConfig(filePath: string, env?: ConfigEnv): Promise<ResolvedVizeConfig> {\n const module = await importFresh(filePath);\n const exported: UserConfigExport = module.default || module;\n return resolveConfigExport(exported, env);\n}\n\nasync function importFresh(filePath: string): Promise<Record<string, unknown>> {\n const fileUrl = pathToFileURL(filePath);\n fileUrl.searchParams.set(\"t\", String(fs.statSync(filePath).mtimeMs));\n return import(fileUrl.href);\n}\n\nfunction parseJsonConfig(content: string, filePath: string): ResolvedVizeConfig {\n try {\n return normalizeLoadedConfig(JSON.parse(content));\n } catch (error) {\n throw new Error(`Failed to parse vize config JSON at ${filePath}: ${getErrorMessage(error)}`);\n }\n}\n\nfunction normalizeLoadedConfig(config: unknown): ResolvedVizeConfig {\n const normalized = stripNullish(config);\n if (Array.isArray(normalized)) {\n return normalizeConfigEntries(normalized as CompatVizeConfigEntry[]);\n }\n\n return normalizeConfigObject((normalized ?? {}) as CompatVizeConfig);\n}\n\nfunction normalizeConfigObject(config: CompatVizeConfig): ResolvedVizeConfig {\n const { entries: rawEntries, ...rootConfig } = normalizeConfigAliases(config) as VizeConfig & {\n entries?: CompatVizeConfigEntry[];\n };\n const rootEntry = rootConfig as VizeConfigEntry;\n const entries = [\n ...(isEmptyConfigEntry(rootEntry) ? [] : [rootEntry]),\n ...(rawEntries ?? []).map((entry) => normalizeConfigAliases(entry) as VizeConfigEntry),\n ];\n\n return {\n ...rootEntry,\n entries,\n };\n}\n\nfunction normalizeConfigEntries(entries: CompatVizeConfigEntry[]): ResolvedVizeConfig {\n const normalizedEntries = entries.map(\n (entry) => normalizeConfigAliases(entry) as VizeConfigEntry,\n );\n const globalConfig = mergeConfigEntries(normalizedEntries.filter(isGlobalConfigEntry));\n\n return {\n ...globalConfig,\n entries: normalizedEntries,\n };\n}\n\nfunction mergeConfigEntries(entries: VizeConfigEntry[]): VizeConfigEntry {\n const result: Record<string, unknown> = {};\n for (const entry of entries) {\n deepMerge(result, stripEntryMetadata(entry));\n }\n return result as VizeConfigEntry;\n}\n\nfunction stripEntryMetadata(entry: VizeConfigEntry): Partial<VizeConfigEntry> {\n const { name, basePath, files, ignores, extends: extendsConfig, ...config } = entry;\n void name;\n void basePath;\n void files;\n void ignores;\n void extendsConfig;\n return config;\n}\n\nfunction deepMerge(target: Record<string, unknown>, source: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(source)) {\n if (value === undefined) {\n continue;\n }\n\n const current = target[key];\n if (isPlainObject(current) && isPlainObject(value)) {\n deepMerge(current, value);\n } else {\n target[key] = value;\n }\n }\n}\n\nfunction isGlobalConfigEntry(entry: VizeConfigEntry): boolean {\n return entry.basePath === undefined && entry.files === undefined && entry.ignores === undefined;\n}\n\nfunction isEmptyConfigEntry(entry: VizeConfigEntry): boolean {\n return Object.keys(entry).length === 0;\n}\n\nfunction stripNullish(value: unknown): unknown {\n if (value === null) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => stripNullish(entry)).filter((entry) => entry !== undefined);\n }\n\n if (isPlainObject(value)) {\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n const normalizedEntry = stripNullish(entry);\n if (normalizedEntry !== undefined) {\n result[key] = normalizedEntry;\n }\n }\n return result;\n }\n\n return value;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n\n/**\n * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects\n */\nexport function normalizeGlobalTypes(\n config: GlobalTypesConfig,\n): Record<string, GlobalTypeDeclaration> {\n const resolvedConfig =\n \"types\" in config &&\n typeof config.types === \"object\" &&\n config.types !== null &&\n !Array.isArray(config.types)\n ? config.types\n : config;\n\n const result: Record<string, GlobalTypeDeclaration> = {};\n for (const [key, value] of Object.entries(resolvedConfig)) {\n if (typeof value === \"string\") {\n result[key] = { type: value };\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction normalizeConfigAliases(config: CompatVizeConfig): VizeConfig {\n if (config.lsp === undefined) {\n return config;\n }\n\n const { lsp, ...rest } = config;\n if (config.languageServer !== undefined) {\n return rest;\n }\n\n return {\n ...rest,\n languageServer: lsp,\n };\n}\n"],"mappings":";;;;;;;AAkBA,MAAa,oBAAoB;CAC/B;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,qBAAgC;CACpC,MAAM;CACN,SAAS;CACV;AAED,MAAM,eAAe,KAAK,QAAQ,cAAc,IAAI,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,EAAE,KAAK;AAErF,MAAa,+BAA+B,KAAK,KAC/C,cACA,WACA,0BACD;AAED,MAAa,8BAA8B,KAAK,KAAK,cAAc,OAAO,WAAW;AAErF,MAAM,kCACJ;;;;;AAcF,SAAgB,aAAa,QAA4C;CACvE,OAAO;;;;;AAMT,eAAsB,WACpB,MACA,UAA6B,EAAE,EACK;CACpC,MAAM,EAAE,OAAO,QAAQ,YAAY,QAAQ;CAE3C,IAAI,SAAS,QACX,OAAO;CAGT,IAAI,YAAY;EACd,MAAM,eAAe,KAAK,WAAW,WAAW,GAAG,aAAa,KAAK,QAAQ,MAAM,WAAW;EAC9F,IAAI,GAAG,WAAW,aAAa,EAC7B,OAAO,eAAe,cAAc,IAAI;EAE1C,OAAO;;CAGT,IAAI,SAAS,QACX,OAAO,sBAAsB,MAAM,IAAI;CAGzC,OAAO,kBAAkB,MAAM,IAAI;;AAGrC,eAAe,kBAAkB,KAAa,KAAqD;CACjG,KAAK,MAAM,QAAQ,mBAAmB;EACpC,MAAM,WAAW,KAAK,KAAK,KAAK,KAAK;EACrC,IAAI,CAAC,GAAG,WAAW,SAAS,EAC1B;EAGF,MAAM,SAAS,MAAM,eAAe,UAAU,IAAI;EAClD,IAAI,WAAW,MACb,OAAO;;CAGX,OAAO;;AAGT,eAAe,sBACb,UACA,KACoC;CACpC,IAAI,aAAa,KAAK,QAAQ,SAAS;CAEvC,OAAO,MAAM;EACX,MAAM,SAAS,MAAM,kBAAkB,YAAY,IAAI;EACvD,IAAI,WAAW,MACb,OAAO;EAGT,MAAM,YAAY,KAAK,QAAQ,WAAW;EAC1C,IAAI,cAAc,YAChB,OAAO;EAGT,aAAa;;;AAIjB,eAAe,eACb,UACA,KACoC;CACpC,MAAM,eAAe,KAAK,QAAQ,SAAS;CAC3C,IAAI,CAAC,GAAG,WAAW,aAAa,EAC9B,OAAO;CAGT,MAAM,MAAM,KAAK,QAAQ,aAAa;CAEtC,IAAI,QAAQ,QACV,OAAO,cAAc,aAAa;CAGpC,IAAI,QAAQ,SAEV,OAAO,gBADS,GAAG,aAAa,cAAc,QAChB,EAAE,aAAa;CAG/C,IAAI,QAAQ,OACV,OAAO,qBAAqB,cAAc,IAAI;CAGhD,OAAO,cAAc,cAAc,IAAI;;AAGzC,SAAS,gBAA+B;CACtC,IAAI;EACF,MAAM,aAAa,OAAO,KAAK,UAAU,qBAAqB;EAC9D,IAAI,YAAY;GACd,MAAM,YAAY,KAAK,QAAQ,cAAc,WAAW,CAAC;GACzD,MAAM,gBAAgB,KAAK,QAAQ,UAAU;GAC7C,MAAM,aAAa;IACjB,KAAK,KAAK,WAAW,UAAU;IAC/B,KAAK,KAAK,eAAe,MAAM;IAC/B,KAAK,KAAK,eAAe,UAAU;IACpC;GAED,KAAK,MAAM,aAAa,YACtB,IAAI,GAAG,WAAW,UAAU,EAC1B,IAAI;IACF,aAAa,WAAW,CAAC,YAAY,EAAE,EAAE,OAAO,UAAU,CAAC;IAC3D,OAAO;WACD;;SAMR;CAIR,IAAI;EACF,aAAa,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,UAAU,CAAC;EACvD,OAAO;SACD;EACN,OAAO;;;AAIX,SAAS,cAAc,UAA6C;CAClE,MAAM,SAAS,eAAe;CAC9B,IAAI,CAAC,QAAQ;EACX,QAAQ,KACN,mHAED;EACD,OAAO;;CAGT,IAAI;CACJ,MAAM,kBAAkB,wCAAwC,SAAS;CACzE,MAAM,eAAe,mBAAmB;CACxC,IAAI;EACF,SAAS,aAAa,QAAQ;GAAC;GAAQ;GAAM;GAAQ;GAAa,EAAE;GAClE,KAAK,KAAK,QAAQ,SAAS;GAC3B,UAAU;GACV,OAAO;IAAC;IAAU;IAAQ;IAAO;GACjC,SAAS;GACV,CAAC;UACK,OAAO;EACd,MAAM,IAAI,MAAM,yCAAyC,SAAS,IAAI,gBAAgB,MAAM,GAAG;WACvF;EACR,IAAI,iBACF,GAAG,OAAO,iBAAiB,EAAE,OAAO,MAAM,CAAC;;CAG/C,OAAO,gBAAgB,QAAQ,SAAS;;AAG1C,SAAS,wCAAwC,UAAiC;CAChF,MAAM,YAAY,KAAK,QAAQ,SAAS;CACxC,MAAM,SAAS,GAAG,aAAa,UAAU,QAAQ;CACjD,IAAI,UAAU;CAEd,MAAM,UAAU,OAAO,QACrB,kCACC,OAAO,QAAQ,OAAO,eAAe;EACpC,MAAM,oBAAoB,KAAK,KAAK,WAAW,gBAAgB,QAAQ,OAAO,WAAW;EACzF,IAAI,GAAG,WAAW,kBAAkB,EAClC,OAAO;EAGT,MAAM,oBAAoB,KAAK,KAAK,cAAc,OAAO,WAAW;EACpE,IAAI,CAAC,GAAG,WAAW,kBAAkB,EACnC,OAAO;EAGT,UAAU;EACV,OAAO,GAAG,SAAS,QAAQ,cAAc,kBAAkB,CAAC,OAAO;GAEtE;CAED,IAAI,CAAC,SACH,OAAO;CAGT,MAAM,WAAW,KAAK,KACpB,WACA,gBAAgB,QAAQ,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,YAAY,CAAC,MAC3D;CACD,GAAG,cAAc,UAAU,SAAS;EAAE,MAAM;EAAM,MAAM;EAAO,CAAC;CAChE,OAAO;;AAGT,eAAsB,oBACpB,UACA,KAC6B;CAC7B,IAAI,OAAO,aAAa,YACtB,OAAO,sBAAsB,MAAM,SAAS,OAAO,mBAAmB,CAAC;CAGzE,OAAO,sBAAsB,SAAS;;AAGxC,eAAe,qBACb,UACA,KAC6B;CAE7B,MAAM,SAAS,MAAM,UAAU,UADhB,GAAG,aAAa,UAAU,QACM,EAAE,EAC/C,YAAY,EACV,uBAAuB,MACxB,EACF,CAAC;CAEF,MAAM,WAAW,KAAK,KACpB,KAAK,QAAQ,SAAS,EACtB,gBAAgB,QAAQ,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,YAAY,CAAC,MAC3D;CACD,GAAG,cAAc,UAAU,OAAO,MAAM;EAAE,MAAM;EAAM,MAAM;EAAO,CAAC;CAEpE,IAAI;EACF,MAAM,SAAS,MAAM,YAAY,SAAS;EAE1C,OAAO,oBAD4B,OAAO,WAAW,QAChB,IAAI;WACjC;EACR,GAAG,OAAO,UAAU,EAAE,OAAO,MAAM,CAAC;;;AAIxC,eAAe,cAAc,UAAkB,KAA8C;CAC3F,MAAM,SAAS,MAAM,YAAY,SAAS;CAE1C,OAAO,oBAD4B,OAAO,WAAW,QAChB,IAAI;;AAG3C,eAAe,YAAY,UAAoD;CAC7E,MAAM,UAAU,cAAc,SAAS;CACvC,QAAQ,aAAa,IAAI,KAAK,OAAO,GAAG,SAAS,SAAS,CAAC,QAAQ,CAAC;CACpE,OAAO,OAAO,QAAQ;;AAGxB,SAAS,gBAAgB,SAAiB,UAAsC;CAC9E,IAAI;EACF,OAAO,sBAAsB,KAAK,MAAM,QAAQ,CAAC;UAC1C,OAAO;EACd,MAAM,IAAI,MAAM,uCAAuC,SAAS,IAAI,gBAAgB,MAAM,GAAG;;;AAIjG,SAAS,sBAAsB,QAAqC;CAClE,MAAM,aAAa,aAAa,OAAO;CACvC,IAAI,MAAM,QAAQ,WAAW,EAC3B,OAAO,uBAAuB,WAAsC;CAGtE,OAAO,sBAAuB,cAAc,EAAE,CAAsB;;AAGtE,SAAS,sBAAsB,QAA8C;CAC3E,MAAM,EAAE,SAAS,YAAY,GAAG,eAAe,uBAAuB,OAAO;CAG7E,MAAM,YAAY;CAClB,MAAM,UAAU,CACd,GAAI,mBAAmB,UAAU,GAAG,EAAE,GAAG,CAAC,UAAU,EACpD,IAAI,cAAc,EAAE,EAAE,KAAK,UAAU,uBAAuB,MAAM,CAAoB,CACvF;CAED,OAAO;EACL,GAAG;EACH;EACD;;AAGH,SAAS,uBAAuB,SAAsD;CACpF,MAAM,oBAAoB,QAAQ,KAC/B,UAAU,uBAAuB,MAAM,CACzC;CAGD,OAAO;EACL,GAHmB,mBAAmB,kBAAkB,OAAO,oBAAoB,CAGpE;EACf,SAAS;EACV;;AAGH,SAAS,mBAAmB,SAA6C;CACvE,MAAM,SAAkC,EAAE;CAC1C,KAAK,MAAM,SAAS,SAClB,UAAU,QAAQ,mBAAmB,MAAM,CAAC;CAE9C,OAAO;;AAGT,SAAS,mBAAmB,OAAkD;CAC5E,MAAM,EAAE,MAAM,UAAU,OAAO,SAAS,SAAS,eAAe,GAAG,WAAW;CAM9E,OAAO;;AAGT,SAAS,UAAU,QAAiC,QAAuC;CACzF,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;EACjD,IAAI,UAAU,KAAA,GACZ;EAGF,MAAM,UAAU,OAAO;EACvB,IAAI,cAAc,QAAQ,IAAI,cAAc,MAAM,EAChD,UAAU,SAAS,MAAM;OAEzB,OAAO,OAAO;;;AAKpB,SAAS,oBAAoB,OAAiC;CAC5D,OAAO,MAAM,aAAa,KAAA,KAAa,MAAM,UAAU,KAAA,KAAa,MAAM,YAAY,KAAA;;AAGxF,SAAS,mBAAmB,OAAiC;CAC3D,OAAO,OAAO,KAAK,MAAM,CAAC,WAAW;;AAGvC,SAAS,aAAa,OAAyB;CAC7C,IAAI,UAAU,MACZ;CAGF,IAAI,MAAM,QAAQ,MAAM,EACtB,OAAO,MAAM,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC,QAAQ,UAAU,UAAU,KAAA,EAAU;CAGzF,IAAI,cAAc,MAAM,EAAE;EACxB,MAAM,SAAkC,EAAE;EAC1C,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE;GAChD,MAAM,kBAAkB,aAAa,MAAM;GAC3C,IAAI,oBAAoB,KAAA,GACtB,OAAO,OAAO;;EAGlB,OAAO;;CAGT,OAAO;;AAGT,SAAS,cAAc,OAAkD;CACvE,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,MAAM,EACrE,OAAO;CAGT,MAAM,YAAY,OAAO,eAAe,MAAM;CAC9C,OAAO,cAAc,OAAO,aAAa,cAAc;;AAGzD,SAAS,gBAAgB,OAAwB;CAC/C,IAAI,iBAAiB,OACnB,OAAO,MAAM;CAGf,OAAO,OAAO,MAAM;;;;;AAMtB,SAAgB,qBACd,QACuC;CACvC,MAAM,iBACJ,WAAW,UACX,OAAO,OAAO,UAAU,YACxB,OAAO,UAAU,QACjB,CAAC,MAAM,QAAQ,OAAO,MAAM,GACxB,OAAO,QACP;CAEN,MAAM,SAAgD,EAAE;CACxD,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,eAAe,EACvD,IAAI,OAAO,UAAU,UACnB,OAAO,OAAO,EAAE,MAAM,OAAO;MAE7B,OAAO,OAAO;CAGlB,OAAO;;AAGT,SAAS,uBAAuB,QAAsC;CACpE,IAAI,OAAO,QAAQ,KAAA,GACjB,OAAO;CAGT,MAAM,EAAE,KAAK,GAAG,SAAS;CACzB,IAAI,OAAO,mBAAmB,KAAA,GAC5B,OAAO;CAGT,OAAO;EACL,GAAG;EACH,gBAAgB;EACjB"}