@amplitude/ampli
Version:
Amplitude CLI
151 lines (150 loc) • 7.15 kB
JavaScript
;
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;