create-esmx 3.0.0-rc.45 → 3.0.0-rc.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/cli.integration.test.mjs +11 -7
  2. package/dist/cli.mjs +11 -13
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.mjs +1 -0
  5. package/dist/project.mjs +2 -2
  6. package/dist/project.test.mjs +21 -43
  7. package/dist/types.d.ts +1 -0
  8. package/dist/utils/project-name.d.ts +32 -14
  9. package/dist/utils/project-name.mjs +36 -11
  10. package/dist/utils/project-name.test.d.ts +0 -3
  11. package/dist/utils/project-name.test.mjs +251 -105
  12. package/package.json +6 -4
  13. package/src/cli.integration.test.ts +11 -7
  14. package/src/cli.ts +16 -14
  15. package/src/index.ts +2 -0
  16. package/src/project.test.ts +21 -46
  17. package/src/project.ts +6 -3
  18. package/src/types.ts +1 -0
  19. package/src/utils/project-name.test.ts +299 -203
  20. package/src/utils/project-name.ts +73 -27
  21. package/template/vue2-csr/package.json +26 -0
  22. package/template/vue2-csr/src/entry.node.ts +32 -0
  23. package/template/vue2-csr/src/entry.server.ts +26 -0
  24. package/template/vue2-ssr/README.md +80 -0
  25. package/template/vue2-ssr/src/app.vue +127 -0
  26. package/template/vue2-ssr/src/components/hello-world.vue +77 -0
  27. package/template/vue2-ssr/src/create-app.ts +11 -0
  28. package/template/vue2-ssr/src/entry.client.ts +5 -0
  29. package/template/{vue2 → vue2-ssr}/src/entry.node.ts +1 -1
  30. package/template/vue2-ssr/tsconfig.json +26 -0
  31. /package/template/{vue2 → vue2-csr}/README.md +0 -0
  32. /package/template/{vue2 → vue2-csr}/src/app.vue +0 -0
  33. /package/template/{vue2 → vue2-csr}/src/components/hello-world.vue +0 -0
  34. /package/template/{vue2 → vue2-csr}/src/create-app.ts +0 -0
  35. /package/template/{vue2 → vue2-csr}/src/entry.client.ts +0 -0
  36. /package/template/{vue2 → vue2-csr}/tsconfig.json +0 -0
  37. /package/template/{vue2 → vue2-ssr}/package.json +0 -0
  38. /package/template/{vue2 → vue2-ssr}/src/entry.server.ts +0 -0
@@ -7,17 +7,12 @@ import { createProjectFromTemplate } from './project';
7
7
  import { getEsmxVersion } from './template';
8
8
  import { formatProjectName } from './utils/index';
9
9
 
10
- // Test utilities
11
10
  async function createTempDir(prefix = 'esmx-unit-test-'): Promise<string> {
12
11
  return mkdtemp(join(tmpdir(), prefix));
13
12
  }
14
13
 
15
- async function cleanupTempDir(tempDir: string): Promise<void> {
16
- try {
17
- await rm(tempDir, { recursive: true, force: true });
18
- } catch (error) {
19
- console.warn(`Failed to cleanup temp directory: ${tempDir}`, error);
20
- }
14
+ async function cleanupTempDir(tmpDir: string): Promise<void> {
15
+ await rm(tmpDir, { recursive: true, force: true });
21
16
  }
22
17
 
23
18
  describe('project unit tests', () => {
@@ -32,22 +27,17 @@ describe('project unit tests', () => {
32
27
  });
33
28
 
34
29
  it('should handle isDirectoryEmpty edge cases', async () => {
35
- // Test with directory containing only hidden files
36
30
  const hiddenFilesDir = join(tmpDir, 'hidden-files-dir');
37
31
  await mkdir(hiddenFilesDir, { recursive: true });
38
32
  await writeFile(join(hiddenFilesDir, '.hidden-file'), 'hidden content');
39
33
  await writeFile(join(hiddenFilesDir, '.gitignore'), 'node_modules/');
40
34
 
41
- // Get project name and target directory
42
35
  const projectNameInput = 'hidden-files-dir';
43
- const { packageName, targetDir } = formatProjectName(
44
- projectNameInput,
45
- tmpDir
46
- );
36
+ const { name, root } = formatProjectName(projectNameInput, tmpDir);
47
37
 
48
38
  // Create project from template
49
- await createProjectFromTemplate(targetDir, 'vue2', tmpDir, false, {
50
- projectName: packageName,
39
+ await createProjectFromTemplate(root, 'vue2-csr', tmpDir, false, {
40
+ projectName: name,
51
41
  esmxVersion: getEsmxVersion(),
52
42
  installCommand: 'npm install',
53
43
  devCommand: 'npm run dev',
@@ -73,14 +63,11 @@ describe('project unit tests', () => {
73
63
 
74
64
  // Get project name and target directory
75
65
  const projectNameInput = 'very/deep/nested/path/project';
76
- const { packageName, targetDir } = formatProjectName(
77
- projectNameInput,
78
- tmpDir
79
- );
66
+ const { name, root } = formatProjectName(projectNameInput, tmpDir);
80
67
 
81
68
  // Create project from template
82
- await createProjectFromTemplate(targetDir, 'vue2', tmpDir, false, {
83
- projectName: packageName,
69
+ await createProjectFromTemplate(root, 'vue2-csr', tmpDir, false, {
70
+ projectName: name,
84
71
  esmxVersion: getEsmxVersion(),
85
72
  installCommand: 'npm install',
86
73
  devCommand: 'npm run dev',
@@ -99,14 +86,11 @@ describe('project unit tests', () => {
99
86
 
100
87
  // Get project name and target directory
101
88
  const projectNameInput = 'variable-test';
102
- const { packageName, targetDir } = formatProjectName(
103
- projectNameInput,
104
- tmpDir
105
- );
89
+ const { name, root } = formatProjectName(projectNameInput, tmpDir);
106
90
 
107
91
  // Create project from template
108
- await createProjectFromTemplate(targetDir, 'vue2', tmpDir, false, {
109
- projectName: packageName,
92
+ await createProjectFromTemplate(root, 'vue2-csr', tmpDir, false, {
93
+ projectName: name,
110
94
  esmxVersion: getEsmxVersion(),
111
95
  installCommand: 'npm install',
112
96
  devCommand: 'npm run dev',
@@ -135,14 +119,11 @@ describe('project unit tests', () => {
135
119
 
136
120
  // Get project name and target directory
137
121
  const projectNameInput = 'empty-dir';
138
- const { packageName, targetDir } = formatProjectName(
139
- projectNameInput,
140
- tmpDir
141
- );
122
+ const { name, root } = formatProjectName(projectNameInput, tmpDir);
142
123
 
143
124
  // Create project from template
144
- await createProjectFromTemplate(targetDir, 'vue2', tmpDir, false, {
145
- projectName: packageName,
125
+ await createProjectFromTemplate(root, 'vue2-csr', tmpDir, false, {
126
+ projectName: name,
146
127
  esmxVersion: getEsmxVersion(),
147
128
  installCommand: 'npm install',
148
129
  devCommand: 'npm run dev',
@@ -164,19 +145,16 @@ describe('project unit tests', () => {
164
145
 
165
146
  // Get project name and target directory
166
147
  const projectNameInput = 'mixed-dir';
167
- const { packageName, targetDir } = formatProjectName(
168
- projectNameInput,
169
- tmpDir
170
- );
148
+ const { name, root } = formatProjectName(projectNameInput, tmpDir);
171
149
 
172
150
  // Create project from template with force flag
173
151
  await createProjectFromTemplate(
174
- targetDir,
175
- 'vue2',
152
+ root,
153
+ 'vue2-csr',
176
154
  tmpDir,
177
155
  true, // force flag
178
156
  {
179
- projectName: packageName,
157
+ projectName: name,
180
158
  esmxVersion: getEsmxVersion(),
181
159
  installCommand: 'npm install',
182
160
  devCommand: 'npm run dev',
@@ -201,14 +179,11 @@ describe('project unit tests', () => {
201
179
  const projectPath = join(tmpDir, projectName);
202
180
 
203
181
  // Get project name and target directory
204
- const { packageName, targetDir } = formatProjectName(
205
- projectName,
206
- tmpDir
207
- );
182
+ const { name, root } = formatProjectName(projectName, tmpDir);
208
183
 
209
184
  // Create project from template
210
- await createProjectFromTemplate(targetDir, 'vue2', tmpDir, false, {
211
- projectName: packageName,
185
+ await createProjectFromTemplate(root, 'vue2-csr', tmpDir, false, {
186
+ projectName: name,
212
187
  esmxVersion: getEsmxVersion(),
213
188
  installCommand: 'npm install',
214
189
  devCommand: 'npm run dev',
package/src/project.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { existsSync, mkdirSync } from 'node:fs';
2
- import { dirname, resolve } from 'node:path';
2
+ import { dirname, isAbsolute, resolve } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { cancel, confirm, isCancel } from '@clack/prompts';
5
5
  import { copyTemplateFiles, isDirectoryEmpty } from './template';
@@ -18,8 +18,11 @@ export async function createProjectFromTemplate(
18
18
  variables: TemplateVariables
19
19
  ): Promise<void> {
20
20
  const templatePath = resolve(__dirname, '../template', templateType);
21
- const targetPath =
22
- targetDir === '.' ? workingDir : resolve(workingDir, targetDir);
21
+ const targetPath = isAbsolute(targetDir)
22
+ ? targetDir
23
+ : targetDir === '.'
24
+ ? workingDir
25
+ : resolve(workingDir, targetDir);
23
26
 
24
27
  if (!existsSync(templatePath)) {
25
28
  throw new Error(`Template "${templateType}" not found`);
package/src/types.ts CHANGED
@@ -5,6 +5,7 @@ export interface CliOptions {
5
5
  argv?: string[]; // Command line arguments
6
6
  cwd?: string; // Working directory
7
7
  userAgent?: string; // Package manager user agent
8
+ version?: string; // Esmx version override
8
9
  }
9
10
 
10
11
  /**