@digilogiclabs/create-saas-app 1.5.1 → 1.5.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.
Files changed (115) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cli/commands/add.d.ts +6 -0
  3. package/dist/cli/commands/add.d.ts.map +1 -0
  4. package/dist/cli/commands/add.js +39 -0
  5. package/dist/cli/commands/add.js.map +1 -0
  6. package/dist/cli/commands/create.d.ts +28 -0
  7. package/dist/cli/commands/create.d.ts.map +1 -0
  8. package/dist/cli/commands/create.js +130 -0
  9. package/dist/cli/commands/create.js.map +1 -0
  10. package/dist/cli/commands/index.d.ts +4 -0
  11. package/dist/cli/commands/index.d.ts.map +1 -0
  12. package/dist/cli/commands/index.js +20 -0
  13. package/dist/cli/commands/index.js.map +1 -0
  14. package/dist/cli/commands/update.d.ts +6 -0
  15. package/dist/cli/commands/update.d.ts.map +1 -0
  16. package/dist/cli/commands/update.js +68 -0
  17. package/dist/cli/commands/update.js.map +1 -0
  18. package/dist/{index.d.ts → cli/index.d.ts} +2 -3
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/index.js +59 -0
  21. package/dist/cli/index.js.map +1 -0
  22. package/dist/cli/prompts/index.d.ts +2 -0
  23. package/dist/cli/prompts/index.d.ts.map +1 -0
  24. package/dist/cli/prompts/index.js +18 -0
  25. package/dist/cli/prompts/index.js.map +1 -0
  26. package/dist/cli/prompts/project-setup.d.ts +5 -0
  27. package/dist/cli/prompts/project-setup.d.ts.map +1 -0
  28. package/dist/cli/prompts/project-setup.js +251 -0
  29. package/dist/cli/prompts/project-setup.js.map +1 -0
  30. package/dist/cli/utils/git.d.ts +9 -0
  31. package/dist/cli/utils/git.d.ts.map +1 -0
  32. package/dist/cli/utils/git.js +77 -0
  33. package/dist/cli/utils/git.js.map +1 -0
  34. package/dist/cli/utils/index.d.ts +5 -0
  35. package/dist/cli/utils/index.d.ts.map +1 -0
  36. package/dist/cli/utils/index.js +21 -0
  37. package/dist/cli/utils/index.js.map +1 -0
  38. package/dist/cli/utils/logger.d.ts +16 -0
  39. package/dist/cli/utils/logger.d.ts.map +1 -0
  40. package/dist/cli/utils/logger.js +55 -0
  41. package/dist/cli/utils/logger.js.map +1 -0
  42. package/dist/cli/utils/package-manager.d.ts +8 -0
  43. package/dist/cli/utils/package-manager.d.ts.map +1 -0
  44. package/dist/cli/utils/package-manager.js +92 -0
  45. package/dist/cli/utils/package-manager.js.map +1 -0
  46. package/dist/cli/utils/spinner.d.ts +7 -0
  47. package/dist/cli/utils/spinner.d.ts.map +1 -0
  48. package/dist/cli/utils/spinner.js +48 -0
  49. package/dist/cli/utils/spinner.js.map +1 -0
  50. package/dist/cli/validators/dependencies.d.ts +15 -0
  51. package/dist/cli/validators/dependencies.d.ts.map +1 -0
  52. package/dist/cli/validators/dependencies.js +108 -0
  53. package/dist/cli/validators/dependencies.js.map +1 -0
  54. package/dist/cli/validators/index.d.ts +3 -0
  55. package/dist/cli/validators/index.d.ts.map +1 -0
  56. package/dist/cli/validators/index.js +19 -0
  57. package/dist/cli/validators/index.js.map +1 -0
  58. package/dist/cli/validators/project-name.d.ts +5 -0
  59. package/dist/cli/validators/project-name.d.ts.map +1 -0
  60. package/dist/cli/validators/project-name.js +151 -0
  61. package/dist/cli/validators/project-name.js.map +1 -0
  62. package/dist/generators/file-processor.d.ts +28 -0
  63. package/dist/generators/file-processor.d.ts.map +1 -0
  64. package/dist/generators/file-processor.js +203 -0
  65. package/dist/generators/file-processor.js.map +1 -0
  66. package/dist/generators/index.d.ts +4 -0
  67. package/dist/generators/index.d.ts.map +1 -0
  68. package/dist/generators/index.js +20 -0
  69. package/dist/generators/index.js.map +1 -0
  70. package/dist/generators/package-installer.d.ts +29 -0
  71. package/dist/generators/package-installer.d.ts.map +1 -0
  72. package/dist/generators/package-installer.js +167 -0
  73. package/dist/generators/package-installer.js.map +1 -0
  74. package/dist/generators/template-generator.d.ts +48 -0
  75. package/dist/generators/template-generator.d.ts.map +1 -0
  76. package/dist/generators/template-generator.js +276 -0
  77. package/dist/generators/template-generator.js.map +1 -0
  78. package/dist/index.js +3 -3
  79. package/dist/index.js.map +1 -1
  80. package/dist/templates/web/ui-auth-payments/template/package-lock.json +12240 -0
  81. package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +1 -1
  82. package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +3 -3
  83. package/dist/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +1 -0
  84. package/dist/templates/web/ui-auth-payments-audio/template/middleware.ts +68 -0
  85. package/dist/templates/web/ui-auth-payments-audio/template/package-lock.json +12241 -0
  86. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/layout.tsx +22 -0
  87. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +183 -0
  88. package/dist/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +2 -105
  89. package/dist/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +2 -124
  90. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +52 -0
  91. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +144 -0
  92. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +185 -0
  93. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +246 -0
  94. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/index.ts +14 -0
  95. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/auth-server.ts +177 -0
  96. package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +1 -0
  97. package/dist/templates/web/ui-package-test/template/next-env.d.ts +5 -0
  98. package/package.json +4 -3
  99. package/src/templates/web/ui-auth-payments/template/package-lock.json +12240 -0
  100. package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +1 -1
  101. package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +3 -3
  102. package/src/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +1 -0
  103. package/src/templates/web/ui-auth-payments-audio/template/middleware.ts +68 -0
  104. package/src/templates/web/ui-auth-payments-audio/template/package-lock.json +12241 -0
  105. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/layout.tsx +22 -0
  106. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +183 -0
  107. package/src/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +2 -105
  108. package/src/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +2 -124
  109. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +52 -0
  110. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +144 -0
  111. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +185 -0
  112. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +246 -0
  113. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/index.ts +14 -0
  114. package/src/templates/web/ui-auth-payments-audio/template/src/lib/auth-server.ts +177 -0
  115. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +1 -0
@@ -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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"}
@@ -0,0 +1,48 @@
1
+ import { ProjectConfig } from '../cli/commands/create';
2
+ export interface TemplateContext {
3
+ projectName: string;
4
+ platform: string;
5
+ template: string;
6
+ auth: string;
7
+ database: string;
8
+ theme: string;
9
+ themeColor: string;
10
+ defaultTheme: string;
11
+ packageName: string;
12
+ className: string;
13
+ camelCaseName: string;
14
+ kebabCaseName: string;
15
+ titleCaseName: string;
16
+ description: string;
17
+ author: string;
18
+ year: number;
19
+ generatedDate: string;
20
+ generatorVersion: string;
21
+ uiVersion: string;
22
+ authVersion: string;
23
+ paymentsVersion: string;
24
+ dependencies: Record<string, string>;
25
+ devDependencies: Record<string, string>;
26
+ scripts: Record<string, string>;
27
+ }
28
+ export declare class TemplateGenerator {
29
+ private config;
30
+ private context;
31
+ private templatesDir;
32
+ constructor(config: ProjectConfig);
33
+ private createTemplateContext;
34
+ private getDependencies;
35
+ private getDevDependencies;
36
+ private getScripts;
37
+ generate(outputPath: string): Promise<void>;
38
+ private generateWebProject;
39
+ private generateMobileProject;
40
+ private copyTemplate;
41
+ private copyAndProcessFiles;
42
+ private copySharedResources;
43
+ private isTextFile;
44
+ private toPascalCase;
45
+ private toCamelCase;
46
+ private toTitleCase;
47
+ }
48
+ //# sourceMappingURL=template-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-generator.d.ts","sourceRoot":"","sources":["../../src/generators/template-generator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,aAAa;IAUjC,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,eAAe;IAoEvB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,UAAU;IAwBL,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAyB1C,kBAAkB;YAKlB,qBAAqB;YAKrB,YAAY;YASZ,mBAAmB;YA6BnB,mBAAmB;IAsBjC,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,276 @@
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.TemplateGenerator = 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 glob_1 = require("glob");
11
+ const logger_1 = require("../cli/utils/logger");
12
+ class TemplateGenerator {
13
+ constructor(config) {
14
+ this.config = config;
15
+ // Check if we're in development (src) or production (dist)
16
+ const isDev = __dirname.includes('/src/');
17
+ this.templatesDir = isDev
18
+ ? path_1.default.join(__dirname, '..', 'templates')
19
+ : path_1.default.join(__dirname, 'templates');
20
+ this.context = this.createTemplateContext();
21
+ }
22
+ createTemplateContext() {
23
+ const projectName = this.config.name;
24
+ const packageName = projectName.toLowerCase().replace(/[^a-z0-9-]/g, '-');
25
+ const className = this.toPascalCase(projectName);
26
+ const camelCaseName = this.toCamelCase(projectName);
27
+ const kebabCaseName = packageName;
28
+ const titleCaseName = this.toTitleCase(projectName);
29
+ const dependencies = this.getDependencies();
30
+ const generatedDate = new Date().toLocaleDateString('en-US', {
31
+ year: 'numeric',
32
+ month: 'short',
33
+ day: 'numeric',
34
+ });
35
+ return {
36
+ projectName,
37
+ platform: this.config.platform,
38
+ template: this.config.template,
39
+ auth: this.config.auth,
40
+ database: this.config.database,
41
+ theme: this.config.theme,
42
+ themeColor: this.config.themeColor,
43
+ defaultTheme: this.config.defaultTheme,
44
+ packageName,
45
+ className,
46
+ camelCaseName,
47
+ kebabCaseName,
48
+ titleCaseName,
49
+ description: `A modern SaaS application built with Digi Logic Labs`,
50
+ author: 'Digi Logic Labs',
51
+ year: new Date().getFullYear(),
52
+ generatedDate,
53
+ generatorVersion: '1.5.0',
54
+ uiVersion: dependencies['@digilogiclabs/saas-factory-ui']?.replace('^', '') || '0.11.1',
55
+ authVersion: dependencies['@digilogiclabs/saas-factory-auth']?.replace('^', '') || '1.0.0',
56
+ paymentsVersion: dependencies['@digilogiclabs/saas-factory-payments']?.replace('^', '') || '1.0.0',
57
+ dependencies,
58
+ devDependencies: this.getDevDependencies(),
59
+ scripts: this.getScripts(),
60
+ };
61
+ }
62
+ getDependencies() {
63
+ const baseDeps = {};
64
+ // Add UI package for ui-only, ui-auth, ui-auth-payments, and media player templates
65
+ if ([
66
+ 'ui-only',
67
+ 'ui-auth',
68
+ 'ui-auth-payments',
69
+ 'ui-auth-payments-audio',
70
+ 'ui-auth-payments-video',
71
+ ].includes(this.config.template)) {
72
+ baseDeps['@digilogiclabs/saas-factory-ui'] = '^0.11.1';
73
+ }
74
+ // Add auth package for auth-enabled templates
75
+ if (['ui-auth', 'ui-auth-payments', 'ui-auth-payments-audio', 'ui-auth-payments-video'].includes(this.config.template)) {
76
+ baseDeps['@digilogiclabs/saas-factory-auth'] = '^1.0.0';
77
+ }
78
+ // Add payments package for payment-enabled templates
79
+ if (['ui-auth-payments', 'ui-auth-payments-audio', 'ui-auth-payments-video'].includes(this.config.template)) {
80
+ baseDeps['@digilogiclabs/saas-factory-payments'] = '^1.0.0';
81
+ }
82
+ if (this.config.platform === 'web' || this.config.platform === 'both') {
83
+ Object.assign(baseDeps, {
84
+ next: '^15.0.0',
85
+ react: '^19.0.0',
86
+ 'react-dom': '^19.0.0',
87
+ tailwindcss: '^3.3.0',
88
+ typescript: '^5.0.0',
89
+ clsx: '^2.0.0',
90
+ 'class-variance-authority': '^0.7.0',
91
+ 'tailwind-merge': '^2.0.0',
92
+ 'next-themes': '^0.2.1',
93
+ 'lucide-react': '^0.292.0',
94
+ autoprefixer: '^10.4.16',
95
+ postcss: '^8.4.31',
96
+ });
97
+ }
98
+ if (this.config.platform === 'mobile' || this.config.platform === 'both') {
99
+ Object.assign(baseDeps, {
100
+ expo: '~49.0.0',
101
+ 'react-native': '0.72.0',
102
+ '@expo/vector-icons': '^13.0.0',
103
+ });
104
+ }
105
+ if (this.config.auth === 'firebase') {
106
+ baseDeps['firebase'] = '^10.0.0';
107
+ }
108
+ else if (this.config.auth === 'supabase') {
109
+ baseDeps['@supabase/supabase-js'] = '^2.0.0';
110
+ }
111
+ return baseDeps;
112
+ }
113
+ getDevDependencies() {
114
+ const baseDeps = {
115
+ '@types/node': '^20.0.0',
116
+ eslint: '^8.0.0',
117
+ prettier: '^3.0.0',
118
+ };
119
+ if (this.config.platform === 'web' || this.config.platform === 'both') {
120
+ Object.assign(baseDeps, {
121
+ '@types/react': '^18.0.0',
122
+ '@types/react-dom': '^18.0.0',
123
+ autoprefixer: '^10.0.0',
124
+ postcss: '^8.0.0',
125
+ });
126
+ }
127
+ return baseDeps;
128
+ }
129
+ getScripts() {
130
+ const scripts = {};
131
+ if (this.config.platform === 'web' || this.config.platform === 'both') {
132
+ Object.assign(scripts, {
133
+ dev: 'next dev',
134
+ build: 'next build',
135
+ start: 'next start',
136
+ lint: 'next lint',
137
+ });
138
+ }
139
+ if (this.config.platform === 'mobile' || this.config.platform === 'both') {
140
+ Object.assign(scripts, {
141
+ start: 'expo start',
142
+ android: 'expo start --android',
143
+ ios: 'expo start --ios',
144
+ web: 'expo start --web',
145
+ });
146
+ }
147
+ return scripts;
148
+ }
149
+ async generate(outputPath) {
150
+ try {
151
+ // Ensure output directory exists
152
+ await fs_extra_1.default.ensureDir(outputPath);
153
+ // Generate based on platform
154
+ if (this.config.platform === 'web') {
155
+ await this.generateWebProject(outputPath);
156
+ }
157
+ else if (this.config.platform === 'mobile') {
158
+ await this.generateMobileProject(outputPath);
159
+ }
160
+ else if (this.config.platform === 'both') {
161
+ await this.generateWebProject(outputPath);
162
+ await this.generateMobileProject(path_1.default.join(outputPath, 'mobile'));
163
+ }
164
+ // Copy shared resources
165
+ await this.copySharedResources(outputPath);
166
+ logger_1.logger.debug('Template generation completed');
167
+ }
168
+ catch (error) {
169
+ logger_1.logger.error('Template generation failed:', error);
170
+ throw error;
171
+ }
172
+ }
173
+ async generateWebProject(outputPath) {
174
+ const templatePath = path_1.default.join(this.templatesDir, 'web', this.config.template);
175
+ await this.copyTemplate(templatePath, outputPath);
176
+ }
177
+ async generateMobileProject(outputPath) {
178
+ const templatePath = path_1.default.join(this.templatesDir, 'mobile', this.config.template);
179
+ await this.copyTemplate(templatePath, outputPath);
180
+ }
181
+ async copyTemplate(templatePath, outputPath) {
182
+ const templateDir = path_1.default.join(templatePath, 'template');
183
+ if (!(await fs_extra_1.default.pathExists(templateDir))) {
184
+ throw new Error(`Template not found: ${templateDir}`);
185
+ }
186
+ await this.copyAndProcessFiles(templateDir, outputPath);
187
+ }
188
+ async copyAndProcessFiles(sourceDir, targetDir) {
189
+ if (!(await fs_extra_1.default.pathExists(sourceDir))) {
190
+ logger_1.logger.debug(`Template source directory not found: ${sourceDir}`);
191
+ return;
192
+ }
193
+ const files = await (0, glob_1.glob)('**/*', {
194
+ cwd: sourceDir,
195
+ dot: true,
196
+ nodir: true,
197
+ });
198
+ for (const file of files) {
199
+ const sourcePath = path_1.default.join(sourceDir, file);
200
+ const targetPath = path_1.default.join(targetDir, file);
201
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(targetPath));
202
+ const content = await fs_extra_1.default.readFile(sourcePath, 'utf-8');
203
+ if (this.isTextFile(file)) {
204
+ const processedContent = mustache_1.default.render(content, this.context);
205
+ await fs_extra_1.default.writeFile(targetPath, processedContent);
206
+ }
207
+ else {
208
+ await fs_extra_1.default.copy(sourcePath, targetPath);
209
+ }
210
+ }
211
+ }
212
+ async copySharedResources(outputPath) {
213
+ // Skip copying shared resources for UI-only templates
214
+ if (this.config.template === 'ui-only') {
215
+ logger_1.logger.debug('Skipping shared resources for UI-only template');
216
+ return;
217
+ }
218
+ const sharedPath = path_1.default.join(this.templatesDir, 'shared');
219
+ // Copy auth configuration
220
+ const authPath = path_1.default.join(sharedPath, 'auth', this.config.auth);
221
+ await this.copyAndProcessFiles(authPath, outputPath);
222
+ // Copy theme configuration
223
+ const themePath = path_1.default.join(sharedPath, 'themes', this.config.theme);
224
+ await this.copyAndProcessFiles(themePath, outputPath);
225
+ // Copy database configuration
226
+ const dbPath = path_1.default.join(sharedPath, 'database', this.config.database);
227
+ await this.copyAndProcessFiles(dbPath, outputPath);
228
+ }
229
+ isTextFile(filename) {
230
+ const textExtensions = [
231
+ '.js',
232
+ '.jsx',
233
+ '.ts',
234
+ '.tsx',
235
+ '.json',
236
+ '.md',
237
+ '.txt',
238
+ '.yml',
239
+ '.yaml',
240
+ '.xml',
241
+ '.html',
242
+ '.css',
243
+ '.scss',
244
+ '.sass',
245
+ '.less',
246
+ '.env',
247
+ '.gitignore',
248
+ '.eslintrc',
249
+ '.prettierrc',
250
+ '.editorconfig',
251
+ '.nvmrc',
252
+ ];
253
+ const ext = path_1.default.extname(filename).toLowerCase();
254
+ return textExtensions.includes(ext) || !ext;
255
+ }
256
+ toPascalCase(str) {
257
+ return str
258
+ .replace(/[^a-zA-Z0-9]/g, ' ')
259
+ .split(' ')
260
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
261
+ .join('');
262
+ }
263
+ toCamelCase(str) {
264
+ const pascal = this.toPascalCase(str);
265
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
266
+ }
267
+ toTitleCase(str) {
268
+ return str
269
+ .replace(/[^a-zA-Z0-9]/g, ' ')
270
+ .split(' ')
271
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
272
+ .join(' ');
273
+ }
274
+ }
275
+ exports.TemplateGenerator = TemplateGenerator;
276
+ //# sourceMappingURL=template-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-generator.js","sourceRoot":"","sources":["../../src/generators/template-generator.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1049,20 +1049,20 @@ async function updateDependencies(options = {}) {
1049
1049
  // package.json
1050
1050
  var package_default = {
1051
1051
  name: "@digilogiclabs/create-saas-app",
1052
- version: "1.5.1",
1052
+ version: "1.5.2",
1053
1053
  description: "Create modern SaaS applications with Digi Logic Labs packages",
1054
1054
  main: "dist/index.js",
1055
1055
  bin: {
1056
1056
  "create-saas-app": "bin/index.js"
1057
1057
  },
1058
1058
  scripts: {
1059
- build: "tsup",
1059
+ build: "tsc --project tsconfig.build.json",
1060
1060
  dev: "tsup --watch",
1061
1061
  test: "jest",
1062
1062
  "test:templates": "tsx scripts/test-all-templates.ts",
1063
1063
  lint: "eslint src",
1064
1064
  "lint:fix": "eslint src --fix",
1065
- "type-check": "tsc --noEmit",
1065
+ "type-check": "tsc --noEmit --skipLibCheck",
1066
1066
  validate: "tsx scripts/validate-templates.ts",
1067
1067
  changeset: "changeset",
1068
1068
  version: "changeset version",