create-auto-app 0.9.10 → 0.9.12
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/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -19
- package/dist/index.js.map +1 -1
- package/dist/index.specs.d.ts +2 -0
- package/dist/index.specs.d.ts.map +1 -0
- package/dist/index.specs.js +267 -0
- package/dist/index.specs.js.map +1 -0
- package/package.json +7 -4
- package/templates/questionnaires/auto.config.ts +158 -0
- package/templates/questionnaires/flows/questionnaires.flow.ts +359 -0
- package/templates/questionnaires/package.json +30 -0
- package/templates/questionnaires/template.json +7 -0
- package/templates/questionnaires/tsconfig.json +15 -0
- package/templates/shopping-app/auto.config.ts +2 -0
- package/templates/shopping-app/template.json +7 -0
- package/templates/.gitkeep +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
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 };
|
|
3
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
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;AAyPD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { execa } from 'execa';
|
|
|
7
7
|
import fs from 'fs-extra';
|
|
8
8
|
import path from 'path';
|
|
9
9
|
import { fileURLToPath } from 'url';
|
|
10
|
+
import { generateId } from '@auto-engineer/id';
|
|
10
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
12
|
const __dirname = path.dirname(__filename);
|
|
12
13
|
const AUTO_ENGINEER_PACKAGES = [
|
|
@@ -122,8 +123,44 @@ async function installDependencies(targetDir, packageManager) {
|
|
|
122
123
|
console.error(error);
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
|
-
|
|
126
|
-
|
|
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...`));
|
|
127
164
|
try {
|
|
128
165
|
// Copy without filter first to ensure it works
|
|
129
166
|
await fs.copy(templatePath, targetDir);
|
|
@@ -140,6 +177,8 @@ async function createFromTemplate(templatePath, targetDir, projectName) {
|
|
|
140
177
|
// Get latest versions for all packages
|
|
141
178
|
const packagesToCheck = [...AUTO_ENGINEER_PACKAGES];
|
|
142
179
|
const versions = await getLatestVersions(packagesToCheck);
|
|
180
|
+
// Replace bogus fileId values in auto.config.ts files
|
|
181
|
+
await replaceBogusFileIds(targetDir);
|
|
143
182
|
// Update package versions
|
|
144
183
|
await updatePackageVersions(targetDir, projectName, versions);
|
|
145
184
|
}
|
|
@@ -181,11 +220,36 @@ function printSuccessMessage(name, packageManager, installDeps) {
|
|
|
181
220
|
}
|
|
182
221
|
console.log(chalk.cyan(` ${packageManager} run start\n`));
|
|
183
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
|
+
}
|
|
184
248
|
async function handleTemplateCreation(template, preset, targetDir, projectName, packageManager) {
|
|
185
|
-
if (template
|
|
186
|
-
const templatePath = path.join(__dirname, '..', 'templates',
|
|
249
|
+
if (template !== undefined) {
|
|
250
|
+
const templatePath = path.join(__dirname, '..', 'templates', template);
|
|
187
251
|
if (await fs.pathExists(templatePath)) {
|
|
188
|
-
await createFromTemplate(templatePath, targetDir, projectName);
|
|
252
|
+
await createFromTemplate(templatePath, targetDir, projectName, template);
|
|
189
253
|
}
|
|
190
254
|
else {
|
|
191
255
|
console.log(chalk.yellow(`Template not found at ${templatePath}, creating minimal project...`));
|
|
@@ -289,12 +353,15 @@ Visit [Auto Engineer Documentation](https://github.com/solguru310/auto-engineer)
|
|
|
289
353
|
await fs.writeFile(path.join(targetDir, 'README.md'), readme);
|
|
290
354
|
}
|
|
291
355
|
async function main() {
|
|
356
|
+
// Get available templates for help text
|
|
357
|
+
const availableTemplates = await getAvailableTemplates();
|
|
358
|
+
const templateNames = availableTemplates.map((t) => t.name).join(', ');
|
|
292
359
|
program
|
|
293
360
|
.name('create-auto-app')
|
|
294
361
|
.description('Create a new Auto Engineer application')
|
|
295
362
|
.version('0.1.0')
|
|
296
363
|
.argument('[project-name]', 'Name of the project (use "." for current directory)')
|
|
297
|
-
.option('-t, --template <template>',
|
|
364
|
+
.option('-t, --template <template>', `Project template (${templateNames})`)
|
|
298
365
|
.option('-p, --preset <preset>', 'Package preset (minimal, full)', 'full')
|
|
299
366
|
.option('--no-install', 'Skip dependency installation')
|
|
300
367
|
.option('--use-npm', 'Use npm as package manager')
|
|
@@ -305,6 +372,16 @@ async function main() {
|
|
|
305
372
|
let projectName = program.args[0];
|
|
306
373
|
// Interactive mode if no project name provided
|
|
307
374
|
if (!projectName) {
|
|
375
|
+
// Build choices dynamically from available templates
|
|
376
|
+
const templateChoices = availableTemplates.map((template) => ({
|
|
377
|
+
name: `${template.displayName} - ${template.description}`,
|
|
378
|
+
value: template.name,
|
|
379
|
+
}));
|
|
380
|
+
const setupChoices = [
|
|
381
|
+
...templateChoices,
|
|
382
|
+
{ name: 'Create minimal project (just essentials)', value: 'minimal' },
|
|
383
|
+
{ name: 'Create full project (all packages)', value: 'full' },
|
|
384
|
+
];
|
|
308
385
|
const answers = (await inquirer.prompt([
|
|
309
386
|
{
|
|
310
387
|
type: 'input',
|
|
@@ -326,12 +403,8 @@ async function main() {
|
|
|
326
403
|
type: 'list',
|
|
327
404
|
name: 'setupType',
|
|
328
405
|
message: 'How would you like to set up your project?',
|
|
329
|
-
choices:
|
|
330
|
-
|
|
331
|
-
{ name: 'Create minimal project (just essentials)', value: 'minimal' },
|
|
332
|
-
{ name: 'Create full project (all packages)', value: 'full' },
|
|
333
|
-
],
|
|
334
|
-
default: 'template',
|
|
406
|
+
choices: setupChoices,
|
|
407
|
+
default: availableTemplates.length > 0 ? availableTemplates[0].name : 'minimal',
|
|
335
408
|
},
|
|
336
409
|
{
|
|
337
410
|
type: 'confirm',
|
|
@@ -341,8 +414,9 @@ async function main() {
|
|
|
341
414
|
},
|
|
342
415
|
]));
|
|
343
416
|
projectName = answers.name;
|
|
344
|
-
|
|
345
|
-
|
|
417
|
+
const selectedTemplate = availableTemplates.find((t) => t.name === answers.setupType);
|
|
418
|
+
if (selectedTemplate) {
|
|
419
|
+
options.template = selectedTemplate.name;
|
|
346
420
|
options.preset = undefined;
|
|
347
421
|
}
|
|
348
422
|
else {
|
|
@@ -367,15 +441,20 @@ async function main() {
|
|
|
367
441
|
}
|
|
368
442
|
const projectOptions = {
|
|
369
443
|
name: projectName,
|
|
370
|
-
template: options.template === '
|
|
444
|
+
template: typeof options.template === 'string' ? options.template : undefined,
|
|
371
445
|
preset: options.preset,
|
|
372
446
|
packageManager,
|
|
373
447
|
installDeps: options.install !== false,
|
|
374
448
|
};
|
|
375
449
|
await createProject(projectOptions);
|
|
376
450
|
}
|
|
377
|
-
main
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
451
|
+
// Only run main if this file is executed directly
|
|
452
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
453
|
+
main().catch((error) => {
|
|
454
|
+
console.error(chalk.red('Error:'), error);
|
|
455
|
+
process.exit(1);
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
// Export functions for testing
|
|
459
|
+
export { getAvailableTemplates, createFromTemplate, detectPackageManager, replaceBogusFileIds };
|
|
381
460
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.specs.d.ts","sourceRoot":"","sources":["../src/index.specs.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,267 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.specs.js","sourceRoot":"","sources":["../src/index.specs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-auto-app",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.12",
|
|
4
4
|
"description": "Create Auto Engineer apps with no configuration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,21 +26,24 @@
|
|
|
26
26
|
"execa": "^9.6.0",
|
|
27
27
|
"fs-extra": "^11.2.0",
|
|
28
28
|
"inquirer": "^9.2.15",
|
|
29
|
-
"ora": "^8.0.1"
|
|
29
|
+
"ora": "^8.0.1",
|
|
30
|
+
"@auto-engineer/id": "0.9.12"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@types/fs-extra": "^11.0.4",
|
|
33
34
|
"@types/inquirer": "^9.0.7",
|
|
34
35
|
"@types/node": "^20.11.19",
|
|
35
36
|
"tsx": "^4.20.3",
|
|
36
|
-
"typescript": "^5.3.3"
|
|
37
|
+
"typescript": "^5.3.3",
|
|
38
|
+
"vitest": "^3.2.4"
|
|
37
39
|
},
|
|
38
40
|
"engines": {
|
|
39
41
|
"node": ">=18.0.0"
|
|
40
42
|
},
|
|
41
43
|
"scripts": {
|
|
42
|
-
"copy-templates": "rm -rf templates
|
|
44
|
+
"copy-templates": "rm -rf templates && mkdir templates && rsync -a --exclude='node_modules' --exclude='.turbo' --exclude='dist' --exclude='build' --exclude='**/*.js' --exclude='**/*.js.map' ../../examples/ templates/",
|
|
43
45
|
"build": "npm run copy-templates && tsc && chmod +x dist/index.js",
|
|
46
|
+
"test": "vitest run --reporter=dot",
|
|
44
47
|
"type-check": "tsc --noEmit",
|
|
45
48
|
"lint": "eslint 'src/**/*.ts' --max-warnings 0 --config ../../eslint.config.ts --ignore-pattern 'templates/**'",
|
|
46
49
|
"format": "prettier --write \"**/*.{js,ts,json,md,yml,yaml}\" --ignore-path ../../.prettierignore --log-level warn"
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { autoConfig, on, dispatch } from '@auto-engineer/cli';
|
|
2
|
+
import type { ExportSchemaCommand, ExportSchemaEvents } from '@auto-engineer/flow';
|
|
3
|
+
import type { GenerateServerCommand, GenerateServerEvents } from '@auto-engineer/server-generator-apollo-emmett';
|
|
4
|
+
import type { ImplementServerCommand, ImplementServerEvents } from '@auto-engineer/server-implementer';
|
|
5
|
+
import type {
|
|
6
|
+
CheckTestsCommand,
|
|
7
|
+
CheckTestsEvents,
|
|
8
|
+
CheckTypesCommand,
|
|
9
|
+
CheckTypesEvents,
|
|
10
|
+
CheckLintCommand,
|
|
11
|
+
CheckLintEvents,
|
|
12
|
+
TestsCheckFailedEvent,
|
|
13
|
+
} from '@auto-engineer/server-checks';
|
|
14
|
+
import type { GenerateIACommand, GenerateIAEvents } from '@auto-engineer/information-architect';
|
|
15
|
+
import type { ImplementClientCommand, ImplementClientEvents } from '@auto-engineer/frontend-implementer';
|
|
16
|
+
import type { GenerateClientCommand, GenerateClientEvents } from '@auto-engineer/frontend-generator-react-graphql';
|
|
17
|
+
|
|
18
|
+
export default autoConfig({
|
|
19
|
+
fileId: 'a1b2c3d4e', // unique 9-character base62 canvas file id where all flows in this project will be shown
|
|
20
|
+
|
|
21
|
+
plugins: [
|
|
22
|
+
'@auto-engineer/server-checks',
|
|
23
|
+
'@auto-engineer/design-system-importer',
|
|
24
|
+
'@auto-engineer/server-generator-apollo-emmett',
|
|
25
|
+
'@auto-engineer/flow',
|
|
26
|
+
'@auto-engineer/frontend-checks',
|
|
27
|
+
'@auto-engineer/frontend-implementer',
|
|
28
|
+
'@auto-engineer/information-architect',
|
|
29
|
+
'@auto-engineer/frontend-generator-react-graphql',
|
|
30
|
+
'@auto-engineer/server-implementer',
|
|
31
|
+
],
|
|
32
|
+
aliases: {
|
|
33
|
+
// Resolve command name conflicts between packages
|
|
34
|
+
// 'test:types': checkTypesCommandHandler,
|
|
35
|
+
},
|
|
36
|
+
pipeline: () => {
|
|
37
|
+
on<ExportSchemaEvents>('SchemaExported', () =>
|
|
38
|
+
dispatch<GenerateServerCommand>('GenerateServer', {
|
|
39
|
+
schemaPath: './.context/schema.json',
|
|
40
|
+
destination: '.',
|
|
41
|
+
}),
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
on<GenerateServerEvents>('ServerGenerated', () =>
|
|
45
|
+
dispatch<GenerateIACommand>('GenerateIA', {
|
|
46
|
+
outputDir: './.context',
|
|
47
|
+
flowFiles: ['./flows/questionnaires.flow.ts'],
|
|
48
|
+
}),
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
on<GenerateIAEvents>('IAGenerated', () =>
|
|
52
|
+
dispatch<GenerateClientCommand>('GenerateClient', {
|
|
53
|
+
starterDir: '../../packages/frontend-generator-react-graphql/shadcn-starter',
|
|
54
|
+
targetDir: './client',
|
|
55
|
+
iaSchemaPath: './.context/auto-ia-scheme.json',
|
|
56
|
+
gqlSchemaPath: './.context/schema.graphql',
|
|
57
|
+
figmaVariablesPath: './.context/figma-variables.json',
|
|
58
|
+
}),
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
on<GenerateClientEvents>('ClientGenerated', () =>
|
|
62
|
+
dispatch<ImplementClientCommand>('ImplementClient', {
|
|
63
|
+
projectDir: './client',
|
|
64
|
+
iaSchemeDir: './.context',
|
|
65
|
+
designSystemPath: './.context/design-system.md',
|
|
66
|
+
}),
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
on<ImplementServerEvents>('SliceImplemented', () => {
|
|
70
|
+
dispatch<CheckTestsCommand>('CheckTests', {
|
|
71
|
+
targetDirectory: 'sds',
|
|
72
|
+
scope: 'slice',
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
on<ImplementServerEvents>('SliceImplemented', () => {
|
|
77
|
+
dispatch<CheckTypesCommand>('CheckTypes', {
|
|
78
|
+
targetDirectory: 'sds',
|
|
79
|
+
scope: 'slice',
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
on<ImplementServerEvents>('SliceImplemented', () => {
|
|
84
|
+
dispatch<CheckLintCommand>('CheckLint', {
|
|
85
|
+
targetDirectory: 'sds',
|
|
86
|
+
scope: 'slice',
|
|
87
|
+
fix: true,
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
on.settled<CheckTestsCommand, CheckTypesCommand, CheckLintCommand>(
|
|
92
|
+
['CheckTests', 'CheckTypes', 'CheckLint'],
|
|
93
|
+
dispatch<ImplementClientCommand>(['ImplementClient'], (events, send) => {
|
|
94
|
+
const hasFailures =
|
|
95
|
+
events.CheckTests.some((e: CheckTestsEvents) => e.type === 'TestsCheckFailed') ||
|
|
96
|
+
events.CheckTypes.some((e: CheckTypesEvents) => e.type === 'TypeCheckFailed') ||
|
|
97
|
+
events.CheckLint.some((e: CheckLintEvents) => e.type === 'LintCheckFailed');
|
|
98
|
+
|
|
99
|
+
if (hasFailures) {
|
|
100
|
+
send({
|
|
101
|
+
type: 'ImplementClient',
|
|
102
|
+
data: {
|
|
103
|
+
projectDir: 'some/where',
|
|
104
|
+
iaSchemeDir: '/',
|
|
105
|
+
designSystemPath: '',
|
|
106
|
+
failures: [],
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}),
|
|
111
|
+
);
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
/*
|
|
115
|
+
|
|
116
|
+
rm -rf server client .context/schema.json .context/schema.graphql .context/auto-ia-scheme.json
|
|
117
|
+
pnpm auto export:schema
|
|
118
|
+
pnpm auto generate:ia --output-dir=./.context --flow-files=./flows/questionnaires.flow.ts
|
|
119
|
+
pnpm auto generate:server --schema-path=./.context/schema.json --destination=.
|
|
120
|
+
pnpm auto generate:client --starter-dir=../../packages/frontend-generator-react-graphql/shadcn-starter --target-dir=./client --ia-schema-path=./.context/auto-ia-scheme.json --gql-schema-path=./.context/schema.graphql --figma-variables-path=./.context/figma-variables.json
|
|
121
|
+
pnpm auto implement:client --project-dir=./questionnaires/client --ia-scheme-dir=./questionnaires/.context --design-system-path=./questionnaires/.context/design-system.md
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
// make this emit one slice at a time
|
|
125
|
+
pnpm auto generate:server --schema-path=./.context/schema.json --destination=.
|
|
126
|
+
|
|
127
|
+
// TODO remove the AI part and make it mathematical
|
|
128
|
+
pnpm auto generate:client --starter-dir=/Users/sam/WebstormProjects/top/auto-engineer/packages/frontend-generator-react-graphql/shadcn-starter --target-dir=./client --ia-schema-path=./.context/auto-ia-scheme.json --gql-schema-path=./.context/schema.graphql --figma-variables-path=./.context/figma-variables.json
|
|
129
|
+
|
|
130
|
+
// run this per slice in parallel
|
|
131
|
+
pnpm auto implement:slice --slice-path=./questionnaires/server/src/domain/flows/questionnaires/submits-the-questionnaire
|
|
132
|
+
// add checks
|
|
133
|
+
// add retry logic tore-implement failed slices with a retry count
|
|
134
|
+
|
|
135
|
+
// slice these up
|
|
136
|
+
pnpm auto implement:client --project-dir=./questionnaires/client --ia-scheme-dir=./questionnaires/.context --design-system-path=./questionnaires/.context/design-system.md
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
// implement atoms in parallel - how do I know all atoms are done?
|
|
140
|
+
// implement molecules in parallel - how do I know all molecules are done?
|
|
141
|
+
// implement organisms in parallel - how do I know all organisms are done?
|
|
142
|
+
// implement pages in parallel - how do I know all pages are done?
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
// generate slice > implement slice > check slice > retry failure 3 times >
|
|
146
|
+
// generate slice > implement slice > check slice > retry failure 3 times >
|
|
147
|
+
// generate slice > implement slice > check slice > retry failure 3 times >
|
|
148
|
+
|
|
149
|
+
cd ~/WebstormProjects/top/auto-engineer/examples/questionnaires &&\
|
|
150
|
+
pnpm -w build &&\
|
|
151
|
+
rm -rf server client .context/schema.json .context/schema.graphql .context/auto-ia-scheme.json &&\
|
|
152
|
+
DEBUG=* pnpm auto export:schema &&\
|
|
153
|
+
DEBUG=* pnpm auto generate:server --schema-path=./.context/schema.json --destination=. &&\
|
|
154
|
+
DEBUG=* pnpm auto generate:ia --output-dir=./.context --flow-files=./flows/questionnaires.flow.ts &&\
|
|
155
|
+
DEBUG=* pnpm auto generate:client --starter-dir=../../packages/frontend-generator-react-graphql/shadcn-starter --target-dir=./client --ia-schema-path=./.context/auto-ia-scheme.json --gql-schema-path=./.context/schema.graphql --figma-variables-path=./.context/figma-variables.json
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
*/
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import {
|
|
2
|
+
command,
|
|
3
|
+
query,
|
|
4
|
+
experience,
|
|
5
|
+
flow,
|
|
6
|
+
should,
|
|
7
|
+
specs,
|
|
8
|
+
rule,
|
|
9
|
+
example,
|
|
10
|
+
gql,
|
|
11
|
+
source,
|
|
12
|
+
data,
|
|
13
|
+
sink,
|
|
14
|
+
type Command,
|
|
15
|
+
type Event,
|
|
16
|
+
type State,
|
|
17
|
+
} from '@auto-engineer/flow';
|
|
18
|
+
|
|
19
|
+
type QuestionnaireLinkSent = Event<
|
|
20
|
+
'QuestionnaireLinkSent',
|
|
21
|
+
{
|
|
22
|
+
questionnaireId: string;
|
|
23
|
+
participantId: string;
|
|
24
|
+
link: string;
|
|
25
|
+
sentAt: Date;
|
|
26
|
+
}
|
|
27
|
+
>;
|
|
28
|
+
|
|
29
|
+
type QuestionAnswered = Event<
|
|
30
|
+
'QuestionAnswered',
|
|
31
|
+
{
|
|
32
|
+
questionnaireId: string;
|
|
33
|
+
participantId: string;
|
|
34
|
+
questionId: string;
|
|
35
|
+
answer: unknown;
|
|
36
|
+
savedAt: Date;
|
|
37
|
+
}
|
|
38
|
+
>;
|
|
39
|
+
|
|
40
|
+
type QuestionnaireSubmitted = Event<
|
|
41
|
+
'QuestionnaireSubmitted',
|
|
42
|
+
{
|
|
43
|
+
questionnaireId: string;
|
|
44
|
+
participantId: string;
|
|
45
|
+
submittedAt: Date;
|
|
46
|
+
}
|
|
47
|
+
>;
|
|
48
|
+
|
|
49
|
+
type QuestionnaireEditRejected = Event<
|
|
50
|
+
'QuestionnaireEditRejected',
|
|
51
|
+
{
|
|
52
|
+
questionnaireId: string;
|
|
53
|
+
participantId: string;
|
|
54
|
+
reason: string;
|
|
55
|
+
attemptedAt: Date;
|
|
56
|
+
}
|
|
57
|
+
>;
|
|
58
|
+
|
|
59
|
+
type AnswerQuestion = Command<
|
|
60
|
+
'AnswerQuestion',
|
|
61
|
+
{
|
|
62
|
+
questionnaireId: string;
|
|
63
|
+
participantId: string;
|
|
64
|
+
questionId: string;
|
|
65
|
+
answer: unknown;
|
|
66
|
+
}
|
|
67
|
+
>;
|
|
68
|
+
|
|
69
|
+
type SubmitQuestionnaire = Command<
|
|
70
|
+
'SubmitQuestionnaire',
|
|
71
|
+
{
|
|
72
|
+
questionnaireId: string;
|
|
73
|
+
participantId: string;
|
|
74
|
+
}
|
|
75
|
+
>;
|
|
76
|
+
|
|
77
|
+
type QuestionnaireConfig = State<
|
|
78
|
+
'QuestionnaireConfig',
|
|
79
|
+
{
|
|
80
|
+
questionnaireId: string;
|
|
81
|
+
numberOfQuestions: number;
|
|
82
|
+
}
|
|
83
|
+
>;
|
|
84
|
+
|
|
85
|
+
type QuestionnaireProgress = State<
|
|
86
|
+
'QuestionnaireProgress',
|
|
87
|
+
{
|
|
88
|
+
questionnaireId: string;
|
|
89
|
+
participantId: string;
|
|
90
|
+
status: 'in_progress' | 'ready_to_submit' | 'submitted';
|
|
91
|
+
currentQuestionId: string | null;
|
|
92
|
+
remainingQuestions: string[];
|
|
93
|
+
answers: { questionId: string; value: unknown }[];
|
|
94
|
+
}
|
|
95
|
+
>;
|
|
96
|
+
|
|
97
|
+
flow('Questionnaires', 'AUTO-Q9m2Kp4Lx', () => {
|
|
98
|
+
experience('Homepage', 'AUTO-H1a4Bn6Cy').client(() => {
|
|
99
|
+
specs(() => {
|
|
100
|
+
should('show a hero section with a welcome message');
|
|
101
|
+
should('allow user to start the questionnaire');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
query('views the questionnaire', 'AUTO-V7n8Rq5M')
|
|
106
|
+
.server(() => {
|
|
107
|
+
specs(() => {
|
|
108
|
+
rule('questionnaires show current progress', 'AUTO-r1A3Bp9W', () => {
|
|
109
|
+
example('a question has already been answered')
|
|
110
|
+
.given<QuestionnaireLinkSent>({
|
|
111
|
+
questionnaireId: 'q-001',
|
|
112
|
+
participantId: 'participant-abc',
|
|
113
|
+
link: 'https://app.example.com/q/q-001?participant=participant-abc',
|
|
114
|
+
sentAt: new Date('2030-01-01T09:00:00Z'),
|
|
115
|
+
})
|
|
116
|
+
.when<QuestionAnswered>({
|
|
117
|
+
questionnaireId: 'q-001',
|
|
118
|
+
participantId: 'participant-abc',
|
|
119
|
+
questionId: 'q1',
|
|
120
|
+
answer: 'Yes',
|
|
121
|
+
savedAt: new Date('2030-01-01T09:05:00Z'),
|
|
122
|
+
})
|
|
123
|
+
.then<QuestionnaireProgress>({
|
|
124
|
+
questionnaireId: 'q-001',
|
|
125
|
+
participantId: 'participant-abc',
|
|
126
|
+
status: 'in_progress',
|
|
127
|
+
currentQuestionId: 'q2',
|
|
128
|
+
remainingQuestions: ['q2', 'q3'],
|
|
129
|
+
answers: [{ questionId: 'q1', value: 'Yes' }],
|
|
130
|
+
});
|
|
131
|
+
example('no questions have been answered yet')
|
|
132
|
+
.given<QuestionnaireLinkSent>({
|
|
133
|
+
questionnaireId: 'q-001',
|
|
134
|
+
participantId: 'participant-abc',
|
|
135
|
+
link: 'https://app.example.com/q/q-001?participant=participant-abc',
|
|
136
|
+
sentAt: new Date('2030-01-01T09:00:00Z'),
|
|
137
|
+
})
|
|
138
|
+
.when({})
|
|
139
|
+
.then<QuestionnaireProgress>({
|
|
140
|
+
questionnaireId: 'q-001',
|
|
141
|
+
participantId: 'participant-abc',
|
|
142
|
+
status: 'in_progress',
|
|
143
|
+
currentQuestionId: 'q1',
|
|
144
|
+
remainingQuestions: ['q1', 'q2', 'q3'],
|
|
145
|
+
answers: [],
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
data([source().state('QuestionnaireProgress').fromProjection('Questionnaires', 'questionnaire-participantId')]);
|
|
150
|
+
})
|
|
151
|
+
.request(gql`
|
|
152
|
+
query QuestionnaireProgress($participantId: ID!) {
|
|
153
|
+
questionnaireProgress(participantId: $participantId) {
|
|
154
|
+
questionnaireId
|
|
155
|
+
participantId
|
|
156
|
+
currentQuestionId
|
|
157
|
+
remainingQuestions
|
|
158
|
+
status
|
|
159
|
+
answers {
|
|
160
|
+
questionId
|
|
161
|
+
value
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
`)
|
|
166
|
+
.client(() => {
|
|
167
|
+
specs('Questionnaire Progress', () => {
|
|
168
|
+
should('focus on the current question based on the progress state');
|
|
169
|
+
should('display the list of answered questions');
|
|
170
|
+
should('display the list of remaining questions');
|
|
171
|
+
should('show a progress indicator that is always visible as the user scrolls');
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
command('submits a questionnaire answer', 'AUTO-S4j6Nt8Z')
|
|
176
|
+
.server(() => {
|
|
177
|
+
specs(() => {
|
|
178
|
+
rule('answers are allowed while the questionnaire has not been submitted', 'AUTO-r2D5Eq0Y', () => {
|
|
179
|
+
example('no questions have been answered yet')
|
|
180
|
+
.when<AnswerQuestion>({
|
|
181
|
+
questionnaireId: 'q-001',
|
|
182
|
+
participantId: 'participant-abc',
|
|
183
|
+
questionId: 'q1',
|
|
184
|
+
answer: 'Yes',
|
|
185
|
+
})
|
|
186
|
+
.then<QuestionAnswered>({
|
|
187
|
+
questionnaireId: 'q-001',
|
|
188
|
+
participantId: 'participant-abc',
|
|
189
|
+
questionId: 'q1',
|
|
190
|
+
answer: 'Yes',
|
|
191
|
+
savedAt: new Date('2030-01-01T09:05:00Z'),
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
example('all questions have already been answered and submitted')
|
|
195
|
+
.given<QuestionnaireSubmitted>({
|
|
196
|
+
questionnaireId: 'q-001',
|
|
197
|
+
participantId: 'participant-abc',
|
|
198
|
+
submittedAt: new Date('2030-01-01T09:00:00Z'),
|
|
199
|
+
})
|
|
200
|
+
.when<AnswerQuestion>({
|
|
201
|
+
questionnaireId: 'q-001',
|
|
202
|
+
participantId: 'participant-abc',
|
|
203
|
+
questionId: 'q1',
|
|
204
|
+
answer: 'Yes',
|
|
205
|
+
})
|
|
206
|
+
.then<QuestionnaireEditRejected>({
|
|
207
|
+
questionnaireId: 'q-001',
|
|
208
|
+
participantId: 'participant-abc',
|
|
209
|
+
reason: 'Questionnaire already submitted',
|
|
210
|
+
attemptedAt: new Date('2030-01-01T09:05:00Z'),
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
data([
|
|
215
|
+
sink().event('QuestionAnswered').toStream('questionnaire-participantId'),
|
|
216
|
+
sink().event('QuestionnaireEditRejected').toStream('questionnaire-participantId'),
|
|
217
|
+
]);
|
|
218
|
+
})
|
|
219
|
+
.request(gql`
|
|
220
|
+
mutation AnswerQuestion($input: AnswerQuestionInput!) {
|
|
221
|
+
answerQuestion(input: $input) {
|
|
222
|
+
success
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
`)
|
|
226
|
+
.client(() => {
|
|
227
|
+
specs('Submissions', () => {
|
|
228
|
+
should('displays a success message when the answer is submitted');
|
|
229
|
+
should('display an error message when the answer submission is rejected');
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
query('questionnaire ready for submission', 'AUTO-R3f7Hu1X')
|
|
234
|
+
.server(() => {
|
|
235
|
+
specs(() => {
|
|
236
|
+
rule('questionnaire is ready for submission when all questions are answered', 'AUTO-r3G8Iv2W', () => {
|
|
237
|
+
example('all questions have been answered')
|
|
238
|
+
.given<QuestionnaireConfig>({
|
|
239
|
+
questionnaireId: 'q-001',
|
|
240
|
+
numberOfQuestions: 2,
|
|
241
|
+
})
|
|
242
|
+
.and<QuestionnaireLinkSent>({
|
|
243
|
+
questionnaireId: 'q-001',
|
|
244
|
+
participantId: 'participant-abc',
|
|
245
|
+
link: 'https://app.example.com/q/q-001?participant=participant-abc',
|
|
246
|
+
sentAt: new Date('2030-01-01T09:00:00Z'),
|
|
247
|
+
})
|
|
248
|
+
.and<QuestionAnswered>({
|
|
249
|
+
questionnaireId: 'q-001',
|
|
250
|
+
participantId: 'participant-abc',
|
|
251
|
+
questionId: 'q1',
|
|
252
|
+
answer: 'Yes',
|
|
253
|
+
savedAt: new Date('2030-01-01T09:05:00Z'),
|
|
254
|
+
})
|
|
255
|
+
.and<QuestionAnswered>({
|
|
256
|
+
questionnaireId: 'q-001',
|
|
257
|
+
participantId: 'participant-abc',
|
|
258
|
+
questionId: 'q2',
|
|
259
|
+
answer: 'No',
|
|
260
|
+
savedAt: new Date('2030-01-01T09:05:00Z'),
|
|
261
|
+
})
|
|
262
|
+
.when({}) // FIX ME
|
|
263
|
+
.then<QuestionnaireProgress>({
|
|
264
|
+
questionnaireId: 'q-001',
|
|
265
|
+
participantId: 'participant-abc',
|
|
266
|
+
status: 'ready_to_submit',
|
|
267
|
+
currentQuestionId: null,
|
|
268
|
+
remainingQuestions: [],
|
|
269
|
+
answers: [
|
|
270
|
+
{ questionId: 'q1', value: 'Yes' },
|
|
271
|
+
{ questionId: 'q2', value: 'No' },
|
|
272
|
+
],
|
|
273
|
+
});
|
|
274
|
+
example('some questions are still unanswered')
|
|
275
|
+
.given<QuestionnaireLinkSent>({
|
|
276
|
+
questionnaireId: 'q-001',
|
|
277
|
+
participantId: 'participant-abc',
|
|
278
|
+
link: 'https://app.example.com/q/q-001?participant=participant-abc',
|
|
279
|
+
sentAt: new Date('2030-01-01T09:00:00Z'),
|
|
280
|
+
})
|
|
281
|
+
.when<QuestionAnswered>({
|
|
282
|
+
questionnaireId: 'q-001',
|
|
283
|
+
participantId: 'participant-abc',
|
|
284
|
+
questionId: 'q1',
|
|
285
|
+
answer: 'Yes',
|
|
286
|
+
savedAt: new Date('2030-01-01T09:05:00Z'),
|
|
287
|
+
})
|
|
288
|
+
.then<QuestionnaireProgress>({
|
|
289
|
+
questionnaireId: 'q-001',
|
|
290
|
+
participantId: 'participant-abc',
|
|
291
|
+
status: 'in_progress',
|
|
292
|
+
currentQuestionId: 'q2',
|
|
293
|
+
remainingQuestions: ['q2', 'q3'],
|
|
294
|
+
answers: [{ questionId: 'q1', value: 'Yes' }],
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
data([
|
|
299
|
+
source().state('QuestionnaireProgress').fromProjection('Questionnaires', 'questionnaire-participantId'),
|
|
300
|
+
source().state('QuestionnaireConfig').fromDatabase('QuestionnaireConfigAPI'),
|
|
301
|
+
]);
|
|
302
|
+
})
|
|
303
|
+
.request(gql`
|
|
304
|
+
query QuestionnaireProgress($participantId: ID!) {
|
|
305
|
+
questionnaireProgress(participantId: $participantId) {
|
|
306
|
+
questionnaireId
|
|
307
|
+
participantId
|
|
308
|
+
status
|
|
309
|
+
currentQuestionId
|
|
310
|
+
remainingQuestions
|
|
311
|
+
answers {
|
|
312
|
+
questionId
|
|
313
|
+
value
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
`)
|
|
318
|
+
.client(() => {
|
|
319
|
+
specs('Submission Readiness', () => {
|
|
320
|
+
should('enable the submit button when all questions are answered');
|
|
321
|
+
should('disable the submit button when all questions have not been answered');
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
command('submits the questionnaire', 'AUTO-T5k9Jw3V')
|
|
326
|
+
.server(() => {
|
|
327
|
+
specs(() => {
|
|
328
|
+
rule('questionnaire allowed to be submitted when all questions are answered', 'AUTO-r4H0Lx4U', () => {
|
|
329
|
+
example('submits the questionnaire successfully')
|
|
330
|
+
.when<SubmitQuestionnaire>({
|
|
331
|
+
questionnaireId: 'q-001',
|
|
332
|
+
participantId: 'participant-abc',
|
|
333
|
+
})
|
|
334
|
+
.then<QuestionnaireSubmitted>({
|
|
335
|
+
questionnaireId: 'q-001',
|
|
336
|
+
participantId: 'participant-abc',
|
|
337
|
+
submittedAt: new Date('2030-01-01T09:00:00Z'),
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
data([sink().event('QuestionnaireSubmitted').toStream('questionnaire-participantId')]);
|
|
342
|
+
})
|
|
343
|
+
.request(gql`
|
|
344
|
+
mutation SubmitQuestionnaire($input: SubmitQuestionnaireInput!) {
|
|
345
|
+
submitQuestionnaire(input: $input) {
|
|
346
|
+
success
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
`)
|
|
350
|
+
.client(() => {
|
|
351
|
+
specs('Submission Confirmation', () => {
|
|
352
|
+
should('display a confirmation message upon successful submission');
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
// notifications are updated
|
|
358
|
+
// they are taken back home
|
|
359
|
+
// homepage status shows "Pre-Registration Complete"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "questionnaires",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"auto": "node ../../packages/cli/dist/bin/auto.js",
|
|
7
|
+
"auto:debug": "DEBUG=flow:*,cli:*,auto*,ai*,-*file-syncer,-*flow* node ../../packages/cli/dist/bin/auto.js",
|
|
8
|
+
"start": "dotenv -e .env -- pnpm --parallel start"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@auto-engineer/cli": "workspace:*",
|
|
12
|
+
"@auto-engineer/design-system-importer": "workspace:*",
|
|
13
|
+
"@auto-engineer/flow": "workspace:*",
|
|
14
|
+
"@auto-engineer/frontend-checks": "workspace:*",
|
|
15
|
+
"@auto-engineer/frontend-generator-react-graphql": "workspace:*",
|
|
16
|
+
"@auto-engineer/frontend-implementer": "workspace:*",
|
|
17
|
+
"@auto-engineer/information-architect": "workspace:*",
|
|
18
|
+
"@auto-engineer/message-bus": "workspace:*",
|
|
19
|
+
"@auto-engineer/server-checks": "workspace:*",
|
|
20
|
+
"@auto-engineer/server-generator-apollo-emmett": "workspace:*",
|
|
21
|
+
"@auto-engineer/server-implementer": "workspace:*"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^24.3.1",
|
|
25
|
+
"chokidar": "^3.6.0",
|
|
26
|
+
"dotenv": "^16.4.5",
|
|
27
|
+
"dotenv-cli": "^9.0.0",
|
|
28
|
+
"tsx": "^3.12.7"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"emitDecoratorMetadata": true,
|
|
8
|
+
"experimentalDecorators": true,
|
|
9
|
+
"outDir": "./dist",
|
|
10
|
+
"noEmit": false,
|
|
11
|
+
"strictNullChecks": true
|
|
12
|
+
},
|
|
13
|
+
"include": ["**/*", "vitest.config.ts"],
|
|
14
|
+
"exclude": ["dist", "node_modules"]
|
|
15
|
+
}
|
package/templates/.gitkeep
DELETED
|
File without changes
|