UNPKG

forerunnerdb

Version:

A NoSQL document store database for browsers and Node.js.

504 lines (423 loc) 12 kB
var util = require('util'), aliasify = require('aliasify'), stringify = require('stringify'), derequire = require('derequire'); module.exports = function(grunt) { //grunt.loadNpmTasks('grunt-contrib-qunit'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks("grunt-browserify"); //grunt.loadNpmTasks('grunt-qunit-blanket-lcov'); grunt.loadNpmTasks('grunt-umd'); grunt.loadNpmTasks('grunt-jsdoc'); grunt.loadNpmTasks('grunt-qunit-istanbul'); grunt.initConfig({ "jshint": { "ForerunnerDB": { "files": { "src": [ "js/lib/**/*.js", '!js/lib/vendor/*.js' ] } }, options: { jshintrc: '.jshintrc' } }, jsdoc : { all : { src: ['./js/lib/*.js'], options: { destination: './doc' } } }, qunit: { "source": { "src": [ "js/unitTests/source.html" ], options: { '--web-security': 'no', coverage: { disposeCollector: true, src: ['js/unitTests/lib/fdb-all.js'], instrumentedFiles: 'temp/', htmlReport: 'coverage/source', coberturaReport: 'coverage//source', linesThresholdPct: 10 } } }, "minified": { "src": [ "js/unitTests/minified.html" ], options: { '--web-security': 'no', coverage: { disposeCollector: true, src: ['js/unitTests/lib/fdb-all.min.js'], instrumentedFiles: 'temp/', htmlReport: 'coverage/minified', coberturaReport: 'coverage/minified', linesThresholdPct: 10 } } } }, "qunit_blanket_lcov": { "lib": { "src": "js/unitTests/lib/fdb-all.js", "options": { "dest": "coverage/fdb-all.lcov", force: true } } }, "browserify": { "all": { src: ["./js/builds/all.js"], dest: "./js/dist/fdb-all.js", options: { verbose: true, debug: true, transform: [aliasify, stringify(['.html'])], plugin: [ [ "browserify-derequire" ] ] } }, "autobind": { src: ["./js/builds/autobind.js"], dest: "./js/dist/fdb-autobind.js", options: { verbose: true, debug: true, transform: [aliasify, stringify(['.html'])], plugin: [ [ "browserify-derequire" ] ] } }, "angular": { src: ["./js/builds/angular.js"], dest: "./js/dist/fdb-angular.js", options: { verbose: true, debug: true, transform: [aliasify, stringify(['.html'])], plugin: [ [ "browserify-derequire" ] ] } }, "infinilist": { src: ["./js/builds/infinilist.js"], dest: "./js/dist/fdb-infinilist.js", options: { verbose: true, debug: true, transform: [aliasify, stringify(['.html'])], plugin: [ [ "browserify-derequire" ] ] } }, "core": { src: ["./js/builds/core.js"], dest: "./js/dist/fdb-core.js", options: { verbose: true, debug: true, transform: [aliasify, stringify(['.html'])], plugin: [ [ "browserify-derequire" ] ] } }, "core+persist": { src: ["./js/builds/core+persist.js"], dest: "./js/dist/fdb-core+persist.js", options: { verbose: true, debug: true, transform: [aliasify, stringify(['.html'])], plugin: [ [ "browserify-derequire" ] ] } }, "core+views": { src: ["./js/builds/core+views.js"], dest: "./js/dist/fdb-core+views.js", options: { verbose: true, debug: true, transform: [aliasify, stringify(['.html'])], plugin: [ [ "browserify-derequire" ] ] } }, "legacy": { src: ["./js/builds/legacy.js"], dest: "./js/dist/fdb-legacy.js", options: { verbose: true, debug: true, transform: [aliasify, stringify(['.html'])], plugin: [ [ "browserify-derequire" ] ] } } }, "uglify": { "all": { "files": { "./js/dist/fdb-all.min.js": ["./js/dist/fdb-all.js"] } }, "autobind": { "files": { "./js/dist/fdb-autobind.min.js": ["./js/dist/fdb-autobind.js"] } }, "angular": { "files": { "./js/dist/fdb-angular.min.js": ["./js/dist/fdb-angular.js"] } }, "infinilist": { "files": { "./js/dist/fdb-infinilist.min.js": ["./js/dist/fdb-infinilist.js"] } }, "core": { "files": { "./js/dist/fdb-core.min.js": ["./js/dist/fdb-core.js"] } }, "core+views": { "files": { "./js/dist/fdb-core+views.min.js": ["./js/dist/fdb-core+views.js"] } }, "core+persist": { "files": { "./js/dist/fdb-core+persist.min.js": ["./js/dist/fdb-core+persist.js"] } }, "legacy": { "files": { "./js/dist/fdb-legacy.min.js": ["./js/dist/fdb-legacy.js"] } } }, umd: { all: { options: { src: './js/dist/fdb-all.js', globalAlias: 'ForerunnerDB' } }, autobind: { options: { src: './js/dist/fdb-autobind.js', globalAlias: 'ForerunnerDB_AutoBind' } }, angular: { options: { src: './js/dist/fdb-angular.js', globalAlias: 'ForerunnerDB_Angular' } }, infinilist: { options: { src: './js/dist/fdb-infinilist.js', globalAlias: 'ForerunnerDB_Infinilist' } }, core: { options: { src: './js/dist/fdb-core.js', globalAlias: 'ForerunnerDB' } }, "core+views": { options: { src: './js/dist/fdb-core+views.js', globalAlias: 'ForerunnerDB' } }, "core+persist": { options: { src: './js/dist/fdb-core+persist.js', globalAlias: 'ForerunnerDB' } }, "legacy": { options: { src: './js/dist/fdb-legacy.js', globalAlias: 'ForerunnerDB' } } } }); grunt.registerTask('postfix', 'Fix code for IE.', function () { var fs = require('fs-extra'); var fixFile = function (file) { var code = fs.readFileSync('./js/dist/' + file, 'utf8'); // Replace code that IE8 will die on code = code.replace(/\.catch\(/g, "['catch']("); code = code.replace(/\.continue\(/g, "['continue']("); code = code.replace(/\.delete\(/g, "['delete']("); // Write changes fs.writeFileSync('./js/dist/' + file, code); // Copy the build file to the tests folder if (fs.existsSync('./js/unitTests/lib/' + file)) { fs.unlinkSync('./js/unitTests/lib/' + file); } fs.copySync('./js/dist/' + file, './js/unitTests/lib/' + file); }; fixFile('fdb-all.js'); fixFile('fdb-core.js'); fixFile('fdb-autobind.js'); fixFile('fdb-angular.js'); fixFile('fdb-infinilist.js'); fixFile('fdb-core+persist.js'); fixFile('fdb-core+views.js'); fixFile('fdb-legacy.js'); }); grunt.registerTask('copy', 'Copy final minified files to other folders.', function () { var fs = require('fs-extra'); var copyFile = function (file) { // Copy the build file to the tests folder if (fs.existsSync('./js/unitTests/lib/' + file)) { fs.unlinkSync('./js/unitTests/lib/' + file); } if (fs.existsSync('./chrome-extension/js/' + file)) { fs.unlinkSync('./chrome-extension/js/' + file); } fs.copySync('./js/dist/' + file, './js/unitTests/lib/' + file); fs.copySync('./js/dist/' + file, './chrome-extension/js/' + file); }; copyFile('fdb-all.min.js'); copyFile('fdb-autobind.min.js'); copyFile('fdb-angular.min.js'); copyFile('fdb-infinilist.min.js'); copyFile('fdb-core.min.js'); copyFile('fdb-core+persist.min.js'); copyFile('fdb-core+views.min.js'); copyFile('fdb-legacy.min.js'); }); grunt.registerTask('version', 'Increments the current version by a revision', function () { var fs = require('fs-extra'), packageJson, versionString, oldVersion, versionArr, revision, fileData; fileData = fs.readFileSync('./package.json', {encoding: 'utf8'}); packageJson = JSON.parse(fileData); versionString = packageJson.version; oldVersion = versionString; versionArr = versionString.split('.'); revision = parseInt(versionArr[2], 10); // Increment revision number revision++; // Create new string versionArr[2] = String(revision); versionString = versionArr.join('.'); // Save JSON fileData = fileData.replace(oldVersion, versionString); fs.writeFileSync('./package.json', fileData); // Search project files for old version and replace fileData = fs.readFileSync('./js/lib/Shared.js', {encoding: 'utf8'}); fileData = fileData.replace(oldVersion, versionString); fs.writeFileSync('./js/lib/Shared.js', fileData); fileData = fs.readFileSync('./readme.md', {encoding: 'utf8'}); fileData = fileData.replace(oldVersion, versionString); fs.writeFileSync('./readme.md', fileData); }); grunt.registerTask('gitCommit', 'Git Commit Updates', function () { "use strict"; var execSync = require('child_process').execSync, fs = require('fs-extra'), child, packageJson, versionString, fileData; fileData = fs.readFileSync('./package.json', {encoding: 'utf8'}); packageJson = JSON.parse(fileData); versionString = packageJson.version; child = execSync('git commit -am "New version build ' + versionString + '"'); }); grunt.registerTask('gitPushAndTagDev', 'Git Push and Tag Dev Build', function () { "use strict"; var execSync = require('child_process').execSync, fs = require('fs-extra'), child, packageJson, versionString, fileData; fileData = fs.readFileSync('./package.json', {encoding: 'utf8'}); packageJson = JSON.parse(fileData); versionString = packageJson.version; child = execSync('git push'); child = execSync('git tag ' + versionString + '-dev'); child = execSync('git push --tags'); }); grunt.registerTask('gitMergeDevIntoMaster', 'Git Merge Dev Into Master', function () { "use strict"; var execSync = require('child_process').execSync, child; child = execSync('git checkout master'); child = execSync('git merge dev'); }); grunt.registerTask('gitPushAndTagMaster', 'Git Push and Tag Master Build', function () { "use strict"; var execSync = require('child_process').execSync, fs = require('fs-extra'), child, packageJson, versionString, fileData; fileData = fs.readFileSync('./package.json', {encoding: 'utf8'}); packageJson = JSON.parse(fileData); versionString = packageJson.version; child = execSync('git push'); child = execSync('git tag ' + versionString); child = execSync('git push --tags'); }); grunt.registerTask('npmPublish', 'NPM Publish New Version', function () { "use strict"; var execSync = require('child_process').execSync; execSync('npm publish'); }); grunt.registerTask('npmPublishDev', 'NPM Publish New Dev Version', function () { "use strict"; var execSync = require('child_process').execSync; execSync('npm publish --tag dev'); }); grunt.registerTask('checkoutMaster', 'Git Checkout Master Branch', function () { "use strict"; var execSync = require('child_process').execSync; execSync('git checkout master'); }); grunt.registerTask('checkoutDev', 'Git Checkout Dev Branch', function () { "use strict"; var execSync = require('child_process').execSync; execSync('git checkout dev'); }); grunt.registerTask("1: Build Source File", ["browserify", "postfix", "copy"]); grunt.registerTask("2: Run Unit Tests", ["copy", "qunit"]); grunt.registerTask("3: Build and Test", ["checkoutDev", "version", "browserify", "postfix", "uglify", "copy", "qunit"]); grunt.registerTask("4: Build, Test, Tag and Push DEV", ["checkoutDev", "version", "jshint", "browserify", "postfix", "uglify", "copy", "qunit", "jsdoc", "gitCommit", "gitPushAndTagDev", "npmPublishDev"]); grunt.registerTask("5: Release and Publish Master Build From Dev", ["checkoutDev", "version", "jshint", "browserify", "postfix", "uglify", "copy", "qunit", "jsdoc", "gitCommit", "gitPushAndTagDev", "gitMergeDevIntoMaster", "gitPushAndTagMaster", "npmPublish", "checkoutDev"]); grunt.registerTask("default", ["qunit"]); };