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
|
|
};
|