@digilogiclabs/create-saas-app 2.2.0 → 2.2.1

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 (77) hide show
  1. package/bin/index.js +2 -0
  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 +45 -0
  8. package/dist/cli/commands/create.d.ts.map +1 -0
  9. package/dist/cli/commands/create.js +175 -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 +61 -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 +359 -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 +224 -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 +177 -0
  74. package/dist/generators/package-installer.js.map +1 -0
  75. package/package.json +1 -1
  76. package/dist/index.js +0 -1837
  77. package/dist/index.js.map +0 -1
@@ -0,0 +1,359 @@
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
+ /**
13
+ * Tier descriptions for the CLI selection
14
+ */
15
+ const TIER_CHOICES = [
16
+ {
17
+ name: '🚀 Micro - Single feature MVP (auth only, minimal deps)',
18
+ value: 'micro',
19
+ },
20
+ {
21
+ name: '💼 Starter - Basic SaaS (auth + payments) [Recommended]',
22
+ value: 'starter',
23
+ },
24
+ {
25
+ name: '⚡ Pro - Full SaaS (auth + payments + AI)',
26
+ value: 'pro',
27
+ },
28
+ {
29
+ name: '🏢 Enterprise - Full platform (all features + observability)',
30
+ value: 'enterprise',
31
+ },
32
+ ];
33
+ async function getProjectPrompts(initialConfig) {
34
+ logger_1.logger.title('🛠️ Project Configuration');
35
+ const questions = [
36
+ {
37
+ type: 'input',
38
+ name: 'name',
39
+ message: 'Project name:',
40
+ default: initialConfig.name,
41
+ validate: (input) => {
42
+ if (!(0, project_name_1.validateProjectName)(input)) {
43
+ const suggestion = (0, project_name_1.suggestProjectName)(input);
44
+ return `Invalid project name. Try: ${suggestion}`;
45
+ }
46
+ return true;
47
+ },
48
+ filter: (input) => input.trim(),
49
+ },
50
+ {
51
+ type: 'list',
52
+ name: 'platform',
53
+ message: 'Select platform:',
54
+ choices: [
55
+ { name: '🌐 Web (Next.js)', value: 'web' },
56
+ { name: '📱 Mobile (Expo)', value: 'mobile' },
57
+ { name: '🚀 Both (Full-stack)', value: 'both' },
58
+ ],
59
+ default: initialConfig.platform,
60
+ },
61
+ {
62
+ type: 'list',
63
+ name: 'tier',
64
+ message: 'Select project tier:',
65
+ choices: TIER_CHOICES,
66
+ default: initialConfig.tier || 'starter',
67
+ },
68
+ {
69
+ type: 'list',
70
+ name: 'template',
71
+ message: 'Select template:',
72
+ choices: (answers) => {
73
+ if (answers.platform === 'web') {
74
+ return [
75
+ // ═══════════════════════════════════════════════════════════════
76
+ // STARTER TEMPLATES (Recommended for new projects)
77
+ // ═══════════════════════════════════════════════════════════════
78
+ new inquirer_1.default.Separator('─── Starter Templates ───'),
79
+ {
80
+ name: '💼 Micro-SaaS - Single feature MVP (subscriptions, analytics)',
81
+ value: 'micro-saas',
82
+ },
83
+ {
84
+ name: '💳 UI + Auth + Payments - Complete SaaS foundation [Recommended]',
85
+ value: 'ui-auth-payments',
86
+ },
87
+ // ═══════════════════════════════════════════════════════════════
88
+ // VERTICAL TEMPLATES (Industry-specific)
89
+ // ═══════════════════════════════════════════════════════════════
90
+ new inquirer_1.default.Separator('─── Vertical Templates ───'),
91
+ {
92
+ name: '🛒 Marketplace - Multi-vendor platform (products, orders, vendors)',
93
+ value: 'marketplace',
94
+ },
95
+ {
96
+ name: '🤖 AI Platform - LLM-powered SaaS (chat, model selection)',
97
+ value: 'ai-platform',
98
+ },
99
+ {
100
+ name: '📡 IoT Dashboard - Device monitoring & telemetry',
101
+ value: 'iot-dashboard',
102
+ },
103
+ // ═══════════════════════════════════════════════════════════════
104
+ // CORE TEMPLATES (Building blocks)
105
+ // ═══════════════════════════════════════════════════════════════
106
+ new inquirer_1.default.Separator('─── Core Templates ───'),
107
+ {
108
+ name: '📄 Base - Clean Next.js 15 starter',
109
+ value: 'base',
110
+ },
111
+ {
112
+ name: '🎨 UI Only - Components library showcase (no auth)',
113
+ value: 'ui-only',
114
+ },
115
+ {
116
+ name: '🔐 UI + Auth - Modern authentication flow',
117
+ value: 'ui-auth',
118
+ },
119
+ // ═══════════════════════════════════════════════════════════════
120
+ // AI-POWERED TEMPLATES
121
+ // ═══════════════════════════════════════════════════════════════
122
+ new inquirer_1.default.Separator('─── AI-Powered Templates ───'),
123
+ {
124
+ name: '🤖 AI + Auth - Text & chat AI integration',
125
+ value: 'ui-auth-ai',
126
+ },
127
+ {
128
+ name: '🤖 AI + Auth + Payments - Full AI SaaS platform',
129
+ value: 'ui-auth-payments-ai',
130
+ },
131
+ // ═══════════════════════════════════════════════════════════════
132
+ // MEDIA TEMPLATES
133
+ // ═══════════════════════════════════════════════════════════════
134
+ new inquirer_1.default.Separator('─── Media Templates ───'),
135
+ {
136
+ name: '🎵 Audio SaaS - Music streaming & audio processing',
137
+ value: 'ui-auth-payments-audio',
138
+ },
139
+ {
140
+ name: '🎬 Video SaaS - Video streaming & media platform',
141
+ value: 'ui-auth-payments-video',
142
+ },
143
+ // ═══════════════════════════════════════════════════════════════
144
+ // DEVELOPMENT TEMPLATES
145
+ // ═══════════════════════════════════════════════════════════════
146
+ new inquirer_1.default.Separator('─── Development Templates ───'),
147
+ {
148
+ name: '🧪 UI Package Test - Component testing environment',
149
+ value: 'ui-package-test',
150
+ },
151
+ ];
152
+ }
153
+ else if (answers.platform === 'mobile') {
154
+ return [
155
+ {
156
+ name: '📱 Base - React Native + Expo starter',
157
+ value: 'base',
158
+ },
159
+ {
160
+ name: '💳 UI + Auth + Payments - Full mobile SaaS (v0.22.0)',
161
+ value: 'ui-auth-payments',
162
+ },
163
+ {
164
+ name: '🤖 AI + Auth + Payments - Mobile AI SaaS with generation tools',
165
+ value: 'ui-auth-payments-ai',
166
+ },
167
+ ];
168
+ }
169
+ else {
170
+ // Both platform - show available cross-platform options
171
+ return [
172
+ {
173
+ name: '🚀 Full Stack - Web + Mobile SaaS platform',
174
+ value: 'ui-auth-payments',
175
+ },
176
+ {
177
+ name: '🤖 AI Full Stack - Web + Mobile AI platform',
178
+ value: 'ui-auth-payments-ai',
179
+ },
180
+ ];
181
+ }
182
+ },
183
+ default: initialConfig.template,
184
+ },
185
+ {
186
+ type: 'list',
187
+ name: 'auth',
188
+ message: 'Select authentication provider:',
189
+ choices: [
190
+ { name: '🔑 Keycloak - Self-hosted OIDC (recommended)', value: 'keycloak' },
191
+ { name: '⚡ Supabase - Open source alternative', value: 'supabase' },
192
+ { name: "🔥 Firebase - Google's platform", value: 'firebase' },
193
+ ],
194
+ default: initialConfig.auth,
195
+ },
196
+ {
197
+ type: 'list',
198
+ name: 'database',
199
+ message: 'Select database provider:',
200
+ choices: (answers) => {
201
+ const choices = [
202
+ {
203
+ name: '🐘 PostgreSQL + Drizzle - Self-hosted, full control (recommended)',
204
+ value: 'postgresql',
205
+ },
206
+ { name: '⚡ Supabase - PostgreSQL with real-time & dashboard', value: 'supabase' },
207
+ { name: '🔥 Firebase - NoSQL with real-time', value: 'firebase' },
208
+ ];
209
+ // For Firebase auth, suggest Firebase DB first
210
+ if (answers.auth === 'firebase') {
211
+ return choices.reverse();
212
+ }
213
+ return choices;
214
+ },
215
+ default: (answers) => {
216
+ // Keycloak pairs best with self-hosted PostgreSQL
217
+ if (answers.auth === 'keycloak')
218
+ return 'postgresql';
219
+ if (answers.auth === 'firebase')
220
+ return 'firebase';
221
+ return 'supabase';
222
+ },
223
+ },
224
+ {
225
+ type: 'list',
226
+ name: 'theme',
227
+ message: 'Select theme:',
228
+ choices: [
229
+ { name: '🎨 Default - Clean and modern', value: 'default' },
230
+ { name: '🏢 Corporate - Professional business theme', value: 'corporate' },
231
+ { name: '🚀 Startup - Bold and innovative', value: 'startup' },
232
+ ],
233
+ default: initialConfig.theme,
234
+ },
235
+ {
236
+ type: 'list',
237
+ name: 'themeColor',
238
+ message: 'Select theme color:',
239
+ choices: [
240
+ { name: '🔵 Blue - Classic and trustworthy', value: 'blue' },
241
+ { name: '🟢 Green - Fresh and natural', value: 'green' },
242
+ { name: '🟣 Purple - Creative and modern', value: 'purple' },
243
+ { name: '🟠 Orange - Energetic and friendly', value: 'orange' },
244
+ { name: '🔴 Red - Bold and attention-grabbing', value: 'red' },
245
+ { name: '⚫ Slate - Professional and minimal', value: 'slate' },
246
+ ],
247
+ default: initialConfig.themeColor,
248
+ },
249
+ {
250
+ type: 'list',
251
+ name: 'defaultTheme',
252
+ message: 'Select default theme mode:',
253
+ choices: [
254
+ { name: '🌙 System - Follow system preference', value: 'system' },
255
+ { name: '☀️ Light - Always light mode', value: 'light' },
256
+ { name: '🌙 Dark - Always dark mode', value: 'dark' },
257
+ ],
258
+ default: initialConfig.defaultTheme,
259
+ },
260
+ {
261
+ type: 'confirm',
262
+ name: 'install',
263
+ message: 'Install dependencies?',
264
+ default: initialConfig.install,
265
+ },
266
+ {
267
+ type: 'confirm',
268
+ name: 'git',
269
+ message: 'Initialize git repository?',
270
+ default: initialConfig.git,
271
+ },
272
+ ];
273
+ const answers = await inquirer_1.default.prompt(questions);
274
+ return {
275
+ ...initialConfig,
276
+ ...answers,
277
+ };
278
+ }
279
+ async function getAuthSetupPrompts(authProvider) {
280
+ logger_1.logger.title(`🔐 ${authProvider} Configuration`);
281
+ if (authProvider === 'firebase') {
282
+ const questions = [
283
+ {
284
+ type: 'input',
285
+ name: 'projectId',
286
+ message: 'Firebase Project ID:',
287
+ validate: (input) => input.length > 0 || 'Project ID is required',
288
+ },
289
+ {
290
+ type: 'input',
291
+ name: 'apiKey',
292
+ message: 'Firebase API Key:',
293
+ validate: (input) => input.length > 0 || 'API Key is required',
294
+ },
295
+ {
296
+ type: 'input',
297
+ name: 'authDomain',
298
+ message: 'Firebase Auth Domain:',
299
+ validate: (input) => input.length > 0 || 'Auth Domain is required',
300
+ },
301
+ ];
302
+ return await inquirer_1.default.prompt(questions);
303
+ }
304
+ else if (authProvider === 'supabase') {
305
+ const questions = [
306
+ {
307
+ type: 'input',
308
+ name: 'url',
309
+ message: 'Supabase URL:',
310
+ validate: (input) => {
311
+ if (!input.length)
312
+ return 'URL is required';
313
+ if (!input.startsWith('https://'))
314
+ return 'URL must start with https://';
315
+ return true;
316
+ },
317
+ },
318
+ {
319
+ type: 'input',
320
+ name: 'anonKey',
321
+ message: 'Supabase Anon Key:',
322
+ validate: (input) => input.length > 0 || 'Anon Key is required',
323
+ },
324
+ ];
325
+ return await inquirer_1.default.prompt(questions);
326
+ }
327
+ return {};
328
+ }
329
+ async function getThemeCustomizationPrompts(theme) {
330
+ logger_1.logger.title(`🎨 ${theme} Theme Customization`);
331
+ const questions = [
332
+ {
333
+ type: 'input',
334
+ name: 'primaryColor',
335
+ message: 'Primary color (hex):',
336
+ default: theme === 'corporate' ? '#1e40af' : theme === 'startup' ? '#7c3aed' : '#3b82f6',
337
+ validate: (input) => {
338
+ if (!/^#[0-9A-F]{6}$/i.test(input)) {
339
+ return 'Please enter a valid hex color (e.g., #3b82f6)';
340
+ }
341
+ return true;
342
+ },
343
+ },
344
+ {
345
+ type: 'input',
346
+ name: 'fontFamily',
347
+ message: 'Font family:',
348
+ default: theme === 'corporate' ? 'Inter' : theme === 'startup' ? 'Poppins' : 'System UI',
349
+ },
350
+ {
351
+ type: 'confirm',
352
+ name: 'darkMode',
353
+ message: 'Enable dark mode support?',
354
+ default: true,
355
+ },
356
+ ];
357
+ return await inquirer_1.default.prompt(questions);
358
+ }
359
+ //# 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"}