| "use strict"; |
| |
| var |
| fs = require( "fs" ), |
| shell = require( "shelljs" ), |
| path = require( "path" ), |
| |
| cdnFolder = "dist/cdn", |
| |
| releaseFiles = { |
| "jquery-VER.js": "dist/jquery.js", |
| "jquery-VER.min.js": "dist/jquery.min.js", |
| "jquery-VER.min.map": "dist/jquery.min.map", |
| "jquery-VER.slim.js": "dist/jquery.slim.js", |
| "jquery-VER.slim.min.js": "dist/jquery.slim.min.js", |
| "jquery-VER.slim.min.map": "dist/jquery.slim.min.map" |
| }, |
| |
| googleFilesCDN = [ |
| "jquery.js", "jquery.min.js", "jquery.min.map", |
| "jquery.slim.js", "jquery.slim.min.js", "jquery.slim.min.map" |
| ], |
| |
| msFilesCDN = [ |
| "jquery-VER.js", "jquery-VER.min.js", "jquery-VER.min.map", |
| "jquery-VER.slim.js", "jquery-VER.slim.min.js", "jquery-VER.slim.min.map" |
| ]; |
| |
| /** |
| * Generates copies for the CDNs |
| */ |
| function makeReleaseCopies( Release ) { |
| shell.mkdir( "-p", cdnFolder ); |
| |
| Object.keys( releaseFiles ).forEach( function( key ) { |
| var text, |
| builtFile = releaseFiles[ key ], |
| unpathedFile = key.replace( /VER/g, Release.newVersion ), |
| releaseFile = cdnFolder + "/" + unpathedFile; |
| |
| if ( /\.map$/.test( releaseFile ) ) { |
| |
| // Map files need to reference the new uncompressed name; |
| // assume that all files reside in the same directory. |
| // "file":"jquery.min.js" ... "sources":["jquery.js"] |
| text = fs.readFileSync( builtFile, "utf8" ) |
| .replace( /"file":"([^"]+)"/, |
| "\"file\":\"" + unpathedFile.replace( /\.min\.map/, ".min.js\"" ) ) |
| .replace( /"sources":\["([^"]+)"\]/, |
| "\"sources\":[\"" + unpathedFile.replace( /\.min\.map/, ".js" ) + "\"]" ); |
| fs.writeFileSync( releaseFile, text ); |
| } else if ( builtFile !== releaseFile ) { |
| shell.cp( "-f", builtFile, releaseFile ); |
| } |
| } ); |
| } |
| |
| function makeArchives( Release, callback ) { |
| |
| Release.chdir( Release.dir.repo ); |
| |
| function makeArchive( cdn, files, callback ) { |
| if ( Release.preRelease ) { |
| console.log( "Skipping archive creation for " + cdn + "; this is a beta release." ); |
| callback(); |
| return; |
| } |
| |
| console.log( "Creating production archive for " + cdn ); |
| |
| var sum, |
| archiver = require( "archiver" )( "zip" ), |
| md5file = cdnFolder + "/" + cdn + "-md5.txt", |
| output = fs.createWriteStream( |
| cdnFolder + "/" + cdn + "-jquery-" + Release.newVersion + ".zip" |
| ), |
| rver = /VER/; |
| |
| output.on( "close", callback ); |
| |
| output.on( "error", function( err ) { |
| throw err; |
| } ); |
| |
| archiver.pipe( output ); |
| |
| files = files.map( function( item ) { |
| return "dist" + ( rver.test( item ) ? "/cdn" : "" ) + "/" + |
| item.replace( rver, Release.newVersion ); |
| } ); |
| |
| sum = Release.exec( "md5 -r " + files.join( " " ), "Error retrieving md5sum" ); |
| fs.writeFileSync( md5file, sum ); |
| files.push( md5file ); |
| |
| files.forEach( function( file ) { |
| archiver.append( fs.createReadStream( file ), |
| { name: path.basename( file ) } ); |
| } ); |
| |
| archiver.finalize(); |
| } |
| |
| function buildGoogleCDN( callback ) { |
| makeArchive( "googlecdn", googleFilesCDN, callback ); |
| } |
| |
| function buildMicrosoftCDN( callback ) { |
| makeArchive( "mscdn", msFilesCDN, callback ); |
| } |
| |
| buildGoogleCDN( function() { |
| buildMicrosoftCDN( callback ); |
| } ); |
| } |
| |
| module.exports = { |
| makeReleaseCopies: makeReleaseCopies, |
| makeArchives: makeArchives |
| }; |