create-reverso 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.
- package/README.md +61 -0
- package/dist/bin.d.ts +7 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +11 -0
- package/dist/bin.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +668 -0
- package/dist/index.js.map +1 -0
- package/package.json +72 -0
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# create-reverso
|
|
2
|
+
|
|
3
|
+
CLI installer for Reverso CMS - The front-to-back CMS.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# npm
|
|
9
|
+
npx create-reverso my-project
|
|
10
|
+
|
|
11
|
+
# pnpm
|
|
12
|
+
pnpm create reverso my-project
|
|
13
|
+
|
|
14
|
+
# yarn
|
|
15
|
+
yarn create reverso my-project
|
|
16
|
+
|
|
17
|
+
# bun
|
|
18
|
+
bun create reverso my-project
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Interactive Wizard
|
|
22
|
+
|
|
23
|
+
The wizard will prompt you for:
|
|
24
|
+
|
|
25
|
+
1. **Project name** - Name of your project
|
|
26
|
+
2. **Framework** - Next.js, Vite, or Astro
|
|
27
|
+
3. **Database** - SQLite (local) or PostgreSQL
|
|
28
|
+
4. **TypeScript** - Enable/disable TypeScript
|
|
29
|
+
5. **Package manager** - npm, pnpm, yarn, or bun
|
|
30
|
+
6. **Git** - Initialize git repository
|
|
31
|
+
|
|
32
|
+
## What's Created
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
my-project/
|
|
36
|
+
├── src/
|
|
37
|
+
│ └── components/
|
|
38
|
+
│ └── Hero.tsx # Example component with markers
|
|
39
|
+
├── reverso.config.ts # CMS configuration
|
|
40
|
+
├── package.json
|
|
41
|
+
├── tsconfig.json
|
|
42
|
+
└── README.md
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Quick Start
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx create-reverso my-project
|
|
49
|
+
cd my-project
|
|
50
|
+
npm run dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Then open http://localhost:4000/admin to access the admin panel.
|
|
54
|
+
|
|
55
|
+
## Documentation
|
|
56
|
+
|
|
57
|
+
See [https://reverso.dev/docs/packages/create-reverso](https://reverso.dev/docs/packages/create-reverso)
|
|
58
|
+
|
|
59
|
+
## License
|
|
60
|
+
|
|
61
|
+
MIT
|
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|
package/dist/bin.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* create-reverso CLI entry point.
|
|
4
|
+
* Run with: npx create-reverso
|
|
5
|
+
*/
|
|
6
|
+
import { createReverso } from './index.js';
|
|
7
|
+
createReverso().catch((error) => {
|
|
8
|
+
console.error(error);
|
|
9
|
+
process.exit(1);
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=bin.js.map
|
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* create-reverso
|
|
3
|
+
*
|
|
4
|
+
* CLI installer for Reverso CMS - The front-to-back CMS.
|
|
5
|
+
* Run with: npx create-reverso@latest
|
|
6
|
+
*/
|
|
7
|
+
export declare const VERSION = "0.0.0";
|
|
8
|
+
/**
|
|
9
|
+
* Main entry point for the create-reverso CLI.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createReverso(): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,eAAO,MAAM,OAAO,UAAU,CAAC;AAY/B;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBnD"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,668 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* create-reverso
|
|
3
|
+
*
|
|
4
|
+
* CLI installer for Reverso CMS - The front-to-back CMS.
|
|
5
|
+
* Run with: npx create-reverso@latest
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'node:child_process';
|
|
8
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { join, resolve } from 'node:path';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import ora from 'ora';
|
|
12
|
+
import prompts from 'prompts';
|
|
13
|
+
export const VERSION = '0.0.0';
|
|
14
|
+
/**
|
|
15
|
+
* Main entry point for the create-reverso CLI.
|
|
16
|
+
*/
|
|
17
|
+
export async function createReverso() {
|
|
18
|
+
console.log();
|
|
19
|
+
console.log(chalk.bold.blue(' ╭─────────────────────────────────────╮'));
|
|
20
|
+
console.log(chalk.bold.blue(' │ │'));
|
|
21
|
+
console.log(chalk.bold.blue(' │ ') + chalk.bold.white('Reverso CMS') + chalk.bold.blue(' │'));
|
|
22
|
+
console.log(chalk.bold.blue(' │ ') + chalk.gray('The front-to-back headless CMS') + chalk.bold.blue(' │'));
|
|
23
|
+
console.log(chalk.bold.blue(' │ │'));
|
|
24
|
+
console.log(chalk.bold.blue(' ╰─────────────────────────────────────╯'));
|
|
25
|
+
console.log();
|
|
26
|
+
// Get project configuration from user
|
|
27
|
+
const config = await promptConfig();
|
|
28
|
+
if (!config) {
|
|
29
|
+
console.log(chalk.gray('Setup cancelled.'));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Create the project
|
|
33
|
+
await createProject(config);
|
|
34
|
+
// Print success message
|
|
35
|
+
printSuccessMessage(config);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Prompt user for project configuration.
|
|
39
|
+
*/
|
|
40
|
+
async function promptConfig() {
|
|
41
|
+
const response = await prompts([
|
|
42
|
+
{
|
|
43
|
+
type: 'text',
|
|
44
|
+
name: 'projectName',
|
|
45
|
+
message: 'Project name:',
|
|
46
|
+
initial: 'my-reverso-app',
|
|
47
|
+
validate: (value) => {
|
|
48
|
+
if (!value)
|
|
49
|
+
return 'Project name is required';
|
|
50
|
+
if (!/^[a-z0-9-]+$/.test(value)) {
|
|
51
|
+
return 'Project name can only contain lowercase letters, numbers, and hyphens';
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'select',
|
|
58
|
+
name: 'framework',
|
|
59
|
+
message: 'Framework:',
|
|
60
|
+
choices: [
|
|
61
|
+
{ title: 'Next.js', value: 'nextjs', description: 'React framework with SSR/SSG' },
|
|
62
|
+
{ title: 'Vite + React', value: 'vite', description: 'Fast build tool with React' },
|
|
63
|
+
{ title: 'Astro', value: 'astro', description: 'Content-focused static site builder' },
|
|
64
|
+
],
|
|
65
|
+
initial: 0,
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'select',
|
|
69
|
+
name: 'database',
|
|
70
|
+
message: 'Database:',
|
|
71
|
+
choices: [
|
|
72
|
+
{ title: 'SQLite', value: 'sqlite', description: 'Simple file-based database (great for development)' },
|
|
73
|
+
{ title: 'PostgreSQL', value: 'postgres', description: 'Production-ready relational database' },
|
|
74
|
+
],
|
|
75
|
+
initial: 0,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: 'select',
|
|
79
|
+
name: 'packageManager',
|
|
80
|
+
message: 'Package manager:',
|
|
81
|
+
choices: [
|
|
82
|
+
{ title: 'pnpm', value: 'pnpm', description: 'Fast, disk space efficient' },
|
|
83
|
+
{ title: 'npm', value: 'npm', description: 'Default Node.js package manager' },
|
|
84
|
+
{ title: 'yarn', value: 'yarn', description: 'Classic Yarn' },
|
|
85
|
+
{ title: 'bun', value: 'bun', description: 'Fast all-in-one JavaScript runtime' },
|
|
86
|
+
],
|
|
87
|
+
initial: 0,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
type: 'confirm',
|
|
91
|
+
name: 'typescript',
|
|
92
|
+
message: 'Use TypeScript?',
|
|
93
|
+
initial: true,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
type: 'confirm',
|
|
97
|
+
name: 'git',
|
|
98
|
+
message: 'Initialize git repository?',
|
|
99
|
+
initial: true,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'confirm',
|
|
103
|
+
name: 'install',
|
|
104
|
+
message: 'Install dependencies?',
|
|
105
|
+
initial: true,
|
|
106
|
+
},
|
|
107
|
+
], {
|
|
108
|
+
onCancel: () => {
|
|
109
|
+
return false;
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
// Check if user cancelled
|
|
113
|
+
if (!response.projectName) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return response;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create the project with the given configuration.
|
|
120
|
+
*/
|
|
121
|
+
async function createProject(config) {
|
|
122
|
+
const spinner = ora();
|
|
123
|
+
const projectPath = resolve(config.projectName);
|
|
124
|
+
// Check if directory already exists
|
|
125
|
+
if (existsSync(projectPath)) {
|
|
126
|
+
console.log(chalk.red(`Error: Directory "${config.projectName}" already exists.`));
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
// Create project directory
|
|
130
|
+
spinner.start('Creating project directory...');
|
|
131
|
+
mkdirSync(projectPath, { recursive: true });
|
|
132
|
+
mkdirSync(join(projectPath, 'src'), { recursive: true });
|
|
133
|
+
mkdirSync(join(projectPath, 'src', 'components'), { recursive: true });
|
|
134
|
+
mkdirSync(join(projectPath, '.reverso'), { recursive: true });
|
|
135
|
+
spinner.succeed('Project directory created');
|
|
136
|
+
// Generate files
|
|
137
|
+
spinner.start('Generating project files...');
|
|
138
|
+
// package.json
|
|
139
|
+
writeFileSync(join(projectPath, 'package.json'), generatePackageJson(config));
|
|
140
|
+
// TypeScript config
|
|
141
|
+
if (config.typescript) {
|
|
142
|
+
writeFileSync(join(projectPath, 'tsconfig.json'), generateTsConfig(config));
|
|
143
|
+
}
|
|
144
|
+
// Reverso config
|
|
145
|
+
writeFileSync(join(projectPath, `reverso.config.${config.typescript ? 'ts' : 'js'}`), generateReversoConfig(config));
|
|
146
|
+
// .gitignore
|
|
147
|
+
writeFileSync(join(projectPath, '.gitignore'), generateGitignore());
|
|
148
|
+
// Example components
|
|
149
|
+
writeFileSync(join(projectPath, 'src', 'components', `Hero.${config.typescript ? 'tsx' : 'jsx'}`), generateHeroComponent(config));
|
|
150
|
+
writeFileSync(join(projectPath, 'src', 'components', `Features.${config.typescript ? 'tsx' : 'jsx'}`), generateFeaturesComponent(config));
|
|
151
|
+
writeFileSync(join(projectPath, 'src', 'components', `About.${config.typescript ? 'tsx' : 'jsx'}`), generateAboutComponent(config));
|
|
152
|
+
// Framework-specific files
|
|
153
|
+
if (config.framework === 'nextjs') {
|
|
154
|
+
generateNextJsFiles(projectPath, config);
|
|
155
|
+
}
|
|
156
|
+
else if (config.framework === 'vite') {
|
|
157
|
+
generateViteFiles(projectPath, config);
|
|
158
|
+
}
|
|
159
|
+
else if (config.framework === 'astro') {
|
|
160
|
+
generateAstroFiles(projectPath, config);
|
|
161
|
+
}
|
|
162
|
+
spinner.succeed('Project files generated');
|
|
163
|
+
// Initialize git
|
|
164
|
+
if (config.git) {
|
|
165
|
+
spinner.start('Initializing git repository...');
|
|
166
|
+
try {
|
|
167
|
+
execSync('git init', { cwd: projectPath, stdio: 'ignore' });
|
|
168
|
+
spinner.succeed('Git repository initialized');
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
spinner.warn('Failed to initialize git repository');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Install dependencies
|
|
175
|
+
if (config.install) {
|
|
176
|
+
spinner.start(`Installing dependencies with ${config.packageManager}...`);
|
|
177
|
+
try {
|
|
178
|
+
const installCmd = getInstallCommand(config.packageManager);
|
|
179
|
+
execSync(installCmd, { cwd: projectPath, stdio: 'ignore' });
|
|
180
|
+
spinner.succeed('Dependencies installed');
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
spinner.warn('Failed to install dependencies. Run install manually.');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Generate package.json content.
|
|
189
|
+
*/
|
|
190
|
+
function generatePackageJson(config) {
|
|
191
|
+
const deps = {
|
|
192
|
+
'@reverso/cli': '^0.0.0',
|
|
193
|
+
react: '^18.3.1',
|
|
194
|
+
'react-dom': '^18.3.1',
|
|
195
|
+
};
|
|
196
|
+
const devDeps = {};
|
|
197
|
+
if (config.typescript) {
|
|
198
|
+
devDeps.typescript = '^5.4.0';
|
|
199
|
+
devDeps['@types/react'] = '^18.3.0';
|
|
200
|
+
devDeps['@types/react-dom'] = '^18.3.0';
|
|
201
|
+
}
|
|
202
|
+
// Framework-specific dependencies
|
|
203
|
+
if (config.framework === 'nextjs') {
|
|
204
|
+
deps.next = '^14.2.0';
|
|
205
|
+
}
|
|
206
|
+
else if (config.framework === 'vite') {
|
|
207
|
+
devDeps.vite = '^5.4.0';
|
|
208
|
+
devDeps['@vitejs/plugin-react'] = '^4.3.0';
|
|
209
|
+
}
|
|
210
|
+
else if (config.framework === 'astro') {
|
|
211
|
+
deps.astro = '^4.12.0';
|
|
212
|
+
deps['@astrojs/react'] = '^3.6.0';
|
|
213
|
+
}
|
|
214
|
+
const packageJson = {
|
|
215
|
+
name: config.projectName,
|
|
216
|
+
version: '0.1.0',
|
|
217
|
+
private: true,
|
|
218
|
+
scripts: {
|
|
219
|
+
dev: 'reverso dev',
|
|
220
|
+
build: config.framework === 'nextjs' ? 'next build' : config.framework === 'vite' ? 'vite build' : 'astro build',
|
|
221
|
+
start: config.framework === 'nextjs' ? 'next start' : config.framework === 'vite' ? 'vite preview' : 'astro preview',
|
|
222
|
+
scan: 'reverso scan',
|
|
223
|
+
migrate: 'reverso migrate',
|
|
224
|
+
},
|
|
225
|
+
dependencies: deps,
|
|
226
|
+
devDependencies: devDeps,
|
|
227
|
+
};
|
|
228
|
+
return JSON.stringify(packageJson, null, 2);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Generate TypeScript config.
|
|
232
|
+
*/
|
|
233
|
+
function generateTsConfig(config) {
|
|
234
|
+
const compilerOptions = {
|
|
235
|
+
target: 'ES2020',
|
|
236
|
+
useDefineForClassFields: true,
|
|
237
|
+
lib: ['ES2020', 'DOM', 'DOM.Iterable'],
|
|
238
|
+
module: 'ESNext',
|
|
239
|
+
skipLibCheck: true,
|
|
240
|
+
moduleResolution: 'bundler',
|
|
241
|
+
allowImportingTsExtensions: true,
|
|
242
|
+
resolveJsonModule: true,
|
|
243
|
+
isolatedModules: true,
|
|
244
|
+
noEmit: true,
|
|
245
|
+
jsx: 'react-jsx',
|
|
246
|
+
strict: true,
|
|
247
|
+
noUnusedLocals: true,
|
|
248
|
+
noUnusedParameters: true,
|
|
249
|
+
noFallthroughCasesInSwitch: true,
|
|
250
|
+
};
|
|
251
|
+
if (config.framework === 'nextjs') {
|
|
252
|
+
compilerOptions.plugins = [{ name: 'next' }];
|
|
253
|
+
compilerOptions.paths = { '@/*': ['./src/*'] };
|
|
254
|
+
}
|
|
255
|
+
const tsConfig = {
|
|
256
|
+
compilerOptions,
|
|
257
|
+
include: ['src'],
|
|
258
|
+
exclude: ['node_modules'],
|
|
259
|
+
};
|
|
260
|
+
return JSON.stringify(tsConfig, null, 2);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Generate Reverso config file.
|
|
264
|
+
*/
|
|
265
|
+
function generateReversoConfig(config) {
|
|
266
|
+
const ext = config.typescript ? 'ts' : 'js';
|
|
267
|
+
const exportType = config.typescript ? 'export default' : 'module.exports =';
|
|
268
|
+
const typeAnnotation = config.typescript ? ': ReversoConfig' : '';
|
|
269
|
+
const typeImport = config.typescript ? "import type { ReversoConfig } from '@reverso/core';\n\n" : '';
|
|
270
|
+
return `${typeImport}${exportType} {
|
|
271
|
+
// Source directory to scan for data-reverso markers
|
|
272
|
+
srcDir: './src',
|
|
273
|
+
|
|
274
|
+
// Output directory for generated schema
|
|
275
|
+
outputDir: '.reverso',
|
|
276
|
+
|
|
277
|
+
// Database configuration
|
|
278
|
+
database: {
|
|
279
|
+
type: '${config.database}',
|
|
280
|
+
${config.database === 'sqlite' ? "url: '.reverso/dev.db'" : "url: process.env.DATABASE_URL || 'postgres://localhost:5432/reverso'"},
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
// API server configuration
|
|
284
|
+
api: {
|
|
285
|
+
port: 3001,
|
|
286
|
+
cors: true,
|
|
287
|
+
},
|
|
288
|
+
|
|
289
|
+
// Admin panel configuration
|
|
290
|
+
admin: {
|
|
291
|
+
title: '${config.projectName}',
|
|
292
|
+
},
|
|
293
|
+
}${typeAnnotation};
|
|
294
|
+
`;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Generate .gitignore content.
|
|
298
|
+
*/
|
|
299
|
+
function generateGitignore() {
|
|
300
|
+
return `# Dependencies
|
|
301
|
+
node_modules/
|
|
302
|
+
|
|
303
|
+
# Build output
|
|
304
|
+
dist/
|
|
305
|
+
.next/
|
|
306
|
+
.astro/
|
|
307
|
+
|
|
308
|
+
# Reverso
|
|
309
|
+
.reverso/dev.db
|
|
310
|
+
.reverso/dev.db-shm
|
|
311
|
+
.reverso/dev.db-wal
|
|
312
|
+
.reverso/uploads/
|
|
313
|
+
|
|
314
|
+
# Environment
|
|
315
|
+
.env
|
|
316
|
+
.env.local
|
|
317
|
+
.env.*.local
|
|
318
|
+
|
|
319
|
+
# IDE
|
|
320
|
+
.vscode/
|
|
321
|
+
.idea/
|
|
322
|
+
|
|
323
|
+
# OS
|
|
324
|
+
.DS_Store
|
|
325
|
+
Thumbs.db
|
|
326
|
+
|
|
327
|
+
# Logs
|
|
328
|
+
*.log
|
|
329
|
+
npm-debug.log*
|
|
330
|
+
`;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Generate Hero component with Reverso markers.
|
|
334
|
+
*/
|
|
335
|
+
function generateHeroComponent(config) {
|
|
336
|
+
const props = config.typescript ? ': { className?: string }' : '';
|
|
337
|
+
return `/**
|
|
338
|
+
* Hero component with Reverso CMS markers.
|
|
339
|
+
*
|
|
340
|
+
* The data-reverso attribute follows the pattern: page.section.field
|
|
341
|
+
* Example: home.hero.title = page "home", section "hero", field "title"
|
|
342
|
+
*/
|
|
343
|
+
|
|
344
|
+
export function Hero({ className }${props}) {
|
|
345
|
+
return (
|
|
346
|
+
<section className={className}>
|
|
347
|
+
<h1 data-reverso="home.hero.title" data-reverso-type="text">
|
|
348
|
+
Welcome to Your Site
|
|
349
|
+
</h1>
|
|
350
|
+
|
|
351
|
+
<p data-reverso="home.hero.subtitle" data-reverso-type="textarea">
|
|
352
|
+
This is an example component with Reverso CMS markers.
|
|
353
|
+
Edit this content in the admin panel.
|
|
354
|
+
</p>
|
|
355
|
+
|
|
356
|
+
<img
|
|
357
|
+
data-reverso="home.hero.image"
|
|
358
|
+
data-reverso-type="image"
|
|
359
|
+
src="/placeholder.jpg"
|
|
360
|
+
alt="Hero image"
|
|
361
|
+
/>
|
|
362
|
+
|
|
363
|
+
<a
|
|
364
|
+
data-reverso="home.hero.ctaText"
|
|
365
|
+
data-reverso-type="text"
|
|
366
|
+
href="#"
|
|
367
|
+
>
|
|
368
|
+
Get Started
|
|
369
|
+
</a>
|
|
370
|
+
</section>
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
`;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Generate Features component with repeater pattern.
|
|
377
|
+
*/
|
|
378
|
+
function generateFeaturesComponent(config) {
|
|
379
|
+
const props = config.typescript ? ': { className?: string }' : '';
|
|
380
|
+
const featureType = config.typescript ? ': { icon: string; title: string; description: string }' : '';
|
|
381
|
+
return `/**
|
|
382
|
+
* Features component demonstrating repeater pattern.
|
|
383
|
+
*
|
|
384
|
+
* The $ symbol in the path indicates a repeater item:
|
|
385
|
+
* home.features.$.title = each item in the "features" repeater has a "title"
|
|
386
|
+
*/
|
|
387
|
+
|
|
388
|
+
export function Features({ className }${props}) {
|
|
389
|
+
// Example features - content comes from CMS
|
|
390
|
+
const features${config.typescript ? ': Array<{ icon: string; title: string; description: string }>' : ''} = [
|
|
391
|
+
{ icon: '🚀', title: 'Fast', description: 'Lightning fast performance' },
|
|
392
|
+
{ icon: '🔒', title: 'Secure', description: 'Enterprise-grade security' },
|
|
393
|
+
{ icon: '🎨', title: 'Beautiful', description: 'Modern, responsive design' },
|
|
394
|
+
];
|
|
395
|
+
|
|
396
|
+
return (
|
|
397
|
+
<section className={className}>
|
|
398
|
+
<h2 data-reverso="home.features.heading" data-reverso-type="text">
|
|
399
|
+
Why Choose Us
|
|
400
|
+
</h2>
|
|
401
|
+
<p data-reverso="home.features.subheading" data-reverso-type="textarea">
|
|
402
|
+
Everything you need to build amazing websites.
|
|
403
|
+
</p>
|
|
404
|
+
|
|
405
|
+
<div className="grid">
|
|
406
|
+
{features.map((feature, index) => (
|
|
407
|
+
<div key={index} className="feature-card">
|
|
408
|
+
<span
|
|
409
|
+
data-reverso="home.features.$.icon"
|
|
410
|
+
data-reverso-type="icon"
|
|
411
|
+
>
|
|
412
|
+
{feature.icon}
|
|
413
|
+
</span>
|
|
414
|
+
<h3
|
|
415
|
+
data-reverso="home.features.$.title"
|
|
416
|
+
data-reverso-type="text"
|
|
417
|
+
>
|
|
418
|
+
{feature.title}
|
|
419
|
+
</h3>
|
|
420
|
+
<p
|
|
421
|
+
data-reverso="home.features.$.description"
|
|
422
|
+
data-reverso-type="textarea"
|
|
423
|
+
>
|
|
424
|
+
{feature.description}
|
|
425
|
+
</p>
|
|
426
|
+
</div>
|
|
427
|
+
))}
|
|
428
|
+
</div>
|
|
429
|
+
</section>
|
|
430
|
+
);
|
|
431
|
+
}
|
|
432
|
+
`;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Generate About component with various field types.
|
|
436
|
+
*/
|
|
437
|
+
function generateAboutComponent(config) {
|
|
438
|
+
const props = config.typescript ? ': { className?: string }' : '';
|
|
439
|
+
return `/**
|
|
440
|
+
* About component demonstrating various field types.
|
|
441
|
+
*/
|
|
442
|
+
|
|
443
|
+
export function About({ className }${props}) {
|
|
444
|
+
return (
|
|
445
|
+
<section className={className}>
|
|
446
|
+
<h2 data-reverso="about.intro.title" data-reverso-type="text">
|
|
447
|
+
About Us
|
|
448
|
+
</h2>
|
|
449
|
+
|
|
450
|
+
<div
|
|
451
|
+
data-reverso="about.intro.content"
|
|
452
|
+
data-reverso-type="wysiwyg"
|
|
453
|
+
data-reverso-label="About Content"
|
|
454
|
+
>
|
|
455
|
+
<p>We are a passionate team dedicated to building great products.</p>
|
|
456
|
+
<p>Our mission is to make content management simple and intuitive.</p>
|
|
457
|
+
</div>
|
|
458
|
+
|
|
459
|
+
<div className="stats">
|
|
460
|
+
<div>
|
|
461
|
+
<span
|
|
462
|
+
data-reverso="about.stats.years"
|
|
463
|
+
data-reverso-type="number"
|
|
464
|
+
data-reverso-label="Years in Business"
|
|
465
|
+
>
|
|
466
|
+
10
|
|
467
|
+
</span>
|
|
468
|
+
<span>Years</span>
|
|
469
|
+
</div>
|
|
470
|
+
<div>
|
|
471
|
+
<span
|
|
472
|
+
data-reverso="about.stats.clients"
|
|
473
|
+
data-reverso-type="number"
|
|
474
|
+
data-reverso-label="Happy Clients"
|
|
475
|
+
>
|
|
476
|
+
500
|
|
477
|
+
</span>
|
|
478
|
+
<span>Clients</span>
|
|
479
|
+
</div>
|
|
480
|
+
<div>
|
|
481
|
+
<span
|
|
482
|
+
data-reverso="about.stats.projects"
|
|
483
|
+
data-reverso-type="number"
|
|
484
|
+
data-reverso-label="Completed Projects"
|
|
485
|
+
>
|
|
486
|
+
1000
|
|
487
|
+
</span>
|
|
488
|
+
<span>Projects</span>
|
|
489
|
+
</div>
|
|
490
|
+
</div>
|
|
491
|
+
|
|
492
|
+
<img
|
|
493
|
+
data-reverso="about.team.photo"
|
|
494
|
+
data-reverso-type="image"
|
|
495
|
+
data-reverso-label="Team Photo"
|
|
496
|
+
src="/team.jpg"
|
|
497
|
+
alt="Our team"
|
|
498
|
+
/>
|
|
499
|
+
</section>
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
`;
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Generate Next.js specific files.
|
|
506
|
+
*/
|
|
507
|
+
function generateNextJsFiles(projectPath, config) {
|
|
508
|
+
const ext = config.typescript ? 'tsx' : 'jsx';
|
|
509
|
+
// Create app directory
|
|
510
|
+
mkdirSync(join(projectPath, 'src', 'app'), { recursive: true });
|
|
511
|
+
// Layout
|
|
512
|
+
writeFileSync(join(projectPath, 'src', 'app', `layout.${ext}`), `export default function RootLayout({ children }${config.typescript ? ': { children: React.ReactNode }' : ''}) {
|
|
513
|
+
return (
|
|
514
|
+
<html lang="en">
|
|
515
|
+
<body>{children}</body>
|
|
516
|
+
</html>
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
`);
|
|
520
|
+
// Page
|
|
521
|
+
writeFileSync(join(projectPath, 'src', 'app', `page.${ext}`), `import { Hero } from '@/components/Hero';
|
|
522
|
+
import { Features } from '@/components/Features';
|
|
523
|
+
import { About } from '@/components/About';
|
|
524
|
+
|
|
525
|
+
export default function HomePage() {
|
|
526
|
+
return (
|
|
527
|
+
<main>
|
|
528
|
+
<Hero />
|
|
529
|
+
<Features />
|
|
530
|
+
<About />
|
|
531
|
+
</main>
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
`);
|
|
535
|
+
// next.config.js
|
|
536
|
+
writeFileSync(join(projectPath, 'next.config.js'), `/** @type {import('next').NextConfig} */
|
|
537
|
+
const nextConfig = {
|
|
538
|
+
// Enable React strict mode
|
|
539
|
+
reactStrictMode: true,
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
module.exports = nextConfig;
|
|
543
|
+
`);
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Generate Vite specific files.
|
|
547
|
+
*/
|
|
548
|
+
function generateViteFiles(projectPath, config) {
|
|
549
|
+
const ext = config.typescript ? 'tsx' : 'jsx';
|
|
550
|
+
// vite.config
|
|
551
|
+
writeFileSync(join(projectPath, `vite.config.${config.typescript ? 'ts' : 'js'}`), `import { defineConfig } from 'vite';
|
|
552
|
+
import react from '@vitejs/plugin-react';
|
|
553
|
+
|
|
554
|
+
export default defineConfig({
|
|
555
|
+
plugins: [react()],
|
|
556
|
+
});
|
|
557
|
+
`);
|
|
558
|
+
// index.html
|
|
559
|
+
writeFileSync(join(projectPath, 'index.html'), `<!DOCTYPE html>
|
|
560
|
+
<html lang="en">
|
|
561
|
+
<head>
|
|
562
|
+
<meta charset="UTF-8" />
|
|
563
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
564
|
+
<title>${config.projectName}</title>
|
|
565
|
+
</head>
|
|
566
|
+
<body>
|
|
567
|
+
<div id="root"></div>
|
|
568
|
+
<script type="module" src="/src/main.${ext}"></script>
|
|
569
|
+
</body>
|
|
570
|
+
</html>
|
|
571
|
+
`);
|
|
572
|
+
// main.tsx
|
|
573
|
+
writeFileSync(join(projectPath, 'src', `main.${ext}`), `import React from 'react';
|
|
574
|
+
import ReactDOM from 'react-dom/client';
|
|
575
|
+
import { Hero } from './components/Hero';
|
|
576
|
+
import { Features } from './components/Features';
|
|
577
|
+
import { About } from './components/About';
|
|
578
|
+
|
|
579
|
+
ReactDOM.createRoot(document.getElementById('root')${config.typescript ? '!' : ''}).render(
|
|
580
|
+
<React.StrictMode>
|
|
581
|
+
<main>
|
|
582
|
+
<Hero />
|
|
583
|
+
<Features />
|
|
584
|
+
<About />
|
|
585
|
+
</main>
|
|
586
|
+
</React.StrictMode>
|
|
587
|
+
);
|
|
588
|
+
`);
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Generate Astro specific files.
|
|
592
|
+
*/
|
|
593
|
+
function generateAstroFiles(projectPath, config) {
|
|
594
|
+
// Create pages directory
|
|
595
|
+
mkdirSync(join(projectPath, 'src', 'pages'), { recursive: true });
|
|
596
|
+
// astro.config.mjs
|
|
597
|
+
writeFileSync(join(projectPath, 'astro.config.mjs'), `import { defineConfig } from 'astro/config';
|
|
598
|
+
import react from '@astrojs/react';
|
|
599
|
+
|
|
600
|
+
export default defineConfig({
|
|
601
|
+
integrations: [react()],
|
|
602
|
+
});
|
|
603
|
+
`);
|
|
604
|
+
// Index page
|
|
605
|
+
writeFileSync(join(projectPath, 'src', 'pages', 'index.astro'), `---
|
|
606
|
+
import { Hero } from '../components/Hero';
|
|
607
|
+
import { Features } from '../components/Features';
|
|
608
|
+
import { About } from '../components/About';
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
<html lang="en">
|
|
612
|
+
<head>
|
|
613
|
+
<meta charset="utf-8" />
|
|
614
|
+
<meta name="viewport" content="width=device-width" />
|
|
615
|
+
<title>${config.projectName}</title>
|
|
616
|
+
</head>
|
|
617
|
+
<body>
|
|
618
|
+
<main>
|
|
619
|
+
<Hero client:load />
|
|
620
|
+
<Features client:load />
|
|
621
|
+
<About client:load />
|
|
622
|
+
</main>
|
|
623
|
+
</body>
|
|
624
|
+
</html>
|
|
625
|
+
`);
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* Get the install command for the package manager.
|
|
629
|
+
*/
|
|
630
|
+
function getInstallCommand(packageManager) {
|
|
631
|
+
switch (packageManager) {
|
|
632
|
+
case 'npm':
|
|
633
|
+
return 'npm install';
|
|
634
|
+
case 'pnpm':
|
|
635
|
+
return 'pnpm install';
|
|
636
|
+
case 'yarn':
|
|
637
|
+
return 'yarn';
|
|
638
|
+
case 'bun':
|
|
639
|
+
return 'bun install';
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
/**
|
|
643
|
+
* Print success message with next steps.
|
|
644
|
+
*/
|
|
645
|
+
function printSuccessMessage(config) {
|
|
646
|
+
console.log();
|
|
647
|
+
console.log(chalk.green.bold('✓ Project created successfully!'));
|
|
648
|
+
console.log();
|
|
649
|
+
console.log(chalk.bold('Next steps:'));
|
|
650
|
+
console.log();
|
|
651
|
+
console.log(chalk.gray(' 1. ') + chalk.white(`cd ${config.projectName}`));
|
|
652
|
+
if (!config.install) {
|
|
653
|
+
console.log(chalk.gray(' 2. ') + chalk.white(`${config.packageManager} install`));
|
|
654
|
+
console.log(chalk.gray(' 3. ') + chalk.white(`${config.packageManager} run dev`));
|
|
655
|
+
}
|
|
656
|
+
else {
|
|
657
|
+
console.log(chalk.gray(' 2. ') + chalk.white(`${config.packageManager} run dev`));
|
|
658
|
+
}
|
|
659
|
+
console.log();
|
|
660
|
+
console.log(chalk.gray('This will:'));
|
|
661
|
+
console.log(chalk.gray(' • Scan your components for data-reverso markers'));
|
|
662
|
+
console.log(chalk.gray(' • Start the API server'));
|
|
663
|
+
console.log(chalk.gray(' • Open the admin panel'));
|
|
664
|
+
console.log();
|
|
665
|
+
console.log(chalk.bold('Documentation: ') + chalk.blue('https://reverso.dev/docs'));
|
|
666
|
+
console.log();
|
|
667
|
+
}
|
|
668
|
+
//# 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,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-reverso",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI installer for Reverso CMS - The front-to-back CMS",
|
|
5
|
+
"homepage": "https://reverso.dev/docs/packages/create-reverso",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/hogrid/reverso/issues"
|
|
8
|
+
},
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=20.0.0"
|
|
11
|
+
},
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"bin": {
|
|
16
|
+
"create-reverso": "./dist/bin.js"
|
|
17
|
+
},
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"templates",
|
|
27
|
+
"README.md"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc -p tsconfig.build.json",
|
|
31
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
32
|
+
"typecheck": "tsc --noEmit",
|
|
33
|
+
"lint": "biome check src/",
|
|
34
|
+
"test": "vitest run --passWithNoTests",
|
|
35
|
+
"test:watch": "vitest",
|
|
36
|
+
"clean": "rm -rf dist .turbo"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@reverso/cli": "workspace:*",
|
|
40
|
+
"commander": "^14.0.2",
|
|
41
|
+
"chalk": "^5.4.1",
|
|
42
|
+
"ora": "^9.1.0",
|
|
43
|
+
"prompts": "^2.4.2",
|
|
44
|
+
"validate-npm-package-name": "^7.0.2",
|
|
45
|
+
"fs-extra": "^11.2.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/fs-extra": "^11.0.4",
|
|
49
|
+
"@types/node": "^22.10.7",
|
|
50
|
+
"@types/prompts": "^2.4.9",
|
|
51
|
+
"@types/validate-npm-package-name": "^4.0.2",
|
|
52
|
+
"typescript": "^5.7.3",
|
|
53
|
+
"vitest": "^2.1.8"
|
|
54
|
+
},
|
|
55
|
+
"publishConfig": {
|
|
56
|
+
"access": "public"
|
|
57
|
+
},
|
|
58
|
+
"repository": {
|
|
59
|
+
"type": "git",
|
|
60
|
+
"url": "https://github.com/hogrid/reverso.git",
|
|
61
|
+
"directory": "packages/create-reverso"
|
|
62
|
+
},
|
|
63
|
+
"keywords": [
|
|
64
|
+
"reverso",
|
|
65
|
+
"cms",
|
|
66
|
+
"create",
|
|
67
|
+
"installer",
|
|
68
|
+
"cli"
|
|
69
|
+
],
|
|
70
|
+
"author": "Emerson Nunes <emerson@hogrid.com>",
|
|
71
|
+
"license": "MIT"
|
|
72
|
+
}
|