@digilogiclabs/create-saas-app 1.12.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +104 -36
  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/index.d.ts +4 -0
  8. package/dist/cli/commands/index.d.ts.map +1 -0
  9. package/dist/cli/commands/index.js +20 -0
  10. package/dist/cli/commands/index.js.map +1 -0
  11. package/dist/cli/commands/update.d.ts +6 -0
  12. package/dist/cli/commands/update.d.ts.map +1 -0
  13. package/dist/cli/commands/update.js +68 -0
  14. package/dist/cli/commands/update.js.map +1 -0
  15. package/dist/cli/index.d.ts +4 -0
  16. package/dist/cli/index.d.ts.map +1 -0
  17. package/dist/cli/index.js +61 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/cli/prompts/index.d.ts +2 -0
  20. package/dist/cli/prompts/index.d.ts.map +1 -0
  21. package/dist/cli/prompts/index.js +18 -0
  22. package/dist/cli/prompts/index.js.map +1 -0
  23. package/dist/cli/prompts/project-setup.d.ts +5 -0
  24. package/dist/cli/prompts/project-setup.d.ts.map +1 -0
  25. package/dist/cli/prompts/project-setup.js +251 -0
  26. package/dist/cli/prompts/project-setup.js.map +1 -0
  27. package/dist/cli/utils/git.d.ts +9 -0
  28. package/dist/cli/utils/git.d.ts.map +1 -0
  29. package/dist/cli/utils/git.js +77 -0
  30. package/dist/cli/utils/git.js.map +1 -0
  31. package/dist/cli/utils/index.d.ts +5 -0
  32. package/dist/cli/utils/index.d.ts.map +1 -0
  33. package/dist/cli/utils/index.js +21 -0
  34. package/dist/cli/utils/index.js.map +1 -0
  35. package/dist/cli/utils/logger.d.ts +16 -0
  36. package/dist/cli/utils/logger.d.ts.map +1 -0
  37. package/dist/cli/utils/logger.js +55 -0
  38. package/dist/cli/utils/logger.js.map +1 -0
  39. package/dist/cli/utils/package-manager.d.ts +8 -0
  40. package/dist/cli/utils/package-manager.d.ts.map +1 -0
  41. package/dist/cli/utils/package-manager.js +92 -0
  42. package/dist/cli/utils/package-manager.js.map +1 -0
  43. package/dist/cli/utils/spinner.d.ts +7 -0
  44. package/dist/cli/utils/spinner.d.ts.map +1 -0
  45. package/dist/cli/utils/spinner.js +48 -0
  46. package/dist/cli/utils/spinner.js.map +1 -0
  47. package/dist/cli/validators/dependencies.d.ts +15 -0
  48. package/dist/cli/validators/dependencies.d.ts.map +1 -0
  49. package/dist/cli/validators/dependencies.js +108 -0
  50. package/dist/cli/validators/dependencies.js.map +1 -0
  51. package/dist/cli/validators/index.d.ts +3 -0
  52. package/dist/cli/validators/index.d.ts.map +1 -0
  53. package/dist/cli/validators/index.js +19 -0
  54. package/dist/cli/validators/index.js.map +1 -0
  55. package/dist/cli/validators/project-name.d.ts +5 -0
  56. package/dist/cli/validators/project-name.d.ts.map +1 -0
  57. package/dist/cli/validators/project-name.js +151 -0
  58. package/dist/cli/validators/project-name.js.map +1 -0
  59. package/dist/generators/file-processor.d.ts +28 -0
  60. package/dist/generators/file-processor.d.ts.map +1 -0
  61. package/dist/generators/file-processor.js +224 -0
  62. package/dist/generators/file-processor.js.map +1 -0
  63. package/dist/generators/index.d.ts +4 -0
  64. package/dist/generators/index.d.ts.map +1 -0
  65. package/dist/generators/index.js +20 -0
  66. package/dist/generators/index.js.map +1 -0
  67. package/dist/generators/package-installer.d.ts +29 -0
  68. package/dist/generators/package-installer.d.ts.map +1 -0
  69. package/dist/generators/package-installer.js +167 -0
  70. package/dist/generators/package-installer.js.map +1 -0
  71. package/dist/templates/web/ui-auth/template/package.json +2 -2
  72. package/dist/templates/web/ui-auth/template/src/app/globals.css +53 -0
  73. package/dist/templates/web/ui-auth/template/src/app/page.tsx +14 -1
  74. package/dist/templates/web/ui-auth-payments/template/package.json +3 -3
  75. package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +40 -0
  76. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +14 -1
  77. package/dist/templates/web/ui-auth-payments-ai/template/.env.example +7 -0
  78. package/dist/templates/web/ui-auth-payments-ai/template/package.json +6 -6
  79. package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +53 -0
  80. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +75 -61
  81. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +19 -14
  82. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +18 -11
  83. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/supabase/server.ts +72 -0
  84. package/dist/templates/web/ui-auth-payments-audio/template/package.json +3 -3
  85. package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +53 -0
  86. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +23 -13
  87. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +18 -11
  88. package/dist/templates/web/ui-auth-payments-video/template/package.json +3 -3
  89. package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +40 -0
  90. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +14 -1
  91. package/package.json +1 -1
  92. package/src/templates/web/ui-auth/template/package.json +2 -2
  93. package/src/templates/web/ui-auth/template/src/app/globals.css +53 -0
  94. package/src/templates/web/ui-auth/template/src/app/page.tsx +14 -1
  95. package/src/templates/web/ui-auth-payments/template/package.json +3 -3
  96. package/src/templates/web/ui-auth-payments/template/src/app/globals.css +40 -0
  97. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +14 -1
  98. package/src/templates/web/ui-auth-payments-ai/template/.env.example +7 -0
  99. package/src/templates/web/ui-auth-payments-ai/template/package.json +6 -6
  100. package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +53 -0
  101. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +75 -61
  102. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +19 -14
  103. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +18 -11
  104. package/src/templates/web/ui-auth-payments-ai/template/src/lib/supabase/server.ts +72 -0
  105. package/src/templates/web/ui-auth-payments-audio/template/package.json +3 -3
  106. package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +53 -0
  107. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +23 -13
  108. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +18 -11
  109. package/src/templates/web/ui-auth-payments-video/template/package.json +3 -3
  110. package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +40 -0
  111. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +14 -1
@@ -0,0 +1,224 @@
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.FileProcessor = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const mustache_1 = __importDefault(require("mustache"));
10
+ const logger_1 = require("../cli/utils/logger");
11
+ class FileProcessor {
12
+ constructor(options = {}) {
13
+ this.options = {
14
+ templateVariables: {},
15
+ fileExtensions: [
16
+ '.js',
17
+ '.jsx',
18
+ '.ts',
19
+ '.tsx',
20
+ '.json',
21
+ '.md',
22
+ '.txt',
23
+ '.yml',
24
+ '.yaml',
25
+ '.xml',
26
+ '.html',
27
+ '.css',
28
+ '.scss',
29
+ '.sass',
30
+ '.less',
31
+ '.env',
32
+ '.gitignore',
33
+ '.eslintrc',
34
+ '.prettierrc',
35
+ '.editorconfig',
36
+ '.nvmrc',
37
+ '.toml',
38
+ ],
39
+ ignorePatterns: [
40
+ 'node_modules/**',
41
+ '.git/**',
42
+ 'dist/**',
43
+ 'build/**',
44
+ '*.log',
45
+ '.DS_Store',
46
+ 'Thumbs.db',
47
+ ],
48
+ preserveBinaryFiles: true,
49
+ ...options,
50
+ };
51
+ }
52
+ async processFile(sourcePath, targetPath) {
53
+ try {
54
+ // Ensure target directory exists
55
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(targetPath));
56
+ // Check if file should be processed as template
57
+ if (await this.shouldProcessAsTemplate(sourcePath)) {
58
+ await this.processTemplateFile(sourcePath, targetPath);
59
+ }
60
+ else {
61
+ await this.copyBinaryFile(sourcePath, targetPath);
62
+ }
63
+ }
64
+ catch (error) {
65
+ logger_1.logger.error(`Failed to process file ${sourcePath}:`, error);
66
+ throw error;
67
+ }
68
+ }
69
+ async processDirectory(sourceDir, targetDir) {
70
+ try {
71
+ // Ensure target directory exists
72
+ await fs_extra_1.default.ensureDir(targetDir);
73
+ // Get all files in source directory
74
+ const files = await this.getFilesRecursively(sourceDir);
75
+ for (const file of files) {
76
+ const sourcePath = path_1.default.join(sourceDir, file);
77
+ const targetPath = path_1.default.join(targetDir, file);
78
+ // Skip ignored files
79
+ if (this.shouldIgnoreFile(file)) {
80
+ continue;
81
+ }
82
+ await this.processFile(sourcePath, targetPath);
83
+ }
84
+ }
85
+ catch (error) {
86
+ logger_1.logger.error(`Failed to process directory ${sourceDir}:`, error);
87
+ throw error;
88
+ }
89
+ }
90
+ async processTemplateFile(sourcePath, targetPath) {
91
+ try {
92
+ const content = await fs_extra_1.default.readFile(sourcePath, 'utf-8');
93
+ const processedContent = mustache_1.default.render(content, this.options.templateVariables);
94
+ await fs_extra_1.default.writeFile(targetPath, processedContent);
95
+ logger_1.logger.debug(`Processed template file: ${path_1.default.basename(sourcePath)}`);
96
+ }
97
+ catch (error) {
98
+ logger_1.logger.error(`Failed to process template file ${sourcePath}:`, error);
99
+ throw error;
100
+ }
101
+ }
102
+ async copyBinaryFile(sourcePath, targetPath) {
103
+ try {
104
+ await fs_extra_1.default.copy(sourcePath, targetPath);
105
+ logger_1.logger.debug(`Copied binary file: ${path_1.default.basename(sourcePath)}`);
106
+ }
107
+ catch (error) {
108
+ logger_1.logger.error(`Failed to copy binary file ${sourcePath}:`, error);
109
+ throw error;
110
+ }
111
+ }
112
+ async shouldProcessAsTemplate(filePath) {
113
+ const ext = path_1.default.extname(filePath).toLowerCase();
114
+ // Only process files with supported extensions
115
+ if (!this.options.fileExtensions.includes(ext) && ext) {
116
+ return false;
117
+ }
118
+ try {
119
+ // Read file content to check for mustache variables
120
+ const content = await fs_extra_1.default.readFile(filePath, 'utf-8');
121
+ // If file contains mustache variables, process as template
122
+ if (content.includes('{{') && content.includes('}}')) {
123
+ return true;
124
+ }
125
+ // For .tsx/.jsx files without mustache variables, don't process to preserve template literals
126
+ if (['.tsx', '.jsx'].includes(ext)) {
127
+ return false;
128
+ }
129
+ // Process other supported files (package.json, config files, etc.)
130
+ return true;
131
+ }
132
+ catch (_error) {
133
+ // If we can't read the file, default to template processing
134
+ return true;
135
+ }
136
+ }
137
+ shouldIgnoreFile(filePath) {
138
+ return this.options.ignorePatterns.some((pattern) => {
139
+ // Simple pattern matching (could be enhanced with glob patterns)
140
+ if (pattern.endsWith('/**')) {
141
+ const dir = pattern.slice(0, -3);
142
+ return filePath.startsWith(dir + '/');
143
+ }
144
+ if (pattern.startsWith('*.')) {
145
+ const ext = pattern.slice(1);
146
+ return filePath.endsWith(ext);
147
+ }
148
+ return filePath.includes(pattern);
149
+ });
150
+ }
151
+ async getFilesRecursively(dir) {
152
+ const files = [];
153
+ const items = await fs_extra_1.default.readdir(dir);
154
+ for (const item of items) {
155
+ const fullPath = path_1.default.join(dir, item);
156
+ const stat = await fs_extra_1.default.stat(fullPath);
157
+ if (stat.isDirectory()) {
158
+ const subFiles = await this.getFilesRecursively(fullPath);
159
+ files.push(...subFiles.map((f) => path_1.default.join(item, f)));
160
+ }
161
+ else {
162
+ files.push(item);
163
+ }
164
+ }
165
+ return files;
166
+ }
167
+ setTemplateVariables(variables) {
168
+ this.options.templateVariables = { ...this.options.templateVariables, ...variables };
169
+ }
170
+ addFileExtension(extension) {
171
+ if (!this.options.fileExtensions.includes(extension)) {
172
+ this.options.fileExtensions.push(extension);
173
+ }
174
+ }
175
+ addIgnorePattern(pattern) {
176
+ if (!this.options.ignorePatterns.includes(pattern)) {
177
+ this.options.ignorePatterns.push(pattern);
178
+ }
179
+ }
180
+ async validateTemplate(templatePath) {
181
+ try {
182
+ // Check if template directory exists
183
+ if (!(await fs_extra_1.default.pathExists(templatePath))) {
184
+ logger_1.logger.error(`Template directory not found: ${templatePath}`);
185
+ return false;
186
+ }
187
+ // Check if template has required files
188
+ const requiredFiles = ['package.json'];
189
+ for (const file of requiredFiles) {
190
+ const filePath = path_1.default.join(templatePath, file);
191
+ if (!(await fs_extra_1.default.pathExists(filePath))) {
192
+ logger_1.logger.error(`Required template file missing: ${file}`);
193
+ return false;
194
+ }
195
+ }
196
+ return true;
197
+ }
198
+ catch (error) {
199
+ logger_1.logger.error('Template validation failed:', error);
200
+ return false;
201
+ }
202
+ }
203
+ async getTemplateInfo(templatePath) {
204
+ try {
205
+ const packageJsonPath = path_1.default.join(templatePath, 'package.json');
206
+ if (!(await fs_extra_1.default.pathExists(packageJsonPath))) {
207
+ return null;
208
+ }
209
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
210
+ return {
211
+ name: packageJson.name || 'Unknown',
212
+ description: packageJson.description || 'No description',
213
+ version: packageJson.version || '1.0.0',
214
+ dependencies: Object.keys(packageJson.dependencies || {}),
215
+ };
216
+ }
217
+ catch (error) {
218
+ logger_1.logger.error('Failed to get template info:', error);
219
+ return null;
220
+ }
221
+ }
222
+ }
223
+ exports.FileProcessor = FileProcessor;
224
+ //# sourceMappingURL=file-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-processor.js","sourceRoot":"","sources":["../../src/generators/file-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './template-generator';
2
+ export * from './package-installer';
3
+ export * from './file-processor';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,20 @@
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("./template-generator"), exports);
18
+ __exportStar(require("./package-installer"), exports);
19
+ __exportStar(require("./file-processor"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,sDAAoC;AACpC,mDAAiC"}
@@ -0,0 +1,29 @@
1
+ export declare class PackageInstaller {
2
+ private projectPath;
3
+ constructor(projectPath: string);
4
+ install(): Promise<void>;
5
+ installDependencies(dependencies: string[], dev?: boolean): Promise<void>;
6
+ updatePackageJson(updates: Partial<{
7
+ name: string;
8
+ version: string;
9
+ description: string;
10
+ author: string;
11
+ license: string;
12
+ scripts: Record<string, string>;
13
+ dependencies: Record<string, string>;
14
+ devDependencies: Record<string, string>;
15
+ keywords: string[];
16
+ repository: unknown;
17
+ bugs: unknown;
18
+ homepage: string;
19
+ }>): Promise<void>;
20
+ addScript(name: string, command: string): Promise<void>;
21
+ removeScript(name: string): Promise<void>;
22
+ getDependencies(): Promise<{
23
+ dependencies: Record<string, string>;
24
+ devDependencies: Record<string, string>;
25
+ }>;
26
+ hasLockFile(): Promise<boolean>;
27
+ cleanInstall(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=package-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-installer.d.ts","sourceRoot":"","sources":["../../src/generators/package-installer.ts"],"names":[],"mappings":"AAUA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAIlB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCxB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,GAAG,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCvE,iBAAiB,CAC5B,OAAO,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;QACpB,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,GACD,OAAO,CAAC,IAAI,CAAC;IAoBH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzC,eAAe,IAAI,OAAO,CAAC;QACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACzC,CAAC;IAeW,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAY/B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B3C"}
@@ -0,0 +1,167 @@
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.PackageInstaller = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const execa_1 = __importDefault(require("execa"));
10
+ const package_manager_1 = require("../cli/utils/package-manager");
11
+ const logger_1 = require("../cli/utils/logger");
12
+ class PackageInstaller {
13
+ constructor(projectPath) {
14
+ this.projectPath = projectPath;
15
+ }
16
+ async install() {
17
+ try {
18
+ // Check if package.json exists
19
+ const packageJsonPath = path_1.default.join(this.projectPath, 'package.json');
20
+ if (!(await fs_extra_1.default.pathExists(packageJsonPath))) {
21
+ throw new Error('package.json not found in project directory');
22
+ }
23
+ // Detect package manager
24
+ const packageManager = await (0, package_manager_1.detectPackageManager)(this.projectPath);
25
+ // Verify package manager is available
26
+ if (!(await (0, package_manager_1.isPackageManagerAvailable)(packageManager))) {
27
+ throw new Error(`Package manager "${packageManager}" is not available`);
28
+ }
29
+ logger_1.logger.debug(`Installing dependencies with ${packageManager}...`);
30
+ // Get install command
31
+ const command = await (0, package_manager_1.getInstallCommand)(packageManager);
32
+ // Run installation
33
+ await (0, execa_1.default)(command[0], command.slice(1), {
34
+ cwd: this.projectPath,
35
+ stdio: 'pipe',
36
+ });
37
+ logger_1.logger.debug('Dependencies installed successfully');
38
+ }
39
+ catch (error) {
40
+ logger_1.logger.error('Package installation failed:', error);
41
+ throw error;
42
+ }
43
+ }
44
+ async installDependencies(dependencies, dev = false) {
45
+ try {
46
+ if (dependencies.length === 0) {
47
+ return;
48
+ }
49
+ const packageManager = await (0, package_manager_1.detectPackageManager)(this.projectPath);
50
+ if (!(await (0, package_manager_1.isPackageManagerAvailable)(packageManager))) {
51
+ throw new Error(`Package manager "${packageManager}" is not available`);
52
+ }
53
+ logger_1.logger.debug(`Installing ${dev ? 'dev ' : ''}dependencies: ${dependencies.join(', ')}`);
54
+ // Get add command
55
+ const command = packageManager === 'yarn'
56
+ ? ['yarn', 'add', ...(dev ? ['-D'] : []), ...dependencies]
57
+ : packageManager === 'pnpm'
58
+ ? ['pnpm', 'add', ...(dev ? ['-D'] : []), ...dependencies]
59
+ : ['npm', 'install', ...(dev ? ['--save-dev'] : []), ...dependencies];
60
+ // Run installation
61
+ await (0, execa_1.default)(command[0], command.slice(1), {
62
+ cwd: this.projectPath,
63
+ stdio: 'pipe',
64
+ });
65
+ logger_1.logger.debug(`${dev ? 'Dev d' : 'D'}ependencies installed successfully`);
66
+ }
67
+ catch (error) {
68
+ logger_1.logger.error(`Failed to install ${dev ? 'dev ' : ''}dependencies:`, error);
69
+ throw error;
70
+ }
71
+ }
72
+ async updatePackageJson(updates) {
73
+ try {
74
+ const packageJsonPath = path_1.default.join(this.projectPath, 'package.json');
75
+ if (!(await fs_extra_1.default.pathExists(packageJsonPath))) {
76
+ throw new Error('package.json not found');
77
+ }
78
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
79
+ const updatedPackageJson = { ...packageJson, ...updates };
80
+ await fs_extra_1.default.writeJson(packageJsonPath, updatedPackageJson, { spaces: 2 });
81
+ logger_1.logger.debug('package.json updated successfully');
82
+ }
83
+ catch (error) {
84
+ logger_1.logger.error('Failed to update package.json:', error);
85
+ throw error;
86
+ }
87
+ }
88
+ async addScript(name, command) {
89
+ try {
90
+ const packageJsonPath = path_1.default.join(this.projectPath, 'package.json');
91
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
92
+ if (!packageJson.scripts) {
93
+ packageJson.scripts = {};
94
+ }
95
+ packageJson.scripts[name] = command;
96
+ await fs_extra_1.default.writeJson(packageJsonPath, packageJson, { spaces: 2 });
97
+ logger_1.logger.debug(`Script "${name}" added to package.json`);
98
+ }
99
+ catch (error) {
100
+ logger_1.logger.error(`Failed to add script "${name}":`, error);
101
+ throw error;
102
+ }
103
+ }
104
+ async removeScript(name) {
105
+ try {
106
+ const packageJsonPath = path_1.default.join(this.projectPath, 'package.json');
107
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
108
+ if (packageJson.scripts && packageJson.scripts[name]) {
109
+ delete packageJson.scripts[name];
110
+ await fs_extra_1.default.writeJson(packageJsonPath, packageJson, { spaces: 2 });
111
+ logger_1.logger.debug(`Script "${name}" removed from package.json`);
112
+ }
113
+ }
114
+ catch (error) {
115
+ logger_1.logger.error(`Failed to remove script "${name}":`, error);
116
+ throw error;
117
+ }
118
+ }
119
+ async getDependencies() {
120
+ try {
121
+ const packageJsonPath = path_1.default.join(this.projectPath, 'package.json');
122
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
123
+ return {
124
+ dependencies: packageJson.dependencies || {},
125
+ devDependencies: packageJson.devDependencies || {},
126
+ };
127
+ }
128
+ catch (error) {
129
+ logger_1.logger.error('Failed to read dependencies:', error);
130
+ return { dependencies: {}, devDependencies: {} };
131
+ }
132
+ }
133
+ async hasLockFile() {
134
+ const lockFiles = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'];
135
+ for (const lockFile of lockFiles) {
136
+ if (await fs_extra_1.default.pathExists(path_1.default.join(this.projectPath, lockFile))) {
137
+ return true;
138
+ }
139
+ }
140
+ return false;
141
+ }
142
+ async cleanInstall() {
143
+ try {
144
+ // Remove node_modules and lock files
145
+ const nodeModulesPath = path_1.default.join(this.projectPath, 'node_modules');
146
+ const lockFiles = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'];
147
+ if (await fs_extra_1.default.pathExists(nodeModulesPath)) {
148
+ await fs_extra_1.default.remove(nodeModulesPath);
149
+ }
150
+ for (const lockFile of lockFiles) {
151
+ const lockPath = path_1.default.join(this.projectPath, lockFile);
152
+ if (await fs_extra_1.default.pathExists(lockPath)) {
153
+ await fs_extra_1.default.remove(lockPath);
154
+ }
155
+ }
156
+ // Fresh install
157
+ await this.install();
158
+ logger_1.logger.debug('Clean install completed');
159
+ }
160
+ catch (error) {
161
+ logger_1.logger.error('Clean install failed:', error);
162
+ throw error;
163
+ }
164
+ }
165
+ }
166
+ exports.PackageInstaller = PackageInstaller;
167
+ //# sourceMappingURL=package-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-installer.js","sourceRoot":"","sources":["../../src/generators/package-installer.ts"],"names":[],"mappings":"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"}
@@ -17,8 +17,8 @@
17
17
  "next": "^15.0.0",
18
18
  "react": "^19.0.0",
19
19
  "react-dom": "^19.0.0",
20
- "@digilogiclabs/saas-factory-ui": "^0.18.2",
21
- "@digilogiclabs/saas-factory-auth": "^1.0.0",
20
+ "@digilogiclabs/saas-factory-ui": "^0.18.4",
21
+ "@digilogiclabs/saas-factory-auth": "^1.0.1",
22
22
  "tailwindcss": "^3.3.0",
23
23
  "autoprefixer": "^10.4.16",
24
24
  "postcss": "^8.4.31",
@@ -40,3 +40,56 @@
40
40
  @apply bg-background text-foreground;
41
41
  }
42
42
  }
43
+
44
+ /* Custom animations for enhanced visual effects */
45
+ @keyframes slide-down {
46
+ from {
47
+ opacity: 0;
48
+ transform: translateY(-10px);
49
+ }
50
+ to {
51
+ opacity: 1;
52
+ transform: translateY(0);
53
+ }
54
+ }
55
+
56
+ @keyframes fade-in-up {
57
+ from {
58
+ opacity: 0;
59
+ transform: translateY(10px);
60
+ }
61
+ to {
62
+ opacity: 1;
63
+ transform: translateY(0);
64
+ }
65
+ }
66
+
67
+ @keyframes marquee {
68
+ 0% {
69
+ transform: translateX(100%);
70
+ }
71
+ 100% {
72
+ transform: translateX(-100%);
73
+ }
74
+ }
75
+
76
+ .animate-slide-down {
77
+ animation: slide-down 0.6s ease-out;
78
+ }
79
+
80
+ .animate-fade-in-up {
81
+ animation: fade-in-up 0.6s ease-out;
82
+ animation-fill-mode: both;
83
+ }
84
+
85
+ .animate-marquee {
86
+ animation: marquee 20s linear infinite;
87
+ }
88
+
89
+ .animation-delay-2000 {
90
+ animation-delay: 2s;
91
+ }
92
+
93
+ .animation-delay-4000 {
94
+ animation-delay: 4s;
95
+ }
@@ -66,7 +66,20 @@ export default function Home() {
66
66
  showOfflineIndicator={true}
67
67
  backgroundSync={true}
68
68
  >
69
- <main className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800">
69
+ <main className="min-h-screen relative overflow-hidden bg-background">
70
+ {/* Theme-aware gradient background for authentication-focused app */}
71
+ <div className="absolute inset-0 bg-gradient-to-br from-primary/8 via-background to-secondary/8 dark:from-primary/15 dark:via-background dark:to-secondary/15" />
72
+ <div className="absolute inset-0 bg-gradient-to-tl from-accent/4 via-transparent to-primary/4 dark:from-accent/8 dark:via-transparent dark:to-primary/8" />
73
+ <div className="absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_right,_var(--tw-gradient-stops))] from-primary/12 via-transparent to-transparent dark:from-primary/20 dark:via-transparent dark:to-transparent" />
74
+ {/* Animated auth-themed particles */}
75
+ <div className="absolute inset-0 opacity-20 dark:opacity-12">
76
+ <div className="absolute top-1/6 left-1/6 w-56 h-56 bg-primary/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/60"></div>
77
+ <div className="absolute bottom-1/5 right-1/4 w-72 h-72 bg-secondary/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-secondary/60"></div>
78
+ <div className="absolute top-1/2 right-1/6 w-48 h-48 bg-accent/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-accent/60"></div>
79
+ </div>
80
+ {/* Minimal depth overlay */}
81
+ <div className="absolute inset-0 bg-gradient-to-t from-transparent via-background/1 to-background/3" />
82
+ <div className="relative z-10">
70
83
  <MobileContainer className="py-16">
71
84
  {/* Auth Status Bar with Network Info */}
72
85
  <div className="flex flex-col sm:flex-row justify-between items-center mb-8 gap-4">
@@ -17,9 +17,9 @@
17
17
  "next": "^15.0.0",
18
18
  "react": "^19.0.0",
19
19
  "react-dom": "^19.0.0",
20
- "@digilogiclabs/saas-factory-ui": "^0.18.2",
21
- "@digilogiclabs/saas-factory-auth": "^1.0.0",
22
- "@digilogiclabs/saas-factory-payments": "^1.0.0",
20
+ "@digilogiclabs/saas-factory-ui": "^0.18.4",
21
+ "@digilogiclabs/saas-factory-auth": "^1.0.1",
22
+ "@digilogiclabs/saas-factory-payments": "^1.1.0",
23
23
  "stripe": "^14.0.0",
24
24
  "tailwindcss": "^3.3.0",
25
25
  "autoprefixer": "^10.4.16",
@@ -169,3 +169,43 @@
169
169
  .progressive-image.loaded {
170
170
  filter: blur(0);
171
171
  }
172
+
173
+ /* Additional custom animations for enhanced visual effects */
174
+ @keyframes slide-down {
175
+ from {
176
+ opacity: 0;
177
+ transform: translateY(-10px);
178
+ }
179
+ to {
180
+ opacity: 1;
181
+ transform: translateY(0);
182
+ }
183
+ }
184
+
185
+ @keyframes fade-in-up {
186
+ from {
187
+ opacity: 0;
188
+ transform: translateY(10px);
189
+ }
190
+ to {
191
+ opacity: 1;
192
+ transform: translateY(0);
193
+ }
194
+ }
195
+
196
+ .animate-slide-down {
197
+ animation: slide-down 0.6s ease-out;
198
+ }
199
+
200
+ .animate-fade-in-up {
201
+ animation: fade-in-up 0.6s ease-out;
202
+ animation-fill-mode: both;
203
+ }
204
+
205
+ .animation-delay-2000 {
206
+ animation-delay: 2s;
207
+ }
208
+
209
+ .animation-delay-4000 {
210
+ animation-delay: 4s;
211
+ }
@@ -84,7 +84,20 @@ export default function Home() {
84
84
  hapticOnTrigger={true}
85
85
  networkAware={true}
86
86
  >
87
- <main className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800">
87
+ <main className="min-h-screen relative overflow-hidden bg-background">
88
+ {/* Theme-aware gradient background for SaaS platform */}
89
+ <div className="absolute inset-0 bg-gradient-to-br from-primary/10 via-background to-secondary/10 dark:from-primary/20 dark:via-background dark:to-secondary/20" />
90
+ <div className="absolute inset-0 bg-gradient-to-tr from-accent/5 via-transparent to-primary/5 dark:from-accent/10 dark:via-transparent dark:to-primary/10" />
91
+ <div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-secondary/15 via-transparent to-transparent dark:from-secondary/25 dark:via-transparent dark:to-transparent" />
92
+ {/* Animated business-themed particles */}
93
+ <div className="absolute inset-0 opacity-25 dark:opacity-15">
94
+ <div className="absolute top-1/5 right-1/5 w-64 h-64 bg-primary/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/70"></div>
95
+ <div className="absolute bottom-1/3 left-1/4 w-80 h-80 bg-secondary/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-secondary/70"></div>
96
+ <div className="absolute top-2/3 right-1/3 w-56 h-56 bg-accent/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-accent/70"></div>
97
+ </div>
98
+ {/* Subtle depth overlay */}
99
+ <div className="absolute inset-0 bg-gradient-to-b from-transparent via-background/2 to-background/5" />
100
+ <div className="relative z-10">
88
101
  <MobileContainer className="py-16">
89
102
  {/* Network & Auth Status Bar */}
90
103
  <div className="flex flex-col sm:flex-row justify-between items-center mb-8 gap-4">