UNPKG

@aws-amplify/cli-internal

Version:
222 lines • 11.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AmplifyMigrationGenerateStep = void 0; const node_path_1 = __importDefault(require("node:path")); const node_os_1 = __importDefault(require("node:os")); const promises_1 = __importDefault(require("node:fs/promises")); const amplify_cli_core_1 = require("@aws-amplify/amplify-cli-core"); const step_1 = require("./_common/step"); const plan_1 = require("./_common/plan"); const assess_1 = require("./assess"); const backend_generator_1 = require("./generate/amplify/backend.generator"); const package_json_generator_1 = require("./generate/package.json.generator"); const package_json_generator_2 = require("./generate/amplify/package.json.generator"); const tsconfig_generator_1 = require("./generate/amplify/tsconfig.generator"); const amplify_yml_generator_1 = require("./generate/amplify.yml.generator"); const gitignore_generator_1 = require("./generate/gitignore.generator"); const auth_generator_1 = require("./generate/amplify/auth/auth.generator"); const reference_auth_generator_1 = require("./generate/amplify/auth/reference-auth.generator"); const data_generator_1 = require("./generate/amplify/data/data.generator"); const rest_api_generator_1 = require("./generate/amplify/rest-api/rest-api.generator"); const s3_generator_1 = require("./generate/amplify/storage/s3.generator"); const dynamodb_generator_1 = require("./generate/amplify/storage/dynamodb.generator"); const function_generator_1 = require("./generate/amplify/function/function.generator"); const kinesis_generator_1 = require("./generate/amplify/analytics/kinesis.generator"); const geo_generator_1 = require("./generate/amplify/geo/geo.generator"); const map_generator_1 = require("./generate/amplify/geo/map.generator"); const place_index_generator_1 = require("./generate/amplify/geo/place-index.generator"); const geofence_collection_generator_1 = require("./generate/amplify/geo/geofence-collection.generator"); const custom_generator_1 = require("./generate/amplify/custom-resources/custom.generator"); const AMPLIFY_DIR = 'amplify'; class AmplifyMigrationGenerateStep extends step_1.AmplifyMigrationStep { async forward() { const outputDir = await promises_1.default.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'amplify-gen2-')); const backendGenerator = new backend_generator_1.BackendGenerator(outputDir, this.logger); const packageJsonGenerator = new package_json_generator_1.RootPackageJsonGenerator(outputDir); const generators = []; const assessor = new assess_1.AmplifyMigrationAssessor(this.gen1App, this.logger); const assessment = assessor.assess(); const operations = [ { describe: async () => [], validate: () => ({ description: 'Environment Locked', run: () => this.validateLockStatus() }), execute: async () => { }, }, { describe: async () => [], validate: () => ({ description: 'Clean Working Directory', run: () => this.validateWorkingDirectory() }), execute: async () => { }, }, { describe: async () => [], validate: () => ({ description: 'Assessment', run: async () => { const valid = assessment.validFor('generate'); return { valid, report: valid ? undefined : assessment.render() }; }, }), execute: async () => { }, }, ]; let authGenerator; let s3Generator; let geoGenerator; const functionGenerators = []; const discovered = this.gen1App.discover(); for (const resource of discovered) { if (assessment.of(resource, 'generate').level !== 'supported') { continue; } switch (resource.key) { case 'auth:Cognito': { const isReferenceAuth = discovered .filter((r) => r.category === 'auth') .some((r) => { var _a; const meta = ((_a = this.gen1App.categoryMeta('auth')) !== null && _a !== void 0 ? _a : {})[r.resourceName]; return (meta === null || meta === void 0 ? void 0 : meta.serviceType) === 'imported'; }); if (isReferenceAuth) { generators.push(new reference_auth_generator_1.ReferenceAuthGenerator(this.gen1App, backendGenerator, outputDir, resource, this.logger)); } else { authGenerator = new auth_generator_1.AuthGenerator(this.gen1App, backendGenerator, outputDir, resource, this.logger); generators.push(authGenerator); } break; } case 'auth:Cognito-UserPool-Groups': break; case 'storage:S3': s3Generator = new s3_generator_1.S3Generator(this.gen1App, backendGenerator, outputDir, resource, this.logger); generators.push(s3Generator); break; case 'storage:DynamoDB': { generators.push(new dynamodb_generator_1.DynamoDBGenerator(this.gen1App, backendGenerator, outputDir, resource, this.logger)); break; } case 'api:AppSync': generators.push(new data_generator_1.DataGenerator(this.gen1App, backendGenerator, outputDir, resource, this.logger)); break; case 'api:API Gateway': generators.push(new rest_api_generator_1.RestApiGenerator(this.gen1App, backendGenerator, outputDir, resource, this.logger)); break; case 'analytics:Kinesis': generators.push(new kinesis_generator_1.AnalyticsKinesisGenerator(this.gen1App, backendGenerator, outputDir, resource, this.logger)); break; case 'geo:Map': { if (!geoGenerator) { geoGenerator = new geo_generator_1.GeoGenerator(backendGenerator, outputDir, this.logger); } generators.push(new map_generator_1.GeoMapGenerator(this.gen1App, outputDir, resource, geoGenerator, this.logger)); break; } case 'geo:PlaceIndex': { if (!geoGenerator) { geoGenerator = new geo_generator_1.GeoGenerator(backendGenerator, outputDir, this.logger); } generators.push(new place_index_generator_1.GeoPlaceIndexGenerator(this.gen1App, outputDir, resource, geoGenerator, this.logger)); break; } case 'geo:GeofenceCollection': { if (!geoGenerator) { geoGenerator = new geo_generator_1.GeoGenerator(backendGenerator, outputDir, this.logger); } generators.push(new geofence_collection_generator_1.GeoGeofenceCollectionGenerator(this.gen1App, outputDir, resource, geoGenerator, this.logger)); break; } case 'function:Lambda': { const funcGen = new function_generator_1.FunctionGenerator({ gen1App: this.gen1App, backendGenerator, packageJsonGenerator, outputDir, resource, logger: this.logger, }); generators.push(funcGen); functionGenerators.push(funcGen); break; } case 'custom:customCDK': generators.push(new custom_generator_1.CustomResourceGenerator(this.gen1App, backendGenerator, packageJsonGenerator, outputDir, resource.resourceName, this.logger)); break; case 'UNKNOWN': break; } } for (const funcGen of functionGenerators) { if (authGenerator) funcGen.setAuthGenerator(authGenerator); if (s3Generator) funcGen.setS3Generator(s3Generator); } if (geoGenerator) { generators.push(geoGenerator); } generators.push(backendGenerator); generators.push(packageJsonGenerator); generators.push(new package_json_generator_2.BackendPackageJsonGenerator(outputDir)); generators.push(new tsconfig_generator_1.TsConfigGenerator(outputDir)); generators.push(new amplify_yml_generator_1.AmplifyYmlGenerator(this.gen1App)); generators.push(new gitignore_generator_1.GitIgnoreGenerator()); for (const generator of generators) { operations.push(...(await generator.plan())); } operations.push({ validate: () => undefined, describe: async () => [], execute: async () => { const cwd = process.cwd(); this.logger.info('Deleting amplify/'); await promises_1.default.rm(AMPLIFY_DIR, { recursive: true }); await promises_1.default.rename(node_path_1.default.join(outputDir, 'amplify'), node_path_1.default.join(cwd, 'amplify')); await promises_1.default.rename(node_path_1.default.join(outputDir, 'package.json'), node_path_1.default.join(cwd, 'package.json')); await promises_1.default.rm(outputDir, { recursive: true }); }, }); return new plan_1.Plan({ operations, logger: this.logger, title: 'Execute', implications: [ "Your local 'amplify/' directory will be replaced with Gen2 code", "Your root 'package.json' will be updated with Gen2 dependencies", ], }); } async rollback() { throw new amplify_cli_core_1.AmplifyError('UnsupportedOperationError', { message: 'Rollback is not supported for the generate step.', resolution: [ 'To restore your local directory to its previous state, use git to discard the changes.', '', `Then restore the Amplify configuration by running: 'amplify pull --appId ${this.gen1App.appId} --envName ${this.gen1App.appName}'`, ].join('\n'), }); } async validateLockStatus() { try { await this.validations.validateLockStatus(); return { valid: true }; } catch (e) { return { valid: false, report: e.message }; } } async validateWorkingDirectory() { try { await this.validations.validateWorkingDirectory(); return { valid: true }; } catch (e) { return { valid: false, report: e.message }; } } } exports.AmplifyMigrationGenerateStep = AmplifyMigrationGenerateStep; //# sourceMappingURL=generate.js.map