Create gulp targets to build `hello_world` and check its gzipped size against size constraints. See #5312, #5314
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var util = require('./util');
 | 
						|
var Q = require('q');
 | 
						|
var spawn = require('child_process').spawn;
 | 
						|
var through2 = require('through2');
 | 
						|
var path = require('path');
 | 
						|
var glob = require('glob');
 | 
						|
var fs = require('fs');
 | 
						|
 | 
						|
function buildAllWebSubdirs(gulp, plugins, config) {
 | 
						|
  return function() {
 | 
						|
    var webFolders = [].slice.call(glob.sync(path.join(config.src, '*/web')));
 | 
						|
    return nextFolder();
 | 
						|
 | 
						|
    function nextFolder() {
 | 
						|
      if (!webFolders.length) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      var folder = path.resolve(path.join(webFolders.shift(), '..'));
 | 
						|
      var destFolder = path.resolve(path.join(config.dest, path.basename(folder)));
 | 
						|
 | 
						|
      const nextConfig = {
 | 
						|
        command: config.command,
 | 
						|
        dest: destFolder,
 | 
						|
        mode: config.mode,
 | 
						|
        src: folder
 | 
						|
      };
 | 
						|
      return single(nextConfig).then(function() {
 | 
						|
        return replaceDartWithJsScripts(gulp, destFolder);
 | 
						|
      }).then(function() {
 | 
						|
        return removeWebFolder(gulp, destFolder);
 | 
						|
      }).then(nextFolder);
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
function single(config) {
 | 
						|
  var pubMode = config.mode || 'release';
 | 
						|
  var pubArgs = ['build', '--mode', pubMode];
 | 
						|
  if (config.dest) {
 | 
						|
    pubArgs = pubArgs.concat(['-o', config.dest]);
 | 
						|
  }
 | 
						|
 | 
						|
  return util.processToPromise(spawn(config.command, pubArgs, {
 | 
						|
    stdio: 'inherit',
 | 
						|
    cwd: config.src
 | 
						|
  }));
 | 
						|
}
 | 
						|
 | 
						|
function replaceDartWithJsScripts(gulp, folder) {
 | 
						|
  return util.streamToPromise(gulp.src(path.join(folder, '**/*.html'))
 | 
						|
    .pipe(through2.obj(function(file, enc, done) {
 | 
						|
      var content = file.contents.toString();
 | 
						|
      content = content.replace(/\.dart/, '.dart.js');
 | 
						|
      content = content.replace(/application\/dart/, 'text/javascript');
 | 
						|
      file.contents = new Buffer(content);
 | 
						|
      this.push(file);
 | 
						|
      done();
 | 
						|
    }))
 | 
						|
    .pipe(gulp.dest(folder)));
 | 
						|
}
 | 
						|
 | 
						|
function singleWrapper(gulp, plugins, config) {
 | 
						|
  return function() { return single(config); };
 | 
						|
}
 | 
						|
 | 
						|
function removeWebFolder(gulp, folder) {
 | 
						|
  var folders = [].slice.call(glob.sync(path.join(folder, 'web', '*')));
 | 
						|
  folders.forEach(function(subFolder) {
 | 
						|
    fs.renameSync(subFolder, subFolder.replace('/web/', '/'));
 | 
						|
  });
 | 
						|
  fs.rmdirSync(path.join(folder, 'web'));
 | 
						|
  return Q.resolve();
 | 
						|
}
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  single: singleWrapper,
 | 
						|
  subdirs: buildAllWebSubdirs
 | 
						|
};
 |