mirror of
https://github.com/unovue/shadcn-vue.git
synced 2026-09-14 19:59:38 +08:00
feat(cli): replace hardcoded scaffolding with giget-based template downloads
- Rewrite create-project.ts to use giget for downloading templates from the repo instead of shelling out to nuxi/create-vite or inline file generation - Add giget dependency, support SHADCN_TEMPLATE_DIR env var for local dev - Update template choices: Nuxt 4, Vite, Astro, Laravel (drop vite-router) - Update Nuxt template: use @tailwindcss/vite + shadcn-nuxt, Nuxt 4 app/ structure - Update init.ts validation messages and help text - Update tests for new giget-based flow - Remove stray console.log from fetcher.ts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -88,6 +88,7 @@
|
||||
"fs-extra": "^11.3.2",
|
||||
"fuzzysort": "^3.1.0",
|
||||
"get-tsconfig": "^4.13.0",
|
||||
"giget": "catalog:",
|
||||
"magic-string": "^0.30.21",
|
||||
"nypm": "^0.6.2",
|
||||
"ofetch": "^1.5.1",
|
||||
|
||||
+168
-139
@@ -128,7 +128,7 @@ export const initOptionsSchema = z.object({
|
||||
return true
|
||||
},
|
||||
{
|
||||
message: 'Invalid template. Please use \'nuxt\', \'vite\', or \'vite-router\'.',
|
||||
message: 'Invalid template. Please use \'nuxt\', \'vite\', \'astro\', or \'laravel\'.',
|
||||
},
|
||||
),
|
||||
base: z
|
||||
@@ -217,7 +217,7 @@ export const init = new Command()
|
||||
)
|
||||
.option(
|
||||
'-t, --template <template>',
|
||||
'the template to use. (nuxt, vite, vite-router)',
|
||||
'the template to use. (nuxt, vite, astro, laravel)',
|
||||
)
|
||||
.option(
|
||||
'--base <base>',
|
||||
@@ -281,6 +281,7 @@ export const init = new Command()
|
||||
opts.iconLibrary = opts.iconLibrary ?? preset.iconLibrary
|
||||
opts.font = opts.font ?? preset.font
|
||||
opts.baseColor = opts.baseColor ?? preset.baseColor
|
||||
opts.yes = true
|
||||
}
|
||||
|
||||
// Apply defaults when --defaults flag is set.
|
||||
@@ -422,7 +423,7 @@ export async function runInit(
|
||||
|
||||
let config = projectConfig
|
||||
? await promptForMinimalConfig(projectConfig, options)
|
||||
: await promptForConfig(await getConfig(options.cwd))
|
||||
: await promptForConfig(await getConfig(options.cwd), options)
|
||||
|
||||
if (!options.yes) {
|
||||
const { proceed } = await prompts({
|
||||
@@ -516,151 +517,179 @@ export async function runInit(
|
||||
return fullConfig
|
||||
}
|
||||
|
||||
async function promptForConfig(defaultConfig: Config | null = null) {
|
||||
const [styles, baseColors] = await Promise.all([
|
||||
getRegistryStyles(),
|
||||
getRegistryBaseColors(),
|
||||
])
|
||||
async function promptForConfig(defaultConfig: Config | null = null, opts?: z.infer<typeof initOptionsSchema>) {
|
||||
let base = opts?.base ?? 'reka'
|
||||
let style = opts?.style ?? 'vega'
|
||||
let font = opts?.font ?? 'inter'
|
||||
let iconLibrary = opts?.iconLibrary ?? 'lucide'
|
||||
let baseColor = opts?.baseColor ?? 'neutral'
|
||||
let typescript = defaultConfig?.typescript ?? true
|
||||
let tailwindCss = defaultConfig?.tailwind.css ?? DEFAULT_TAILWIND_CSS
|
||||
let tailwindCssVariables = opts?.cssVariables ?? defaultConfig?.tailwind.cssVariables ?? true
|
||||
let tailwindPrefix = defaultConfig?.tailwind.prefix ?? ''
|
||||
let tailwindConfig = defaultConfig?.tailwind.config ?? DEFAULT_TAILWIND_CONFIG
|
||||
let componentsAlias = defaultConfig?.aliases.components ?? DEFAULT_COMPONENTS
|
||||
let utilsAlias = defaultConfig?.aliases.utils ?? DEFAULT_UTILS
|
||||
|
||||
logger.info('')
|
||||
const options = await prompts([
|
||||
{
|
||||
type: 'toggle',
|
||||
name: 'typescript',
|
||||
message: `Would you like to use ${highlighter.info(
|
||||
'TypeScript',
|
||||
)} (recommended)?`,
|
||||
initial: defaultConfig?.typescript ?? true,
|
||||
active: 'yes',
|
||||
inactive: 'no',
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'base',
|
||||
message: `Which ${highlighter.info('component library')} would you like to use?`,
|
||||
choices: BASES.map(base => ({
|
||||
title: base.label,
|
||||
value: base.name,
|
||||
description: base.description,
|
||||
})),
|
||||
initial: 0,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'style',
|
||||
message: `Which ${highlighter.info('visual style')} would you like to use?`,
|
||||
choices: [
|
||||
...STYLES.map(style => ({
|
||||
title: style.label,
|
||||
value: style.name,
|
||||
description: style.description,
|
||||
if (opts?.preset === undefined && !opts?.defaults) {
|
||||
const [styles, baseColors] = await Promise.all([
|
||||
getRegistryStyles(),
|
||||
getRegistryBaseColors(),
|
||||
])
|
||||
|
||||
logger.info('')
|
||||
const options = await prompts([
|
||||
{
|
||||
type: 'toggle',
|
||||
name: 'typescript',
|
||||
message: `Would you like to use ${highlighter.info(
|
||||
'TypeScript',
|
||||
)} (recommended)?`,
|
||||
initial: typescript,
|
||||
active: 'yes',
|
||||
inactive: 'no',
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'base',
|
||||
message: `Which ${highlighter.info('component library')} would you like to use?`,
|
||||
choices: BASES.map(b => ({
|
||||
title: b.label,
|
||||
value: b.name,
|
||||
description: b.description,
|
||||
})),
|
||||
...styles.filter(s => !STYLES.find(st => st.name === s.name)).map(style => ({
|
||||
title: style.label,
|
||||
value: style.name,
|
||||
initial: 0,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'style',
|
||||
message: `Which ${highlighter.info('visual style')} would you like to use?`,
|
||||
choices: [
|
||||
...STYLES.map(s => ({
|
||||
title: s.label,
|
||||
value: s.name,
|
||||
description: s.description,
|
||||
})),
|
||||
...styles.filter(s => !STYLES.find(st => st.name === s.name)).map(s => ({
|
||||
title: s.label,
|
||||
value: s.name,
|
||||
})),
|
||||
],
|
||||
initial: 0,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'iconLibrary',
|
||||
message: `Which ${highlighter.info('icon library')} would you like to use?`,
|
||||
choices: ICON_LIBRARIES.map(lib => ({
|
||||
title: lib.label,
|
||||
value: lib.name,
|
||||
})),
|
||||
],
|
||||
initial: 0,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'iconLibrary',
|
||||
message: `Which ${highlighter.info('icon library')} would you like to use?`,
|
||||
choices: ICON_LIBRARIES.map(lib => ({
|
||||
title: lib.label,
|
||||
value: lib.name,
|
||||
})),
|
||||
initial: 0,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'font',
|
||||
message: `Which ${highlighter.info('font')} would you like to use?`,
|
||||
choices: FONTS.map(font => ({
|
||||
title: font.label,
|
||||
value: font.name,
|
||||
})),
|
||||
initial: 0,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'tailwindBaseColor',
|
||||
message: `Which color would you like to use as the ${highlighter.info(
|
||||
'base color',
|
||||
)}?`,
|
||||
choices: baseColors.map(color => ({
|
||||
title: color.label,
|
||||
value: color.name,
|
||||
})),
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'tailwindCss',
|
||||
message: `Where is your ${highlighter.info('global CSS')} file?`,
|
||||
initial: defaultConfig?.tailwind.css ?? DEFAULT_TAILWIND_CSS,
|
||||
},
|
||||
{
|
||||
type: 'toggle',
|
||||
name: 'tailwindCssVariables',
|
||||
message: `Would you like to use ${highlighter.info(
|
||||
'CSS variables',
|
||||
)} for theming?`,
|
||||
initial: defaultConfig?.tailwind.cssVariables ?? true,
|
||||
active: 'yes',
|
||||
inactive: 'no',
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'tailwindPrefix',
|
||||
message: `Are you using a custom ${highlighter.info(
|
||||
'tailwind prefix eg. tw-',
|
||||
)}? (Leave blank if not)`,
|
||||
initial: '',
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'tailwindConfig',
|
||||
message: `Where is your ${highlighter.info(
|
||||
'tailwind.config.js',
|
||||
)} located?`,
|
||||
initial: defaultConfig?.tailwind.config ?? DEFAULT_TAILWIND_CONFIG,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'components',
|
||||
message: `Configure the import alias for ${highlighter.info(
|
||||
'components',
|
||||
)}:`,
|
||||
initial: defaultConfig?.aliases.components ?? DEFAULT_COMPONENTS,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'utils',
|
||||
message: `Configure the import alias for ${highlighter.info('utils')}:`,
|
||||
initial: defaultConfig?.aliases.utils ?? DEFAULT_UTILS,
|
||||
},
|
||||
])
|
||||
initial: 0,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'font',
|
||||
message: `Which ${highlighter.info('font')} would you like to use?`,
|
||||
choices: FONTS.map(f => ({
|
||||
title: f.label,
|
||||
value: f.name,
|
||||
})),
|
||||
initial: 0,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'tailwindBaseColor',
|
||||
message: `Which color would you like to use as the ${highlighter.info(
|
||||
'base color',
|
||||
)}?`,
|
||||
choices: baseColors.map(color => ({
|
||||
title: color.label,
|
||||
value: color.name,
|
||||
})),
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'tailwindCss',
|
||||
message: `Where is your ${highlighter.info('global CSS')} file?`,
|
||||
initial: tailwindCss,
|
||||
},
|
||||
{
|
||||
type: 'toggle',
|
||||
name: 'tailwindCssVariables',
|
||||
message: `Would you like to use ${highlighter.info(
|
||||
'CSS variables',
|
||||
)} for theming?`,
|
||||
initial: tailwindCssVariables,
|
||||
active: 'yes',
|
||||
inactive: 'no',
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'tailwindPrefix',
|
||||
message: `Are you using a custom ${highlighter.info(
|
||||
'tailwind prefix eg. tw-',
|
||||
)}? (Leave blank if not)`,
|
||||
initial: '',
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'tailwindConfig',
|
||||
message: `Where is your ${highlighter.info(
|
||||
'tailwind.config.js',
|
||||
)} located?`,
|
||||
initial: tailwindConfig,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'components',
|
||||
message: `Configure the import alias for ${highlighter.info(
|
||||
'components',
|
||||
)}:`,
|
||||
initial: componentsAlias,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'utils',
|
||||
message: `Configure the import alias for ${highlighter.info('utils')}:`,
|
||||
initial: utilsAlias,
|
||||
},
|
||||
])
|
||||
|
||||
base = options.base ?? base
|
||||
style = options.style ?? style
|
||||
font = options.font ?? font
|
||||
iconLibrary = options.iconLibrary ?? iconLibrary
|
||||
baseColor = options.tailwindBaseColor ?? baseColor
|
||||
typescript = options.typescript ?? typescript
|
||||
tailwindCss = options.tailwindCss ?? tailwindCss
|
||||
tailwindCssVariables = options.tailwindCssVariables ?? tailwindCssVariables
|
||||
tailwindPrefix = options.tailwindPrefix ?? tailwindPrefix
|
||||
tailwindConfig = options.tailwindConfig ?? tailwindConfig
|
||||
componentsAlias = options.components ?? componentsAlias
|
||||
utilsAlias = options.utils ?? utilsAlias
|
||||
}
|
||||
|
||||
return rawConfigSchema.parse({
|
||||
$schema: 'https://shadcn-vue.com/schema.json',
|
||||
base: options.base,
|
||||
style: options.style,
|
||||
font: options.font,
|
||||
iconLibrary: options.iconLibrary,
|
||||
base,
|
||||
style,
|
||||
font,
|
||||
iconLibrary,
|
||||
tailwind: {
|
||||
config: options.tailwindConfig,
|
||||
css: options.tailwindCss,
|
||||
baseColor: options.tailwindBaseColor,
|
||||
cssVariables: options.tailwindCssVariables,
|
||||
prefix: options.tailwindPrefix,
|
||||
config: tailwindConfig,
|
||||
css: tailwindCss,
|
||||
baseColor,
|
||||
cssVariables: tailwindCssVariables,
|
||||
prefix: tailwindPrefix,
|
||||
},
|
||||
typescript: options.typescript,
|
||||
typescript,
|
||||
aliases: {
|
||||
utils: options.utils,
|
||||
components: options.components,
|
||||
utils: utilsAlias,
|
||||
components: componentsAlias,
|
||||
// TODO: fix this.
|
||||
lib: options.components.replace(/\/components$/, '/lib'),
|
||||
composables: options.components.replace(/\/components$/, '/composables'),
|
||||
lib: componentsAlias.replace(/\/components$/, '/lib'),
|
||||
composables: componentsAlias.replace(/\/components$/, '/composables'),
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -676,7 +705,7 @@ async function promptForMinimalConfig(
|
||||
let baseColor = opts.baseColor
|
||||
let cssVariables = defaultConfig.tailwind.cssVariables
|
||||
|
||||
if (!opts.defaults) {
|
||||
if (opts.preset === undefined && !opts.defaults) {
|
||||
const [styles, baseColors, tailwindVersion] = await Promise.all([
|
||||
getRegistryStyles(),
|
||||
getRegistryBaseColors(),
|
||||
|
||||
@@ -489,7 +489,7 @@ async function resolveRegistryDependencies(
|
||||
)
|
||||
|
||||
const style = config.resolvedPaths?.cwd
|
||||
? await getTargetStyleFromConfig(config.resolvedPaths.cwd, config.style)
|
||||
? resolveRegistryStyle(await getTargetStyleFromConfig(config.resolvedPaths.cwd, config.style))
|
||||
: resolveRegistryStyle(config.style)
|
||||
|
||||
const urls = registryNames.map(name =>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { z } from 'zod'
|
||||
import type { initOptionsSchema } from '@/src/commands/init'
|
||||
import fs from 'fs-extra'
|
||||
import { downloadTemplate } from 'giget'
|
||||
import { detectPackageManager } from 'nypm'
|
||||
import path from 'pathe'
|
||||
import prompts from 'prompts'
|
||||
@@ -11,13 +12,16 @@ import { logger } from '@/src/utils/logger'
|
||||
import { spinner } from '@/src/utils/spinner'
|
||||
|
||||
export const TEMPLATES = {
|
||||
'nuxt': 'nuxt',
|
||||
'vite': 'vite',
|
||||
'vite-router': 'vite-router',
|
||||
nuxt: 'nuxt',
|
||||
vite: 'vite',
|
||||
astro: 'astro',
|
||||
laravel: 'laravel',
|
||||
} as const
|
||||
|
||||
export type TemplateType = keyof typeof TEMPLATES
|
||||
|
||||
const REPO = 'github:unovue/shadcn-vue'
|
||||
|
||||
export async function createProject(
|
||||
options: Pick<
|
||||
z.infer<typeof initOptionsSchema>,
|
||||
@@ -39,9 +43,10 @@ export async function createProject(
|
||||
options.cwd,
|
||||
)} does not contain a package.json file.\n Would you like to start a new project?`,
|
||||
choices: [
|
||||
{ title: 'Nuxt', value: 'nuxt' },
|
||||
{ title: 'Nuxt 4', value: 'nuxt' },
|
||||
{ title: 'Vite', value: 'vite' },
|
||||
{ title: 'Vite + Vue Router', value: 'vite-router' },
|
||||
{ title: 'Astro', value: 'astro' },
|
||||
{ title: 'Laravel', value: 'laravel' },
|
||||
],
|
||||
initial: 0,
|
||||
},
|
||||
@@ -92,25 +97,48 @@ export async function createProject(
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
if (template === TEMPLATES.nuxt) {
|
||||
await createNuxtProject(projectPath, {
|
||||
cwd: options.cwd,
|
||||
packageManager: packageManager?.name || 'npm',
|
||||
})
|
||||
}
|
||||
const createSpinner = spinner(
|
||||
`Creating a new ${template} project. This may take a few minutes.`,
|
||||
).start()
|
||||
|
||||
if (template === TEMPLATES.vite) {
|
||||
await createViteProject(projectPath, {
|
||||
cwd: options.cwd,
|
||||
packageManager: packageManager?.name || 'npm',
|
||||
})
|
||||
}
|
||||
try {
|
||||
// Download template
|
||||
const templateDir = process.env.SHADCN_TEMPLATE_DIR
|
||||
if (templateDir) {
|
||||
await fs.copy(path.join(templateDir, template), projectPath)
|
||||
}
|
||||
else {
|
||||
await downloadTemplate(`${REPO}/templates/${template}`, {
|
||||
dir: projectPath,
|
||||
})
|
||||
}
|
||||
|
||||
if (template === TEMPLATES['vite-router']) {
|
||||
await createViteRouterProject(projectPath, {
|
||||
cwd: options.cwd,
|
||||
packageManager: packageManager?.name || 'npm',
|
||||
// Update package.json name
|
||||
const pkgPath = path.join(projectPath, 'package.json')
|
||||
const pkg = await fs.readJson(pkgPath)
|
||||
pkg.name = projectName
|
||||
await fs.writeJson(pkgPath, pkg, { spaces: 2 })
|
||||
|
||||
// Initialize git repository
|
||||
await x('git', ['init'], {
|
||||
nodeOptions: {
|
||||
cwd: projectPath,
|
||||
},
|
||||
})
|
||||
|
||||
// Install dependencies
|
||||
await x(packageManager?.name || 'npm', ['install'], {
|
||||
throwOnError: true,
|
||||
nodeOptions: {
|
||||
cwd: projectPath,
|
||||
},
|
||||
})
|
||||
|
||||
createSpinner?.succeed(`Created a new ${template} project.`)
|
||||
}
|
||||
catch (error) {
|
||||
createSpinner?.fail(`Something went wrong creating a new ${template} project.`)
|
||||
handleError(error)
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -119,293 +147,3 @@ export async function createProject(
|
||||
template,
|
||||
}
|
||||
}
|
||||
|
||||
async function createNuxtProject(
|
||||
projectPath: string,
|
||||
options: {
|
||||
cwd: string
|
||||
packageManager: string
|
||||
},
|
||||
) {
|
||||
const createSpinner = spinner(
|
||||
`Creating a new Nuxt project. This may take a few minutes.`,
|
||||
).start()
|
||||
|
||||
try {
|
||||
// Use nuxi to create a new Nuxt project
|
||||
const args = [
|
||||
'nuxi@latest',
|
||||
'init',
|
||||
projectPath,
|
||||
'--packageManager',
|
||||
options.packageManager,
|
||||
'--no-install',
|
||||
]
|
||||
|
||||
await x('npx', args, {
|
||||
nodeOptions: {
|
||||
cwd: options.cwd,
|
||||
},
|
||||
})
|
||||
|
||||
// Install dependencies
|
||||
await x(options.packageManager, ['install'], {
|
||||
nodeOptions: {
|
||||
cwd: projectPath,
|
||||
},
|
||||
})
|
||||
|
||||
createSpinner?.succeed('Created a new Nuxt project.')
|
||||
}
|
||||
catch (error) {
|
||||
createSpinner?.fail('Something went wrong creating a new Nuxt project.')
|
||||
handleError(error)
|
||||
}
|
||||
}
|
||||
|
||||
async function createViteProject(
|
||||
projectPath: string,
|
||||
options: {
|
||||
cwd: string
|
||||
packageManager: string
|
||||
},
|
||||
) {
|
||||
const createSpinner = spinner(
|
||||
`Creating a new Vite + Vue project. This may take a few minutes.`,
|
||||
).start()
|
||||
|
||||
try {
|
||||
// Use create-vite to create a new Vue project
|
||||
const projectName = path.basename(projectPath)
|
||||
|
||||
const args = [
|
||||
'create-vite@latest',
|
||||
projectName,
|
||||
'--template',
|
||||
'vue-ts',
|
||||
]
|
||||
|
||||
await x('npx', args, {
|
||||
nodeOptions: {
|
||||
cwd: options.cwd,
|
||||
},
|
||||
})
|
||||
|
||||
// Install dependencies
|
||||
await x(options.packageManager, ['install'], {
|
||||
nodeOptions: {
|
||||
cwd: projectPath,
|
||||
},
|
||||
})
|
||||
|
||||
createSpinner?.succeed('Created a new Vite + Vue project.')
|
||||
}
|
||||
catch (error) {
|
||||
createSpinner?.fail('Something went wrong creating a new Vite + Vue project.')
|
||||
handleError(error)
|
||||
}
|
||||
}
|
||||
|
||||
async function createViteRouterProject(
|
||||
projectPath: string,
|
||||
options: {
|
||||
cwd: string
|
||||
packageManager: string
|
||||
},
|
||||
) {
|
||||
const createSpinner = spinner(
|
||||
`Creating a new Vite + Vue Router project. This may take a few minutes.`,
|
||||
).start()
|
||||
|
||||
try {
|
||||
const projectName = path.basename(projectPath)
|
||||
|
||||
// Create project directory
|
||||
await fs.ensureDir(projectPath)
|
||||
|
||||
// Initialize package.json
|
||||
const packageJson = {
|
||||
name: projectName,
|
||||
private: true,
|
||||
version: '0.0.0',
|
||||
type: 'module',
|
||||
scripts: {
|
||||
dev: 'vite',
|
||||
build: 'vue-tsc -b && vite build',
|
||||
preview: 'vite preview',
|
||||
},
|
||||
dependencies: {
|
||||
'vue': '^3.5.13',
|
||||
'vue-router': '^4.5.0',
|
||||
},
|
||||
devDependencies: {
|
||||
'@types/node': '^22.10.0',
|
||||
'@vitejs/plugin-vue': '^5.2.1',
|
||||
'typescript': '~5.7.2',
|
||||
'vite': '^6.0.0',
|
||||
'vue-tsc': '^2.2.0',
|
||||
},
|
||||
}
|
||||
|
||||
await fs.writeJson(path.join(projectPath, 'package.json'), packageJson, { spaces: 2 })
|
||||
|
||||
// Create vite.config.ts
|
||||
const viteConfig = `import { fileURLToPath, URL } from 'node:url'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import { defineConfig } from 'vite'
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
||||
},
|
||||
},
|
||||
})
|
||||
`
|
||||
await fs.writeFile(path.join(projectPath, 'vite.config.ts'), viteConfig)
|
||||
|
||||
// Create tsconfig.json
|
||||
const tsConfig = {
|
||||
compilerOptions: {
|
||||
target: 'ES2022',
|
||||
useDefineForClassFields: true,
|
||||
module: 'ESNext',
|
||||
lib: ['ES2022', 'DOM', 'DOM.Iterable'],
|
||||
skipLibCheck: true,
|
||||
moduleResolution: 'bundler',
|
||||
allowImportingTsExtensions: true,
|
||||
resolveJsonModule: true,
|
||||
isolatedModules: true,
|
||||
noEmit: true,
|
||||
jsx: 'preserve',
|
||||
strict: true,
|
||||
noUnusedLocals: true,
|
||||
noUnusedParameters: true,
|
||||
noFallthroughCasesInSwitch: true,
|
||||
paths: {
|
||||
'@/*': ['./src/*'],
|
||||
},
|
||||
},
|
||||
include: ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.vue'],
|
||||
references: [{ path: './tsconfig.node.json' }],
|
||||
}
|
||||
await fs.writeJson(path.join(projectPath, 'tsconfig.json'), tsConfig, { spaces: 2 })
|
||||
|
||||
// Create tsconfig.node.json
|
||||
const tsConfigNode = {
|
||||
compilerOptions: {
|
||||
target: 'ES2022',
|
||||
lib: ['ES2023'],
|
||||
module: 'ESNext',
|
||||
skipLibCheck: true,
|
||||
moduleResolution: 'bundler',
|
||||
allowImportingTsExtensions: true,
|
||||
resolveJsonModule: true,
|
||||
isolatedModules: true,
|
||||
noEmit: true,
|
||||
strict: true,
|
||||
noUnusedLocals: true,
|
||||
noUnusedParameters: true,
|
||||
noFallthroughCasesInSwitch: true,
|
||||
},
|
||||
include: ['vite.config.ts'],
|
||||
}
|
||||
await fs.writeJson(path.join(projectPath, 'tsconfig.node.json'), tsConfigNode, { spaces: 2 })
|
||||
|
||||
// Create directory structure
|
||||
await fs.ensureDir(path.join(projectPath, 'src'))
|
||||
await fs.ensureDir(path.join(projectPath, 'src/components'))
|
||||
await fs.ensureDir(path.join(projectPath, 'src/views'))
|
||||
await fs.ensureDir(path.join(projectPath, 'src/router'))
|
||||
|
||||
// Create index.html
|
||||
const indexHtml = `<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/favicon.ico">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>${projectName}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
await fs.writeFile(path.join(projectPath, 'index.html'), indexHtml)
|
||||
|
||||
// Create main.ts
|
||||
const mainTs = `import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import router from './router'
|
||||
|
||||
import './assets/index.css'
|
||||
|
||||
const app = createApp(App)
|
||||
app.use(router)
|
||||
app.mount('#app')
|
||||
`
|
||||
await fs.writeFile(path.join(projectPath, 'src/main.ts'), mainTs)
|
||||
|
||||
// Create App.vue
|
||||
const appVue = `<script setup lang="ts">
|
||||
import { RouterView } from 'vue-router'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<RouterView />
|
||||
</template>
|
||||
`
|
||||
await fs.writeFile(path.join(projectPath, 'src/App.vue'), appVue)
|
||||
|
||||
// Create router/index.ts
|
||||
const routerTs = `import { createRouter, createWebHistory } from 'vue-router'
|
||||
import HomeView from '../views/HomeView.vue'
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(import.meta.env.BASE_URL),
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
name: 'home',
|
||||
component: HomeView,
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
export default router
|
||||
`
|
||||
await fs.writeFile(path.join(projectPath, 'src/router/index.ts'), routerTs)
|
||||
|
||||
// Create HomeView.vue
|
||||
const homeView = `<script setup lang="ts">
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<main class="min-h-screen flex items-center justify-center">
|
||||
<h1 class="text-4xl font-bold">Welcome to Vue + Vite</h1>
|
||||
</main>
|
||||
</template>
|
||||
`
|
||||
await fs.writeFile(path.join(projectPath, 'src/views/HomeView.vue'), homeView)
|
||||
|
||||
// Create assets directory with empty CSS file
|
||||
await fs.ensureDir(path.join(projectPath, 'src/assets'))
|
||||
await fs.writeFile(path.join(projectPath, 'src/assets/index.css'), '')
|
||||
|
||||
// Install dependencies
|
||||
await x(options.packageManager, ['install'], {
|
||||
nodeOptions: {
|
||||
cwd: projectPath,
|
||||
},
|
||||
})
|
||||
|
||||
createSpinner?.succeed('Created a new Vite + Vue Router project.')
|
||||
}
|
||||
catch (error) {
|
||||
createSpinner?.fail('Something went wrong creating a new Vite + Vue Router project.')
|
||||
handleError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,8 +342,8 @@ describe('createOptionsSchema', () => {
|
||||
expect(result.name).toBe('my-project')
|
||||
})
|
||||
|
||||
it('accepts all three templates', () => {
|
||||
for (const template of ['nuxt', 'vite', 'vite-router']) {
|
||||
it('accepts all four templates', () => {
|
||||
for (const template of ['nuxt', 'vite', 'astro', 'laravel']) {
|
||||
const result = createOptionsSchema.parse({ ...base, template })
|
||||
expect(result.template).toBe(template)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import type { MockInstance } from 'vitest'
|
||||
import fs from 'fs-extra'
|
||||
import { downloadTemplate } from 'giget'
|
||||
import prompts from 'prompts'
|
||||
import { x } from 'tinyexec'
|
||||
import {
|
||||
@@ -16,6 +17,7 @@ import { spinner } from '../../src/utils/spinner'
|
||||
|
||||
// Mock dependencies
|
||||
vi.mock('fs-extra')
|
||||
vi.mock('giget')
|
||||
vi.mock('tinyexec')
|
||||
vi.mock('prompts')
|
||||
vi.mock('nypm', () => ({
|
||||
@@ -39,8 +41,12 @@ describe('createProject', () => {
|
||||
// Reset all fs mocks
|
||||
vi.mocked(fs.access).mockResolvedValue(undefined)
|
||||
vi.mocked(fs.existsSync).mockReturnValue(false)
|
||||
vi.mocked(fs.ensureDir).mockResolvedValue(undefined)
|
||||
vi.mocked(fs.writeFile).mockResolvedValue(undefined)
|
||||
vi.mocked(fs.copy).mockResolvedValue(undefined)
|
||||
vi.mocked(fs.readJson).mockResolvedValue({ name: 'my-vue-app' })
|
||||
vi.mocked(fs.writeJson).mockResolvedValue(undefined)
|
||||
|
||||
// Mock giget
|
||||
vi.mocked(downloadTemplate).mockResolvedValue({} as any)
|
||||
|
||||
// Mock x (tinyexec) to resolve immediately without actual execution
|
||||
vi.mocked(x).mockResolvedValue({ stdout: '', stderr: '' } as any)
|
||||
@@ -61,9 +67,10 @@ describe('createProject', () => {
|
||||
afterEach(() => {
|
||||
vi.resetAllMocks()
|
||||
mockExit?.mockRestore()
|
||||
delete process.env.SHADCN_TEMPLATE_DIR
|
||||
})
|
||||
|
||||
it('should create a Nuxt project with default options', async () => {
|
||||
it('should download template via giget for nuxt', async () => {
|
||||
vi.mocked(prompts).mockResolvedValue({ type: 'nuxt', name: 'my-app' })
|
||||
|
||||
const result = await createProject({
|
||||
@@ -80,14 +87,13 @@ describe('createProject', () => {
|
||||
template: TEMPLATES.nuxt,
|
||||
})
|
||||
|
||||
expect(x).toHaveBeenCalledWith(
|
||||
'npx',
|
||||
expect.arrayContaining(['nuxi@latest', 'init', '/test/my-app']),
|
||||
expect.any(Object),
|
||||
expect(downloadTemplate).toHaveBeenCalledWith(
|
||||
'github:unovue/shadcn-vue/templates/nuxt',
|
||||
{ dir: '/test/my-app' },
|
||||
)
|
||||
})
|
||||
|
||||
it('should create a Vite project when selected', async () => {
|
||||
it('should download template via giget for vite', async () => {
|
||||
vi.mocked(prompts).mockResolvedValue({ type: 'vite', name: 'my-vite-app' })
|
||||
|
||||
const result = await createProject({
|
||||
@@ -103,6 +109,128 @@ describe('createProject', () => {
|
||||
projectName: 'my-vite-app',
|
||||
template: TEMPLATES.vite,
|
||||
})
|
||||
|
||||
expect(downloadTemplate).toHaveBeenCalledWith(
|
||||
'github:unovue/shadcn-vue/templates/vite',
|
||||
{ dir: '/test/my-vite-app' },
|
||||
)
|
||||
})
|
||||
|
||||
it('should download template via giget for astro', async () => {
|
||||
vi.mocked(prompts).mockResolvedValue({ type: 'astro', name: 'my-astro-app' })
|
||||
|
||||
const result = await createProject({
|
||||
cwd: '/test',
|
||||
force: false,
|
||||
name: undefined,
|
||||
components: undefined,
|
||||
template: undefined,
|
||||
})
|
||||
|
||||
expect(result).toEqual({
|
||||
projectPath: '/test/my-astro-app',
|
||||
projectName: 'my-astro-app',
|
||||
template: TEMPLATES.astro,
|
||||
})
|
||||
|
||||
expect(downloadTemplate).toHaveBeenCalledWith(
|
||||
'github:unovue/shadcn-vue/templates/astro',
|
||||
{ dir: '/test/my-astro-app' },
|
||||
)
|
||||
})
|
||||
|
||||
it('should download template via giget for laravel', async () => {
|
||||
vi.mocked(prompts).mockResolvedValue({ type: 'laravel', name: 'my-laravel-app' })
|
||||
|
||||
const result = await createProject({
|
||||
cwd: '/test',
|
||||
force: false,
|
||||
name: undefined,
|
||||
components: undefined,
|
||||
template: undefined,
|
||||
})
|
||||
|
||||
expect(result).toEqual({
|
||||
projectPath: '/test/my-laravel-app',
|
||||
projectName: 'my-laravel-app',
|
||||
template: TEMPLATES.laravel,
|
||||
})
|
||||
|
||||
expect(downloadTemplate).toHaveBeenCalledWith(
|
||||
'github:unovue/shadcn-vue/templates/laravel',
|
||||
{ dir: '/test/my-laravel-app' },
|
||||
)
|
||||
})
|
||||
|
||||
it('should use local template dir when SHADCN_TEMPLATE_DIR is set', async () => {
|
||||
process.env.SHADCN_TEMPLATE_DIR = '/local/templates'
|
||||
vi.mocked(prompts).mockResolvedValue({ type: 'vite', name: 'my-app' })
|
||||
|
||||
await createProject({
|
||||
cwd: '/test',
|
||||
force: false,
|
||||
name: undefined,
|
||||
components: undefined,
|
||||
template: undefined,
|
||||
})
|
||||
|
||||
expect(fs.copy).toHaveBeenCalledWith('/local/templates/vite', '/test/my-app')
|
||||
expect(downloadTemplate).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should update package.json name after download', async () => {
|
||||
vi.mocked(prompts).mockResolvedValue({ type: 'nuxt', name: 'custom-name' })
|
||||
vi.mocked(fs.readJson).mockResolvedValue({ name: 'my-vue-app', private: true })
|
||||
|
||||
await createProject({
|
||||
cwd: '/test',
|
||||
force: false,
|
||||
name: undefined,
|
||||
components: undefined,
|
||||
template: undefined,
|
||||
})
|
||||
|
||||
expect(fs.writeJson).toHaveBeenCalledWith(
|
||||
'/test/custom-name/package.json',
|
||||
{ name: 'custom-name', private: true },
|
||||
{ spaces: 2 },
|
||||
)
|
||||
})
|
||||
|
||||
it('should run git init after download', async () => {
|
||||
vi.mocked(prompts).mockResolvedValue({ type: 'nuxt', name: 'my-app' })
|
||||
|
||||
await createProject({
|
||||
cwd: '/test',
|
||||
force: false,
|
||||
name: undefined,
|
||||
components: undefined,
|
||||
template: undefined,
|
||||
})
|
||||
|
||||
expect(x).toHaveBeenCalledWith(
|
||||
'git',
|
||||
['init'],
|
||||
{ nodeOptions: { cwd: '/test/my-app' } },
|
||||
)
|
||||
})
|
||||
|
||||
it('should install dependencies after download', async () => {
|
||||
vi.mocked(prompts).mockResolvedValue({ type: 'nuxt', name: 'my-app' })
|
||||
|
||||
await createProject({
|
||||
cwd: '/test',
|
||||
force: false,
|
||||
name: undefined,
|
||||
components: undefined,
|
||||
template: undefined,
|
||||
})
|
||||
|
||||
expect(x).toHaveBeenCalledWith(
|
||||
'npm',
|
||||
['install'],
|
||||
{ throwOnError: true, nodeOptions: { cwd: '/test/my-app' } },
|
||||
)
|
||||
})
|
||||
|
||||
it('should throw error if project path already exists', async () => {
|
||||
|
||||
Generated
+169
-61
@@ -39,6 +39,9 @@ catalogs:
|
||||
date-fns:
|
||||
specifier: ^4.1.0
|
||||
version: 4.1.0
|
||||
giget:
|
||||
specifier: ^3.2.0
|
||||
version: 3.2.0
|
||||
open:
|
||||
specifier: ^10.2.0
|
||||
version: 10.2.0
|
||||
@@ -156,13 +159,13 @@ importers:
|
||||
version: 3.10.0
|
||||
'@nuxt/content':
|
||||
specifier: ^3.9.0
|
||||
version: 3.9.0(magicast@0.5.1)
|
||||
version: 3.9.0(magicast@0.3.5)
|
||||
'@nuxt/fonts':
|
||||
specifier: 0.12.1
|
||||
version: 0.12.1(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
version: 0.12.1(db0@0.3.4)(ioredis@5.8.2)(magicast@0.3.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@nuxt/image':
|
||||
specifier: 2.0.0
|
||||
version: 2.0.0(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)
|
||||
version: 2.0.0(db0@0.3.4)(ioredis@5.8.2)(magicast@0.3.5)
|
||||
'@phosphor-icons/vue':
|
||||
specifier: ^2.2.1
|
||||
version: 2.2.1(vue@3.5.25(typescript@5.9.3))
|
||||
@@ -225,10 +228,10 @@ importers:
|
||||
version: 0.555.0(vue@3.5.25(typescript@5.9.3))
|
||||
nuxt:
|
||||
specifier: ^4.2.1
|
||||
version: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)
|
||||
version: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)
|
||||
nuxt-og-image:
|
||||
specifier: 5.1.12
|
||||
version: 5.1.12(@unhead/vue@2.0.19(vue@3.5.25(typescript@5.9.3)))(h3@1.15.4)(magicast@0.5.1)(unstorage@1.17.3(db0@0.3.4)(ioredis@5.8.2))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
|
||||
version: 5.1.12(@unhead/vue@2.0.19(vue@3.5.25(typescript@5.9.3)))(h3@1.15.4)(magicast@0.3.5)(unstorage@1.17.3(db0@0.3.4)(ioredis@5.8.2))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
|
||||
qrcode:
|
||||
specifier: 'catalog:'
|
||||
version: 1.5.4
|
||||
@@ -264,20 +267,20 @@ importers:
|
||||
version: 0.3.2(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3))
|
||||
vue-sonner:
|
||||
specifier: 'catalog:'
|
||||
version: 2.0.9(@nuxt/kit@4.2.1(magicast@0.5.1))(@nuxt/schema@4.2.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))
|
||||
version: 2.0.9(@nuxt/kit@4.2.1(magicast@0.3.5))(@nuxt/schema@4.2.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))
|
||||
zod:
|
||||
specifier: 'catalog:'
|
||||
version: 3.25.76
|
||||
devDependencies:
|
||||
'@nuxtjs/color-mode':
|
||||
specifier: ^4.0.0
|
||||
version: 4.0.0(magicast@0.5.1)
|
||||
version: 4.0.0(magicast@0.3.5)
|
||||
'@types/qrcode':
|
||||
specifier: 'catalog:'
|
||||
version: 1.5.6
|
||||
nuxt-shiki:
|
||||
specifier: ^0.3.1
|
||||
version: 0.3.1(magicast@0.5.1)
|
||||
version: 0.3.1(magicast@0.3.5)
|
||||
oxc-parser:
|
||||
specifier: 'catalog:'
|
||||
version: 0.102.0
|
||||
@@ -344,6 +347,9 @@ importers:
|
||||
get-tsconfig:
|
||||
specifier: ^4.13.0
|
||||
version: 4.13.0
|
||||
giget:
|
||||
specifier: 'catalog:'
|
||||
version: 3.2.0
|
||||
magic-string:
|
||||
specifier: ^0.30.21
|
||||
version: 0.30.21
|
||||
@@ -6017,6 +6023,10 @@ packages:
|
||||
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
|
||||
hasBin: true
|
||||
|
||||
giget@3.2.0:
|
||||
resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==}
|
||||
hasBin: true
|
||||
|
||||
git-raw-commits@4.0.0:
|
||||
resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
|
||||
engines: {node: '>=16'}
|
||||
@@ -10079,10 +10089,10 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@dxup/nuxt@0.2.1(magicast@0.5.1)':
|
||||
'@dxup/nuxt@0.2.1(magicast@0.3.5)':
|
||||
dependencies:
|
||||
'@dxup/unimport': 0.1.1
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
chokidar: 3.6.0
|
||||
pathe: 2.0.3
|
||||
tinyglobby: 0.2.15
|
||||
@@ -10869,6 +10879,35 @@ snapshots:
|
||||
dependencies:
|
||||
'@nolyfill/shared': 1.0.44
|
||||
|
||||
'@nuxt/cli@3.30.0(magicast@0.3.5)':
|
||||
dependencies:
|
||||
c12: 3.3.2(magicast@0.3.5)
|
||||
citty: 0.1.6
|
||||
confbox: 0.2.2
|
||||
consola: 3.4.2
|
||||
copy-paste: 2.2.0
|
||||
defu: 6.1.4
|
||||
exsolve: 1.0.7
|
||||
fuse.js: 7.1.0
|
||||
giget: 2.0.0
|
||||
jiti: 2.6.1
|
||||
listhen: 1.9.0
|
||||
nypm: 0.6.2
|
||||
ofetch: 1.5.1
|
||||
ohash: 2.0.11
|
||||
pathe: 2.0.3
|
||||
perfect-debounce: 2.0.0
|
||||
pkg-types: 2.3.0
|
||||
scule: 1.3.0
|
||||
semver: 7.7.3
|
||||
srvx: 0.9.4
|
||||
std-env: 3.10.0
|
||||
tinyexec: 1.0.2
|
||||
ufo: 1.6.1
|
||||
youch: 4.1.0-beta.12
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxt/cli@3.30.0(magicast@0.5.1)':
|
||||
dependencies:
|
||||
c12: 3.3.2(magicast@0.5.1)
|
||||
@@ -10898,15 +10937,15 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxt/content@3.9.0(magicast@0.5.1)':
|
||||
'@nuxt/content@3.9.0(magicast@0.3.5)':
|
||||
dependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxtjs/mdc': 0.19.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
'@nuxtjs/mdc': 0.19.1(magicast@0.3.5)
|
||||
'@shikijs/langs': 3.18.0
|
||||
'@sqlite.org/sqlite-wasm': 3.50.4-build1
|
||||
'@standard-schema/spec': 1.0.0
|
||||
'@webcontainer/env': 1.1.1
|
||||
c12: 3.3.2(magicast@0.5.1)
|
||||
c12: 3.3.2(magicast@0.3.5)
|
||||
chokidar: 3.6.0
|
||||
consola: 3.4.2
|
||||
db0: 0.3.4
|
||||
@@ -10928,7 +10967,7 @@ snapshots:
|
||||
minimark: 0.2.0
|
||||
minimatch: 10.1.1
|
||||
modern-tar: 0.7.2
|
||||
nuxt-component-meta: 0.15.0(magicast@0.5.1)
|
||||
nuxt-component-meta: 0.15.0(magicast@0.3.5)
|
||||
nypm: 0.6.2
|
||||
ohash: 2.0.11
|
||||
pathe: 2.0.3
|
||||
@@ -10966,9 +11005,9 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxt/devtools-kit@2.7.0(magicast@0.5.1)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@nuxt/devtools-kit@3.1.0(magicast@0.3.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@nuxt/kit': 3.20.0(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
execa: 8.0.1
|
||||
vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
transitivePeerDependencies:
|
||||
@@ -11076,7 +11115,7 @@ snapshots:
|
||||
structured-clone-es: 1.0.0
|
||||
tinyglobby: 0.2.15
|
||||
vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.1(magicast@0.3.5))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
vite-plugin-vue-tracer: 1.1.3(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
|
||||
which: 5.0.0
|
||||
ws: 8.18.3
|
||||
@@ -11126,10 +11165,10 @@ snapshots:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
'@nuxt/fonts@0.12.1(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@nuxt/fonts@0.12.1(db0@0.3.4)(ioredis@5.8.2)(magicast@0.3.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@nuxt/devtools-kit': 3.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/devtools-kit': 3.1.0(magicast@0.3.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
consola: 3.4.2
|
||||
css-tree: 3.1.0
|
||||
defu: 6.1.4
|
||||
@@ -11172,9 +11211,9 @@ snapshots:
|
||||
- uploadthing
|
||||
- vite
|
||||
|
||||
'@nuxt/image@2.0.0(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)':
|
||||
'@nuxt/image@2.0.0(db0@0.3.4)(ioredis@5.8.2)(magicast@0.3.5)':
|
||||
dependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
consola: 3.4.2
|
||||
defu: 6.1.4
|
||||
h3: 1.15.4
|
||||
@@ -11312,6 +11351,31 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxt/kit@4.2.0(magicast@0.3.5)':
|
||||
dependencies:
|
||||
c12: 3.3.2(magicast@0.3.5)
|
||||
consola: 3.4.2
|
||||
defu: 6.1.4
|
||||
destr: 2.0.5
|
||||
errx: 0.1.0
|
||||
exsolve: 1.0.7
|
||||
ignore: 7.0.5
|
||||
jiti: 2.6.1
|
||||
klona: 2.0.6
|
||||
mlly: 1.8.0
|
||||
ohash: 2.0.11
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.3.0
|
||||
rc9: 2.1.2
|
||||
scule: 1.3.0
|
||||
semver: 7.7.3
|
||||
tinyglobby: 0.2.15
|
||||
ufo: 1.6.1
|
||||
unctx: 2.4.1
|
||||
untyped: 2.0.0
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxt/kit@4.2.0(magicast@0.5.1)':
|
||||
dependencies:
|
||||
c12: 3.3.2(magicast@0.5.1)
|
||||
@@ -11337,6 +11401,31 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxt/kit@4.2.1(magicast@0.3.5)':
|
||||
dependencies:
|
||||
c12: 3.3.2(magicast@0.3.5)
|
||||
consola: 3.4.2
|
||||
defu: 6.1.4
|
||||
destr: 2.0.5
|
||||
errx: 0.1.0
|
||||
exsolve: 1.0.7
|
||||
ignore: 7.0.5
|
||||
jiti: 2.6.1
|
||||
klona: 2.0.6
|
||||
mlly: 1.8.0
|
||||
ohash: 2.0.11
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.3.0
|
||||
rc9: 2.1.2
|
||||
scule: 1.3.0
|
||||
semver: 7.7.3
|
||||
tinyglobby: 0.2.15
|
||||
ufo: 1.6.1
|
||||
unctx: 2.4.1
|
||||
untyped: 2.0.0
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxt/kit@4.2.1(magicast@0.5.1)':
|
||||
dependencies:
|
||||
c12: 3.3.2(magicast@0.5.1)
|
||||
@@ -11449,10 +11538,10 @@ snapshots:
|
||||
- uploadthing
|
||||
- xml2js
|
||||
|
||||
'@nuxt/nitro-server@4.2.1(db0@0.3.4)(encoding@0.1.13)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-beta.53)(typescript@5.9.3)':
|
||||
'@nuxt/nitro-server@4.2.1(db0@0.3.4)(encoding@0.1.13)(ioredis@5.8.2)(magicast@0.3.5)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-beta.53)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@nuxt/devalue': 2.0.2
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
'@unhead/vue': 2.0.19(vue@3.5.25(typescript@5.9.3))
|
||||
'@vue/shared': 3.5.24
|
||||
consola: 3.4.2
|
||||
@@ -11467,7 +11556,7 @@ snapshots:
|
||||
klona: 2.0.6
|
||||
mocked-exports: 0.1.1
|
||||
nitropack: 2.12.9(encoding@0.1.13)(rolldown@1.0.0-beta.53)
|
||||
nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)
|
||||
nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.3.0
|
||||
radix3: 1.1.2
|
||||
@@ -11529,6 +11618,23 @@ snapshots:
|
||||
pkg-types: 2.3.0
|
||||
std-env: 3.10.0
|
||||
|
||||
'@nuxt/telemetry@2.6.6(magicast@0.3.5)':
|
||||
dependencies:
|
||||
'@nuxt/kit': 3.20.1(magicast@0.3.5)
|
||||
citty: 0.1.6
|
||||
consola: 3.4.2
|
||||
destr: 2.0.5
|
||||
dotenv: 16.6.1
|
||||
git-url-parse: 16.1.0
|
||||
is-docker: 3.0.0
|
||||
ofetch: 1.5.1
|
||||
package-manager-detector: 1.5.0
|
||||
pathe: 2.0.3
|
||||
rc9: 2.1.2
|
||||
std-env: 3.10.0
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxt/telemetry@2.6.6(magicast@0.5.1)':
|
||||
dependencies:
|
||||
'@nuxt/kit': 3.20.1(magicast@0.5.1)
|
||||
@@ -11644,9 +11750,9 @@ snapshots:
|
||||
- vue-tsc
|
||||
- yaml
|
||||
|
||||
'@nuxt/vite-builder@4.2.1(@types/node@24.10.0)(eslint@9.39.1(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.1.8(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2)':
|
||||
'@nuxt/vite-builder@4.2.1(@types/node@24.10.0)(eslint@9.39.1(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.3.5)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.1.8(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2)':
|
||||
dependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
'@rollup/plugin-replace': 6.0.3(rollup@4.52.5)
|
||||
'@vitejs/plugin-vue': 6.0.1(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
|
||||
'@vitejs/plugin-vue-jsx': 5.1.1(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
|
||||
@@ -11664,7 +11770,7 @@ snapshots:
|
||||
magic-string: 0.30.21
|
||||
mlly: 1.8.0
|
||||
mocked-exports: 0.1.1
|
||||
nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)
|
||||
nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.3.0
|
||||
postcss: 8.5.6
|
||||
@@ -11714,9 +11820,9 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxtjs/color-mode@4.0.0(magicast@0.5.1)':
|
||||
'@nuxtjs/color-mode@4.0.0(magicast@0.3.5)':
|
||||
dependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
exsolve: 1.0.8
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.3.0
|
||||
@@ -11724,9 +11830,9 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
'@nuxtjs/mdc@0.19.1(magicast@0.5.1)':
|
||||
'@nuxtjs/mdc@0.19.1(magicast@0.3.5)':
|
||||
dependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
'@shikijs/core': 3.18.0
|
||||
'@shikijs/langs': 3.18.0
|
||||
'@shikijs/themes': 3.18.0
|
||||
@@ -14125,7 +14231,7 @@ snapshots:
|
||||
|
||||
bytes@3.1.2: {}
|
||||
|
||||
c12@3.3.1(magicast@0.5.1):
|
||||
c12@3.3.1(magicast@0.3.5):
|
||||
dependencies:
|
||||
chokidar: 3.6.0
|
||||
confbox: 0.2.2
|
||||
@@ -14140,7 +14246,7 @@ snapshots:
|
||||
pkg-types: 2.3.0
|
||||
rc9: 2.1.2
|
||||
optionalDependencies:
|
||||
magicast: 0.5.1
|
||||
magicast: 0.3.5
|
||||
|
||||
c12@3.3.2(magicast@0.3.5):
|
||||
dependencies:
|
||||
@@ -15756,6 +15862,8 @@ snapshots:
|
||||
nypm: 0.6.2
|
||||
pathe: 2.0.3
|
||||
|
||||
giget@3.2.0: {}
|
||||
|
||||
git-raw-commits@4.0.0:
|
||||
dependencies:
|
||||
dargs: 8.1.0
|
||||
@@ -17391,9 +17499,9 @@ snapshots:
|
||||
dependencies:
|
||||
boolbase: 1.0.0
|
||||
|
||||
nuxt-component-meta@0.15.0(magicast@0.5.1):
|
||||
nuxt-component-meta@0.15.0(magicast@0.3.5):
|
||||
dependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
citty: 0.1.6
|
||||
json-schema-to-zod: 2.7.0
|
||||
mlly: 1.8.0
|
||||
@@ -17405,10 +17513,10 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
nuxt-og-image@5.1.12(@unhead/vue@2.0.19(vue@3.5.25(typescript@5.9.3)))(h3@1.15.4)(magicast@0.5.1)(unstorage@1.17.3(db0@0.3.4)(ioredis@5.8.2))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)):
|
||||
nuxt-og-image@5.1.12(@unhead/vue@2.0.19(vue@3.5.25(typescript@5.9.3)))(h3@1.15.4)(magicast@0.3.5)(unstorage@1.17.3(db0@0.3.4)(ioredis@5.8.2))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)):
|
||||
dependencies:
|
||||
'@nuxt/devtools-kit': 2.7.0(magicast@0.5.1)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@nuxt/kit': 4.2.0(magicast@0.5.1)
|
||||
'@nuxt/devtools-kit': 2.7.0(magicast@0.3.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@nuxt/kit': 4.2.0(magicast@0.3.5)
|
||||
'@resvg/resvg-js': 2.6.2
|
||||
'@resvg/resvg-wasm': 2.6.2
|
||||
'@unhead/vue': 2.0.19(vue@3.5.25(typescript@5.9.3))
|
||||
@@ -17421,7 +17529,7 @@ snapshots:
|
||||
image-size: 2.0.2
|
||||
magic-string: 0.30.21
|
||||
mocked-exports: 0.1.1
|
||||
nuxt-site-config: 3.2.11(h3@1.15.4)(magicast@0.5.1)(vue@3.5.25(typescript@5.9.3))
|
||||
nuxt-site-config: 3.2.11(h3@1.15.4)(magicast@0.3.5)(vue@3.5.25(typescript@5.9.3))
|
||||
nypm: 0.6.2
|
||||
ofetch: 1.5.1
|
||||
ohash: 2.0.11
|
||||
@@ -17446,18 +17554,18 @@ snapshots:
|
||||
- vite
|
||||
- vue
|
||||
|
||||
nuxt-shiki@0.3.1(magicast@0.5.1):
|
||||
nuxt-shiki@0.3.1(magicast@0.3.5):
|
||||
dependencies:
|
||||
'@nuxt/kit': 3.20.0(magicast@0.5.1)
|
||||
'@nuxt/kit': 3.20.0(magicast@0.3.5)
|
||||
knitwork: 1.2.0
|
||||
shiki: 3.19.0
|
||||
unwasm: 0.3.11
|
||||
transitivePeerDependencies:
|
||||
- magicast
|
||||
|
||||
nuxt-site-config-kit@3.2.11(magicast@0.5.1)(vue@3.5.25(typescript@5.9.3)):
|
||||
nuxt-site-config-kit@3.2.11(magicast@0.3.5)(vue@3.5.25(typescript@5.9.3)):
|
||||
dependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
pkg-types: 2.3.0
|
||||
site-config-stack: 3.2.11(vue@3.5.25(typescript@5.9.3))
|
||||
std-env: 3.10.0
|
||||
@@ -17466,11 +17574,11 @@ snapshots:
|
||||
- magicast
|
||||
- vue
|
||||
|
||||
nuxt-site-config@3.2.11(h3@1.15.4)(magicast@0.5.1)(vue@3.5.25(typescript@5.9.3)):
|
||||
nuxt-site-config@3.2.11(h3@1.15.4)(magicast@0.3.5)(vue@3.5.25(typescript@5.9.3)):
|
||||
dependencies:
|
||||
'@nuxt/kit': 4.2.0(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.0(magicast@0.3.5)
|
||||
h3: 1.15.4
|
||||
nuxt-site-config-kit: 3.2.11(magicast@0.5.1)(vue@3.5.25(typescript@5.9.3))
|
||||
nuxt-site-config-kit: 3.2.11(magicast@0.3.5)(vue@3.5.25(typescript@5.9.3))
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.3.0
|
||||
sirv: 3.0.2
|
||||
@@ -17600,19 +17708,19 @@ snapshots:
|
||||
- xml2js
|
||||
- yaml
|
||||
|
||||
nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2):
|
||||
nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2):
|
||||
dependencies:
|
||||
'@dxup/nuxt': 0.2.1(magicast@0.5.1)
|
||||
'@nuxt/cli': 3.30.0(magicast@0.5.1)
|
||||
'@dxup/nuxt': 0.2.1(magicast@0.3.5)
|
||||
'@nuxt/cli': 3.30.0(magicast@0.3.5)
|
||||
'@nuxt/devtools': 3.1.0(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/nitro-server': 4.2.1(db0@0.3.4)(encoding@0.1.13)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-beta.53)(typescript@5.9.3)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
'@nuxt/nitro-server': 4.2.1(db0@0.3.4)(encoding@0.1.13)(ioredis@5.8.2)(magicast@0.3.5)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-beta.53)(typescript@5.9.3)
|
||||
'@nuxt/schema': 4.2.1
|
||||
'@nuxt/telemetry': 2.6.6(magicast@0.5.1)
|
||||
'@nuxt/vite-builder': 4.2.1(@types/node@24.10.0)(eslint@9.39.1(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.1.8(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2)
|
||||
'@nuxt/telemetry': 2.6.6(magicast@0.3.5)
|
||||
'@nuxt/vite-builder': 4.2.1(@types/node@24.10.0)(eslint@9.39.1(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.3.5)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.1.8(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2)
|
||||
'@unhead/vue': 2.0.19(vue@3.5.25(typescript@5.9.3))
|
||||
'@vue/shared': 3.5.24
|
||||
c12: 3.3.1(magicast@0.5.1)
|
||||
c12: 3.3.1(magicast@0.3.5)
|
||||
chokidar: 3.6.0
|
||||
compatx: 0.2.0
|
||||
consola: 3.4.2
|
||||
@@ -19971,7 +20079,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)):
|
||||
vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.1(magicast@0.3.5))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)):
|
||||
dependencies:
|
||||
ansis: 4.2.0
|
||||
debug: 4.4.3
|
||||
@@ -19984,7 +20092,7 @@ snapshots:
|
||||
vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite-dev-rpc: 1.1.0(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
optionalDependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -20191,11 +20299,11 @@ snapshots:
|
||||
esbuild: 0.27.0
|
||||
vue: 3.5.25(typescript@5.9.3)
|
||||
|
||||
vue-sonner@2.0.9(@nuxt/kit@4.2.1(magicast@0.5.1))(@nuxt/schema@4.2.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)):
|
||||
vue-sonner@2.0.9(@nuxt/kit@4.2.1(magicast@0.3.5))(@nuxt/schema@4.2.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)):
|
||||
optionalDependencies:
|
||||
'@nuxt/kit': 4.2.1(magicast@0.5.1)
|
||||
'@nuxt/kit': 4.2.1(magicast@0.3.5)
|
||||
'@nuxt/schema': 4.2.1
|
||||
nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)
|
||||
nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.0)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(encoding@0.1.13)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.52.5)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(stylus@0.57.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2)
|
||||
|
||||
vue-tsc@3.1.8(typescript@5.9.3):
|
||||
dependencies:
|
||||
|
||||
@@ -14,6 +14,7 @@ catalog:
|
||||
class-variance-authority: ^0.7.1
|
||||
clsx: ^2.1.1
|
||||
date-fns: ^4.1.0
|
||||
giget: ^3.2.0
|
||||
open: ^10.2.0
|
||||
oxc-parser: ^0.102.0
|
||||
pathe: ^2.0.3
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
.nuxt
|
||||
@@ -1,7 +1,24 @@
|
||||
import tailwindcss from '@tailwindcss/vite'
|
||||
|
||||
export default defineNuxtConfig({
|
||||
future: {
|
||||
compatibilityVersion: 4,
|
||||
},
|
||||
css: ['~/assets/css/tailwind.css'],
|
||||
compatibilityDate: '2025-01-01',
|
||||
modules: ['@nuxtjs/tailwindcss'],
|
||||
vite: {
|
||||
plugins: [tailwindcss()],
|
||||
},
|
||||
modules: ['shadcn-nuxt'],
|
||||
shadcn: {
|
||||
/**
|
||||
* Prefix for all the imported component.
|
||||
* @default "Ui"
|
||||
*/
|
||||
prefix: 'Ui',
|
||||
/**
|
||||
* Directory that the component lives in.
|
||||
* Will respect the Nuxt aliases.
|
||||
* @link https://nuxt.com/docs/api/nuxt-config#alias
|
||||
* @default "@/components/ui"
|
||||
*/
|
||||
componentDir: '@/components/ui',
|
||||
},
|
||||
})
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
"vue": "^3.5.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nuxtjs/tailwindcss": "^7.0.0",
|
||||
"@tailwindcss/vite": "^4.0.0",
|
||||
"shadcn-nuxt": "^2.5.1",
|
||||
"tailwindcss": "^4.0.0",
|
||||
"typescript": "^5.7.2"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
Reference in New Issue
Block a user