blob: 85b0d9f14feae9ae15a91b5d15047142977ee5d5 [file] [log] [blame]
#!/usr/bin/env node
'use strict';
var fs = require('fs');
var Promise = require('bluebird');
var through = require('through2');
var _derequire = require('derequire');
var watchify = require('watchify');
var browserify = require('browserify');
var cors_proxy = require('corsproxy');
var http_proxy = require('pouchdb-http-proxy');
var http_server = require('http-server');
var mkdirp = require('mkdirp');
function derequire() {
var out = new Buffer('');
return through(function (data, _, next) {
out = Buffer.concat([out, data]);
next();
}, function (next) {
this.push(_derequire(out.toString()));
next();
});
}
var queryParams = {};
if (process.env.ES5_SHIM || process.env.ES5_SHIMS) {
queryParams.es5shim = true;
}
if (process.env.ADAPTERS) {
queryParams.adapters = process.env.ADAPTERS;
}
if (process.env.AUTO_COMPACTION) {
queryParams.autoCompaction = true;
}
var indexfile = "./lib/index.js";
var outfile = "./dist/pouchdb.js";
var perfRoot = './tests/performance/';
var performanceBundle = './tests/performance-bundle.js';
var w = watchify(browserify(indexfile, {
standalone: "PouchDB",
cache: {},
packageCache: {},
fullPaths: true
})).on('update', bundle);
var b = watchify(browserify({
entries: perfRoot,
cache: {},
packageCache: {},
fullPaths: true
})).on('update', bundlePerfTests);
function bundle(callback) {
mkdirp.sync('./dist');
w.bundle().pipe(derequire()).pipe(fs.createWriteStream(outfile))
.on('finish', function () {
console.log('Updated: ', outfile);
if (typeof callback === 'function') {
callback();
}
});
}
function bundlePerfTests(callback) {
b.bundle().pipe(fs.createWriteStream(performanceBundle))
.on('finish', function () {
console.log('Updated: ', performanceBundle);
if (typeof callback === 'function') {
callback();
}
});
}
var filesWritten = false;
Promise.all([
new Promise(function (resolve) {
bundle(resolve);
}),
new Promise(function (resolve) {
bundlePerfTests(resolve);
})
]).then(function () {
filesWritten = true;
checkReady();
});
var COUCH_HOST = process.env.COUCH_HOST || 'http://127.0.0.1:5984';
var HTTP_PORT = 8000;
var CORS_PORT = 2020;
// if SERVER=sync-gateway we also have
// tests/misc/sync-gateway-config-server.js
// listening on port 8001
var serversStarted;
var readyCallback;
function startServers(callback) {
readyCallback = callback;
http_server.createServer().listen(HTTP_PORT, function () {
cors_proxy.options = {target: COUCH_HOST};
http_proxy.createServer(cors_proxy).listen(CORS_PORT, function () {
var testRoot = 'http://127.0.0.1:' + HTTP_PORT;
var query = '';
Object.keys(queryParams).forEach(function (key) {
query += (query ? '&' : '?');
query += key + '=' + encodeURIComponent(queryParams[key]);
});
console.log('Integration tests: ' + testRoot +
'/tests/integration/' + query);
console.log('Performance tests: ' + testRoot +
'/tests/performance/');
serversStarted = true;
checkReady();
});
});
}
function checkReady() {
if (filesWritten && serversStarted && readyCallback) {
readyCallback();
}
}
if (require.main === module) {
startServers();
} else {
module.exports.start = startServers;
}