@digilogiclabs/create-saas-app 1.9.2 → 1.9.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.
Files changed (81) hide show
  1. package/bin/index.js +1 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/commands/add.d.ts +6 -0
  4. package/dist/cli/commands/add.d.ts.map +1 -0
  5. package/dist/cli/commands/add.js +39 -0
  6. package/dist/cli/commands/add.js.map +1 -0
  7. package/dist/cli/commands/create.d.ts +28 -0
  8. package/dist/cli/commands/create.d.ts.map +1 -0
  9. package/dist/cli/commands/create.js +130 -0
  10. package/dist/cli/commands/create.js.map +1 -0
  11. package/dist/cli/commands/index.d.ts +4 -0
  12. package/dist/cli/commands/index.d.ts.map +1 -0
  13. package/dist/cli/commands/index.js +20 -0
  14. package/dist/cli/commands/index.js.map +1 -0
  15. package/dist/cli/commands/update.d.ts +6 -0
  16. package/dist/cli/commands/update.d.ts.map +1 -0
  17. package/dist/cli/commands/update.js +68 -0
  18. package/dist/cli/commands/update.js.map +1 -0
  19. package/dist/cli/index.d.ts +4 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +59 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/cli/prompts/index.d.ts +2 -0
  24. package/dist/cli/prompts/index.d.ts.map +1 -0
  25. package/dist/cli/prompts/index.js +18 -0
  26. package/dist/cli/prompts/index.js.map +1 -0
  27. package/dist/cli/prompts/project-setup.d.ts +5 -0
  28. package/dist/cli/prompts/project-setup.d.ts.map +1 -0
  29. package/dist/cli/prompts/project-setup.js +251 -0
  30. package/dist/cli/prompts/project-setup.js.map +1 -0
  31. package/dist/cli/utils/git.d.ts +9 -0
  32. package/dist/cli/utils/git.d.ts.map +1 -0
  33. package/dist/cli/utils/git.js +77 -0
  34. package/dist/cli/utils/git.js.map +1 -0
  35. package/dist/cli/utils/index.d.ts +5 -0
  36. package/dist/cli/utils/index.d.ts.map +1 -0
  37. package/dist/cli/utils/index.js +21 -0
  38. package/dist/cli/utils/index.js.map +1 -0
  39. package/dist/cli/utils/logger.d.ts +16 -0
  40. package/dist/cli/utils/logger.d.ts.map +1 -0
  41. package/dist/cli/utils/logger.js +55 -0
  42. package/dist/cli/utils/logger.js.map +1 -0
  43. package/dist/cli/utils/package-manager.d.ts +8 -0
  44. package/dist/cli/utils/package-manager.d.ts.map +1 -0
  45. package/dist/cli/utils/package-manager.js +92 -0
  46. package/dist/cli/utils/package-manager.js.map +1 -0
  47. package/dist/cli/utils/spinner.d.ts +7 -0
  48. package/dist/cli/utils/spinner.d.ts.map +1 -0
  49. package/dist/cli/utils/spinner.js +48 -0
  50. package/dist/cli/utils/spinner.js.map +1 -0
  51. package/dist/cli/validators/dependencies.d.ts +15 -0
  52. package/dist/cli/validators/dependencies.d.ts.map +1 -0
  53. package/dist/cli/validators/dependencies.js +108 -0
  54. package/dist/cli/validators/dependencies.js.map +1 -0
  55. package/dist/cli/validators/index.d.ts +3 -0
  56. package/dist/cli/validators/index.d.ts.map +1 -0
  57. package/dist/cli/validators/index.js +19 -0
  58. package/dist/cli/validators/index.js.map +1 -0
  59. package/dist/cli/validators/project-name.d.ts +5 -0
  60. package/dist/cli/validators/project-name.d.ts.map +1 -0
  61. package/dist/cli/validators/project-name.js +151 -0
  62. package/dist/cli/validators/project-name.js.map +1 -0
  63. package/dist/generators/file-processor.d.ts +28 -0
  64. package/dist/generators/file-processor.d.ts.map +1 -0
  65. package/dist/generators/file-processor.js +203 -0
  66. package/dist/generators/file-processor.js.map +1 -0
  67. package/dist/generators/index.d.ts +4 -0
  68. package/dist/generators/index.d.ts.map +1 -0
  69. package/dist/generators/index.js +20 -0
  70. package/dist/generators/index.js.map +1 -0
  71. package/dist/generators/package-installer.d.ts +29 -0
  72. package/dist/generators/package-installer.d.ts.map +1 -0
  73. package/dist/generators/package-installer.js +167 -0
  74. package/dist/generators/package-installer.js.map +1 -0
  75. package/dist/generators/template-generator.d.ts +48 -0
  76. package/dist/generators/template-generator.d.ts.map +1 -0
  77. package/dist/generators/template-generator.js +275 -0
  78. package/dist/generators/template-generator.js.map +1 -0
  79. package/package.json +2 -2
  80. package/dist/index.js +0 -1173
  81. package/dist/index.js.map +0 -1
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getProjectPrompts = getProjectPrompts;
7
+ exports.getAuthSetupPrompts = getAuthSetupPrompts;
8
+ exports.getThemeCustomizationPrompts = getThemeCustomizationPrompts;
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const project_name_1 = require("../validators/project-name");
11
+ const logger_1 = require("../utils/logger");
12
+ async function getProjectPrompts(initialConfig) {
13
+ logger_1.logger.title('🛠️ Project Configuration');
14
+ const questions = [
15
+ {
16
+ type: 'input',
17
+ name: 'name',
18
+ message: 'Project name:',
19
+ default: initialConfig.name,
20
+ validate: (input) => {
21
+ if (!(0, project_name_1.validateProjectName)(input)) {
22
+ const suggestion = (0, project_name_1.suggestProjectName)(input);
23
+ return `Invalid project name. Try: ${suggestion}`;
24
+ }
25
+ return true;
26
+ },
27
+ filter: (input) => input.trim(),
28
+ },
29
+ {
30
+ type: 'list',
31
+ name: 'platform',
32
+ message: 'Select platform:',
33
+ choices: [
34
+ { name: '🌐 Web (Next.js)', value: 'web' },
35
+ { name: '📱 Mobile (Expo)', value: 'mobile' },
36
+ { name: '🚀 Both (Full-stack)', value: 'both' },
37
+ ],
38
+ default: initialConfig.platform,
39
+ },
40
+ {
41
+ type: 'list',
42
+ name: 'template',
43
+ message: 'Select template:',
44
+ choices: (answers) => {
45
+ if (answers.platform === 'web') {
46
+ return [
47
+ { name: '📄 Base - Clean starter template', value: 'base' },
48
+ {
49
+ name: '📦 UI Only - With @digilogiclabs/saas-factory-ui (no auth)',
50
+ value: 'ui-only',
51
+ },
52
+ {
53
+ name: '🔐 UI + Auth - With UI components and authentication',
54
+ value: 'ui-auth',
55
+ },
56
+ {
57
+ name: '💳 UI + Auth + Payments - Full SaaS with payments integration',
58
+ value: 'ui-auth-payments',
59
+ },
60
+ {
61
+ name: '🎵 Audio Player App - Full SaaS with audio streaming features',
62
+ value: 'ui-auth-payments-audio',
63
+ },
64
+ {
65
+ name: '🎬 Video Player App - Full SaaS with video streaming features',
66
+ value: 'ui-auth-payments-video',
67
+ },
68
+ { name: '📊 Dashboard - Admin dashboard with analytics', value: 'dashboard' },
69
+ { name: '💼 SaaS - Multi-tenant SaaS application', value: 'saas' },
70
+ ];
71
+ }
72
+ else if (answers.platform === 'mobile') {
73
+ return [
74
+ { name: '📱 Base - Simple mobile app', value: 'base' },
75
+ { name: '📑 Tabs - Tab navigation', value: 'tabs' },
76
+ { name: '📚 Stack - Stack navigation', value: 'stack' },
77
+ ];
78
+ }
79
+ else {
80
+ return [{ name: '🚀 Base - Web + Mobile starter', value: 'base' }];
81
+ }
82
+ },
83
+ default: initialConfig.template,
84
+ },
85
+ {
86
+ type: 'list',
87
+ name: 'auth',
88
+ message: 'Select authentication provider:',
89
+ choices: [
90
+ { name: '⚡ Supabase - Open source alternative', value: 'supabase' },
91
+ { name: "🔥 Firebase - Google's platform", value: 'firebase' },
92
+ ],
93
+ default: initialConfig.auth,
94
+ },
95
+ {
96
+ type: 'list',
97
+ name: 'database',
98
+ message: 'Select database provider:',
99
+ choices: (answers) => {
100
+ // Smart defaults based on auth choice
101
+ const choices = [
102
+ { name: '⚡ Supabase - PostgreSQL with real-time', value: 'supabase' },
103
+ { name: '🔥 Firebase - NoSQL with real-time', value: 'firebase' },
104
+ ];
105
+ // Suggest matching auth provider
106
+ if (answers.auth === 'firebase') {
107
+ return choices.reverse();
108
+ }
109
+ return choices;
110
+ },
111
+ default: (answers) => {
112
+ // Auto-match auth provider if possible, but prefer Supabase
113
+ return answers.auth === 'firebase' ? 'firebase' : 'supabase';
114
+ },
115
+ },
116
+ {
117
+ type: 'list',
118
+ name: 'theme',
119
+ message: 'Select theme:',
120
+ choices: [
121
+ { name: '🎨 Default - Clean and modern', value: 'default' },
122
+ { name: '🏢 Corporate - Professional business theme', value: 'corporate' },
123
+ { name: '🚀 Startup - Bold and innovative', value: 'startup' },
124
+ ],
125
+ default: initialConfig.theme,
126
+ },
127
+ {
128
+ type: 'list',
129
+ name: 'themeColor',
130
+ message: 'Select theme color:',
131
+ choices: [
132
+ { name: '🔵 Blue - Classic and trustworthy', value: 'blue' },
133
+ { name: '🟢 Green - Fresh and natural', value: 'green' },
134
+ { name: '🟣 Purple - Creative and modern', value: 'purple' },
135
+ { name: '🟠 Orange - Energetic and friendly', value: 'orange' },
136
+ { name: '🔴 Red - Bold and attention-grabbing', value: 'red' },
137
+ { name: '⚫ Slate - Professional and minimal', value: 'slate' },
138
+ ],
139
+ default: initialConfig.themeColor,
140
+ },
141
+ {
142
+ type: 'list',
143
+ name: 'defaultTheme',
144
+ message: 'Select default theme mode:',
145
+ choices: [
146
+ { name: '🌙 System - Follow system preference', value: 'system' },
147
+ { name: '☀️ Light - Always light mode', value: 'light' },
148
+ { name: '🌙 Dark - Always dark mode', value: 'dark' },
149
+ ],
150
+ default: initialConfig.defaultTheme,
151
+ },
152
+ {
153
+ type: 'confirm',
154
+ name: 'install',
155
+ message: 'Install dependencies?',
156
+ default: initialConfig.install,
157
+ },
158
+ {
159
+ type: 'confirm',
160
+ name: 'git',
161
+ message: 'Initialize git repository?',
162
+ default: initialConfig.git,
163
+ },
164
+ ];
165
+ const answers = await inquirer_1.default.prompt(questions);
166
+ return {
167
+ ...initialConfig,
168
+ ...answers,
169
+ };
170
+ }
171
+ async function getAuthSetupPrompts(authProvider) {
172
+ logger_1.logger.title(`🔐 ${authProvider} Configuration`);
173
+ if (authProvider === 'firebase') {
174
+ const questions = [
175
+ {
176
+ type: 'input',
177
+ name: 'projectId',
178
+ message: 'Firebase Project ID:',
179
+ validate: (input) => input.length > 0 || 'Project ID is required',
180
+ },
181
+ {
182
+ type: 'input',
183
+ name: 'apiKey',
184
+ message: 'Firebase API Key:',
185
+ validate: (input) => input.length > 0 || 'API Key is required',
186
+ },
187
+ {
188
+ type: 'input',
189
+ name: 'authDomain',
190
+ message: 'Firebase Auth Domain:',
191
+ validate: (input) => input.length > 0 || 'Auth Domain is required',
192
+ },
193
+ ];
194
+ return await inquirer_1.default.prompt(questions);
195
+ }
196
+ else if (authProvider === 'supabase') {
197
+ const questions = [
198
+ {
199
+ type: 'input',
200
+ name: 'url',
201
+ message: 'Supabase URL:',
202
+ validate: (input) => {
203
+ if (!input.length)
204
+ return 'URL is required';
205
+ if (!input.startsWith('https://'))
206
+ return 'URL must start with https://';
207
+ return true;
208
+ },
209
+ },
210
+ {
211
+ type: 'input',
212
+ name: 'anonKey',
213
+ message: 'Supabase Anon Key:',
214
+ validate: (input) => input.length > 0 || 'Anon Key is required',
215
+ },
216
+ ];
217
+ return await inquirer_1.default.prompt(questions);
218
+ }
219
+ return {};
220
+ }
221
+ async function getThemeCustomizationPrompts(theme) {
222
+ logger_1.logger.title(`🎨 ${theme} Theme Customization`);
223
+ const questions = [
224
+ {
225
+ type: 'input',
226
+ name: 'primaryColor',
227
+ message: 'Primary color (hex):',
228
+ default: theme === 'corporate' ? '#1e40af' : theme === 'startup' ? '#7c3aed' : '#3b82f6',
229
+ validate: (input) => {
230
+ if (!/^#[0-9A-F]{6}$/i.test(input)) {
231
+ return 'Please enter a valid hex color (e.g., #3b82f6)';
232
+ }
233
+ return true;
234
+ },
235
+ },
236
+ {
237
+ type: 'input',
238
+ name: 'fontFamily',
239
+ message: 'Font family:',
240
+ default: theme === 'corporate' ? 'Inter' : theme === 'startup' ? 'Poppins' : 'System UI',
241
+ },
242
+ {
243
+ type: 'confirm',
244
+ name: 'darkMode',
245
+ message: 'Enable dark mode support?',
246
+ default: true,
247
+ },
248
+ ];
249
+ return await inquirer_1.default.prompt(questions);
250
+ }
251
+ //# sourceMappingURL=project-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-setup.js","sourceRoot":"","sources":["../../../src/cli/prompts/project-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function initializeGit(projectPath: string): Promise<void>;
2
+ export declare function isGitRepository(projectPath: string): Promise<boolean>;
3
+ export declare function getGitUserInfo(): Promise<{
4
+ name?: string;
5
+ email?: string;
6
+ }>;
7
+ export declare function hasGitChanges(projectPath: string): Promise<boolean>;
8
+ export declare function commitChanges(projectPath: string, message: string): Promise<void>;
9
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/git.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBtE;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3E;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAcjF;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOzE;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvF"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initializeGit = initializeGit;
7
+ exports.isGitRepository = isGitRepository;
8
+ exports.getGitUserInfo = getGitUserInfo;
9
+ exports.hasGitChanges = hasGitChanges;
10
+ exports.commitChanges = commitChanges;
11
+ const execa_1 = __importDefault(require("execa"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const fs_extra_1 = __importDefault(require("fs-extra"));
14
+ const logger_1 = require("./logger");
15
+ async function initializeGit(projectPath) {
16
+ try {
17
+ // Check if git is available
18
+ await (0, execa_1.default)('git', ['--version']);
19
+ // Initialize git repository
20
+ await (0, execa_1.default)('git', ['init'], { cwd: projectPath });
21
+ // Add all files
22
+ await (0, execa_1.default)('git', ['add', '.'], { cwd: projectPath });
23
+ // Create initial commit
24
+ await (0, execa_1.default)('git', ['commit', '-m', 'Initial commit from @digilogiclabs/create-saas-app'], {
25
+ cwd: projectPath,
26
+ });
27
+ logger_1.logger.debug('Git repository initialized successfully');
28
+ }
29
+ catch (error) {
30
+ logger_1.logger.warn('Git initialization failed. You can initialize it manually later.');
31
+ logger_1.logger.debug('Git error:', error);
32
+ }
33
+ }
34
+ async function isGitRepository(projectPath) {
35
+ try {
36
+ const gitDir = path_1.default.join(projectPath, '.git');
37
+ return await fs_extra_1.default.pathExists(gitDir);
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ async function getGitUserInfo() {
44
+ try {
45
+ const [nameResult, emailResult] = await Promise.allSettled([
46
+ (0, execa_1.default)('git', ['config', '--global', 'user.name']),
47
+ (0, execa_1.default)('git', ['config', '--global', 'user.email']),
48
+ ]);
49
+ return {
50
+ name: nameResult.status === 'fulfilled' ? nameResult.value.stdout : undefined,
51
+ email: emailResult.status === 'fulfilled' ? emailResult.value.stdout : undefined,
52
+ };
53
+ }
54
+ catch {
55
+ return {};
56
+ }
57
+ }
58
+ async function hasGitChanges(projectPath) {
59
+ try {
60
+ const result = await (0, execa_1.default)('git', ['status', '--porcelain'], { cwd: projectPath });
61
+ return result.stdout.trim().length > 0;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ async function commitChanges(projectPath, message) {
68
+ try {
69
+ await (0, execa_1.default)('git', ['add', '.'], { cwd: projectPath });
70
+ await (0, execa_1.default)('git', ['commit', '-m', message], { cwd: projectPath });
71
+ }
72
+ catch (error) {
73
+ logger_1.logger.warn('Failed to commit changes');
74
+ logger_1.logger.debug('Git commit error:', error);
75
+ }
76
+ }
77
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/cli/utils/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './logger';
2
+ export * from './spinner';
3
+ export * from './git';
4
+ export * from './package-manager';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./logger"), exports);
18
+ __exportStar(require("./spinner"), exports);
19
+ __exportStar(require("./git"), exports);
20
+ __exportStar(require("./package-manager"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,wCAAsB;AACtB,oDAAkC"}
@@ -0,0 +1,16 @@
1
+ export declare const logger: {
2
+ info: (message: string, ...args: unknown[]) => void;
3
+ success: (message: string, ...args: unknown[]) => void;
4
+ warn: (message: string, ...args: unknown[]) => void;
5
+ error: (message: string, ...args: unknown[]) => void;
6
+ debug: (message: string, ...args: unknown[]) => void;
7
+ log: (message: string, ...args: unknown[]) => void;
8
+ newLine: () => void;
9
+ divider: () => void;
10
+ title: (message: string) => void;
11
+ step: (step: number, total: number, message: string) => void;
12
+ highlight: (message: string) => void;
13
+ code: (code: string) => void;
14
+ list: (items: string[]) => void;
15
+ };
16
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,MAAM,WAAW,OAAO,EAAE;uBAIvB,MAAM,WAAW,OAAO,EAAE;oBAI7B,MAAM,WAAW,OAAO,EAAE;qBAIzB,MAAM,WAAW,OAAO,EAAE;qBAI1B,MAAM,WAAW,OAAO,EAAE;mBAM5B,MAAM,WAAW,OAAO,EAAE;;;qBAYxB,MAAM;iBAMV,MAAM,SAAS,MAAM,WAAW,MAAM;yBAI9B,MAAM;iBAId,MAAM;kBAIL,MAAM,EAAE;CAKvB,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logger = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ exports.logger = {
9
+ info: (message, ...args) => {
10
+ console.log(chalk_1.default.blue('ℹ'), message, ...args);
11
+ },
12
+ success: (message, ...args) => {
13
+ console.log(chalk_1.default.green('✓'), message, ...args);
14
+ },
15
+ warn: (message, ...args) => {
16
+ console.log(chalk_1.default.yellow('⚠'), message, ...args);
17
+ },
18
+ error: (message, ...args) => {
19
+ console.log(chalk_1.default.red('✗'), message, ...args);
20
+ },
21
+ debug: (message, ...args) => {
22
+ if (process.env.DEBUG) {
23
+ console.log(chalk_1.default.gray('🐛'), message, ...args);
24
+ }
25
+ },
26
+ log: (message, ...args) => {
27
+ console.log(message, ...args);
28
+ },
29
+ newLine: () => {
30
+ console.log();
31
+ },
32
+ divider: () => {
33
+ console.log(chalk_1.default.gray('─'.repeat(50)));
34
+ },
35
+ title: (message) => {
36
+ console.log();
37
+ console.log(chalk_1.default.bold.cyan(message));
38
+ console.log(chalk_1.default.gray('─'.repeat(message.length)));
39
+ },
40
+ step: (step, total, message) => {
41
+ console.log(chalk_1.default.cyan(`[${step}/${total}]`), message);
42
+ },
43
+ highlight: (message) => {
44
+ console.log(chalk_1.default.bold.magenta(message));
45
+ },
46
+ code: (code) => {
47
+ console.log(chalk_1.default.gray(' ' + code));
48
+ },
49
+ list: (items) => {
50
+ items.forEach((item) => {
51
+ console.log(chalk_1.default.gray(' •'), item);
52
+ });
53
+ },
54
+ };
55
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/cli/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type PackageManager = 'npm' | 'yarn' | 'pnpm';
2
+ export declare function detectPackageManager(projectPath?: string): Promise<PackageManager>;
3
+ export declare function getInstallCommand(packageManager: PackageManager): Promise<string[]>;
4
+ export declare function getAddCommand(packageManager: PackageManager, packages: string[], dev?: boolean): Promise<string[]>;
5
+ export declare function getRunCommand(packageManager: PackageManager, script: string): Promise<string[]>;
6
+ export declare function isPackageManagerAvailable(packageManager: PackageManager): Promise<boolean>;
7
+ export declare function getPackageManagerDisplayName(packageManager: PackageManager): string;
8
+ //# sourceMappingURL=package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/package-manager.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,wBAAsB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA8BxF;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASzF;AAED,wBAAsB,aAAa,CACjC,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,UAAQ,GACV,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED,wBAAsB,aAAa,CACjC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED,wBAAsB,yBAAyB,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhG;AAED,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CASnF"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectPackageManager = detectPackageManager;
7
+ exports.getInstallCommand = getInstallCommand;
8
+ exports.getAddCommand = getAddCommand;
9
+ exports.getRunCommand = getRunCommand;
10
+ exports.isPackageManagerAvailable = isPackageManagerAvailable;
11
+ exports.getPackageManagerDisplayName = getPackageManagerDisplayName;
12
+ const execa_1 = __importDefault(require("execa"));
13
+ const fs_extra_1 = __importDefault(require("fs-extra"));
14
+ const path_1 = __importDefault(require("path"));
15
+ async function detectPackageManager(projectPath) {
16
+ const cwd = projectPath || process.cwd();
17
+ // Check for lock files
18
+ const lockFiles = [
19
+ { file: 'pnpm-lock.yaml', manager: 'pnpm' },
20
+ { file: 'yarn.lock', manager: 'yarn' },
21
+ { file: 'package-lock.json', manager: 'npm' },
22
+ ];
23
+ for (const { file, manager } of lockFiles) {
24
+ if (await fs_extra_1.default.pathExists(path_1.default.join(cwd, file))) {
25
+ return manager;
26
+ }
27
+ }
28
+ // Check for package manager availability
29
+ const managers = ['pnpm', 'yarn', 'npm'];
30
+ for (const manager of managers) {
31
+ try {
32
+ await (0, execa_1.default)(manager, ['--version']);
33
+ return manager;
34
+ }
35
+ catch {
36
+ // Continue to next manager
37
+ }
38
+ }
39
+ // Default to npm
40
+ return 'npm';
41
+ }
42
+ async function getInstallCommand(packageManager) {
43
+ switch (packageManager) {
44
+ case 'yarn':
45
+ return ['yarn', 'install'];
46
+ case 'pnpm':
47
+ return ['pnpm', 'install'];
48
+ default:
49
+ return ['npm', 'install'];
50
+ }
51
+ }
52
+ async function getAddCommand(packageManager, packages, dev = false) {
53
+ const devFlag = dev ? (packageManager === 'npm' ? '--save-dev' : '-D') : '';
54
+ switch (packageManager) {
55
+ case 'yarn':
56
+ return ['yarn', 'add', ...(dev ? ['-D'] : []), ...packages];
57
+ case 'pnpm':
58
+ return ['pnpm', 'add', ...(dev ? ['-D'] : []), ...packages];
59
+ default:
60
+ return ['npm', 'install', ...(devFlag ? [devFlag] : []), ...packages];
61
+ }
62
+ }
63
+ async function getRunCommand(packageManager, script) {
64
+ switch (packageManager) {
65
+ case 'yarn':
66
+ return ['yarn', script];
67
+ case 'pnpm':
68
+ return ['pnpm', script];
69
+ default:
70
+ return ['npm', 'run', script];
71
+ }
72
+ }
73
+ async function isPackageManagerAvailable(packageManager) {
74
+ try {
75
+ await (0, execa_1.default)(packageManager, ['--version']);
76
+ return true;
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ function getPackageManagerDisplayName(packageManager) {
83
+ switch (packageManager) {
84
+ case 'yarn':
85
+ return 'Yarn';
86
+ case 'pnpm':
87
+ return 'pnpm';
88
+ default:
89
+ return 'npm';
90
+ }
91
+ }
92
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/cli/utils/package-manager.ts"],"names":[],"mappings":";;;;;AAMA,oDA8BC;AAED,8CASC;AAED,sCAeC;AAED,sCAYC;AAED,8DAOC;AAED,oEASC;AAlGD,kDAA0B;AAC1B,wDAA0B;AAC1B,gDAAwB;AAIjB,KAAK,UAAU,oBAAoB,CAAC,WAAoB;IAC7D,MAAM,GAAG,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,uBAAuB;IACvB,MAAM,SAAS,GAAG;QAChB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAwB,EAAE;QAC7D,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAwB,EAAE;QACxD,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,KAAuB,EAAE;KAChE,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,SAAS,EAAE,CAAC;QAC1C,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,QAAQ,GAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAE3D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAA,eAAK,EAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,cAA8B;IACpE,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7B;YACE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,cAA8B,EAC9B,QAAkB,EAClB,GAAG,GAAG,KAAK;IAEX,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC9D,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC9D;YACE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,cAA8B,EAC9B,MAAc;IAEd,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B;YACE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,yBAAyB,CAAC,cAA8B;IAC5E,IAAI,CAAC;QACH,MAAM,IAAA,eAAK,EAAC,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,4BAA4B,CAAC,cAA8B;IACzE,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Ora } from 'ora';
2
+ export declare function spinner(text: string): Ora;
3
+ export declare function createSpinner(text: string): Ora;
4
+ export declare function successSpinner(text: string): Ora;
5
+ export declare function errorSpinner(text: string): Ora;
6
+ export declare function warnSpinner(text: string): Ora;
7
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/spinner.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG/B,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAMzC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAM/C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAMhD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAM9C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAM7C"}