create-esmx 3.0.0-rc.44 → 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.
- package/dist/cli.integration.test.mjs +11 -7
- package/dist/cli.mjs +11 -13
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +1 -0
- package/dist/project.mjs +2 -2
- package/dist/project.test.mjs +21 -43
- package/dist/types.d.ts +1 -0
- package/dist/utils/project-name.d.ts +32 -14
- package/dist/utils/project-name.mjs +36 -11
- package/dist/utils/project-name.test.d.ts +0 -3
- package/dist/utils/project-name.test.mjs +251 -105
- package/package.json +6 -4
- package/src/cli.integration.test.ts +11 -7
- package/src/cli.ts +16 -14
- package/src/index.ts +2 -0
- package/src/project.test.ts +21 -46
- package/src/project.ts +6 -3
- package/src/types.ts +1 -0
- package/src/utils/project-name.test.ts +299 -203
- package/src/utils/project-name.ts +73 -27
- package/template/vue2-csr/package.json +26 -0
- package/template/vue2-csr/src/entry.node.ts +32 -0
- package/template/vue2-csr/src/entry.server.ts +26 -0
- package/template/vue2-ssr/README.md +80 -0
- package/template/vue2-ssr/src/app.vue +127 -0
- package/template/vue2-ssr/src/components/hello-world.vue +77 -0
- package/template/vue2-ssr/src/create-app.ts +11 -0
- package/template/vue2-ssr/src/entry.client.ts +5 -0
- package/template/{vue2 → vue2-ssr}/src/entry.node.ts +1 -1
- package/template/vue2-ssr/tsconfig.json +26 -0
- /package/template/{vue2 → vue2-csr}/README.md +0 -0
- /package/template/{vue2 → vue2-csr}/src/app.vue +0 -0
- /package/template/{vue2 → vue2-csr}/src/components/hello-world.vue +0 -0
- /package/template/{vue2 → vue2-csr}/src/create-app.ts +0 -0
- /package/template/{vue2 → vue2-csr}/src/entry.client.ts +0 -0
- /package/template/{vue2 → vue2-csr}/tsconfig.json +0 -0
- /package/template/{vue2 → vue2-ssr}/package.json +0 -0
- /package/template/{vue2 → vue2-ssr}/src/entry.server.ts +0 -0
package/src/project.test.ts
CHANGED
|
@@ -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(
|
|
16
|
-
|
|
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 {
|
|
44
|
-
projectNameInput,
|
|
45
|
-
tmpDir
|
|
46
|
-
);
|
|
36
|
+
const { name, root } = formatProjectName(projectNameInput, tmpDir);
|
|
47
37
|
|
|
48
38
|
// Create project from template
|
|
49
|
-
await createProjectFromTemplate(
|
|
50
|
-
projectName:
|
|
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 {
|
|
77
|
-
projectNameInput,
|
|
78
|
-
tmpDir
|
|
79
|
-
);
|
|
66
|
+
const { name, root } = formatProjectName(projectNameInput, tmpDir);
|
|
80
67
|
|
|
81
68
|
// Create project from template
|
|
82
|
-
await createProjectFromTemplate(
|
|
83
|
-
projectName:
|
|
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 {
|
|
103
|
-
projectNameInput,
|
|
104
|
-
tmpDir
|
|
105
|
-
);
|
|
89
|
+
const { name, root } = formatProjectName(projectNameInput, tmpDir);
|
|
106
90
|
|
|
107
91
|
// Create project from template
|
|
108
|
-
await createProjectFromTemplate(
|
|
109
|
-
projectName:
|
|
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 {
|
|
139
|
-
projectNameInput,
|
|
140
|
-
tmpDir
|
|
141
|
-
);
|
|
122
|
+
const { name, root } = formatProjectName(projectNameInput, tmpDir);
|
|
142
123
|
|
|
143
124
|
// Create project from template
|
|
144
|
-
await createProjectFromTemplate(
|
|
145
|
-
projectName:
|
|
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 {
|
|
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
|
-
|
|
175
|
-
'vue2',
|
|
152
|
+
root,
|
|
153
|
+
'vue2-csr',
|
|
176
154
|
tmpDir,
|
|
177
155
|
true, // force flag
|
|
178
156
|
{
|
|
179
|
-
projectName:
|
|
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 {
|
|
205
|
-
projectName,
|
|
206
|
-
tmpDir
|
|
207
|
-
);
|
|
182
|
+
const { name, root } = formatProjectName(projectName, tmpDir);
|
|
208
183
|
|
|
209
184
|
// Create project from template
|
|
210
|
-
await createProjectFromTemplate(
|
|
211
|
-
projectName:
|
|
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
|
-
|
|
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`);
|