blob: 20deeff261a9491c0a16a8408b90f51a48cadcf9 [file]
var fs = require('fs');
var webpack = require('webpack');
var btoa = require('btoa');
var WORKER_FILE = './worker.js';
var WORKER_BUNDLE_FILE = './dist/worker.bundle.js';
var WORKER_EMBEDDED_FILE = './dist/worker.embedded.js';
create();
async function create () {
try {
console.log('\nWorker file ' + WORKER_FILE);
await createWorkerBundle(WORKER_FILE, WORKER_BUNDLE_FILE)
console.log('\nCreated worker bundle ' + WORKER_BUNDLE_FILE);
createEmbeddedWorkerFromBundle(WORKER_BUNDLE_FILE, WORKER_EMBEDDED_FILE)
console.log('\nCreated embedded worker ' + WORKER_EMBEDDED_FILE);
} catch(err) {
console.error(err);
}
}
/**
* Generate a bundle of the worker code using Webpack
* @param {string} workerFile For example 'worker.js'
* @param {string} workerBundleFile For example 'dist/worker.bundle.js'
*/
function createWorkerBundle(workerFile, workerBundleFile) {
return new Promise(function (resolve, reject) {
var config = {
// target: 'node', // makes the worker working for node.js
entry: workerFile,
output: {
filename: workerBundleFile,
path: __dirname
},
mode: 'production'
};
webpack(config).run(function (err, stats) {
if (err) {
console.log(err);
}
process.stdout.write(stats.toString() + '\n');
if (stats.hasErrors()) {
reject(new Error('Webpack errors:\n' + stats.toJson().errors.join('\n')));
}
resolve();
});
});
}
/**
* Create an embedded version of the worker code: a data url.
* @param {string} workerBundleFile For example 'dist/worker.bundle.js'
* @param {string} workerEmbeddedFile For example 'dist/worker.embedded.js'
*/
function createEmbeddedWorkerFromBundle (workerBundleFile, workerEmbeddedFile) {
var workerScript = String(fs.readFileSync(workerBundleFile));
var workerDataUrl = 'data:application/javascript;base64,' + btoa(workerScript);
fs.writeFileSync(workerEmbeddedFile, 'module.exports = \'' + workerDataUrl + '\';\n');
}