|
20 | 20 | export default function workerize(code, options) { |
21 | 21 | let exports = {}; |
22 | 22 | let exportsObjName = `__xpo${Math.random().toString().substring(2)}__`; |
23 | | - if (typeof code==='function') code = `(${toCode(code)})(${exportsObjName})`; |
24 | | - code = toCjs(code, exportsObjName, exports); |
25 | | - code += `\n(${toCode(setup)})(self, ${exportsObjName}, {})`; |
26 | 23 | let blob = new Blob([code], { |
27 | 24 | type: 'application/javascript' |
28 | 25 | }), |
29 | 26 | url = URL.createObjectURL(blob), |
| 27 | + if (typeof code==='function') code = `(${Function.prototype.toString.call(code)})(${exportsObjName})`; |
| 28 | + code = toCjs(code, exportsObjName, exports) + `\n(${Function.prototype.toString.call(setup)})(self,${exportsObjName},{})`; |
30 | 29 | worker = new Worker(url, options), |
31 | 30 | term = worker.terminate, |
32 | 31 | counter = 0, |
@@ -54,8 +53,6 @@ export default function workerize(code, options) { |
54 | 53 | return worker; |
55 | 54 | } |
56 | 55 |
|
57 | | -function toCode(func) { |
58 | | - return Function.prototype.toString.call(func); |
59 | 56 | function setup(ctx, rpcMethods, callbacks) { |
60 | 57 | ctx.addEventListener('message', ({ data }) => { |
61 | 58 | let id = data.id; |
@@ -83,15 +80,13 @@ function setup(ctx, rpcMethods, callbacks) { |
83 | 80 | } |
84 | 81 |
|
85 | 82 | function toCjs(code, exportsObjName, exports) { |
86 | | - exportsObjName = exportsObjName || 'exports'; |
87 | | - exports = exports || {}; |
88 | 83 | code = code.replace(/^(\s*)export\s+default\s+/m, (s, before) => { |
89 | 84 | exports.default = true; |
90 | | - return `${before}${exportsObjName}.default = `; |
| 85 | + return `${before}${exportsObjName}.default=`; |
91 | 86 | }); |
92 | 87 | code = code.replace(/^(\s*)export\s+(function|const|let|var)(\s+)([a-zA-Z$_][a-zA-Z0-9$_]*)/m, (s, before, type, ws, name) => { |
93 | 88 | exports[name] = true; |
94 | | - return `${before}${exportsObjName}.${name} = ${type}${ws}${name}`; |
| 89 | + return `${before}${exportsObjName}.${name}=${type}${ws}${name}`; |
95 | 90 | }); |
96 | | - return `var ${exportsObjName} = {};\n${code}\n${exportsObjName};`; |
| 91 | + return `var ${exportsObjName}={};\n${code}\n${exportsObjName};`; |
97 | 92 | } |
0 commit comments