Browse Source

fix(cli): Standardise flag names

Co-authored-by: Housein Abo Shaar <76689341+GogoIsProgramming@users.noreply.github.com>
Housein Abo Shaar 6 months ago
parent
commit
a63ac07632

+ 1 - 1
packages/cli/e2e/add-command.e2e-spec.ts

@@ -174,7 +174,7 @@ describe('Add Command E2E', () => {
 
         it('fails when neither queryName nor mutationName is provided for API extension', async () => {
             await expect(performAddOperation({ apiExtension: true } as any)).rejects.toThrow(
-                'At least one of queryName or mutationName must be specified',
+                'At least one of query-name or mutation-name must be specified',
             );
             expect(apiExtRunSpy).not.toHaveBeenCalled();
         });

+ 27 - 9
packages/cli/src/commands/add/add-operations.ts

@@ -1,3 +1,6 @@
+import { log } from '@clack/prompts';
+import pc from 'picocolors';
+
 import { addApiExtensionCommand } from './api-extension/add-api-extension';
 import { addCodegenCommand } from './codegen/add-codegen';
 import { addEntityCommand } from './entity/add-entity';
@@ -145,7 +148,7 @@ export async function performAddOperation(options: AddOperationOptions): Promise
                 !options.selectedService.trim()
             ) {
                 throw new Error(
-                    'Service name is required for job queue. Usage: vendure add -j [plugin-name] --name <job-name> --selectedService <service-name>',
+                    'Service name is required for job queue. Usage: vendure add -j [plugin-name] --name <job-name> --selected-service <service-name>',
                 );
             }
             await addJobQueueCommand.run({
@@ -191,8 +194,8 @@ export async function performAddOperation(options: AddOperationOptions): Promise
 
             if (!hasValidQueryName && !hasValidMutationName) {
                 throw new Error(
-                    'At least one of queryName or mutationName must be specified as a non-empty string. ' +
-                        'Usage: vendure add -a [plugin-name] --queryName <name> --mutationName <name>',
+                    'At least one of query-name or mutation-name must be specified as a non-empty string. ' +
+                        'Usage: vendure add -a [plugin-name] --query-name <name> --mutation-name <name>',
                 );
             }
 
@@ -200,7 +203,7 @@ export async function performAddOperation(options: AddOperationOptions): Promise
             if (typeof options.apiExtension === 'string' && !options.apiExtension.trim()) {
                 throw new Error(
                     'Plugin name cannot be empty when specified. ' +
-                        'Usage: vendure add -a [plugin-name] --queryName <name> --mutationName <name>',
+                        'Usage: vendure add -a [plugin-name] --query-name <name> --mutation-name <name>',
                 );
             }
 
@@ -223,7 +226,7 @@ export async function performAddOperation(options: AddOperationOptions): Promise
             // If a string is passed, it should be a valid plugin name
             if (typeof options.uiExtensions === 'string' && !options.uiExtensions.trim()) {
                 throw new Error(
-                    'Plugin name cannot be empty when specified. Usage: vendure add --uiExtensions [plugin-name]',
+                    'Plugin name cannot be empty when specified. Usage: vendure add --ui-extensions [plugin-name]',
                 );
             }
             await addUiExtensionsCommand.run({
@@ -250,9 +253,24 @@ export async function performAddOperation(options: AddOperationOptions): Promise
         ) {
             throw error;
         }
-        return {
-            success: false,
-            message: error.message ?? 'Add operation failed',
-        };
+        // For other errors, log them in a more user-friendly way
+        // For validation errors, show the full error with stack trace
+        if (error.message.includes('Plugin name is required')) {
+            // Extract error message and stack trace
+            const errorMessage = error.message;
+            const stackLines = error.stack.split('\n');
+            const stackTrace = stackLines.slice(1).join('\n'); // Remove first line (error message)
+
+            // Display stack trace first, then colored error message at the end
+            log.error(stackTrace);
+            log.error(''); // Add empty line for better readability
+            log.error(pc.red('Error:') + ' ' + String(errorMessage));
+        } else {
+            log.error(error.message as string);
+            if (error.stack) {
+                log.error(error.stack);
+            }
+        }
+        process.exit(1);
     }
 }

+ 4 - 4
packages/cli/src/commands/add/api-extension/add-api-extension.ts

@@ -69,8 +69,8 @@ async function addApiExtension(
 
         if (!hasValidQueryName && !hasValidMutationName) {
             throw new Error(
-                'At least one of queryName or mutationName must be specified as a non-empty string in non-interactive mode.\n' +
-                    'Usage: npx vendure add -a <PluginName> --queryName <name> --mutationName <name>',
+                'At least one of query-name or mutation-name must be specified as a non-empty string in non-interactive mode.\n' +
+                    'Usage: npx vendure add -a <PluginName> --query-name <name> --mutation-name <name>',
             );
         }
     }
@@ -95,7 +95,7 @@ async function addApiExtension(
         if (!options.selectedService || options.selectedService.trim() === '') {
             throw new Error(
                 'Service must be specified in non-interactive mode.\n' +
-                    'Usage: npx vendure add -a <PluginName> --queryName <name> --mutationName <name> --selectedService <service-name>',
+                    'Usage: npx vendure add -a <PluginName> --query-name <name> --mutation-name <name> --selected-service <service-name>',
             );
         }
 
@@ -168,7 +168,7 @@ async function addApiExtension(
             const mutationNameResult =
                 options?.mutationName ??
                 (await text({
-                    message: 'Enter a name for the new mutation',
+                    message: 'Enter a new name for the new mutation',
                     initialValue: 'myNewMutation',
                 }));
             if (!isCancel(mutationNameResult)) {

+ 2 - 2
packages/cli/src/commands/command-declarations.ts

@@ -94,12 +94,12 @@ export const cliCommands: CliCommandDefinition[] = [
                 required: false,
                 subOptions: [
                     {
-                        long: '--queryName <name>',
+                        long: '--query-name <name>',
                         description: 'Name for the query (used with -a)',
                         required: false,
                     },
                     {
-                        long: '--mutationName <name>',
+                        long: '--mutation-name <name>',
                         description: 'Name for the mutation (used with -a)',
                         required: false,
                     },