@reverso/cli 0.1.0 → 0.1.3

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;AAqDzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoHlD"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Init command - initialize Reverso in an existing project.
3
+ */
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import { existsSync, writeFileSync, mkdirSync } from 'node:fs';
7
+ import { resolve, join } from 'node:path';
8
+ import { showBanner, showSuccess, showNextSteps } from '../ui/index.js';
9
+ const CONFIG_TEMPLATE = `import { defineConfig } from '@reverso/core';
10
+
11
+ export default defineConfig({
12
+ // Source directory to scan for data-reverso markers
13
+ srcDir: './src',
14
+
15
+ // Output directory for generated files
16
+ outputDir: '.reverso',
17
+
18
+ // Database configuration
19
+ database: {
20
+ type: 'sqlite',
21
+ url: '.reverso/dev.db',
22
+ },
23
+
24
+ // API server configuration
25
+ api: {
26
+ port: 4000,
27
+ cors: true,
28
+ },
29
+ });
30
+ `;
31
+ const EXAMPLE_COMPONENT = `// Example component with Reverso markers
32
+ // Add data-reverso attributes to make content editable
33
+
34
+ export function Hero() {
35
+ return (
36
+ <section className="hero">
37
+ <h1 data-reverso="home.hero.title" data-reverso-type="text">
38
+ Welcome to My Site
39
+ </h1>
40
+ <p data-reverso="home.hero.subtitle" data-reverso-type="textarea">
41
+ This content can be edited in the Reverso admin panel.
42
+ </p>
43
+ <img
44
+ data-reverso="home.hero.image"
45
+ data-reverso-type="image"
46
+ src="/placeholder.jpg"
47
+ alt="Hero image"
48
+ />
49
+ </section>
50
+ );
51
+ }
52
+ `;
53
+ export function initCommand(program) {
54
+ program
55
+ .command('init')
56
+ .description('Initialize Reverso in an existing project')
57
+ .option('-f, --force', 'Overwrite existing configuration', false)
58
+ .option('--example', 'Create an example component with markers', false)
59
+ .action(async (options) => {
60
+ const spinner = ora();
61
+ // Show branded banner
62
+ showBanner({ version: '0.1.2' });
63
+ console.log(chalk.blue.bold('Initializing Reverso CMS...'));
64
+ console.log();
65
+ // Verify current directory exists
66
+ let cwd;
67
+ try {
68
+ cwd = process.cwd();
69
+ }
70
+ catch {
71
+ console.log(chalk.red('✖ Error: Current directory does not exist.'));
72
+ console.log(chalk.gray(' Please navigate to a valid directory and try again.'));
73
+ process.exit(1);
74
+ }
75
+ const configPath = resolve(cwd, 'reverso.config.ts');
76
+ const configPathJs = resolve(cwd, 'reverso.config.js');
77
+ // Check if config already exists
78
+ if (!options.force && (existsSync(configPath) || existsSync(configPathJs))) {
79
+ console.log(chalk.yellow('⚠ Configuration file already exists.'));
80
+ console.log(chalk.gray(' Use --force to overwrite.'));
81
+ console.log();
82
+ return;
83
+ }
84
+ // Create config file
85
+ spinner.start('Creating configuration file...');
86
+ try {
87
+ writeFileSync(configPath, CONFIG_TEMPLATE);
88
+ spinner.succeed(`Created ${chalk.cyan('reverso.config.ts')}`);
89
+ }
90
+ catch {
91
+ spinner.fail('Failed to create configuration file');
92
+ return;
93
+ }
94
+ // Create .reverso directory
95
+ spinner.start('Creating .reverso directory...');
96
+ try {
97
+ const reversoDir = resolve(cwd, '.reverso');
98
+ if (!existsSync(reversoDir)) {
99
+ mkdirSync(reversoDir, { recursive: true });
100
+ }
101
+ spinner.succeed(`Created ${chalk.cyan('.reverso/')} directory`);
102
+ }
103
+ catch {
104
+ spinner.fail('Failed to create .reverso directory');
105
+ }
106
+ // Create example component if requested
107
+ if (options.example) {
108
+ spinner.start('Creating example component...');
109
+ try {
110
+ const srcDir = resolve(cwd, 'src');
111
+ const componentsDir = join(srcDir, 'components');
112
+ if (!existsSync(componentsDir)) {
113
+ mkdirSync(componentsDir, { recursive: true });
114
+ }
115
+ const examplePath = join(componentsDir, 'Hero.tsx');
116
+ if (!existsSync(examplePath) || options.force) {
117
+ writeFileSync(examplePath, EXAMPLE_COMPONENT);
118
+ spinner.succeed(`Created ${chalk.cyan('src/components/Hero.tsx')}`);
119
+ }
120
+ else {
121
+ spinner.info('Example component already exists, skipping');
122
+ }
123
+ }
124
+ catch {
125
+ spinner.fail('Failed to create example component');
126
+ }
127
+ }
128
+ // Add to .gitignore if it exists
129
+ spinner.start('Updating .gitignore...');
130
+ try {
131
+ const gitignorePath = resolve(cwd, '.gitignore');
132
+ if (existsSync(gitignorePath)) {
133
+ const { readFileSync, appendFileSync } = await import('node:fs');
134
+ const content = readFileSync(gitignorePath, 'utf-8');
135
+ if (!content.includes('.reverso')) {
136
+ const additions = '\n# Reverso\n.reverso/\n';
137
+ appendFileSync(gitignorePath, additions);
138
+ spinner.succeed('Added .reverso/ to .gitignore');
139
+ }
140
+ else {
141
+ spinner.info('.reverso/ already in .gitignore');
142
+ }
143
+ }
144
+ else {
145
+ spinner.info('No .gitignore found, skipping');
146
+ }
147
+ }
148
+ catch {
149
+ spinner.info('Could not update .gitignore');
150
+ }
151
+ // Show success message
152
+ showSuccess('Reverso initialized successfully!', [
153
+ `${chalk.cyan('Config:')} reverso.config.ts`,
154
+ `${chalk.cyan('Output:')} .reverso/`,
155
+ ]);
156
+ // Show next steps
157
+ showNextSteps([
158
+ { step: 'Install dependencies', command: 'npm install @reverso/core' },
159
+ { step: 'Add markers to your components', command: '<h1 data-reverso="page.section.field" data-reverso-type="text">' },
160
+ { step: 'Scan and start the dev server', command: 'npx reverso scan && npx reverso dev' },
161
+ { step: 'Open admin panel', command: 'http://localhost:4000/admin' },
162
+ ]);
163
+ });
164
+ }
165
+ //# 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.0",
3
+ "version": "0.1.3",
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/core": "workspace:*",
39
- "@reverso/scanner": "workspace:*",
40
- "@reverso/db": "workspace:*",
41
- "@reverso/api": "workspace:*",
42
- "commander": "^14.0.2",
38
+ "@reverso/api": "^0.1.1",
39
+ "@reverso/core": "^0.1.1",
40
+ "@reverso/db": "^0.1.1",
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",