From 14022e9583d33649e1e79904c4c949d0731b47de Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 11 Jan 2018 01:16:28 +0000 Subject: [PATCH 01/35] docs(readme): add Greenkeeper badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b61a097..1928d84 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ # Workerize [![npm](https://img.shields.io/npm/v/workerize.svg?style=flat)](https://www.npmjs.org/package/workerize) [![travis](https://travis-ci.org/developit/workerize.svg?branch=master)](https://travis-ci.org/developit/workerize) +[![Greenkeeper badge](https://badges.greenkeeper.io/developit/workerize.svg)](https://greenkeeper.io/) + > Moves a module into a Web Worker, automatically reflecting exported functions as asynchronous proxies. - Bundles a tiny, purpose-built RPC implementation into your app From 9462863c868cb3eb04dfb971487a3788ecd93402 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Thu, 11 Jan 2018 09:59:28 -0500 Subject: [PATCH 02/35] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 1928d84..b61a097 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,6 @@ # Workerize [![npm](https://img.shields.io/npm/v/workerize.svg?style=flat)](https://www.npmjs.org/package/workerize) [![travis](https://travis-ci.org/developit/workerize.svg?branch=master)](https://travis-ci.org/developit/workerize) -[![Greenkeeper badge](https://badges.greenkeeper.io/developit/workerize.svg)](https://greenkeeper.io/) - > Moves a module into a Web Worker, automatically reflecting exported functions as asynchronous proxies. - Bundles a tiny, purpose-built RPC implementation into your app From 499a3fdb9457e52da2bf3f0e66c80e699101c2d8 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 12 Jan 2018 11:20:23 -0500 Subject: [PATCH 03/35] Fix #8 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b61a097..104adec 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ let worker = workerize(` export function add(a, b) { // block for half a second to demonstrate asynchronicity let start = Date.now(); - while (Date.now()-start < 250); + while (Date.now()-start < 500); return a + b; } `); From 9e509fa7d2797c7f5b4f90c04caf6aac719dbd6b Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Sat, 13 Jan 2018 17:04:56 -0500 Subject: [PATCH 04/35] =?UTF-8?q?oss.ninja=20=F0=9F=A5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 104adec..c4f163f 100644 --- a/README.md +++ b/README.md @@ -46,4 +46,4 @@ let worker = workerize(` ### License -[MIT License](LICENSE.md) © [Jason Miller](https://jasonformat.com) +[MIT License](https://oss.ninja/mit/developit/) © [Jason Miller](https://jasonformat.com) From 4085fce446059083882c43c52f571fd4f2d90314 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Sat, 13 Jan 2018 17:05:07 -0500 Subject: [PATCH 05/35] Delete LICENSE.md --- LICENSE.md | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 44f15d9..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 Jason Miller - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. From 3050b75b8501908e399089a4ba8abb80e779ab53 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Sat, 13 Jan 2018 17:06:06 -0500 Subject: [PATCH 06/35] MIT --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3c7e226..8ebb92e 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "threads" ], "author": "Jason Miller (http://jasonformat.com)", - "license": "ISC", + "license": "MIT", "devDependencies": { "eslint": "^4.15.0", "microbundle": "^0.2.4" From 1ced4b629d91ccfdcd09363a6a4215a3973229f6 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sat, 13 Jan 2018 23:32:08 +0000 Subject: [PATCH 07/35] chore(package): update microbundle to version 0.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ebb92e..adb79b8 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,6 @@ "license": "MIT", "devDependencies": { "eslint": "^4.15.0", - "microbundle": "^0.2.4" + "microbundle": "^0.3.0" } } From 5581df14fefce0296a2d60cd39b7a5cb42d847a7 Mon Sep 17 00:00:00 2001 From: Jonathan Law Date: Tue, 16 Jan 2018 14:33:33 +0000 Subject: [PATCH 08/35] Remove commented code --- src/index.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/index.js b/src/index.js index 386495e..7be7a66 100644 --- a/src/index.js +++ b/src/index.js @@ -43,17 +43,6 @@ export default function workerize(code) { }; worker.rpcMethods = {}; function setup(ctx, rpcMethods, callbacks) { - /* - ctx.expose = (methods, replace) => { - if (typeof methods==='string') { - rpcMethods[methods] = replace; - } - else { - if (replace===true) rpcMethods = {}; - Object.assign(rpcMethods, methods); - } - }; - */ ctx.addEventListener('message', ({ data }) => { if (data.type==='RPC') { let id = data.id; From 15d0cd864a819b1375d1cff223d7df8f66567639 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Tue, 16 Jan 2018 20:48:38 -0500 Subject: [PATCH 09/35] add convenience/help proxy for workerize-loader --- loader.js | 9 +++++++++ package.json | 9 ++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 loader.js diff --git a/loader.js b/loader.js new file mode 100644 index 0000000..cf3256a --- /dev/null +++ b/loader.js @@ -0,0 +1,9 @@ +try { + module.exports = require('workerize-loader'); +} +catch (e) { + console.warn("Warning: workerize-loader is not installed."); + module.exports = function() { + throw "To use workerize as a loader, you must install workerize-loader."; + } +} \ No newline at end of file diff --git a/package.json b/package.json index adb79b8..0d46194 100644 --- a/package.json +++ b/package.json @@ -3,14 +3,21 @@ "version": "0.1.2", "description": "Run a module in a Web Worker.", "main": "dist/workerize.js", - "module": "src/index.js", + "module": "dist/workerize.m.js", + "source": "src/index.js", "repository": "developit/workerize", + "loader": "./loader.js", "scripts": { "build": "microbundle", "prepublishOnly": "npm run build", "release": "npm t && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish", "test": "echo \"Error: no test specified\" && exit 0" }, + "files": [ + "src", + "dist", + "loader.js" + ], "keywords": [ "worker", "web workers", From 4ab9c91ec7349aef0118a303c2a4f2e2a7e5ff19 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Tue, 16 Jan 2018 20:49:16 -0500 Subject: [PATCH 10/35] 0.1.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0d46194..efb00d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "workerize", - "version": "0.1.2", + "version": "0.1.3", "description": "Run a module in a Web Worker.", "main": "dist/workerize.js", "module": "dist/workerize.m.js", From 6fda50dbf63415b2f502afe455cc715b3a512d2c Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 09:48:09 -0500 Subject: [PATCH 11/35] Proper ESLint config --- package.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/package.json b/package.json index efb00d7..27c380e 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,12 @@ "release": "npm t && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish", "test": "echo \"Error: no test specified\" && exit 0" }, + "eslintConfig": { + "extends": "eslint-config-developit", + "rules": { + "prefer-spread": 0 + } + }, "files": [ "src", "dist", @@ -27,6 +33,7 @@ "license": "MIT", "devDependencies": { "eslint": "^4.15.0", + "eslint-config-developit": "^1.1.1", "microbundle": "^0.3.0" } } From 2e0e008dfd593f0cee3e32683494467d5b148b7f Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 09:48:45 -0500 Subject: [PATCH 12/35] shorter export object name for compactness --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 7be7a66..a653226 100644 --- a/src/index.js +++ b/src/index.js @@ -21,7 +21,7 @@ export default function workerize(code) { let exports = {}; - let exportsObjName = `__EXPORTS_${Math.random().toString().substring(2)}__`; + let exportsObjName = `__xpo${Math.random().toString().substring(2)}__`; if (typeof code==='function') code = `(${toCode(code)})(${exportsObjName})`; code = toCjs(code, exportsObjName, exports); code += `\n(${toCode(setup)})(self, ${exportsObjName}, {})`; From 05b53d96e8b01d38d3f39112d6269959bfaaa609 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 09:49:28 -0500 Subject: [PATCH 13/35] Add 2nd `options` argument, which is passed on to the `Worker` constructor. Useful for `{ type: 'module' }` --- src/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index a653226..3562d0e 100644 --- a/src/index.js +++ b/src/index.js @@ -17,9 +17,7 @@ * console.log('1 + 2 = ', await worker.add(1, 2)); * })(); */ - - -export default function workerize(code) { +export default function workerize(code, options) { let exports = {}; let exportsObjName = `__xpo${Math.random().toString().substring(2)}__`; if (typeof code==='function') code = `(${toCode(code)})(${exportsObjName})`; @@ -29,7 +27,7 @@ export default function workerize(code) { type: 'application/javascript' }), url = URL.createObjectURL(blob), - worker = new Worker(url), + worker = new Worker(url, options), counter = 0, callbacks = {}; worker.kill = signal => { From 3c29cc9c79c2a20d5dcc6a54ea3c8e2a65085bdc Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 09:49:36 -0500 Subject: [PATCH 14/35] size optimization --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 3562d0e..288ec9b 100644 --- a/src/index.js +++ b/src/index.js @@ -28,13 +28,13 @@ export default function workerize(code, options) { }), url = URL.createObjectURL(blob), worker = new Worker(url, options), + term = worker.terminate, counter = 0, callbacks = {}; worker.kill = signal => { worker.postMessage({ type: 'KILL', signal }); setTimeout(worker.terminate); }; - let term = worker.terminate; worker.terminate = () => { URL.revokeObjectURL(url); term(); From 9b4337ba054660d7395d3d416bbacc5b07904373 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 09:50:08 -0500 Subject: [PATCH 15/35] Add demo page. --- demo.html | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 demo.html diff --git a/demo.html b/demo.html new file mode 100644 index 0000000..57b03f2 --- /dev/null +++ b/demo.html @@ -0,0 +1,24 @@ + + + + Workerize Demo + + + + + \ No newline at end of file From 3ff507b4f06841e32c8e7a32036182fb91fec51a Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 10:30:04 -0500 Subject: [PATCH 16/35] Size optimizations --- src/index.js | 60 ++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/src/index.js b/src/index.js index 288ec9b..ec6adcf 100644 --- a/src/index.js +++ b/src/index.js @@ -37,41 +37,11 @@ export default function workerize(code, options) { }; worker.terminate = () => { URL.revokeObjectURL(url); - term(); + term.call(this); }; - worker.rpcMethods = {}; - function setup(ctx, rpcMethods, callbacks) { - ctx.addEventListener('message', ({ data }) => { - if (data.type==='RPC') { - let id = data.id; - if (id!=null) { - if (data.method) { - let method = rpcMethods[data.method]; - if (method==null) { - ctx.postMessage({ type: 'RPC', id, error: 'NO_SUCH_METHOD' }); - } - else { - Promise.resolve() - .then( () => method.apply(null, data.params) ) - .then( result => { ctx.postMessage({ type: 'RPC', id, result }); }) - .catch( error => { ctx.postMessage({ type: 'RPC', id, error }); }); - } - } - else { - let callback = callbacks[id]; - if (callback==null) throw Error(`Unknown callback ${id}`); - delete callbacks[id]; - if (data.error) callback.reject(Error(data.error)); - else callback.resolve(data.result); - } - } - } - }); - } - setup(worker, worker.rpcMethods, callbacks); worker.call = (method, params) => new Promise( (resolve, reject) => { let id = `rpc${++counter}`; - callbacks[id] = { method, resolve, reject }; + callbacks[id] = [resolve, reject]; worker.postMessage({ type: 'RPC', id, method, params }); }); for (let i in exports) { @@ -79,11 +49,37 @@ export default function workerize(code, options) { worker[i] = (...args) => worker.call(i, args); } } + worker.rpcMethods = {}; + setup(worker, worker.rpcMethods, callbacks); return worker; } function toCode(func) { return Function.prototype.toString.call(func); +function setup(ctx, rpcMethods, callbacks) { + ctx.addEventListener('message', ({ data }) => { + let id = data.id; + if (data.type!=='RPC' || id==null) return; + if (data.method) { + let method = rpcMethods[data.method]; + if (method==null) { + ctx.postMessage({ type: 'RPC', id, error: 'NO_SUCH_METHOD' }); + } + else { + Promise.resolve() + .then( () => method.apply(null, data.params) ) + .then( result => { ctx.postMessage({ type: 'RPC', id, result }); }) + .catch( error => { ctx.postMessage({ type: 'RPC', id, error }); }); + } + } + else { + let callback = callbacks[id]; + if (callback==null) throw Error(`Unknown callback ${id}`); + delete callbacks[id]; + if (data.error) callback[1](Error(data.error)); + else callback[0](data.result); + } + }); } function toCjs(code, exportsObjName, exports) { From 08649eb9440c4595017eec33360c7a7a627ff4dc Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 10:30:45 -0500 Subject: [PATCH 17/35] Size optimizations --- src/index.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/index.js b/src/index.js index ec6adcf..b73f17d 100644 --- a/src/index.js +++ b/src/index.js @@ -20,13 +20,12 @@ export default function workerize(code, options) { let exports = {}; let exportsObjName = `__xpo${Math.random().toString().substring(2)}__`; - if (typeof code==='function') code = `(${toCode(code)})(${exportsObjName})`; - code = toCjs(code, exportsObjName, exports); - code += `\n(${toCode(setup)})(self, ${exportsObjName}, {})`; let blob = new Blob([code], { type: 'application/javascript' }), url = URL.createObjectURL(blob), + if (typeof code==='function') code = `(${Function.prototype.toString.call(code)})(${exportsObjName})`; + code = toCjs(code, exportsObjName, exports) + `\n(${Function.prototype.toString.call(setup)})(self,${exportsObjName},{})`; worker = new Worker(url, options), term = worker.terminate, counter = 0, @@ -54,8 +53,6 @@ export default function workerize(code, options) { return worker; } -function toCode(func) { - return Function.prototype.toString.call(func); function setup(ctx, rpcMethods, callbacks) { ctx.addEventListener('message', ({ data }) => { let id = data.id; @@ -83,15 +80,13 @@ function setup(ctx, rpcMethods, callbacks) { } function toCjs(code, exportsObjName, exports) { - exportsObjName = exportsObjName || 'exports'; - exports = exports || {}; code = code.replace(/^(\s*)export\s+default\s+/m, (s, before) => { exports.default = true; - return `${before}${exportsObjName}.default = `; + return `${before}${exportsObjName}.default=`; }); code = code.replace(/^(\s*)export\s+(function|const|let|var)(\s+)([a-zA-Z$_][a-zA-Z0-9$_]*)/m, (s, before, type, ws, name) => { exports[name] = true; - return `${before}${exportsObjName}.${name} = ${type}${ws}${name}`; + return `${before}${exportsObjName}.${name}=${type}${ws}${name}`; }); - return `var ${exportsObjName} = {};\n${code}\n${exportsObjName};`; + return `var ${exportsObjName}={};\n${code}\n${exportsObjName};`; } From 6fad436bfee1204759b9b360d6d58afd602c04b4 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 10:31:04 -0500 Subject: [PATCH 18/35] Size optimizations --- src/index.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index b73f17d..52509fc 100644 --- a/src/index.js +++ b/src/index.js @@ -20,16 +20,14 @@ export default function workerize(code, options) { let exports = {}; let exportsObjName = `__xpo${Math.random().toString().substring(2)}__`; - let blob = new Blob([code], { - type: 'application/javascript' - }), - url = URL.createObjectURL(blob), if (typeof code==='function') code = `(${Function.prototype.toString.call(code)})(${exportsObjName})`; code = toCjs(code, exportsObjName, exports) + `\n(${Function.prototype.toString.call(setup)})(self,${exportsObjName},{})`; + let url = URL.createObjectURL(new Blob([code])), worker = new Worker(url, options), term = worker.terminate, + callbacks = {}, counter = 0, - callbacks = {}; + i; worker.kill = signal => { worker.postMessage({ type: 'KILL', signal }); setTimeout(worker.terminate); From 6b1bd5b5b6c612f1821d36eb3f6060386b4f2db8 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 10:31:55 -0500 Subject: [PATCH 19/35] Add `worker.expose("methodName")` and use it to auto-expose exports. --- package.json | 3 ++- src/index.js | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 27c380e..28b8526 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "eslintConfig": { "extends": "eslint-config-developit", "rules": { - "prefer-spread": 0 + "prefer-spread": 0, + "prefer-rest-params": 0 } }, "files": [ diff --git a/src/index.js b/src/index.js index 52509fc..2448dc2 100644 --- a/src/index.js +++ b/src/index.js @@ -41,13 +41,14 @@ export default function workerize(code, options) { callbacks[id] = [resolve, reject]; worker.postMessage({ type: 'RPC', id, method, params }); }); - for (let i in exports) { - if (exports.hasOwnProperty(i) && !(i in worker)) { - worker[i] = (...args) => worker.call(i, args); - } - } worker.rpcMethods = {}; setup(worker, worker.rpcMethods, callbacks); + worker.expose = methodName => { + worker[i] = function() { + return worker.call(methodName, arguments); + }; + }; + for (i in exports) if (!(i in worker)) worker.expose(i); return worker; } From a78358ac1c1d352f80666efb121cede443253a89 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 10:32:15 -0500 Subject: [PATCH 20/35] 0.1.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 28b8526..8d6d5b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "workerize", - "version": "0.1.3", + "version": "0.1.4", "description": "Run a module in a Web Worker.", "main": "dist/workerize.js", "module": "dist/workerize.m.js", From 46b1ffcdf543dab775f7a011854adb6799b75282 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 10:35:16 -0500 Subject: [PATCH 21/35] Bugfix: arguments serialization --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 2448dc2..5a219c1 100644 --- a/src/index.js +++ b/src/index.js @@ -45,7 +45,7 @@ export default function workerize(code, options) { setup(worker, worker.rpcMethods, callbacks); worker.expose = methodName => { worker[i] = function() { - return worker.call(methodName, arguments); + return worker.call(methodName, [].slice.call(arguments)); }; }; for (i in exports) if (!(i in worker)) worker.expose(i); From fd4f70179d623c2fd689a994ebaf17c13dc0df80 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 10:36:32 -0500 Subject: [PATCH 22/35] 0.1.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8d6d5b5..e7bfb13 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "workerize", - "version": "0.1.4", + "version": "0.1.5", "description": "Run a module in a Web Worker.", "main": "dist/workerize.js", "module": "dist/workerize.m.js", From 78a9fa01d75efb2716224947bf8df513e0c1c3e0 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 19 Jan 2018 10:38:40 -0500 Subject: [PATCH 23/35] 800 bytes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4f163f..a1a1cae 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ - If exported module methods are already async, signature is unchanged - Supports synchronous and asynchronous worker functions - Works beautifully with async/await -- Just **900 bytes** of gzipped ES3 +- Just **800 bytes** of gzipped ES3 ## Install From c0fea0c356dab4ce36dd3c7bf1f0734d628caf74 Mon Sep 17 00:00:00 2001 From: daniel nakov Date: Fri, 19 Jan 2018 11:11:17 -0500 Subject: [PATCH 24/35] allow multiple named exports --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 5a219c1..b838bea 100644 --- a/src/index.js +++ b/src/index.js @@ -83,7 +83,7 @@ function toCjs(code, exportsObjName, exports) { exports.default = true; return `${before}${exportsObjName}.default=`; }); - code = code.replace(/^(\s*)export\s+(function|const|let|var)(\s+)([a-zA-Z$_][a-zA-Z0-9$_]*)/m, (s, before, type, ws, name) => { + code = code.replace(/^(\s*)export\s+(function|const|let|var)(\s+)([a-zA-Z$_][a-zA-Z0-9$_]*)/mg, (s, before, type, ws, name) => { exports[name] = true; return `${before}${exportsObjName}.${name}=${type}${ws}${name}`; }); From aacbec62cd272da3bae30ad7370a58fe2080a27e Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Wed, 24 Jan 2018 14:00:03 +0000 Subject: [PATCH 25/35] chore(package): update microbundle to version 0.4.1 Closes #18 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e7bfb13..b505ed2 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,6 @@ "devDependencies": { "eslint": "^4.15.0", "eslint-config-developit": "^1.1.1", - "microbundle": "^0.3.0" + "microbundle": "^0.4.1" } } From 8f5f510aff992cefcdcecab7811b28184ae080c5 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Wed, 24 Jan 2018 09:13:10 -0500 Subject: [PATCH 26/35] 0.1.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b505ed2..1c472cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "workerize", - "version": "0.1.5", + "version": "0.1.6", "description": "Run a module in a Web Worker.", "main": "dist/workerize.js", "module": "dist/workerize.m.js", From cd52c992865c94e5c98421b235d20b4853204432 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Wed, 31 Jan 2018 22:19:19 -0500 Subject: [PATCH 27/35] Update devDeps --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1c472cc..4f7f791 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,8 @@ "author": "Jason Miller (http://jasonformat.com)", "license": "MIT", "devDependencies": { - "eslint": "^4.15.0", + "eslint": "^4.16.0", "eslint-config-developit": "^1.1.1", - "microbundle": "^0.4.1" + "microbundle": "^0.4.3" } } From 9490005ef18cd9e439d9d811c89ac5420b2e21be Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Wed, 31 Jan 2018 22:19:34 -0500 Subject: [PATCH 28/35] Fix error serialization exception --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index b838bea..2719940 100644 --- a/src/index.js +++ b/src/index.js @@ -65,7 +65,7 @@ function setup(ctx, rpcMethods, callbacks) { Promise.resolve() .then( () => method.apply(null, data.params) ) .then( result => { ctx.postMessage({ type: 'RPC', id, result }); }) - .catch( error => { ctx.postMessage({ type: 'RPC', id, error }); }); + .catch( err => { ctx.postMessage({ type: 'RPC', id, error: ''+err }); }); } } else { From b86297172ac5fbf2ed24046be53d85b968ba51b3 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Wed, 31 Jan 2018 22:19:49 -0500 Subject: [PATCH 29/35] Fix parsing & detection of async and generator functions --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 2719940..65dd391 100644 --- a/src/index.js +++ b/src/index.js @@ -83,7 +83,7 @@ function toCjs(code, exportsObjName, exports) { exports.default = true; return `${before}${exportsObjName}.default=`; }); - code = code.replace(/^(\s*)export\s+(function|const|let|var)(\s+)([a-zA-Z$_][a-zA-Z0-9$_]*)/mg, (s, before, type, ws, name) => { + code = code.replace(/^(\s*)export\s+((?:async\s*)?function(?:\s*\*)?|const|let|var)(\s+)([a-zA-Z$_][a-zA-Z0-9$_]*)/mg, (s, before, type, ws, name) => { exports[name] = true; return `${before}${exportsObjName}.${name}=${type}${ws}${name}`; }); From eca6a2790d6f494a3c4da0134a7fd26e245a2973 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Wed, 31 Jan 2018 22:19:58 -0500 Subject: [PATCH 30/35] 0.1.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4f7f791..3116d50 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "workerize", - "version": "0.1.6", + "version": "0.1.7", "description": "Run a module in a Web Worker.", "main": "dist/workerize.js", "module": "dist/workerize.m.js", From f8c62d4571c9eb18c31731881db7380eba785c09 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Thu, 5 Apr 2018 14:03:45 -0400 Subject: [PATCH 31/35] Fix funny hidden bug #26 --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 65dd391..fc701cf 100644 --- a/src/index.js +++ b/src/index.js @@ -44,7 +44,7 @@ export default function workerize(code, options) { worker.rpcMethods = {}; setup(worker, worker.rpcMethods, callbacks); worker.expose = methodName => { - worker[i] = function() { + worker[methodName] = function() { return worker.call(methodName, [].slice.call(arguments)); }; }; From 554f86a61b36a3b9e18d91828a6f8d2d5f81ec5d Mon Sep 17 00:00:00 2001 From: Bob Lauer Date: Fri, 11 May 2018 14:41:08 -0500 Subject: [PATCH 32/35] Pass worker as context, `this` not set inside arrow fn --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index fc701cf..73daf1e 100644 --- a/src/index.js +++ b/src/index.js @@ -34,7 +34,7 @@ export default function workerize(code, options) { }; worker.terminate = () => { URL.revokeObjectURL(url); - term.call(this); + term.call(worker); }; worker.call = (method, params) => new Promise( (resolve, reject) => { let id = `rpc${++counter}`; From f252588c78ee4f58945576ba47f27cf9033993cf Mon Sep 17 00:00:00 2001 From: Daniel Ruf Date: Thu, 17 May 2018 22:31:09 +0200 Subject: [PATCH 33/35] chore: add default Travis config --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..d579f75 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - "8" + - "10" +git: + depth: 5 \ No newline at end of file From 46424acc3ea8f64d0c2ae0736e20f36949592f9d Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 27 Dec 2019 20:13:04 -0500 Subject: [PATCH 34/35] fix demo for actual module workers usage --- demo.html | 4 ++-- src/index.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demo.html b/demo.html index 57b03f2..7ded2d0 100644 --- a/demo.html +++ b/demo.html @@ -15,10 +15,10 @@ return res.json(); } `, { type: 'module' }); - + worker.get('package.json').then( pkg => { console.log('Got package name: ', pkg.name); }); - \ No newline at end of file + diff --git a/src/index.js b/src/index.js index 73daf1e..75a5b44 100644 --- a/src/index.js +++ b/src/index.js @@ -22,7 +22,7 @@ export default function workerize(code, options) { let exportsObjName = `__xpo${Math.random().toString().substring(2)}__`; if (typeof code==='function') code = `(${Function.prototype.toString.call(code)})(${exportsObjName})`; code = toCjs(code, exportsObjName, exports) + `\n(${Function.prototype.toString.call(setup)})(self,${exportsObjName},{})`; - let url = URL.createObjectURL(new Blob([code])), + let url = URL.createObjectURL(new Blob([code],{ type: 'text/javascript' })), worker = new Worker(url, options), term = worker.terminate, callbacks = {}, From 540ec5d9e991548d9646f44bab03ffd42d175bb1 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 27 Dec 2019 20:13:13 -0500 Subject: [PATCH 35/35] 0.1.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3116d50..d5e8577 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "workerize", - "version": "0.1.7", + "version": "0.1.8", "description": "Run a module in a Web Worker.", "main": "dist/workerize.js", "module": "dist/workerize.m.js",