forked from vitejs/vite
-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
main-module.js
126 lines (112 loc) · 3.76 KB
/
main-module.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import myWorker from '../my-worker.ts?worker'
import InlineWorker from '../my-worker.ts?worker&inline'
import InlineSharedWorker from '../my-inline-shared-worker?sharedworker&inline'
import mySharedWorker from '../my-shared-worker?sharedworker&name=shared'
import TSOutputWorker from '../possible-ts-output-worker?worker'
import NestedWorker from '../worker-nested-worker?worker'
import { mode } from '../modules/workerImport'
function text(el, text) {
document.querySelector(el).textContent = text
}
document.querySelector('.mode-true').textContent = mode
const worker = new myWorker()
worker.postMessage('ping')
worker.addEventListener('message', (e) => {
text('.pong', e.data.msg)
text('.mode', e.data.mode)
text('.bundle-with-plugin', e.data.bundleWithPlugin)
text('.asset-url', e.data.viteSvg)
})
const inlineWorker = new InlineWorker()
inlineWorker.postMessage('ping')
inlineWorker.addEventListener('message', (e) => {
text('.pong-inline', e.data.msg)
})
const startSharedWorker = () => {
const sharedWorker = new mySharedWorker()
sharedWorker.port.addEventListener('message', (event) => {
text('.tick-count', event.data)
})
sharedWorker.port.start()
}
startSharedWorker()
startSharedWorker()
const startInlineSharedWorker = () => {
const inlineSharedWorker = new InlineSharedWorker()
inlineSharedWorker.port.addEventListener('message', (event) => {
text('.pong-shared-inline', event.data)
})
inlineSharedWorker.port.start()
}
startInlineSharedWorker()
startInlineSharedWorker()
const tsOutputWorker = new TSOutputWorker()
tsOutputWorker.postMessage('ping')
tsOutputWorker.addEventListener('message', (e) => {
text('.pong-ts-output', e.data.msg)
})
const nestedWorker = new NestedWorker()
nestedWorker.addEventListener('message', (ev) => {
if (typeof ev.data === 'string') {
text('.nested-worker', JSON.stringify(ev.data))
} else if (typeof ev.data === 'object') {
const data = ev.data
if (data.type === 'module') {
text('.nested-worker-module', JSON.stringify(ev.data))
} else if (data.type === 'constructor') {
text('.nested-worker-constructor', JSON.stringify(ev.data))
} else if (data.type === 'importMetaGlobEager') {
text('.importMetaGlobEager-worker', JSON.stringify(ev.data))
}
}
})
nestedWorker.postMessage('ping')
const workerOptions = { type: 'module' }
// url import worker
const w = new Worker(
new URL('../url-worker.js', import.meta.url),
/* @vite-ignore */ workerOptions,
)
w.addEventListener('message', (ev) =>
text('.worker-import-meta-url', JSON.stringify(ev.data)),
)
// url import worker with alias path
const wResolve = new Worker(
new URL('@/url-worker.js', import.meta.url),
/* @vite-ignore */ workerOptions,
)
wResolve.addEventListener('message', (ev) =>
text('.worker-import-meta-url-resolve', JSON.stringify(ev.data)),
)
// url import worker without extension
const wWithoutExt = new Worker(
new URL('../url-worker', import.meta.url),
/* @vite-ignore */ workerOptions,
)
wWithoutExt.addEventListener('message', (ev) =>
text('.worker-import-meta-url-without-extension', JSON.stringify(ev.data)),
)
const genWorkerName = () => 'module'
const w2 = new SharedWorker(
new URL('../url-shared-worker.js', import.meta.url),
{
/* @vite-ignore */
name: genWorkerName(),
type: 'module',
},
)
w2.port.addEventListener('message', (ev) => {
text('.shared-worker-import-meta-url', JSON.stringify(ev.data))
})
w2.port.start()
const workers = import.meta.glob('../importMetaGlobEager.*.js', {
as: 'worker',
eager: true,
})
const importMetaGlobEagerWorker = new workers[
'../importMetaGlobEager.worker.js'
].default()
importMetaGlobEagerWorker.postMessage('1')
importMetaGlobEagerWorker.addEventListener('message', (e) => {
text('.importMetaGlobEager-worker', JSON.stringify(e.data))
})