Gruntfile.js 4.8 KB

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