UNPKG

@aws-amplify/cli-internal

Version:
133 lines • 7.43 kB
"use strict"; 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; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.run = void 0; const amplify_cli_core_1 = require("@aws-amplify/amplify-cli-core"); const amplify_prompts_1 = require("@aws-amplify/amplify-prompts"); const chalk_1 = __importDefault(require("chalk")); const get_resource_outputs_1 = require("../extensions/amplify-helpers/get-resource-outputs"); const ora_1 = __importDefault(require("ora")); const build_1 = require("./build"); const _ = __importStar(require("lodash")); const run = async (context) => { const subCommands = context.input.subCommands; const showHelp = getSafeInputOptionsFlag(context, 'help') || false; const isPull = !!(subCommands && subCommands.includes('pull')); const frontend = getSafeInputOptionsFlag(context, 'frontend'); const rootStackName = getSafeInputOptionsFlag(context, 'rootStackName'); const showPullHelp = (showHelp || !frontend || !rootStackName) && isPull; if (showHelp && !showPullHelp) { amplify_prompts_1.printer.blankLine(); amplify_prompts_1.printer.info("'amplify export', exports your Amplify backend into CDK app"); amplify_prompts_1.printer.blankLine(); amplify_prompts_1.printer.info(`${chalk_1.default.yellow('--cdk')} Exports all Amplify-generated resources as CDK`); amplify_prompts_1.printer.info(`${chalk_1.default.yellow('--out')} Folder to export stack to`); amplify_prompts_1.printer.blankLine(); amplify_prompts_1.printer.info(`Example: ${chalk_1.default.green('amplify export --cdk --out ~/myCDKApp')}`); amplify_prompts_1.printer.blankLine(); amplify_prompts_1.printer.info("'amplify export pull' To export front-end config files'"); amplify_prompts_1.printer.info("'amplify export pull --help' to learn"); amplify_prompts_1.printer.blankLine(); return; } if (showPullHelp) { const frontendPlugins = context.amplify.getFrontendPlugins(context); const frontends = Object.keys(frontendPlugins); amplify_prompts_1.printer.blankLine(); amplify_prompts_1.printer.info("'amplify export pull', Allows you to generate frontend config files at a desired location"); amplify_prompts_1.printer.blankLine(); amplify_prompts_1.printer.info(`${chalk_1.default.yellow('--rootStackName')} Amplify CLI deployed Root Stack name`); amplify_prompts_1.printer.info(`${chalk_1.default.yellow('--frontend')} Front end type ex: ${frontends.join(', ')}`); amplify_prompts_1.printer.info(`${chalk_1.default.yellow('--out')} Directory to write the front-end config files`); amplify_prompts_1.printer.blankLine(); amplify_prompts_1.printer.info(`Example: ${chalk_1.default.green('amplify export pull --rootStackName amplify-myapp-stack-123 --out ~/myCDKApp/src/config/ --frontend javascript')}`); amplify_prompts_1.printer.blankLine(); amplify_prompts_1.printer.blankLine(); return; } const exportPath = _.get(context, ['input', 'options', 'out']); if (isPull) { await createFrontEndConfigFile(context, exportPath); } else { await exportBackend(context, exportPath); } }; exports.run = run; async function exportBackend(context, exportPath) { var _a; await buildAllResources(context); const resources = await context.amplify.getResourceStatus(); await context.amplify.showResourceTable(); const providerPlugin = context.amplify.getProviderPlugins(context); const providers = Object.keys(providerPlugin); for await (const provider of providers) { const plugin = await (_a = providerPlugin[provider], Promise.resolve().then(() => __importStar(require(_a)))); await plugin.exportResources(context, resources, exportPath); } } async function buildAllResources(context) { const resourcesToBuild = await (0, build_1.getChangedResources)(context); await context.amplify.executeProviderUtils(context, 'awscloudformation', 'buildOverrides', { resourcesToBuild, forceCompile: true }); } async function createFrontEndConfigFile(context, exportPath) { var _a, _b; var _c; const { rootStackName, frontend } = (_c = context.input.options) !== null && _c !== void 0 ? _c : {}; const frontendSet = new Set(Object.keys(context.amplify.getFrontendPlugins(context))); if (!frontend || (frontend && !frontendSet.has(frontend))) { throw new amplify_cli_core_1.UnrecognizedFrontendError(`${frontend} is not a supported Amplify frontend`); } const spinner = (0, ora_1.default)(`Extracting outputs from ${rootStackName}`); spinner.start(); const providerPlugin = context.amplify.getProviderPlugins(context); const providers = Object.keys(providerPlugin); try { for await (const provider of providers) { const plugin = await (_a = providerPlugin[provider], Promise.resolve().then(() => __importStar(require(_a)))); await plugin.exportedStackResourcesUpdateMeta(context, rootStackName); } spinner.text = `Generating files at ${exportPath}`; const meta = amplify_cli_core_1.stateManager.getMeta(); const cloudMeta = amplify_cli_core_1.stateManager.getCurrentMeta(); const frontendPlugins = context.amplify.getFrontendPlugins(context); const frontendHandlerModule = await (_b = frontendPlugins[frontend], Promise.resolve().then(() => __importStar(require(_b)))); const validatedExportPath = (0, amplify_cli_core_1.validateExportDirectoryPath)(exportPath, amplify_cli_core_1.PathConstants.DefaultFrontEndExportFolder); await frontendHandlerModule.createFrontendConfigsAtPath(context, (0, get_resource_outputs_1.getResourceOutputs)(meta), (0, get_resource_outputs_1.getResourceOutputs)(cloudMeta), validatedExportPath); spinner.succeed('Successfully generated frontend config files'); } catch (ex) { spinner.fail('Failed to generate frontend config files ' + ex.message); throw ex; } finally { spinner.stop(); } } const getSafeInputOptionsFlag = (context, flag) => _.get(context, ['input', 'options', flag]); //# sourceMappingURL=export.js.map