@buding0904/vitepad 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -10,6 +10,7 @@ import { spawn } from 'child_process';
10
10
  import { createRequire } from 'module';
11
11
 
12
12
  var packageRoot = path2.resolve(fileURLToPath(new URL("..", import.meta.url)));
13
+ var requireFromPackage = createRequire(path2.join(packageRoot, "package.json"));
13
14
  var linkedPeerPackages = ["vite"];
14
15
  var log = {
15
16
  framework(requested, resolved) {
@@ -34,7 +35,8 @@ async function resolveFramework(spec, options) {
34
35
  requested: "vanilla",
35
36
  cacheStatus: "local",
36
37
  aliases: [],
37
- packageLinks: packageLinks(packageNodeModules(), ["tailwindcss"])
38
+ packageLinks: packageLinks(["tailwindcss"]),
39
+ editorPackageLinks: []
38
40
  };
39
41
  }
40
42
  const resolved = await resolveFrameworkPackages(spec.name, spec.version);
@@ -59,9 +61,10 @@ async function resolveFramework(spec, options) {
59
61
  cacheDir,
60
62
  aliases: [],
61
63
  packageLinks: [
62
- ...packageLinks(packageNodeModules(), ["tailwindcss"]),
64
+ ...packageLinks(["tailwindcss"]),
63
65
  ...packageLinks(nodeModules, frameworkRuntimePackages(spec.name))
64
- ]
66
+ ],
67
+ editorPackageLinks: packageLinks(nodeModules, frameworkEditorPackages(spec.name))
65
68
  };
66
69
  }
67
70
  async function resolveFrameworkPackages(framework, version) {
@@ -146,7 +149,13 @@ function appendPlugin(plugins, plugin) {
146
149
  function frameworkPackageSpecs(framework, version) {
147
150
  switch (framework) {
148
151
  case "react":
149
- return [`react@${version}`, `react-dom@${version}`, "@vitejs/plugin-react@latest"];
152
+ return [
153
+ `react@${version}`,
154
+ `react-dom@${version}`,
155
+ `@types/react@${reactTypesVersion(version)}`,
156
+ `@types/react-dom@${reactTypesVersion(version)}`,
157
+ "@vitejs/plugin-react@latest"
158
+ ];
150
159
  case "preact":
151
160
  return [`preact@${version}`, "@preact/preset-vite@latest"];
152
161
  case "solid":
@@ -159,6 +168,10 @@ function frameworkPackageSpecs(framework, version) {
159
168
  return [];
160
169
  }
161
170
  }
171
+ function reactTypesVersion(version) {
172
+ const major = version.match(/^\D*(\d+)/)?.[1];
173
+ return major || "latest";
174
+ }
162
175
  function resolvePackageVersion(name, range) {
163
176
  return new Promise((resolve, reject) => {
164
177
  const child = spawn("npm", ["view", `${name}@${range}`, "version", "--json"], {
@@ -208,6 +221,18 @@ function frameworkRuntimePackages(framework) {
208
221
  return [];
209
222
  }
210
223
  }
224
+ function frameworkEditorPackages(framework) {
225
+ switch (framework) {
226
+ case "react":
227
+ return ["react", "react-dom", "@types/react", "@types/react-dom"];
228
+ case "preact":
229
+ case "solid":
230
+ case "vue":
231
+ case "svelte":
232
+ case "vanilla":
233
+ return frameworkRuntimePackages(framework);
234
+ }
235
+ }
211
236
  function frameworkPluginPackages(framework) {
212
237
  switch (framework) {
213
238
  case "react":
@@ -224,14 +249,23 @@ function frameworkPluginPackages(framework) {
224
249
  return [];
225
250
  }
226
251
  }
227
- function packageLinks(nodeModules, packageNames) {
252
+ function packageLinks(nodeModulesOrPackageNames, maybePackageNames) {
253
+ if (Array.isArray(nodeModulesOrPackageNames)) {
254
+ return nodeModulesOrPackageNames.map((packageName) => ({
255
+ name: packageName,
256
+ source: resolveInstalledPackageDir(packageName)
257
+ }));
258
+ }
259
+ const nodeModules = nodeModulesOrPackageNames;
260
+ const packageNames = maybePackageNames ?? [];
228
261
  return packageNames.map((packageName) => ({
229
262
  name: packageName,
230
263
  source: path2.join(nodeModules, packageName)
231
264
  }));
232
265
  }
233
- function packageNodeModules() {
234
- return path2.join(packageRoot, "node_modules");
266
+ function resolveInstalledPackageDir(packageName) {
267
+ const packageJson = requireFromPackage.resolve(`${packageName}/package.json`);
268
+ return path2.dirname(packageJson);
235
269
  }
236
270
  function frameworkCacheDir(framework, version) {
237
271
  const base = process.env.VITEPAD_CACHE_DIR || (process.env.XDG_CACHE_HOME ? path2.join(process.env.XDG_CACHE_HOME, "vitepad") : path2.join(os.homedir(), ".cache", "vitepad"));
@@ -296,7 +330,7 @@ async function linkPeerPackages(cacheDir) {
296
330
  for (const packageName of linkedPeerPackages) {
297
331
  try {
298
332
  await linkPackage({
299
- source: path2.join(packageNodeModules(), packageName),
333
+ source: resolveInstalledPackageDir(packageName),
300
334
  target: path2.join(cacheDir, "node_modules", packageName)
301
335
  });
302
336
  } catch (error) {
@@ -390,6 +424,9 @@ async function run(argv) {
390
424
  });
391
425
  validateCombination({ mode, framework: framework.name, extension });
392
426
  const resolvedFramework = await resolveFramework(framework, { forceInstall: options.forceInstall });
427
+ if (options.editor) {
428
+ await setupEditorPackages(process2.cwd(), resolvedFramework.editorPackageLinks);
429
+ }
393
430
  const classTokens = await collectClassTokens(entry);
394
431
  const workspace = await createWorkspace({
395
432
  entry,
@@ -458,6 +495,7 @@ function parseArgs(argv) {
458
495
  port: 8e3,
459
496
  host: "0.0.0.0",
460
497
  open: "/",
498
+ editor: false,
461
499
  help: false
462
500
  };
463
501
  for (let index = 0; index < argv.length; index += 1) {
@@ -482,6 +520,8 @@ function parseArgs(argv) {
482
520
  options.open = false;
483
521
  } else if (arg === "--open") {
484
522
  options.open = "/";
523
+ } else if (arg === "--editor") {
524
+ options.editor = true;
485
525
  } else if (arg === "--config" || arg === "-c") {
486
526
  options.config = readValue(argv, ++index, arg);
487
527
  } else if (arg.startsWith("--config=")) {
@@ -564,6 +604,43 @@ async function linkWorkspacePackage(nodeModulesDir, link) {
564
604
  await fs2.mkdir(path2.dirname(target), { recursive: true });
565
605
  await fs2.symlink(source, target, "dir");
566
606
  }
607
+ async function setupEditorPackages(projectDir, links) {
608
+ if (links.length === 0) return;
609
+ const nodeModulesDir = path2.join(projectDir, "node_modules");
610
+ await fs2.mkdir(nodeModulesDir, { recursive: true });
611
+ const linked = [];
612
+ const skipped = [];
613
+ for (const link of links) {
614
+ const result = await linkEditorPackage(nodeModulesDir, link);
615
+ if (result === "linked") {
616
+ linked.push(link.name);
617
+ } else {
618
+ skipped.push(link.name);
619
+ }
620
+ }
621
+ if (linked.length > 0) {
622
+ console.log(`${pc2.cyan("vitepad")} ${pc2.green("editor")} linked ${linked.map((name) => pc2.cyan(name)).join(pc2.gray(", "))}`);
623
+ }
624
+ if (skipped.length > 0) {
625
+ console.log(`${pc2.cyan("vitepad")} ${pc2.yellow("editor")} kept existing ${skipped.map((name) => pc2.cyan(name)).join(pc2.gray(", "))}`);
626
+ console.log(` ${pc2.gray("VSCode will use the existing local package versions for editor types.")}`);
627
+ }
628
+ }
629
+ async function linkEditorPackage(nodeModulesDir, link) {
630
+ const source = await fs2.realpath(link.source);
631
+ const target = path2.join(nodeModulesDir, link.name);
632
+ await fs2.mkdir(path2.dirname(target), { recursive: true });
633
+ const existing = await fs2.lstat(target).catch(() => null);
634
+ if (existing) {
635
+ if (existing.isSymbolicLink()) {
636
+ const current = await fs2.realpath(target).catch(() => null);
637
+ if (current === source) return "skipped";
638
+ }
639
+ return "skipped";
640
+ }
641
+ await fs2.symlink(source, target, "dir");
642
+ return "linked";
643
+ }
567
644
  function uniquePaths(paths) {
568
645
  return [...new Set(paths.map((item) => normalizePath(path2.resolve(item))))];
569
646
  }
@@ -760,6 +837,7 @@ Options:
760
837
  -p, --port <number> Dev server port. Default: 8000
761
838
  --host <host> Dev server host. Default: 0.0.0.0
762
839
  --no-open Do not open the browser automatically.
840
+ --editor Link framework packages into local node_modules for editor type resolution.
763
841
  -c, --config <file> Merge an extra Vite config file.
764
842
  -h, --help Show help.
765
843
  `;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/frameworks.ts","../src/runtime/index.ts","../src/cli.ts"],"names":["path","pc","fs","fileURLToPath","process","os","pathToFileURL"],"mappings":"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","file":"cli.js","sourcesContent":["import fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { spawn } from 'node:child_process'\nimport { createRequire } from 'node:module'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\n\nimport { type Alias, type PluginOption } from 'vite'\nimport pc from 'picocolors'\n\nexport type FrameworkName = 'react' | 'preact' | 'solid' | 'vue' | 'svelte' | 'vanilla'\nexport type Framework = 'auto' | FrameworkName\n\nexport interface FrameworkSpec {\n name: Framework\n version: string\n}\n\nexport interface ResolvedFramework {\n name: FrameworkName\n version: string\n requested: string\n cacheStatus: 'hit' | 'miss' | 'local'\n cacheDir?: string\n aliases: Alias[]\n packageLinks: PackageLink[]\n}\n\nexport interface PackageLink {\n name: string\n source: string\n}\n\nconst packageRoot = path.resolve(fileURLToPath(new URL('..', import.meta.url)))\nconst linkedPeerPackages = ['vite']\nconst log = {\n framework(requested: string, resolved: string) {\n console.log(`\\n${pc.cyan('vitepad')} ${pc.bold('framework')} ${pc.gray(requested)} ${pc.gray('->')} ${pc.green(resolved)}`)\n },\n install(packages: string[]) {\n console.log(` ${pc.gray('install')} ${packages.map((pkg) => pc.cyan(pkg)).join(pc.gray(', '))}`)\n },\n done(message: string) {\n console.log(` ${pc.green(message)}`)\n },\n}\n\nexport async function resolveFramework(spec: FrameworkSpec, options: { forceInstall: boolean }): Promise<ResolvedFramework> {\n if (spec.name === 'auto') {\n throw new Error('Internal error: unresolved framework auto.')\n }\n if (spec.name === 'vanilla') {\n return {\n name: 'vanilla',\n version: 'local',\n requested: 'vanilla',\n cacheStatus: 'local',\n aliases: [],\n packageLinks: packageLinks(packageNodeModules(), ['tailwindcss']),\n }\n }\n\n const resolved = await resolveFrameworkPackages(spec.name, spec.version)\n const cacheDir = frameworkCacheDir(spec.name, resolved.version)\n const nodeModules = path.join(cacheDir, 'node_modules')\n const installed = await isInstalled(cacheDir, resolved.packages)\n\n if (options.forceInstall && await pathExists(cacheDir)) {\n await fs.rm(cacheDir, { recursive: true, force: true })\n }\n\n log.framework(`${spec.name}@${spec.version}`, `${spec.name}@${resolved.version}`)\n const cacheStatus = options.forceInstall ? 'miss' : installed ? 'hit' : 'miss'\n\n if (options.forceInstall || !installed) {\n log.install(resolved.packages)\n await installFrameworkCache(cacheDir, resolved.packages)\n }\n await linkPeerPackages(cacheDir)\n\n return {\n name: spec.name,\n version: resolved.version,\n requested: `${spec.name}@${spec.version}`,\n cacheStatus,\n cacheDir,\n aliases: [],\n packageLinks: [\n ...packageLinks(packageNodeModules(), ['tailwindcss']),\n ...packageLinks(nodeModules, frameworkRuntimePackages(spec.name)),\n ],\n }\n}\n\nasync function resolveFrameworkPackages(framework: FrameworkName, version: string): Promise<{ version: string, packages: string[] }> {\n const specs = frameworkPackageSpecs(framework, version)\n const resolved = await Promise.all(specs.map(async (spec) => {\n const parsed = splitPackageSpec(spec)\n const resolvedVersion = await resolvePackageVersion(parsed.name, parsed.version)\n return {\n name: parsed.name,\n version: resolvedVersion,\n spec: `${parsed.name}@${resolvedVersion}`,\n }\n }))\n const primary = splitPackageSpec(specs[0]).name\n const primaryVersion = resolved.find((pkg) => pkg.name === primary)?.version\n if (!primaryVersion) {\n throw new Error(`Failed to resolve ${framework}@${version}.`)\n }\n return {\n version: primaryVersion,\n packages: resolved.map((pkg) => pkg.spec),\n }\n}\n\nexport function frameworkDedupe(framework: FrameworkName): string[] {\n return frameworkRuntimePackages(framework)\n}\n\nexport function frameworkOptimizeDeps(framework: FrameworkName): string[] {\n switch (framework) {\n case 'react':\n return ['react', 'react-dom', 'react/jsx-runtime', 'react/jsx-dev-runtime']\n case 'preact':\n return ['preact', 'preact/jsx-runtime', 'preact/hooks']\n case 'solid':\n return ['solid-js', 'solid-js/web']\n case 'vue':\n return ['vue']\n case 'svelte':\n case 'vanilla':\n return []\n }\n}\n\nexport async function loadFrameworkPlugins(framework: ResolvedFramework): Promise<PluginOption[]> {\n if (framework.name === 'vanilla') {\n return []\n }\n if (!framework.cacheDir) {\n throw new Error(`Missing framework cache for ${framework.name}.`)\n }\n\n const plugins: PluginOption[] = []\n for (const pluginPackage of frameworkPluginPackages(framework.name)) {\n const mod = await importCachePackage(framework.cacheDir, pluginPackage)\n appendPlugin(plugins, createFrameworkPlugin(pluginPackage, mod))\n }\n return plugins\n}\n\nfunction createFrameworkPlugin(pluginPackage: string, mod: Record<string, any>): PluginOption {\n const factory = frameworkPluginFactory(pluginPackage, mod)\n return factory()\n}\n\nfunction frameworkPluginFactory(pluginPackage: string, mod: Record<string, any>): () => PluginOption {\n if (pluginPackage === '@sveltejs/vite-plugin-svelte' && typeof mod.svelte === 'function') {\n return mod.svelte\n }\n if (pluginPackage === '@preact/preset-vite' && typeof mod.preact === 'function') {\n return mod.preact\n }\n if (typeof mod.default === 'function') {\n return mod.default\n }\n if (mod.default && typeof mod.default.default === 'function') {\n return mod.default.default\n }\n\n throw new Error(`Failed to load Vite plugin ${pluginPackage}: no callable plugin export found.`)\n}\n\nexport function appendPlugin(plugins: PluginOption[], plugin: PluginOption): void {\n if (Array.isArray(plugin)) {\n plugins.push(...plugin)\n } else {\n plugins.push(plugin)\n }\n}\n\nfunction frameworkPackageSpecs(framework: FrameworkName, version: string): string[] {\n switch (framework) {\n case 'react':\n return [`react@${version}`, `react-dom@${version}`, '@vitejs/plugin-react@latest']\n case 'preact':\n return [`preact@${version}`, '@preact/preset-vite@latest']\n case 'solid':\n return [`solid-js@${version}`, 'vite-plugin-solid@latest']\n case 'vue':\n return [`vue@${version}`, '@vitejs/plugin-vue@latest', '@vitejs/plugin-vue-jsx@latest']\n case 'svelte':\n return [`svelte@${version}`, '@sveltejs/vite-plugin-svelte@latest']\n case 'vanilla':\n return []\n }\n}\n\nfunction resolvePackageVersion(name: string, range: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn('npm', ['view', `${name}@${range}`, 'version', '--json'], {\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n\n let stdout = ''\n let stderr = ''\n child.stdout.on('data', (chunk) => {\n stdout += chunk\n })\n child.stderr.on('data', (chunk) => {\n stderr += chunk\n })\n child.on('error', reject)\n child.on('exit', (code) => {\n if (code !== 0) {\n reject(new Error(`npm view failed for ${name}@${range}\\n${stderr.trim()}`))\n return\n }\n\n try {\n const parsed = JSON.parse(stdout.trim())\n const version = Array.isArray(parsed) ? parsed[parsed.length - 1] : parsed\n if (typeof version !== 'string' || !version) {\n throw new Error(`Unexpected npm view output: ${stdout}`)\n }\n resolve(version)\n } catch (error) {\n reject(error)\n }\n })\n })\n}\n\nfunction frameworkRuntimePackages(framework: FrameworkName): string[] {\n switch (framework) {\n case 'react':\n return ['react', 'react-dom']\n case 'preact':\n return ['preact']\n case 'solid':\n return ['solid-js']\n case 'vue':\n return ['vue']\n case 'svelte':\n return ['svelte']\n case 'vanilla':\n return []\n }\n}\n\nfunction frameworkPluginPackages(framework: FrameworkName): string[] {\n switch (framework) {\n case 'react':\n return ['@vitejs/plugin-react']\n case 'preact':\n return ['@preact/preset-vite']\n case 'solid':\n return ['vite-plugin-solid']\n case 'vue':\n return ['@vitejs/plugin-vue', '@vitejs/plugin-vue-jsx']\n case 'svelte':\n return ['@sveltejs/vite-plugin-svelte']\n case 'vanilla':\n return []\n }\n}\n\nfunction packageLinks(nodeModules: string, packageNames: string[]): PackageLink[] {\n return packageNames.map((packageName) => ({\n name: packageName,\n source: path.join(nodeModules, packageName),\n }))\n}\n\nfunction packageNodeModules(): string {\n return path.join(packageRoot, 'node_modules')\n}\n\nfunction frameworkCacheDir(framework: FrameworkName, version: string): string {\n const base = process.env.VITEPAD_CACHE_DIR\n || (process.env.XDG_CACHE_HOME ? path.join(process.env.XDG_CACHE_HOME, 'vitepad') : path.join(os.homedir(), '.cache', 'vitepad'))\n return path.join(base, 'frameworks', `${framework}-${sanitizeCacheKey(version)}`)\n}\n\nfunction sanitizeCacheKey(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]/g, '_')\n}\n\nasync function isInstalled(cacheDir: string, packages: string[]): Promise<boolean> {\n if (!await pathExists(path.join(cacheDir, 'node_modules'))) return false\n for (const pkg of packages) {\n const { name } = splitPackageSpec(pkg)\n if (!await pathExists(path.join(cacheDir, 'node_modules', name))) {\n return false\n }\n }\n return true\n}\n\nasync function installFrameworkCache(cacheDir: string, packages: string[]): Promise<void> {\n await fs.mkdir(cacheDir, { recursive: true })\n await fs.writeFile(path.join(cacheDir, 'package.json'), JSON.stringify({\n private: true,\n type: 'module',\n dependencies: Object.fromEntries(packages.map((pkg) => packageToDependency(pkg))),\n }, null, 2))\n\n await runInstall(cacheDir)\n}\n\nfunction runInstall(cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn('npm', ['install', '--legacy-peer-deps', '--no-audit', '--no-fund', '--loglevel=notice'], {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n\n const progress = createProgress('vitepad: installing framework packages')\n let output = ''\n\n child.stdout.on('data', (chunk) => {\n output += chunk\n progress.tick()\n })\n child.stderr.on('data', (chunk) => {\n output += chunk\n progress.tick()\n })\n child.on('error', (error) => {\n progress.stop()\n reject(error)\n })\n child.on('exit', (code) => {\n progress.stop()\n if (code === 0) {\n log.done('install complete')\n resolve()\n } else {\n reject(new Error(`npm install failed with exit code ${code}\\n${output.trim()}`))\n }\n })\n })\n}\n\nasync function linkPeerPackages(cacheDir: string): Promise<void> {\n await fs.mkdir(path.join(cacheDir, 'node_modules'), { recursive: true })\n for (const packageName of linkedPeerPackages) {\n try {\n await linkPackage({\n source: path.join(packageNodeModules(), packageName),\n target: path.join(cacheDir, 'node_modules', packageName),\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Failed to link ${packageName} into vitepad cache at ${cacheDir}.\\n${message}`)\n }\n }\n}\n\nasync function linkPackage(input: { source: string, target: string }): Promise<void> {\n const source = await fs.realpath(input.source)\n const existing = await fs.lstat(input.target).catch(() => null)\n\n if (existing) {\n if (existing.isSymbolicLink()) {\n const current = await fs.realpath(input.target).catch(() => null)\n if (current === source) return\n }\n await fs.rm(input.target, { recursive: true, force: true })\n }\n\n await fs.symlink(source, input.target, 'dir')\n}\n\nfunction createProgress(label: string): { tick: () => void, stop: () => void } {\n const width = 18\n let frame = 0\n const render = () => {\n const position = frame % width\n const bar = Array.from({ length: width }, (_, index) => index === position ? '=' : '-').join('')\n process.stderr.write(`\\r${label} [${bar}]`)\n frame += 1\n }\n const timer = setInterval(render, 120)\n render()\n return {\n tick: render,\n stop() {\n clearInterval(timer)\n process.stderr.write(`\\r${' '.repeat(label.length + width + 4)}\\r`)\n },\n }\n}\n\nfunction packageToDependency(pkg: string): [string, string] {\n const parsed = splitPackageSpec(pkg)\n return [parsed.name, parsed.version]\n}\n\nfunction splitPackageSpec(spec: string): { name: string, version: string } {\n if (spec.startsWith('@')) {\n const secondAt = spec.indexOf('@', 1)\n if (secondAt === -1) return { name: spec, version: 'latest' }\n return { name: spec.slice(0, secondAt), version: spec.slice(secondAt + 1) }\n }\n const at = spec.indexOf('@')\n if (at === -1) return { name: spec, version: 'latest' }\n return { name: spec.slice(0, at), version: spec.slice(at + 1) }\n}\n\nasync function importCachePackage(cacheDir: string, packageName: string): Promise<Record<string, any>> {\n const requireFromCache = createRequire(path.join(cacheDir, 'package.json'))\n const resolved = requireFromCache.resolve(packageName)\n return import(pathToFileURL(resolved).href)\n}\n\nasync function pathExists(file: string): Promise<boolean> {\n return fs.access(file).then(() => true, () => false)\n}\n","import fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport process from 'node:process'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\n\nimport { createLogger, createServer, mergeConfig, normalizePath, type LogOptions, type Logger, type PluginOption, type UserConfig } from 'vite'\nimport pc from 'picocolors'\n\nimport {\n appendPlugin,\n frameworkDedupe,\n frameworkOptimizeDeps,\n loadFrameworkPlugins,\n resolveFramework,\n type Framework,\n type FrameworkName,\n type FrameworkSpec,\n type PackageLink,\n type ResolvedFramework,\n} from './frameworks.js'\n\nexport type EntryMode = 'main' | 'component'\nexport type { Framework, FrameworkName, FrameworkSpec, ResolvedFramework }\n\nexport interface VitepadOptions {\n entry?: string\n framework: Framework\n frameworkVersion: string\n forceInstall: boolean\n port: number\n host: string\n open: boolean | string\n config?: string\n help: boolean\n}\n\nconst rootDir = path.resolve(fileURLToPath(new URL('..', import.meta.url)))\nconst supportedComponentExts = new Set(['.jsx', '.tsx', '.vue', '.svelte'])\nconst supportedMainExts = new Set(['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts'])\nconst frameworkValues = new Set<Framework>(['auto', 'react', 'preact', 'solid', 'vue', 'svelte', 'vanilla'])\n\nexport async function run(argv: string[]): Promise<void> {\n const options = parseArgs(argv)\n\n if (options.help) {\n console.log(helpText())\n return\n }\n\n if (!options.entry) {\n throw new Error(helpText('Missing entry file.'))\n }\n\n const entry = path.resolve(process.cwd(), options.entry)\n const stat = await fs.stat(entry).catch(() => null)\n if (!stat?.isFile()) {\n throw new Error(`Entry file does not exist: ${entry}`)\n }\n\n const extension = path.extname(entry).toLowerCase()\n const mode = inferMode(extension)\n const source = await fs.readFile(entry, 'utf8')\n const framework = inferFramework({\n extension,\n source,\n requested: options.framework,\n version: options.frameworkVersion,\n })\n validateCombination({ mode, framework: framework.name, extension })\n\n const resolvedFramework = await resolveFramework(framework, { forceInstall: options.forceInstall })\n const classTokens = await collectClassTokens(entry)\n const workspace = await createWorkspace({\n entry,\n mode,\n framework: resolvedFramework.name,\n sourceDirs: uniquePaths([process.cwd(), path.dirname(entry)]),\n classTokens,\n packageLinks: resolvedFramework.packageLinks,\n })\n const config = await loadUserConfig(options.config)\n\n const server = await createServer(mergeConfig({\n root: workspace,\n configFile: false,\n server: {\n host: options.host,\n port: options.port,\n open: options.open,\n watch: {\n ignored: (file: string) => normalizePath(file).startsWith(`${normalizePath(workspace)}/`),\n },\n fs: {\n allow: [\n rootDir,\n process.cwd(),\n path.dirname(entry),\n workspace,\n ...(resolvedFramework.cacheDir ? [resolvedFramework.cacheDir] : []),\n ],\n },\n },\n plugins: await loadPlugins(resolvedFramework),\n resolve: {\n alias: [\n ...resolvedFramework.aliases,\n {\n find: '@',\n replacement: path.dirname(entry),\n },\n ],\n dedupe: frameworkDedupe(resolvedFramework.name),\n },\n optimizeDeps: {\n entries: [path.join(workspace, 'src/main.js')],\n include: frameworkOptimizeDeps(resolvedFramework.name),\n },\n customLogger: createVitepadLogger(),\n }, config))\n\n await server.listen()\n printReady({\n entry,\n mode,\n framework: resolvedFramework,\n urls: server.resolvedUrls,\n })\n\n const close = async () => {\n await server.close()\n process.exit(0)\n }\n process.once('SIGINT', close)\n process.once('SIGTERM', close)\n}\n\nexport function parseArgs(argv: string[]): VitepadOptions {\n const options: VitepadOptions = {\n framework: 'auto',\n frameworkVersion: 'latest',\n forceInstall: false,\n port: 8000,\n host: '0.0.0.0',\n open: '/',\n help: false,\n }\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index]\n if (arg === '-h' || arg === '--help') {\n options.help = true\n } else if (arg === '--framework' || arg === '-f') {\n Object.assign(options, parseFramework(readValue(argv, ++index, arg)))\n } else if (arg.startsWith('--framework=')) {\n Object.assign(options, parseFramework(arg.slice('--framework='.length)))\n } else if (arg === '--force-install') {\n options.forceInstall = true\n } else if (arg === '--port' || arg === '-p') {\n options.port = Number(readValue(argv, ++index, arg))\n } else if (arg.startsWith('--port=')) {\n options.port = Number(arg.slice('--port='.length))\n } else if (arg === '--host') {\n options.host = readValue(argv, ++index, arg)\n } else if (arg.startsWith('--host=')) {\n options.host = arg.slice('--host='.length)\n } else if (arg === '--no-open') {\n options.open = false\n } else if (arg === '--open') {\n options.open = '/'\n } else if (arg === '--config' || arg === '-c') {\n options.config = readValue(argv, ++index, arg)\n } else if (arg.startsWith('--config=')) {\n options.config = arg.slice('--config='.length)\n } else if (arg.startsWith('-')) {\n throw new Error(`Unknown option: ${arg}`)\n } else if (!options.entry) {\n options.entry = arg\n } else {\n throw new Error(`Unexpected argument: ${arg}`)\n }\n }\n\n if (!Number.isInteger(options.port) || options.port < 0 || options.port > 65535) {\n throw new Error(`Invalid port: ${options.port}`)\n }\n\n return options\n}\n\nfunction parseFramework(value: string): Pick<VitepadOptions, 'framework' | 'frameworkVersion'> {\n const match = value.match(/^([^@]+)(?:@(.+))?$/)\n const name = match?.[1] as Framework | undefined\n const version = match?.[2] || 'latest'\n\n if (name && frameworkValues.has(name)) {\n return { framework: name, frameworkVersion: version }\n }\n throw new Error(`Unsupported framework \"${value}\". Use one of: ${[...frameworkValues].join(', ')}, optionally with @version.`)\n}\n\nfunction readValue(argv: string[], index: number, option: string): string {\n const value = argv[index]\n if (!value || value.startsWith('-')) {\n throw new Error(`Missing value for ${option}`)\n }\n return value\n}\n\nfunction inferMode(extension: string): EntryMode {\n if (supportedMainExts.has(extension)) return 'main'\n if (supportedComponentExts.has(extension)) return 'component'\n throw new Error(`Unsupported entry extension \"${extension}\". Supported: js, ts, jsx, tsx, vue, svelte.`)\n}\n\nfunction inferFramework(input: { extension: string, source: string, requested: Framework, version: string }): FrameworkSpec {\n const { extension, source, requested, version } = input\n if (requested !== 'auto') return { name: requested, version }\n if (extension === '.vue') return { name: 'vue', version }\n if (extension === '.svelte') return { name: 'svelte', version }\n if (/\\bfrom\\s+['\"]solid-js\\b|\\bfrom\\s+['\"]solid-js\\/web\\b|\\bsolid-js\\b/.test(source)) return { name: 'solid', version }\n if (/\\bfrom\\s+['\"]preact\\b|\\bfrom\\s+['\"]preact\\/compat\\b|\\bfrom\\s+['\"]preact\\/hooks\\b/.test(source)) return { name: 'preact', version }\n if (/\\bfrom\\s+['\"]vue\\b/.test(source)) return { name: 'vue', version }\n if (/\\bfrom\\s+['\"]svelte\\b|\\bfrom\\s+['\"]svelte\\//.test(source)) return { name: 'svelte', version }\n if (extension === '.jsx' || extension === '.tsx') return { name: 'react', version }\n return { name: 'vanilla', version: 'local' }\n}\n\nfunction validateCombination(input: { mode: EntryMode, framework: Framework, extension: string }): void {\n const { mode, framework, extension } = input\n if (mode === 'component' && framework === 'vanilla') {\n throw new Error(`Component entry ${extension} needs a framework. Try --framework react, vue, svelte, preact, or solid.`)\n }\n if (extension === '.vue' && framework !== 'vue') {\n throw new Error('.vue entries must use --framework vue.')\n }\n if (extension === '.svelte' && framework !== 'svelte') {\n throw new Error('.svelte entries must use --framework svelte.')\n }\n}\n\nasync function createWorkspace(input: { entry: string, mode: EntryMode, framework: FrameworkName, sourceDirs: string[], classTokens: string[], packageLinks: PackageLink[] }): Promise<string> {\n const workspace = await fs.mkdtemp(path.join(await fs.realpath(os.tmpdir()), 'vitepad-'))\n const srcDir = path.join(workspace, 'src')\n const nodeModulesDir = path.join(workspace, 'node_modules')\n await fs.mkdir(srcDir, { recursive: true })\n await fs.mkdir(nodeModulesDir, { recursive: true })\n await Promise.all([\n fs.writeFile(path.join(workspace, 'index.html'), htmlTemplate()),\n fs.writeFile(path.join(srcDir, 'style.css'), styleTemplate(input.sourceDirs, input.classTokens)),\n fs.writeFile(path.join(srcDir, 'main.js'), mainTemplate(input)),\n ...input.packageLinks.map((link) => linkWorkspacePackage(nodeModulesDir, link)),\n ])\n return workspace\n}\n\nasync function linkWorkspacePackage(nodeModulesDir: string, link: PackageLink): Promise<void> {\n const source = await fs.realpath(link.source)\n const target = path.join(nodeModulesDir, link.name)\n await fs.mkdir(path.dirname(target), { recursive: true })\n await fs.symlink(source, target, 'dir')\n}\n\nfunction uniquePaths(paths: string[]): string[] {\n return [...new Set(paths.map((item) => normalizePath(path.resolve(item))))]\n}\n\nfunction styleTemplate(sourceDirs: string[], classTokens: string[]): string {\n return [\n '@import \"tailwindcss\";',\n ...sourceDirs.map((sourceDir) => `@source ${JSON.stringify(sourceDir)};`),\n classTokens.length ? `/* vitepad safelist: ${classTokens.join(' ')} */` : '',\n '',\n ].join('\\n')\n}\n\nasync function collectClassTokens(entry: string): Promise<string[]> {\n const visited = new Set<string>()\n const tokens = new Set<string>()\n await collectFileClassTokens(entry, visited, tokens)\n return [...tokens].sort()\n}\n\nasync function collectFileClassTokens(file: string, visited: Set<string>, tokens: Set<string>): Promise<void> {\n const resolved = path.resolve(file)\n if (visited.has(resolved)) return\n visited.add(resolved)\n\n const source = await fs.readFile(resolved, 'utf8').catch(() => '')\n for (const match of source.matchAll(/\\b(?:class|className)\\s*=\\s*(?:\"([^\"]+)\"|'([^']+)'|{`([^`]+)`})/g)) {\n const value = match[1] || match[2] || match[3] || ''\n for (const token of value.split(/\\s+/)) {\n if (token && !/[${}]/.test(token)) tokens.add(token)\n }\n }\n\n for (const specifier of localImportSpecifiers(source)) {\n const imported = await resolveLocalImport(resolved, specifier)\n if (imported) {\n await collectFileClassTokens(imported, visited, tokens)\n }\n }\n}\n\nfunction localImportSpecifiers(source: string): string[] {\n const specifiers = new Set<string>()\n for (const match of source.matchAll(/\\bimport\\s+(?:[^'\"]+?\\s+from\\s+)?['\"]([^'\"]+)['\"]/g)) {\n if (isLocalSpecifier(match[1])) specifiers.add(match[1])\n }\n for (const match of source.matchAll(/\\bexport\\s+[^'\"]+?\\s+from\\s+['\"]([^'\"]+)['\"]/g)) {\n if (isLocalSpecifier(match[1])) specifiers.add(match[1])\n }\n return [...specifiers]\n}\n\nfunction isLocalSpecifier(specifier: string): boolean {\n return specifier.startsWith('./') || specifier.startsWith('../')\n}\n\nasync function resolveLocalImport(importer: string, specifier: string): Promise<string | undefined> {\n const base = path.resolve(path.dirname(importer), specifier)\n const candidates = [\n base,\n ...['.ts', '.tsx', '.js', '.jsx', '.vue', '.svelte'].map((ext) => `${base}${ext}`),\n ...['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.vue', 'index.svelte'].map((file) => path.join(base, file)),\n ]\n\n for (const candidate of candidates) {\n const stat = await fs.stat(candidate).catch(() => null)\n if (stat?.isFile()) return candidate\n }\n return undefined\n}\n\nfunction htmlTemplate(): string {\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>vitepad</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/main.js\"></script>\n </body>\n</html>\n`\n}\n\nfunction mainTemplate(input: { entry: string, mode: EntryMode, framework: FrameworkName }): string {\n const { entry, mode, framework } = input\n const importPath = `/@fs/${normalizePath(entry)}`\n if (mode === 'main') {\n return `import './style.css'\\nimport ${JSON.stringify(importPath)}\\n`\n }\n\n switch (framework) {\n case 'react':\n return `import './style.css'\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport App from ${JSON.stringify(importPath)}\n\ncreateRoot(document.getElementById('root')).render(React.createElement(App))\n`\n case 'preact':\n return `import './style.css'\nimport { h, render } from 'preact'\nimport App from ${JSON.stringify(importPath)}\n\nrender(h(App, null), document.getElementById('root'))\n`\n case 'solid':\n return `import './style.css'\nimport { render } from 'solid-js/web'\nimport App from ${JSON.stringify(importPath)}\n\nrender(() => App({}), document.getElementById('root'))\n`\n case 'vue':\n return `import './style.css'\nimport { createApp } from 'vue'\nimport App from ${JSON.stringify(importPath)}\n\ncreateApp(App).mount('#root')\n`\n case 'svelte':\n return `import './style.css'\nimport { mount } from 'svelte'\nimport App from ${JSON.stringify(importPath)}\n\nconst target = document.getElementById('root')\nconst app = mount(App, { target })\nexport default app\n`\n case 'vanilla':\n throw new Error('Vanilla entries cannot be used as component entries.')\n }\n}\n\nasync function loadUserConfig(configFile: string | undefined): Promise<UserConfig> {\n if (!configFile) return {}\n const resolved = path.resolve(process.cwd(), configFile)\n const configModule = await import(pathToFileURL(resolved).href)\n return configModule.default ?? configModule\n}\n\nasync function loadPlugins(framework: ResolvedFramework): Promise<PluginOption[]> {\n const [{ default: tailwindcss }, frameworkPlugins] = await Promise.all([\n import('@tailwindcss/vite'),\n loadFrameworkPlugins(framework),\n ])\n const plugins: PluginOption[] = []\n appendPlugin(plugins, tailwindcss())\n plugins.push(...frameworkPlugins)\n return plugins\n}\n\nfunction printReady(input: { entry: string, mode: EntryMode, framework: ResolvedFramework, urls?: { local: string[], network: string[] } | null }): void {\n const { entry, framework, urls } = input\n const frameworkLabel = `${framework.name}@${framework.version}`\n\n console.log(`${pc.cyan('vitepad')} ${pc.green('ready')} ${pc.green(frameworkLabel)}`)\n console.log(` ${pc.gray('entry')} ${pc.gray(entry)}`)\n if (framework.cacheDir) {\n console.log(` ${pc.gray('cache')} ${pc.gray(framework.cacheDir)}`)\n }\n printUrls(urls)\n}\n\nfunction printUrls(urls: { local: string[], network: string[] } | null | undefined): void {\n if (!urls) return\n for (const url of urls.local) {\n console.log(` ${pc.green('➜')} ${pc.bold('Local:')} ${pc.bold(url)}`)\n }\n for (const url of urls.network) {\n console.log(` ${pc.green('➜')} ${pc.bold('Network:')} ${pc.bold(url)}`)\n }\n}\n\nfunction createVitepadLogger(): Logger {\n const logger = createLogger('info')\n const info = logger.info.bind(logger)\n return {\n ...logger,\n info(message: string, options?: LogOptions) {\n if (isNoisyViteInfo(message)) return\n info(message, options)\n },\n }\n}\n\nfunction isNoisyViteInfo(message: string): boolean {\n return /\\[vite\\]\\s+\\(client\\)\\s+(hmr update|page reload)\\b/.test(stripAnsi(message))\n}\n\nfunction stripAnsi(value: string): string {\n return value.replace(/\\x1B\\[[0-?]*[ -/]*[@-~]/g, '')\n}\n\nfunction helpText(prefix?: string): string {\n return `${prefix ? `${prefix}\\n\\n` : ''}Usage:\n vitepad <entry> [options]\n\nEntries:\n .js, .ts Treated as main entry files.\n .jsx, .tsx, .vue, .svelte Treated as App component files.\n\nOptions:\n -f, --framework <name> auto, react, preact, solid, vue, svelte, vanilla\n Version specs are supported, e.g. react@18, vue@3.4.\n --force-install Reinstall the selected framework cache.\n -p, --port <number> Dev server port. Default: 8000\n --host <host> Dev server host. Default: 0.0.0.0\n --no-open Do not open the browser automatically.\n -c, --config <file> Merge an extra Vite config file.\n -h, --help Show help.\n`\n}\n","#!/usr/bin/env node\nimport { run } from './runtime/index.js'\n\nrun(process.argv.slice(2)).catch((error) => {\n console.error(error instanceof Error ? error.message : error)\n process.exit(1)\n})\n"]}
1
+ {"version":3,"sources":["../src/runtime/frameworks.ts","../src/runtime/index.ts","../src/cli.ts"],"names":["path","pc","fs","fileURLToPath","process","os","pathToFileURL"],"mappings":"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","file":"cli.js","sourcesContent":["import fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { spawn } from 'node:child_process'\nimport { createRequire } from 'node:module'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\n\nimport { type Alias, type PluginOption } from 'vite'\nimport pc from 'picocolors'\n\nexport type FrameworkName = 'react' | 'preact' | 'solid' | 'vue' | 'svelte' | 'vanilla'\nexport type Framework = 'auto' | FrameworkName\n\nexport interface FrameworkSpec {\n name: Framework\n version: string\n}\n\nexport interface ResolvedFramework {\n name: FrameworkName\n version: string\n requested: string\n cacheStatus: 'hit' | 'miss' | 'local'\n cacheDir?: string\n aliases: Alias[]\n packageLinks: PackageLink[]\n editorPackageLinks: PackageLink[]\n}\n\nexport interface PackageLink {\n name: string\n source: string\n}\n\nconst packageRoot = path.resolve(fileURLToPath(new URL('..', import.meta.url)))\nconst requireFromPackage = createRequire(path.join(packageRoot, 'package.json'))\nconst linkedPeerPackages = ['vite']\nconst log = {\n framework(requested: string, resolved: string) {\n console.log(`\\n${pc.cyan('vitepad')} ${pc.bold('framework')} ${pc.gray(requested)} ${pc.gray('->')} ${pc.green(resolved)}`)\n },\n install(packages: string[]) {\n console.log(` ${pc.gray('install')} ${packages.map((pkg) => pc.cyan(pkg)).join(pc.gray(', '))}`)\n },\n done(message: string) {\n console.log(` ${pc.green(message)}`)\n },\n}\n\nexport async function resolveFramework(spec: FrameworkSpec, options: { forceInstall: boolean }): Promise<ResolvedFramework> {\n if (spec.name === 'auto') {\n throw new Error('Internal error: unresolved framework auto.')\n }\n if (spec.name === 'vanilla') {\n return {\n name: 'vanilla',\n version: 'local',\n requested: 'vanilla',\n cacheStatus: 'local',\n aliases: [],\n packageLinks: packageLinks(['tailwindcss']),\n editorPackageLinks: [],\n }\n }\n\n const resolved = await resolveFrameworkPackages(spec.name, spec.version)\n const cacheDir = frameworkCacheDir(spec.name, resolved.version)\n const nodeModules = path.join(cacheDir, 'node_modules')\n const installed = await isInstalled(cacheDir, resolved.packages)\n\n if (options.forceInstall && await pathExists(cacheDir)) {\n await fs.rm(cacheDir, { recursive: true, force: true })\n }\n\n log.framework(`${spec.name}@${spec.version}`, `${spec.name}@${resolved.version}`)\n const cacheStatus = options.forceInstall ? 'miss' : installed ? 'hit' : 'miss'\n\n if (options.forceInstall || !installed) {\n log.install(resolved.packages)\n await installFrameworkCache(cacheDir, resolved.packages)\n }\n await linkPeerPackages(cacheDir)\n\n return {\n name: spec.name,\n version: resolved.version,\n requested: `${spec.name}@${spec.version}`,\n cacheStatus,\n cacheDir,\n aliases: [],\n packageLinks: [\n ...packageLinks(['tailwindcss']),\n ...packageLinks(nodeModules, frameworkRuntimePackages(spec.name)),\n ],\n editorPackageLinks: packageLinks(nodeModules, frameworkEditorPackages(spec.name)),\n }\n}\n\nasync function resolveFrameworkPackages(framework: FrameworkName, version: string): Promise<{ version: string, packages: string[] }> {\n const specs = frameworkPackageSpecs(framework, version)\n const resolved = await Promise.all(specs.map(async (spec) => {\n const parsed = splitPackageSpec(spec)\n const resolvedVersion = await resolvePackageVersion(parsed.name, parsed.version)\n return {\n name: parsed.name,\n version: resolvedVersion,\n spec: `${parsed.name}@${resolvedVersion}`,\n }\n }))\n const primary = splitPackageSpec(specs[0]).name\n const primaryVersion = resolved.find((pkg) => pkg.name === primary)?.version\n if (!primaryVersion) {\n throw new Error(`Failed to resolve ${framework}@${version}.`)\n }\n return {\n version: primaryVersion,\n packages: resolved.map((pkg) => pkg.spec),\n }\n}\n\nexport function frameworkDedupe(framework: FrameworkName): string[] {\n return frameworkRuntimePackages(framework)\n}\n\nexport function frameworkOptimizeDeps(framework: FrameworkName): string[] {\n switch (framework) {\n case 'react':\n return ['react', 'react-dom', 'react/jsx-runtime', 'react/jsx-dev-runtime']\n case 'preact':\n return ['preact', 'preact/jsx-runtime', 'preact/hooks']\n case 'solid':\n return ['solid-js', 'solid-js/web']\n case 'vue':\n return ['vue']\n case 'svelte':\n case 'vanilla':\n return []\n }\n}\n\nexport async function loadFrameworkPlugins(framework: ResolvedFramework): Promise<PluginOption[]> {\n if (framework.name === 'vanilla') {\n return []\n }\n if (!framework.cacheDir) {\n throw new Error(`Missing framework cache for ${framework.name}.`)\n }\n\n const plugins: PluginOption[] = []\n for (const pluginPackage of frameworkPluginPackages(framework.name)) {\n const mod = await importCachePackage(framework.cacheDir, pluginPackage)\n appendPlugin(plugins, createFrameworkPlugin(pluginPackage, mod))\n }\n return plugins\n}\n\nfunction createFrameworkPlugin(pluginPackage: string, mod: Record<string, any>): PluginOption {\n const factory = frameworkPluginFactory(pluginPackage, mod)\n return factory()\n}\n\nfunction frameworkPluginFactory(pluginPackage: string, mod: Record<string, any>): () => PluginOption {\n if (pluginPackage === '@sveltejs/vite-plugin-svelte' && typeof mod.svelte === 'function') {\n return mod.svelte\n }\n if (pluginPackage === '@preact/preset-vite' && typeof mod.preact === 'function') {\n return mod.preact\n }\n if (typeof mod.default === 'function') {\n return mod.default\n }\n if (mod.default && typeof mod.default.default === 'function') {\n return mod.default.default\n }\n\n throw new Error(`Failed to load Vite plugin ${pluginPackage}: no callable plugin export found.`)\n}\n\nexport function appendPlugin(plugins: PluginOption[], plugin: PluginOption): void {\n if (Array.isArray(plugin)) {\n plugins.push(...plugin)\n } else {\n plugins.push(plugin)\n }\n}\n\nfunction frameworkPackageSpecs(framework: FrameworkName, version: string): string[] {\n switch (framework) {\n case 'react':\n return [\n `react@${version}`,\n `react-dom@${version}`,\n `@types/react@${reactTypesVersion(version)}`,\n `@types/react-dom@${reactTypesVersion(version)}`,\n '@vitejs/plugin-react@latest',\n ]\n case 'preact':\n return [`preact@${version}`, '@preact/preset-vite@latest']\n case 'solid':\n return [`solid-js@${version}`, 'vite-plugin-solid@latest']\n case 'vue':\n return [`vue@${version}`, '@vitejs/plugin-vue@latest', '@vitejs/plugin-vue-jsx@latest']\n case 'svelte':\n return [`svelte@${version}`, '@sveltejs/vite-plugin-svelte@latest']\n case 'vanilla':\n return []\n }\n}\n\nfunction reactTypesVersion(version: string): string {\n const major = version.match(/^\\D*(\\d+)/)?.[1]\n return major || 'latest'\n}\n\nfunction resolvePackageVersion(name: string, range: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn('npm', ['view', `${name}@${range}`, 'version', '--json'], {\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n\n let stdout = ''\n let stderr = ''\n child.stdout.on('data', (chunk) => {\n stdout += chunk\n })\n child.stderr.on('data', (chunk) => {\n stderr += chunk\n })\n child.on('error', reject)\n child.on('exit', (code) => {\n if (code !== 0) {\n reject(new Error(`npm view failed for ${name}@${range}\\n${stderr.trim()}`))\n return\n }\n\n try {\n const parsed = JSON.parse(stdout.trim())\n const version = Array.isArray(parsed) ? parsed[parsed.length - 1] : parsed\n if (typeof version !== 'string' || !version) {\n throw new Error(`Unexpected npm view output: ${stdout}`)\n }\n resolve(version)\n } catch (error) {\n reject(error)\n }\n })\n })\n}\n\nfunction frameworkRuntimePackages(framework: FrameworkName): string[] {\n switch (framework) {\n case 'react':\n return ['react', 'react-dom']\n case 'preact':\n return ['preact']\n case 'solid':\n return ['solid-js']\n case 'vue':\n return ['vue']\n case 'svelte':\n return ['svelte']\n case 'vanilla':\n return []\n }\n}\n\nfunction frameworkEditorPackages(framework: FrameworkName): string[] {\n switch (framework) {\n case 'react':\n return ['react', 'react-dom', '@types/react', '@types/react-dom']\n case 'preact':\n case 'solid':\n case 'vue':\n case 'svelte':\n case 'vanilla':\n return frameworkRuntimePackages(framework)\n }\n}\n\nfunction frameworkPluginPackages(framework: FrameworkName): string[] {\n switch (framework) {\n case 'react':\n return ['@vitejs/plugin-react']\n case 'preact':\n return ['@preact/preset-vite']\n case 'solid':\n return ['vite-plugin-solid']\n case 'vue':\n return ['@vitejs/plugin-vue', '@vitejs/plugin-vue-jsx']\n case 'svelte':\n return ['@sveltejs/vite-plugin-svelte']\n case 'vanilla':\n return []\n }\n}\n\nfunction packageLinks(packageNames: string[]): PackageLink[]\nfunction packageLinks(nodeModules: string, packageNames: string[]): PackageLink[]\nfunction packageLinks(nodeModulesOrPackageNames: string | string[], maybePackageNames?: string[]): PackageLink[] {\n if (Array.isArray(nodeModulesOrPackageNames)) {\n return nodeModulesOrPackageNames.map((packageName) => ({\n name: packageName,\n source: resolveInstalledPackageDir(packageName),\n }))\n }\n\n const nodeModules = nodeModulesOrPackageNames\n const packageNames = maybePackageNames ?? []\n return packageNames.map((packageName) => ({\n name: packageName,\n source: path.join(nodeModules, packageName),\n }))\n}\n\nfunction resolveInstalledPackageDir(packageName: string): string {\n const packageJson = requireFromPackage.resolve(`${packageName}/package.json`)\n return path.dirname(packageJson)\n}\n\nfunction frameworkCacheDir(framework: FrameworkName, version: string): string {\n const base = process.env.VITEPAD_CACHE_DIR\n || (process.env.XDG_CACHE_HOME ? path.join(process.env.XDG_CACHE_HOME, 'vitepad') : path.join(os.homedir(), '.cache', 'vitepad'))\n return path.join(base, 'frameworks', `${framework}-${sanitizeCacheKey(version)}`)\n}\n\nfunction sanitizeCacheKey(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]/g, '_')\n}\n\nasync function isInstalled(cacheDir: string, packages: string[]): Promise<boolean> {\n if (!await pathExists(path.join(cacheDir, 'node_modules'))) return false\n for (const pkg of packages) {\n const { name } = splitPackageSpec(pkg)\n if (!await pathExists(path.join(cacheDir, 'node_modules', name))) {\n return false\n }\n }\n return true\n}\n\nasync function installFrameworkCache(cacheDir: string, packages: string[]): Promise<void> {\n await fs.mkdir(cacheDir, { recursive: true })\n await fs.writeFile(path.join(cacheDir, 'package.json'), JSON.stringify({\n private: true,\n type: 'module',\n dependencies: Object.fromEntries(packages.map((pkg) => packageToDependency(pkg))),\n }, null, 2))\n\n await runInstall(cacheDir)\n}\n\nfunction runInstall(cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn('npm', ['install', '--legacy-peer-deps', '--no-audit', '--no-fund', '--loglevel=notice'], {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n\n const progress = createProgress('vitepad: installing framework packages')\n let output = ''\n\n child.stdout.on('data', (chunk) => {\n output += chunk\n progress.tick()\n })\n child.stderr.on('data', (chunk) => {\n output += chunk\n progress.tick()\n })\n child.on('error', (error) => {\n progress.stop()\n reject(error)\n })\n child.on('exit', (code) => {\n progress.stop()\n if (code === 0) {\n log.done('install complete')\n resolve()\n } else {\n reject(new Error(`npm install failed with exit code ${code}\\n${output.trim()}`))\n }\n })\n })\n}\n\nasync function linkPeerPackages(cacheDir: string): Promise<void> {\n await fs.mkdir(path.join(cacheDir, 'node_modules'), { recursive: true })\n for (const packageName of linkedPeerPackages) {\n try {\n await linkPackage({\n source: resolveInstalledPackageDir(packageName),\n target: path.join(cacheDir, 'node_modules', packageName),\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Failed to link ${packageName} into vitepad cache at ${cacheDir}.\\n${message}`)\n }\n }\n}\n\nasync function linkPackage(input: { source: string, target: string }): Promise<void> {\n const source = await fs.realpath(input.source)\n const existing = await fs.lstat(input.target).catch(() => null)\n\n if (existing) {\n if (existing.isSymbolicLink()) {\n const current = await fs.realpath(input.target).catch(() => null)\n if (current === source) return\n }\n await fs.rm(input.target, { recursive: true, force: true })\n }\n\n await fs.symlink(source, input.target, 'dir')\n}\n\nfunction createProgress(label: string): { tick: () => void, stop: () => void } {\n const width = 18\n let frame = 0\n const render = () => {\n const position = frame % width\n const bar = Array.from({ length: width }, (_, index) => index === position ? '=' : '-').join('')\n process.stderr.write(`\\r${label} [${bar}]`)\n frame += 1\n }\n const timer = setInterval(render, 120)\n render()\n return {\n tick: render,\n stop() {\n clearInterval(timer)\n process.stderr.write(`\\r${' '.repeat(label.length + width + 4)}\\r`)\n },\n }\n}\n\nfunction packageToDependency(pkg: string): [string, string] {\n const parsed = splitPackageSpec(pkg)\n return [parsed.name, parsed.version]\n}\n\nfunction splitPackageSpec(spec: string): { name: string, version: string } {\n if (spec.startsWith('@')) {\n const secondAt = spec.indexOf('@', 1)\n if (secondAt === -1) return { name: spec, version: 'latest' }\n return { name: spec.slice(0, secondAt), version: spec.slice(secondAt + 1) }\n }\n const at = spec.indexOf('@')\n if (at === -1) return { name: spec, version: 'latest' }\n return { name: spec.slice(0, at), version: spec.slice(at + 1) }\n}\n\nasync function importCachePackage(cacheDir: string, packageName: string): Promise<Record<string, any>> {\n const requireFromCache = createRequire(path.join(cacheDir, 'package.json'))\n const resolved = requireFromCache.resolve(packageName)\n return import(pathToFileURL(resolved).href)\n}\n\nasync function pathExists(file: string): Promise<boolean> {\n return fs.access(file).then(() => true, () => false)\n}\n","import fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport process from 'node:process'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\n\nimport { createLogger, createServer, mergeConfig, normalizePath, type LogOptions, type Logger, type PluginOption, type UserConfig } from 'vite'\nimport pc from 'picocolors'\n\nimport {\n appendPlugin,\n frameworkDedupe,\n frameworkOptimizeDeps,\n loadFrameworkPlugins,\n resolveFramework,\n type Framework,\n type FrameworkName,\n type FrameworkSpec,\n type PackageLink,\n type ResolvedFramework,\n} from './frameworks.js'\n\nexport type EntryMode = 'main' | 'component'\nexport type { Framework, FrameworkName, FrameworkSpec, ResolvedFramework }\n\nexport interface VitepadOptions {\n entry?: string\n framework: Framework\n frameworkVersion: string\n forceInstall: boolean\n port: number\n host: string\n open: boolean | string\n config?: string\n editor: boolean\n help: boolean\n}\n\nconst rootDir = path.resolve(fileURLToPath(new URL('..', import.meta.url)))\nconst supportedComponentExts = new Set(['.jsx', '.tsx', '.vue', '.svelte'])\nconst supportedMainExts = new Set(['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts'])\nconst frameworkValues = new Set<Framework>(['auto', 'react', 'preact', 'solid', 'vue', 'svelte', 'vanilla'])\n\nexport async function run(argv: string[]): Promise<void> {\n const options = parseArgs(argv)\n\n if (options.help) {\n console.log(helpText())\n return\n }\n\n if (!options.entry) {\n throw new Error(helpText('Missing entry file.'))\n }\n\n const entry = path.resolve(process.cwd(), options.entry)\n const stat = await fs.stat(entry).catch(() => null)\n if (!stat?.isFile()) {\n throw new Error(`Entry file does not exist: ${entry}`)\n }\n\n const extension = path.extname(entry).toLowerCase()\n const mode = inferMode(extension)\n const source = await fs.readFile(entry, 'utf8')\n const framework = inferFramework({\n extension,\n source,\n requested: options.framework,\n version: options.frameworkVersion,\n })\n validateCombination({ mode, framework: framework.name, extension })\n\n const resolvedFramework = await resolveFramework(framework, { forceInstall: options.forceInstall })\n if (options.editor) {\n await setupEditorPackages(process.cwd(), resolvedFramework.editorPackageLinks)\n }\n const classTokens = await collectClassTokens(entry)\n const workspace = await createWorkspace({\n entry,\n mode,\n framework: resolvedFramework.name,\n sourceDirs: uniquePaths([process.cwd(), path.dirname(entry)]),\n classTokens,\n packageLinks: resolvedFramework.packageLinks,\n })\n const config = await loadUserConfig(options.config)\n\n const server = await createServer(mergeConfig({\n root: workspace,\n configFile: false,\n server: {\n host: options.host,\n port: options.port,\n open: options.open,\n watch: {\n ignored: (file: string) => normalizePath(file).startsWith(`${normalizePath(workspace)}/`),\n },\n fs: {\n allow: [\n rootDir,\n process.cwd(),\n path.dirname(entry),\n workspace,\n ...(resolvedFramework.cacheDir ? [resolvedFramework.cacheDir] : []),\n ],\n },\n },\n plugins: await loadPlugins(resolvedFramework),\n resolve: {\n alias: [\n ...resolvedFramework.aliases,\n {\n find: '@',\n replacement: path.dirname(entry),\n },\n ],\n dedupe: frameworkDedupe(resolvedFramework.name),\n },\n optimizeDeps: {\n entries: [path.join(workspace, 'src/main.js')],\n include: frameworkOptimizeDeps(resolvedFramework.name),\n },\n customLogger: createVitepadLogger(),\n }, config))\n\n await server.listen()\n printReady({\n entry,\n mode,\n framework: resolvedFramework,\n urls: server.resolvedUrls,\n })\n\n const close = async () => {\n await server.close()\n process.exit(0)\n }\n process.once('SIGINT', close)\n process.once('SIGTERM', close)\n}\n\nexport function parseArgs(argv: string[]): VitepadOptions {\n const options: VitepadOptions = {\n framework: 'auto',\n frameworkVersion: 'latest',\n forceInstall: false,\n port: 8000,\n host: '0.0.0.0',\n open: '/',\n editor: false,\n help: false,\n }\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index]\n if (arg === '-h' || arg === '--help') {\n options.help = true\n } else if (arg === '--framework' || arg === '-f') {\n Object.assign(options, parseFramework(readValue(argv, ++index, arg)))\n } else if (arg.startsWith('--framework=')) {\n Object.assign(options, parseFramework(arg.slice('--framework='.length)))\n } else if (arg === '--force-install') {\n options.forceInstall = true\n } else if (arg === '--port' || arg === '-p') {\n options.port = Number(readValue(argv, ++index, arg))\n } else if (arg.startsWith('--port=')) {\n options.port = Number(arg.slice('--port='.length))\n } else if (arg === '--host') {\n options.host = readValue(argv, ++index, arg)\n } else if (arg.startsWith('--host=')) {\n options.host = arg.slice('--host='.length)\n } else if (arg === '--no-open') {\n options.open = false\n } else if (arg === '--open') {\n options.open = '/'\n } else if (arg === '--editor') {\n options.editor = true\n } else if (arg === '--config' || arg === '-c') {\n options.config = readValue(argv, ++index, arg)\n } else if (arg.startsWith('--config=')) {\n options.config = arg.slice('--config='.length)\n } else if (arg.startsWith('-')) {\n throw new Error(`Unknown option: ${arg}`)\n } else if (!options.entry) {\n options.entry = arg\n } else {\n throw new Error(`Unexpected argument: ${arg}`)\n }\n }\n\n if (!Number.isInteger(options.port) || options.port < 0 || options.port > 65535) {\n throw new Error(`Invalid port: ${options.port}`)\n }\n\n return options\n}\n\nfunction parseFramework(value: string): Pick<VitepadOptions, 'framework' | 'frameworkVersion'> {\n const match = value.match(/^([^@]+)(?:@(.+))?$/)\n const name = match?.[1] as Framework | undefined\n const version = match?.[2] || 'latest'\n\n if (name && frameworkValues.has(name)) {\n return { framework: name, frameworkVersion: version }\n }\n throw new Error(`Unsupported framework \"${value}\". Use one of: ${[...frameworkValues].join(', ')}, optionally with @version.`)\n}\n\nfunction readValue(argv: string[], index: number, option: string): string {\n const value = argv[index]\n if (!value || value.startsWith('-')) {\n throw new Error(`Missing value for ${option}`)\n }\n return value\n}\n\nfunction inferMode(extension: string): EntryMode {\n if (supportedMainExts.has(extension)) return 'main'\n if (supportedComponentExts.has(extension)) return 'component'\n throw new Error(`Unsupported entry extension \"${extension}\". Supported: js, ts, jsx, tsx, vue, svelte.`)\n}\n\nfunction inferFramework(input: { extension: string, source: string, requested: Framework, version: string }): FrameworkSpec {\n const { extension, source, requested, version } = input\n if (requested !== 'auto') return { name: requested, version }\n if (extension === '.vue') return { name: 'vue', version }\n if (extension === '.svelte') return { name: 'svelte', version }\n if (/\\bfrom\\s+['\"]solid-js\\b|\\bfrom\\s+['\"]solid-js\\/web\\b|\\bsolid-js\\b/.test(source)) return { name: 'solid', version }\n if (/\\bfrom\\s+['\"]preact\\b|\\bfrom\\s+['\"]preact\\/compat\\b|\\bfrom\\s+['\"]preact\\/hooks\\b/.test(source)) return { name: 'preact', version }\n if (/\\bfrom\\s+['\"]vue\\b/.test(source)) return { name: 'vue', version }\n if (/\\bfrom\\s+['\"]svelte\\b|\\bfrom\\s+['\"]svelte\\//.test(source)) return { name: 'svelte', version }\n if (extension === '.jsx' || extension === '.tsx') return { name: 'react', version }\n return { name: 'vanilla', version: 'local' }\n}\n\nfunction validateCombination(input: { mode: EntryMode, framework: Framework, extension: string }): void {\n const { mode, framework, extension } = input\n if (mode === 'component' && framework === 'vanilla') {\n throw new Error(`Component entry ${extension} needs a framework. Try --framework react, vue, svelte, preact, or solid.`)\n }\n if (extension === '.vue' && framework !== 'vue') {\n throw new Error('.vue entries must use --framework vue.')\n }\n if (extension === '.svelte' && framework !== 'svelte') {\n throw new Error('.svelte entries must use --framework svelte.')\n }\n}\n\nasync function createWorkspace(input: { entry: string, mode: EntryMode, framework: FrameworkName, sourceDirs: string[], classTokens: string[], packageLinks: PackageLink[] }): Promise<string> {\n const workspace = await fs.mkdtemp(path.join(await fs.realpath(os.tmpdir()), 'vitepad-'))\n const srcDir = path.join(workspace, 'src')\n const nodeModulesDir = path.join(workspace, 'node_modules')\n await fs.mkdir(srcDir, { recursive: true })\n await fs.mkdir(nodeModulesDir, { recursive: true })\n await Promise.all([\n fs.writeFile(path.join(workspace, 'index.html'), htmlTemplate()),\n fs.writeFile(path.join(srcDir, 'style.css'), styleTemplate(input.sourceDirs, input.classTokens)),\n fs.writeFile(path.join(srcDir, 'main.js'), mainTemplate(input)),\n ...input.packageLinks.map((link) => linkWorkspacePackage(nodeModulesDir, link)),\n ])\n return workspace\n}\n\nasync function linkWorkspacePackage(nodeModulesDir: string, link: PackageLink): Promise<void> {\n const source = await fs.realpath(link.source)\n const target = path.join(nodeModulesDir, link.name)\n await fs.mkdir(path.dirname(target), { recursive: true })\n await fs.symlink(source, target, 'dir')\n}\n\nasync function setupEditorPackages(projectDir: string, links: PackageLink[]): Promise<void> {\n if (links.length === 0) return\n\n const nodeModulesDir = path.join(projectDir, 'node_modules')\n await fs.mkdir(nodeModulesDir, { recursive: true })\n\n const linked: string[] = []\n const skipped: string[] = []\n for (const link of links) {\n const result = await linkEditorPackage(nodeModulesDir, link)\n if (result === 'linked') {\n linked.push(link.name)\n } else {\n skipped.push(link.name)\n }\n }\n\n if (linked.length > 0) {\n console.log(`${pc.cyan('vitepad')} ${pc.green('editor')} linked ${linked.map((name) => pc.cyan(name)).join(pc.gray(', '))}`)\n }\n if (skipped.length > 0) {\n console.log(`${pc.cyan('vitepad')} ${pc.yellow('editor')} kept existing ${skipped.map((name) => pc.cyan(name)).join(pc.gray(', '))}`)\n console.log(` ${pc.gray('VSCode will use the existing local package versions for editor types.')}`)\n }\n}\n\nasync function linkEditorPackage(nodeModulesDir: string, link: PackageLink): Promise<'linked' | 'skipped'> {\n const source = await fs.realpath(link.source)\n const target = path.join(nodeModulesDir, link.name)\n await fs.mkdir(path.dirname(target), { recursive: true })\n\n const existing = await fs.lstat(target).catch(() => null)\n if (existing) {\n if (existing.isSymbolicLink()) {\n const current = await fs.realpath(target).catch(() => null)\n if (current === source) return 'skipped'\n }\n return 'skipped'\n }\n\n await fs.symlink(source, target, 'dir')\n return 'linked'\n}\n\nfunction uniquePaths(paths: string[]): string[] {\n return [...new Set(paths.map((item) => normalizePath(path.resolve(item))))]\n}\n\nfunction styleTemplate(sourceDirs: string[], classTokens: string[]): string {\n return [\n '@import \"tailwindcss\";',\n ...sourceDirs.map((sourceDir) => `@source ${JSON.stringify(sourceDir)};`),\n classTokens.length ? `/* vitepad safelist: ${classTokens.join(' ')} */` : '',\n '',\n ].join('\\n')\n}\n\nasync function collectClassTokens(entry: string): Promise<string[]> {\n const visited = new Set<string>()\n const tokens = new Set<string>()\n await collectFileClassTokens(entry, visited, tokens)\n return [...tokens].sort()\n}\n\nasync function collectFileClassTokens(file: string, visited: Set<string>, tokens: Set<string>): Promise<void> {\n const resolved = path.resolve(file)\n if (visited.has(resolved)) return\n visited.add(resolved)\n\n const source = await fs.readFile(resolved, 'utf8').catch(() => '')\n for (const match of source.matchAll(/\\b(?:class|className)\\s*=\\s*(?:\"([^\"]+)\"|'([^']+)'|{`([^`]+)`})/g)) {\n const value = match[1] || match[2] || match[3] || ''\n for (const token of value.split(/\\s+/)) {\n if (token && !/[${}]/.test(token)) tokens.add(token)\n }\n }\n\n for (const specifier of localImportSpecifiers(source)) {\n const imported = await resolveLocalImport(resolved, specifier)\n if (imported) {\n await collectFileClassTokens(imported, visited, tokens)\n }\n }\n}\n\nfunction localImportSpecifiers(source: string): string[] {\n const specifiers = new Set<string>()\n for (const match of source.matchAll(/\\bimport\\s+(?:[^'\"]+?\\s+from\\s+)?['\"]([^'\"]+)['\"]/g)) {\n if (isLocalSpecifier(match[1])) specifiers.add(match[1])\n }\n for (const match of source.matchAll(/\\bexport\\s+[^'\"]+?\\s+from\\s+['\"]([^'\"]+)['\"]/g)) {\n if (isLocalSpecifier(match[1])) specifiers.add(match[1])\n }\n return [...specifiers]\n}\n\nfunction isLocalSpecifier(specifier: string): boolean {\n return specifier.startsWith('./') || specifier.startsWith('../')\n}\n\nasync function resolveLocalImport(importer: string, specifier: string): Promise<string | undefined> {\n const base = path.resolve(path.dirname(importer), specifier)\n const candidates = [\n base,\n ...['.ts', '.tsx', '.js', '.jsx', '.vue', '.svelte'].map((ext) => `${base}${ext}`),\n ...['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.vue', 'index.svelte'].map((file) => path.join(base, file)),\n ]\n\n for (const candidate of candidates) {\n const stat = await fs.stat(candidate).catch(() => null)\n if (stat?.isFile()) return candidate\n }\n return undefined\n}\n\nfunction htmlTemplate(): string {\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>vitepad</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/main.js\"></script>\n </body>\n</html>\n`\n}\n\nfunction mainTemplate(input: { entry: string, mode: EntryMode, framework: FrameworkName }): string {\n const { entry, mode, framework } = input\n const importPath = `/@fs/${normalizePath(entry)}`\n if (mode === 'main') {\n return `import './style.css'\\nimport ${JSON.stringify(importPath)}\\n`\n }\n\n switch (framework) {\n case 'react':\n return `import './style.css'\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport App from ${JSON.stringify(importPath)}\n\ncreateRoot(document.getElementById('root')).render(React.createElement(App))\n`\n case 'preact':\n return `import './style.css'\nimport { h, render } from 'preact'\nimport App from ${JSON.stringify(importPath)}\n\nrender(h(App, null), document.getElementById('root'))\n`\n case 'solid':\n return `import './style.css'\nimport { render } from 'solid-js/web'\nimport App from ${JSON.stringify(importPath)}\n\nrender(() => App({}), document.getElementById('root'))\n`\n case 'vue':\n return `import './style.css'\nimport { createApp } from 'vue'\nimport App from ${JSON.stringify(importPath)}\n\ncreateApp(App).mount('#root')\n`\n case 'svelte':\n return `import './style.css'\nimport { mount } from 'svelte'\nimport App from ${JSON.stringify(importPath)}\n\nconst target = document.getElementById('root')\nconst app = mount(App, { target })\nexport default app\n`\n case 'vanilla':\n throw new Error('Vanilla entries cannot be used as component entries.')\n }\n}\n\nasync function loadUserConfig(configFile: string | undefined): Promise<UserConfig> {\n if (!configFile) return {}\n const resolved = path.resolve(process.cwd(), configFile)\n const configModule = await import(pathToFileURL(resolved).href)\n return configModule.default ?? configModule\n}\n\nasync function loadPlugins(framework: ResolvedFramework): Promise<PluginOption[]> {\n const [{ default: tailwindcss }, frameworkPlugins] = await Promise.all([\n import('@tailwindcss/vite'),\n loadFrameworkPlugins(framework),\n ])\n const plugins: PluginOption[] = []\n appendPlugin(plugins, tailwindcss())\n plugins.push(...frameworkPlugins)\n return plugins\n}\n\nfunction printReady(input: { entry: string, mode: EntryMode, framework: ResolvedFramework, urls?: { local: string[], network: string[] } | null }): void {\n const { entry, framework, urls } = input\n const frameworkLabel = `${framework.name}@${framework.version}`\n\n console.log(`${pc.cyan('vitepad')} ${pc.green('ready')} ${pc.green(frameworkLabel)}`)\n console.log(` ${pc.gray('entry')} ${pc.gray(entry)}`)\n if (framework.cacheDir) {\n console.log(` ${pc.gray('cache')} ${pc.gray(framework.cacheDir)}`)\n }\n printUrls(urls)\n}\n\nfunction printUrls(urls: { local: string[], network: string[] } | null | undefined): void {\n if (!urls) return\n for (const url of urls.local) {\n console.log(` ${pc.green('➜')} ${pc.bold('Local:')} ${pc.bold(url)}`)\n }\n for (const url of urls.network) {\n console.log(` ${pc.green('➜')} ${pc.bold('Network:')} ${pc.bold(url)}`)\n }\n}\n\nfunction createVitepadLogger(): Logger {\n const logger = createLogger('info')\n const info = logger.info.bind(logger)\n return {\n ...logger,\n info(message: string, options?: LogOptions) {\n if (isNoisyViteInfo(message)) return\n info(message, options)\n },\n }\n}\n\nfunction isNoisyViteInfo(message: string): boolean {\n return /\\[vite\\]\\s+\\(client\\)\\s+(hmr update|page reload)\\b/.test(stripAnsi(message))\n}\n\nfunction stripAnsi(value: string): string {\n return value.replace(/\\x1B\\[[0-?]*[ -/]*[@-~]/g, '')\n}\n\nfunction helpText(prefix?: string): string {\n return `${prefix ? `${prefix}\\n\\n` : ''}Usage:\n vitepad <entry> [options]\n\nEntries:\n .js, .ts Treated as main entry files.\n .jsx, .tsx, .vue, .svelte Treated as App component files.\n\nOptions:\n -f, --framework <name> auto, react, preact, solid, vue, svelte, vanilla\n Version specs are supported, e.g. react@18, vue@3.4.\n --force-install Reinstall the selected framework cache.\n -p, --port <number> Dev server port. Default: 8000\n --host <host> Dev server host. Default: 0.0.0.0\n --no-open Do not open the browser automatically.\n --editor Link framework packages into local node_modules for editor type resolution.\n -c, --config <file> Merge an extra Vite config file.\n -h, --help Show help.\n`\n}\n","#!/usr/bin/env node\nimport { run } from './runtime/index.js'\n\nrun(process.argv.slice(2)).catch((error) => {\n console.error(error instanceof Error ? error.message : error)\n process.exit(1)\n})\n"]}