worker-loader
Version:
worker loader module for webpack
39 lines (33 loc) • 1.23 kB
JavaScript
/* eslint-env browser */
/* eslint-disable no-undef, no-use-before-define, new-cap */
module.exports = function (content, workerConstructor, workerOptions, url) {
var globalScope = self || window;
try {
try {
var blob;
try {
// New API
blob = new globalScope.Blob([content]);
} catch (e) {
// BlobBuilder = Deprecated, but widely implemented
var BlobBuilder = globalScope.BlobBuilder || globalScope.WebKitBlobBuilder || globalScope.MozBlobBuilder || globalScope.MSBlobBuilder;
blob = new BlobBuilder();
blob.append(content);
blob = blob.getBlob();
}
var URL = globalScope.URL || globalScope.webkitURL;
var objectURL = URL.createObjectURL(blob);
var worker = new globalScope[workerConstructor](objectURL, workerOptions);
URL.revokeObjectURL(objectURL);
return worker;
} catch (e) {
return new globalScope[workerConstructor]("data:application/javascript,".concat(encodeURIComponent(content)), workerOptions);
}
} catch (e) {
if (!url) {
throw Error("Inline worker is not supported");
}
return new globalScope[workerConstructor](url, workerOptions);
}
};
;