@dotcms/create-app 1.2.4 → 1.2.5-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/api/index.js +35 -40
- package/src/api/index.js.map +1 -1
- package/src/asks.js +31 -42
- package/src/asks.js.map +1 -1
- package/src/constants/index.js +18 -21
- package/src/constants/index.js.map +1 -1
- package/src/errors/index.js +6 -15
- package/src/errors/index.js.map +1 -1
- package/src/git/index.js +25 -33
- package/src/git/index.js.map +1 -1
- package/src/index.js +95 -99
- package/src/index.js.map +1 -1
- package/src/types/index.js +1 -2
- package/src/utils/index.js +158 -175
- package/src/utils/index.js.map +1 -1
- package/src/utils/validation.js +81 -90
- package/src/utils/validation.js.map +1 -1
package/src/utils/validation.js
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.normalizeUrl = normalizeUrl;
|
|
5
|
-
exports.validateUrl = validateUrl;
|
|
6
|
-
exports.validateProjectName = validateProjectName;
|
|
7
|
-
exports.escapeShellPath = escapeShellPath;
|
|
8
|
-
exports.validateConflictingParameters = validateConflictingParameters;
|
|
9
|
-
const tslib_1 = require("tslib");
|
|
10
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
11
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
12
|
-
const constants_1 = require("../constants");
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { FRAMEWORKS } from '../constants';
|
|
13
4
|
/**
|
|
14
5
|
* Maximum allowed length for project names (typical filesystem limit)
|
|
15
6
|
*/
|
|
@@ -31,7 +22,7 @@ const FRAMEWORK_ALIASES = {
|
|
|
31
22
|
* @returns Normalized framework name or undefined if not provided
|
|
32
23
|
* @throws Error if framework is invalid
|
|
33
24
|
*/
|
|
34
|
-
function validateAndNormalizeFramework(framework) {
|
|
25
|
+
export function validateAndNormalizeFramework(framework) {
|
|
35
26
|
if (!framework)
|
|
36
27
|
return undefined; // Will be prompted interactively
|
|
37
28
|
// Normalize: lowercase, remove spaces
|
|
@@ -41,24 +32,24 @@ function validateAndNormalizeFramework(framework) {
|
|
|
41
32
|
return FRAMEWORK_ALIASES[normalized];
|
|
42
33
|
}
|
|
43
34
|
// Check exact match against supported frameworks
|
|
44
|
-
if (
|
|
35
|
+
if (FRAMEWORKS.includes(normalized)) {
|
|
45
36
|
return normalized;
|
|
46
37
|
}
|
|
47
38
|
// Invalid framework - throw helpful error
|
|
48
|
-
throw new Error(
|
|
39
|
+
throw new Error(chalk.red(`❌ Invalid framework: "${framework}"`) +
|
|
49
40
|
'\n\n' +
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
chalk.white('Supported frameworks:\n') +
|
|
42
|
+
FRAMEWORKS.map((f) => chalk.cyan(` • ${f}`)).join('\n') +
|
|
52
43
|
'\n\n' +
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
chalk.gray('💡 Tip: Framework names are case-insensitive\n') +
|
|
45
|
+
chalk.gray(' Aliases: next → nextjs, ng → angular'));
|
|
55
46
|
}
|
|
56
47
|
/**
|
|
57
48
|
* Normalizes a URL by removing trailing slashes
|
|
58
49
|
* @param url - The URL to normalize
|
|
59
50
|
* @returns URL without trailing slash
|
|
60
51
|
*/
|
|
61
|
-
function normalizeUrl(url) {
|
|
52
|
+
export function normalizeUrl(url) {
|
|
62
53
|
return url.replace(/\/+$/, ''); // Remove one or more trailing slashes
|
|
63
54
|
}
|
|
64
55
|
/**
|
|
@@ -68,20 +59,20 @@ function normalizeUrl(url) {
|
|
|
68
59
|
* @param url - The URL from CLI flag
|
|
69
60
|
* @throws Error if URL format is invalid
|
|
70
61
|
*/
|
|
71
|
-
function validateUrl(url) {
|
|
62
|
+
export function validateUrl(url) {
|
|
72
63
|
if (!url || url.trim() === '')
|
|
73
64
|
return; // Will be prompted interactively
|
|
74
65
|
// Normalize URL (remove trailing slashes)
|
|
75
66
|
const normalizedUrl = normalizeUrl(url);
|
|
76
67
|
// Basic format check before URL parsing
|
|
77
68
|
if (!normalizedUrl.includes('://')) {
|
|
78
|
-
throw new Error(
|
|
69
|
+
throw new Error(chalk.red(`❌ Invalid URL format: "${normalizedUrl}"`) +
|
|
79
70
|
'\n\n' +
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
71
|
+
chalk.white('URLs must include the protocol (http:// or https://)\n\n') +
|
|
72
|
+
chalk.cyan('Example:\n https://demo.dotcms.com\n\n') +
|
|
73
|
+
chalk.gray('Need help?\n') +
|
|
74
|
+
chalk.gray(' • Use --local flag to run dotCMS in Docker\n') +
|
|
75
|
+
chalk.gray(' • Check our docs: https://dev.dotcms.com'));
|
|
85
76
|
}
|
|
86
77
|
// Parse URL - catch only parsing errors (TypeError from invalid URL format)
|
|
87
78
|
let parsed;
|
|
@@ -91,28 +82,28 @@ function validateUrl(url) {
|
|
|
91
82
|
catch (error) {
|
|
92
83
|
// Only catch TypeError from URL constructor (invalid URL format)
|
|
93
84
|
if (error instanceof TypeError) {
|
|
94
|
-
throw new Error(
|
|
85
|
+
throw new Error(chalk.red(`❌ Invalid URL format: "${normalizedUrl}"`) +
|
|
95
86
|
'\n\n' +
|
|
96
|
-
|
|
97
|
-
|
|
87
|
+
chalk.white('Please provide a valid HTTP/HTTPS URL\n\n') +
|
|
88
|
+
chalk.cyan('Example:\n https://demo.dotcms.com'));
|
|
98
89
|
}
|
|
99
90
|
// Re-throw any other unexpected errors
|
|
100
91
|
throw error;
|
|
101
92
|
}
|
|
102
93
|
// Protocol validation (throws custom error that propagates directly)
|
|
103
94
|
if (!['http:', 'https:'].includes(parsed.protocol)) {
|
|
104
|
-
throw new Error(
|
|
95
|
+
throw new Error(chalk.red(`❌ Unsupported protocol: ${parsed.protocol}`) +
|
|
105
96
|
'\n\n' +
|
|
106
|
-
|
|
97
|
+
chalk.white('Only HTTP and HTTPS are supported'));
|
|
107
98
|
}
|
|
108
99
|
// Hostname validation (throws custom error that propagates directly)
|
|
109
100
|
if (!parsed.hostname) {
|
|
110
|
-
throw new Error(
|
|
101
|
+
throw new Error(chalk.red('❌ URL missing hostname'));
|
|
111
102
|
}
|
|
112
103
|
// Warn about localhost without Docker flag
|
|
113
104
|
if (parsed.hostname === 'localhost' && parsed.port !== '8082') {
|
|
114
|
-
console.log(
|
|
115
|
-
|
|
105
|
+
console.log(chalk.yellow('⚠️ Warning: ') +
|
|
106
|
+
chalk.white('Using localhost but port is not 8082 (default dotCMS port)'));
|
|
116
107
|
}
|
|
117
108
|
}
|
|
118
109
|
/**
|
|
@@ -122,73 +113,73 @@ function validateUrl(url) {
|
|
|
122
113
|
* @returns Validated project name (preserves original casing)
|
|
123
114
|
* @throws Error if project name is invalid
|
|
124
115
|
*/
|
|
125
|
-
function validateProjectName(projectName) {
|
|
116
|
+
export function validateProjectName(projectName) {
|
|
126
117
|
if (projectName === undefined || projectName === null) {
|
|
127
118
|
return undefined; // Will be prompted interactively
|
|
128
119
|
}
|
|
129
120
|
const trimmed = projectName.trim();
|
|
130
121
|
// Empty or whitespace-only
|
|
131
122
|
if (trimmed.length === 0) {
|
|
132
|
-
throw new Error(
|
|
123
|
+
throw new Error(chalk.red('❌ Invalid project name: cannot be empty') +
|
|
133
124
|
'\n\n' +
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
125
|
+
chalk.white('Project name must contain at least one character\n\n') +
|
|
126
|
+
chalk.cyan('Valid examples:\n') +
|
|
127
|
+
chalk.gray(' • my-dotcms-app\n') +
|
|
128
|
+
chalk.gray(' • my_project\n') +
|
|
129
|
+
chalk.gray(' • MyProject123'));
|
|
139
130
|
}
|
|
140
131
|
// Path traversal check
|
|
141
132
|
if (trimmed === '.' ||
|
|
142
133
|
trimmed === '..' ||
|
|
143
134
|
trimmed.includes('../') ||
|
|
144
135
|
trimmed.includes('..\\')) {
|
|
145
|
-
throw new Error(
|
|
136
|
+
throw new Error(chalk.red(`❌ Invalid project name: "${projectName}"`) +
|
|
146
137
|
'\n\n' +
|
|
147
|
-
|
|
148
|
-
|
|
138
|
+
chalk.white('Project name cannot contain path traversal patterns (..)\n\n') +
|
|
139
|
+
chalk.gray('Use the --directory flag to specify the parent directory'));
|
|
149
140
|
}
|
|
150
141
|
// Absolute path check
|
|
151
|
-
if (
|
|
152
|
-
throw new Error(
|
|
142
|
+
if (path.isAbsolute(trimmed)) {
|
|
143
|
+
throw new Error(chalk.red(`❌ Invalid project name: "${projectName}"`) +
|
|
153
144
|
'\n\n' +
|
|
154
|
-
|
|
155
|
-
|
|
145
|
+
chalk.white('Project name cannot be an absolute path\n\n') +
|
|
146
|
+
chalk.gray('Use the --directory flag to specify the location'));
|
|
156
147
|
}
|
|
157
148
|
// Check for leading hyphen or dot (problematic patterns)
|
|
158
149
|
if (trimmed.startsWith('-')) {
|
|
159
|
-
throw new Error(
|
|
150
|
+
throw new Error(chalk.red(`❌ Invalid project name: "${projectName}"`) +
|
|
160
151
|
'\n\n' +
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
152
|
+
chalk.white('Project name cannot start with a hyphen (-)\n\n') +
|
|
153
|
+
chalk.gray('This can be confused with command-line flags\n\n') +
|
|
154
|
+
chalk.cyan('Try:\n') +
|
|
155
|
+
chalk.gray(` • ${trimmed.slice(1)} (remove leading hyphen)\n`) +
|
|
156
|
+
chalk.gray(` • my${trimmed} (add prefix)`));
|
|
166
157
|
}
|
|
167
158
|
if (trimmed.startsWith('.')) {
|
|
168
|
-
console.warn(
|
|
169
|
-
|
|
159
|
+
console.warn(chalk.yellow('\n⚠️ Warning: Project name starts with a dot\n') +
|
|
160
|
+
chalk.gray('This will create a hidden directory on Unix systems\n'));
|
|
170
161
|
}
|
|
171
162
|
// Only allow alphanumeric characters, hyphens, underscores, and dots
|
|
172
163
|
// This prevents issues with npm, Docker, and other tools
|
|
173
164
|
const validPattern = /^[a-zA-Z0-9._-]+$/;
|
|
174
165
|
if (!validPattern.test(trimmed)) {
|
|
175
|
-
throw new Error(
|
|
166
|
+
throw new Error(chalk.red(`❌ Invalid project name: "${projectName}"`) +
|
|
176
167
|
'\n\n' +
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
168
|
+
chalk.white('Project names can only contain:\n') +
|
|
169
|
+
chalk.white(' • Letters (a-z, A-Z)\n') +
|
|
170
|
+
chalk.white(' • Numbers (0-9)\n') +
|
|
171
|
+
chalk.white(' • Hyphens (-)\n') +
|
|
172
|
+
chalk.white(' • Underscores (_)\n') +
|
|
173
|
+
chalk.white(' • Dots (.)\n\n') +
|
|
174
|
+
chalk.cyan('Valid examples:\n') +
|
|
175
|
+
chalk.gray(' • my-dotcms-app\n') +
|
|
176
|
+
chalk.gray(' • my_project\n') +
|
|
177
|
+
chalk.gray(' • MyProject.v2\n') +
|
|
178
|
+
chalk.gray(' • project-123\n\n') +
|
|
179
|
+
chalk.yellow('Invalid examples:\n') +
|
|
180
|
+
chalk.gray(' • test@#$%project (special characters)\n') +
|
|
181
|
+
chalk.gray(' • my project (spaces)\n') +
|
|
182
|
+
chalk.gray(' • project! (exclamation marks)'));
|
|
192
183
|
}
|
|
193
184
|
// Windows reserved names
|
|
194
185
|
const reservedNames = [
|
|
@@ -216,17 +207,17 @@ function validateProjectName(projectName) {
|
|
|
216
207
|
'LPT9'
|
|
217
208
|
];
|
|
218
209
|
if (reservedNames.includes(trimmed.toUpperCase())) {
|
|
219
|
-
throw new Error(
|
|
210
|
+
throw new Error(chalk.red(`❌ Invalid project name: "${projectName}"`) +
|
|
220
211
|
'\n\n' +
|
|
221
|
-
|
|
222
|
-
|
|
212
|
+
chalk.white('This is a reserved system name on Windows\n\n') +
|
|
213
|
+
chalk.gray('Please choose a different name'));
|
|
223
214
|
}
|
|
224
215
|
// Length validation
|
|
225
216
|
if (trimmed.length > MAX_PROJECT_NAME_LENGTH) {
|
|
226
|
-
throw new Error(
|
|
217
|
+
throw new Error(chalk.red('❌ Project name too long') +
|
|
227
218
|
'\n\n' +
|
|
228
|
-
|
|
229
|
-
|
|
219
|
+
chalk.white(`Maximum: ${MAX_PROJECT_NAME_LENGTH} characters (you provided: ${trimmed.length})\n\n`) +
|
|
220
|
+
chalk.gray('Please use a shorter name'));
|
|
230
221
|
}
|
|
231
222
|
return projectName; // Return original to preserve user's casing
|
|
232
223
|
}
|
|
@@ -237,7 +228,7 @@ function validateProjectName(projectName) {
|
|
|
237
228
|
* @param filePath - The file path to escape
|
|
238
229
|
* @returns Shell-safe escaped path
|
|
239
230
|
*/
|
|
240
|
-
function escapeShellPath(filePath) {
|
|
231
|
+
export function escapeShellPath(filePath) {
|
|
241
232
|
if (!filePath)
|
|
242
233
|
return '""';
|
|
243
234
|
// Already quoted - return as-is (idempotent)
|
|
@@ -265,7 +256,7 @@ function escapeShellPath(filePath) {
|
|
|
265
256
|
*
|
|
266
257
|
* @param options - CLI options to validate
|
|
267
258
|
*/
|
|
268
|
-
function validateConflictingParameters(options) {
|
|
259
|
+
export function validateConflictingParameters(options) {
|
|
269
260
|
const isLocalSet = options.local === true;
|
|
270
261
|
if (!isLocalSet)
|
|
271
262
|
return; // No conflict possible
|
|
@@ -279,17 +270,17 @@ function validateConflictingParameters(options) {
|
|
|
279
270
|
cloudParams.push('--password');
|
|
280
271
|
// Warn about conflict
|
|
281
272
|
if (cloudParams.length > 0) {
|
|
282
|
-
console.warn(
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
273
|
+
console.warn(chalk.yellow('\n⚠️ Warning: Conflicting parameters detected\n') +
|
|
274
|
+
chalk.white('You provided ') +
|
|
275
|
+
chalk.cyan('--local') +
|
|
276
|
+
chalk.white(' flag along with cloud parameters: ') +
|
|
277
|
+
chalk.cyan(cloudParams.join(', ')) +
|
|
287
278
|
'\n\n' +
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
279
|
+
chalk.gray('The ') +
|
|
280
|
+
chalk.gray.bold('--local') +
|
|
281
|
+
chalk.gray(' flag will be used (Docker deployment)') +
|
|
291
282
|
'\n' +
|
|
292
|
-
|
|
283
|
+
chalk.gray('Cloud parameters will be ignored\n'));
|
|
293
284
|
}
|
|
294
285
|
}
|
|
295
286
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/utils/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/utils/validation.ts"],"names":[],"mappings":"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"}
|