Skip to content

Commit d43c347

Browse files
committed
add support for service workers
1 parent 59a78be commit d43c347

9 files changed

+85
-9
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {createBase64ServiceWorkerFactory as browserCreateBase64ServiceWorkerFactory} from '\0rollup-plugin-web-worker-loader::helper::browser::createBase64ServiceWorkerFactory';
2+
import {isNodeJS} from '\0rollup-plugin-web-worker-loader::helper::auto::isNodeJS';
3+
4+
export function createBase64ServiceWorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
5+
if (isNodeJS()) {
6+
throw new Error('rollup-plugin-web-worker-loader does not support Service Worker in Node.JS');
7+
}
8+
return browserCreateBase64ServiceWorkerFactory(base64, sourcemapArg, enableUnicodeArg);
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {createInlineServiceWorkerFactory as browserCreateInlineServiceWorkerFactory} from '\0rollup-plugin-web-worker-loader::helper::browser::createInlineServiceWorkerFactory';
2+
import {isNodeJS} from '\0rollup-plugin-web-worker-loader::helper::auto::isNodeJS';
3+
4+
export function createInlineServiceWorkerFactory(fn, sourcemapArg) {
5+
if (isNodeJS()) {
6+
throw new Error('rollup-plugin-web-worker-loader does not support Service Worker in Node.JS');
7+
}
8+
return browserCreateInlineServiceWorkerFactory(fn, sourcemapArg);
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {createURLServiceWorkerFactory as browserCreateURLServiceWorkerFactory} from '\0rollup-plugin-web-worker-loader::helper::browser::createURLServiceWorkerFactory';
2+
import {isNodeJS} from '\0rollup-plugin-web-worker-loader::helper::auto::isNodeJS';
3+
4+
export function createURLServiceWorkerFactory(url) {
5+
if (isNodeJS()) {
6+
throw new Error('rollup-plugin-web-worker-loader does not support Service Worker in Node.JS');
7+
}
8+
return browserCreateURLServiceWorkerFactory(url);
9+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
function decodeBase64(base64, enableUnicode) {
2+
var binaryString = atob(base64);
3+
if (enableUnicode) {
4+
var binaryView = new Uint8Array(binaryString.length);
5+
for (var i = 0, n = binaryString.length; i < n; ++i) {
6+
binaryView[i] = binaryString.charCodeAt(i);
7+
}
8+
return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer));
9+
}
10+
return binaryString;
11+
}
12+
13+
function createURL(base64, sourcemapArg, enableUnicodeArg) {
14+
var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;
15+
var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;
16+
var source = decodeBase64(base64, enableUnicode);
17+
var start = source.indexOf('\n', 10) + 1;
18+
var body = source.substring(start) + (sourcemap ? '\/\/# sourceMappingURL=' + sourcemap : '');
19+
var blob = new Blob([body], { type: 'application/javascript' });
20+
return URL.createObjectURL(blob);
21+
}
22+
23+
export function createBase64ServiceWorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
24+
var url;
25+
return function ServiceWorkerFactory(options) {
26+
url = url || createURL(base64, sourcemapArg, enableUnicodeArg);
27+
return new SharedWorker(url, options);
28+
};
29+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import {funcToSource} from '\0rollup-plugin-web-worker-loader::helper::funcToSource';
2+
3+
function createURL(fn, sourcemapArg) {
4+
var lines = funcToSource(fn, sourcemapArg);
5+
var blob = new Blob(lines, { type: 'application/javascript' });
6+
return URL.createObjectURL(blob);
7+
}
8+
9+
export function createInlineServiceWorkerFactory(fn, sourcemapArg) {
10+
var url;
11+
return function ServiceWorkerFactory(options) {
12+
url = url || createURL(fn, sourcemapArg);
13+
return new ServiceWorker(url, options);
14+
};
15+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export function createURLServiceWorkerFactory(url) {
2+
return function ServiceWorkerFactory(options) {
3+
return new ServiceWorker(url, options);
4+
};
5+
}

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const defaultConfig = {
1515
webWorkerPattern: /web-worker:(.+)/,
1616
audioWorkletPattern: /audio-worklet:(.+)/,
1717
paintWorkletPattern: /paint-worklet:(.+)/,
18-
// serviceWorkerPattern: /service-worker:(.+)/,
18+
serviceWorkerPattern: /service-worker:(.+)/,
1919
inline: true,
2020
forceInline: false,
2121
external: undefined,

src/plugin/resolveId.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ function getMatchAndType(importee, config) {
3939
match,
4040
};
4141
}
42-
// match = importee.match(config.serviceWorkerPattern);
43-
// if (match) {
44-
// return {
45-
// type: "service-worker",
46-
// match
47-
// }
48-
// }
42+
match = importee.match(config.serviceWorkerPattern);
43+
if (match) {
44+
return {
45+
type: 'service-worker',
46+
match,
47+
};
48+
}
4949
return {match: null};
5050
}
5151

src/utils/buildWorkerCode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const typeMap = {
99
'web-worker': 'Worker',
1010
'audio-worklet': 'AudioWorklet',
1111
'paint-worklet': 'PaintWorklet',
12-
// 'service-worker': 'ServiceWorker'
12+
'service-worker': 'ServiceWorker',
1313
};
1414

1515
function getFactoryFuncName(options) {

0 commit comments

Comments
 (0)