kristerkari/placekeeper

View on GitHub
gulpfile.babel.js

Summary

Maintainability
A
1 hr
Test Coverage
(function() {
  "use strict"

  const path = require("path")
  const gulp = require("gulp")
  const jscs = require("gulp-jscs")
  const eslint = require("gulp-eslint")
  const connect = require("gulp-connect")
  const { Server } = require("karma")
  const uglify = require("gulp-uglify")
  const rename = require("gulp-rename")
  const sizereport = require("gulp-sizereport")
  const rollup = require("gulp-rollup")
  const babel = require("rollup-plugin-babel")
  const dereserve = require("gulp-dereserve")

  const adapters = [
    "jquery",
    "prototype",
    "yui3"
  ]

  gulp.task("server", () => {
    connect.server({
      root: ["test/manual", "."],
      livereload: true
    })
  })

  gulp.task("source", () => {
    return gulp.src([
      "src/module.js"
    ])
    .pipe(rollup({
      plugins: [
        babel()
      ],
      format: "iife",
      sourceMap: false
    }))
    .pipe(dereserve())
    .pipe(jscs({
      fix: true
    }))
    .pipe(eslint({
      useEslintrc: true,
      fix: true,
      rules: {
        semi: [2, "always"]
      }
    }))
    .pipe(rename({
      basename: "placekeeper"
    }))
    .pipe(gulp.dest("dist"))
    .pipe(uglify({
      mangle: true
    }))
    .pipe(rename({
      extname: ".min.js"
    }))
    .pipe(gulp.dest("dist"))
  })

  function buildAdapter(adapter) {
    return gulp.src([
      "src/adapters/module." + adapter + ".js"
    ])
    .pipe(rollup({
      plugins: [
        babel()
      ],
      format: "iife",
      sourceMap: false
    }))
    .pipe(dereserve())
    .pipe(jscs({
      fix: true
    }))
    .pipe(eslint({
      useEslintrc: true,
      fix: true,
      rules: {
        semi: [2, "always"]
      }
    }))
    .pipe(rename({
      basename: "placekeeper." + adapter
    }))
    .pipe(gulp.dest("dist"))
    .pipe(uglify({
      mangle: true
    }))
    .pipe(rename({
      extname: ".min.js"
    }))
    .pipe(gulp.dest("dist"))
  }

  gulp.task("adapters", ["source"], () => {
    return adapters.forEach(buildAdapter)
  })

  gulp.task("build", ["source", "adapters"])

  gulp.task("eslint", () => {
    return gulp.src(["src/**/*.js", "test/unit/*.spec.js"])
               .pipe(eslint({
                 useEslintrc: true
               }))
               .pipe(eslint.format())
               .pipe(eslint.failAfterError())
  })

  gulp.task("jscs", () => {
    return gulp.src(["src/**/*.js", "test/unit/*.spec.js"])
               .pipe(jscs())
               .pipe(jscs.reporter())
  })

  gulp.task("lint", ["eslint", "jscs"])

  gulp.task("default", ["lint"])

  gulp.task("test", (done) => {
    new Server({
      configFile: path.join(__dirname, "/config/karma.conf.js"),
      singleRun: true
    }, done).start()
  })

  gulp.task("tdd", (done) => {
    new Server({
      configFile: path.join(__dirname, "/config/karma.conf.js"),
      singleRun: false,
      autoWatch: true
    }, done).start()
  })

  gulp.task("size", () => {
    return gulp.src("./dist/*")
              .pipe(sizereport({
                gzip: true
              }))
  })

}())