@buding0904/vitepad 0.2.2 → 0.3.1
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/README.md +9 -13
- package/dist/cli.cjs +13 -90
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +13 -90
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +13 -90
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +13 -90
- package/dist/index.js.map +1 -1
- package/dist/runtime/index.d.ts +0 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<a href="https://www.npmjs.com/package/@buding0904/vitepad"><img src="https://img.shields.io/npm/v/@buding0904/vitepad.svg" alt="npm version" /></a>
|
|
8
8
|
<a href="./LICENSE"><img src="https://img.shields.io/npm/l/@buding0904/vitepad.svg" alt="license" /></a>
|
|
9
9
|
<img src="https://img.shields.io/badge/frameworks-React%20%7C%20Preact%20%7C%20Solid%20%7C%20Vue%20%7C%20Svelte-blue" alt="frameworks" />
|
|
10
|
-
<img src="https://img.shields.io/badge/
|
|
10
|
+
<img src="https://img.shields.io/badge/UnoCSS-enabled-22c55e" alt="UnoCSS" />
|
|
11
11
|
</p>
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
`vitepad` creates a temporary Vite playground for one entry file. Use it to preview a component, test a small main entry, or compare the same file across different framework versions without creating a project or changing the current project's dependencies.
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
UnoCSS is enabled by default. Framework packages are resolved to exact npm versions, downloaded on demand, and cached under `~/.cache/vitepad/frameworks`. No ESLint, Biome, Husky, or formatting pipeline is included.
|
|
19
19
|
|
|
20
20
|
## Features
|
|
21
21
|
|
|
@@ -42,10 +42,10 @@ Tailwind CSS is enabled by default. Framework packages are resolved to exact npm
|
|
|
42
42
|
|
|
43
43
|
**Styling and environment**
|
|
44
44
|
|
|
45
|
-
-
|
|
46
|
-
- User project `node_modules` is not modified by default
|
|
45
|
+
- UnoCSS is available by default through `unocss/vite` with `presetUno`
|
|
47
46
|
- Framework dependencies are exposed through the temporary Vite workspace
|
|
48
|
-
-
|
|
47
|
+
- Missing framework packages are linked into local `node_modules` for editor type resolution
|
|
48
|
+
- Existing local packages are left untouched, and `package.json` is not modified
|
|
49
49
|
- No linting or formatting toolchain is installed
|
|
50
50
|
|
|
51
51
|
## Install
|
|
@@ -114,7 +114,6 @@ vitepad <entry> [options]
|
|
|
114
114
|
| `-p, --port <number>` | Dev server port (default: `8000`) |
|
|
115
115
|
| `--host <host>` | Dev server host (default: `0.0.0.0`) |
|
|
116
116
|
| `--no-open` | Do not open the browser automatically |
|
|
117
|
-
| `--editor` | Link framework packages into local `node_modules` for editor type resolution |
|
|
118
117
|
| `-c, --config <file>` | Merge an extra Vite config file |
|
|
119
118
|
| `-h, --help` | Show help |
|
|
120
119
|
|
|
@@ -123,20 +122,17 @@ Examples:
|
|
|
123
122
|
```bash
|
|
124
123
|
vitepad ./App.tsx --framework react@18 --port 3000
|
|
125
124
|
vitepad ./App.vue --host 127.0.0.1 --no-open
|
|
126
|
-
vitepad ./App.tsx --framework react@19 --editor
|
|
127
125
|
vitepad ./App.svelte --config ./vite.extra.js
|
|
128
126
|
vitepad ./App.tsx --framework react@latest --force-install
|
|
129
127
|
```
|
|
130
128
|
|
|
131
129
|
## Editor Types
|
|
132
130
|
|
|
133
|
-
|
|
131
|
+
VSCode's TypeScript server resolves imports and JSX types from the opened file's directory tree, not from vitepad's temporary Vite workspace. To keep editor diagnostics aligned with the file you run, vitepad creates lightweight symlinks for missing framework packages inside the entry file directory's `node_modules`.
|
|
134
132
|
|
|
135
|
-
|
|
136
|
-
vitepad ./App.tsx --framework react --editor
|
|
137
|
-
```
|
|
133
|
+
For React, vitepad links `react`, `react-dom`, `@types/react`, and `@types/react-dom` when they are missing. Existing packages are left untouched, so a project that already has React installed keeps using its local version for editor types. Runtime dependencies still come from vitepad's cache, and vitepad does not write to `package.json`.
|
|
138
134
|
|
|
139
|
-
|
|
135
|
+
If multiple vitepad processes run React entries in the same directory with different React versions, runtime behavior is still isolated per process. Editor links are shared by that directory, so whichever version is linked first is the version VSCode sees; later runs keep existing local packages instead of replacing them.
|
|
140
136
|
|
|
141
137
|
## Entry Rules
|
|
142
138
|
|
|
@@ -171,7 +167,7 @@ Example cache directory:
|
|
|
171
167
|
~/.cache/vitepad/frameworks/react-19.2.6
|
|
172
168
|
```
|
|
173
169
|
|
|
174
|
-
If a framework version is not cached, vitepad downloads it and prints install progress. The user's
|
|
170
|
+
If a framework version is not cached, vitepad downloads it and prints install progress. The user's `package.json` is left untouched. Missing framework packages may be symlinked into local `node_modules` so editors can resolve imports and JSX types.
|
|
175
171
|
|
|
176
172
|
## Local Development
|
|
177
173
|
|
package/dist/cli.cjs
CHANGED
|
@@ -46,7 +46,7 @@ async function resolveFramework(spec, options) {
|
|
|
46
46
|
requested: "vanilla",
|
|
47
47
|
cacheStatus: "local",
|
|
48
48
|
aliases: [],
|
|
49
|
-
packageLinks: packageLinks(["
|
|
49
|
+
packageLinks: packageLinks(["unocss"]),
|
|
50
50
|
editorPackageLinks: []
|
|
51
51
|
};
|
|
52
52
|
}
|
|
@@ -72,7 +72,7 @@ async function resolveFramework(spec, options) {
|
|
|
72
72
|
cacheDir,
|
|
73
73
|
aliases: [],
|
|
74
74
|
packageLinks: [
|
|
75
|
-
...packageLinks(["
|
|
75
|
+
...packageLinks(["unocss"]),
|
|
76
76
|
...packageLinks(nodeModules, frameworkRuntimePackages(spec.name))
|
|
77
77
|
],
|
|
78
78
|
editorPackageLinks: packageLinks(nodeModules, frameworkEditorPackages(spec.name))
|
|
@@ -435,16 +435,11 @@ async function run(argv) {
|
|
|
435
435
|
});
|
|
436
436
|
validateCombination({ mode, framework: framework.name, extension });
|
|
437
437
|
const resolvedFramework = await resolveFramework(framework, { forceInstall: options.forceInstall });
|
|
438
|
-
|
|
439
|
-
await setupEditorPackages(process2__default.default.cwd(), resolvedFramework.editorPackageLinks);
|
|
440
|
-
}
|
|
441
|
-
const classTokens = await collectClassTokens(entry);
|
|
438
|
+
await setupEditorPackages(path2__default.default.dirname(entry), resolvedFramework.editorPackageLinks);
|
|
442
439
|
const workspace = await createWorkspace({
|
|
443
440
|
entry,
|
|
444
441
|
mode,
|
|
445
442
|
framework: resolvedFramework.name,
|
|
446
|
-
sourceDirs: uniquePaths([process2__default.default.cwd(), path2__default.default.dirname(entry)]),
|
|
447
|
-
classTokens,
|
|
448
443
|
packageLinks: resolvedFramework.packageLinks
|
|
449
444
|
});
|
|
450
445
|
const config = await loadUserConfig(options.config);
|
|
@@ -506,7 +501,6 @@ function parseArgs(argv) {
|
|
|
506
501
|
port: 8e3,
|
|
507
502
|
host: "0.0.0.0",
|
|
508
503
|
open: "/",
|
|
509
|
-
editor: false,
|
|
510
504
|
help: false
|
|
511
505
|
};
|
|
512
506
|
for (let index = 0; index < argv.length; index += 1) {
|
|
@@ -531,8 +525,6 @@ function parseArgs(argv) {
|
|
|
531
525
|
options.open = false;
|
|
532
526
|
} else if (arg === "--open") {
|
|
533
527
|
options.open = "/";
|
|
534
|
-
} else if (arg === "--editor") {
|
|
535
|
-
options.editor = true;
|
|
536
528
|
} else if (arg === "--config" || arg === "-c") {
|
|
537
529
|
options.config = readValue(argv, ++index, arg);
|
|
538
530
|
} else if (arg.startsWith("--config=")) {
|
|
@@ -603,7 +595,6 @@ async function createWorkspace(input) {
|
|
|
603
595
|
await fs2__default.default.mkdir(nodeModulesDir, { recursive: true });
|
|
604
596
|
await Promise.all([
|
|
605
597
|
fs2__default.default.writeFile(path2__default.default.join(workspace, "index.html"), htmlTemplate()),
|
|
606
|
-
fs2__default.default.writeFile(path2__default.default.join(srcDir, "style.css"), styleTemplate(input.sourceDirs, input.classTokens)),
|
|
607
598
|
fs2__default.default.writeFile(path2__default.default.join(srcDir, "main.js"), mainTemplate(input)),
|
|
608
599
|
...input.packageLinks.map((link) => linkWorkspacePackage(nodeModulesDir, link))
|
|
609
600
|
]);
|
|
@@ -620,22 +611,15 @@ async function setupEditorPackages(projectDir, links) {
|
|
|
620
611
|
const nodeModulesDir = path2__default.default.join(projectDir, "node_modules");
|
|
621
612
|
await fs2__default.default.mkdir(nodeModulesDir, { recursive: true });
|
|
622
613
|
const linked = [];
|
|
623
|
-
const skipped = [];
|
|
624
614
|
for (const link of links) {
|
|
625
615
|
const result = await linkEditorPackage(nodeModulesDir, link);
|
|
626
616
|
if (result === "linked") {
|
|
627
617
|
linked.push(link.name);
|
|
628
|
-
} else {
|
|
629
|
-
skipped.push(link.name);
|
|
630
618
|
}
|
|
631
619
|
}
|
|
632
620
|
if (linked.length > 0) {
|
|
633
621
|
console.log(`${pc2__default.default.cyan("vitepad")} ${pc2__default.default.green("editor")} linked ${linked.map((name) => pc2__default.default.cyan(name)).join(pc2__default.default.gray(", "))}`);
|
|
634
622
|
}
|
|
635
|
-
if (skipped.length > 0) {
|
|
636
|
-
console.log(`${pc2__default.default.cyan("vitepad")} ${pc2__default.default.yellow("editor")} kept existing ${skipped.map((name) => pc2__default.default.cyan(name)).join(pc2__default.default.gray(", "))}`);
|
|
637
|
-
console.log(` ${pc2__default.default.gray("VSCode will use the existing local package versions for editor types.")}`);
|
|
638
|
-
}
|
|
639
623
|
}
|
|
640
624
|
async function linkEditorPackage(nodeModulesDir, link) {
|
|
641
625
|
const source = await fs2__default.default.realpath(link.source);
|
|
@@ -652,67 +636,6 @@ async function linkEditorPackage(nodeModulesDir, link) {
|
|
|
652
636
|
await fs2__default.default.symlink(source, target, "dir");
|
|
653
637
|
return "linked";
|
|
654
638
|
}
|
|
655
|
-
function uniquePaths(paths) {
|
|
656
|
-
return [...new Set(paths.map((item) => vite.normalizePath(path2__default.default.resolve(item))))];
|
|
657
|
-
}
|
|
658
|
-
function styleTemplate(sourceDirs, classTokens) {
|
|
659
|
-
return [
|
|
660
|
-
'@import "tailwindcss";',
|
|
661
|
-
...sourceDirs.map((sourceDir) => `@source ${JSON.stringify(sourceDir)};`),
|
|
662
|
-
classTokens.length ? `/* vitepad safelist: ${classTokens.join(" ")} */` : "",
|
|
663
|
-
""
|
|
664
|
-
].join("\n");
|
|
665
|
-
}
|
|
666
|
-
async function collectClassTokens(entry) {
|
|
667
|
-
const visited = /* @__PURE__ */ new Set();
|
|
668
|
-
const tokens = /* @__PURE__ */ new Set();
|
|
669
|
-
await collectFileClassTokens(entry, visited, tokens);
|
|
670
|
-
return [...tokens].sort();
|
|
671
|
-
}
|
|
672
|
-
async function collectFileClassTokens(file, visited, tokens) {
|
|
673
|
-
const resolved = path2__default.default.resolve(file);
|
|
674
|
-
if (visited.has(resolved)) return;
|
|
675
|
-
visited.add(resolved);
|
|
676
|
-
const source = await fs2__default.default.readFile(resolved, "utf8").catch(() => "");
|
|
677
|
-
for (const match of source.matchAll(/\b(?:class|className)\s*=\s*(?:"([^"]+)"|'([^']+)'|{`([^`]+)`})/g)) {
|
|
678
|
-
const value = match[1] || match[2] || match[3] || "";
|
|
679
|
-
for (const token of value.split(/\s+/)) {
|
|
680
|
-
if (token && !/[${}]/.test(token)) tokens.add(token);
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
for (const specifier of localImportSpecifiers(source)) {
|
|
684
|
-
const imported = await resolveLocalImport(resolved, specifier);
|
|
685
|
-
if (imported) {
|
|
686
|
-
await collectFileClassTokens(imported, visited, tokens);
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
}
|
|
690
|
-
function localImportSpecifiers(source) {
|
|
691
|
-
const specifiers = /* @__PURE__ */ new Set();
|
|
692
|
-
for (const match of source.matchAll(/\bimport\s+(?:[^'"]+?\s+from\s+)?['"]([^'"]+)['"]/g)) {
|
|
693
|
-
if (isLocalSpecifier(match[1])) specifiers.add(match[1]);
|
|
694
|
-
}
|
|
695
|
-
for (const match of source.matchAll(/\bexport\s+[^'"]+?\s+from\s+['"]([^'"]+)['"]/g)) {
|
|
696
|
-
if (isLocalSpecifier(match[1])) specifiers.add(match[1]);
|
|
697
|
-
}
|
|
698
|
-
return [...specifiers];
|
|
699
|
-
}
|
|
700
|
-
function isLocalSpecifier(specifier) {
|
|
701
|
-
return specifier.startsWith("./") || specifier.startsWith("../");
|
|
702
|
-
}
|
|
703
|
-
async function resolveLocalImport(importer, specifier) {
|
|
704
|
-
const base = path2__default.default.resolve(path2__default.default.dirname(importer), specifier);
|
|
705
|
-
const candidates = [
|
|
706
|
-
base,
|
|
707
|
-
...[".ts", ".tsx", ".js", ".jsx", ".vue", ".svelte"].map((ext) => `${base}${ext}`),
|
|
708
|
-
...["index.ts", "index.tsx", "index.js", "index.jsx", "index.vue", "index.svelte"].map((file) => path2__default.default.join(base, file))
|
|
709
|
-
];
|
|
710
|
-
for (const candidate of candidates) {
|
|
711
|
-
const stat = await fs2__default.default.stat(candidate).catch(() => null);
|
|
712
|
-
if (stat?.isFile()) return candidate;
|
|
713
|
-
}
|
|
714
|
-
return void 0;
|
|
715
|
-
}
|
|
716
639
|
function htmlTemplate() {
|
|
717
640
|
return `<!doctype html>
|
|
718
641
|
<html lang="en">
|
|
@@ -732,13 +655,13 @@ function mainTemplate(input) {
|
|
|
732
655
|
const { entry, mode, framework } = input;
|
|
733
656
|
const importPath = `/@fs/${vite.normalizePath(entry)}`;
|
|
734
657
|
if (mode === "main") {
|
|
735
|
-
return `import '
|
|
658
|
+
return `import 'virtual:uno.css'
|
|
736
659
|
import ${JSON.stringify(importPath)}
|
|
737
660
|
`;
|
|
738
661
|
}
|
|
739
662
|
switch (framework) {
|
|
740
663
|
case "react":
|
|
741
|
-
return `import '
|
|
664
|
+
return `import 'virtual:uno.css'
|
|
742
665
|
import React from 'react'
|
|
743
666
|
import { createRoot } from 'react-dom/client'
|
|
744
667
|
import App from ${JSON.stringify(importPath)}
|
|
@@ -746,28 +669,28 @@ import App from ${JSON.stringify(importPath)}
|
|
|
746
669
|
createRoot(document.getElementById('root')).render(React.createElement(App))
|
|
747
670
|
`;
|
|
748
671
|
case "preact":
|
|
749
|
-
return `import '
|
|
672
|
+
return `import 'virtual:uno.css'
|
|
750
673
|
import { h, render } from 'preact'
|
|
751
674
|
import App from ${JSON.stringify(importPath)}
|
|
752
675
|
|
|
753
676
|
render(h(App, null), document.getElementById('root'))
|
|
754
677
|
`;
|
|
755
678
|
case "solid":
|
|
756
|
-
return `import '
|
|
679
|
+
return `import 'virtual:uno.css'
|
|
757
680
|
import { render } from 'solid-js/web'
|
|
758
681
|
import App from ${JSON.stringify(importPath)}
|
|
759
682
|
|
|
760
683
|
render(() => App({}), document.getElementById('root'))
|
|
761
684
|
`;
|
|
762
685
|
case "vue":
|
|
763
|
-
return `import '
|
|
686
|
+
return `import 'virtual:uno.css'
|
|
764
687
|
import { createApp } from 'vue'
|
|
765
688
|
import App from ${JSON.stringify(importPath)}
|
|
766
689
|
|
|
767
690
|
createApp(App).mount('#root')
|
|
768
691
|
`;
|
|
769
692
|
case "svelte":
|
|
770
|
-
return `import '
|
|
693
|
+
return `import 'virtual:uno.css'
|
|
771
694
|
import { mount } from 'svelte'
|
|
772
695
|
import App from ${JSON.stringify(importPath)}
|
|
773
696
|
|
|
@@ -786,12 +709,13 @@ async function loadUserConfig(configFile) {
|
|
|
786
709
|
return configModule.default ?? configModule;
|
|
787
710
|
}
|
|
788
711
|
async function loadPlugins(framework) {
|
|
789
|
-
const [{ default:
|
|
790
|
-
import('
|
|
712
|
+
const [{ default: unocss }, { presetUno }, frameworkPlugins] = await Promise.all([
|
|
713
|
+
import('unocss/vite'),
|
|
714
|
+
import('unocss'),
|
|
791
715
|
loadFrameworkPlugins(framework)
|
|
792
716
|
]);
|
|
793
717
|
const plugins = [];
|
|
794
|
-
appendPlugin(plugins,
|
|
718
|
+
appendPlugin(plugins, unocss({ presets: [presetUno()] }));
|
|
795
719
|
plugins.push(...frameworkPlugins);
|
|
796
720
|
return plugins;
|
|
797
721
|
}
|
|
@@ -848,7 +772,6 @@ Options:
|
|
|
848
772
|
-p, --port <number> Dev server port. Default: 8000
|
|
849
773
|
--host <host> Dev server host. Default: 0.0.0.0
|
|
850
774
|
--no-open Do not open the browser automatically.
|
|
851
|
-
--editor Link framework packages into local node_modules for editor type resolution.
|
|
852
775
|
-c, --config <file> Merge an extra Vite config file.
|
|
853
776
|
-h, --help Show help.
|
|
854
777
|
`;
|
package/dist/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/frameworks.ts","../src/runtime/index.ts","../src/cli.ts"],"names":["path","fileURLToPath","createRequire","pc","fs","spawn","os","pathToFileURL","process","createServer","mergeConfig","normalizePath","createLogger"],"mappings":"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","file":"cli.cjs","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"]}
|
|
1
|
+
{"version":3,"sources":["../src/runtime/frameworks.ts","../src/runtime/index.ts","../src/cli.ts"],"names":["path","fileURLToPath","createRequire","pc","fs","spawn","os","pathToFileURL","process","createServer","mergeConfig","normalizePath","createLogger"],"mappings":"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","file":"cli.cjs","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(['unocss']),\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(['unocss']),\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 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 await setupEditorPackages(path.dirname(entry), resolvedFramework.editorPackageLinks)\n const workspace = await createWorkspace({\n entry,\n mode,\n framework: resolvedFramework.name,\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, 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, '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 for (const link of links) {\n const result = await linkEditorPackage(nodeModulesDir, link)\n if (result === 'linked') {\n linked.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}\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 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 'virtual:uno.css'\\nimport ${JSON.stringify(importPath)}\\n`\n }\n\n switch (framework) {\n case 'react':\n return `import 'virtual:uno.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 'virtual:uno.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 'virtual:uno.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 'virtual:uno.css'\nimport { createApp } from 'vue'\nimport App from ${JSON.stringify(importPath)}\n\ncreateApp(App).mount('#root')\n`\n case 'svelte':\n return `import 'virtual:uno.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: unocss }, { presetUno }, frameworkPlugins] = await Promise.all([\n import('unocss/vite'),\n import('unocss'),\n loadFrameworkPlugins(framework),\n ])\n const plugins: PluginOption[] = []\n appendPlugin(plugins, unocss({ presets: [presetUno()] }))\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"]}
|