create-velox-app 0.3.4 → 0.3.6

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.js CHANGED
@@ -6,6 +6,16 @@
6
6
  * Handles command-line arguments and initiates the scaffolding process.
7
7
  */
8
8
  import { CREATE_VERSION, createVeloxApp } from './index.js';
9
+ import { getAvailableTemplates, isValidTemplate, TEMPLATE_METADATA } from './templates/index.js';
10
+ // ============================================================================
11
+ // Constants
12
+ // ============================================================================
13
+ /** Get list of available template names for error messages */
14
+ function getTemplateNames() {
15
+ return getAvailableTemplates()
16
+ .map((t) => t.type)
17
+ .join(', ');
18
+ }
9
19
  // ============================================================================
10
20
  // Help & Version
11
21
  // ============================================================================
@@ -13,17 +23,105 @@ const HELP_TEXT = `
13
23
  create-velox-app v${CREATE_VERSION}
14
24
 
15
25
  Usage:
16
- npx create-velox-app [project-name]
17
- pnpm create velox-app [project-name]
26
+ npx create-velox-app [project-name] [options]
27
+ pnpm create velox-app [project-name] [options]
18
28
 
19
29
  Options:
20
- -h, --help Show this help message
21
- -v, --version Show version number
30
+ -t, --template <name> Template to use (default: "default")
31
+ Available: ${getTemplateNames()}
32
+ -h, --help Show this help message
33
+ -v, --version Show version number
34
+
35
+ Templates:
36
+ default ${TEMPLATE_METADATA.default.description}
37
+ auth ${TEMPLATE_METADATA.auth.description}
22
38
 
23
39
  Examples:
24
- npx create-velox-app my-app
25
- npx create-velox-app # Interactive mode
40
+ npx create-velox-app my-app # Interactive mode
41
+ npx create-velox-app my-app --template=auth # Auth template
42
+ npx create-velox-app # Prompt for name
26
43
  `;
44
+ function parseArgs(args) {
45
+ const result = {
46
+ help: false,
47
+ version: false,
48
+ };
49
+ const unexpectedArgs = [];
50
+ let templateFlagSeen = false;
51
+ for (let i = 0; i < args.length; i++) {
52
+ const arg = args[i];
53
+ // Handle --help / -h
54
+ if (arg === '-h' || arg === '--help') {
55
+ result.help = true;
56
+ continue;
57
+ }
58
+ // Handle --version / -v
59
+ if (arg === '-v' || arg === '--version') {
60
+ result.version = true;
61
+ continue;
62
+ }
63
+ // Handle --template=<value> or -t=<value>
64
+ if (arg.startsWith('--template=') || arg.startsWith('-t=')) {
65
+ // Check for duplicate flag
66
+ if (templateFlagSeen) {
67
+ console.error('Error: --template flag specified multiple times');
68
+ process.exit(1);
69
+ }
70
+ templateFlagSeen = true;
71
+ const value = arg.split('=')[1];
72
+ if (!value) {
73
+ console.error(`Error: --template requires a value. Available: ${getTemplateNames()}`);
74
+ process.exit(1);
75
+ }
76
+ if (isValidTemplate(value)) {
77
+ result.template = value;
78
+ }
79
+ else {
80
+ console.error(`Invalid template: ${value}. Available: ${getTemplateNames()}`);
81
+ process.exit(1);
82
+ }
83
+ continue;
84
+ }
85
+ // Handle --template <value> or -t <value>
86
+ if (arg === '--template' || arg === '-t') {
87
+ // Check for duplicate flag
88
+ if (templateFlagSeen) {
89
+ console.error('Error: --template flag specified multiple times');
90
+ process.exit(1);
91
+ }
92
+ templateFlagSeen = true;
93
+ const value = args[i + 1];
94
+ if (!value || value.startsWith('-')) {
95
+ console.error(`Error: --template requires a value. Available: ${getTemplateNames()}`);
96
+ process.exit(1);
97
+ }
98
+ if (isValidTemplate(value)) {
99
+ result.template = value;
100
+ i++; // Skip next arg
101
+ }
102
+ else {
103
+ console.error(`Invalid template: ${value}. Available: ${getTemplateNames()}`);
104
+ process.exit(1);
105
+ }
106
+ continue;
107
+ }
108
+ // Non-flag argument
109
+ if (!arg.startsWith('-')) {
110
+ if (!result.projectName) {
111
+ result.projectName = arg;
112
+ }
113
+ else {
114
+ // Track unexpected positional arguments
115
+ unexpectedArgs.push(arg);
116
+ }
117
+ }
118
+ }
119
+ // Warn about unexpected arguments
120
+ if (unexpectedArgs.length > 0) {
121
+ console.warn(`Warning: Unexpected arguments ignored: ${unexpectedArgs.join(', ')}`);
122
+ }
123
+ return result;
124
+ }
27
125
  // ============================================================================
28
126
  // Main Entry Point
29
127
  // ============================================================================
@@ -32,30 +130,45 @@ Examples:
32
130
  */
33
131
  async function main() {
34
132
  try {
35
- // Get arguments
36
133
  const args = process.argv.slice(2);
134
+ const parsed = parseArgs(args);
37
135
  // Handle --help
38
- if (args.includes('-h') || args.includes('--help')) {
136
+ if (parsed.help) {
39
137
  console.log(HELP_TEXT);
40
138
  process.exit(0);
41
139
  }
42
140
  // Handle --version
43
- if (args.includes('-v') || args.includes('--version')) {
141
+ if (parsed.version) {
44
142
  console.log(CREATE_VERSION);
45
143
  process.exit(0);
46
144
  }
47
- // Get project name (first non-flag argument)
48
- const projectName = args.find((arg) => !arg.startsWith('-'));
49
145
  // Run scaffolder
50
- await createVeloxApp(projectName);
146
+ await createVeloxApp(parsed.projectName, parsed.template);
51
147
  }
52
148
  catch (error) {
53
- // Handle unexpected errors
149
+ // Handle unexpected errors with actionable guidance
54
150
  if (error instanceof Error) {
55
151
  console.error(`\nError: ${error.message}`);
152
+ // Provide contextual help based on error type
153
+ const msg = error.message.toLowerCase();
154
+ if (msg.includes('eacces') || msg.includes('permission')) {
155
+ console.error('\nTry running with appropriate permissions or choose a different directory.');
156
+ }
157
+ else if (msg.includes('enospc') || msg.includes('no space')) {
158
+ console.error('\nInsufficient disk space. Free up some space and try again.');
159
+ }
160
+ else if (msg.includes('enotfound') ||
161
+ msg.includes('network') ||
162
+ msg.includes('etimedout')) {
163
+ console.error('\nCheck your internet connection and try again.');
164
+ }
165
+ else if (msg.includes('already exists')) {
166
+ console.error('\nChoose a different project name or remove the existing directory.');
167
+ }
56
168
  }
57
169
  else {
58
170
  console.error('\nAn unexpected error occurred');
171
+ console.error('Please report this issue at: https://github.com/veloxts/velox-ts-framework/issues');
59
172
  }
60
173
  process.exit(1);
61
174
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,SAAS,GAAG;oBACE,cAAc;;;;;;;;;;;;;CAajC,CAAC;AAEF,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,gBAAgB;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEnC,gBAAgB;QAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,6CAA6C;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7D,iBAAiB;QACjB,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2BAA2B;QAC3B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,cAAc;AACd,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,14 @@
1
1
  /**
2
2
  * create-velox-app - Project scaffolding tool
3
3
  *
4
- * CLI tool for bootstrapping new VeloxTS applications with a default template.
4
+ * CLI tool for bootstrapping new VeloxTS applications with multiple templates.
5
5
  * Provides an interactive setup experience similar to create-next-app.
6
6
  */
7
+ import type { TemplateType } from './templates/index.js';
7
8
  /** Create-velox-app package version */
8
9
  export declare const CREATE_VERSION: string;
9
10
  /**
10
11
  * Main scaffolding function that creates a new VeloxTS project
11
12
  */
12
- export declare function createVeloxApp(initialProjectName?: string): Promise<void>;
13
+ export declare function createVeloxApp(initialProjectName?: string, initialTemplate?: TemplateType): Promise<void>;
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0CH,uCAAuC;AACvC,eAAO,MAAM,cAAc,EAAE,MAA+C,CAAC;AAgB7E;;GAEG;AACH,wBAAsB,cAAc,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C/E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,KAAK,EAAgC,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAiBvF,uCAAuC;AACvC,eAAO,MAAM,cAAc,EAAE,MAA+C,CAAC;AAkD7E;;GAEG;AACH,wBAAsB,cAAc,CAClC,kBAAkB,CAAC,EAAE,MAAM,EAC3B,eAAe,CAAC,EAAE,YAAY,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuEf"}