module.exports = function (grunt) { function createBanner(fileName) { return "/*!\n" + "* " + fileName + "\n" + "* <%= pkg.homepage %>\n" + "* Copyright (c) 2010 - <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>\n" + "* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n" + "* Version: <%= pkg.version %>\n" + "*/\n"; } function createUglifyConfig(path) { function replacer(match, p1, p2, p3, offset, string) { // p1 is nondigits, p2 digits, and p3 non-alphanumerics return [p1, p2, p3].join(''); } function stripModuleLoaders(src, dst) { var srcFile = grunt.file.read(src); if (src.indexOf("inputmask.config") === -1) { var fileMatches = srcFile.match("(\\(function\\s?\\(factory\\)\\s*{)[\\s\\S]*else {\\s*([\\s\\S]*)\\s*}[\\s\\S]*(}\\s*\\(function[\\s\\S]*)"); if (fileMatches && fileMatches.length === 4) srcFile = fileMatches[1] + fileMatches[2] + fileMatches[3]; // if (src.indexOf("extensions") === -1 && src.indexOf("jquery.inputmask") === -1) { // srcFile = srcFile.replace(new RegExp("\\}\\)\\);[\\s]*$"), "})(jQuery);"); // } else srcFile = srcFile.replace(new RegExp("\\}\\)\\);[\\s]*$"), "})(jQuery, Inputmask);"); } grunt.file.write(dst, srcFile); } var uglifyConfig = {}; var srcFiles = grunt.file.expand(path + "/**/*.js"); for (var srcNdx in srcFiles) { var dstFile = srcFiles[srcNdx].replace("js/", ""), dstFileMin = dstFile.replace(".js", ".min.js"); uglifyConfig[dstFile] = { dest: 'dist/inputmask/' + dstFile, src: srcFiles[srcNdx], options: { banner: createBanner(dstFile), beautify: true, mangle: false, preserveComments: false, ASCIIOnly: true } }; uglifyConfig[dstFileMin] = { dest: "dist/min/inputmask/" + dstFileMin, src: srcFiles[srcNdx], options: { banner: createBanner(dstFileMin), preserveComments: false, ASCIIOnly: true } }; stripModuleLoaders("js/" + dstFile, "build/" + dstFile); } srcFiles = grunt.file.expand("build/*.extensions.js"); srcFiles.splice(0, 0, "build/jquery.inputmask.js"); srcFiles.splice(0, 0, "build/inputmask.js"); uglifyConfig["bundle"] = { dest: "dist/jquery.inputmask.bundle.js", src: srcFiles, options: { banner: createBanner("jquery.inputmask.bundle.js"), beautify: true, mangle: false, preserveComments: false, ASCIIOnly: true } }; uglifyConfig["bundlemin"] = { dest: "dist/min/jquery.inputmask.bundle.min.js", src: srcFiles, options: { banner: createBanner("jquery.inputmask.bundle.js"), preserveComments: false, ASCIIOnly: true } }; return uglifyConfig; } // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON("package.json"), uglify: createUglifyConfig("js"), clean: ["dist"], karma: { options: { configFile: 'karma.conf.js' }, unit: { runnerPort: 9999, singleRun: true, browsers: ["Chrome"], //will later add extra test targets logLevel: 'ERROR' } }, bump: { options: { files: ['package.json', 'bower.json', 'composer.json', 'component.json'], updateConfigs: ['pkg'], commit: false, createTag: false, push: false } }, release: { options: { bump: false, commitMessage: 'Inputmask <%= version %>' } }, nugetpack: { dist: { src: function () { return 'nuspecs/Inputmask.nuspec'; }(), dest: 'dist/', options: { version: '<%= pkg.version %>' } } }, nugetpush: { dist: { src: 'dist/InputMask.<%= pkg.version %>.nupkg', options: { source: "https://www.nuget.org" } } }, shell: { options: { stderr: false }, gitcommitchanges: { command: ['git add .', 'git reset -- package.json', 'git commit -m "Inputmask <%= pkg.version %>"' ].join('&&') } }, eslint: { target: "{extra/*,js}/*.js" }, availabletasks: { tasks: { options: { filter: 'exclude', tasks: ['availabletasks', 'default', 'updateDistConfig'], showTasks: ['user'] } } } }); // Load the plugin that provides the tasks. require('load-grunt-tasks')(grunt); grunt.registerTask('publish:patch', ['clean', 'bump:patch', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']); grunt.registerTask('publish:minor', ['clean', 'bump:minor', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']); grunt.registerTask('publish:major', ['clean', 'bump:major', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']); grunt.registerTask('validate', ['eslint', 'karma']); grunt.registerTask('build', ['bump:prerelease', 'clean', 'uglify']); grunt.registerTask('default', ["availabletasks"]); };