@forge/cli

12.3.0-next.0-experimental-8a5377312.3.0-next.2
out/command-line/register-app-commands.js
~out/command-line/register-app-commands.jsModified
+50−10
Index: package/out/command-line/register-app-commands.js
===================================================================
--- package/out/command-line/register-app-commands.js
+++ package/out/command-line/register-app-commands.js
@@ -122,18 +122,20 @@
 exports.directoryNameFromAppName = directoryNameFromAppName;
 async function createCommandHandler(ui, createAppCommand, name, { template, directory }, devSpaceService, statsigService) {
     const isDevSpaceSelectionEnabled = await statsigService.isDevSpaceSelectionEnabled();
     let isNewlyCreatedDevSpace = false;
+    let devSpaceId;
     if (isDevSpaceSelectionEnabled) {
         ui.emptyLine();
         ui.info(cli_shared_1.Text.ctrlC);
         ui.emptyLine();
         const devSpaces = await devSpaceService.getDevSpaces(ui);
-        const devSpaceResult = await devSpaceService.selectDevSpace(ui, devSpaces);
+        const devSpaceResult = await devSpaceService.selectDevSpace(ui, devSpaces, 'create');
         if (!devSpaceResult) {
             return;
         }
         isNewlyCreatedDevSpace = devSpaceResult.isNewlyCreated;
+        devSpaceId = devSpaceResult.devSpace.id;
         ui.emptyLine();
         if (!isNewlyCreatedDevSpace) {
             ui.info(cli_shared_1.Text.devSpace.contributingToSpace(devSpaceResult.devSpace.name));
         }
@@ -151,9 +153,10 @@
     const args = {
         name,
         template,
         directory,
-        ...(selection.requiredContext && { requiredProduct: selection.requiredContext })
+        ...(selection.requiredContext && { requiredProduct: selection.requiredContext }),
+        ...(devSpaceId && { developerSpaceId: devSpaceId })
     };
     const result = await ui.displayProgress(() => createAppCommand.execute(args), cli_shared_1.Text.create.cmd.start, cli_shared_1.Text.create.cmd.success(name));
     ui.info(cli_shared_1.Text.create.cmd.successDetails(directory, result.environments));
     return result;
@@ -183,17 +186,19 @@
     !isNewlyCreatedDevSpace && ui.info(cli_shared_1.Text.devSpace.terms.pricing(name));
     ui.emptyLine();
     const accepted = await ui.confirm(cli_shared_1.Text.devSpace.terms.acceptPrompt);
     if (!accepted) {
-        throw new cli_shared_1.ValidationError('You must accept the terms and conditions to create an app.');
+        throw new cli_shared_1.ValidationError('You must accept the terms and conditions');
     }
-    ui.info(cli_shared_1.Text.devSpace.terms.accepted);
 }
 async function promptAndValidateAppName(ui, name, directory, template, isDevSpaceSelectionEnabled, isNewlyCreatedDevSpace) {
     if (!name) {
         ui.info(cli_shared_1.Text.create.overviewAppName);
         name = await ui.promptForText(cli_shared_1.Text.create.promptName);
-        isDevSpaceSelectionEnabled && (await promptAndAcceptTerms(ui, name, isNewlyCreatedDevSpace || false));
+        if (isDevSpaceSelectionEnabled) {
+            await promptAndAcceptTerms(ui, name, isNewlyCreatedDevSpace || false);
+            ui.info(cli_shared_1.Text.devSpace.terms.accepted('creation'));
+        }
         if (!directory) {
             directory = directoryNameFromAppName(name) || template;
             if (directory) {
                 ensureDirectoryDoesntExist(directory);
@@ -270,23 +275,58 @@
         .option('-t, --template <template name>', cli_shared_1.Text.create.optionTemplate)
         .option('-d, --directory <directory name>', cli_shared_1.Text.create.optionDirectory)
         .action((name, options) => createCommandHandler(ui, createAppCommand, name, options, devSpaceService, statsigService));
 }
-function registerRegisterCommand({ cmd, ui, commands: { registerAppCommand } }) {
+function registerRegisterCommand({ cmd, ui, commands: { registerAppCommand }, services: { devSpaceService, statsigService } }) {
     cmd
         .command('register [name]')
         .description(cli_shared_1.Text.register.cmd.desc)
         .requireManifestFile()
         .action(async (name) => {
-        ui.info(cli_shared_1.Text.register.intro);
-        ui.info(cli_shared_1.Text.ctrlC);
-        ui.emptyLine();
+        const isDevSpaceSelectionEnabled = await statsigService.isDevSpaceSelectionEnabled();
+        let isNewlyCreatedDevSpace = false;
+        let devSpaceId;
+        if (isDevSpaceSelectionEnabled) {
+            ui.emptyLine();
+            ui.info(cli_shared_1.Text.ctrlC);
+            ui.emptyLine();
+            const devSpaces = await devSpaceService.getDevSpaces(ui);
+            if (devSpaces.length) {
+                ui.info(cli_shared_1.Text.devSpace.assignmentInfo);
+                ui.emptyLine();
+                ui.info(cli_shared_1.Text.devSpace.selectionPrompt);
+                ui.emptyLine();
+            }
+            const devSpaceResult = await devSpaceService.selectDevSpace(ui, devSpaces, 'register');
+            if (!devSpaceResult) {
+                return;
+            }
+            ui.emptyLine();
+            isNewlyCreatedDevSpace = devSpaceResult.isNewlyCreated;
+            devSpaceId = devSpaceResult.devSpace.id;
+            if (!isNewlyCreatedDevSpace) {
+                ui.info(cli_shared_1.Text.devSpace.assigningToSpace(devSpaceResult.devSpace.name));
+            }
+            ui.clearSpinner();
+            ui.info(cli_shared_1.Text.register.intro);
+        }
+        if (!isDevSpaceSelectionEnabled) {
+            ui.info(cli_shared_1.Text.register.intro);
+            ui.info(cli_shared_1.Text.ctrlC);
+            ui.emptyLine();
+        }
         if (!name) {
             ui.info(cli_shared_1.Text.create.overviewAppName);
             name = await ui.promptForText(cli_shared_1.Text.create.promptName);
             ui.emptyLine();
         }
-        const result = await ui.displayProgress(() => registerAppCommand.execute({ name }), cli_shared_1.Text.register.cmd.start, cli_shared_1.Text.register.cmd.success(name));
+        if (isDevSpaceSelectionEnabled) {
+            await promptAndAcceptTerms(ui, name, isNewlyCreatedDevSpace || false);
+            ui.info(cli_shared_1.Text.devSpace.terms.accepted('registration'));
+            ui.emptyLine();
+        }
+        const executeArgs = { name, ...(devSpaceId && { developerSpaceId: devSpaceId }) };
+        const result = await ui.displayProgress(() => registerAppCommand.execute(executeArgs), cli_shared_1.Text.register.cmd.start, cli_shared_1.Text.register.cmd.success(name));
         ui.info(cli_shared_1.Text.register.cmd.successDetails(result.environments));
         return result;
     });
 }