create-auto-app 0.20.0 → 0.21.2
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/package.json +2 -2
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -464
- package/dist/index.js.map +0 -1
- package/dist/index.specs.d.ts +0 -2
- package/dist/index.specs.d.ts.map +0 -1
- package/dist/index.specs.js +0 -267
- package/dist/index.specs.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -187
- package/dist/index.test.js.map +0 -1
- package/templates/kanban-todo/client/.gitignore +0 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-auto-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.2",
|
|
4
4
|
"description": "Create Auto Engineer apps with no configuration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"fs-extra": "^11.2.0",
|
|
34
34
|
"inquirer": "^9.2.15",
|
|
35
35
|
"ora": "^8.0.1",
|
|
36
|
-
"@auto-engineer/id": "0.
|
|
36
|
+
"@auto-engineer/id": "0.21.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/fs-extra": "^11.0.4",
|
package/dist/index.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
interface TemplateMetadata {
|
|
3
|
-
name: string;
|
|
4
|
-
displayName: string;
|
|
5
|
-
description: string;
|
|
6
|
-
type: 'template';
|
|
7
|
-
preset: 'minimal' | 'full';
|
|
8
|
-
}
|
|
9
|
-
declare function detectPackageManager(): Promise<'npm' | 'pnpm' | 'yarn'>;
|
|
10
|
-
declare function replaceBogusFileIds(targetDir: string): Promise<void>;
|
|
11
|
-
declare function createFromTemplate(templatePath: string, targetDir: string, projectName: string, templateName: string): Promise<void>;
|
|
12
|
-
declare function getAvailableTemplates(): Promise<TemplateMetadata[]>;
|
|
13
|
-
export { getAvailableTemplates, createFromTemplate, detectPackageManager, replaceBogusFileIds };
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAsBA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B;AAiBD,iBAAe,oBAAoB,IAAI,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,CAYtE;AAyGD,iBAAe,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCnE;AAED,iBAAe,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAyBnH;AA4CD,iBAAe,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA0BlE;AA6PD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { program } from 'commander';
|
|
3
|
-
import inquirer from 'inquirer';
|
|
4
|
-
import chalk from 'chalk';
|
|
5
|
-
import ora from 'ora';
|
|
6
|
-
import { execa } from 'execa';
|
|
7
|
-
import fs from 'fs-extra';
|
|
8
|
-
import path from 'path';
|
|
9
|
-
import { fileURLToPath } from 'url';
|
|
10
|
-
import { generateId } from '@auto-engineer/id';
|
|
11
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
-
const __dirname = path.dirname(__filename);
|
|
13
|
-
const AUTO_ENGINEER_PACKAGES = [
|
|
14
|
-
'@auto-engineer/message-bus',
|
|
15
|
-
'@auto-engineer/server-checks',
|
|
16
|
-
'@auto-engineer/design-system-importer',
|
|
17
|
-
'@auto-engineer/server-generator-apollo-emmett',
|
|
18
|
-
'@auto-engineer/flow',
|
|
19
|
-
'@auto-engineer/frontend-checks',
|
|
20
|
-
'@auto-engineer/frontend-implementer',
|
|
21
|
-
'@auto-engineer/information-architect',
|
|
22
|
-
'@auto-engineer/frontend-generator-react-graphql',
|
|
23
|
-
'@auto-engineer/server-implementer',
|
|
24
|
-
];
|
|
25
|
-
const MINIMAL_PACKAGES = ['@auto-engineer/flow', '@auto-engineer/server-generator-apollo-emmett'];
|
|
26
|
-
async function detectPackageManager() {
|
|
27
|
-
try {
|
|
28
|
-
await execa('pnpm', ['--version']);
|
|
29
|
-
return 'pnpm';
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
try {
|
|
33
|
-
await execa('yarn', ['--version']);
|
|
34
|
-
return 'yarn';
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
return 'npm';
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async function getLatestVersion(packageName) {
|
|
42
|
-
try {
|
|
43
|
-
const { stdout } = await execa('npm', ['view', packageName, 'version']);
|
|
44
|
-
return `^${stdout.trim()}`;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return 'latest';
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
async function getLatestVersions(packages) {
|
|
51
|
-
const spinner = ora('Fetching latest package versions...').start();
|
|
52
|
-
const versions = {};
|
|
53
|
-
await Promise.all(packages.map(async (pkg) => {
|
|
54
|
-
versions[pkg] = await getLatestVersion(pkg);
|
|
55
|
-
}));
|
|
56
|
-
// Always include CLI
|
|
57
|
-
versions['@auto-engineer/cli'] = await getLatestVersion('@auto-engineer/cli');
|
|
58
|
-
spinner.succeed('Package versions fetched');
|
|
59
|
-
return versions;
|
|
60
|
-
}
|
|
61
|
-
async function updatePackageVersions(targetDir, projectName, versions) {
|
|
62
|
-
const rootPackageJsonPath = path.join(targetDir, 'package.json');
|
|
63
|
-
const clientPackageJsonPath = path.join(targetDir, 'client', 'package.json');
|
|
64
|
-
const serverPackageJsonPath = path.join(targetDir, 'server', 'package.json');
|
|
65
|
-
// Update root package.json
|
|
66
|
-
if (await fs.pathExists(rootPackageJsonPath)) {
|
|
67
|
-
const rootPkg = (await fs.readJson(rootPackageJsonPath));
|
|
68
|
-
// Update dependencies
|
|
69
|
-
if (rootPkg.dependencies !== undefined) {
|
|
70
|
-
for (const [pkg, version] of Object.entries(versions)) {
|
|
71
|
-
if (rootPkg.dependencies[pkg] !== undefined) {
|
|
72
|
-
rootPkg.dependencies[pkg] = version;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// Update devDependencies
|
|
77
|
-
if (rootPkg.devDependencies !== undefined) {
|
|
78
|
-
for (const [pkg, version] of Object.entries(versions)) {
|
|
79
|
-
if (rootPkg.devDependencies[pkg] !== undefined) {
|
|
80
|
-
rootPkg.devDependencies[pkg] = version;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
rootPkg.name = projectName;
|
|
85
|
-
await fs.writeJson(rootPackageJsonPath, rootPkg, { spaces: 2 });
|
|
86
|
-
}
|
|
87
|
-
// Update client package.json if exists
|
|
88
|
-
if (await fs.pathExists(clientPackageJsonPath)) {
|
|
89
|
-
const clientPkg = (await fs.readJson(clientPackageJsonPath));
|
|
90
|
-
clientPkg.name = `${projectName}-client`;
|
|
91
|
-
await fs.writeJson(clientPackageJsonPath, clientPkg, { spaces: 2 });
|
|
92
|
-
}
|
|
93
|
-
// Update server package.json if exists
|
|
94
|
-
if (await fs.pathExists(serverPackageJsonPath)) {
|
|
95
|
-
const serverPkg = (await fs.readJson(serverPackageJsonPath));
|
|
96
|
-
serverPkg.name = `${projectName}-server`;
|
|
97
|
-
await fs.writeJson(serverPackageJsonPath, serverPkg, { spaces: 2 });
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
async function installDependencies(targetDir, packageManager) {
|
|
101
|
-
const spinner = ora('Installing dependencies...').start();
|
|
102
|
-
try {
|
|
103
|
-
// Install root dependencies
|
|
104
|
-
await execa(packageManager, ['install'], { cwd: targetDir });
|
|
105
|
-
// If it's a monorepo (has workspaces), pnpm install at root handles everything
|
|
106
|
-
const rootPkg = (await fs.readJson(path.join(targetDir, 'package.json')));
|
|
107
|
-
if (rootPkg.workspaces === undefined && rootPkg['pnpm-workspace.yaml'] === undefined) {
|
|
108
|
-
// Install client dependencies if exists
|
|
109
|
-
const clientDir = path.join(targetDir, 'client');
|
|
110
|
-
if (await fs.pathExists(clientDir)) {
|
|
111
|
-
await execa(packageManager, ['install'], { cwd: clientDir });
|
|
112
|
-
}
|
|
113
|
-
// Install server dependencies if exists
|
|
114
|
-
const serverDir = path.join(targetDir, 'server');
|
|
115
|
-
if (await fs.pathExists(serverDir)) {
|
|
116
|
-
await execa(packageManager, ['install'], { cwd: serverDir });
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
spinner.succeed('Dependencies installed');
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
spinner.fail('Failed to install dependencies');
|
|
123
|
-
console.error(error);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// Known bogus fileId patterns used in templates that should be replaced
|
|
127
|
-
const BOGUS_FILE_ID_PATTERNS = [
|
|
128
|
-
'a1b2c3d4e', // questionnaires template
|
|
129
|
-
'a2b2c2d2e', // shopping-app template
|
|
130
|
-
];
|
|
131
|
-
async function replaceBogusFileIds(targetDir) {
|
|
132
|
-
const autoConfigPath = path.join(targetDir, 'auto.config.ts');
|
|
133
|
-
if (!(await fs.pathExists(autoConfigPath))) {
|
|
134
|
-
return; // No auto.config.ts file to process
|
|
135
|
-
}
|
|
136
|
-
try {
|
|
137
|
-
const content = await fs.readFile(autoConfigPath, 'utf8');
|
|
138
|
-
let modifiedContent = content;
|
|
139
|
-
let hasReplacement = false;
|
|
140
|
-
// Check if any bogus patterns exist and replace them
|
|
141
|
-
for (const bogusPattern of BOGUS_FILE_ID_PATTERNS) {
|
|
142
|
-
if (content.includes(bogusPattern)) {
|
|
143
|
-
// Generate a new unique ID
|
|
144
|
-
const newFileId = generateId();
|
|
145
|
-
// Replace the bogus pattern with the new ID
|
|
146
|
-
modifiedContent = modifiedContent.replace(new RegExp(`fileId:\\s*['"]${bogusPattern}['"]`, 'g'), `fileId: '${newFileId}'`);
|
|
147
|
-
hasReplacement = true;
|
|
148
|
-
console.log(chalk.blue(`Replaced fileId ${bogusPattern} with ${newFileId} in auto.config.ts`));
|
|
149
|
-
break; // Only replace the first match to avoid multiple replacements
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// Write back only if we made changes
|
|
153
|
-
if (hasReplacement) {
|
|
154
|
-
await fs.writeFile(autoConfigPath, modifiedContent, 'utf8');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
console.warn(chalk.yellow(`Warning: Could not process auto.config.ts fileId replacement:`, error));
|
|
159
|
-
// Don't throw - this is not a critical failure
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
async function createFromTemplate(templatePath, targetDir, projectName, templateName) {
|
|
163
|
-
console.log(chalk.cyan(`Using ${templateName} template...`));
|
|
164
|
-
try {
|
|
165
|
-
// Copy without filter first to ensure it works
|
|
166
|
-
await fs.copy(templatePath, targetDir);
|
|
167
|
-
}
|
|
168
|
-
catch (error) {
|
|
169
|
-
console.error(chalk.red('Failed to copy template:'), error);
|
|
170
|
-
throw error;
|
|
171
|
-
}
|
|
172
|
-
// Create pnpm-workspace.yaml if it doesn't exist (needed for monorepo setup)
|
|
173
|
-
const workspaceYamlPath = path.join(targetDir, 'pnpm-workspace.yaml');
|
|
174
|
-
if (!(await fs.pathExists(workspaceYamlPath))) {
|
|
175
|
-
await fs.writeFile(workspaceYamlPath, "packages:\n - '*'\n");
|
|
176
|
-
}
|
|
177
|
-
// Get latest versions for all packages
|
|
178
|
-
const packagesToCheck = [...AUTO_ENGINEER_PACKAGES];
|
|
179
|
-
const versions = await getLatestVersions(packagesToCheck);
|
|
180
|
-
// Replace bogus fileId values in auto.config.ts files
|
|
181
|
-
await replaceBogusFileIds(targetDir);
|
|
182
|
-
// Update package versions
|
|
183
|
-
await updatePackageVersions(targetDir, projectName, versions);
|
|
184
|
-
}
|
|
185
|
-
async function prepareTargetDirectory(name, targetDir) {
|
|
186
|
-
// Check if directory exists (unless it's current directory)
|
|
187
|
-
if (name !== '.' && (await fs.pathExists(targetDir))) {
|
|
188
|
-
const { overwrite } = (await inquirer.prompt([
|
|
189
|
-
{
|
|
190
|
-
type: 'confirm',
|
|
191
|
-
name: 'overwrite',
|
|
192
|
-
message: `Directory ${name} already exists. Overwrite?`,
|
|
193
|
-
default: false,
|
|
194
|
-
},
|
|
195
|
-
]));
|
|
196
|
-
if (!overwrite) {
|
|
197
|
-
console.log(chalk.yellow('Operation cancelled'));
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
await fs.remove(targetDir);
|
|
201
|
-
}
|
|
202
|
-
// Create target directory
|
|
203
|
-
try {
|
|
204
|
-
await fs.ensureDir(targetDir);
|
|
205
|
-
return true;
|
|
206
|
-
}
|
|
207
|
-
catch (error) {
|
|
208
|
-
console.error(chalk.red('Failed to create directory:'), error);
|
|
209
|
-
throw error;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
function printSuccessMessage(name, packageManager, installDeps) {
|
|
213
|
-
console.log(chalk.green('\n✓ Project created successfully!\n'));
|
|
214
|
-
console.log('Next steps:');
|
|
215
|
-
if (name !== '.') {
|
|
216
|
-
console.log(chalk.cyan(` cd ${name}`));
|
|
217
|
-
}
|
|
218
|
-
if (!installDeps) {
|
|
219
|
-
console.log(chalk.cyan(` ${packageManager} install`));
|
|
220
|
-
}
|
|
221
|
-
console.log(chalk.cyan(` auto (you may need to ${packageManager} install -g @auto-engineer/cli@latest)\n`));
|
|
222
|
-
}
|
|
223
|
-
async function getAvailableTemplates() {
|
|
224
|
-
const templatesDir = path.join(__dirname, '..', 'templates');
|
|
225
|
-
const templates = [];
|
|
226
|
-
try {
|
|
227
|
-
const entries = await fs.readdir(templatesDir, { withFileTypes: true });
|
|
228
|
-
for (const entry of entries) {
|
|
229
|
-
if (entry.isDirectory()) {
|
|
230
|
-
const templateJsonPath = path.join(templatesDir, entry.name, 'template.json');
|
|
231
|
-
if (await fs.pathExists(templateJsonPath)) {
|
|
232
|
-
try {
|
|
233
|
-
const metadata = (await fs.readJson(templateJsonPath));
|
|
234
|
-
templates.push(metadata);
|
|
235
|
-
}
|
|
236
|
-
catch (error) {
|
|
237
|
-
console.warn(chalk.yellow(`Failed to read template.json for ${entry.name}:`, error));
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
catch (error) {
|
|
244
|
-
console.warn(chalk.yellow('Failed to read templates directory:', error));
|
|
245
|
-
}
|
|
246
|
-
return templates;
|
|
247
|
-
}
|
|
248
|
-
async function handleTemplateCreation(template, preset, targetDir, projectName, packageManager) {
|
|
249
|
-
if (template !== undefined) {
|
|
250
|
-
const templatePath = path.join(__dirname, '..', 'templates', template);
|
|
251
|
-
if (await fs.pathExists(templatePath)) {
|
|
252
|
-
await createFromTemplate(templatePath, targetDir, projectName, template);
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
console.log(chalk.yellow(`Template not found at ${templatePath}, creating minimal project...`));
|
|
256
|
-
await createMinimalProject(targetDir, projectName, preset || 'minimal', packageManager);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
// Create project based on preset
|
|
261
|
-
await createMinimalProject(targetDir, projectName, preset || 'minimal', packageManager);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
async function createProject(options) {
|
|
265
|
-
const { name, template, preset, packageManager, installDeps } = options;
|
|
266
|
-
const targetDir = path.resolve(process.cwd(), name === '.' ? process.cwd() : name);
|
|
267
|
-
const projectName = name === '.' ? path.basename(process.cwd()) : name;
|
|
268
|
-
// Prepare directory
|
|
269
|
-
const shouldContinue = await prepareTargetDirectory(name, targetDir);
|
|
270
|
-
if (!shouldContinue) {
|
|
271
|
-
process.exit(0);
|
|
272
|
-
}
|
|
273
|
-
console.log(chalk.blue(`\nCreating Auto Engineer project in ${chalk.bold(targetDir)}\n`));
|
|
274
|
-
// Handle template or preset creation
|
|
275
|
-
await handleTemplateCreation(template, preset, targetDir, projectName, packageManager);
|
|
276
|
-
// Install dependencies if requested
|
|
277
|
-
if (installDeps) {
|
|
278
|
-
await installDependencies(targetDir, packageManager);
|
|
279
|
-
}
|
|
280
|
-
// Success message
|
|
281
|
-
printSuccessMessage(name, packageManager, installDeps);
|
|
282
|
-
}
|
|
283
|
-
async function createMinimalProject(targetDir, projectName, preset, packageManager) {
|
|
284
|
-
// Determine which packages to include
|
|
285
|
-
const packagesToInclude = preset === 'full' ? AUTO_ENGINEER_PACKAGES : MINIMAL_PACKAGES;
|
|
286
|
-
// Get latest versions
|
|
287
|
-
const versions = await getLatestVersions(packagesToInclude);
|
|
288
|
-
// Generate package.json
|
|
289
|
-
const packageJson = {
|
|
290
|
-
name: projectName,
|
|
291
|
-
version: '0.1.0',
|
|
292
|
-
private: true,
|
|
293
|
-
scripts: {
|
|
294
|
-
dev: 'auto dev',
|
|
295
|
-
build: 'auto build',
|
|
296
|
-
test: 'auto test',
|
|
297
|
-
},
|
|
298
|
-
devDependencies: versions,
|
|
299
|
-
};
|
|
300
|
-
// Write package.json
|
|
301
|
-
await fs.writeJson(path.join(targetDir, 'package.json'), packageJson, { spaces: 2 });
|
|
302
|
-
// Create auto.config.ts
|
|
303
|
-
const plugins = Object.keys(versions)
|
|
304
|
-
.filter((pkg) => pkg !== '@auto-engineer/cli')
|
|
305
|
-
.map((pkg) => ` '${pkg}',`)
|
|
306
|
-
.join('\n');
|
|
307
|
-
const autoConfig = `export default {
|
|
308
|
-
plugins: [
|
|
309
|
-
${plugins}
|
|
310
|
-
],
|
|
311
|
-
};
|
|
312
|
-
`;
|
|
313
|
-
await fs.writeFile(path.join(targetDir, 'auto.config.ts'), autoConfig);
|
|
314
|
-
// Create basic directory structure
|
|
315
|
-
await fs.ensureDir(path.join(targetDir, 'flows'));
|
|
316
|
-
await fs.ensureDir(path.join(targetDir, '.context'));
|
|
317
|
-
// Create .gitignore
|
|
318
|
-
const gitignore = `node_modules
|
|
319
|
-
dist
|
|
320
|
-
.tmp
|
|
321
|
-
.env.local
|
|
322
|
-
*.log
|
|
323
|
-
.next
|
|
324
|
-
.turbo
|
|
325
|
-
`;
|
|
326
|
-
await fs.writeFile(path.join(targetDir, '.gitignore'), gitignore);
|
|
327
|
-
// Create README.md
|
|
328
|
-
const readme = `# ${projectName}
|
|
329
|
-
|
|
330
|
-
An Auto Engineer project.
|
|
331
|
-
|
|
332
|
-
## Getting Started
|
|
333
|
-
|
|
334
|
-
\`\`\`bash
|
|
335
|
-
# Install dependencies
|
|
336
|
-
${packageManager} install
|
|
337
|
-
|
|
338
|
-
# Install Auto and start it
|
|
339
|
-
${packageManager} install -g @auto-engineer/cli@latest
|
|
340
|
-
auto
|
|
341
|
-
|
|
342
|
-
# Start the client and server in development mode
|
|
343
|
-
${packageManager} run start
|
|
344
|
-
\`\`\`
|
|
345
|
-
|
|
346
|
-
## Available Commands
|
|
347
|
-
|
|
348
|
-
- \`auto generate:server\` - Generate server from flows
|
|
349
|
-
- \`auto generate:client\` - Generate client application
|
|
350
|
-
- \`auto check:frontend\` - Run frontend checks
|
|
351
|
-
- \`auto check:server\` - Run server checks
|
|
352
|
-
|
|
353
|
-
## Learn More
|
|
354
|
-
|
|
355
|
-
Visit [Auto Engineer Documentation](https://github.com/solguru310/auto-engineer) to learn more.
|
|
356
|
-
`;
|
|
357
|
-
await fs.writeFile(path.join(targetDir, 'README.md'), readme);
|
|
358
|
-
}
|
|
359
|
-
async function main() {
|
|
360
|
-
// Get available templates for help text
|
|
361
|
-
const availableTemplates = await getAvailableTemplates();
|
|
362
|
-
const templateNames = availableTemplates.map((t) => t.name).join(', ');
|
|
363
|
-
program
|
|
364
|
-
.name('create-auto-app')
|
|
365
|
-
.description('Create a new Auto Engineer application')
|
|
366
|
-
.version('0.1.0')
|
|
367
|
-
.argument('[project-name]', 'Name of the project (use "." for current directory)')
|
|
368
|
-
.option('-t, --template <template>', `Project template (${templateNames})`)
|
|
369
|
-
.option('-p, --preset <preset>', 'Package preset (minimal, full)', 'full')
|
|
370
|
-
.option('--no-install', 'Skip dependency installation')
|
|
371
|
-
.option('--use-npm', 'Use npm as package manager')
|
|
372
|
-
.option('--use-yarn', 'Use yarn as package manager')
|
|
373
|
-
.option('--use-pnpm', 'Use pnpm as package manager')
|
|
374
|
-
.parse(process.argv);
|
|
375
|
-
const options = program.opts();
|
|
376
|
-
let projectName = program.args[0];
|
|
377
|
-
// Interactive mode if no project name provided
|
|
378
|
-
if (!projectName) {
|
|
379
|
-
// Build choices dynamically from available templates
|
|
380
|
-
const templateChoices = availableTemplates.map((template) => ({
|
|
381
|
-
name: `${template.displayName} - ${template.description}`,
|
|
382
|
-
value: template.name,
|
|
383
|
-
}));
|
|
384
|
-
const setupChoices = [
|
|
385
|
-
...templateChoices,
|
|
386
|
-
{ name: 'Create minimal project (just essentials)', value: 'minimal' },
|
|
387
|
-
{ name: 'Create full project (all packages)', value: 'full' },
|
|
388
|
-
];
|
|
389
|
-
const answers = (await inquirer.prompt([
|
|
390
|
-
{
|
|
391
|
-
type: 'input',
|
|
392
|
-
name: 'name',
|
|
393
|
-
message: 'Project name:',
|
|
394
|
-
default: 'my-auto-app',
|
|
395
|
-
validate: (input) => {
|
|
396
|
-
if (input === '.')
|
|
397
|
-
return true;
|
|
398
|
-
if (typeof input !== 'string' || !input.trim())
|
|
399
|
-
return 'Project name is required';
|
|
400
|
-
if (!/^[a-z0-9-_]+$/i.test(input)) {
|
|
401
|
-
return 'Project name can only contain letters, numbers, hyphens, and underscores';
|
|
402
|
-
}
|
|
403
|
-
return true;
|
|
404
|
-
},
|
|
405
|
-
},
|
|
406
|
-
{
|
|
407
|
-
type: 'list',
|
|
408
|
-
name: 'setupType',
|
|
409
|
-
message: 'How would you like to set up your project?',
|
|
410
|
-
choices: setupChoices,
|
|
411
|
-
default: availableTemplates.length > 0 ? availableTemplates[0].name : 'minimal',
|
|
412
|
-
},
|
|
413
|
-
{
|
|
414
|
-
type: 'confirm',
|
|
415
|
-
name: 'installDeps',
|
|
416
|
-
message: 'Install dependencies?',
|
|
417
|
-
default: true,
|
|
418
|
-
},
|
|
419
|
-
]));
|
|
420
|
-
projectName = answers.name;
|
|
421
|
-
const selectedTemplate = availableTemplates.find((t) => t.name === answers.setupType);
|
|
422
|
-
if (selectedTemplate) {
|
|
423
|
-
options.template = selectedTemplate.name;
|
|
424
|
-
options.preset = undefined;
|
|
425
|
-
}
|
|
426
|
-
else {
|
|
427
|
-
options.template = undefined;
|
|
428
|
-
options.preset = answers.setupType;
|
|
429
|
-
}
|
|
430
|
-
options.install = answers.installDeps;
|
|
431
|
-
}
|
|
432
|
-
// Detect package manager
|
|
433
|
-
let packageManager;
|
|
434
|
-
if (options.useNpm === true) {
|
|
435
|
-
packageManager = 'npm';
|
|
436
|
-
}
|
|
437
|
-
else if (options.useYarn === true) {
|
|
438
|
-
packageManager = 'yarn';
|
|
439
|
-
}
|
|
440
|
-
else if (options.usePnpm === true) {
|
|
441
|
-
packageManager = 'pnpm';
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
packageManager = await detectPackageManager();
|
|
445
|
-
}
|
|
446
|
-
const projectOptions = {
|
|
447
|
-
name: projectName,
|
|
448
|
-
template: typeof options.template === 'string' ? options.template : undefined,
|
|
449
|
-
preset: options.preset,
|
|
450
|
-
packageManager,
|
|
451
|
-
installDeps: options.install !== false,
|
|
452
|
-
};
|
|
453
|
-
await createProject(projectOptions);
|
|
454
|
-
}
|
|
455
|
-
// Run main function when this module is executed directly (not during testing)
|
|
456
|
-
if (process.env.NODE_ENV !== 'test' && typeof process.env.VITEST === 'undefined') {
|
|
457
|
-
main().catch((error) => {
|
|
458
|
-
console.error(chalk.red('Error:'), error);
|
|
459
|
-
process.exit(1);
|
|
460
|
-
});
|
|
461
|
-
}
|
|
462
|
-
// Export functions for testing
|
|
463
|
-
export { getAvailableTemplates, createFromTemplate, detectPackageManager, replaceBogusFileIds };
|
|
464
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.specs.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.specs.d.ts","sourceRoot":"","sources":["../src/index.specs.ts"],"names":[],"mappings":""}
|
package/dist/index.specs.js
DELETED
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { mkdtemp, rm } from 'node:fs/promises';
|
|
5
|
-
import { tmpdir } from 'node:os';
|
|
6
|
-
describe('Template Discovery Integration Tests', () => {
|
|
7
|
-
let testDir;
|
|
8
|
-
beforeEach(async () => {
|
|
9
|
-
testDir = await mkdtemp(path.join(tmpdir(), 'create-auto-app-test-'));
|
|
10
|
-
});
|
|
11
|
-
afterEach(async () => {
|
|
12
|
-
await rm(testDir, { recursive: true, force: true });
|
|
13
|
-
});
|
|
14
|
-
describe('getAvailableTemplates', () => {
|
|
15
|
-
it('should discover templates with valid template.json files', async () => {
|
|
16
|
-
// Create mock templates directory structure
|
|
17
|
-
const templatesDir = path.join(testDir, 'templates');
|
|
18
|
-
await fs.ensureDir(templatesDir);
|
|
19
|
-
// Create shopping-app template with template.json
|
|
20
|
-
const shoppingAppDir = path.join(templatesDir, 'shopping-app');
|
|
21
|
-
await fs.ensureDir(shoppingAppDir);
|
|
22
|
-
await fs.writeJson(path.join(shoppingAppDir, 'template.json'), {
|
|
23
|
-
name: 'shopping-app',
|
|
24
|
-
displayName: 'Shopping App',
|
|
25
|
-
description: 'Full e-commerce example with client/server architecture',
|
|
26
|
-
type: 'template',
|
|
27
|
-
features: ['Complete e-commerce functionality', 'GraphQL API with Apollo Server'],
|
|
28
|
-
preset: 'full',
|
|
29
|
-
});
|
|
30
|
-
// Create questionnaires template with template.json
|
|
31
|
-
const questionnairesDir = path.join(templatesDir, 'questionnaires');
|
|
32
|
-
await fs.ensureDir(questionnairesDir);
|
|
33
|
-
await fs.writeJson(path.join(questionnairesDir, 'template.json'), {
|
|
34
|
-
name: 'questionnaires',
|
|
35
|
-
displayName: 'Questionnaires App',
|
|
36
|
-
description: 'Survey and questionnaire management system',
|
|
37
|
-
type: 'template',
|
|
38
|
-
features: ['Survey creation and management', 'Dynamic form generation'],
|
|
39
|
-
preset: 'full',
|
|
40
|
-
});
|
|
41
|
-
// Create a file that should be ignored
|
|
42
|
-
await fs.writeFile(path.join(templatesDir, 'README.md'), 'This should be ignored');
|
|
43
|
-
// Verify template files exist
|
|
44
|
-
expect(await fs.pathExists(path.join(shoppingAppDir, 'template.json'))).toBe(true);
|
|
45
|
-
expect(await fs.pathExists(path.join(questionnairesDir, 'template.json'))).toBe(true);
|
|
46
|
-
const shoppingAppTemplate = (await fs.readJson(path.join(shoppingAppDir, 'template.json')));
|
|
47
|
-
expect(shoppingAppTemplate.name).toBe('shopping-app');
|
|
48
|
-
expect(shoppingAppTemplate.displayName).toBe('Shopping App');
|
|
49
|
-
const questionnairesTemplate = (await fs.readJson(path.join(questionnairesDir, 'template.json')));
|
|
50
|
-
expect(questionnairesTemplate.name).toBe('questionnaires');
|
|
51
|
-
expect(questionnairesTemplate.displayName).toBe('Questionnaires App');
|
|
52
|
-
});
|
|
53
|
-
it('should handle missing templates directory gracefully', async () => {
|
|
54
|
-
// Don't create any templates directory
|
|
55
|
-
const templatesDir = path.join(testDir, 'templates');
|
|
56
|
-
expect(await fs.pathExists(templatesDir)).toBe(false);
|
|
57
|
-
});
|
|
58
|
-
it('should skip directories without template.json', async () => {
|
|
59
|
-
const templatesDir = path.join(testDir, 'templates');
|
|
60
|
-
await fs.ensureDir(templatesDir);
|
|
61
|
-
// Create incomplete-template directory without template.json
|
|
62
|
-
const incompleteDir = path.join(templatesDir, 'incomplete-template');
|
|
63
|
-
await fs.ensureDir(incompleteDir);
|
|
64
|
-
await fs.writeFile(path.join(incompleteDir, 'README.md'), 'No template.json here');
|
|
65
|
-
// Create valid-template directory with template.json
|
|
66
|
-
const validDir = path.join(templatesDir, 'valid-template');
|
|
67
|
-
await fs.ensureDir(validDir);
|
|
68
|
-
await fs.writeJson(path.join(validDir, 'template.json'), {
|
|
69
|
-
name: 'valid-template',
|
|
70
|
-
displayName: 'Valid Template',
|
|
71
|
-
description: 'A valid template',
|
|
72
|
-
type: 'template',
|
|
73
|
-
features: ['Basic functionality'],
|
|
74
|
-
preset: 'minimal',
|
|
75
|
-
});
|
|
76
|
-
// Verify only the valid template has template.json
|
|
77
|
-
expect(await fs.pathExists(path.join(incompleteDir, 'template.json'))).toBe(false);
|
|
78
|
-
expect(await fs.pathExists(path.join(validDir, 'template.json'))).toBe(true);
|
|
79
|
-
});
|
|
80
|
-
it('should handle malformed template.json files', async () => {
|
|
81
|
-
const templatesDir = path.join(testDir, 'templates');
|
|
82
|
-
await fs.ensureDir(templatesDir);
|
|
83
|
-
// Create broken-template with invalid JSON
|
|
84
|
-
const brokenDir = path.join(templatesDir, 'broken-template');
|
|
85
|
-
await fs.ensureDir(brokenDir);
|
|
86
|
-
await fs.writeFile(path.join(brokenDir, 'template.json'), 'invalid json content {');
|
|
87
|
-
// Create good-template with valid JSON
|
|
88
|
-
const goodDir = path.join(templatesDir, 'good-template');
|
|
89
|
-
await fs.ensureDir(goodDir);
|
|
90
|
-
await fs.writeJson(path.join(goodDir, 'template.json'), {
|
|
91
|
-
name: 'good-template',
|
|
92
|
-
displayName: 'Good Template',
|
|
93
|
-
description: 'A working template',
|
|
94
|
-
type: 'template',
|
|
95
|
-
features: ['Working functionality'],
|
|
96
|
-
preset: 'full',
|
|
97
|
-
});
|
|
98
|
-
// Verify the broken template throws an error when read
|
|
99
|
-
await expect(fs.readJson(path.join(brokenDir, 'template.json'))).rejects.toThrow();
|
|
100
|
-
// Verify the good template can be read successfully
|
|
101
|
-
const goodTemplate = (await fs.readJson(path.join(goodDir, 'template.json')));
|
|
102
|
-
expect(goodTemplate.name).toBe('good-template');
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('Template Creation', () => {
|
|
106
|
-
it('should handle template copying', async () => {
|
|
107
|
-
// Create a source template
|
|
108
|
-
const sourceTemplate = path.join(testDir, 'source-template');
|
|
109
|
-
await fs.ensureDir(sourceTemplate);
|
|
110
|
-
await fs.writeFile(path.join(sourceTemplate, 'README.md'), '# Test Template');
|
|
111
|
-
await fs.writeJson(path.join(sourceTemplate, 'package.json'), {
|
|
112
|
-
name: 'test-template',
|
|
113
|
-
version: '1.0.0',
|
|
114
|
-
dependencies: {
|
|
115
|
-
'@auto-engineer/cli': 'latest',
|
|
116
|
-
},
|
|
117
|
-
});
|
|
118
|
-
// Create target directory
|
|
119
|
-
const targetDir = path.join(testDir, 'target');
|
|
120
|
-
// Copy template (mimicking createFromTemplate functionality)
|
|
121
|
-
await fs.copy(sourceTemplate, targetDir);
|
|
122
|
-
// Verify files were copied
|
|
123
|
-
expect(await fs.pathExists(path.join(targetDir, 'README.md'))).toBe(true);
|
|
124
|
-
expect(await fs.pathExists(path.join(targetDir, 'package.json'))).toBe(true);
|
|
125
|
-
const copiedPackageJson = (await fs.readJson(path.join(targetDir, 'package.json')));
|
|
126
|
-
expect(copiedPackageJson.name).toBe('test-template');
|
|
127
|
-
});
|
|
128
|
-
it('should create pnpm-workspace.yaml if it does not exist', async () => {
|
|
129
|
-
const targetDir = path.join(testDir, 'target');
|
|
130
|
-
await fs.ensureDir(targetDir);
|
|
131
|
-
const workspaceFile = path.join(targetDir, 'pnpm-workspace.yaml');
|
|
132
|
-
// Verify it doesn't exist initially
|
|
133
|
-
expect(await fs.pathExists(workspaceFile)).toBe(false);
|
|
134
|
-
// Create the workspace file (mimicking the functionality)
|
|
135
|
-
await fs.writeFile(workspaceFile, "packages:\n - '*'\n");
|
|
136
|
-
// Verify it was created
|
|
137
|
-
expect(await fs.pathExists(workspaceFile)).toBe(true);
|
|
138
|
-
const content = await fs.readFile(workspaceFile, 'utf8');
|
|
139
|
-
expect(content).toBe("packages:\n - '*'\n");
|
|
140
|
-
});
|
|
141
|
-
it('should not overwrite existing pnpm-workspace.yaml', async () => {
|
|
142
|
-
const targetDir = path.join(testDir, 'target');
|
|
143
|
-
await fs.ensureDir(targetDir);
|
|
144
|
-
const workspaceFile = path.join(targetDir, 'pnpm-workspace.yaml');
|
|
145
|
-
const existingContent = "packages:\n - 'custom-packages/*'\n";
|
|
146
|
-
// Create existing workspace file
|
|
147
|
-
await fs.writeFile(workspaceFile, existingContent);
|
|
148
|
-
// Verify it exists with original content
|
|
149
|
-
expect(await fs.pathExists(workspaceFile)).toBe(true);
|
|
150
|
-
const content = await fs.readFile(workspaceFile, 'utf8');
|
|
151
|
-
expect(content).toBe(existingContent);
|
|
152
|
-
// Simulate checking if file exists before writing
|
|
153
|
-
const fileExists = await fs.pathExists(workspaceFile);
|
|
154
|
-
if (!fileExists) {
|
|
155
|
-
await fs.writeFile(workspaceFile, "packages:\n - '*'\n");
|
|
156
|
-
}
|
|
157
|
-
// Verify original content is preserved
|
|
158
|
-
const finalContent = await fs.readFile(workspaceFile, 'utf8');
|
|
159
|
-
expect(finalContent).toBe(existingContent);
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
describe('Auto Config ID Replacement', () => {
|
|
163
|
-
it('should replace bogus fileId with generated ID in auto.config.ts', async () => {
|
|
164
|
-
// Create template with auto.config.ts containing bogus fileId
|
|
165
|
-
const templateDir = path.join(testDir, 'template-with-config');
|
|
166
|
-
await fs.ensureDir(templateDir);
|
|
167
|
-
// Create auto.config.ts with bogus fileId pattern
|
|
168
|
-
const autoConfigContent = `import { autoConfig } from '@auto-engineer/cli';
|
|
169
|
-
|
|
170
|
-
export default autoConfig({
|
|
171
|
-
fileId: 'a1b2c3d4e', // bogus template ID that should be replaced
|
|
172
|
-
plugins: ['@auto-engineer/cli'],
|
|
173
|
-
});`;
|
|
174
|
-
await fs.writeFile(path.join(templateDir, 'auto.config.ts'), autoConfigContent);
|
|
175
|
-
// Create target directory
|
|
176
|
-
const targetDir = path.join(testDir, 'target-with-replaced-id');
|
|
177
|
-
// Copy template files first
|
|
178
|
-
await fs.copy(templateDir, targetDir);
|
|
179
|
-
// Now call the replacement function directly (since we're testing integration but not the full createFromTemplate flow)
|
|
180
|
-
const { replaceBogusFileIds } = await import('./index.js');
|
|
181
|
-
await replaceBogusFileIds(targetDir);
|
|
182
|
-
// Read the processed auto.config.ts file
|
|
183
|
-
const copiedConfigPath = path.join(targetDir, 'auto.config.ts');
|
|
184
|
-
expect(await fs.pathExists(copiedConfigPath)).toBe(true);
|
|
185
|
-
const copiedContent = await fs.readFile(copiedConfigPath, 'utf8');
|
|
186
|
-
// The bogus ID should be replaced with a generated 9-character base62 ID
|
|
187
|
-
expect(copiedContent).not.toContain('a1b2c3d4e'); // Should not contain bogus ID
|
|
188
|
-
// Extract the fileId value using regex
|
|
189
|
-
const fileIdMatch = copiedContent.match(/fileId:\s*'([^']+)'/);
|
|
190
|
-
expect(fileIdMatch).toBeTruthy();
|
|
191
|
-
const newFileId = fileIdMatch[1];
|
|
192
|
-
// Should be a 9-character base62 string (different from the bogus one)
|
|
193
|
-
expect(newFileId).toHaveLength(9);
|
|
194
|
-
expect(newFileId).toMatch(/^[A-Za-z0-9]+$/); // base62: A-Z, a-z, 0-9
|
|
195
|
-
expect(newFileId).not.toBe('a1b2c3d4e');
|
|
196
|
-
});
|
|
197
|
-
it('should replace different bogus fileId patterns', async () => {
|
|
198
|
-
// Test with different bogus pattern from shopping-app
|
|
199
|
-
const templateDir = path.join(testDir, 'template-shopping-config');
|
|
200
|
-
await fs.ensureDir(templateDir);
|
|
201
|
-
const autoConfigContent = `import { autoConfig } from '@auto-engineer/cli';
|
|
202
|
-
|
|
203
|
-
export default autoConfig({
|
|
204
|
-
fileId: 'a2b2c2d2e', // different bogus template ID
|
|
205
|
-
plugins: ['@auto-engineer/cli'],
|
|
206
|
-
});`;
|
|
207
|
-
await fs.writeFile(path.join(templateDir, 'auto.config.ts'), autoConfigContent);
|
|
208
|
-
const targetDir = path.join(testDir, 'target-shopping-replaced-id');
|
|
209
|
-
await fs.copy(templateDir, targetDir);
|
|
210
|
-
// Apply the replacement function
|
|
211
|
-
const { replaceBogusFileIds } = await import('./index.js');
|
|
212
|
-
await replaceBogusFileIds(targetDir);
|
|
213
|
-
const copiedContent = await fs.readFile(path.join(targetDir, 'auto.config.ts'), 'utf8');
|
|
214
|
-
expect(copiedContent).not.toContain('a2b2c2d2e');
|
|
215
|
-
const fileIdMatch = copiedContent.match(/fileId:\s*'([^']+)'/);
|
|
216
|
-
expect(fileIdMatch).toBeTruthy();
|
|
217
|
-
const newFileId = fileIdMatch[1];
|
|
218
|
-
expect(newFileId).toHaveLength(9);
|
|
219
|
-
expect(newFileId).not.toBe('a2b2c2d2e');
|
|
220
|
-
});
|
|
221
|
-
it('should not modify auto.config.ts files without bogus fileId patterns', async () => {
|
|
222
|
-
const templateDir = path.join(testDir, 'template-valid-config');
|
|
223
|
-
await fs.ensureDir(templateDir);
|
|
224
|
-
const validId = 'MyProject'; // Valid custom fileId
|
|
225
|
-
const autoConfigContent = `import { autoConfig } from '@auto-engineer/cli';
|
|
226
|
-
|
|
227
|
-
export default autoConfig({
|
|
228
|
-
fileId: '${validId}',
|
|
229
|
-
plugins: ['@auto-engineer/cli'],
|
|
230
|
-
});`;
|
|
231
|
-
await fs.writeFile(path.join(templateDir, 'auto.config.ts'), autoConfigContent);
|
|
232
|
-
const targetDir = path.join(testDir, 'target-valid-config');
|
|
233
|
-
await fs.copy(templateDir, targetDir);
|
|
234
|
-
// Apply the replacement function (should not change anything)
|
|
235
|
-
const { replaceBogusFileIds } = await import('./index.js');
|
|
236
|
-
await replaceBogusFileIds(targetDir);
|
|
237
|
-
const copiedContent = await fs.readFile(path.join(targetDir, 'auto.config.ts'), 'utf8');
|
|
238
|
-
// Should preserve the original valid fileId
|
|
239
|
-
expect(copiedContent).toContain(`fileId: '${validId}'`);
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
describe('Project Structure Validation', () => {
|
|
243
|
-
it('should validate project options correctly', () => {
|
|
244
|
-
const templateOptions = {
|
|
245
|
-
name: 'test-project',
|
|
246
|
-
template: 'shopping-app',
|
|
247
|
-
preset: undefined,
|
|
248
|
-
packageManager: 'pnpm',
|
|
249
|
-
installDeps: true,
|
|
250
|
-
};
|
|
251
|
-
expect(templateOptions.template).toBe('shopping-app');
|
|
252
|
-
expect(templateOptions.preset).toBeUndefined();
|
|
253
|
-
expect(templateOptions.packageManager).toBe('pnpm');
|
|
254
|
-
const presetOptions = {
|
|
255
|
-
name: 'test-project',
|
|
256
|
-
template: undefined,
|
|
257
|
-
preset: 'minimal',
|
|
258
|
-
packageManager: 'npm',
|
|
259
|
-
installDeps: false,
|
|
260
|
-
};
|
|
261
|
-
expect(presetOptions.template).toBeUndefined();
|
|
262
|
-
expect(presetOptions.preset).toBe('minimal');
|
|
263
|
-
expect(presetOptions.packageManager).toBe('npm');
|
|
264
|
-
});
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
//# sourceMappingURL=index.specs.js.map
|
package/dist/index.specs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.specs.js","sourceRoot":"","sources":["../src/index.specs.ts"],"names":[],"mappings":"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"}
|
package/dist/index.test.d.ts
DELETED
package/dist/index.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
package/dist/index.test.js
DELETED
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { mkdtemp, rm } from 'node:fs/promises';
|
|
5
|
-
import { tmpdir } from 'node:os';
|
|
6
|
-
describe('Template Discovery Integration Tests', () => {
|
|
7
|
-
let testDir;
|
|
8
|
-
beforeEach(async () => {
|
|
9
|
-
testDir = await mkdtemp(path.join(tmpdir(), 'create-auto-app-test-'));
|
|
10
|
-
});
|
|
11
|
-
afterEach(async () => {
|
|
12
|
-
await rm(testDir, { recursive: true, force: true });
|
|
13
|
-
});
|
|
14
|
-
describe('getAvailableTemplates', () => {
|
|
15
|
-
it('should discover templates with valid template.json files', async () => {
|
|
16
|
-
// Create mock templates directory structure
|
|
17
|
-
const templatesDir = path.join(testDir, 'templates');
|
|
18
|
-
await fs.ensureDir(templatesDir);
|
|
19
|
-
// Create shopping-app template with template.json
|
|
20
|
-
const shoppingAppDir = path.join(templatesDir, 'shopping-app');
|
|
21
|
-
await fs.ensureDir(shoppingAppDir);
|
|
22
|
-
await fs.writeJson(path.join(shoppingAppDir, 'template.json'), {
|
|
23
|
-
name: 'shopping-app',
|
|
24
|
-
displayName: 'Shopping App',
|
|
25
|
-
description: 'Full e-commerce example with client/server architecture',
|
|
26
|
-
type: 'template',
|
|
27
|
-
features: ['Complete e-commerce functionality', 'GraphQL API with Apollo Server'],
|
|
28
|
-
preset: 'full',
|
|
29
|
-
});
|
|
30
|
-
// Create questionnaires template with template.json
|
|
31
|
-
const questionnairesDir = path.join(templatesDir, 'questionnaires');
|
|
32
|
-
await fs.ensureDir(questionnairesDir);
|
|
33
|
-
await fs.writeJson(path.join(questionnairesDir, 'template.json'), {
|
|
34
|
-
name: 'questionnaires',
|
|
35
|
-
displayName: 'Questionnaires App',
|
|
36
|
-
description: 'Survey and questionnaire management system',
|
|
37
|
-
type: 'template',
|
|
38
|
-
features: ['Survey creation and management', 'Dynamic form generation'],
|
|
39
|
-
preset: 'full',
|
|
40
|
-
});
|
|
41
|
-
// Create a file that should be ignored
|
|
42
|
-
await fs.writeFile(path.join(templatesDir, 'README.md'), 'This should be ignored');
|
|
43
|
-
// Verify template files exist
|
|
44
|
-
expect(await fs.pathExists(path.join(shoppingAppDir, 'template.json'))).toBe(true);
|
|
45
|
-
expect(await fs.pathExists(path.join(questionnairesDir, 'template.json'))).toBe(true);
|
|
46
|
-
const shoppingAppTemplate = (await fs.readJson(path.join(shoppingAppDir, 'template.json')));
|
|
47
|
-
expect(shoppingAppTemplate.name).toBe('shopping-app');
|
|
48
|
-
expect(shoppingAppTemplate.displayName).toBe('Shopping App');
|
|
49
|
-
const questionnairesTemplate = (await fs.readJson(path.join(questionnairesDir, 'template.json')));
|
|
50
|
-
expect(questionnairesTemplate.name).toBe('questionnaires');
|
|
51
|
-
expect(questionnairesTemplate.displayName).toBe('Questionnaires App');
|
|
52
|
-
});
|
|
53
|
-
it('should handle missing templates directory gracefully', async () => {
|
|
54
|
-
// Don't create any templates directory
|
|
55
|
-
const templatesDir = path.join(testDir, 'templates');
|
|
56
|
-
expect(await fs.pathExists(templatesDir)).toBe(false);
|
|
57
|
-
});
|
|
58
|
-
it('should skip directories without template.json', async () => {
|
|
59
|
-
const templatesDir = path.join(testDir, 'templates');
|
|
60
|
-
await fs.ensureDir(templatesDir);
|
|
61
|
-
// Create incomplete-template directory without template.json
|
|
62
|
-
const incompleteDir = path.join(templatesDir, 'incomplete-template');
|
|
63
|
-
await fs.ensureDir(incompleteDir);
|
|
64
|
-
await fs.writeFile(path.join(incompleteDir, 'README.md'), 'No template.json here');
|
|
65
|
-
// Create valid-template directory with template.json
|
|
66
|
-
const validDir = path.join(templatesDir, 'valid-template');
|
|
67
|
-
await fs.ensureDir(validDir);
|
|
68
|
-
await fs.writeJson(path.join(validDir, 'template.json'), {
|
|
69
|
-
name: 'valid-template',
|
|
70
|
-
displayName: 'Valid Template',
|
|
71
|
-
description: 'A valid template',
|
|
72
|
-
type: 'template',
|
|
73
|
-
features: ['Basic functionality'],
|
|
74
|
-
preset: 'minimal',
|
|
75
|
-
});
|
|
76
|
-
// Verify only the valid template has template.json
|
|
77
|
-
expect(await fs.pathExists(path.join(incompleteDir, 'template.json'))).toBe(false);
|
|
78
|
-
expect(await fs.pathExists(path.join(validDir, 'template.json'))).toBe(true);
|
|
79
|
-
});
|
|
80
|
-
it('should handle malformed template.json files', async () => {
|
|
81
|
-
const templatesDir = path.join(testDir, 'templates');
|
|
82
|
-
await fs.ensureDir(templatesDir);
|
|
83
|
-
// Create broken-template with invalid JSON
|
|
84
|
-
const brokenDir = path.join(templatesDir, 'broken-template');
|
|
85
|
-
await fs.ensureDir(brokenDir);
|
|
86
|
-
await fs.writeFile(path.join(brokenDir, 'template.json'), 'invalid json content {');
|
|
87
|
-
// Create good-template with valid JSON
|
|
88
|
-
const goodDir = path.join(templatesDir, 'good-template');
|
|
89
|
-
await fs.ensureDir(goodDir);
|
|
90
|
-
await fs.writeJson(path.join(goodDir, 'template.json'), {
|
|
91
|
-
name: 'good-template',
|
|
92
|
-
displayName: 'Good Template',
|
|
93
|
-
description: 'A working template',
|
|
94
|
-
type: 'template',
|
|
95
|
-
features: ['Working functionality'],
|
|
96
|
-
preset: 'full',
|
|
97
|
-
});
|
|
98
|
-
// Verify the broken template throws an error when read
|
|
99
|
-
await expect(fs.readJson(path.join(brokenDir, 'template.json'))).rejects.toThrow();
|
|
100
|
-
// Verify the good template can be read successfully
|
|
101
|
-
const goodTemplate = (await fs.readJson(path.join(goodDir, 'template.json')));
|
|
102
|
-
expect(goodTemplate.name).toBe('good-template');
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('Template Creation', () => {
|
|
106
|
-
it('should handle template copying', async () => {
|
|
107
|
-
// Create a source template
|
|
108
|
-
const sourceTemplate = path.join(testDir, 'source-template');
|
|
109
|
-
await fs.ensureDir(sourceTemplate);
|
|
110
|
-
await fs.writeFile(path.join(sourceTemplate, 'README.md'), '# Test Template');
|
|
111
|
-
await fs.writeJson(path.join(sourceTemplate, 'package.json'), {
|
|
112
|
-
name: 'test-template',
|
|
113
|
-
version: '1.0.0',
|
|
114
|
-
dependencies: {
|
|
115
|
-
'@auto-engineer/cli': 'latest',
|
|
116
|
-
},
|
|
117
|
-
});
|
|
118
|
-
// Create target directory
|
|
119
|
-
const targetDir = path.join(testDir, 'target');
|
|
120
|
-
// Copy template (mimicking createFromTemplate functionality)
|
|
121
|
-
await fs.copy(sourceTemplate, targetDir);
|
|
122
|
-
// Verify files were copied
|
|
123
|
-
expect(await fs.pathExists(path.join(targetDir, 'README.md'))).toBe(true);
|
|
124
|
-
expect(await fs.pathExists(path.join(targetDir, 'package.json'))).toBe(true);
|
|
125
|
-
const copiedPackageJson = (await fs.readJson(path.join(targetDir, 'package.json')));
|
|
126
|
-
expect(copiedPackageJson.name).toBe('test-template');
|
|
127
|
-
});
|
|
128
|
-
it('should create pnpm-workspace.yaml if it does not exist', async () => {
|
|
129
|
-
const targetDir = path.join(testDir, 'target');
|
|
130
|
-
await fs.ensureDir(targetDir);
|
|
131
|
-
const workspaceFile = path.join(targetDir, 'pnpm-workspace.yaml');
|
|
132
|
-
// Verify it doesn't exist initially
|
|
133
|
-
expect(await fs.pathExists(workspaceFile)).toBe(false);
|
|
134
|
-
// Create the workspace file (mimicking the functionality)
|
|
135
|
-
await fs.writeFile(workspaceFile, "packages:\n - '*'\n");
|
|
136
|
-
// Verify it was created
|
|
137
|
-
expect(await fs.pathExists(workspaceFile)).toBe(true);
|
|
138
|
-
const content = await fs.readFile(workspaceFile, 'utf8');
|
|
139
|
-
expect(content).toBe("packages:\n - '*'\n");
|
|
140
|
-
});
|
|
141
|
-
it('should not overwrite existing pnpm-workspace.yaml', async () => {
|
|
142
|
-
const targetDir = path.join(testDir, 'target');
|
|
143
|
-
await fs.ensureDir(targetDir);
|
|
144
|
-
const workspaceFile = path.join(targetDir, 'pnpm-workspace.yaml');
|
|
145
|
-
const existingContent = "packages:\n - 'custom-packages/*'\n";
|
|
146
|
-
// Create existing workspace file
|
|
147
|
-
await fs.writeFile(workspaceFile, existingContent);
|
|
148
|
-
// Verify it exists with original content
|
|
149
|
-
expect(await fs.pathExists(workspaceFile)).toBe(true);
|
|
150
|
-
const content = await fs.readFile(workspaceFile, 'utf8');
|
|
151
|
-
expect(content).toBe(existingContent);
|
|
152
|
-
// Simulate checking if file exists before writing
|
|
153
|
-
const fileExists = await fs.pathExists(workspaceFile);
|
|
154
|
-
if (!fileExists) {
|
|
155
|
-
await fs.writeFile(workspaceFile, "packages:\n - '*'\n");
|
|
156
|
-
}
|
|
157
|
-
// Verify original content is preserved
|
|
158
|
-
const finalContent = await fs.readFile(workspaceFile, 'utf8');
|
|
159
|
-
expect(finalContent).toBe(existingContent);
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
describe('Project Structure Validation', () => {
|
|
163
|
-
it('should validate project options correctly', () => {
|
|
164
|
-
const templateOptions = {
|
|
165
|
-
name: 'test-project',
|
|
166
|
-
template: 'shopping-app',
|
|
167
|
-
preset: undefined,
|
|
168
|
-
packageManager: 'pnpm',
|
|
169
|
-
installDeps: true,
|
|
170
|
-
};
|
|
171
|
-
expect(templateOptions.template).toBe('shopping-app');
|
|
172
|
-
expect(templateOptions.preset).toBeUndefined();
|
|
173
|
-
expect(templateOptions.packageManager).toBe('pnpm');
|
|
174
|
-
const presetOptions = {
|
|
175
|
-
name: 'test-project',
|
|
176
|
-
template: undefined,
|
|
177
|
-
preset: 'minimal',
|
|
178
|
-
packageManager: 'npm',
|
|
179
|
-
installDeps: false,
|
|
180
|
-
};
|
|
181
|
-
expect(presetOptions.template).toBeUndefined();
|
|
182
|
-
expect(presetOptions.preset).toBe('minimal');
|
|
183
|
-
expect(presetOptions.packageManager).toBe('npm');
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Logs
|
|
2
|
-
logs
|
|
3
|
-
*.log
|
|
4
|
-
npm-debug.log*
|
|
5
|
-
yarn-debug.log*
|
|
6
|
-
yarn-error.log*
|
|
7
|
-
pnpm-debug.log*
|
|
8
|
-
lerna-debug.log*
|
|
9
|
-
|
|
10
|
-
node_modules
|
|
11
|
-
dist
|
|
12
|
-
dist-ssr
|
|
13
|
-
*.local
|
|
14
|
-
|
|
15
|
-
# Editor directories and files
|
|
16
|
-
.vscode/*
|
|
17
|
-
!.vscode/extensions.json
|
|
18
|
-
.idea
|
|
19
|
-
.DS_Store
|
|
20
|
-
*.suo
|
|
21
|
-
*.ntvs*
|
|
22
|
-
*.njsproj
|
|
23
|
-
*.sln
|
|
24
|
-
*.sw?
|