@buding0904/vitepad 0.3.1 → 0.3.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/README.md +4 -6
- package/dist/cli-runtime.cjs +818 -0
- package/dist/cli-runtime.cjs.map +1 -0
- package/dist/cli-runtime.d.ts +3 -0
- package/dist/cli-runtime.d.ts.map +1 -0
- package/dist/cli-runtime.js +807 -0
- package/dist/cli-runtime.js.map +1 -0
- package/dist/cli.cjs +33 -765
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +32 -761
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +104 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +102 -70
- package/dist/index.js.map +1 -1
- package/dist/runtime/index.d.ts +2 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +1 -1
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 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/cli.ts"],"names":[],"mappings":";;;;;AAIA,eAAsB,cAAA,GAAkC;AACtD,EAAA,MAAM,WAAA,GAAc,MAAM,eAAA,EAAgB;AAC1C,EAAA,IAAI,OAAO,WAAA,CAAY,OAAA,KAAY,QAAA,SAAiB,WAAA,CAAY,OAAA;AAChE,EAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AACrE;AAEA,eAAe,eAAA,GAAoD;AACjE,EAAA,IAAI,UAAU,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAEzD,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,cAAc,CAAA;AACzD,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,QAAA,CAAS,iBAAiB,MAAM,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAC1E,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACrC,MAAA,IAAI,WAAA,CAAY,IAAA,KAAS,qBAAA,EAAuB,OAAO,WAAA;AAAA,IACzD;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AACnC,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,IAC1D;AACA,IAAA,OAAA,GAAU,MAAA;AAAA,EACZ;AACF;;;ACxBA,IAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACjC,IAAM,YAAA,GAAe,kBAAA;AAErB,IAAI,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,EAAA,cAAA,EAAe,CACZ,IAAA,CAAK,CAAC,OAAA,KAAY;AACjB,IAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,EACrB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,IAAA,OAAA,CAAQ,KAAA,CAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC5D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AACL,CAAA,MAAO;AACL,EAAA,OAAO,YAAA,CAAA,CACJ,MAAM,WAAW,CAAA;AACtB;AAEA,SAAS,YAAY,KAAA,EAAsB;AACzC,EAAA,OAAA,CAAQ,KAAA,CAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC5D,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB","file":"cli.js","sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nexport async function packageVersion(): Promise<string> {\n const packageJson = await readPackageJson()\n if (typeof packageJson.version === 'string') return packageJson.version\n throw new Error('Failed to read vitepad version from package.json.')\n}\n\nasync function readPackageJson(): Promise<Record<string, unknown>> {\n let current = path.dirname(fileURLToPath(import.meta.url))\n\n while (true) {\n const packageJsonPath = path.join(current, 'package.json')\n const source = await fs.readFile(packageJsonPath, 'utf8').catch(() => null)\n if (source) {\n const packageJson = JSON.parse(source) as Record<string, unknown>\n if (packageJson.name === '@buding0904/vitepad') return packageJson\n }\n\n const parent = path.dirname(current)\n if (parent === current) {\n throw new Error('Failed to locate vitepad package.json.')\n }\n current = parent\n }\n}\n","#!/usr/bin/env node\nimport { packageVersion } from './version.js'\n\nconst argv = process.argv.slice(2)\nconst runtimeEntry = './cli-runtime.js'\n\nif (argv.includes('-v') || argv.includes('--version')) {\n packageVersion()\n .then((version) => {\n console.log(version)\n })\n .catch((error) => {\n console.error(error instanceof Error ? error.message : error)\n process.exit(1)\n })\n} else {\n import(runtimeEntry)\n .catch(handleError)\n}\n\nfunction handleError(error: unknown): void {\n console.error(error instanceof Error ? error.message : error)\n process.exit(1)\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var fs3 = require('fs/promises');
|
|
4
4
|
var os = require('os');
|
|
5
|
-
var
|
|
5
|
+
var path3 = require('path');
|
|
6
6
|
var process2 = require('process');
|
|
7
7
|
var url = require('url');
|
|
8
8
|
var vite = require('vite');
|
|
@@ -13,15 +13,15 @@ var module$1 = require('module');
|
|
|
13
13
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
14
14
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var fs3__default = /*#__PURE__*/_interopDefault(fs3);
|
|
17
17
|
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
18
|
-
var
|
|
18
|
+
var path3__default = /*#__PURE__*/_interopDefault(path3);
|
|
19
19
|
var process2__default = /*#__PURE__*/_interopDefault(process2);
|
|
20
20
|
var pc2__default = /*#__PURE__*/_interopDefault(pc2);
|
|
21
21
|
|
|
22
22
|
// src/runtime/index.ts
|
|
23
|
-
var packageRoot =
|
|
24
|
-
var requireFromPackage = module$1.createRequire(
|
|
23
|
+
var packageRoot = path3__default.default.resolve(url.fileURLToPath(new URL("..", (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))));
|
|
24
|
+
var requireFromPackage = module$1.createRequire(path3__default.default.join(packageRoot, "package.json"));
|
|
25
25
|
var linkedPeerPackages = ["vite"];
|
|
26
26
|
var log = {
|
|
27
27
|
framework(requested, resolved) {
|
|
@@ -52,14 +52,11 @@ async function resolveFramework(spec, options) {
|
|
|
52
52
|
}
|
|
53
53
|
const resolved = await resolveFrameworkPackages(spec.name, spec.version);
|
|
54
54
|
const cacheDir = frameworkCacheDir(spec.name, resolved.version);
|
|
55
|
-
const nodeModules =
|
|
55
|
+
const nodeModules = path3__default.default.join(cacheDir, "node_modules");
|
|
56
56
|
const installed = await isInstalled(cacheDir, resolved.packages);
|
|
57
|
-
if (options.forceInstall && await pathExists(cacheDir)) {
|
|
58
|
-
await fs2__default.default.rm(cacheDir, { recursive: true, force: true });
|
|
59
|
-
}
|
|
60
57
|
log.framework(`${spec.name}@${spec.version}`, `${spec.name}@${resolved.version}`);
|
|
61
58
|
const cacheStatus = options.forceInstall ? "miss" : installed ? "hit" : "miss";
|
|
62
|
-
if (
|
|
59
|
+
if (!installed) {
|
|
63
60
|
log.install(resolved.packages);
|
|
64
61
|
await installFrameworkCache(cacheDir, resolved.packages);
|
|
65
62
|
}
|
|
@@ -271,33 +268,33 @@ function packageLinks(nodeModulesOrPackageNames, maybePackageNames) {
|
|
|
271
268
|
const packageNames = maybePackageNames ?? [];
|
|
272
269
|
return packageNames.map((packageName) => ({
|
|
273
270
|
name: packageName,
|
|
274
|
-
source:
|
|
271
|
+
source: path3__default.default.join(nodeModules, packageName)
|
|
275
272
|
}));
|
|
276
273
|
}
|
|
277
274
|
function resolveInstalledPackageDir(packageName) {
|
|
278
275
|
const packageJson = requireFromPackage.resolve(`${packageName}/package.json`);
|
|
279
|
-
return
|
|
276
|
+
return path3__default.default.dirname(packageJson);
|
|
280
277
|
}
|
|
281
278
|
function frameworkCacheDir(framework, version) {
|
|
282
|
-
const base = process.env.VITEPAD_CACHE_DIR || (process.env.XDG_CACHE_HOME ?
|
|
283
|
-
return
|
|
279
|
+
const base = process.env.VITEPAD_CACHE_DIR || (process.env.XDG_CACHE_HOME ? path3__default.default.join(process.env.XDG_CACHE_HOME, "vitepad") : path3__default.default.join(os__default.default.homedir(), ".cache", "vitepad"));
|
|
280
|
+
return path3__default.default.join(base, "frameworks", `${framework}-${sanitizeCacheKey(version)}`);
|
|
284
281
|
}
|
|
285
282
|
function sanitizeCacheKey(value) {
|
|
286
283
|
return value.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
287
284
|
}
|
|
288
285
|
async function isInstalled(cacheDir, packages) {
|
|
289
|
-
if (!await pathExists(
|
|
286
|
+
if (!await pathExists(path3__default.default.join(cacheDir, "node_modules"))) return false;
|
|
290
287
|
for (const pkg of packages) {
|
|
291
288
|
const { name } = splitPackageSpec(pkg);
|
|
292
|
-
if (!await pathExists(
|
|
289
|
+
if (!await pathExists(path3__default.default.join(cacheDir, "node_modules", name))) {
|
|
293
290
|
return false;
|
|
294
291
|
}
|
|
295
292
|
}
|
|
296
293
|
return true;
|
|
297
294
|
}
|
|
298
295
|
async function installFrameworkCache(cacheDir, packages) {
|
|
299
|
-
await
|
|
300
|
-
await
|
|
296
|
+
await fs3__default.default.mkdir(cacheDir, { recursive: true });
|
|
297
|
+
await fs3__default.default.writeFile(path3__default.default.join(cacheDir, "package.json"), JSON.stringify({
|
|
301
298
|
private: true,
|
|
302
299
|
type: "module",
|
|
303
300
|
dependencies: Object.fromEntries(packages.map((pkg) => packageToDependency(pkg)))
|
|
@@ -337,12 +334,12 @@ ${output.trim()}`));
|
|
|
337
334
|
});
|
|
338
335
|
}
|
|
339
336
|
async function linkPeerPackages(cacheDir) {
|
|
340
|
-
await
|
|
337
|
+
await fs3__default.default.mkdir(path3__default.default.join(cacheDir, "node_modules"), { recursive: true });
|
|
341
338
|
for (const packageName of linkedPeerPackages) {
|
|
342
339
|
try {
|
|
343
340
|
await linkPackage({
|
|
344
341
|
source: resolveInstalledPackageDir(packageName),
|
|
345
|
-
target:
|
|
342
|
+
target: path3__default.default.join(cacheDir, "node_modules", packageName)
|
|
346
343
|
});
|
|
347
344
|
} catch (error) {
|
|
348
345
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -352,16 +349,16 @@ ${message}`);
|
|
|
352
349
|
}
|
|
353
350
|
}
|
|
354
351
|
async function linkPackage(input) {
|
|
355
|
-
const source = await
|
|
356
|
-
const existing = await
|
|
352
|
+
const source = await fs3__default.default.realpath(input.source);
|
|
353
|
+
const existing = await fs3__default.default.lstat(input.target).catch(() => null);
|
|
357
354
|
if (existing) {
|
|
358
355
|
if (existing.isSymbolicLink()) {
|
|
359
|
-
const current = await
|
|
356
|
+
const current = await fs3__default.default.realpath(input.target).catch(() => null);
|
|
360
357
|
if (current === source) return;
|
|
361
358
|
}
|
|
362
|
-
await
|
|
359
|
+
await fs3__default.default.rm(input.target, { recursive: true, force: true });
|
|
363
360
|
}
|
|
364
|
-
await
|
|
361
|
+
await fs3__default.default.symlink(source, input.target, "dir");
|
|
365
362
|
}
|
|
366
363
|
function createProgress(label) {
|
|
367
364
|
const width = 18;
|
|
@@ -397,16 +394,37 @@ function splitPackageSpec(spec) {
|
|
|
397
394
|
return { name: spec.slice(0, at), version: spec.slice(at + 1) };
|
|
398
395
|
}
|
|
399
396
|
async function importCachePackage(cacheDir, packageName) {
|
|
400
|
-
const requireFromCache = module$1.createRequire(
|
|
397
|
+
const requireFromCache = module$1.createRequire(path3__default.default.join(cacheDir, "package.json"));
|
|
401
398
|
const resolved = requireFromCache.resolve(packageName);
|
|
402
399
|
return import(url.pathToFileURL(resolved).href);
|
|
403
400
|
}
|
|
404
401
|
async function pathExists(file) {
|
|
405
|
-
return
|
|
402
|
+
return fs3__default.default.access(file).then(() => true, () => false);
|
|
403
|
+
}
|
|
404
|
+
async function packageVersion() {
|
|
405
|
+
const packageJson = await readPackageJson();
|
|
406
|
+
if (typeof packageJson.version === "string") return packageJson.version;
|
|
407
|
+
throw new Error("Failed to read vitepad version from package.json.");
|
|
408
|
+
}
|
|
409
|
+
async function readPackageJson() {
|
|
410
|
+
let current = path3__default.default.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))));
|
|
411
|
+
while (true) {
|
|
412
|
+
const packageJsonPath = path3__default.default.join(current, "package.json");
|
|
413
|
+
const source = await fs3__default.default.readFile(packageJsonPath, "utf8").catch(() => null);
|
|
414
|
+
if (source) {
|
|
415
|
+
const packageJson = JSON.parse(source);
|
|
416
|
+
if (packageJson.name === "@buding0904/vitepad") return packageJson;
|
|
417
|
+
}
|
|
418
|
+
const parent = path3__default.default.dirname(current);
|
|
419
|
+
if (parent === current) {
|
|
420
|
+
throw new Error("Failed to locate vitepad package.json.");
|
|
421
|
+
}
|
|
422
|
+
current = parent;
|
|
423
|
+
}
|
|
406
424
|
}
|
|
407
425
|
|
|
408
426
|
// src/runtime/index.ts
|
|
409
|
-
var rootDir =
|
|
427
|
+
var rootDir = path3__default.default.resolve(url.fileURLToPath(new URL("..", (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))));
|
|
410
428
|
var supportedComponentExts = /* @__PURE__ */ new Set([".jsx", ".tsx", ".vue", ".svelte"]);
|
|
411
429
|
var supportedMainExts = /* @__PURE__ */ new Set([".js", ".mjs", ".cjs", ".ts", ".mts", ".cts"]);
|
|
412
430
|
var frameworkValues = /* @__PURE__ */ new Set(["auto", "react", "preact", "solid", "vue", "svelte", "vanilla"]);
|
|
@@ -416,17 +434,21 @@ async function run(argv) {
|
|
|
416
434
|
console.log(helpText());
|
|
417
435
|
return;
|
|
418
436
|
}
|
|
437
|
+
if (options.version) {
|
|
438
|
+
console.log(await packageVersion());
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
419
441
|
if (!options.entry) {
|
|
420
442
|
throw new Error(helpText("Missing entry file."));
|
|
421
443
|
}
|
|
422
|
-
const entry =
|
|
423
|
-
const stat = await
|
|
444
|
+
const entry = path3__default.default.resolve(process2__default.default.cwd(), options.entry);
|
|
445
|
+
const stat = await fs3__default.default.stat(entry).catch(() => null);
|
|
424
446
|
if (!stat?.isFile()) {
|
|
425
447
|
throw new Error(`Entry file does not exist: ${entry}`);
|
|
426
448
|
}
|
|
427
|
-
const extension =
|
|
449
|
+
const extension = path3__default.default.extname(entry).toLowerCase();
|
|
428
450
|
const mode = inferMode(extension);
|
|
429
|
-
const source = await
|
|
451
|
+
const source = await fs3__default.default.readFile(entry, "utf8");
|
|
430
452
|
const framework = inferFramework({
|
|
431
453
|
extension,
|
|
432
454
|
source,
|
|
@@ -434,8 +456,8 @@ async function run(argv) {
|
|
|
434
456
|
version: options.frameworkVersion
|
|
435
457
|
});
|
|
436
458
|
validateCombination({ mode, framework: framework.name, extension });
|
|
437
|
-
const resolvedFramework = await resolveFramework(framework, { forceInstall:
|
|
438
|
-
await setupEditorPackages(
|
|
459
|
+
const resolvedFramework = await resolveFramework(framework, { forceInstall: false });
|
|
460
|
+
await setupEditorPackages(path3__default.default.dirname(entry), resolvedFramework.editorPackageLinks);
|
|
439
461
|
const workspace = await createWorkspace({
|
|
440
462
|
entry,
|
|
441
463
|
mode,
|
|
@@ -449,7 +471,8 @@ async function run(argv) {
|
|
|
449
471
|
server: {
|
|
450
472
|
host: options.host,
|
|
451
473
|
port: options.port,
|
|
452
|
-
|
|
474
|
+
strictPort: options.strictPort,
|
|
475
|
+
open: false,
|
|
453
476
|
watch: {
|
|
454
477
|
ignored: (file) => vite.normalizePath(file).startsWith(`${vite.normalizePath(workspace)}/`)
|
|
455
478
|
},
|
|
@@ -457,7 +480,7 @@ async function run(argv) {
|
|
|
457
480
|
allow: [
|
|
458
481
|
rootDir,
|
|
459
482
|
process2__default.default.cwd(),
|
|
460
|
-
|
|
483
|
+
path3__default.default.dirname(entry),
|
|
461
484
|
workspace,
|
|
462
485
|
...resolvedFramework.cacheDir ? [resolvedFramework.cacheDir] : []
|
|
463
486
|
]
|
|
@@ -469,13 +492,13 @@ async function run(argv) {
|
|
|
469
492
|
...resolvedFramework.aliases,
|
|
470
493
|
{
|
|
471
494
|
find: "@",
|
|
472
|
-
replacement:
|
|
495
|
+
replacement: path3__default.default.dirname(entry)
|
|
473
496
|
}
|
|
474
497
|
],
|
|
475
498
|
dedupe: frameworkDedupe(resolvedFramework.name)
|
|
476
499
|
},
|
|
477
500
|
optimizeDeps: {
|
|
478
|
-
entries: [
|
|
501
|
+
entries: [path3__default.default.join(workspace, "src/main.js")],
|
|
479
502
|
include: frameworkOptimizeDeps(resolvedFramework.name)
|
|
480
503
|
},
|
|
481
504
|
customLogger: createVitepadLogger()
|
|
@@ -497,22 +520,24 @@ function parseArgs(argv) {
|
|
|
497
520
|
const options = {
|
|
498
521
|
framework: "auto",
|
|
499
522
|
frameworkVersion: "latest",
|
|
500
|
-
forceInstall: false,
|
|
501
523
|
port: 8e3,
|
|
524
|
+
strictPort: false,
|
|
502
525
|
host: "0.0.0.0",
|
|
503
|
-
|
|
504
|
-
|
|
526
|
+
help: false,
|
|
527
|
+
version: false
|
|
505
528
|
};
|
|
506
529
|
for (let index = 0; index < argv.length; index += 1) {
|
|
507
530
|
const arg = argv[index];
|
|
508
531
|
if (arg === "-h" || arg === "--help") {
|
|
509
532
|
options.help = true;
|
|
533
|
+
} else if (arg === "-v" || arg === "--version") {
|
|
534
|
+
options.version = true;
|
|
510
535
|
} else if (arg === "--framework" || arg === "-f") {
|
|
511
536
|
Object.assign(options, parseFramework(readValue(argv, ++index, arg)));
|
|
512
537
|
} else if (arg.startsWith("--framework=")) {
|
|
513
538
|
Object.assign(options, parseFramework(arg.slice("--framework=".length)));
|
|
514
|
-
} else if (arg === "--
|
|
515
|
-
options.
|
|
539
|
+
} else if (arg === "--strictPort") {
|
|
540
|
+
options.strictPort = true;
|
|
516
541
|
} else if (arg === "--port" || arg === "-p") {
|
|
517
542
|
options.port = Number(readValue(argv, ++index, arg));
|
|
518
543
|
} else if (arg.startsWith("--port=")) {
|
|
@@ -521,10 +546,6 @@ function parseArgs(argv) {
|
|
|
521
546
|
options.host = readValue(argv, ++index, arg);
|
|
522
547
|
} else if (arg.startsWith("--host=")) {
|
|
523
548
|
options.host = arg.slice("--host=".length);
|
|
524
|
-
} else if (arg === "--no-open") {
|
|
525
|
-
options.open = false;
|
|
526
|
-
} else if (arg === "--open") {
|
|
527
|
-
options.open = "/";
|
|
528
549
|
} else if (arg === "--config" || arg === "-c") {
|
|
529
550
|
options.config = readValue(argv, ++index, arg);
|
|
530
551
|
} else if (arg.startsWith("--config=")) {
|
|
@@ -588,31 +609,29 @@ function validateCombination(input) {
|
|
|
588
609
|
}
|
|
589
610
|
}
|
|
590
611
|
async function createWorkspace(input) {
|
|
591
|
-
const workspace = await
|
|
592
|
-
const srcDir =
|
|
593
|
-
const nodeModulesDir =
|
|
594
|
-
await
|
|
595
|
-
await
|
|
612
|
+
const workspace = await fs3__default.default.mkdtemp(path3__default.default.join(await fs3__default.default.realpath(os__default.default.tmpdir()), "vitepad-"));
|
|
613
|
+
const srcDir = path3__default.default.join(workspace, "src");
|
|
614
|
+
const nodeModulesDir = path3__default.default.join(workspace, "node_modules");
|
|
615
|
+
await fs3__default.default.mkdir(srcDir, { recursive: true });
|
|
616
|
+
await fs3__default.default.mkdir(nodeModulesDir, { recursive: true });
|
|
596
617
|
await Promise.all([
|
|
597
|
-
|
|
598
|
-
|
|
618
|
+
fs3__default.default.writeFile(path3__default.default.join(workspace, "index.html"), htmlTemplate()),
|
|
619
|
+
fs3__default.default.writeFile(path3__default.default.join(srcDir, "main.js"), mainTemplate(input)),
|
|
599
620
|
...input.packageLinks.map((link) => linkWorkspacePackage(nodeModulesDir, link))
|
|
600
621
|
]);
|
|
601
622
|
return workspace;
|
|
602
623
|
}
|
|
603
624
|
async function linkWorkspacePackage(nodeModulesDir, link) {
|
|
604
|
-
const source = await
|
|
605
|
-
const target =
|
|
606
|
-
await
|
|
607
|
-
await
|
|
625
|
+
const source = await fs3__default.default.realpath(link.source);
|
|
626
|
+
const target = path3__default.default.join(nodeModulesDir, link.name);
|
|
627
|
+
await fs3__default.default.mkdir(path3__default.default.dirname(target), { recursive: true });
|
|
628
|
+
await fs3__default.default.symlink(source, target, "dir");
|
|
608
629
|
}
|
|
609
630
|
async function setupEditorPackages(projectDir, links) {
|
|
610
631
|
if (links.length === 0) return;
|
|
611
|
-
const nodeModulesDir = path2__default.default.join(projectDir, "node_modules");
|
|
612
|
-
await fs2__default.default.mkdir(nodeModulesDir, { recursive: true });
|
|
613
632
|
const linked = [];
|
|
614
633
|
for (const link of links) {
|
|
615
|
-
const result = await linkEditorPackage(
|
|
634
|
+
const result = await linkEditorPackage(projectDir, link);
|
|
616
635
|
if (result === "linked") {
|
|
617
636
|
linked.push(link.name);
|
|
618
637
|
}
|
|
@@ -621,21 +640,35 @@ async function setupEditorPackages(projectDir, links) {
|
|
|
621
640
|
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(", "))}`);
|
|
622
641
|
}
|
|
623
642
|
}
|
|
624
|
-
async function linkEditorPackage(
|
|
625
|
-
const source = await
|
|
626
|
-
const
|
|
627
|
-
|
|
628
|
-
const
|
|
643
|
+
async function linkEditorPackage(projectDir, link) {
|
|
644
|
+
const source = await fs3__default.default.realpath(link.source);
|
|
645
|
+
const existingResolvablePackage = await findResolvablePackage(projectDir, link.name);
|
|
646
|
+
if (existingResolvablePackage) return "skipped";
|
|
647
|
+
const nodeModulesDir = path3__default.default.join(projectDir, "node_modules");
|
|
648
|
+
const target = path3__default.default.join(nodeModulesDir, link.name);
|
|
649
|
+
await fs3__default.default.mkdir(path3__default.default.dirname(target), { recursive: true });
|
|
650
|
+
const existing = await fs3__default.default.lstat(target).catch(() => null);
|
|
629
651
|
if (existing) {
|
|
630
652
|
if (existing.isSymbolicLink()) {
|
|
631
|
-
const current = await
|
|
653
|
+
const current = await fs3__default.default.realpath(target).catch(() => null);
|
|
632
654
|
if (current === source) return "skipped";
|
|
633
655
|
}
|
|
634
656
|
return "skipped";
|
|
635
657
|
}
|
|
636
|
-
await
|
|
658
|
+
await fs3__default.default.symlink(source, target, "dir");
|
|
637
659
|
return "linked";
|
|
638
660
|
}
|
|
661
|
+
async function findResolvablePackage(fromDir, packageName) {
|
|
662
|
+
let current = path3__default.default.resolve(fromDir);
|
|
663
|
+
while (true) {
|
|
664
|
+
const candidate = path3__default.default.join(current, "node_modules", packageName);
|
|
665
|
+
const existing = await fs3__default.default.lstat(candidate).catch(() => null);
|
|
666
|
+
if (existing) return candidate;
|
|
667
|
+
const parent = path3__default.default.dirname(current);
|
|
668
|
+
if (parent === current) return null;
|
|
669
|
+
current = parent;
|
|
670
|
+
}
|
|
671
|
+
}
|
|
639
672
|
function htmlTemplate() {
|
|
640
673
|
return `<!doctype html>
|
|
641
674
|
<html lang="en">
|
|
@@ -704,7 +737,7 @@ export default app
|
|
|
704
737
|
}
|
|
705
738
|
async function loadUserConfig(configFile) {
|
|
706
739
|
if (!configFile) return {};
|
|
707
|
-
const resolved =
|
|
740
|
+
const resolved = path3__default.default.resolve(process2__default.default.cwd(), configFile);
|
|
708
741
|
const configModule = await import(url.pathToFileURL(resolved).href);
|
|
709
742
|
return configModule.default ?? configModule;
|
|
710
743
|
}
|
|
@@ -768,10 +801,9 @@ Entries:
|
|
|
768
801
|
Options:
|
|
769
802
|
-f, --framework <name> auto, react, preact, solid, vue, svelte, vanilla
|
|
770
803
|
Version specs are supported, e.g. react@18, vue@3.4.
|
|
771
|
-
--force-install Reinstall the selected framework cache.
|
|
772
804
|
-p, --port <number> Dev server port. Default: 8000
|
|
805
|
+
--strictPort Exit if the configured port is already in use.
|
|
773
806
|
--host <host> Dev server host. Default: 0.0.0.0
|
|
774
|
-
--no-open Do not open the browser automatically.
|
|
775
807
|
-c, --config <file> Merge an extra Vite config file.
|
|
776
808
|
-h, --help Show help.
|
|
777
809
|
`;
|