Skip to content

Commit b75e547

Browse files
userquinjohnleider
andauthored
feat: add Nuxt template (#61)
Co-authored-by: John Leider <[email protected]>
1 parent c8ef277 commit b75e547

File tree

20 files changed

+1165
-109
lines changed

20 files changed

+1165
-109
lines changed

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,21 @@
2222
"scripts": {
2323
"build": "node ./scripts/build.js",
2424
"start": "node ./index.js",
25-
"lint": "eslint --fix 'src/**'",
25+
"lint": "eslint --fix ./src/**",
2626
"prepublishOnly": "npm run build"
2727
},
2828
"dependencies": {
2929
"kolorist": "^1.5.1",
3030
"minimist": "^1.2.6",
31+
"magicast": "^0.3.4",
32+
"package-manager-detector": "^0.2.2",
3133
"prompts": "^2.4.2",
3234
"validate-npm-package-name": "^4.0.0"
3335
},
3436
"devDependencies": {
3537
"@release-it/conventional-changelog": "^8.0.1",
3638
"@types/minimist": "^1.2.2",
39+
"@types/node": "^20.12.8",
3740
"@types/prompts": "^2.0.14",
3841
"@types/validate-npm-package-name": "^4.0.0",
3942
"@typescript-eslint/eslint-plugin": "^5.30.6",

pnpm-lock.yaml

Lines changed: 39 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/build.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ async function bundleMain () {
88
format: 'esm',
99
platform: 'node',
1010
target: 'node18',
11-
external: ['validate-npm-package-name', 'kolorist', 'minimist', 'prompts'],
11+
external: ['package-browser-detector', 'magicast', 'validate-npm-package-name', 'kolorist', 'minimist', 'prompts'],
1212
})
1313
}
1414

src/index.ts

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import { mkdirSync, rmSync, writeFileSync } from 'fs'
55

66
// Types
77
import type { ContextState } from './utils/prompts'
8+
import type { NuxtPresetName } from './utils/presets'
89

910
// Utils
1011
import { initPrompts } from './utils/prompts'
1112
import { red } from 'kolorist'
1213
import minimist from 'minimist'
1314
import { installDependencies, renderTemplate } from './utils'
15+
import { renderNuxtTemplate } from './utils/nuxt/renderNuxtTemplate'
1416

1517
const validPresets = ['base', 'custom', 'default', 'essentials']
1618

@@ -48,6 +50,12 @@ async function run () {
4850
usePackageManager,
4951
installDependencies: installDeps,
5052
usePreset,
53+
useStore,
54+
useEslint,
55+
useNuxtV4Compat,
56+
useNuxtModule,
57+
useNuxtSSR,
58+
useNuxtSSRClientHints,
5159
} = await initPrompts(context)
5260

5361
const projectRoot = join(cwd, projectName)
@@ -57,30 +65,51 @@ async function run () {
5765
rmSync(projectRoot, { recursive: true })
5866
}
5967

60-
// Create project directory
61-
mkdirSync(projectRoot)
68+
const preset = context.usePreset ?? usePreset
69+
70+
if (preset.startsWith('nuxt-')) {
71+
const templateRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../template/typescript')
72+
const templatePath = resolve(dirname(fileURLToPath(import.meta.url)), '../template/typescript/nuxt')
73+
// we are going to run Nuxi CLI that will handle the creation for us
74+
await renderNuxtTemplate({
75+
cwd,
76+
projectName,
77+
projectRoot,
78+
templateRoot,
79+
templatePath,
80+
nuxtPreset: preset as NuxtPresetName,
81+
useNuxtV4Compat,
82+
useNuxtModule,
83+
useNuxtSSR,
84+
useNuxtSSRClientHints,
85+
})
86+
}
87+
else {
88+
// Create project directory
89+
mkdirSync(projectRoot)
6290

63-
// Create base package.json
64-
writeFileSync(resolve(projectRoot, 'package.json'), JSON.stringify({ name: projectName }, null, 2))
91+
// Create base package.json
92+
writeFileSync(resolve(projectRoot, 'package.json'), JSON.stringify({ name: projectName }, null, 2))
6593

66-
const jsOrTs = useTypeScript ? 'typescript' : 'javascript'
67-
let templatePath = resolve(dirname(fileURLToPath(import.meta.url)), '../template', jsOrTs)
94+
console.log('\n◌ Generating scaffold...')
6895

69-
console.log('\n◌ Generating scaffold...')
96+
const jsOrTs = useTypeScript ? 'typescript' : 'javascript'
97+
let templatePath = resolve(dirname(fileURLToPath(import.meta.url)), '../template', jsOrTs)
7098

71-
renderTemplate(resolve(templatePath, 'default'), projectRoot)
99+
renderTemplate(resolve(templatePath, 'default'), projectRoot)
72100

73-
if (['base', 'essentials'].includes(usePreset)) {
74-
renderTemplate(resolve(templatePath, 'base'), projectRoot)
75-
}
101+
if (['base', 'essentials'].includes(usePreset)) {
102+
renderTemplate(resolve(templatePath, 'base'), projectRoot)
103+
}
76104

77-
if (['essentials', 'recommended'].includes(usePreset)) {
78-
renderTemplate(resolve(templatePath, 'essentials'), projectRoot)
79-
}
105+
if (['essentials', 'recommended'].includes(usePreset)) {
106+
renderTemplate(resolve(templatePath, 'essentials'), projectRoot)
107+
}
80108

81-
if (usePackageManager && installDeps) {
82-
console.log(`◌ Installing dependencies with ${usePackageManager}...\n`)
83-
installDependencies(projectRoot, usePackageManager)
109+
if (usePackageManager && installDeps) {
110+
console.log(`◌ Installing dependencies with ${usePackageManager}...\n`)
111+
installDependencies(projectRoot, usePackageManager)
112+
}
84113
}
85114

86115
console.log(`\n${projectName} has been generated at ${projectRoot}\n`)
@@ -91,6 +120,7 @@ run()
91120
console.log('Discord community: https://community.vuetifyjs.com')
92121
console.log('Github: https://github.com/vuetifyjs/vuetify')
93122
console.log('Support Vuetify: https://github.com/sponsors/johnleider')
123+
process.exit(0)
94124
})
95125
.catch((err) => {
96126
console.error(`\n${red('✖')} ${err}\n`)

0 commit comments

Comments
 (0)