mirror of
https://github.com/twbs/bootstrap.git
synced 2024-11-29 11:24:18 +01:00
42 lines
1.5 KiB
JavaScript
42 lines
1.5 KiB
JavaScript
/*!
|
|
* Bootstrap Grunt task for generating npm-shrinkwrap.canonical.json
|
|
* http://getbootstrap.com
|
|
* Copyright 2014 Twitter, Inc.
|
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
*/
|
|
/*
|
|
This Grunt task updates the npm-shrinkwrap.canonical.json file that's used as the key for Bootstrap's npm packages cache.
|
|
This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
|
|
*/
|
|
'use strict';
|
|
var canonicallyJsonStringify = require('canonical-json');
|
|
var NON_CANONICAL_FILE = 'npm-shrinkwrap.json';
|
|
var DEST_FILE = 'test-infra/npm-shrinkwrap.canonical.json';
|
|
|
|
|
|
function cleanup(shrinkwrap) {
|
|
// Remove `resolved` property to avoid irrelevant changes
|
|
// See https://github.com/npm/npm/issues/3581
|
|
if (typeof shrinkwrap === 'string') {
|
|
return shrinkwrap;
|
|
}
|
|
delete shrinkwrap.resolved;
|
|
for (var key in shrinkwrap) {
|
|
shrinkwrap[key] = cleanup(shrinkwrap[key]);
|
|
}
|
|
return shrinkwrap;
|
|
}
|
|
|
|
function updateShrinkwrap(grunt) {
|
|
// Assumption: Non-canonical shrinkwrap already generated by prerequisite Grunt task
|
|
var shrinkwrapData = grunt.file.readJSON(NON_CANONICAL_FILE);
|
|
grunt.log.writeln('Deleting ' + NON_CANONICAL_FILE.cyan + '...');
|
|
grunt.file.delete(NON_CANONICAL_FILE);
|
|
// Output as Canonical JSON in correct location
|
|
grunt.file.write(DEST_FILE, canonicallyJsonStringify(cleanup(shrinkwrapData)));
|
|
grunt.log.writeln('File ' + DEST_FILE.cyan + ' updated.');
|
|
}
|
|
|
|
|
|
module.exports = updateShrinkwrap;
|