create-honovel 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,7 +54,7 @@ async function main() {
54
54
  const overlay = JSON.parse(content);
55
55
  const merged = { ...current, ...overlay };
56
56
  if (outputName === "package.json") {
57
- for (const section of ["scripts", "dependencies", "devDependencies"]) {
57
+ for (const section of ["scripts", "dependencies", "devDependencies", "overrides"]) {
58
58
  merged[section] = { ...current[section], ...overlay[section] };
59
59
  }
60
60
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["create-honovel.mts"],
4
- "sourcesContent": ["#!/usr/bin/env node\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { spawnSync } from 'node:child_process'\nimport readline from 'node:readline/promises'\n\nconst packageRoot = fileURLToPath(new URL('../', import.meta.url))\nconst metadata = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'))\n\nasync function main() {\n const args = process.argv.slice(2)\n if (!args.length || args.includes('--help') || args.includes('-h')) {\n console.log('Usage: npm create honovel@latest <project-name> [--frontend=nuxt|none] [--api-only] [--no-install]\\nThe backend is always Cloudflare Workers. If no frontend option is given, the installer asks whether to include Nuxt (the non-interactive default).')\n return\n }\n const [name, ...options] = args\n if (!/^[a-z0-9][a-z0-9_-]*$/.test(name)) throw new Error('Use a project name containing lowercase letters, digits, hyphens, or underscores.')\n let frontend = 'nuxt'\n let frontendSelected = false\n let install = true\n for (let index = 0; index < options.length; index++) {\n const option = options[index]\n if (option === '--no-install') {\n install = false\n } else if (option === '--api-only' || option === '--frontend' || option.startsWith('--frontend=')) {\n if (frontendSelected) throw new Error('Select the frontend only once; do not combine --api-only and --frontend.')\n frontendSelected = true\n frontend = option === '--api-only' ? 'none'\n : option === '--frontend' ? options[++index] : option.slice('--frontend='.length)\n if (!['nuxt', 'none'].includes(frontend)) throw new Error('Supported frontend options: nuxt, none.')\n } else if (option === '--template' || option.startsWith('--template=')) {\n throw new Error('All projects use Cloudflare Workers. Use --frontend=nuxt, --frontend=none or --api-only.')\n } else throw new Error('Unknown option. Supported: --frontend=nuxt|none, --api-only, --no-install')\n }\n if (!frontendSelected) frontend = await chooseFrontend()\n if (name.length > 63) throw new Error('Cloudflare project names must be at most 63 characters long.')\n const target = path.resolve(name)\n if (fs.existsSync(target)) throw new Error(`${name} already exists. Choose a new directory.`)\n fs.mkdirSync(target)\n function copy(directory, destination) {\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const source = path.join(directory, entry.name)\n const outputName = entry.name === 'env.example.template'\n ? '.env.example'\n : entry.name.replace(/\\.template$/, '')\n const output = path.join(destination, outputName)\n if (entry.isDirectory()) {\n fs.mkdirSync(output, { recursive: true })\n copy(source, output)\n } else {\n if (/\\.(png|jpe?g|gif|webp|ico|woff2?)$/i.test(entry.name)) {\n fs.copyFileSync(source, output)\n continue\n }\n const content = fs.readFileSync(source, 'utf8')\n .replaceAll('__PROJECT_NAME__', name)\n .replaceAll('__WORKER_NAME__', name.replaceAll('_', '-'))\n .replaceAll('__HONOVEL_VERSION__', metadata.version)\n if (fs.existsSync(output) && ['package.json', 'wrangler.jsonc'].includes(outputName)) {\n const current = JSON.parse(fs.readFileSync(output, 'utf8'))\n const overlay = JSON.parse(content)\n const merged = { ...current, ...overlay }\n if (outputName === 'package.json') {\n for (const section of ['scripts', 'dependencies', 'devDependencies']) {\n merged[section] = { ...current[section], ...overlay[section] }\n }\n }\n fs.writeFileSync(output, JSON.stringify(merged, null, 2) + '\\n')\n } else fs.writeFileSync(output, content)\n }\n }\n }\n copy(path.join(packageRoot, 'template/common'), target)\n copy(path.join(packageRoot, 'template/cloudflare'), target)\n if (frontend === 'nuxt') copy(path.join(packageRoot, 'template/nuxt'), target)\n const envExamplePath = path.join(target, '.env.example')\n const envPath = path.join(target, '.env')\n if (fs.existsSync(envExamplePath) && !fs.existsSync(envPath)) {\n const localEnv = fs.readFileSync(envExamplePath, 'utf8')\n .replace(/^APP_DEBUG=.*$/m, 'APP_DEBUG=true')\n fs.writeFileSync(envPath, localEnv, { flag: 'wx' })\n }\n if (install) {\n // Drizzle Kit 0.31 still declares deprecated loader packages upstream.\n // Keep the scaffold output focused on actionable install/audit information.\n const result = spawnSync(process.platform === 'win32' ? 'npm.cmd' : 'npm', ['install', '--loglevel=error'], { cwd: target, stdio: 'inherit', shell: process.platform === 'win32' })\n if (result.error || result.status !== 0) {\n throw new Error(`Project created at ${target}, but npm install failed. Check the npm output above and run npm install there to retry.`)\n }\n }\n console.log(`Created ${target} (Cloudflare Workers, ${frontend === 'nuxt' ? 'Nuxt frontend' : 'API-only'})\\n\\nNext:\\n cd ${name}\\n${install ? '' : ' npm install\\n'} npm run dev`)\n}\n\nasync function chooseFrontend() {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n console.log('[Honovel] No interactive terminal detected; including Nuxt. Pass --api-only or --frontend=none for an API-only project.')\n return 'nuxt'\n }\n\n const prompt = readline.createInterface({ input: process.stdin, output: process.stdout })\n try {\n console.log('\\nCloudflare Workers backend \u2014 choose your frontend:\\n\\n 1) Nuxt frontend (recommended)\\n 2) API-only (no frontend)\\n')\n const answer = await prompt.question('Select a project setup [1]: ')\n const selected = answer.trim().toLowerCase()\n if (!selected || selected === '1' || selected === 'nuxt') return 'nuxt'\n if (selected === '2' || selected === 'none' || selected === 'api-only') return 'none'\n throw new Error('Choose 1 for Nuxt or 2 for API-only.')\n } finally {\n prompt.close()\n }\n}\n\nmain().catch((error) => {\n console.error(`[Honovel] ${error.message}`)\n process.exitCode = 1\n})\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { spawnSync } from 'node:child_process'\nimport readline from 'node:readline/promises'\n\nconst packageRoot = fileURLToPath(new URL('../', import.meta.url))\nconst metadata = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'))\n\nasync function main() {\n const args = process.argv.slice(2)\n if (!args.length || args.includes('--help') || args.includes('-h')) {\n console.log('Usage: npm create honovel@latest <project-name> [--frontend=nuxt|none] [--api-only] [--no-install]\\nThe backend is always Cloudflare Workers. If no frontend option is given, the installer asks whether to include Nuxt (the non-interactive default).')\n return\n }\n const [name, ...options] = args\n if (!/^[a-z0-9][a-z0-9_-]*$/.test(name)) throw new Error('Use a project name containing lowercase letters, digits, hyphens, or underscores.')\n let frontend = 'nuxt'\n let frontendSelected = false\n let install = true\n for (let index = 0; index < options.length; index++) {\n const option = options[index]\n if (option === '--no-install') {\n install = false\n } else if (option === '--api-only' || option === '--frontend' || option.startsWith('--frontend=')) {\n if (frontendSelected) throw new Error('Select the frontend only once; do not combine --api-only and --frontend.')\n frontendSelected = true\n frontend = option === '--api-only' ? 'none'\n : option === '--frontend' ? options[++index] : option.slice('--frontend='.length)\n if (!['nuxt', 'none'].includes(frontend)) throw new Error('Supported frontend options: nuxt, none.')\n } else if (option === '--template' || option.startsWith('--template=')) {\n throw new Error('All projects use Cloudflare Workers. Use --frontend=nuxt, --frontend=none or --api-only.')\n } else throw new Error('Unknown option. Supported: --frontend=nuxt|none, --api-only, --no-install')\n }\n if (!frontendSelected) frontend = await chooseFrontend()\n if (name.length > 63) throw new Error('Cloudflare project names must be at most 63 characters long.')\n const target = path.resolve(name)\n if (fs.existsSync(target)) throw new Error(`${name} already exists. Choose a new directory.`)\n fs.mkdirSync(target)\n function copy(directory, destination) {\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const source = path.join(directory, entry.name)\n const outputName = entry.name === 'env.example.template'\n ? '.env.example'\n : entry.name.replace(/\\.template$/, '')\n const output = path.join(destination, outputName)\n if (entry.isDirectory()) {\n fs.mkdirSync(output, { recursive: true })\n copy(source, output)\n } else {\n if (/\\.(png|jpe?g|gif|webp|ico|woff2?)$/i.test(entry.name)) {\n fs.copyFileSync(source, output)\n continue\n }\n const content = fs.readFileSync(source, 'utf8')\n .replaceAll('__PROJECT_NAME__', name)\n .replaceAll('__WORKER_NAME__', name.replaceAll('_', '-'))\n .replaceAll('__HONOVEL_VERSION__', metadata.version)\n if (fs.existsSync(output) && ['package.json', 'wrangler.jsonc'].includes(outputName)) {\n const current = JSON.parse(fs.readFileSync(output, 'utf8'))\n const overlay = JSON.parse(content)\n const merged = { ...current, ...overlay }\n if (outputName === 'package.json') {\n for (const section of ['scripts', 'dependencies', 'devDependencies', 'overrides']) {\n merged[section] = { ...current[section], ...overlay[section] }\n }\n }\n fs.writeFileSync(output, JSON.stringify(merged, null, 2) + '\\n')\n } else fs.writeFileSync(output, content)\n }\n }\n }\n copy(path.join(packageRoot, 'template/common'), target)\n copy(path.join(packageRoot, 'template/cloudflare'), target)\n if (frontend === 'nuxt') copy(path.join(packageRoot, 'template/nuxt'), target)\n const envExamplePath = path.join(target, '.env.example')\n const envPath = path.join(target, '.env')\n if (fs.existsSync(envExamplePath) && !fs.existsSync(envPath)) {\n const localEnv = fs.readFileSync(envExamplePath, 'utf8')\n .replace(/^APP_DEBUG=.*$/m, 'APP_DEBUG=true')\n fs.writeFileSync(envPath, localEnv, { flag: 'wx' })\n }\n if (install) {\n // Drizzle Kit 0.31 still declares deprecated loader packages upstream.\n // Keep the scaffold output focused on actionable install/audit information.\n const result = spawnSync(process.platform === 'win32' ? 'npm.cmd' : 'npm', ['install', '--loglevel=error'], { cwd: target, stdio: 'inherit', shell: process.platform === 'win32' })\n if (result.error || result.status !== 0) {\n throw new Error(`Project created at ${target}, but npm install failed. Check the npm output above and run npm install there to retry.`)\n }\n }\n console.log(`Created ${target} (Cloudflare Workers, ${frontend === 'nuxt' ? 'Nuxt frontend' : 'API-only'})\\n\\nNext:\\n cd ${name}\\n${install ? '' : ' npm install\\n'} npm run dev`)\n}\n\nasync function chooseFrontend() {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n console.log('[Honovel] No interactive terminal detected; including Nuxt. Pass --api-only or --frontend=none for an API-only project.')\n return 'nuxt'\n }\n\n const prompt = readline.createInterface({ input: process.stdin, output: process.stdout })\n try {\n console.log('\\nCloudflare Workers backend \u2014 choose your frontend:\\n\\n 1) Nuxt frontend (recommended)\\n 2) API-only (no frontend)\\n')\n const answer = await prompt.question('Select a project setup [1]: ')\n const selected = answer.trim().toLowerCase()\n if (!selected || selected === '1' || selected === 'nuxt') return 'nuxt'\n if (selected === '2' || selected === 'none' || selected === 'api-only') return 'none'\n throw new Error('Choose 1 for Nuxt or 2 for API-only.')\n } finally {\n prompt.close()\n }\n}\n\nmain().catch((error) => {\n console.error(`[Honovel] ${error.message}`)\n process.exitCode = 1\n})\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -62,7 +62,7 @@ async function main() {
62
62
  const overlay = JSON.parse(content)
63
63
  const merged = { ...current, ...overlay }
64
64
  if (outputName === 'package.json') {
65
- for (const section of ['scripts', 'dependencies', 'devDependencies']) {
65
+ for (const section of ['scripts', 'dependencies', 'devDependencies', 'overrides']) {
66
66
  merged[section] = { ...current[section], ...overlay[section] }
67
67
  }
68
68
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-honovel",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Create a Cloudflare Workers application with an optional Nuxt frontend",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -34,14 +34,14 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "honovel": "__HONOVEL_VERSION__",
37
- "hono": "^4.13.8",
37
+ "hono": "^4.13.17",
38
38
  "drizzle-orm": "^0.45.3",
39
- "zod": "^4.6.5"
39
+ "zod": "^4.6.7"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^22.15.0",
43
43
  "drizzle-kit": "^0.31.11",
44
44
  "typescript": "^6.0.3",
45
- "wrangler": "4.142.0"
45
+ "wrangler": "4.158.0"
46
46
  }
47
47
  }
@@ -11,13 +11,21 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@fontsource-variable/manrope": "^5.2.8",
14
- "nuxt": "^4.5.2",
14
+ "nuxt": "^4.6.4",
15
15
  "vue": "^3.5.22"
16
16
  },
17
17
  "devDependencies": {
18
18
  "@tailwindcss/vite": "^4.1.0",
19
19
  "tailwindcss": "^4.1.0",
20
- "vite": "^7.1.9",
20
+ "vite": "^7.3.7",
21
21
  "vue-tsc": "^3.1.1"
22
+ },
23
+ "overrides": {
24
+ "@vercel/nft": {
25
+ "glob": "^14.0.2"
26
+ },
27
+ "readdir-glob": {
28
+ "minimatch": "^11.0.1"
29
+ }
22
30
  }
23
31
  }