{"version":3,"sources":["jsdelivr-header.js","/npm/generator-jhipster-entity-audit-and-delete@2.2.2/generators/app/index.js"],"names":[],"mappings":"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","file":"/npm/generator-jhipster-entity-audit-and-delete@2.2.2/generators/app/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/generator-jhipster-entity-audit-and-delete@2.2.2/generators/app/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\nvar path = require('path'),\n    util = require('util'),\n    yeoman = require('yeoman-generator'),\n    chalk = require('chalk'),\n    packagejs = require(__dirname + '/../../package.json'),\n    fs = require('fs'),\n    semver = require('semver'),\n    glob = require(\"glob\");\n\n// Stores JHipster variables\nvar jhipsterVar = {moduleName: 'entity-audit'};\n\n// Stores JHipster functions\nvar jhipsterFunc = {};\n\nvar STRIP_HTML = 'stripHtml',\n    STRIP_JS = 'stripJs',\n    COPY = 'copy',\n    TPL = 'template'\n\nmodule.exports = yeoman.Base.extend({\n\n  initializing: {\n    compose: function (args) {\n      this.composeWith('jhipster:modules', {\n        options: {\n          jhipsterVar: jhipsterVar,\n          jhipsterFunc: jhipsterFunc\n        }\n      });\n\n      if (args == 'default') {\n        this.defaultAudit = true;\n      }\n      if (args === 'javers') {\n        this.javersAudit = true;\n      }\n    },\n\n    displayLogo: function () {\n      this.log(chalk.white('Welcome to the ' + chalk.bold('JHipster Entity Audit and Default delete behavior') + ' Generator! ' + chalk.yellow('v' + packagejs.version + '\\n')));\n    },\n\n    checkJHVersion: function () {\n      var supportedJHVersion = packagejs.dependencies['generator-jhipster'];\n      if (jhipsterVar.jhipsterVersion && !semver.satisfies(jhipsterVar.jhipsterVersion, supportedJHVersion)) {\n        this.env.error(chalk.red.bold('ERROR!') + ` I support only JHipster versions greater than ${supportedJHVersion}...\n          If you want to use Entity Audit with an older JHipster version, download a previous version that supports the required JHipster version.`);\n      }\n    },\n\n    checkDBType: function () {\n      if (jhipsterVar.databaseType != 'sql' && jhipsterVar.databaseType != 'mongodb') {\n        this.env.error(chalk.red.bold('ERROR!') + ' I support only SQL or MongoDB databases...\\n');\n      }\n    },\n\n    getEntitityNames: function () {\n      var existingEntities = [],\n      existingEntityChoices = [],\n      existingEntityNames = [];\n      try{\n        existingEntityNames = fs.readdirSync('.jhipster');\n      } catch(e) {\n        this.log(chalk.red.bold('ERROR!') + ' Could not read entities, you might not have generated any entities yet. I will continue to install audit files, entities will not be updated...\\n');\n      }\n\n      existingEntityNames.forEach(function(entry) {\n        if(entry.indexOf('.json') !== -1){\n          var entityName = entry.replace('.json','');\n          existingEntities.push(entityName);\n          existingEntityChoices.push({name: entityName, value: entityName});\n        }\n      });\n      this.existingEntities = existingEntities;\n      this.existingEntityChoices = existingEntityChoices;\n    }\n  },\n\n  prompting: function () {\n    var done = this.async();\n    var prompts = [\n      {\n        type: 'list',\n        name: 'auditFramework',\n        message: 'Choose which audit framework you would like to use.',\n        choices: [\n          {name: 'Custom JHipster auditing (works with SQL)', value: 'custom'},\n          {name: '[BETA] Javers auditing framework (works with SQL and MongoDB)', value: 'javers'}\n        ],\n        default: 'custom'\n      },\n      {\n        type: 'list',\n        name: 'updateType',\n        message: 'Do you want to enable audit for all existing entities?',\n        choices: [\n          {name: 'Yes, update all', value: 'all'},\n          {name: 'No, let me choose the entities to update', value: 'selected'}\n        ],\n        default: 'all'\n      },\n      {\n        type: 'list',\n        name: 'changeDeleteBehavior',\n        message: 'Do you want to change default delete behavior for generated entities?',\n        choices: [\n          {name: 'Yes, update all', value: 'deleteForAll'},\n          {name: 'No, let me choose the entities to update', value: 'deleteForSelected'}\n        ],\n        default: 'deleteForAll'\n      }\n\n      ,{\n        when: function (response) {\n          return response.updateType != 'all';\n        },\n        type: 'checkbox',\n        name: 'entitiesToUpdate',\n        message: 'Please choose the entities to be audited',\n        choices: this.existingEntityChoices,\n        default: 'none'\n      },{\n        type: 'confirm',\n        name: 'auditPage',\n        message: 'Do you want to add an audit log page for entities?',\n        default: true\n      }\n    ];\n\n    if (this.defaultAudit) {\n      this.auditFramework = 'custom'\n      this.updateType = 'all';\n      this.auditPage = true;\n      done();\n    } else if(this.javersAudit) {\n      this.auditFramework = 'javers'\n      this.updateType = 'all';\n      this.auditPage = true;\n      done();\n    } else {\n      this.prompt(prompts, function (props) {\n\n        // Check if an invalid database, auditFramework is selected\n        if (props.auditFramework === 'custom' && jhipsterVar.databaseType === 'mongodb') {\n          this.env.error(chalk.red.bold('ERROR!') + ' The JHipster audit framework supports SQL databases only...\\n');\n        } else if (props.auditFramework === 'javers' && jhipsterVar.databaseType != 'sql' && jhipsterVar.databaseType != 'mongodb'){\n          this.env.error(chalk.red.bold('ERROR!') + ' The Javers audit framework supports only SQL or MongoDB databases...\\n');\n        }\n\n        this.props = props;\n        // To access props later use this.props.someOption;\n        this.auditFramework = props.auditFramework;\n        this.updateType = props.updateType;\n        this.auditPage = props.auditPage;\n        this.entitiesToUpdate = props.entitiesToUpdate;\n        done();\n      }.bind(this));\n    }\n  },\n\n  writing: {\n    updateYeomanConfig : function() {\n      this.config.set('auditFramework', this.auditFramework);\n    },\n\n    setupGlobalVar : function () {\n      this.baseName = jhipsterVar.baseName;\n      this.packageName = jhipsterVar.packageName;\n      this.angularAppName = jhipsterVar.angularAppName;\n      this.frontendBuilder = jhipsterVar.frontendBuilder;\n      this.buildTool = jhipsterVar.buildTool;\n      this.databaseType = jhipsterVar.databaseType;\n      this.devDatabaseType = jhipsterVar.devDatabaseType;\n      this.prodDatabaseType = jhipsterVar.prodDatabaseType;\n      this.enableTranslation = jhipsterVar.enableTranslation;\n      this.changelogDate = jhipsterFunc.dateFormatForLiquibase();\n      this.webappDir = jhipsterVar.webappDir;\n      this.javaTemplateDir = 'src/main/java/package';\n      this.javaDir = jhipsterVar.javaDir;\n      this.resourceDir = jhipsterVar.resourceDir;\n      this.interpolateRegex = /<%=([\\s\\S]+?)%>/g; // so that thymeleaf tags in templates do not get mistreated as _ templates\n      this.copyFiles = function (files) {\n        files.forEach( function(file) {\n          jhipsterFunc.copyTemplate(file.from, file.to, file.type? file.type: TPL, this, file.interpolate? { 'interpolate': file.interpolate } : undefined);\n        }, this);\n      };\n    },\n\n    writeBaseFiles : function () {\n\n      if (this.auditFramework === 'custom') {\n        // collect files to copy\n        var files = [\n          { from: this.javaTemplateDir + '/config/audit/_AsyncEntityAuditEventWriter.java', to: this.javaDir + 'config/audit/AsyncEntityAuditEventWriter.java'},\n          { from: this.javaTemplateDir + '/config/audit/_EntityAuditEventListener.java', to: this.javaDir + 'config/audit/EntityAuditEventListener.java'},\n          { from: this.javaTemplateDir + '/config/audit/_EntityAuditAction.java', to: this.javaDir + 'config/audit/EntityAuditAction.java'},\n          { from: this.javaTemplateDir + '/config/audit/_EntityAuditEventConfig.java', to: this.javaDir + 'config/audit/EntityAuditEventConfig.java'},\n          { from: this.javaTemplateDir + '/domain/_EntityAuditEvent.java', to: this.javaDir + 'domain/EntityAuditEvent.java'},\n          { from: this.javaTemplateDir + '/repository/_EntityAuditEventRepository.java', to: this.javaDir + 'repository/EntityAuditEventRepository.java'},\n          { from: this.javaTemplateDir + '/service/dto/_AbstractAuditingDTO.java', to: this.javaDir + 'service/dto/AbstractAuditingDTO.java'},\n          { from: this.resourceDir + '/config/liquibase/changelog/_EntityAuditEvent.xml',\n                  to: this.resourceDir + 'config/liquibase/changelog/' + this.changelogDate + '_added_entity_EntityAuditEvent.xml', interpolate: this.interpolateRegex }\n        ];\n        this.copyFiles(files);\n        jhipsterFunc.addChangelogToLiquibase(this.changelogDate + '_added_entity_EntityAuditEvent');\n\n        // add the new Listener to the 'AbstractAuditingEntity' class and add import\n        if(!this.fs.read(this.javaDir + 'domain/AbstractAuditingEntity.java', {defaults: ''}).includes('EntityAuditEventListener.class')) {\n          jhipsterFunc.replaceContent(this.javaDir + 'domain/AbstractAuditingEntity.java', 'AuditingEntityListener.class', '{AuditingEntityListener.class, EntityAuditEventListener.class}');\n          jhipsterFunc.rewriteFile(this.javaDir + 'domain/AbstractAuditingEntity.java',\n            'import org.springframework.data.jpa.domain.support.AuditingEntityListener',\n            'import ' + this.packageName + '.config.audit.EntityAuditEventListener;');\n        }\n        // remove the jsonIgnore on the audit fields so that the values can be passed\n        jhipsterFunc.replaceContent(this.javaDir + 'domain/AbstractAuditingEntity.java', '\\s*@JsonIgnore', '', true);\n\n      } else {\n\n        var files = [\n          { from: this.javaTemplateDir + '/config/audit/_JaversAuthorProvider.java', to: this.javaDir + 'config/audit/JaversAuthorProvider.java'},\n          { from: this.javaTemplateDir + '/config/audit/_EntityAuditAction.java', to: this.javaDir + 'config/audit/EntityAuditAction.java'},\n          { from: this.javaTemplateDir + '/domain/_EntityAuditEvent.java', to: this.javaDir + 'domain/EntityAuditEvent.java'}\n        ];\n\n        this.copyFiles(files);\n        //add required third party dependencies\n        if (this.buildTool === 'maven') {\n\n          if (this.databaseType === 'mongodb') {\n             jhipsterFunc.addMavenDependency('org.javers', 'javers-spring-boot-starter-mongo', '2.0.0', '<scope>compile</scope>');\n             jhipsterFunc.addMavenDependency('org.mongodb', 'mongo-java-driver', '3.2.2', '<scope>compile</scope>');\n          } else if (this.databaseType === 'sql') {\n             jhipsterFunc.addMavenDependency('org.javers', 'javers-spring-boot-starter-sql', '2.0.0', '<scope>compile</scope>');\n          }\n\n        } else if (this.buildTool === 'gradle') {\n\n          if (this.databaseType === 'mongodb') {\n            jhipsterFunc.addGradleDependency('compile', 'org.javers', 'javers-spring-boot-starter-mongo', '2.0.0');\n            jhipsterFunc.addGradleDependency('compile', 'org.mongodb', 'mongo-java-driver', '3.2.2');\n          } else if (this.databaseType === 'sql') {\n            jhipsterFunc.addGradleDependency('compile', 'org.javers', 'javers-spring-boot-starter-sql', '2.0.0');\n          }\n\n        }\n      }\n    },\n\n    updateEntityFiles : function () {\n      // Update existing entities to enable audit\n      if (this.updateType == 'all') {\n        this.entitiesToUpdate = this.existingEntities;\n      }\n      if (this.entitiesToUpdate && this.entitiesToUpdate.length > 0 && this.entitiesToUpdate != 'none') {\n        this.log('\\n' + chalk.bold.green('I\\'m Updating selected entities ') + chalk.bold.yellow(this.entitiesToUpdate));\n        this.log('\\n' + chalk.bold.yellow('Make sure these classes does not extend any other class to avoid any errors during compilation.'));\n        var jsonObj = null;\n        this.auditedEntities = [];\n\n        this.entitiesToUpdate.forEach(function(entityName) {\n          this.auditedEntities.push(\"\\\"\" + entityName + \"\\\"\")\n          if (this.auditFramework === 'custom') {\n            // extend entity with AbstractAuditingEntity\n            if(!this.fs.read(this.javaDir + 'domain/' + entityName + '.java', {defaults: ''}).includes('extends AbstractAuditingEntity')) {\n              jhipsterFunc.replaceContent(this.javaDir + 'domain/' + entityName + '.java', 'public class ' + entityName, 'public class ' + entityName + ' extends AbstractAuditingEntity');\n            }\n\n            // extend DTO with AbstractAuditingDTO\n            jsonObj = this.fs.readJSON('.jhipster/' + entityName + '.json')\n            if(jsonObj.dto == 'mapstruct') {\n              if(!this.fs.read(this.javaDir + 'service/dto/' + entityName + 'DTO.java', {defaults: ''}).includes('extends AbstractAuditingDTO')) {\n                jhipsterFunc.replaceContent(this.javaDir + 'service/dto/' + entityName + 'DTO.java', 'public class ' + entityName + 'DTO', 'public class ' + entityName + 'DTO extends AbstractAuditingDTO');\n              }\n            }\n\n            //update liquibase changeset\n            var file = glob.sync(this.resourceDir + \"/config/liquibase/changelog/*_added_entity_\" + entityName + \".xml\")[0];\n            if(file) {\n              var columns = \"<column name=\\\"created_by\\\" type=\\\"varchar(50)\\\">\\n\" +\n              \"                <constraints nullable=\\\"false\\\"/>\\n\" +\n              \"            </column>\\n\" +\n              \"            <column name=\\\"created_date\\\" type=\\\"timestamp\\\" defaultValueDate=\\\"${now}\\\">\\n\" +\n              \"                <constraints nullable=\\\"false\\\"/>\\n\" +\n              \"            </column>\\n\" +\n              \"            <column name=\\\"last_modified_by\\\" type=\\\"varchar(50)\\\"/>\\n\" +\n              \"            <column name=\\\"last_modified_date\\\" type=\\\"timestamp\\\"/>\";\n              jhipsterFunc.addColumnToLiquibaseEntityChangeset(file, columns);\n            }\n          } else {\n\n            // check if repositories are already annotated\n            var auditTableAnnotation = '@JaversSpringDataAuditable';\n            var pattern = new RegExp(auditTableAnnotation, 'g')\n            var content = this.fs.read(this.javaDir + 'repository/' + entityName + 'Repository.java', 'utf8');\n\n            if (!pattern.test(content)) {\n              // add javers annotations to repository\n              if(!this.fs.read(this.javaDir + 'repository/' + entityName + 'Repository.java', {defaults: ''}).includes('@JaversSpringDataAuditable')) {\n                jhipsterFunc.replaceContent(this.javaDir + 'repository/' + entityName + 'Repository.java', 'public interface ' + entityName + 'Repository', '@JaversSpringDataAuditable\\npublic interface ' + entityName + 'Repository');\n                jhipsterFunc.replaceContent(this.javaDir + 'repository/' + entityName + 'Repository.java', 'domain.' + entityName + ';', 'domain.' + entityName + ';\\nimport org.javers.spring.annotation.JaversSpringDataAuditable;');\n              }\n            }\n          }\n        }, this);\n      }\n    },\n\n    writeAuditPageFiles : function () {\n      // Create audit log page for entities\n      if (this.auditPage) {\n        var files = [\n          { from: this.webappDir + 'app/admin/entity-audit/_entity-audits.html', to: this.webappDir + 'app/admin/entity-audit/entity-audits.html'},\n          { from: this.webappDir + 'app/admin/entity-audit/_entity-audit.detail.html', to: this.webappDir + 'app/admin/entity-audit/entity-audit.detail.html'},\n          { from: this.webappDir + 'app/admin/entity-audit/_entity-audit.state.js', to: this.webappDir + 'app/admin/entity-audit/entity-audit.state.js'},\n          { from: this.webappDir + 'app/admin/entity-audit/_entity-audit.controller.js', to: this.webappDir + 'app/admin/entity-audit/entity-audit.controller.js'},\n          { from: this.webappDir + 'app/admin/entity-audit/_entity-audit.detail.controller.js', to: this.webappDir + 'app/admin/entity-audit/entity-audit.detail.controller.js'},\n          { from: this.webappDir + 'app/admin/entity-audit/_entity-audit.service.js', to: this.webappDir + 'app/admin/entity-audit/entity-audit.service.js'}\n        ];\n        if (this.auditFramework === 'custom') {\n          files.push(\n            { from: this.javaTemplateDir + '/web/rest/_EntityAuditResource.java', to: this.javaDir + 'web/rest/EntityAuditResource.java'}\n          );\n        } else {\n          files.push(\n            { from: this.javaTemplateDir + '/web/rest/_JaversEntityAuditResource.java', to: this.javaDir + 'web/rest/JaversEntityAuditResource.java'}\n          );\n        }\n        this.copyFiles(files);\n        // add bower dependency required\n        jhipsterFunc.addBowerDependency('angular-object-diff', '1.0.3');\n        jhipsterFunc.addAngularJsModule('ds.objectDiff');\n        // add new menu entry\n        jhipsterFunc.addElementToAdminMenu('entity-audit', 'list-alt', this.enableTranslation);\n        jhipsterFunc.addTranslationKeyToAllLanguages('entity-audit', 'Entity Audit', 'addAdminElementTranslationKey', this.enableTranslation);\n\n      }\n\n    },\n\n    registering: function () {\n      try {\n        jhipsterFunc.registerModule(\"generator-jhipster-entity-audit\", \"entity\", \"post\", \"entity\", \"Add support for entity audit and audit log page\");\n      } catch (err) {\n        this.log(chalk.red.bold('WARN!') + ' Could not register as a jhipster post entity creation hook...\\n');\n      }\n    },\n  },\n\n  install: function () {\n    var injectDependenciesAndConstants = function () {\n        this.spawnCommand('gulp', ['install']);\n    };\n\n    this.installDependencies({\n      bower: true,\n      npm: false,\n      callback: injectDependenciesAndConstants.bind(this)\n    });\n  },\n\n  end: function () {\n    this.log('\\n' + chalk.bold.green('Auditing enabled for entities, you will have an option to enable audit while creating new entities as well'));\n    this.log('\\n' + chalk.bold.green('I\\'m running gulp install now'));\n  }\n\n\n});\n"]}