Skip to content

Commit 1ffcce1

Browse files
feat: SharedWorker support
Co-Authored-By: Hugh Rawlinson <hughr2005@gmail.com>
1 parent d43c347 commit 1ffcce1

11 files changed

+62
-2
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {createBase64SharedWorkerFactory as browserCreateBase64SharedWorkerFactory} from '\0rollup-plugin-web-worker-loader::helper::browser::createBase64SharedWorkerFactory';
2+
import {isNodeJS} from '\0rollup-plugin-web-worker-loader::helper::auto::isNodeJS';
3+
4+
export function createBase64SharedWorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
5+
if (isNodeJS()) {
6+
throw new Error('rollup-plugin-web-worker-loader does not support Shared Worker in Node.JS');
7+
}
8+
return browserCreateBase64SharedWorkerFactory(base64, sourcemapArg, enableUnicodeArg);
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {createInlineSharedWorkerFactory as browserCreateInlineSharedWorkerFactory} from '\0rollup-plugin-web-worker-loader::helper::browser::createInlineSharedWorkerFactory';
2+
import {isNodeJS} from '\0rollup-plugin-web-worker-loader::helper::auto::isNodeJS';
3+
4+
export function createInlineSharedWorkerFactory(fn, sourcemapArg) {
5+
if (isNodeJS()) {
6+
throw new Error('rollup-plugin-web-worker-loader does not support Shared Worker in Node.JS');
7+
}
8+
return browserCreateInlineSharedWorkerFactory(fn, sourcemapArg);
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {createURLSharedWorkerFactory as browserCreateURLSharedWorkerFactory} from '\0rollup-plugin-web-worker-loader::helper::browser::createURLSharedWorkerFactory';
2+
import {isNodeJS} from '\0rollup-plugin-web-worker-loader::helper::auto::isNodeJS';
3+
4+
export function createURLSharedWorkerFactory(url) {
5+
if (isNodeJS()) {
6+
throw new Error('rollup-plugin-web-worker-loader does not support Shared Worker in Node.JS');
7+
}
8+
return browserCreateURLSharedWorkerFactory(url);
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {createURL} from '\0rollup-plugin-web-worker-loader::helper::browser::createBase64WorkerFactory';
2+
3+
export function createBase64SharedWorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
4+
var url;
5+
return function WorkerFactory(options) {
6+
url = url || createURL(base64, sourcemapArg, enableUnicodeArg);
7+
return new SharedWorker(url, options);
8+
};
9+
}

src/helper/browser/createBase64WorkerFactory.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function decodeBase64(base64, enableUnicode) {
1010
return binaryString;
1111
}
1212

13-
function createURL(base64, sourcemapArg, enableUnicodeArg) {
13+
export function createURL(base64, sourcemapArg, enableUnicodeArg) {
1414
var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;
1515
var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;
1616
var source = decodeBase64(base64, enableUnicode);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {createURL} from '\0rollup-plugin-web-worker-loader::helper::browser::createInlineWorkerFactory';
2+
3+
export function createInlineSharedWorkerFactory(fn, sourcemapArg) {
4+
var url;
5+
return function WorkerFactory(options) {
6+
url = url || createURL(fn, sourcemapArg);
7+
return new SharedWorker(url, options);
8+
};
9+
}

src/helper/browser/createInlineWorkerFactory.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {funcToSource} from '\0rollup-plugin-web-worker-loader::helper::funcToSource';
22

3-
function createURL(fn, sourcemapArg) {
3+
export function createURL(fn, sourcemapArg) {
44
var lines = funcToSource(fn, sourcemapArg);
55
var blob = new Blob(lines, { type: 'application/javascript' });
66
return URL.createObjectURL(blob);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export function createURLSharedWorkerFactory(url) {
2+
return function WorkerFactory(options) {
3+
return new SharedWorker(url, options);
4+
};
5+
}

src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const generateBundle = require('./plugin/generateBundle');
77

88
const defaultConfig = {
99
targetPlatform: 'auto',
10+
browserWorker: 'Worker',
1011
sourcemap: false,
1112
loadPath: '',
1213
preserveSource: false,
@@ -16,6 +17,7 @@ const defaultConfig = {
1617
audioWorkletPattern: /audio-worklet:(.+)/,
1718
paintWorkletPattern: /paint-worklet:(.+)/,
1819
serviceWorkerPattern: /service-worker:(.+)/,
20+
sharedWorkerPattern: /shared-worker:(.+)/,
1921
inline: true,
2022
forceInline: false,
2123
external: undefined,

src/plugin/resolveId.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ function getMatchAndType(importee, config) {
4646
match,
4747
};
4848
}
49+
match = importee.match(config.sharedWorkerPattern);
50+
if (match) {
51+
return {
52+
type: 'shared-worker',
53+
match,
54+
};
55+
}
4956
return {match: null};
5057
}
5158

0 commit comments

Comments
 (0)