grunt.registerTask('npmShrinkwrap', 'Create an npm-shrinkwrap.json file', function (dev) {
    var done = this.async();
    var options = this.options();

    var isDev = !!options.dev || (dev === 'dev');

    npmShrinkwrap({
      dirname: process.cwd(),
      dev: isDev
    }).then(function (optionalWarnings) {
      var msg = (isDev) ? '(with devDependencies)' : '';
      grunt.log.subhead('wrote npm-shrinkwrap.json %s', msg);

      optionalWarnings.forEach(function (warning) {
        grunt.log.writeln(warning.message);
      });
    }).then(function () {
      if (!!options.lint) {
        grunt.log.subhead('validating npm-shrinkwrap.json against nodesecurity.io');
        grunt.option('force', true);
        grunt.task.run('validate-shrinkwrap');
      }
    }).then(done).catch(function (err) {
      grunt.log.error(err.toString());
      done(false);
    });
  });
Example #2
0
 grunt.registerTask('_update-shrinkwrap', function () {
   var done = this.async();
   npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) {
     if (err) {
       grunt.fail.warn(err);
     }
     var dest = 'test-infra/npm-shrinkwrap.json';
     fs.renameSync('npm-shrinkwrap.json', dest);
     grunt.log.writeln('File ' + dest.cyan + ' updated.');
     done();
   });
 });
Example #3
0
 function() {
     var done = this.async();
     npmShrinkwrap({ dev: true, dirname: __dirname },
         function(err) {
             if (err) {
                 grunt.fail.warn(err);
             }
             var dest = "test-infra/npm-shrinkwrap.json";
             fs.renameSync("npm-shrinkwrap.json", dest);
             grunt.log.writeln("File " + dest.cyan + " updated.");
             done();
         });
 });
module.exports=function(e){e.util.linefeed="\n",RegExp.quote=function(e){return e.replace(/[-\\^$*+?.()|[\]{}]/g,"\\$&")};var t=require("fs"),n=require("path"),r=require("npm-shrinkwrap"),i=require("./grunt/bs-glyphicons-data-generator.js"),s=require("./grunt/bs-lessdoc-parser.js"),o=require("./grunt/bs-raw-files-generator.js");e.initConfig({pkg:e.file.readJSON("package.json"),banner:'/*!\n * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n */\n',jqueryCheck:"if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\\'s JavaScript requires jQuery') }\n\n",clean:{dist:["dist","docs/dist"]},jshint:{options:{jshintrc:"js/.jshintrc"},grunt:{options:{jshintrc:"grunt/.jshintrc"},src:["Gruntfile.js","grunt/*.js"]},src:{src:"js/*.js"},test:{options:{jshintrc:"js/tests/unit/.jshintrc"},src:"js/tests/unit/*.js"},assets:{src:["docs/assets/js/_src/*.js","docs/assets/js/*.js","!docs/assets/js/*.min.js"]}},jscs:{options:{config:"js/.jscsrc"},grunt:{src:"<%= jshint.grunt.src %>"},src:{src:"<%= jshint.src.src %>"},test:{src:"<%= jshint.test.src %>"},assets:{options:{requireCamelCaseOrUpperCaseIdentifiers:null},src:"<%= jshint.assets.src %>"}},concat:{options:{banner:"<%= banner %>\n<%= jqueryCheck %>",stripBanners:!1},bootstrap:{src:["js/transition.js","js/alert.js","js/button.js","js/carousel.js","js/collapse.js","js/dropdown.js","js/modal.js","js/tooltip.js","js/popover.js","js/scrollspy.js","js/tab.js","js/affix.js"],dest:"dist/js/<%= pkg.name %>.js"}},uglify:{options:{preserveComments:"some"},bootstrap:{src:"<%= concat.bootstrap.dest %>",dest:"dist/js/<%= pkg.name %>.min.js"},customize:{src:["docs/assets/js/_vendor/less.min.js","docs/assets/js/_vendor/jszip.min.js","docs/assets/js/_vendor/uglify.min.js","docs/assets/js/_vendor/blob.js","docs/assets/js/_vendor/filesaver.js","docs/assets/js/raw-files.min.js","docs/assets/js/_src/customizer.js"],dest:"docs/assets/js/customize.min.js"},docsJs:{src:["docs/assets/js/_vendor/holder.js","docs/assets/js/_vendor/ZeroClipboard.min.js","docs/assets/js/_src/application.js"],dest:"docs/assets/js/docs.min.js"}},qunit:{options:{inject:"js/tests/unit/phantom.js"},files:"js/tests/index.html"},less:{compileCore:{options:{strictMath:!0,sourceMap:!0,outputSourceFiles:!0,sourceMapURL:"<%= pkg.name %>.css.map",sourceMapFilename:"dist/css/<%= pkg.name %>.css.map"},files:{"dist/css/<%= pkg.name %>.css":"less/bootstrap.less"}},compileTheme:{options:{strictMath:!0,sourceMap:!0,outputSourceFiles:!0,sourceMapURL:"<%= pkg.name %>-theme.css.map",sourceMapFilename:"dist/css/<%= pkg.name %>-theme.css.map"},files:{"dist/css/<%= pkg.name %>-theme.css":"less/theme.less"}}},autoprefixer:{options:{browsers:["Android 2.3","Android >= 4","Chrome >= 20","Firefox >= 24","Explorer >= 8","iOS >= 6","Opera >= 12","Safari >= 6"]},core:{options:{map:!0},src:"dist/css/<%= pkg.name %>.css"},theme:{options:{map:!0},src:"dist/css/<%= pkg.name %>-theme.css"},docs:{src:"docs/assets/css/_src/docs.css"},examples:{expand:!0,cwd:"docs/examples/",src:["**/*.css"],dest:"docs/examples/"}},csslint:{options:{csslintrc:"less/.csslintrc"},src:["dist/css/bootstrap.css","dist/css/bootstrap-theme.css"],examples:["docs/examples/**/*.css"],docs:{options:{ids:!1,"overqualified-elements":!1},src:"docs/assets/css/_src/docs.css"}},cssmin:{options:{compatibility:"ie8",keepSpecialComments:"*",noAdvanced:!0},core:{files:{"dist/css/<%= pkg.name %>.min.css":"dist/css/<%= pkg.name %>.css","dist/css/<%= pkg.name %>-theme.min.css":"dist/css/<%= pkg.name %>-theme.css"}},docs:{src:["docs/assets/css/_src/docs.css","docs/assets/css/_src/pygments-manni.css"],dest:"docs/assets/css/docs.min.css"}},usebanner:{options:{position:"top",banner:"<%= banner %>"},files:{src:"dist/css/*.css"}},csscomb:{options:{config:"less/.csscomb.json"},dist:{expand:!0,cwd:"dist/css/",src:["*.css","!*.min.css"],dest:"dist/css/"},examples:{expand:!0,cwd:"docs/examples/",src:"**/*.css",dest:"docs/examples/"},docs:{files:{"docs/assets/css/_src/docs.css":"docs/assets/css/_src/docs.css"}}},copy:{fonts:{expand:!0,src:"fonts/*",dest:"dist/"},docs:{expand:!0,cwd:"./dist",src:["{css,js}/*.min.*","css/*.map","fonts/*"],dest:"docs/dist"}},connect:{server:{options:{port:3e3,base:"."}}},jekyll:{docs:{}},jade:{compile:{options:{pretty:!0,data:function(){var e=n.join(__dirname,"less/variables.less"),r=t.readFileSync(e,{encoding:"utf8"}),i=new s(r);return{sections:i.parseFile()}}},files:{"docs/_includes/customizer-variables.html":"docs/_jade/customizer-variables.jade","docs/_includes/nav/customize.html":"docs/_jade/customizer-nav.jade"}}},validation:{options:{charset:"utf-8",doctype:"HTML5",failHard:!0,reset:!0,relaxerror:["Bad value X-UA-Compatible for attribute http-equiv on element meta.","Element img is missing required attribute src."]},files:{src:"_gh_pages/**/*.html"}},watch:{src:{files:"<%= jshint.src.src %>",tasks:["jshint:src","qunit"]},test:{files:"<%= jshint.test.src %>",tasks:["jshint:test","qunit"]},less:{files:"less/*.less",tasks:"less"}},sed:{versionNumber:{pattern:function(){var t=e.option("oldver");return t?RegExp.quote(t):t}(),replacement:e.option("newver"),recursive:!0}},"saucelabs-qunit":{all:{options:{build:process.env.TRAVIS_JOB_ID,concurrency:10,maxRetries:3,urls:["http://127.0.0.1:3000/js/tests/index.html"],browsers:e.file.readYAML("grunt/sauce_browsers.yml")}}},exec:{npmUpdate:{command:"npm update"}}}),require("load-grunt-tasks")(e,{scope:"devDependencies"}),require("time-grunt")(e),e.registerTask("validate-html",["jekyll","validation"]);var u=function(e){return!process.env.TWBS_TEST||process.env.TWBS_TEST===e},a=function(e){return e===undefined||e!=="0"},f=[];u("core")&&(f=f.concat(["dist-css","csslint","jshint","jscs","qunit","build-customizer-html"])),u("validate-html")&&a(process.env.TWBS_DO_VALIDATOR)&&f.push("validate-html"),typeof process.env.SAUCE_ACCESS_KEY!="undefined"&&u("sauce-js-unit")&&a(process.env.TWBS_DO_SAUCE)&&(f.push("connect"),f.push("saucelabs-qunit")),e.registerTask("test",f),e.registerTask("dist-js",["concat","uglify"]),e.registerTask("less-compile",["less:compileCore","less:compileTheme"]),e.registerTask("dist-css",["less-compile","autoprefixer","usebanner","csscomb","cssmin"]),e.registerTask("dist-docs","copy:docs"),e.registerTask("dist",["clean","dist-css","copy:fonts","dist-js","dist-docs"]),e.registerTask("default",["test","dist","build-glyphicons-data","build-customizer"]),e.registerTask("change-version-number","sed"),e.registerTask("build-glyphicons-data",function(){i.call(this,e)}),e.registerTask("build-customizer",["build-customizer-html","build-raw-files"]),e.registerTask("build-customizer-html","jade"),e.registerTask("build-raw-files","Add scripts/less files to customizer.",function(){var t=e.template.process("<%= banner %>");o(e,t)}),e.registerTask("update-shrinkwrap",["exec:npmUpdate","_update-shrinkwrap"]),e.registerTask("_update-shrinkwrap",function(){var n=this.async();r({dev:!0,dirname:__dirname},function(r){r&&e.fail.warn(r);var i="test-infra/npm-shrinkwrap.json";t.renameSync("npm-shrinkwrap.json",i),e.log.writeln("File "+i.cyan+" updated."),n()})})};
Example #5
0
module.exports=function(n){"use strict";n.util.linefeed="\n";RegExp.quote=function(n){return n.replace(/[-\\^$*+?.()|[\]{}]/g,"\\$&")};var r=require("fs"),u=require("path"),e=require("npm-shrinkwrap"),o=require("./grunt/bs-glyphicons-data-generator.js"),s=require("./grunt/bs-lessdoc-parser.js"),h=function(){var n=u.join(__dirname,"less/variables.less"),t=r.readFileSync(n,{encoding:"utf8"}),i=new s(t);return{sections:i.parseFile()}},c=require("./grunt/bs-raw-files-generator.js"),l=require("./grunt/bs-commonjs-generator.js"),t=n.file.readJSON("./grunt/configBridge.json",{encoding:"utf8"});Object.keys(t.paths).forEach(function(n){t.paths[n].forEach(function(n,t,i){i[t]=u.join("./docs/assets",n)})});n.initConfig({pkg:n.file.readJSON("package.json"),banner:"/*!\n"+" * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n"+' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n'+" * Licensed under the <%= pkg.license %> license\n"+" */\n",jqueryCheck:t.config.jqueryCheck.join("\n"),jqueryVersionCheck:t.config.jqueryVersionCheck.join("\n"),clean:{dist:"dist",docs:"docs/dist"},jshint:{options:{jshintrc:"js/.jshintrc"},grunt:{options:{jshintrc:"grunt/.jshintrc"},src:["Gruntfile.js","package.js","grunt/*.js"]},core:{src:"js/*.js"},test:{options:{jshintrc:"js/tests/unit/.jshintrc"},src:"js/tests/unit/*.js"},assets:{src:["docs/assets/js/src/*.js","docs/assets/js/*.js","!docs/assets/js/*.min.js"]}},jscs:{options:{config:"js/.jscsrc"},grunt:{src:"<%= jshint.grunt.src %>"},core:{src:"<%= jshint.core.src %>"},test:{src:"<%= jshint.test.src %>"},assets:{options:{requireCamelCaseOrUpperCaseIdentifiers:null},src:"<%= jshint.assets.src %>"}},concat:{options:{banner:"<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>",stripBanners:!1},bootstrap:{src:["js/transition.js","js/alert.js","js/button.js","js/carousel.js","js/collapse.js","js/dropdown.js","js/modal.js","js/tooltip.js","js/popover.js","js/scrollspy.js","js/tab.js","js/affix.js"],dest:"dist/js/<%= pkg.name %>.js"}},uglify:{options:{compress:{warnings:!1},mangle:!0,preserveComments:"some"},core:{src:"<%= concat.bootstrap.dest %>",dest:"dist/js/<%= pkg.name %>.min.js"},customize:{src:t.paths.customizerJs,dest:"docs/assets/js/customize.min.js"},docsJs:{src:t.paths.docsJs,dest:"docs/assets/js/docs.min.js"}},qunit:{options:{inject:"js/tests/unit/phantom.js"},files:"js/tests/index.html"},less:{compileCore:{options:{strictMath:!0,sourceMap:!0,outputSourceFiles:!0,sourceMapURL:"<%= pkg.name %>.css.map",sourceMapFilename:"dist/css/<%= pkg.name %>.css.map"},src:"less/bootstrap.less",dest:"dist/css/<%= pkg.name %>.css"},compileTheme:{options:{strictMath:!0,sourceMap:!0,outputSourceFiles:!0,sourceMapURL:"<%= pkg.name %>-theme.css.map",sourceMapFilename:"dist/css/<%= pkg.name %>-theme.css.map"},src:"less/theme.less",dest:"dist/css/<%= pkg.name %>-theme.css"},rtl:{options:{strictMath:!0,cleancss:!1,sourceMap:!0,outputSourceFiles:!0,sourceMapURL:"<%= pkg.name %>-rtl.css.map",sourceMapFilename:"dist/css/<%= pkg.name %>-rtl.css.map"},src:"less/bootstrap-rtl.less",dest:"dist/css/<%= pkg.name %>.rtl.css"},flipped:{options:{strictMath:!0,cleancss:!1,sourceMap:!0,outputSourceFiles:!0,sourceMapURL:"<%= pkg.name %>-flipped.css.map",sourceMapFilename:"dist/css/bootstrap-flipped.css.map"},files:{"dist/css/bootstrap-flipped.css":"less/bootstrap-flipped.less"}}},autoprefixer:{options:{browsers:t.config.autoprefixerBrowsers},core:{options:{map:!0},src:"dist/css/<%= pkg.name %>.css"},theme:{options:{map:!0},src:"dist/css/<%= pkg.name %>-theme.css"},docs:{src:["docs/assets/css/src/docs.css"]},examples:{expand:!0,cwd:"docs/examples/",src:["**/*.css"],dest:"docs/examples/"}},csslint:{options:{csslintrc:"less/.csslintrc"},dist:["dist/css/bootstrap.css","dist/css/bootstrap-theme.css"],examples:["docs/examples/**/*.css"],docs:{options:{ids:!1,"overqualified-elements":!1},src:"docs/assets/css/src/docs.css"}},cssmin:{options:{compatibility:"ie8",keepSpecialComments:"*",sourceMap:!0,advanced:!1},minifyCore:{src:"dist/css/<%= pkg.name %>.css",dest:"dist/css/<%= pkg.name %>.min.css"},minifyTheme:{src:"dist/css/<%= pkg.name %>-theme.css",dest:"dist/css/<%= pkg.name %>-theme.min.css"},docs:{src:["docs/assets/css/ie10-viewport-bug-workaround.css","docs/assets/css/src/pygments-manni.css","docs/assets/css/src/docs.css"],dest:"docs/assets/css/docs.min.css"}},csscomb:{options:{config:"less/.csscomb.json"},dist:{expand:!0,cwd:"dist/css/",src:["*.css","!*.min.css"],dest:"dist/css/"},examples:{expand:!0,cwd:"docs/examples/",src:"**/*.css",dest:"docs/examples/"},docs:{src:"docs/assets/css/src/docs.css",dest:"docs/assets/css/src/docs.css"}},copy:{fonts:{expand:!0,src:"fonts/*",dest:"dist/"},docs:{expand:!0,cwd:"dist/",src:["**/*"],dest:"docs/dist/"}},connect:{server:{options:{port:3e3,base:"."}}},jekyll:{options:{config:"_config.yml"},docs:{},github:{options:{raw:"github: true"}}},htmlmin:{dist:{options:{collapseWhitespace:!0,conservativeCollapse:!0,minifyCSS:!0,minifyJS:!0,removeAttributeQuotes:!0,removeComments:!0},expand:!0,cwd:"_gh_pages",dest:"_gh_pages",src:["**/*.html","!examples/**/*.html"]}},jade:{options:{pretty:!0,data:h},customizerVars:{src:"docs/_jade/customizer-variables.jade",dest:"docs/_includes/customizer-variables.html"},customizerNav:{src:"docs/_jade/customizer-nav.jade",dest:"docs/_includes/nav/customize.html"}},htmllint:{options:{ignore:['Attribute "autocomplete" not allowed on element "button" at this point.','Attribute "autocomplete" is only allowed when the input type is "color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "search", "tel", "text", "time", "url", or "week".','Element "img" is missing required attribute "src".']},src:"_gh_pages/**/*.html"},watch:{src:{files:"<%= jshint.core.src %>",tasks:["jshint:core","qunit","concat"]},test:{files:"<%= jshint.test.src %>",tasks:["jshint:test","qunit"]},less:{files:"less/**/*.less",tasks:"less"}},sed:{versionNumber:{pattern:function(){var t=n.option("oldver");return t?RegExp.quote(t):t}(),replacement:n.option("newver"),exclude:["dist/fonts","docs/assets","fonts","js/tests/vendor","node_modules","test-infra"],recursive:!0}},"saucelabs-qunit":{all:{options:{build:process.env.TRAVIS_JOB_ID,throttled:10,maxRetries:3,maxPollRetries:4,urls:["http://127.0.0.1:3000/js/tests/index.html?hidepassed"],browsers:n.file.readYAML("grunt/sauce_browsers.yml")}}},exec:{npmUpdate:{command:"npm update"}},compress:{main:{options:{archive:"bootstrap-<%= pkg.version %>-dist.zip",mode:"zip",level:9,pretty:!0},files:[{expand:!0,cwd:"dist/",src:["**"],dest:"bootstrap-<%= pkg.version %>-dist"}]}}});require("load-grunt-tasks")(n,{scope:"devDependencies"});require("time-grunt")(n);var f=function(n){return!process.env.TWBS_TEST||process.env.TWBS_TEST===n},a=function(n){return n===undefined||n!=="0"},i=[];f("core")&&process.env.TRAVIS_REPO_SLUG!=="twbs-savage/bootstrap"&&(i=i.concat(["dist-css","dist-js","csslint:dist","test-js","docs"]));typeof process.env.SAUCE_ACCESS_KEY!="undefined"&&f("sauce-js-unit")&&a(process.env.TWBS_DO_SAUCE)&&(i.push("connect"),i.push("saucelabs-qunit"));n.registerTask("test",i);n.registerTask("test-js",["jshint:core","jshint:test","jshint:grunt","jscs:core","jscs:test","jscs:grunt","qunit"]);n.registerTask("dist-js",["concat","uglify:core","commonjs"]);n.registerTask("less-compile",["less:compileCore","less:compileTheme","less:rtl"]);n.registerTask("dist-css",["less-compile","autoprefixer:core","autoprefixer:theme","csscomb:dist","cssmin:minifyCore","cssmin:minifyTheme"]);n.registerTask("dist",["clean:dist","dist-css","copy:fonts","dist-js"]);n.registerTask("default",["clean:dist","copy:fonts","test"]);n.registerTask("change-version-number","sed");n.registerTask("build-glyphicons-data",function(){o.call(this,n)});n.registerTask("build-customizer",["build-customizer-html","build-raw-files"]);n.registerTask("build-customizer-html","jade");n.registerTask("build-raw-files","Add scripts/less files to customizer.",function(){var t=n.template.process("<%= banner %>");c(n,t)});n.registerTask("commonjs","Generate CommonJS entrypoint module in dist dir.",function(){var t=n.config.get("concat.bootstrap.src");l(n,t,"dist/js/npm.js")});n.registerTask("docs-css",["autoprefixer:docs","autoprefixer:examples","csscomb:docs","csscomb:examples","cssmin:docs"]);n.registerTask("lint-docs-css",["csslint:docs","csslint:examples"]);n.registerTask("docs-js",["uglify:docsJs","uglify:customize"]);n.registerTask("lint-docs-js",["jshint:assets","jscs:assets"]);n.registerTask("docs",["docs-css","lint-docs-css","docs-js","lint-docs-js","clean:docs","copy:docs","build-glyphicons-data","build-customizer"]);n.registerTask("prep-release",["dist","docs","jekyll:github","htmlmin","compress"]);n.registerTask("update-shrinkwrap",["exec:npmUpdate","_update-shrinkwrap"]);n.registerTask("_update-shrinkwrap",function(){var t=this.async();e({dev:!0,dirname:__dirname},function(i){i&&n.fail.warn(i);var u="test-infra/npm-shrinkwrap.json";r.renameSync("npm-shrinkwrap.json",u);n.log.writeln("File "+u.cyan+" updated.");t()})})};