Gruntfile.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. module.exports = function (grunt) {
  2. function createBanner(fileName) {
  3. return '/*!\n' +
  4. '* ' + fileName + '\n' +
  5. '* http://github.com/RobinHerbots/jquery.inputmask\n' +
  6. '* Copyright (c) 2010 - <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>\n' +
  7. '* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n' +
  8. '* Version: <%= pkg.version %>\n' +
  9. '*/\n';
  10. }
  11. function createUglifyConfig(path) {
  12. var uglifyConfig = {};
  13. var srcFiles = grunt.file.expand(path + "/*.js");
  14. for (var srcNdx in srcFiles) {
  15. var dstFile = srcFiles[srcNdx].replace("js/", ""),
  16. dstFileMin = dstFile.replace(".js", ".min.js");
  17. wrapModuleLoaders(srcFiles[srcNdx], "build/" + dstFile, dstFile.indexOf("extension") == -1 ? ["jquery"] : ["jquery", "./jquery.inputmask"]);
  18. uglifyConfig[dstFile] = {
  19. dest: 'dist/inputmask/' + dstFile,
  20. src: "build/" + dstFile,
  21. options: { banner: createBanner(dstFile), beautify: true, mangle: false, preserveComments: "some", ASCIIOnly: true }
  22. };
  23. uglifyConfig[dstFileMin] = {
  24. dest: 'dist/inputmask/' + dstFileMin,
  25. src: "build/" + dstFile,
  26. options: { banner: createBanner(dstFileMin), preserveComments: "some", ASCIIOnly: true }
  27. };
  28. }
  29. srcFiles = grunt.file.expand(path + "/*.extensions.js");
  30. srcFiles.splice(0, 0, "js/jquery.inputmask.js");
  31. uglifyConfig["inputmaskbundle"] = {
  32. files: {
  33. 'dist/<%= pkg.name %>.bundle.js': srcFiles
  34. },
  35. options: { banner: createBanner('<%= pkg.name %>.bundle'), beautify: true, mangle: false, preserveComments: "some", ASCIIOnly: true }
  36. }
  37. uglifyConfig["inputmaskbundlemin"] = {
  38. files: {
  39. 'dist/<%= pkg.name %>.bundle.min.js': srcFiles
  40. },
  41. options: { banner: createBanner('<%= pkg.name %>.bundle'), preserveComments: "some", ASCIIOnly: true }
  42. }
  43. return uglifyConfig;
  44. }
  45. function wrapModuleLoaders(src, dst, dependencies) {
  46. function stripClosureExecution() {
  47. return srcFile.replace(new RegExp("\\(jQuery\\).*$"), "");
  48. }
  49. function createCommonJsRequires(dependencies) {
  50. var res = [];
  51. dependencies.forEach(function (dep) {
  52. res.push("require('" + dep + "')");
  53. });
  54. return res.join(", ");
  55. }
  56. var srcFile = grunt.file.read(src),
  57. dstContent = "(function (factory) {" +
  58. "if (typeof define === 'function' && define.amd) {" +
  59. "define(" + JSON.stringify(dependencies) + ", factory);" +
  60. "} else if (typeof exports === 'object') {" +
  61. "module.exports = factory(" + createCommonJsRequires(dependencies) + ");" +
  62. "} else {" +
  63. "factory(jQuery);" +
  64. "}}\n" + stripClosureExecution() + ");";
  65. grunt.file.write(dst, dstContent);
  66. }
  67. // Project configuration.
  68. grunt.initConfig({
  69. pkg: grunt.file.readJSON('package.json'),
  70. uglify: createUglifyConfig("js"),
  71. clean: ["dist"],
  72. qunit: {
  73. files: ['qunit/qunit.html']
  74. },
  75. bump: {
  76. options: {
  77. files: ['package.json', 'bower.json', 'composer.json', 'component.json'],
  78. updateConfigs: ['pkg'],
  79. commit: false,
  80. createTag: false,
  81. push: false
  82. }
  83. },
  84. release: {
  85. options: {
  86. bump: false,
  87. commitMessage: 'jquery.inputmask <%= version %>'
  88. }
  89. },
  90. nugetpack: {
  91. dist: {
  92. src: function () { return process.platform === "linux" ? 'nuget/jquery.inputmask.linux.nuspec' : 'nuget/jquery.inputmask.nuspec'; }(),
  93. dest: 'dist/',
  94. options: {
  95. version: '<%= pkg.version %>'
  96. }
  97. }
  98. },
  99. nugetpush: {
  100. dist: {
  101. src: 'dist/jQuery.InputMask.<%= pkg.version %>.nupkg'
  102. }
  103. },
  104. shell: {
  105. options: {
  106. stderr: false
  107. },
  108. gitcommitchanges: {
  109. command: ['git add .',
  110. 'git reset -- package.json',
  111. 'git commit -m "jquery.inputmask <%= pkg.version %>"'
  112. ].join('&&')
  113. }
  114. }
  115. });
  116. // Load the plugin that provides the tasks.
  117. grunt.loadNpmTasks('grunt-contrib-uglify');
  118. grunt.loadNpmTasks('grunt-contrib-clean');
  119. grunt.loadNpmTasks('grunt-contrib-qunit');
  120. grunt.loadNpmTasks('grunt-bump');
  121. grunt.loadNpmTasks('grunt-release');
  122. grunt.loadNpmTasks('grunt-nuget');
  123. grunt.loadNpmTasks('grunt-shell');
  124. grunt.registerTask('publish:patch', ['clean', 'bump:patch', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  125. grunt.registerTask('publish:minor', ['clean', 'bump:minor', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  126. grunt.registerTask('publish:major', ['clean', 'bump:major', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  127. // Default task(s).
  128. grunt.registerTask('default', ['bump:prerelease','clean', 'uglify']);
  129. };