UNPKG

graphql-retain-transformer

Version:

Prevent losing production data by enabling the retain deletion policy for your AWS Amplify API!

38 lines 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RetainTransformer = void 0; const graphql_transformer_core_1 = require("@aws-amplify/graphql-transformer-core"); const graphql_transformer_common_1 = require("graphql-transformer-common"); const core_1 = require("@aws-cdk/core"); class RetainTransformer extends graphql_transformer_core_1.TransformerPluginBase { constructor() { super("RetainTransformer", "directive @retain on OBJECT"); this.retainObjects = new Map(); this.object = (definition, directive, acc) => { this.validateObject(definition); const tableName = graphql_transformer_common_1.ModelResourceIDs.ModelTableResourceID(definition.name.value); this.retainObjects.set(definition, tableName); }; this.generateResolvers = (context) => { this.retainObjects.forEach((fieldName, directive) => { const ddbTable = this.getTable(context, directive); ddbTable["table"].cfnOptions.deletionPolicy = core_1.CfnDeletionPolicy.RETAIN; }); }; this.validateObject = (definition) => { const modelDirective = (definition.directives || []).find((directive) => directive.name.value === "model"); if (!modelDirective) { throw new graphql_transformer_core_1.InvalidDirectiveError("Types annotated with @retain must also be annotated with @model."); } }; this.getTable = (context, definition) => { const ddbDataSource = context.dataSources.get(definition); const tableName = graphql_transformer_common_1.ModelResourceIDs.ModelTableResourceID(definition.name.value); const table = ddbDataSource.ds.stack.node.findChild(tableName); return table; }; } } exports.RetainTransformer = RetainTransformer; //# sourceMappingURL=retain-transformer.js.map