showdownjs/showdown

View on GitHub
Gruntfile.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * Created by Tivie on 12-11-2014.
 */

module.exports = function (grunt) {

  if (grunt.option('q') || grunt.option('quiet')) {
    require('quiet-grunt');
  }

  /**
   * Load common tasks for legacy and normal tests
   */
  grunt.loadNpmTasks('grunt-contrib-clean');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-mocha-test');
  grunt.loadNpmTasks('grunt-endline');
  grunt.loadNpmTasks('grunt-contrib-jshint');

  // Project configuration.
  var config = {
    pkg: grunt.file.readJSON('package.json'),

    concat: {
      dist: {
        options: {
          sourceMap: true,
          banner: ';/*! <%= pkg.name %> v <%= pkg.version %> - <%= grunt.template.today("dd-mm-yyyy") %> */\n(function(){\n',
          footer: '}).call(this);\n'
        },
        src: [
          'src/options.js',
          'src/showdown.js',
          'src/helpers.js',
          'src/subParsers/makehtml/*.js',
          'src/subParsers/makemarkdown/*.js',
          'src/converter.js',
          'src/loader.js'
        ],
        dest: 'dist/<%= pkg.name %>.js'
      },
      cli: {
        src: [
          'src/cli/cli.js'
        ],
        dest: 'bin/showdown.js'
      },
      test: {
        src: '<%= concat.dist.src %>',
        dest: '.build/<%= pkg.name %>.js',
        options: {
          sourceMap: false
        }
      }
    },

    clean: ['.build/'],

    uglify: {
      dist: {
        options: {
          sourceMap: true,
          banner: '/*! <%= pkg.name %> v <%= pkg.version %> - <%= grunt.template.today("dd-mm-yyyy") %> */'
        },
        files: {
          'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']
        }
      },
      cli: {
        options: {
          sourceMap: false,
          banner: '#!/usr/bin/env node'
        },
        files: {
          'bin/showdown.js': ['<%= concat.cli.dest %>']
        }
      }
    },

    endline: {
      dist: {
        files: {
          'dist/<%= pkg.name %>.js': 'dist/<%= pkg.name %>.js',
          'dist/<%= pkg.name %>.min.js': 'dist/<%= pkg.name %>.min.js'
        }
      }
    },

    jshint: {
      options: {
        jshintrc: '.jshintrc'
      },
      files: [
        'Gruntfile.js',
        'src/**/*.js',
        'test/**/*.js'
      ]
    },

    eslint: {
      options: {
        overrideConfigFile: '.eslintrc.json'
      },
      target: [
        'Gruntfile.js',
        'src/**/*.js',
        'test/**/*.js'
      ]
    },

    conventionalChangelog: {
      options: {
        changelogOpts: {
          preset: 'angular'
        }
      },
      release: {
        src: 'CHANGELOG.md'
      }
    },

    conventionalGithubReleaser: {
      release: {
        options: {
          auth: {
            type: 'oauth',
            token: process.env.GH_TOEKN
          },
          changelogOpts: {
            preset: 'angular'
          }
        }
      }
    },

    mochaTest: {
      functional: {
        src: 'test/functional/**/*.js',
        options: {
          timeout: 3000,
          ignoreLeaks: true,
          reporter: 'spec',
          require: ['test/bootstrap.js']
        }
      },
      unit: {
        src: 'test/unit/**/*.js',
        options: {
          timeout: 3000,
          ignoreLeaks: true,
          reporter: 'spec',
          require: ['test/bootstrap.js']
        }
      },
      single: {
        options: {
          timeout: 3000,
          ignoreLeaks: false,
          reporter: 'spec',
          require: ['test/bootstrap.js']
        }
      },
      cli: {
        src: 'test/unit/cli.js',
        options: {
          timeout: 3000,
          ignoreLeaks: false,
          reporter: 'spec',
          require: ['test/bootstrap.js']
        }
      }
    }
  };

  grunt.initConfig(config);

  /**
   * Generate Changelog
   */
  grunt.registerTask('generate-changelog', function () {
    'use strict';
    grunt.loadNpmTasks('grunt-conventional-changelog');
    grunt.loadNpmTasks('grunt-conventional-github-releaser');
    grunt.task.run('conventionalChangelog');
  });

  /**
   * Lint tasks
   */
  grunt.registerTask('lint', function () {
    'use strict';
    grunt.loadNpmTasks('grunt-eslint');
    grunt.task.run('jshint', 'eslint');
  });

  /**
   * Performance task
   */
  grunt.registerTask('performancejs', function () {
    'use strict';
    var perf = require('./test/performance/performance.js');
    perf.runTests();
    perf.generateLogs();
  });

  /**
   * Run a single test
   */
  grunt.registerTask('single-test', function (file) {
    'use strict';
    grunt.config.merge({
      mochaTest: {
        single: {
          src: file
        }
      }
    });

    grunt.task.run(['lint', 'concat:test', 'mochaTest:single', 'clean']);
  });

  /**
   * Tasks
   */
  grunt.registerTask('test', ['clean', 'lint', 'concat:test', 'mochaTest:unit', 'mochaTest:functional', 'clean']);
  grunt.registerTask('test-functional', ['concat:test', 'mochaTest:functional', 'clean']);
  grunt.registerTask('test-unit', ['concat:test', 'mochaTest:unit', 'clean']);
  grunt.registerTask('test-cli', ['clean', 'lint', 'concat:test', 'mochaTest:cli', 'clean']);

  grunt.registerTask('performance', ['concat:test', 'performancejs', 'clean']);
  grunt.registerTask('build', ['test', 'concat:dist', 'concat:cli', 'uglify:dist', 'uglify:cli', 'endline']);
  grunt.registerTask('build-without-test', ['concat:dist', 'uglify', 'endline']);
  grunt.registerTask('prep-release', ['build', 'performance', 'generate-changelog']);

  // Default task(s).
  grunt.registerTask('default', ['test']);
};