| "use strict"; |
| |
| module.exports = function( grunt ) { |
| var fs = require( "fs" ), |
| filename = grunt.option( "filename" ), |
| distpaths = [ |
| "dist/" + filename, |
| "dist/" + filename.replace( ".js", ".min.map" ), |
| "dist/" + filename.replace( ".js", ".min.js" ) |
| ]; |
| |
| // Process files for distribution |
| grunt.registerTask( "dist", function() { |
| var stored, flags, paths, nonascii; |
| |
| // Check for stored destination paths |
| // ( set in dist/.destination.json ) |
| stored = Object.keys( grunt.config( "dst" ) ); |
| |
| // Allow command line input as well |
| flags = Object.keys( this.flags ); |
| |
| // Combine all output target paths |
| paths = [].concat( stored, flags ).filter( function( path ) { |
| return path !== "*"; |
| } ); |
| |
| // Ensure the dist files are pure ASCII |
| nonascii = false; |
| |
| distpaths.forEach( function( filename ) { |
| var i, c, |
| text = fs.readFileSync( filename, "utf8" ); |
| |
| // Ensure files use only \n for line endings, not \r\n |
| if ( /\x0d\x0a/.test( text ) ) { |
| grunt.log.writeln( filename + ": Incorrect line endings (\\r\\n)" ); |
| nonascii = true; |
| } |
| |
| // Ensure only ASCII chars so script tags don't need a charset attribute |
| if ( text.length !== Buffer.byteLength( text, "utf8" ) ) { |
| grunt.log.writeln( filename + ": Non-ASCII characters detected:" ); |
| for ( i = 0; i < text.length; i++ ) { |
| c = text.charCodeAt( i ); |
| if ( c > 127 ) { |
| grunt.log.writeln( "- position " + i + ": " + c ); |
| grunt.log.writeln( "-- " + text.substring( i - 20, i + 20 ) ); |
| break; |
| } |
| } |
| nonascii = true; |
| } |
| |
| // Optionally copy dist files to other locations |
| paths.forEach( function( path ) { |
| var created; |
| |
| if ( !/\/$/.test( path ) ) { |
| path += "/"; |
| } |
| |
| created = path + filename.replace( "dist/", "" ); |
| grunt.file.write( created, text ); |
| grunt.log.writeln( "File '" + created + "' created." ); |
| } ); |
| } ); |
| |
| return !nonascii; |
| } ); |
| }; |