2019-10-08 22:17:55 +00:00
|
|
|
"use strict";
|
2013-08-16 13:48:00 +00:00
|
|
|
|
2019-10-08 22:17:55 +00:00
|
|
|
module.exports = function( grunt ) {
|
2023-07-10 18:45:30 +00:00
|
|
|
const fs = require( "fs" );
|
|
|
|
const filename = grunt.option( "filename" );
|
|
|
|
const distPaths = [
|
|
|
|
`dist/${ filename }`,
|
|
|
|
`dist/${ filename.replace( ".js", ".min.js" ) }`,
|
|
|
|
`dist/${ filename.replace( ".js", ".min.map" ) }`
|
|
|
|
];
|
2013-08-16 13:48:00 +00:00
|
|
|
|
|
|
|
// Process files for distribution
|
|
|
|
grunt.registerTask( "dist", function() {
|
2023-07-10 18:45:30 +00:00
|
|
|
let stored, flags, paths, nonascii;
|
2013-08-16 13:48:00 +00:00
|
|
|
|
|
|
|
// 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
|
2015-08-16 06:59:58 +00:00
|
|
|
paths = [].concat( stored, flags ).filter( function( path ) {
|
2013-08-16 13:48:00 +00:00
|
|
|
return path !== "*";
|
2015-08-16 06:59:58 +00:00
|
|
|
} );
|
2013-08-16 13:48:00 +00:00
|
|
|
|
|
|
|
// Ensure the dist files are pure ASCII
|
|
|
|
nonascii = false;
|
|
|
|
|
2023-07-10 18:45:30 +00:00
|
|
|
distPaths.forEach( function( filename ) {
|
|
|
|
let i, c;
|
|
|
|
const text = fs.readFileSync( filename, "utf8" );
|
2013-08-16 13:48:00 +00:00
|
|
|
|
|
|
|
// 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
|
2015-08-16 06:59:58 +00:00
|
|
|
paths.forEach( function( path ) {
|
2023-07-10 18:45:30 +00:00
|
|
|
let created;
|
2013-08-16 13:48:00 +00:00
|
|
|
|
|
|
|
if ( !/\/$/.test( path ) ) {
|
|
|
|
path += "/";
|
|
|
|
}
|
|
|
|
|
|
|
|
created = path + filename.replace( "dist/", "" );
|
|
|
|
grunt.file.write( created, text );
|
|
|
|
grunt.log.writeln( "File '" + created + "' created." );
|
2015-08-16 06:59:58 +00:00
|
|
|
} );
|
|
|
|
} );
|
2013-08-16 13:48:00 +00:00
|
|
|
|
|
|
|
return !nonascii;
|
2015-08-16 06:59:58 +00:00
|
|
|
} );
|
2013-08-16 13:48:00 +00:00
|
|
|
};
|