Gruntfile.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  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. function stripModuleLoaders(src, dst) {
  13. var srcFile = grunt.file.read(src);
  14. srcFile = srcFile.replace(new RegExp("\\(function\\(factory\\)[\\s\\S]*\\(function\\(\\$"), "(function($");
  15. if (src.indexOf("extensions") === -1 && src.indexOf("jquery.inputmask") === -1) {
  16. srcFile = srcFile.replace(new RegExp("\\}\\)\\);[\\s]*$"), "})(jQuery);");
  17. } else srcFile = srcFile.replace(new RegExp("\\}\\)\\);[\\s]*$"), "})(jQuery, Inputmask);");
  18. grunt.file.write(dst, srcFile);
  19. }
  20. var uglifyConfig = {};
  21. var srcFiles = grunt.file.expand(path + "/*.js");
  22. for (var srcNdx in srcFiles) {
  23. var dstFile = srcFiles[srcNdx].replace("js/", ""),
  24. dstFileMin = dstFile.replace(".js", ".min.js");
  25. uglifyConfig[dstFile] = {
  26. dest: 'dist/inputmask/' + dstFile,
  27. src: srcFiles[srcNdx],
  28. options: {
  29. banner: createBanner(dstFile),
  30. beautify: true,
  31. mangle: false,
  32. preserveComments: "some",
  33. ASCIIOnly: true
  34. }
  35. };
  36. uglifyConfig[dstFileMin] = {
  37. dest: "dist/min/inputmask/" + dstFileMin,
  38. src: srcFiles[srcNdx],
  39. options: {
  40. banner: createBanner(dstFileMin),
  41. preserveComments: "some",
  42. ASCIIOnly: true
  43. }
  44. };
  45. stripModuleLoaders("js/" + dstFile, "build/" + dstFile);
  46. }
  47. srcFiles = grunt.file.expand("build/*.extensions.js");
  48. srcFiles.splice(0, 0, "build/jquery.inputmask.js");
  49. srcFiles.splice(0, 0, "build/inputmask.js");
  50. uglifyConfig["bundle"] = {
  51. dest: "dist/jquery.inputmask.bundle.js",
  52. src: srcFiles,
  53. options: {
  54. banner: createBanner("jquery.inputmask.bundle.js"),
  55. beautify: true,
  56. mangle: false,
  57. preserveComments: "some",
  58. ASCIIOnly: true
  59. }
  60. };
  61. uglifyConfig["bundlemin"] = {
  62. dest: "dist/min/jquery.inputmask.bundle.min.js",
  63. src: srcFiles,
  64. options: {
  65. banner: createBanner("jquery.inputmask.bundle.js"),
  66. preserveComments: "some",
  67. ASCIIOnly: true
  68. }
  69. };
  70. return uglifyConfig;
  71. }
  72. // Project configuration.
  73. grunt.initConfig({
  74. pkg: grunt.file.readJSON("package.json"),
  75. uglify: createUglifyConfig("js"),
  76. clean: ["dist"],
  77. karma: {
  78. options: {
  79. configFile: 'karma.conf.js'
  80. },
  81. unit: {
  82. runnerPort: 9999,
  83. singleRun: true,
  84. browsers: ["Chrome"], //will later add extra test targets
  85. logLevel: 'ERROR'
  86. }
  87. },
  88. bump: {
  89. options: {
  90. files: ['package.json', 'bower.json', 'composer.json', 'component.json'],
  91. updateConfigs: ['pkg'],
  92. commit: false,
  93. createTag: false,
  94. push: false
  95. }
  96. },
  97. release: {
  98. options: {
  99. bump: false,
  100. commitMessage: 'jquery.inputmask <%= version %>'
  101. }
  102. },
  103. nugetpack: {
  104. dist: {
  105. src: function() {
  106. return process.platform === "linux" ? 'nuspecs/jquery.inputmask.linux.nuspec' : 'nuspecs/jquery.inputmask.nuspec';
  107. }(),
  108. dest: 'dist/',
  109. options: {
  110. version: '<%= pkg.version %>'
  111. }
  112. }
  113. },
  114. nugetpush: {
  115. dist: {
  116. src: 'dist/jQuery.InputMask.<%= pkg.version %>.nupkg',
  117. options: {
  118. source: "https://www.nuget.org"
  119. }
  120. }
  121. },
  122. shell: {
  123. options: {
  124. stderr: false
  125. },
  126. gitcommitchanges: {
  127. command: ['git add .',
  128. 'git reset -- package.json',
  129. 'git commit -m "jquery.inputmask <%= pkg.version %>"'
  130. ].join('&&')
  131. }
  132. },
  133. eslint: {
  134. target: grunt.file.expand("js/*.js")
  135. },
  136. availabletasks: {
  137. tasks: {
  138. options: {
  139. filter: 'exclude',
  140. tasks: ['availabletasks', 'default'],
  141. showTasks: ['user']
  142. }
  143. }
  144. },
  145. browserify: {
  146. dist: {
  147. dest: 'build/browserify.bundle.js',
  148. src: [],
  149. options: {
  150. require: ["./"]
  151. }
  152. }
  153. }
  154. });
  155. // Load the plugin that provides the tasks.
  156. require('load-grunt-tasks')(grunt);
  157. grunt.registerTask('publish:patch', ['clean', 'bump:patch', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  158. grunt.registerTask('publish:minor', ['clean', 'bump:minor', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  159. grunt.registerTask('publish:major', ['clean', 'bump:major', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  160. grunt.registerTask('validate', ['eslint', 'browserify', 'karma']);
  161. grunt.registerTask('build', ['bump:prerelease', 'clean', 'uglify']);
  162. grunt.registerTask('default', ["availabletasks"]);
  163. };