@aws-amplify/cli-internal
Version:
299 lines • 15 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isNewProject = exports.analyzeProject = exports.displayConfigurationDefaults = exports.analyzeProjectHeadless = void 0;
const amplify_cli_core_1 = require("@aws-amplify/amplify-cli-core");
const fs = __importStar(require("fs-extra"));
const inquirer = __importStar(require("inquirer"));
const path = __importStar(require("path"));
const constants_1 = require("../extensions/amplify-helpers/constants");
const editor_selection_1 = require("../extensions/amplify-helpers/editor-selection");
const get_frontend_plugins_1 = require("../extensions/amplify-helpers/get-frontend-plugins");
const project_name_validation_1 = require("../extensions/amplify-helpers/project-name-validation");
const s1_initFrontend_1 = require("./s1-initFrontend");
const analyzeProjectHeadless = async (context) => {
var _a, _b;
const projectPath = process.cwd();
const projectName = path.basename(projectPath);
const env = getDefaultEnv(context);
setProjectConfig(context, projectName);
setExeInfo(context, projectPath, undefined, env);
const { frontend } = (_b = (_a = context === null || context === void 0 ? void 0 : context.parameters) === null || _a === void 0 ? void 0 : _a.options) !== null && _b !== void 0 ? _b : {};
if (!frontend) {
context.print.warning('No frontend specified. Defaulting to android.');
context.exeInfo.projectConfig.frontend = 'android';
}
else {
context.exeInfo.projectConfig.frontend = frontend;
}
};
exports.analyzeProjectHeadless = analyzeProjectHeadless;
const displayConfigurationDefaults = (context, defaultProjectName, defaultEnv, defaultEditorName) => {
context.print.info('Project information');
context.print.info(`| Name: ${defaultProjectName}`);
context.print.info(`| Environment: ${defaultEnv}`);
context.print.info(`| Default editor: ${defaultEditorName}`);
};
exports.displayConfigurationDefaults = displayConfigurationDefaults;
const setConfigurationDefaults = (context, projectPath, defaultProjectName, defaultEnv, defaultEditor) => {
setExeInfo(context, projectPath, defaultEditor, defaultEnv);
setProjectConfig(context, defaultProjectName);
context.exeInfo.inputParams.amplify = context.exeInfo.inputParams.amplify || {};
context.exeInfo.inputParams.amplify.projectName = defaultProjectName;
context.exeInfo.inputParams.amplify.envName = defaultEnv;
context.exeInfo.inputParams.amplify.defaultEditor = defaultEditor;
};
const displayAndSetDefaults = async (context, projectPath, projectName) => {
var _a;
var _b, _c, _d;
const defaultProjectName = projectName;
const defaultEnv = getDefaultEnv(context);
let defaultEditor;
if ((_d = (_c = (_b = context === null || context === void 0 ? void 0 : context.exeInfo) === null || _b === void 0 ? void 0 : _b.inputParams) === null || _c === void 0 ? void 0 : _c.amplify) === null || _d === void 0 ? void 0 : _d.defaultEditor) {
defaultEditor = (0, editor_selection_1.normalizeEditor)(context.exeInfo.inputParams.amplify.defaultEditor);
}
else {
defaultEditor = editor_selection_1.editors.length > 0 ? editor_selection_1.editors[0].value : 'vscode';
}
const editorIndex = editor_selection_1.editors.findIndex((editorEntry) => editorEntry.value === defaultEditor);
const defaultEditorName = editorIndex > -1 ? editor_selection_1.editors[editorIndex].name : 'Visual Studio Code';
context.print.success('The following configuration will be applied:');
context.print.info('');
(0, exports.displayConfigurationDefaults)(context, defaultProjectName, defaultEnv, defaultEditorName);
const frontendPlugins = (0, get_frontend_plugins_1.getFrontendPlugins)(context);
const defaultFrontend = (0, s1_initFrontend_1.getSuitableFrontend)(context, frontendPlugins, projectPath);
const frontendModule = await (_a = frontendPlugins[defaultFrontend], Promise.resolve().then(() => __importStar(require(_a))));
await frontendModule.displayFrontendDefaults(context, projectPath);
context.print.info('');
if (context.exeInfo.inputParams.yes || (await context.amplify.confirmPrompt('Initialize the project with the above configuration?'))) {
setConfigurationDefaults(context, projectPath, defaultProjectName, defaultEnv, defaultEditorName);
await frontendModule.setFrontendDefaults(context, projectPath);
}
};
const analyzeProject = async (context) => {
var _a, _b, _c, _d, _e, _f, _g;
if (!((_a = context.parameters.options) === null || _a === void 0 ? void 0 : _a.app) || !((_b = context.parameters.options) === null || _b === void 0 ? void 0 : _b.quickstart)) {
context.print.warning('Note: It is recommended to run this command from the root of your app directory');
}
const projectPath = process.cwd();
context.exeInfo.isNewProject = (0, exports.isNewProject)(context);
context.exeInfo.forcePush = !!((_d = (_c = context === null || context === void 0 ? void 0 : context.parameters) === null || _c === void 0 ? void 0 : _c.options) === null || _d === void 0 ? void 0 : _d.forcePush);
const projectName = await getProjectName(context);
if (context.exeInfo.isNewProject && context.parameters.command !== 'env') {
await displayAndSetDefaults(context, projectPath, projectName);
}
if (!context.exeInfo.isNewProject &&
context.parameters.options &&
context.parameters.options.yes &&
!((_e = context.exeInfo.inputParams.amplify) === null || _e === void 0 ? void 0 : _e.envName)) {
throw new amplify_cli_core_1.AmplifyError('ProjectInitError', {
message: `Amplify project ${amplify_cli_core_1.stateManager.getAppID()} is already initialized for environment ${amplify_cli_core_1.stateManager.getCurrentEnvName(projectPath)}`,
resolution: 'To create a new environment run `amplify add env`',
});
}
const envName = await getEnvName(context);
let defaultEditor = getDefaultEditor();
if (!defaultEditor) {
defaultEditor = await getEditor(context);
}
context.exeInfo.isNewEnv = isNewEnv(envName);
context.exeInfo.forcePush = !!((_g = (_f = context === null || context === void 0 ? void 0 : context.parameters) === null || _f === void 0 ? void 0 : _f.options) === null || _g === void 0 ? void 0 : _g.forcePush);
if (context.exeInfo.isNewEnv && !context.exeInfo.isNewProject) {
const currentLocalEnvInfo = amplify_cli_core_1.stateManager.getLocalEnvInfo(undefined, {
throwIfNotExist: false,
});
if (currentLocalEnvInfo) {
context.exeInfo.sourceEnvName = currentLocalEnvInfo.envName;
}
}
setProjectConfig(context, projectName);
setExeInfo(context, projectPath, defaultEditor, envName);
return context;
};
exports.analyzeProject = analyzeProject;
const setProjectConfig = (context, projectName) => {
context.exeInfo.isNewProject = (0, exports.isNewProject)(context);
context.exeInfo.projectConfig = {
...context.exeInfo.projectConfig,
projectName,
version: constants_1.amplifyCLIConstants.CURRENT_PROJECT_CONFIG_VERSION,
};
};
const setExeInfo = (context, projectPath, defaultEditor, envName) => {
context.exeInfo.localEnvInfo = {
projectPath,
defaultEditor,
envName,
};
context.exeInfo.teamProviderInfo = {};
return context;
};
const getProjectName = async (context) => {
let projectName;
const projectPath = process.cwd();
if (!context.exeInfo.isNewProject) {
const projectConfig = amplify_cli_core_1.stateManager.getProjectConfig(projectPath);
projectName = projectConfig.projectName;
return projectName;
}
if (context.exeInfo.inputParams.amplify && context.exeInfo.inputParams.amplify.projectName) {
projectName = (0, project_name_validation_1.normalizeProjectName)(context.exeInfo.inputParams.amplify.projectName);
}
else {
projectName = (0, project_name_validation_1.normalizeProjectName)(path.basename(projectPath));
if (!context.exeInfo.inputParams.yes) {
const projectNameQuestion = {
type: 'input',
name: 'inputProjectName',
message: 'Enter a name for the project',
default: projectName,
validate: (input) => (0, project_name_validation_1.isProjectNameValid)(input) || 'Project name should be between 3 and 20 characters and alphanumeric',
};
const answer = await inquirer.prompt(projectNameQuestion);
projectName = answer.inputProjectName;
}
}
return projectName;
};
const getEditor = async (context) => {
var _a;
let editor;
if (context.exeInfo.inputParams.amplify && context.exeInfo.inputParams.amplify.defaultEditor) {
editor = (0, editor_selection_1.normalizeEditor)(context.exeInfo.inputParams.amplify.defaultEditor);
}
else if (!context.exeInfo.inputParams.yes) {
editor = await (0, editor_selection_1.editorSelection)(editor);
}
if (!editor) {
editor = (_a = context.exeInfo.localEnvInfo) === null || _a === void 0 ? void 0 : _a.defaultEditor;
}
return editor;
};
const isEnvNameValid = (inputEnvName) => /^[a-z]{2,10}$/.test(inputEnvName);
const INVALID_ENV_NAME_MSG = 'Environment name must be between 2 and 10 characters, and lowercase only.';
const getDefaultEnv = (context) => {
var _a, _b, _c;
let defaultEnv = 'dev';
if ((_c = (_b = (_a = context === null || context === void 0 ? void 0 : context.exeInfo) === null || _a === void 0 ? void 0 : _a.inputParams) === null || _b === void 0 ? void 0 : _b.amplify) === null || _c === void 0 ? void 0 : _c.envName) {
if (isEnvNameValid(context.exeInfo.inputParams.amplify.envName)) {
defaultEnv = context.exeInfo.inputParams.amplify.envName;
return defaultEnv;
}
throw new amplify_cli_core_1.AmplifyError('EnvironmentNameError', {
message: `Invalid environment name: ${context.exeInfo.inputParams.amplify.envName}`,
resolution: INVALID_ENV_NAME_MSG,
});
}
if ((0, exports.isNewProject)(context) || !context.amplify.getAllEnvs().includes(defaultEnv)) {
return defaultEnv;
}
return undefined;
};
const getEnvName = async (context) => {
let envName;
if (context.exeInfo.inputParams.amplify && context.exeInfo.inputParams.amplify.envName) {
if (isEnvNameValid(context.exeInfo.inputParams.amplify.envName)) {
({ envName } = context.exeInfo.inputParams.amplify);
return envName;
}
throw new amplify_cli_core_1.AmplifyError('ProjectInitError', {
message: `Invalid environment name: ${context.exeInfo.inputParams.amplify.envName}`,
resolution: INVALID_ENV_NAME_MSG,
});
}
else if (context.exeInfo.inputParams && context.exeInfo.inputParams.yes) {
throw new amplify_cli_core_1.AmplifyError('ProjectInitError', {
message: `Invalid environment name: ${context.exeInfo.inputParams.amplify.envName}`,
resolution: INVALID_ENV_NAME_MSG,
});
}
const newEnvQuestion = async () => {
const defaultEnvName = getDefaultEnv(context);
const envNameQuestion = {
type: 'input',
name: 'envName',
message: 'Enter a name for the environment',
default: defaultEnvName,
validate: (input) => (!isEnvNameValid(input) ? INVALID_ENV_NAME_MSG : true),
};
({ envName } = await inquirer.prompt(envNameQuestion));
};
if ((0, exports.isNewProject)(context)) {
await newEnvQuestion();
}
else {
const allEnvs = context.amplify.getAllEnvs();
const envAddExec = checkEnvAddExec(context);
if (allEnvs.length > 0 && envAddExec === false) {
if (await context.amplify.confirmPrompt('Do you want to use an existing environment?')) {
const envQuestion = {
type: 'list',
name: 'envName',
message: 'Choose the environment you would like to use:',
choices: allEnvs,
};
({ envName } = await inquirer.prompt(envQuestion));
}
else {
await newEnvQuestion();
}
}
else if (envAddExec === true && context.parameters.first) {
envName = context.parameters.first;
}
else {
await newEnvQuestion();
}
}
return envName;
};
const isNewEnv = (envName) => {
const cwd = process.cwd();
const readOptions = { throwIfNotExist: false, default: {} };
const localAwsInfoEnvs = Object.keys(amplify_cli_core_1.stateManager.getLocalAWSInfo(cwd, readOptions));
const tpiEnvs = Object.keys(amplify_cli_core_1.stateManager.getTeamProviderInfo(cwd, readOptions));
const allEnvs = Array.from(new Set([...localAwsInfoEnvs, ...tpiEnvs]));
return !allEnvs.includes(envName);
};
const isNewProject = (context) => {
let newProject = true;
const projectPath = process.cwd();
const projectConfigFilePath = context.amplify.pathManager.getProjectConfigFilePath(projectPath);
if (fs.existsSync(projectConfigFilePath)) {
newProject = false;
}
return newProject;
};
exports.isNewProject = isNewProject;
const getDefaultEditor = () => {
const projectPath = process.cwd();
const localEnvInfo = amplify_cli_core_1.stateManager.getLocalEnvInfo(projectPath, {
throwIfNotExist: false,
default: {},
});
return localEnvInfo.defaultEditor;
};
const checkEnvAddExec = (context) => context.parameters.command === 'env' && context.parameters.array[0] === 'add';
//# sourceMappingURL=s0-analyzeProject.js.map
;