@mvp-kit/create 0.0.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.
- package/README.md +145 -0
- package/dist/create.js +549 -0
- package/dist/create.js.map +1 -0
- package/dist/database.js +131 -0
- package/dist/database.js.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/template-downloader.js +231 -0
- package/dist/template-downloader.js.map +1 -0
- package/dist/template.js +160 -0
- package/dist/template.js.map +1 -0
- package/dist/test.js +359 -0
- package/dist/test.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.js +100 -0
- package/dist/utils.js.map +1 -0
- package/package.json +47 -0
package/dist/template.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import Handlebars from 'handlebars';
|
|
2
|
+
// Register Handlebars helpers
|
|
3
|
+
Handlebars.registerHelper('kebabCase', (str) => str.toLowerCase().replace(/[_\s]+/g, '-'));
|
|
4
|
+
Handlebars.registerHelper('camelCase', (str) => str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()));
|
|
5
|
+
Handlebars.registerHelper('pascalCase', (str) => str.replace(/(^|-)([a-z])/g, (_, __, letter) => letter.toUpperCase()));
|
|
6
|
+
Handlebars.registerHelper('eq', (a, b) => a === b);
|
|
7
|
+
Handlebars.registerHelper('startsWith', (str, prefix) => str && str.startsWith(prefix));
|
|
8
|
+
export function transformPackageJson(content, variables) {
|
|
9
|
+
try {
|
|
10
|
+
const pkg = JSON.parse(content);
|
|
11
|
+
// Transform root package.json (handles both old and new template format)
|
|
12
|
+
if (pkg.name === 'mvpkit-core' || pkg.name === '{{projectName}}') {
|
|
13
|
+
pkg.name = variables.projectKebabCase;
|
|
14
|
+
pkg.description = variables.projectDescription;
|
|
15
|
+
// Set package manager in package.json
|
|
16
|
+
pkg.packageManager = `${variables.packageManager}@${variables.packageManagerVersion || 'latest'}`;
|
|
17
|
+
}
|
|
18
|
+
// Transform frontend package.json
|
|
19
|
+
if (pkg.name === '@mvpkit/core-frontend') {
|
|
20
|
+
pkg.name = variables.frontendPackageName;
|
|
21
|
+
pkg.description = `${variables.projectDisplayName} - Frontend`;
|
|
22
|
+
}
|
|
23
|
+
// Transform backend package.json
|
|
24
|
+
if (pkg.name === '@mvpkit/core-backend') {
|
|
25
|
+
pkg.name = variables.backendPackageName;
|
|
26
|
+
pkg.description = `${variables.projectDisplayName} - Backend`;
|
|
27
|
+
}
|
|
28
|
+
// Transform api package.json
|
|
29
|
+
if (pkg.name === '@mvpkit/core-api') {
|
|
30
|
+
pkg.name = variables.apiPackageName;
|
|
31
|
+
pkg.description = `${variables.projectDisplayName} - API Types`;
|
|
32
|
+
}
|
|
33
|
+
// Transform config package.json
|
|
34
|
+
if (pkg.name === '@mvpkit/core-config') {
|
|
35
|
+
pkg.name = variables.configPackageName;
|
|
36
|
+
pkg.description = `${variables.projectDisplayName} - Configuration`;
|
|
37
|
+
}
|
|
38
|
+
// Update dependencies that reference @mvpkit/core-*
|
|
39
|
+
if (pkg.dependencies) {
|
|
40
|
+
Object.keys(pkg.dependencies).forEach(dep => {
|
|
41
|
+
if (dep.startsWith('@mvpkit/core-')) {
|
|
42
|
+
const newDep = dep.replace('@mvpkit/core-', `${variables.packageScope}/`);
|
|
43
|
+
pkg.dependencies[newDep] = pkg.dependencies[dep];
|
|
44
|
+
delete pkg.dependencies[dep];
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Update devDependencies that reference @mvpkit/core-*
|
|
49
|
+
if (pkg.devDependencies) {
|
|
50
|
+
Object.keys(pkg.devDependencies).forEach(dep => {
|
|
51
|
+
if (dep.startsWith('@mvpkit/core-')) {
|
|
52
|
+
const newDep = dep.replace('@mvpkit/core-', `${variables.packageScope}/`);
|
|
53
|
+
pkg.devDependencies[newDep] = pkg.devDependencies[dep];
|
|
54
|
+
delete pkg.devDependencies[dep];
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Update scripts that reference package names and database names
|
|
59
|
+
if (pkg.scripts) {
|
|
60
|
+
Object.keys(pkg.scripts).forEach(scriptName => {
|
|
61
|
+
if (typeof pkg.scripts[scriptName] === 'string') {
|
|
62
|
+
pkg.scripts[scriptName] = pkg.scripts[scriptName]
|
|
63
|
+
.replace(/@mvpkit\/core-frontend/g, variables.frontendPackageName)
|
|
64
|
+
.replace(/@mvpkit\/core-backend/g, variables.backendPackageName)
|
|
65
|
+
.replace(/mvpkit-core-frontend/g, variables.pagesName)
|
|
66
|
+
.replace(/mvpkit-core-backend/g, variables.workersName)
|
|
67
|
+
// Replace database names in scripts
|
|
68
|
+
.replace(/mvpkit-core-db-dev/g, `${variables.databaseName}-dev`)
|
|
69
|
+
.replace(/mvpkit-core-db/g, variables.databaseName)
|
|
70
|
+
// Replace template variables
|
|
71
|
+
.replace(/{{databaseName}}/g, variables.databaseName);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return JSON.stringify(pkg, null, 2);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
// If not valid JSON, treat as template
|
|
79
|
+
return transformTemplate(content, variables);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function transformWranglerToml(content, variables) {
|
|
83
|
+
let transformed = content;
|
|
84
|
+
// Replace worker names
|
|
85
|
+
transformed = transformed.replace(/name = "mvpkit-core-backend"/g, `name = "${variables.workersName}"`);
|
|
86
|
+
// Replace database names
|
|
87
|
+
transformed = transformed.replace(/database_name = "mvpkit-core-db"/g, `database_name = "${variables.databaseName}"`);
|
|
88
|
+
transformed = transformed.replace(/database_name = "mvpkit-core-db-dev"/g, `database_name = "${variables.databaseName}-dev"`);
|
|
89
|
+
// Keep placeholder database IDs for local development
|
|
90
|
+
// Production database IDs will be configured when deploying
|
|
91
|
+
// Replace Pages project names
|
|
92
|
+
transformed = transformed.replace(/project-name=mvpkit-core-frontend/g, `project-name=${variables.pagesName}`);
|
|
93
|
+
return transformTemplate(transformed, variables);
|
|
94
|
+
}
|
|
95
|
+
export function transformEnvFile(content, variables) {
|
|
96
|
+
let transformed = content;
|
|
97
|
+
// Replace API URLs
|
|
98
|
+
transformed = transformed.replace(/mvpkit-core-backend/g, variables.workersName);
|
|
99
|
+
// Replace domain references
|
|
100
|
+
if (variables.domainName) {
|
|
101
|
+
transformed = transformed.replace(/localhost:5173/g, variables.domainName);
|
|
102
|
+
}
|
|
103
|
+
return transformTemplate(transformed, variables);
|
|
104
|
+
}
|
|
105
|
+
export function transformTypeScriptImports(content, variables) {
|
|
106
|
+
let transformed = content;
|
|
107
|
+
// Replace package imports
|
|
108
|
+
transformed = transformed.replace(/@mvpkit\/core-api/g, variables.apiPackageName);
|
|
109
|
+
transformed = transformed.replace(/@mvpkit\/core-config/g, variables.configPackageName);
|
|
110
|
+
// Fix specific unused input variables in the license validation procedures
|
|
111
|
+
// This is a temporary fix until the core template is cleaned up
|
|
112
|
+
// Fix validateLicense procedure that doesn't use input
|
|
113
|
+
transformed = transformed.replace('.mutation(async ({ input }) => ({\n valid: true,\n jwt_token: \'mock-jwt-token\',\n features: [\'basic-features\'],', '.mutation(async ({ input: _ }) => ({\n valid: true,\n jwt_token: \'mock-jwt-token\',\n features: [\'basic-features\'],');
|
|
114
|
+
// Fix getLicenseStatus procedure that doesn't use input
|
|
115
|
+
transformed = transformed.replace('.query(({ input }) => ({\n valid: true,\n license_id: \'lic_123\',', '.query(({ input: _ }) => ({\n valid: true,\n license_id: \'lic_123\',');
|
|
116
|
+
return transformTemplate(transformed, variables);
|
|
117
|
+
}
|
|
118
|
+
export function transformTemplate(content, variables) {
|
|
119
|
+
try {
|
|
120
|
+
const template = Handlebars.compile(content);
|
|
121
|
+
return template(variables);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
// If Handlebars compilation fails, do simple string replacement
|
|
125
|
+
let result = content;
|
|
126
|
+
// Replace common patterns
|
|
127
|
+
result = result.replace(/mvpkit-core/g, variables.projectKebabCase);
|
|
128
|
+
result = result.replace(/MVPKit Core/g, variables.projectDisplayName);
|
|
129
|
+
result = result.replace(/mvpkit\/core/g, `${variables.packageScope.slice(1)}/core`);
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export function getFileTransformFunction(fileName) {
|
|
134
|
+
const lowerFileName = fileName.toLowerCase();
|
|
135
|
+
if (lowerFileName === 'package.json') {
|
|
136
|
+
return transformPackageJson;
|
|
137
|
+
}
|
|
138
|
+
if (lowerFileName === 'wrangler.toml') {
|
|
139
|
+
return transformWranglerToml;
|
|
140
|
+
}
|
|
141
|
+
if (lowerFileName.includes('.env') || lowerFileName.includes('.vars')) {
|
|
142
|
+
return transformEnvFile;
|
|
143
|
+
}
|
|
144
|
+
if (lowerFileName.endsWith('.ts') || lowerFileName.endsWith('.tsx') || lowerFileName.endsWith('.js') || lowerFileName.endsWith('.jsx')) {
|
|
145
|
+
return transformTypeScriptImports;
|
|
146
|
+
}
|
|
147
|
+
if (lowerFileName.endsWith('.md') || lowerFileName.endsWith('.mdx') || lowerFileName.endsWith('.html')) {
|
|
148
|
+
return transformTemplate;
|
|
149
|
+
}
|
|
150
|
+
// Default: try template transformation, fall back to no transformation
|
|
151
|
+
return (content, variables) => {
|
|
152
|
+
try {
|
|
153
|
+
return transformTemplate(content, variables);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return content;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
|
package/dist/test.js
ADDED
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { createProject } from './create.js';
|
|
8
|
+
class AppValidator {
|
|
9
|
+
testDir;
|
|
10
|
+
appName;
|
|
11
|
+
appPath;
|
|
12
|
+
constructor(testDir = 'test-validation') {
|
|
13
|
+
this.testDir = testDir;
|
|
14
|
+
this.appName = `test-app-${Date.now()}`;
|
|
15
|
+
this.appPath = path.join(testDir, this.appName);
|
|
16
|
+
}
|
|
17
|
+
async runFullValidation() {
|
|
18
|
+
const results = [];
|
|
19
|
+
const originalCwd = process.cwd();
|
|
20
|
+
console.log(chalk.blue.bold('🧪 MVPKit CLI - Full App Validation\n'));
|
|
21
|
+
try {
|
|
22
|
+
// Clean up any existing test directory
|
|
23
|
+
const fullTestDir = path.resolve(originalCwd, this.testDir);
|
|
24
|
+
if (fs.existsSync(fullTestDir)) {
|
|
25
|
+
await fs.remove(fullTestDir);
|
|
26
|
+
}
|
|
27
|
+
await fs.ensureDir(fullTestDir);
|
|
28
|
+
// Test 1: App Creation
|
|
29
|
+
results.push(await this.testAppCreation(originalCwd));
|
|
30
|
+
// Test 2: Package.json Validation
|
|
31
|
+
results.push(await this.testPackageJsonTransformation());
|
|
32
|
+
// Test 3: Dependency Installation
|
|
33
|
+
results.push(await this.testDependencyInstallation());
|
|
34
|
+
// Test 4: Build Process (must come before TypeScript check)
|
|
35
|
+
results.push(await this.testBuildProcess());
|
|
36
|
+
// Test 5: TypeScript Compilation
|
|
37
|
+
results.push(await this.testTypeScriptCompilation());
|
|
38
|
+
// Test 6: Linting
|
|
39
|
+
results.push(await this.testLinting());
|
|
40
|
+
// Test 7: Project Structure
|
|
41
|
+
results.push(await this.testProjectStructure());
|
|
42
|
+
// Test 8: Environment Files
|
|
43
|
+
results.push(await this.testEnvironmentFiles());
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
results.push({
|
|
47
|
+
name: 'Test Suite Setup',
|
|
48
|
+
success: false,
|
|
49
|
+
error: error instanceof Error ? error.message : String(error)
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
this.printResults(results);
|
|
53
|
+
return results;
|
|
54
|
+
}
|
|
55
|
+
async testAppCreation(originalCwd) {
|
|
56
|
+
const spinner = ora('Creating test app...').start();
|
|
57
|
+
const startTime = Date.now();
|
|
58
|
+
try {
|
|
59
|
+
// Create app in the test directory
|
|
60
|
+
const fullTestDir = path.resolve(originalCwd, this.testDir);
|
|
61
|
+
process.chdir(fullTestDir);
|
|
62
|
+
await createProject(this.appName, {
|
|
63
|
+
description: 'Test MVPKit application for validation',
|
|
64
|
+
install: false,
|
|
65
|
+
git: false
|
|
66
|
+
});
|
|
67
|
+
// Update app path to be absolute
|
|
68
|
+
this.appPath = path.join(fullTestDir, this.appName);
|
|
69
|
+
if (!fs.existsSync(this.appPath)) {
|
|
70
|
+
throw new Error('App directory was not created');
|
|
71
|
+
}
|
|
72
|
+
// Return to original directory
|
|
73
|
+
process.chdir(originalCwd);
|
|
74
|
+
spinner.succeed('App creation successful');
|
|
75
|
+
return {
|
|
76
|
+
name: 'App Creation',
|
|
77
|
+
success: true,
|
|
78
|
+
duration: Date.now() - startTime
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
process.chdir(originalCwd); // Ensure we return to original directory
|
|
83
|
+
spinner.fail('App creation failed');
|
|
84
|
+
return {
|
|
85
|
+
name: 'App Creation',
|
|
86
|
+
success: false,
|
|
87
|
+
error: error instanceof Error ? error.message : String(error),
|
|
88
|
+
duration: Date.now() - startTime
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async testPackageJsonTransformation() {
|
|
93
|
+
const startTime = Date.now();
|
|
94
|
+
try {
|
|
95
|
+
const rootPkg = await fs.readJson(path.join(this.appPath, 'package.json'));
|
|
96
|
+
const frontendPkg = await fs.readJson(path.join(this.appPath, 'apps/frontend/package.json'));
|
|
97
|
+
const backendPkg = await fs.readJson(path.join(this.appPath, 'apps/backend/package.json'));
|
|
98
|
+
const apiPkg = await fs.readJson(path.join(this.appPath, 'packages/api/package.json'));
|
|
99
|
+
// Validate transformations
|
|
100
|
+
const errors = [];
|
|
101
|
+
if (rootPkg.name !== this.appName) {
|
|
102
|
+
errors.push(`Root name not transformed: expected "${this.appName}", got "${rootPkg.name}"`);
|
|
103
|
+
}
|
|
104
|
+
if (frontendPkg.name !== `@${this.appName}/frontend`) {
|
|
105
|
+
errors.push(`Frontend name not transformed: expected "@${this.appName}/frontend", got "${frontendPkg.name}"`);
|
|
106
|
+
}
|
|
107
|
+
if (backendPkg.name !== `@${this.appName}/backend`) {
|
|
108
|
+
errors.push(`Backend name not transformed: expected "@${this.appName}/backend", got "${backendPkg.name}"`);
|
|
109
|
+
}
|
|
110
|
+
if (apiPkg.name !== `@${this.appName}/api`) {
|
|
111
|
+
errors.push(`API name not transformed: expected "@${this.appName}/api", got "${apiPkg.name}"`);
|
|
112
|
+
}
|
|
113
|
+
// Check if old @mvpkit/core references remain
|
|
114
|
+
const allPkgs = [frontendPkg, backendPkg, apiPkg];
|
|
115
|
+
for (const pkg of allPkgs) {
|
|
116
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
117
|
+
for (const dep of Object.keys(deps)) {
|
|
118
|
+
if (dep.startsWith('@mvpkit/core-')) {
|
|
119
|
+
errors.push(`Old dependency reference found: ${dep} in ${pkg.name}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (errors.length > 0) {
|
|
124
|
+
throw new Error(errors.join('; '));
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
name: 'Package.json Transformation',
|
|
128
|
+
success: true,
|
|
129
|
+
duration: Date.now() - startTime
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
return {
|
|
134
|
+
name: 'Package.json Transformation',
|
|
135
|
+
success: false,
|
|
136
|
+
error: error instanceof Error ? error.message : String(error),
|
|
137
|
+
duration: Date.now() - startTime
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async testDependencyInstallation() {
|
|
142
|
+
const spinner = ora('Installing dependencies...').start();
|
|
143
|
+
const startTime = Date.now();
|
|
144
|
+
try {
|
|
145
|
+
process.chdir(this.appPath);
|
|
146
|
+
execSync('pnpm install', { stdio: 'ignore' });
|
|
147
|
+
// Verify node_modules exist
|
|
148
|
+
if (!fs.existsSync('node_modules')) {
|
|
149
|
+
throw new Error('node_modules directory not created');
|
|
150
|
+
}
|
|
151
|
+
spinner.succeed('Dependencies installed');
|
|
152
|
+
return {
|
|
153
|
+
name: 'Dependency Installation',
|
|
154
|
+
success: true,
|
|
155
|
+
duration: Date.now() - startTime
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
spinner.fail('Dependency installation failed');
|
|
160
|
+
return {
|
|
161
|
+
name: 'Dependency Installation',
|
|
162
|
+
success: false,
|
|
163
|
+
error: error instanceof Error ? error.message : String(error),
|
|
164
|
+
duration: Date.now() - startTime
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async testTypeScriptCompilation() {
|
|
169
|
+
const spinner = ora('Running TypeScript checks...').start();
|
|
170
|
+
const startTime = Date.now();
|
|
171
|
+
try {
|
|
172
|
+
execSync('pnpm typecheck', { stdio: 'ignore' });
|
|
173
|
+
spinner.succeed('TypeScript compilation successful');
|
|
174
|
+
return {
|
|
175
|
+
name: 'TypeScript Compilation',
|
|
176
|
+
success: true,
|
|
177
|
+
duration: Date.now() - startTime
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
spinner.fail('TypeScript compilation failed');
|
|
182
|
+
return {
|
|
183
|
+
name: 'TypeScript Compilation',
|
|
184
|
+
success: false,
|
|
185
|
+
error: 'TypeScript compilation errors detected',
|
|
186
|
+
duration: Date.now() - startTime
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async testLinting() {
|
|
191
|
+
const spinner = ora('Running linting...').start();
|
|
192
|
+
const startTime = Date.now();
|
|
193
|
+
try {
|
|
194
|
+
execSync('pnpm lint', { stdio: 'ignore' });
|
|
195
|
+
spinner.succeed('Linting passed');
|
|
196
|
+
return {
|
|
197
|
+
name: 'Linting',
|
|
198
|
+
success: true,
|
|
199
|
+
duration: Date.now() - startTime
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
spinner.fail('Linting failed');
|
|
204
|
+
return {
|
|
205
|
+
name: 'Linting',
|
|
206
|
+
success: false,
|
|
207
|
+
error: 'Linting errors detected',
|
|
208
|
+
duration: Date.now() - startTime
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async testBuildProcess() {
|
|
213
|
+
const spinner = ora('Running build process...').start();
|
|
214
|
+
const startTime = Date.now();
|
|
215
|
+
try {
|
|
216
|
+
execSync('pnpm build', { stdio: 'ignore' });
|
|
217
|
+
// Verify build outputs exist
|
|
218
|
+
const expectedOutputs = [
|
|
219
|
+
'packages/api/dist',
|
|
220
|
+
'packages/config/dist',
|
|
221
|
+
'apps/frontend/dist'
|
|
222
|
+
];
|
|
223
|
+
for (const output of expectedOutputs) {
|
|
224
|
+
if (!fs.existsSync(output)) {
|
|
225
|
+
throw new Error(`Build output missing: ${output}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
spinner.succeed('Build process successful');
|
|
229
|
+
return {
|
|
230
|
+
name: 'Build Process',
|
|
231
|
+
success: true,
|
|
232
|
+
duration: Date.now() - startTime
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
spinner.fail('Build process failed');
|
|
237
|
+
return {
|
|
238
|
+
name: 'Build Process',
|
|
239
|
+
success: false,
|
|
240
|
+
error: error instanceof Error ? error.message : String(error),
|
|
241
|
+
duration: Date.now() - startTime
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
async testProjectStructure() {
|
|
246
|
+
const startTime = Date.now();
|
|
247
|
+
try {
|
|
248
|
+
const expectedStructure = [
|
|
249
|
+
'package.json',
|
|
250
|
+
'turbo.json',
|
|
251
|
+
'biome.json',
|
|
252
|
+
'README.md',
|
|
253
|
+
'apps/frontend',
|
|
254
|
+
'apps/backend',
|
|
255
|
+
'packages/api',
|
|
256
|
+
'packages/config',
|
|
257
|
+
'apps/frontend/package.json',
|
|
258
|
+
'apps/backend/package.json',
|
|
259
|
+
'packages/api/package.json',
|
|
260
|
+
'packages/config/package.json',
|
|
261
|
+
'apps/frontend/.env.example',
|
|
262
|
+
'apps/backend/.dev.vars.example'
|
|
263
|
+
];
|
|
264
|
+
const missingFiles = [];
|
|
265
|
+
for (const file of expectedStructure) {
|
|
266
|
+
if (!fs.existsSync(path.join(this.appPath, file))) {
|
|
267
|
+
missingFiles.push(file);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (missingFiles.length > 0) {
|
|
271
|
+
throw new Error(`Missing files: ${missingFiles.join(', ')}`);
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
name: 'Project Structure',
|
|
275
|
+
success: true,
|
|
276
|
+
duration: Date.now() - startTime
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
return {
|
|
281
|
+
name: 'Project Structure',
|
|
282
|
+
success: false,
|
|
283
|
+
error: error instanceof Error ? error.message : String(error),
|
|
284
|
+
duration: Date.now() - startTime
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
async testEnvironmentFiles() {
|
|
289
|
+
const startTime = Date.now();
|
|
290
|
+
try {
|
|
291
|
+
const frontendEnv = await fs.readFile(path.join(this.appPath, 'apps/frontend/.env.example'), 'utf8');
|
|
292
|
+
const backendEnv = await fs.readFile(path.join(this.appPath, 'apps/backend/.dev.vars.example'), 'utf8');
|
|
293
|
+
// Verify environment files contain expected content
|
|
294
|
+
if (!frontendEnv.includes('VITE_APP_NAME')) {
|
|
295
|
+
throw new Error('Frontend .env.example missing VITE_APP_NAME');
|
|
296
|
+
}
|
|
297
|
+
if (!backendEnv.includes('DATABASE_URL')) {
|
|
298
|
+
throw new Error('Backend .dev.vars.example missing DATABASE_URL');
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
name: 'Environment Files',
|
|
302
|
+
success: true,
|
|
303
|
+
duration: Date.now() - startTime
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
return {
|
|
308
|
+
name: 'Environment Files',
|
|
309
|
+
success: false,
|
|
310
|
+
error: error instanceof Error ? error.message : String(error),
|
|
311
|
+
duration: Date.now() - startTime
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
printResults(results) {
|
|
316
|
+
console.log(chalk.blue.bold('\n📊 Test Results:\n'));
|
|
317
|
+
let passed = 0;
|
|
318
|
+
let failed = 0;
|
|
319
|
+
for (const result of results) {
|
|
320
|
+
const icon = result.success ? '✅' : '❌';
|
|
321
|
+
const duration = result.duration ? ` (${result.duration}ms)` : '';
|
|
322
|
+
console.log(`${icon} ${result.name}${duration}`);
|
|
323
|
+
if (!result.success && result.error) {
|
|
324
|
+
console.log(chalk.red(` Error: ${result.error}`));
|
|
325
|
+
}
|
|
326
|
+
result.success ? passed++ : failed++;
|
|
327
|
+
}
|
|
328
|
+
console.log(chalk.blue.bold(`\n📈 Summary: ${passed} passed, ${failed} failed\n`));
|
|
329
|
+
if (failed === 0) {
|
|
330
|
+
console.log(chalk.green.bold('🎉 All tests passed! The CLI generates working applications.'));
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
console.log(chalk.red.bold('⚠️ Some tests failed. The CLI needs fixes.'));
|
|
334
|
+
process.exit(1);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
async cleanup() {
|
|
338
|
+
if (fs.existsSync(this.testDir)) {
|
|
339
|
+
await fs.remove(this.testDir);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
// CLI interface for running tests
|
|
344
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
345
|
+
const validator = new AppValidator();
|
|
346
|
+
try {
|
|
347
|
+
await validator.runFullValidation();
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
console.error(chalk.red('Test suite failed:'), error);
|
|
351
|
+
process.exit(1);
|
|
352
|
+
}
|
|
353
|
+
finally {
|
|
354
|
+
// Clean up test directory
|
|
355
|
+
await validator.cleanup();
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
export { AppValidator };
|
|
359
|
+
//# sourceMappingURL=test.js.map
|
package/dist/test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = path.dirname(__filename);
|
|
6
|
+
export function validateProjectName(name) {
|
|
7
|
+
if (!name) {
|
|
8
|
+
throw new Error('Project name is required');
|
|
9
|
+
}
|
|
10
|
+
if (!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(name)) {
|
|
11
|
+
throw new Error('Project name must start with a letter and contain only letters, numbers, hyphens, and underscores');
|
|
12
|
+
}
|
|
13
|
+
return name;
|
|
14
|
+
}
|
|
15
|
+
export function generateTemplateVariables(projectName, options = {}, packageManager = 'pnpm', packageManagerVersion) {
|
|
16
|
+
const validatedName = validateProjectName(projectName);
|
|
17
|
+
// Generate different case variations
|
|
18
|
+
const kebabCase = validatedName.toLowerCase().replace(/[_\s]+/g, '-');
|
|
19
|
+
const camelCase = kebabCase.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
20
|
+
const displayName = kebabCase.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
|
|
21
|
+
// Generate package scope (user can override later)
|
|
22
|
+
const packageScope = `@${kebabCase}`;
|
|
23
|
+
return {
|
|
24
|
+
projectName: validatedName,
|
|
25
|
+
projectDisplayName: options.description || displayName,
|
|
26
|
+
projectDescription: options.description || `A new MVPKit Core application: ${displayName}`,
|
|
27
|
+
projectKebabCase: kebabCase,
|
|
28
|
+
projectCamelCase: camelCase,
|
|
29
|
+
domainName: options.domain,
|
|
30
|
+
databaseName: `${kebabCase}-db`,
|
|
31
|
+
packageManager,
|
|
32
|
+
packageManagerVersion,
|
|
33
|
+
packageScope,
|
|
34
|
+
frontendPackageName: `${packageScope}/frontend`,
|
|
35
|
+
backendPackageName: `${packageScope}/backend`,
|
|
36
|
+
apiPackageName: `${packageScope}/api`,
|
|
37
|
+
configPackageName: `${packageScope}/config`,
|
|
38
|
+
workersName: `${kebabCase}-api`,
|
|
39
|
+
pagesName: `${kebabCase}-frontend`,
|
|
40
|
+
databaseId: `${kebabCase}-db`,
|
|
41
|
+
kvNamespaceId: `${kebabCase}-kv`
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function getCoreRepositoryPath() {
|
|
45
|
+
// Find the mvpkit root directory
|
|
46
|
+
let currentDir = __dirname;
|
|
47
|
+
// Go up from the built CLI package to find mvpkit root
|
|
48
|
+
// Path: /mvpkit/cli/packages/create-mvpkit-core/dist -> /mvpkit
|
|
49
|
+
while (currentDir && currentDir !== path.parse(currentDir).root) {
|
|
50
|
+
if (path.basename(currentDir) === 'mvpkit') {
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
currentDir = path.dirname(currentDir);
|
|
54
|
+
}
|
|
55
|
+
if (!currentDir || path.basename(currentDir) !== 'mvpkit') {
|
|
56
|
+
// Fallback: try relative from current working directory
|
|
57
|
+
const cwd = process.cwd();
|
|
58
|
+
const possiblePaths = [
|
|
59
|
+
path.resolve(cwd, '../core'), // from cli/test-output
|
|
60
|
+
path.resolve(cwd, '../../core'), // from cli/packages/create-mvpkit-core
|
|
61
|
+
path.resolve(cwd, '../../../core'), // from deeper nesting
|
|
62
|
+
];
|
|
63
|
+
for (const possiblePath of possiblePaths) {
|
|
64
|
+
if (fs.existsSync(possiblePath)) {
|
|
65
|
+
return possiblePath;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const coreDir = path.join(currentDir, 'core');
|
|
70
|
+
return coreDir;
|
|
71
|
+
}
|
|
72
|
+
export function shouldSkipFile(filePath, skipPatterns) {
|
|
73
|
+
const fileName = path.basename(filePath);
|
|
74
|
+
const relativePath = filePath;
|
|
75
|
+
return skipPatterns.some(pattern => {
|
|
76
|
+
if (pattern.startsWith('/')) {
|
|
77
|
+
return relativePath.startsWith(pattern.slice(1));
|
|
78
|
+
}
|
|
79
|
+
if (pattern.endsWith('/')) {
|
|
80
|
+
return relativePath.startsWith(pattern) || relativePath.includes(pattern);
|
|
81
|
+
}
|
|
82
|
+
// Exact filename match
|
|
83
|
+
if (fileName === pattern) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
return fileName.includes(pattern) || relativePath.includes(pattern);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
export function transformFileName(fileName, variables) {
|
|
90
|
+
return fileName
|
|
91
|
+
.replace(/mvpkit-core/g, variables.projectKebabCase)
|
|
92
|
+
.replace(/mvpkit/g, variables.projectKebabCase);
|
|
93
|
+
}
|
|
94
|
+
export const DEFAULT_SKIP_PATTERNS = [
|
|
95
|
+
'.git/',
|
|
96
|
+
'.serena',
|
|
97
|
+
'examples/',
|
|
98
|
+
'cleanup.sh'
|
|
99
|
+
];
|
|
100
|
+
//# sourceMappingURL=utils.js.map
|