npm package diff

Package: @forge/cli

Versions: 12.2.0-experimental-959d7b9 - 12.3.0-next.0-experimental-47556b0

File: package/out/devspace/devspace-service.js

Index: package/out/devspace/devspace-service.js
===================================================================
--- package/out/devspace/devspace-service.js
+++ package/out/devspace/devspace-service.js
@@ -0,0 +1,103 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DevSpaceService = void 0;
+const cli_shared_1 = require("@forge/cli-shared");
+const DEV_SPACE_ERROR_MESSAGES = {
+    NAME_ALREADY_EXISTS: 'Developer space with this name already exists'
+};
+class DevSpaceService {
+    devSpaceClient;
+    constructor(devSpaceClient) {
+        this.devSpaceClient = devSpaceClient;
+    }
+    async fetchAllDevSpaces() {
+        const devSpaceIds = await this.devSpaceClient.getDevSpacesWithLinkingAccess();
+        if (!devSpaceIds || devSpaceIds.length === 0) {
+            return [];
+        }
+        return await this.devSpaceClient.getDevSpaceDetails(devSpaceIds);
+    }
+    doesDevSpaceAlreadyExists(error) {
+        const errorMessage = error instanceof Error ? error.message : String(error);
+        return errorMessage.includes(DEV_SPACE_ERROR_MESSAGES.NAME_ALREADY_EXISTS);
+    }
+    async getDevSpaces(ui) {
+        return await ui.displayTemporaryMessage(() => this.fetchAllDevSpaces(), cli_shared_1.Text.devSpace.fetching);
+    }
+    async selectDevSpace(ui, devSpaces) {
+        try {
+            if (devSpaces.length === 0) {
+                ui.info(cli_shared_1.Text.devSpace.noSpacesFound(cli_shared_1.Text.devSpace.documentationLink));
+                const created = await this.createDevSpaceFlow(ui);
+                if (created) {
+                    return { devSpace: { id: created.id, name: created.name }, isNewlyCreated: true };
+                }
+                return null;
+            }
+            const choices = devSpaces.map((ds) => ds.name);
+            choices.push(cli_shared_1.Text.devSpace.createNewOption);
+            const selectedName = await ui.promptForList(cli_shared_1.Text.devSpace.selectPrompt, choices);
+            if (selectedName === cli_shared_1.Text.devSpace.createNewOption) {
+                ui.info(cli_shared_1.Text.devSpace.createNewSpaceInfo(cli_shared_1.Text.devSpace.documentationLink));
+                ui.emptyLine();
+                try {
+                    const created = await this.createDevSpaceFlow(ui);
+                    if (created) {
+                        return { devSpace: { id: created.id, name: created.name }, isNewlyCreated: true };
+                    }
+                    return null;
+                }
+                catch (error) {
+                    const errorMessage = error instanceof Error ? error.message : String(error);
+                    ui.error(new Error(cli_shared_1.Text.devSpace.error.create(errorMessage)));
+                    return null;
+                }
+            }
+            const selectedDevSpace = devSpaces.find((ds) => ds.name === selectedName);
+            if (!selectedDevSpace) {
+                throw new Error(cli_shared_1.Text.devSpace.error.selectedNotFound);
+            }
+            return { devSpace: selectedDevSpace, isNewlyCreated: false };
+        }
+        catch (error) {
+            const errorMessage = error instanceof Error ? error.message : String(error);
+            ui.error(new Error(cli_shared_1.Text.devSpace.error.fetchOrSelect(errorMessage)));
+            return null;
+        }
+    }
+    async createDevSpaceFlow(ui) {
+        const cont = await ui.confirm(cli_shared_1.Text.devSpace.createContinuePrompt);
+        if (!cont) {
+            return null;
+        }
+        return await this.promptForNameAndCreate(ui);
+    }
+    async promptForNameAndCreate(ui, isRetry = false) {
+        if (isRetry) {
+            ui.info(cli_shared_1.Text.devSpace.error.nameAlreadyExists);
+            ui.emptyLine();
+        }
+        else {
+            ui.info(cli_shared_1.Text.devSpace.createMessage);
+        }
+        const name = await ui.promptForText(cli_shared_1.Text.devSpace.createPrompt);
+        if (!name || !name.trim()) {
+            ui.info(cli_shared_1.Text.devSpace.nameRequired);
+            return null;
+        }
+        ui.emptyLine();
+        ui.clearSpinner();
+        try {
+            const result = await ui.displayProgress(() => this.devSpaceClient.createDevSpace({ name: name.trim() }), cli_shared_1.Text.devSpace.createInProgress, (result) => cli_shared_1.Text.devSpace.createdAndContributing(result.name));
+            return result;
+        }
+        catch (error) {
+            if (this.doesDevSpaceAlreadyExists(error)) {
+                return await this.promptForNameAndCreate(ui, true);
+            }
+            throw error;
+        }
+    }
+}
+exports.DevSpaceService = DevSpaceService;
+//# sourceMappingURL=devspace-service.js.map
\ No newline at end of file