create-auto-app 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.specs.js","sourceRoot":"","sources":["../src/index.specs.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}