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