@reverso/cli 0.1.1 → 0.1.4

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/dist/bin.js CHANGED
@@ -5,6 +5,7 @@
5
5
  import { program } from 'commander';
6
6
  import { buildCommand } from './commands/build.js';
7
7
  import { devCommand } from './commands/dev.js';
8
+ import { initCommand } from './commands/init.js';
8
9
  import { migrateCommand } from './commands/migrate.js';
9
10
  import { scanCommand } from './commands/scan.js';
10
11
  import { startCommand } from './commands/start.js';
@@ -14,6 +15,7 @@ program
14
15
  .description('Command line interface for Reverso CMS')
15
16
  .version(VERSION);
16
17
  // Register commands
18
+ initCommand(program);
17
19
  scanCommand(program);
18
20
  devCommand(program);
19
21
  buildCommand(program);
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,wCAAwC,CAAC;KACrD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,wCAAwC,CAAC;KACrD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * CLI commands.
3
3
  */
4
+ export { initCommand } from './init.js';
4
5
  export { scanCommand } from './scan.js';
5
6
  export { devCommand } from './dev.js';
6
7
  export { buildCommand } from './build.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * CLI commands.
3
3
  */
4
+ export { initCommand } from './init.js';
4
5
  export { scanCommand } from './scan.js';
5
6
  export { devCommand } from './dev.js';
6
7
  export { buildCommand } from './build.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Init command - initialize Reverso in an existing project.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function initCommand(program: Command): void;
6
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmGzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmOlD"}
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Init command - initialize Reverso in an existing project.
3
+ */
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import prompts from 'prompts';
7
+ import { existsSync, writeFileSync, mkdirSync } from 'node:fs';
8
+ import { resolve, join } from 'node:path';
9
+ import { execSync, spawn } from 'node:child_process';
10
+ import { showBanner, showSuccess, showTip } from '../ui/index.js';
11
+ const CONFIG_TEMPLATE = `import { defineConfig } from '@reverso/core';
12
+
13
+ export default defineConfig({
14
+ // Source directory to scan for data-reverso markers
15
+ srcDir: './src',
16
+
17
+ // Output directory for generated files
18
+ outputDir: '.reverso',
19
+
20
+ // Database configuration
21
+ database: {
22
+ type: 'sqlite',
23
+ url: '.reverso/dev.db',
24
+ },
25
+
26
+ // API server configuration
27
+ api: {
28
+ port: 4000,
29
+ cors: true,
30
+ },
31
+ });
32
+ `;
33
+ const EXAMPLE_COMPONENT = `// Example component with Reverso markers
34
+ // Add data-reverso attributes to make content editable
35
+
36
+ export function Hero() {
37
+ return (
38
+ <section className="hero">
39
+ <h1 data-reverso="home.hero.title" data-reverso-type="text">
40
+ Welcome to My Site
41
+ </h1>
42
+ <p data-reverso="home.hero.subtitle" data-reverso-type="textarea">
43
+ This content can be edited in the Reverso admin panel.
44
+ </p>
45
+ <img
46
+ data-reverso="home.hero.image"
47
+ data-reverso-type="image"
48
+ src="/placeholder.jpg"
49
+ alt="Hero image"
50
+ />
51
+ </section>
52
+ );
53
+ }
54
+ `;
55
+ function detectPackageManager(cwd) {
56
+ if (existsSync(resolve(cwd, 'bun.lockb')))
57
+ return 'bun';
58
+ if (existsSync(resolve(cwd, 'pnpm-lock.yaml')))
59
+ return 'pnpm';
60
+ if (existsSync(resolve(cwd, 'yarn.lock')))
61
+ return 'yarn';
62
+ return 'npm';
63
+ }
64
+ function getInstallCommand(pm, packages) {
65
+ const pkgList = packages.join(' ');
66
+ switch (pm) {
67
+ case 'bun':
68
+ return `bun add ${pkgList}`;
69
+ case 'pnpm':
70
+ return `pnpm add ${pkgList}`;
71
+ case 'yarn':
72
+ return `yarn add ${pkgList}`;
73
+ default:
74
+ return `npm install ${pkgList}`;
75
+ }
76
+ }
77
+ function runCommand(command, cwd) {
78
+ try {
79
+ execSync(command, { cwd, stdio: 'inherit' });
80
+ return true;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
86
+ function openBrowser(url) {
87
+ const platform = process.platform;
88
+ const command = platform === 'darwin' ? 'open' : platform === 'win32' ? 'start' : 'xdg-open';
89
+ try {
90
+ execSync(`${command} ${url}`, { stdio: 'ignore' });
91
+ }
92
+ catch {
93
+ // Ignore errors opening browser
94
+ }
95
+ }
96
+ export function initCommand(program) {
97
+ program
98
+ .command('init')
99
+ .description('Initialize Reverso in an existing project')
100
+ .option('-f, --force', 'Overwrite existing configuration', false)
101
+ .option('--example', 'Create an example component with markers', false)
102
+ .option('-y, --yes', 'Skip prompts and use defaults', false)
103
+ .action(async (options) => {
104
+ const spinner = ora();
105
+ // Show branded banner
106
+ showBanner({ version: '0.1.4' });
107
+ console.log(chalk.blue.bold('Initializing Reverso CMS...'));
108
+ console.log();
109
+ // Verify current directory exists
110
+ let cwd;
111
+ try {
112
+ cwd = process.cwd();
113
+ }
114
+ catch {
115
+ console.log(chalk.red('Error: Current directory does not exist.'));
116
+ console.log(chalk.gray(' Please navigate to a valid directory and try again.'));
117
+ process.exit(1);
118
+ }
119
+ // Check if package.json exists
120
+ const packageJsonPath = resolve(cwd, 'package.json');
121
+ if (!existsSync(packageJsonPath)) {
122
+ console.log(chalk.red('Error: No package.json found.'));
123
+ console.log(chalk.gray(' Please run this command in a Node.js project directory.'));
124
+ console.log(chalk.gray(' Or create a new project with: npx create-reverso@latest'));
125
+ process.exit(1);
126
+ }
127
+ const configPath = resolve(cwd, 'reverso.config.ts');
128
+ const configPathJs = resolve(cwd, 'reverso.config.js');
129
+ // Check if config already exists
130
+ if (!options.force && (existsSync(configPath) || existsSync(configPathJs))) {
131
+ console.log(chalk.yellow('Configuration file already exists.'));
132
+ console.log(chalk.gray(' Use --force to overwrite.'));
133
+ console.log();
134
+ return;
135
+ }
136
+ // Detect package manager
137
+ const packageManager = detectPackageManager(cwd);
138
+ console.log(chalk.gray(`Detected package manager: ${packageManager}`));
139
+ console.log();
140
+ // Create config file
141
+ spinner.start('Creating configuration file...');
142
+ try {
143
+ writeFileSync(configPath, CONFIG_TEMPLATE);
144
+ spinner.succeed(`Created ${chalk.cyan('reverso.config.ts')}`);
145
+ }
146
+ catch {
147
+ spinner.fail('Failed to create configuration file');
148
+ return;
149
+ }
150
+ // Create .reverso directory
151
+ spinner.start('Creating .reverso directory...');
152
+ try {
153
+ const reversoDir = resolve(cwd, '.reverso');
154
+ if (!existsSync(reversoDir)) {
155
+ mkdirSync(reversoDir, { recursive: true });
156
+ }
157
+ spinner.succeed(`Created ${chalk.cyan('.reverso/')} directory`);
158
+ }
159
+ catch {
160
+ spinner.fail('Failed to create .reverso directory');
161
+ }
162
+ // Create example component if requested
163
+ if (options.example) {
164
+ spinner.start('Creating example component...');
165
+ try {
166
+ const srcDir = resolve(cwd, 'src');
167
+ const componentsDir = join(srcDir, 'components');
168
+ if (!existsSync(componentsDir)) {
169
+ mkdirSync(componentsDir, { recursive: true });
170
+ }
171
+ const examplePath = join(componentsDir, 'Hero.tsx');
172
+ if (!existsSync(examplePath) || options.force) {
173
+ writeFileSync(examplePath, EXAMPLE_COMPONENT);
174
+ spinner.succeed(`Created ${chalk.cyan('src/components/Hero.tsx')}`);
175
+ }
176
+ else {
177
+ spinner.info('Example component already exists, skipping');
178
+ }
179
+ }
180
+ catch {
181
+ spinner.fail('Failed to create example component');
182
+ }
183
+ }
184
+ // Add to .gitignore if it exists
185
+ spinner.start('Updating .gitignore...');
186
+ try {
187
+ const gitignorePath = resolve(cwd, '.gitignore');
188
+ if (existsSync(gitignorePath)) {
189
+ const { readFileSync, appendFileSync } = await import('node:fs');
190
+ const content = readFileSync(gitignorePath, 'utf-8');
191
+ if (!content.includes('.reverso')) {
192
+ const additions = '\n# Reverso\n.reverso/\n';
193
+ appendFileSync(gitignorePath, additions);
194
+ spinner.succeed('Added .reverso/ to .gitignore');
195
+ }
196
+ else {
197
+ spinner.info('.reverso/ already in .gitignore');
198
+ }
199
+ }
200
+ else {
201
+ spinner.info('No .gitignore found, skipping');
202
+ }
203
+ }
204
+ catch {
205
+ spinner.info('Could not update .gitignore');
206
+ }
207
+ console.log();
208
+ // Install dependencies
209
+ const installDeps = options.yes || (await prompts({
210
+ type: 'confirm',
211
+ name: 'value',
212
+ message: 'Install Reverso dependencies?',
213
+ initial: true,
214
+ })).value;
215
+ if (installDeps) {
216
+ console.log();
217
+ spinner.start('Installing dependencies...');
218
+ const installCmd = getInstallCommand(packageManager, ['@reverso/core', '@reverso/cli']);
219
+ spinner.text = `Running: ${chalk.gray(installCmd)}`;
220
+ try {
221
+ execSync(installCmd, { cwd, stdio: 'pipe' });
222
+ spinner.succeed('Dependencies installed');
223
+ }
224
+ catch (error) {
225
+ spinner.fail('Failed to install dependencies');
226
+ console.log(chalk.gray(' You can install manually:'));
227
+ console.log(chalk.cyan(` ${installCmd}`));
228
+ }
229
+ }
230
+ // Show success message
231
+ console.log();
232
+ showSuccess('Reverso initialized successfully!', [
233
+ `${chalk.cyan('Config:')} reverso.config.ts`,
234
+ `${chalk.cyan('Output:')} .reverso/`,
235
+ ]);
236
+ // Ask about scanning
237
+ const runScan = options.yes || (await prompts({
238
+ type: 'confirm',
239
+ name: 'value',
240
+ message: 'Scan your project for data-reverso markers now?',
241
+ initial: true,
242
+ })).value;
243
+ if (runScan) {
244
+ console.log();
245
+ spinner.start('Scanning project...');
246
+ try {
247
+ execSync('npx reverso scan', { cwd, stdio: 'pipe' });
248
+ spinner.succeed('Project scanned');
249
+ }
250
+ catch {
251
+ spinner.warn('No markers found yet. Add data-reverso attributes to your components.');
252
+ }
253
+ // Ask about starting dev server
254
+ const startDev = options.yes || (await prompts({
255
+ type: 'confirm',
256
+ name: 'value',
257
+ message: 'Start the development server?',
258
+ initial: true,
259
+ })).value;
260
+ if (startDev) {
261
+ console.log();
262
+ console.log(chalk.blue.bold('Starting Reverso dev server...'));
263
+ console.log();
264
+ console.log(chalk.gray(' Admin panel: ') + chalk.cyan.underline('http://localhost:4000/admin'));
265
+ console.log(chalk.gray(' API: ') + chalk.cyan.underline('http://localhost:4000/api'));
266
+ console.log();
267
+ showTip('Press Ctrl+C to stop the server');
268
+ console.log();
269
+ // Open browser after a short delay
270
+ setTimeout(() => {
271
+ openBrowser('http://localhost:4000/admin');
272
+ }, 2000);
273
+ // Start dev server (this will block)
274
+ const child = spawn('npx', ['reverso', 'dev'], {
275
+ cwd,
276
+ stdio: 'inherit',
277
+ shell: true,
278
+ });
279
+ child.on('error', () => {
280
+ console.log(chalk.red('Failed to start dev server'));
281
+ });
282
+ // Keep process running
283
+ process.on('SIGINT', () => {
284
+ child.kill('SIGINT');
285
+ process.exit(0);
286
+ });
287
+ return; // Don't show next steps since we're running dev
288
+ }
289
+ }
290
+ // Show next steps only if not starting dev
291
+ console.log();
292
+ console.log(chalk.bold('Next steps:'));
293
+ console.log();
294
+ console.log(chalk.gray(' 1. Add markers to your components:'));
295
+ console.log(chalk.cyan(' <h1 data-reverso="page.section.field" data-reverso-type="text">'));
296
+ console.log();
297
+ console.log(chalk.gray(' 2. Start the development server:'));
298
+ console.log(chalk.cyan(' npx reverso dev'));
299
+ console.log();
300
+ console.log(chalk.gray(' 3. Open the admin panel:'));
301
+ console.log(chalk.cyan(' http://localhost:4000/admin'));
302
+ console.log();
303
+ });
304
+ }
305
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -17,5 +17,5 @@
17
17
  * ```
18
18
  */
19
19
  export declare const VERSION = "0.0.0";
20
- export { scanCommand, devCommand, migrateCommand } from './commands/index.js';
20
+ export { initCommand, scanCommand, devCommand, migrateCommand } from './commands/index.js';
21
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -18,5 +18,5 @@
18
18
  */
19
19
  export const VERSION = '0.0.0';
20
20
  // Export commands for programmatic use
21
- export { scanCommand, devCommand, migrateCommand } from './commands/index.js';
21
+ export { initCommand, scanCommand, devCommand, migrateCommand } from './commands/index.js';
22
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,uCAAuC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,uCAAuC;AACvC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * CLI branding and welcome banner.
3
+ */
4
+ export type LogoStyle = 'default' | 'compact' | 'minimal';
5
+ /**
6
+ * Generate ASCII art logo
7
+ */
8
+ export declare function generateLogo(style?: LogoStyle): string;
9
+ /**
10
+ * Display the welcome banner
11
+ */
12
+ export declare function showBanner(options?: {
13
+ version?: string;
14
+ compact?: boolean;
15
+ }): void;
16
+ /**
17
+ * Show a success message in a box
18
+ */
19
+ export declare function showSuccess(title: string, messages: string[]): void;
20
+ /**
21
+ * Show an error message in a box
22
+ */
23
+ export declare function showError(title: string, messages: string[]): void;
24
+ /**
25
+ * Show a tip/hint box
26
+ */
27
+ export declare function showTip(content: string): void;
28
+ /**
29
+ * Show next steps in a formatted way
30
+ */
31
+ export declare function showNextSteps(steps: Array<{
32
+ step: string;
33
+ command?: string;
34
+ }>): void;
35
+ /**
36
+ * Show a divider line
37
+ */
38
+ export declare function showDivider(): void;
39
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4CH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,SAAqB,GAAG,MAAM,CAQjE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAsClF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAWnE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAWjE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAU7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAWpF;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * CLI branding and welcome banner.
3
+ */
4
+ import chalk from 'chalk';
5
+ import gradient from 'gradient-string';
6
+ import boxen from 'boxen';
7
+ // Custom gradient colors (blue to purple)
8
+ const reversoGradient = gradient(['#3b82f6', '#8b5cf6', '#d946ef']);
9
+ // Official Reverso ASCII art logo
10
+ const REVERSO_LOGO = `
11
+ ███████████████▓▒
12
+ ▒███░ ▓███░
13
+ ▒███ ▒███░
14
+ ▒███ ████
15
+ ▒███ ███▓ ░██▓▓██▓ ████████▒ ▓█████▓ ▒██▓▓██▓ ░▓█░ ▒████░ ▓██▓████ ▓██▓███▓
16
+ ▒███ ▓███ ░██░ ░██▓ ░███▒ ▓█░ ▒██░ ▒██▓ ▒████▓█▒▒███▒ ▒██ ▒█▒ ███ ███░
17
+ ▒██▒ ▒███ ▒██▓ ▓██▒ ▒███░ ░█▒ ▒██▒ ███░ ████ ███ █▒ ▒███ ███░
18
+ ░░ ▒▓▓▓████░ ███▒ ████ ████ █▓ ░███░ ░███▓ ███▒ ▓███▓ ████ ▓███
19
+ ▒███░ ████ ░████▒▒▒▒▒▒▒▒▒░ ███▓ ▓█ ▒███▓▒▒▒▒▒▒▒▒▒ ███▒ ░██████░ ███▒ ▒███░
20
+ ▒███░ ████░ ░███░ ░███▒ ░█░ ▒███░ ███▒ ▒█████▒ ███▒ ▒███░
21
+ ▒███░ ▓███▒ ███▓ ▒ ▒███░█▒ ███▒ ▒ ███▒ ▒███▒ ▓███ ▓███
22
+ ▒███░ ▓███▒ ░███▒ █▓ ▓███▓ ░███▒ █▒ ███▒ █▒ ▓██▒ ░███░ ░███
23
+ ████▒ ▒████░ █████▒▒▒██░ ███ █████▒▒▓██ ░███▓ ██▒ ██▒ ▓██▒ ▒██▒
24
+ ░░░░░░░░░ ░░░░░ ▒▓▓▓▒ ▒ ░▒▓▓▓▒ ░░░░░░░░ ░▒▒▓▓▓▒ ▒▒▓▓▒░
25
+ `;
26
+ // Compact version for smaller terminals
27
+ const REVERSO_LOGO_COMPACT = `
28
+ ██████╗ ███████╗██╗ ██╗███████╗██████╗ ███████╗ ██████╗
29
+ ██╔══██╗██╔════╝██║ ██║██╔════╝██╔══██╗██╔════╝██╔═══██╗
30
+ ██████╔╝█████╗ ██║ ██║█████╗ ██████╔╝███████╗██║ ██║
31
+ ██╔══██╗██╔══╝ ╚██╗ ██╔╝██╔══╝ ██╔══██╗╚════██║██║ ██║
32
+ ██║ ██║███████╗ ╚████╔╝ ███████╗██║ ██║███████║╚██████╔╝
33
+ ╚═╝ ╚═╝╚══════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝
34
+ `;
35
+ // Minimal version
36
+ const REVERSO_LOGO_MINIMAL = `
37
+ ╦═╗ ╔═╗ ╦ ╦ ╔═╗ ╦═╗ ╔═╗ ╔═╗
38
+ ╠╦╝ ║╣ ╚╗╔╝ ║╣ ╠╦╝ ╚═╗ ║ ║
39
+ ╩╚═ ╚═╝ ╚╝ ╚═╝ ╩╚═ ╚═╝ ╚═╝
40
+ `;
41
+ /**
42
+ * Generate ASCII art logo
43
+ */
44
+ export function generateLogo(style = 'default') {
45
+ const logos = {
46
+ default: REVERSO_LOGO,
47
+ compact: REVERSO_LOGO_COMPACT,
48
+ minimal: REVERSO_LOGO_MINIMAL,
49
+ };
50
+ return reversoGradient(logos[style]);
51
+ }
52
+ /**
53
+ * Display the welcome banner
54
+ */
55
+ export function showBanner(options) {
56
+ const { version = '0.1.0', compact = false } = options ?? {};
57
+ if (compact) {
58
+ // Compact banner for subcommands
59
+ console.log();
60
+ console.log(reversoGradient(' ▶ Reverso CMS') + chalk.gray(` v${version}`));
61
+ console.log();
62
+ return;
63
+ }
64
+ // Full banner
65
+ console.log();
66
+ console.log(generateLogo('compact'));
67
+ console.log();
68
+ const tagline = chalk.bold('The front-to-back CMS for modern web development');
69
+ const description = chalk.gray('Add markers to your React code. Get a fully-featured CMS automatically.');
70
+ console.log(tagline);
71
+ console.log(description);
72
+ console.log();
73
+ // Info box
74
+ const infoContent = [
75
+ `${chalk.cyan('Version')} ${version}`,
76
+ `${chalk.cyan('Docs')} ${chalk.underline('https://reverso.dev/docs')}`,
77
+ `${chalk.cyan('GitHub')} ${chalk.underline('https://github.com/hogrid/reverso')}`,
78
+ ].join('\n');
79
+ console.log(boxen(infoContent, {
80
+ padding: 1,
81
+ margin: { top: 0, bottom: 1, left: 0, right: 0 },
82
+ borderStyle: 'round',
83
+ borderColor: 'gray',
84
+ }));
85
+ }
86
+ /**
87
+ * Show a success message in a box
88
+ */
89
+ export function showSuccess(title, messages) {
90
+ const content = messages.join('\n');
91
+ console.log(boxen(content, {
92
+ title: chalk.green.bold(`✓ ${title}`),
93
+ padding: 1,
94
+ margin: { top: 1, bottom: 1, left: 0, right: 0 },
95
+ borderStyle: 'round',
96
+ borderColor: 'green',
97
+ }));
98
+ }
99
+ /**
100
+ * Show an error message in a box
101
+ */
102
+ export function showError(title, messages) {
103
+ const content = messages.join('\n');
104
+ console.log(boxen(content, {
105
+ title: chalk.red.bold(`✖ ${title}`),
106
+ padding: 1,
107
+ margin: { top: 1, bottom: 1, left: 0, right: 0 },
108
+ borderStyle: 'round',
109
+ borderColor: 'red',
110
+ }));
111
+ }
112
+ /**
113
+ * Show a tip/hint box
114
+ */
115
+ export function showTip(content) {
116
+ console.log(boxen(content, {
117
+ title: chalk.yellow.bold('💡 Tip'),
118
+ padding: 1,
119
+ margin: { top: 0, bottom: 1, left: 0, right: 0 },
120
+ borderStyle: 'round',
121
+ borderColor: 'yellow',
122
+ }));
123
+ }
124
+ /**
125
+ * Show next steps in a formatted way
126
+ */
127
+ export function showNextSteps(steps) {
128
+ console.log(chalk.bold('\n📋 Next Steps:\n'));
129
+ steps.forEach((item, index) => {
130
+ const number = chalk.cyan.bold(`${index + 1}.`);
131
+ console.log(` ${number} ${item.step}`);
132
+ if (item.command) {
133
+ console.log(chalk.gray(` $ ${chalk.cyan(item.command)}`));
134
+ }
135
+ console.log();
136
+ });
137
+ }
138
+ /**
139
+ * Show a divider line
140
+ */
141
+ export function showDivider() {
142
+ console.log(chalk.gray('─'.repeat(50)));
143
+ }
144
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CLI UI components.
3
+ */
4
+ export { generateLogo, showBanner, showSuccess, showError, showTip, showNextSteps, showDivider, type LogoStyle, } from './banner.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,EACX,KAAK,SAAS,GACf,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CLI UI components.
3
+ */
4
+ export { generateLogo, showBanner, showSuccess, showError, showTip, showNextSteps, showDivider, } from './banner.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,GAEZ,MAAM,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reverso/cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Command line interface for Reverso CMS",
5
5
  "homepage": "https://reverso.dev/docs/packages/cli",
6
6
  "bugs": {
@@ -35,17 +35,22 @@
35
35
  "clean": "rm -rf dist .turbo"
36
36
  },
37
37
  "dependencies": {
38
+ "@reverso/api": "^0.1.1",
38
39
  "@reverso/core": "^0.1.1",
39
- "@reverso/scanner": "^0.1.1",
40
40
  "@reverso/db": "^0.1.1",
41
- "@reverso/api": "^0.1.1",
42
- "commander": "^14.0.2",
41
+ "@reverso/scanner": "^0.1.1",
42
+ "boxen": "^8.0.1",
43
43
  "chalk": "^5.4.1",
44
+ "commander": "^14.0.2",
45
+ "dotenv": "^17.2.3",
46
+ "figlet": "^1.10.0",
47
+ "gradient-string": "^3.0.0",
44
48
  "ora": "^9.1.0",
45
- "prompts": "^2.4.2",
46
- "dotenv": "^17.2.3"
49
+ "prompts": "^2.4.2"
47
50
  },
48
51
  "devDependencies": {
52
+ "@types/figlet": "^1.7.0",
53
+ "@types/gradient-string": "^1.1.6",
49
54
  "@types/node": "^22.10.7",
50
55
  "@types/prompts": "^2.4.9",
51
56
  "typescript": "^5.7.3",