@snowieedev/create-vertex-app 0.1.0

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.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env node
2
+ import * as p from '@clack/prompts';
3
+ import pc from 'picocolors';
4
+ import fs from 'fs-extra';
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = path.dirname(__filename);
9
+ async function main() {
10
+ console.clear();
11
+ p.intro(`${pc.bgBlue(pc.white(' VERTEX '))} ${pc.dim('v0.1.0')}`);
12
+ const project = await p.group({
13
+ name: () => p.text({
14
+ message: 'What is your project named?',
15
+ placeholder: 'my-vertex-app',
16
+ validate: (value) => {
17
+ if (!value)
18
+ return 'Please enter a name.';
19
+ if (value.match(/[^a-zA-Z0-9-_]/))
20
+ return 'Project name can only contain letters, numbers, dashes, and underscores.';
21
+ },
22
+ }),
23
+ packageManager: () => p.select({
24
+ message: 'Which package manager do you want to use?',
25
+ options: [
26
+ { value: 'npm', label: 'npm' },
27
+ { value: 'pnpm', label: 'pnpm', hint: 'recommended' },
28
+ { value: 'yarn', label: 'yarn' },
29
+ { value: 'bun', label: 'bun' },
30
+ ],
31
+ }),
32
+ setup: () => p.select({
33
+ message: 'How would you like to set up your project?',
34
+ options: [
35
+ { value: 'default', label: 'Default (TypeScript, ESLint, Tailwind, shadcn/ui, Git)' },
36
+ { value: 'custom', label: 'Custom (Choose individual tools)' },
37
+ ],
38
+ }),
39
+ }, {
40
+ onCancel: () => {
41
+ p.cancel('Operation cancelled.');
42
+ process.exit(0);
43
+ },
44
+ });
45
+ let features = {
46
+ typescript: true,
47
+ eslint: true,
48
+ tailwind: true,
49
+ motion: true,
50
+ ui: 'shadcn',
51
+ git: true,
52
+ aliases: true,
53
+ appRouter: true,
54
+ };
55
+ if (project.setup === 'custom') {
56
+ const custom = await p.group({
57
+ typescript: () => p.confirm({ message: 'Would you like to use TypeScript?', initialValue: true }),
58
+ eslint: () => p.confirm({ message: 'Would you like to use ESLint?', initialValue: true }),
59
+ tailwind: () => p.confirm({ message: 'Would you like to use Tailwind CSS?', initialValue: true }),
60
+ animation: () => p.select({
61
+ message: 'Which animation library?',
62
+ options: [
63
+ { value: 'motion', label: 'Motion' },
64
+ { value: 'gsap', label: 'GSAP' },
65
+ { value: 'anime', label: 'Anime.js' },
66
+ { value: 'lottie', label: 'Lottie' },
67
+ { value: 'none', label: 'None' },
68
+ ]
69
+ }),
70
+ ui: () => p.select({
71
+ message: 'Which UI library?',
72
+ options: [
73
+ { value: 'shadcn', label: 'shadcn/ui' },
74
+ { value: 'magic', label: 'Magic UI' },
75
+ { value: 'none', label: 'None' },
76
+ ]
77
+ }),
78
+ git: () => p.confirm({ message: 'Initialize a new git repository?', initialValue: true }),
79
+ aliases: () => p.confirm({ message: 'Configure path aliases (@/*)?', initialValue: true }),
80
+ appRouter: () => p.confirm({ message: 'Use App Router?', initialValue: true }),
81
+ }, {
82
+ onCancel: () => {
83
+ p.cancel('Operation cancelled.');
84
+ process.exit(0);
85
+ },
86
+ });
87
+ features = { ...features, ...custom, motion: custom.animation === 'motion', ui: custom.ui };
88
+ }
89
+ const s = p.spinner();
90
+ s.start('Scaffolding project');
91
+ const targetDir = path.resolve(process.cwd(), project.name);
92
+ if (fs.existsSync(targetDir)) {
93
+ s.stop('Project already exists');
94
+ p.cancel(`Directory ${project.name} already exists. Please choose a different name.`);
95
+ process.exit(1);
96
+ }
97
+ await fs.mkdir(targetDir, { recursive: true });
98
+ // Locate templates - in prod this would be resolved from @snowieedev/vertex-templates or similar
99
+ // For Phase 1 we assume the templates package is installed nearby or shipped with the CLI
100
+ // We'll mimic this by assuming a specific relative path or a known location for the template.
101
+ // Actually, since we are in the monorepo for now, we can resolve it up the tree, but for a distributed tool
102
+ // we would bundle templates. Let's just create some dummy files if templates aren't found,
103
+ // or point to the installed @snowieedev/vertex-templates package.
104
+ // Since we're in the monorepo, let's use the local packages/templates/default folder for this phase.
105
+ // We'll resolve it assuming we are inside `packages/create-vertex-app/dist`.
106
+ const templateDir = path.resolve(__dirname, '../../templates/default');
107
+ if (fs.existsSync(templateDir)) {
108
+ await fs.copy(templateDir, targetDir);
109
+ // Rename .tmpl files
110
+ if (fs.existsSync(path.resolve(targetDir, 'package.json.tmpl'))) {
111
+ const pkgContent = await fs.readFile(path.resolve(targetDir, 'package.json.tmpl'), 'utf-8');
112
+ await fs.writeFile(path.resolve(targetDir, 'package.json'), pkgContent.replace('{{projectName}}', project.name));
113
+ await fs.remove(path.resolve(targetDir, 'package.json.tmpl'));
114
+ }
115
+ }
116
+ else {
117
+ // Fallback if not found
118
+ await fs.writeFile(path.resolve(targetDir, 'package.json'), JSON.stringify({
119
+ name: project.name,
120
+ version: "0.1.0",
121
+ private: true,
122
+ scripts: { dev: "vertex dev", build: "vertex build" },
123
+ devDependencies: { "@snowieedev/vertex-cli": "latest" }
124
+ }, null, 2));
125
+ await fs.mkdir(path.resolve(targetDir, 'src'));
126
+ await fs.writeFile(path.resolve(targetDir, 'src/index.ts'), "console.log('Hello VERTEX');");
127
+ }
128
+ // Handle git initialization
129
+ if (features.git) {
130
+ try {
131
+ const { execSync } = await import('node:child_process');
132
+ execSync('git init', { cwd: targetDir, stdio: 'ignore' });
133
+ }
134
+ catch (e) {
135
+ // ignore
136
+ }
137
+ }
138
+ s.stop('Project scaffolded');
139
+ p.note(`Next Steps:
140
+ 1. cd ${project.name}
141
+ 2. ${project.packageManager} install
142
+ 3. ${project.packageManager} run dev`, 'Project created successfully!');
143
+ p.outro(pc.green('You are ready to build!'));
144
+ }
145
+ main().catch(console.error);
146
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@snowieedev/create-vertex-app",
3
+ "version": "0.1.0",
4
+ "description": "Create a new VERTEX project",
5
+ "bin": {
6
+ "@snowieedev/create-vertex-app": "./dist/index.js"
7
+ },
8
+ "type": "module",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "dependencies": {
13
+ "@clack/prompts": "^0.7.0",
14
+ "picocolors": "^1.0.0",
15
+ "fs-extra": "^11.2.0"
16
+ },
17
+ "devDependencies": {
18
+ "typescript": "^5.4.0",
19
+ "@types/node": "^20.11.0",
20
+ "@types/fs-extra": "^11.0.4"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "dev": "tsc --watch",
25
+ "clean": "rm -rf dist"
26
+ }
27
+ }