UNPKG

@amplitude/ampli

Version:

Amplitude CLI

151 lines (150 loc) 7.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEPRECATED_RUNTIMES = void 0; const inquirer = require("inquirer"); const chalk_1 = require("chalk"); const lodash_1 = require("lodash"); const base_1 = require("./base"); const types_1 = require("../types"); const runtime_1 = require("../util/runtime"); const ConfigurationInfo_1 = require("../components/ConfigurationInfo"); const icons_1 = require("../ui/icons"); const codegen_1 = require("../codegen"); exports.DEPRECATED_RUNTIMES = 'deprecated-runtimes'; const { bold, } = chalk_1.default; class ConfigureAction extends base_1.default { async run(platform) { const settings = this.getSettings(); const graphql = await this.getAmpliGraphQLClient(); const currentBranchName = settings.getBranch(); const currentSourceId = settings.getSourceId(); if (!currentSourceId) { return true; } const runtimes = await this.getRuntimes(); const currentRuntime = settings.getRuntime(runtimes); let configuredPlatform = platform; if (!configuredPlatform) { const platformChoices = this.getPlatformChoices(runtimes, currentRuntime); const { platform: selectedPlatform } = await inquirer.prompt([{ name: 'platform', message: `Select a platform`, type: 'list', choices: platformChoices.map(p => ({ name: p.name, value: p, })), }]); configuredPlatform = selectedPlatform; } const languageChoices = ConfigureAction.getLanguageChoices(runtimes, configuredPlatform); let configuredLanguage; if (languageChoices.length === 1) { [configuredLanguage] = languageChoices; } else { const { language: selectedLanguage } = await inquirer.prompt([{ name: 'language', message: `Select a language`, type: 'list', choices: languageChoices.map(language => ({ name: language.name, value: language, })), }]); configuredLanguage = selectedLanguage; } const runtimeChoices = this.getRuntimeChoices(runtimes, configuredPlatform, configuredLanguage, currentRuntime); let configuredRuntime; if (runtimeChoices.length === 1) { [configuredRuntime] = runtimeChoices; } else { const { runtime: selectedRuntime } = await inquirer.prompt([{ name: 'runtime', message: `Select a SDK`, type: 'list', choices: runtimeChoices.map(runtime => ({ name: `${runtime.sdk}${types_1.LEGACY_SDK.includes(runtime.sdk) || types_1.DEPRECATED_SDK.includes(runtime.sdk) ? '' : ' (recommended)'}`, value: runtime, })), }]); configuredRuntime = selectedRuntime; } settings.setRuntime(configuredRuntime); const orgId = settings.getOrgId(); const workspaceId = settings.getWorkspaceId(); const { branches, defaultBranch } = await this.getOrgWorkspaceBranches(orgId, workspaceId); const currentBranch = currentBranchName ? branches.find(b => b.name === currentBranchName) : defaultBranch; const currentVersionId = await this.getVersionIdFromSettings(settings, currentBranch); if (!currentBranch || !currentVersionId) { this.println(`${icons_1.ICON_ERROR_W_TEXT} Can't find source branch and version.`); return true; } const versionResponse = await graphql.versions({ orgId, workspaceId, branchId: currentBranch.id, versionId: currentVersionId }); const { stagingVersionId } = versionResponse.orgs[0].workspaces[0].branches[0]; try { await graphql.editSource({ input: { id: currentSourceId, versionId: stagingVersionId, runtimeId: configuredRuntime.id, }, }); ConfigurationInfo_1.default(configuredRuntime); const newPath = codegen_1.ITLY_DIRS[configuredRuntime.id]; if (newPath !== settings.getPath()) { if (settings.getPath()) { this.println(`${icons_1.ICON_WARNING_W_TEXT} Path has changed, please delete your old generated tracking library at ${bold(settings.getPath())}.`); } settings.setPath(newPath); } return true; } catch (error) { this.println(error.message); return false; } } getPlatformChoices(runtimes, currentRuntime) { const platforms = lodash_1.uniqBy(runtimes.filter(r => runtime_1.isSupportedRuntime(r.id) && (this.flags[exports.DEPRECATED_RUNTIMES] || !types_1.DEPRECATED_PLATFORM_IDS.includes(r.platform.id) || r.platform.id === (currentRuntime === null || currentRuntime === void 0 ? void 0 : currentRuntime.platform.id))).map(r => r.platform), p => p.id); platforms.sort((p1, p2) => p1.name.localeCompare(p2.name)); return platforms; } static getLanguageChoices(runtimes, platform) { const languages = lodash_1.uniqBy(runtimes.filter(r => r.platform.id === platform.id && runtime_1.isSupportedRuntime(r.id)).map(r => r.language), r => r.id); languages.sort(ConfigureAction.compareLanguages); return languages; } static compareLanguages(language1, language2) { const orderedLanguageNames = ['Swift', 'Obj-C']; const index1 = orderedLanguageNames.indexOf(language1.name); const index2 = orderedLanguageNames.indexOf(language2.name); if (index1 >= 0 && index2 >= 0) { return index1 - index2; } return language1.name.localeCompare(language2.name); } getRuntimeChoices(runtimes, platform, language, currentRuntime) { let result = runtimes.filter(r => r.platform.id === platform.id && r.language.id === language.id && runtime_1.RuntimeSDKs[r.id] && (this.flags[exports.DEPRECATED_RUNTIMES] || !types_1.DEPRECATED_SDK.includes(r.sdk) || r.id === (currentRuntime === null || currentRuntime === void 0 ? void 0 : currentRuntime.platform.id))); if (result.length === 0) { result = runtimes.filter(r => r.platform.id === platform.id && r.language.id === language.id && runtime_1.RuntimeSDKs[r.id]); } const sortedRuntimeIds = {}; Object.keys(runtime_1.RuntimeSDKs).forEach((runtimeId, i) => { sortedRuntimeIds[runtimeId] = i; }); result.sort((r1, r2) => sortedRuntimeIds[r1.id] - sortedRuntimeIds[r2.id]); return result; } } exports.default = ConfigureAction;