UNPKG

firebase-tools

Version:
79 lines (78 loc) 2.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.interactiveCreateHostingSite = void 0; const error_1 = require("../error"); const utils_1 = require("../utils"); const projectUtils_1 = require("../projectUtils"); const api_1 = require("./api"); const prompt_1 = require("../prompt"); const nameSuggestion = new RegExp("try something like `(.+)`"); const prompt = "Please provide an unique, URL-friendly id for your site. Your site's URL will be <site-id>.web.app. " + 'We recommend using letters, numbers, and hyphens (e.g. "{project-id}-{random-hash}"):'; async function interactiveCreateHostingSite(siteId, appId, options) { const projectId = (0, projectUtils_1.needProjectId)(options); const projectNumber = await (0, projectUtils_1.needProjectNumber)(options); let id = siteId; let newSite; let suggestion; if (!id) { const attempt = await trySiteID(projectNumber, projectId); if (attempt.available) { suggestion = projectId; } else { suggestion = attempt.suggestion; } } while (!newSite) { if (!id || suggestion) { id = await (0, prompt_1.input)({ message: prompt, validate: (s) => s.length > 0, default: suggestion, }); } try { newSite = await (0, api_1.createSite)(projectNumber, id, appId); } catch (err) { if (!(err instanceof error_1.FirebaseError)) { throw err; } if (options.nonInteractive) { throw err; } id = ""; suggestion = getSuggestionFromError(err); } } return newSite; } exports.interactiveCreateHostingSite = interactiveCreateHostingSite; async function trySiteID(projectNumber, id) { try { await (0, api_1.createSite)(projectNumber, id, "", true); return { available: true }; } catch (err) { if (!(err instanceof error_1.FirebaseError)) { throw err; } const suggestion = getSuggestionFromError(err); return { available: false, suggestion }; } } function getSuggestionFromError(err) { if (err.status === 400 && err.message.includes("Invalid name:")) { const i = err.message.indexOf("Invalid name:"); (0, utils_1.logWarning)(err.message.substring(i)); const match = nameSuggestion.exec(err.message); if (match) { return match[1]; } } else { (0, utils_1.logWarning)(err.message); } return; }