@aws-amplify/cli-internal
Version:
Amplify CLI
58 lines • 2.93 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RestApiGenerator = void 0;
const node_path_1 = __importDefault(require("node:path"));
const promises_1 = __importDefault(require("node:fs/promises"));
const ts_1 = require("../../ts");
const rest_api_renderer_1 = require("./rest-api.renderer");
class RestApiGenerator {
constructor(gen1App, backendGenerator, outputDir, resource, logger) {
this.gen1App = gen1App;
this.backendGenerator = backendGenerator;
this.outputDir = outputDir;
this.resource = resource;
this.logger = logger;
}
async plan() {
const restApi = await this.readRestApiConfig();
const hasAuth = this.gen1App.categoryMeta('auth') !== undefined;
return [
{
resource: this.resource,
validate: () => undefined,
describe: async () => [`Generate amplify/api/${restApi.apiName}/resource.ts`],
execute: async () => {
const apiDir = node_path_1.default.join(this.outputDir, 'amplify', 'api', restApi.apiName);
const renderer = new rest_api_renderer_1.RestApiRenderer(hasAuth);
this.logger.info(`Rendering api/${restApi.apiName}/resource.ts`);
const nodes = renderer.render(restApi);
const content = ts_1.TS.printNodes(nodes);
await promises_1.default.mkdir(apiDir, { recursive: true });
await promises_1.default.writeFile(node_path_1.default.join(apiDir, 'resource.ts'), content, 'utf-8');
const alias = restApi.apiName;
this.backendGenerator.addNamespaceImport(alias, `./api/${alias}/resource`);
this.backendGenerator.addPostDefineBackendStatement(`${alias}.${restApi.exportedFunctionName}(backend)`);
},
},
];
}
async readRestApiConfig() {
var _a;
const cliInputs = this.gen1App.cliInputs('api', this.resource.resourceName);
const gen1ApiId = this.gen1App.resourceMetaOutput(this.resource, 'ApiId');
this.logger.debug(`Fetching REST API root resource for '${gen1ApiId}'`);
const gen1RootResourceId = await this.gen1App.aws.fetchRestApiRootResourceId(gen1ApiId);
return {
apiName: this.resource.resourceName,
exportedFunctionName: `define${this.resource.resourceName.charAt(0).toUpperCase() + this.resource.resourceName.slice(1)}Api`,
paths: (_a = cliInputs.paths) !== null && _a !== void 0 ? _a : {},
gen1ApiId,
gen1RootResourceId,
};
}
}
exports.RestApiGenerator = RestApiGenerator;
//# sourceMappingURL=rest-api.generator.js.map