Comparing version 4.3.0 to 4.3.1
@@ -159,4 +159,4 @@ /** | ||
export declare function wrap<T>(ep: Endpoint, target?: any): Remote<T>; | ||
export declare function transfer(obj: any, transfers: Transferable[]): any; | ||
export declare function transfer<T>(obj: T, transfers: Transferable[]): T; | ||
export declare function proxy<T>(obj: T): T & ProxyMarked; | ||
export declare function windowEndpoint(w: PostMessageWithOrigin, context?: EventSource, targetOrigin?: string): Endpoint; |
@@ -81,3 +81,3 @@ /** | ||
switch (type) { | ||
case 0 /* GET */: | ||
case "GET" /* GET */: | ||
{ | ||
@@ -87,3 +87,3 @@ returnValue = rawValue; | ||
break; | ||
case 1 /* SET */: | ||
case "SET" /* SET */: | ||
{ | ||
@@ -94,3 +94,3 @@ parent[path.slice(-1)[0]] = fromWireValue(ev.data.value); | ||
break; | ||
case 2 /* APPLY */: | ||
case "APPLY" /* APPLY */: | ||
{ | ||
@@ -100,3 +100,3 @@ returnValue = rawValue.apply(parent, argumentList); | ||
break; | ||
case 3 /* CONSTRUCT */: | ||
case "CONSTRUCT" /* CONSTRUCT */: | ||
{ | ||
@@ -107,3 +107,3 @@ const value = new rawValue(...argumentList); | ||
break; | ||
case 4 /* ENDPOINT */: | ||
case "ENDPOINT" /* ENDPOINT */: | ||
{ | ||
@@ -115,3 +115,3 @@ const { port1, port2 } = new MessageChannel(); | ||
break; | ||
case 5 /* RELEASE */: | ||
case "RELEASE" /* RELEASE */: | ||
{ | ||
@@ -121,2 +121,4 @@ returnValue = undefined; | ||
break; | ||
default: | ||
return; | ||
} | ||
@@ -134,3 +136,3 @@ } | ||
ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables); | ||
if (type === 5 /* RELEASE */) { | ||
if (type === "RELEASE" /* RELEASE */) { | ||
// detach and deactive after sending release response above. | ||
@@ -169,3 +171,3 @@ ep.removeEventListener("message", callback); | ||
return requestResponseMessage(ep, { | ||
type: 5 /* RELEASE */, | ||
type: "RELEASE" /* RELEASE */, | ||
path: path.map((p) => p.toString()), | ||
@@ -183,3 +185,3 @@ }).then(() => { | ||
const r = requestResponseMessage(ep, { | ||
type: 0 /* GET */, | ||
type: "GET" /* GET */, | ||
path: path.map((p) => p.toString()), | ||
@@ -197,3 +199,3 @@ }).then(fromWireValue); | ||
return requestResponseMessage(ep, { | ||
type: 1 /* SET */, | ||
type: "SET" /* SET */, | ||
path: [...path, prop].map((p) => p.toString()), | ||
@@ -208,3 +210,3 @@ value, | ||
return requestResponseMessage(ep, { | ||
type: 4 /* ENDPOINT */, | ||
type: "ENDPOINT" /* ENDPOINT */, | ||
}).then(fromWireValue); | ||
@@ -218,3 +220,3 @@ } | ||
return requestResponseMessage(ep, { | ||
type: 2 /* APPLY */, | ||
type: "APPLY" /* APPLY */, | ||
path: path.map((p) => p.toString()), | ||
@@ -228,3 +230,3 @@ argumentList, | ||
return requestResponseMessage(ep, { | ||
type: 3 /* CONSTRUCT */, | ||
type: "CONSTRUCT" /* CONSTRUCT */, | ||
path: path.map((p) => p.toString()), | ||
@@ -265,3 +267,3 @@ argumentList, | ||
{ | ||
type: 3 /* HANDLER */, | ||
type: "HANDLER" /* HANDLER */, | ||
name, | ||
@@ -276,3 +278,3 @@ value: serializedValue, | ||
{ | ||
type: 0 /* RAW */, | ||
type: "RAW" /* RAW */, | ||
value, | ||
@@ -285,5 +287,5 @@ }, | ||
switch (value.type) { | ||
case 3 /* HANDLER */: | ||
case "HANDLER" /* HANDLER */: | ||
return transferHandlers.get(value.name).deserialize(value.value); | ||
case 0 /* RAW */: | ||
case "RAW" /* RAW */: | ||
return value.value; | ||
@@ -290,0 +292,0 @@ } |
@@ -1,2 +0,2 @@ | ||
const e=Symbol("Comlink.proxy"),t=Symbol("Comlink.endpoint"),n=Symbol("Comlink.releaseProxy"),r=Symbol("Comlink.thrown"),a=e=>"object"==typeof e&&null!==e||"function"==typeof e,s=new Map([["proxy",{canHandle:t=>a(t)&&t[e],serialize(e){const{port1:t,port2:n}=new MessageChannel;return o(e,t),[n,[n]]},deserialize:e=>(e.start(),c(e))}],["throw",{canHandle:e=>a(e)&&r in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function o(e,t=self){t.addEventListener("message",(function n(a){if(!a||!a.data)return;const{id:s,type:c,path:u}=Object.assign({path:[]},a.data),l=(a.data.argumentList||[]).map(h);let p;try{const t=u.slice(0,-1).reduce((e,t)=>e[t],e),n=u.reduce((e,t)=>e[t],e);switch(c){case 0:p=n;break;case 1:t[u.slice(-1)[0]]=h(a.data.value),p=!0;break;case 2:p=n.apply(t,l);break;case 3:p=d(new n(...l));break;case 4:{const{port1:t,port2:n}=new MessageChannel;o(e,n),p=m(t,[t])}break;case 5:p=void 0}}catch(e){p={value:e,[r]:0}}Promise.resolve(p).catch(e=>({value:e,[r]:0})).then(e=>{const[r,a]=g(e);t.postMessage(Object.assign(Object.assign({},r),{id:s}),a),5===c&&(t.removeEventListener("message",n),i(t))})})),t.start&&t.start()}function i(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function c(e,r){return function e(r,a=[],s=function(){}){let o=!1;const c=new Proxy(s,{get(t,s){if(u(o),s===n)return()=>v(r,{type:5,path:a.map(e=>e.toString())}).then(()=>{i(r),o=!0});if("then"===s){if(0===a.length)return{then:()=>c};const e=v(r,{type:0,path:a.map(e=>e.toString())}).then(h);return e.then.bind(e)}return e(r,[...a,s])},set(e,t,n){u(o);const[s,i]=g(n);return v(r,{type:1,path:[...a,t].map(e=>e.toString()),value:s},i).then(h)},apply(n,s,i){u(o);const c=a[a.length-1];if(c===t)return v(r,{type:4}).then(h);if("bind"===c)return e(r,a.slice(0,-1));const[p,m]=l(i);return v(r,{type:2,path:a.map(e=>e.toString()),argumentList:p},m).then(h)},construct(e,t){u(o);const[n,s]=l(t);return v(r,{type:3,path:a.map(e=>e.toString()),argumentList:n},s).then(h)}});return c}(e,[],r)}function u(e){if(e)throw new Error("Proxy has been released and is not useable")}function l(e){const t=e.map(g);return[t.map(e=>e[0]),(n=t.map(e=>e[1]),Array.prototype.concat.apply([],n))];var n}const p=new WeakMap;function m(e,t){return p.set(e,t),e}function d(t){return Object.assign(t,{[e]:!0})}function f(e,t=self,n="*"){return{postMessage:(t,r)=>e.postMessage(t,n,r),addEventListener:t.addEventListener.bind(t),removeEventListener:t.removeEventListener.bind(t)}}function g(e){for(const[t,n]of s)if(n.canHandle(e)){const[r,a]=n.serialize(e);return[{type:3,name:t,value:r},a]}return[{type:0,value:e},p.get(e)||[]]}function h(e){switch(e.type){case 3:return s.get(e.name).deserialize(e.value);case 0:return e.value}}function v(e,t,n){return new Promise(r=>{const a=new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");e.addEventListener("message",(function t(n){n.data&&n.data.id&&n.data.id===a&&(e.removeEventListener("message",t),r(n.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:a},t),n)})}export{t as createEndpoint,o as expose,d as proxy,e as proxyMarker,n as releaseProxy,m as transfer,s as transferHandlers,f as windowEndpoint,c as wrap}; | ||
const e=Symbol("Comlink.proxy"),t=Symbol("Comlink.endpoint"),n=Symbol("Comlink.releaseProxy"),r=Symbol("Comlink.thrown"),a=e=>"object"==typeof e&&null!==e||"function"==typeof e,s=new Map([["proxy",{canHandle:t=>a(t)&&t[e],serialize(e){const{port1:t,port2:n}=new MessageChannel;return o(e,t),[n,[n]]},deserialize:e=>(e.start(),c(e))}],["throw",{canHandle:e=>a(e)&&r in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function o(e,t=self){t.addEventListener("message",(function n(a){if(!a||!a.data)return;const{id:s,type:c,path:u}=Object.assign({path:[]},a.data),l=(a.data.argumentList||[]).map(E);let p;try{const t=u.slice(0,-1).reduce((e,t)=>e[t],e),n=u.reduce((e,t)=>e[t],e);switch(c){case"GET":p=n;break;case"SET":t[u.slice(-1)[0]]=E(a.data.value),p=!0;break;case"APPLY":p=n.apply(t,l);break;case"CONSTRUCT":p=d(new n(...l));break;case"ENDPOINT":{const{port1:t,port2:n}=new MessageChannel;o(e,n),p=m(t,[t])}break;case"RELEASE":p=void 0;break;default:return}}catch(e){p={value:e,[r]:0}}Promise.resolve(p).catch(e=>({value:e,[r]:0})).then(e=>{const[r,a]=g(e);t.postMessage(Object.assign(Object.assign({},r),{id:s}),a),"RELEASE"===c&&(t.removeEventListener("message",n),i(t))})})),t.start&&t.start()}function i(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function c(e,r){return function e(r,a=[],s=function(){}){let o=!1;const c=new Proxy(s,{get(t,s){if(u(o),s===n)return()=>h(r,{type:"RELEASE",path:a.map(e=>e.toString())}).then(()=>{i(r),o=!0});if("then"===s){if(0===a.length)return{then:()=>c};const e=h(r,{type:"GET",path:a.map(e=>e.toString())}).then(E);return e.then.bind(e)}return e(r,[...a,s])},set(e,t,n){u(o);const[s,i]=g(n);return h(r,{type:"SET",path:[...a,t].map(e=>e.toString()),value:s},i).then(E)},apply(n,s,i){u(o);const c=a[a.length-1];if(c===t)return h(r,{type:"ENDPOINT"}).then(E);if("bind"===c)return e(r,a.slice(0,-1));const[p,m]=l(i);return h(r,{type:"APPLY",path:a.map(e=>e.toString()),argumentList:p},m).then(E)},construct(e,t){u(o);const[n,s]=l(t);return h(r,{type:"CONSTRUCT",path:a.map(e=>e.toString()),argumentList:n},s).then(E)}});return c}(e,[],r)}function u(e){if(e)throw new Error("Proxy has been released and is not useable")}function l(e){const t=e.map(g);return[t.map(e=>e[0]),(n=t.map(e=>e[1]),Array.prototype.concat.apply([],n))];var n}const p=new WeakMap;function m(e,t){return p.set(e,t),e}function d(t){return Object.assign(t,{[e]:!0})}function f(e,t=self,n="*"){return{postMessage:(t,r)=>e.postMessage(t,n,r),addEventListener:t.addEventListener.bind(t),removeEventListener:t.removeEventListener.bind(t)}}function g(e){for(const[t,n]of s)if(n.canHandle(e)){const[r,a]=n.serialize(e);return[{type:"HANDLER",name:t,value:r},a]}return[{type:"RAW",value:e},p.get(e)||[]]}function E(e){switch(e.type){case"HANDLER":return s.get(e.name).deserialize(e.value);case"RAW":return e.value}}function h(e,t,n){return new Promise(r=>{const a=new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");e.addEventListener("message",(function t(n){n.data&&n.data.id&&n.data.id===a&&(e.removeEventListener("message",t),r(n.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:a},t),n)})}export{t as createEndpoint,o as expose,d as proxy,e as proxyMarker,n as releaseProxy,m as transfer,s as transferHandlers,f as windowEndpoint,c as wrap}; | ||
//# sourceMappingURL=comlink.min.js.map |
@@ -25,6 +25,6 @@ /** | ||
export declare const enum WireValueType { | ||
RAW = 0, | ||
PROXY = 1, | ||
THROW = 2, | ||
HANDLER = 3 | ||
RAW = "RAW", | ||
PROXY = "PROXY", | ||
THROW = "THROW", | ||
HANDLER = "HANDLER" | ||
} | ||
@@ -45,8 +45,8 @@ export interface RawWireValue { | ||
export declare const enum MessageType { | ||
GET = 0, | ||
SET = 1, | ||
APPLY = 2, | ||
CONSTRUCT = 3, | ||
ENDPOINT = 4, | ||
RELEASE = 5 | ||
GET = "GET", | ||
SET = "SET", | ||
APPLY = "APPLY", | ||
CONSTRUCT = "CONSTRUCT", | ||
ENDPOINT = "ENDPOINT", | ||
RELEASE = "RELEASE" | ||
} | ||
@@ -53,0 +53,0 @@ export interface GetMessage { |
@@ -159,4 +159,4 @@ /** | ||
export declare function wrap<T>(ep: Endpoint, target?: any): Remote<T>; | ||
export declare function transfer(obj: any, transfers: Transferable[]): any; | ||
export declare function transfer<T>(obj: T, transfers: Transferable[]): T; | ||
export declare function proxy<T>(obj: T): T & ProxyMarked; | ||
export declare function windowEndpoint(w: PostMessageWithOrigin, context?: EventSource, targetOrigin?: string): Endpoint; |
@@ -87,3 +87,3 @@ (function (global, factory) { | ||
switch (type) { | ||
case 0 /* GET */: | ||
case "GET" /* GET */: | ||
{ | ||
@@ -93,3 +93,3 @@ returnValue = rawValue; | ||
break; | ||
case 1 /* SET */: | ||
case "SET" /* SET */: | ||
{ | ||
@@ -100,3 +100,3 @@ parent[path.slice(-1)[0]] = fromWireValue(ev.data.value); | ||
break; | ||
case 2 /* APPLY */: | ||
case "APPLY" /* APPLY */: | ||
{ | ||
@@ -106,3 +106,3 @@ returnValue = rawValue.apply(parent, argumentList); | ||
break; | ||
case 3 /* CONSTRUCT */: | ||
case "CONSTRUCT" /* CONSTRUCT */: | ||
{ | ||
@@ -113,3 +113,3 @@ const value = new rawValue(...argumentList); | ||
break; | ||
case 4 /* ENDPOINT */: | ||
case "ENDPOINT" /* ENDPOINT */: | ||
{ | ||
@@ -121,3 +121,3 @@ const { port1, port2 } = new MessageChannel(); | ||
break; | ||
case 5 /* RELEASE */: | ||
case "RELEASE" /* RELEASE */: | ||
{ | ||
@@ -127,2 +127,4 @@ returnValue = undefined; | ||
break; | ||
default: | ||
return; | ||
} | ||
@@ -140,3 +142,3 @@ } | ||
ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables); | ||
if (type === 5 /* RELEASE */) { | ||
if (type === "RELEASE" /* RELEASE */) { | ||
// detach and deactive after sending release response above. | ||
@@ -175,3 +177,3 @@ ep.removeEventListener("message", callback); | ||
return requestResponseMessage(ep, { | ||
type: 5 /* RELEASE */, | ||
type: "RELEASE" /* RELEASE */, | ||
path: path.map((p) => p.toString()), | ||
@@ -189,3 +191,3 @@ }).then(() => { | ||
const r = requestResponseMessage(ep, { | ||
type: 0 /* GET */, | ||
type: "GET" /* GET */, | ||
path: path.map((p) => p.toString()), | ||
@@ -203,3 +205,3 @@ }).then(fromWireValue); | ||
return requestResponseMessage(ep, { | ||
type: 1 /* SET */, | ||
type: "SET" /* SET */, | ||
path: [...path, prop].map((p) => p.toString()), | ||
@@ -214,3 +216,3 @@ value, | ||
return requestResponseMessage(ep, { | ||
type: 4 /* ENDPOINT */, | ||
type: "ENDPOINT" /* ENDPOINT */, | ||
}).then(fromWireValue); | ||
@@ -224,3 +226,3 @@ } | ||
return requestResponseMessage(ep, { | ||
type: 2 /* APPLY */, | ||
type: "APPLY" /* APPLY */, | ||
path: path.map((p) => p.toString()), | ||
@@ -234,3 +236,3 @@ argumentList, | ||
return requestResponseMessage(ep, { | ||
type: 3 /* CONSTRUCT */, | ||
type: "CONSTRUCT" /* CONSTRUCT */, | ||
path: path.map((p) => p.toString()), | ||
@@ -271,3 +273,3 @@ argumentList, | ||
{ | ||
type: 3 /* HANDLER */, | ||
type: "HANDLER" /* HANDLER */, | ||
name, | ||
@@ -282,3 +284,3 @@ value: serializedValue, | ||
{ | ||
type: 0 /* RAW */, | ||
type: "RAW" /* RAW */, | ||
value, | ||
@@ -291,5 +293,5 @@ }, | ||
switch (value.type) { | ||
case 3 /* HANDLER */: | ||
case "HANDLER" /* HANDLER */: | ||
return transferHandlers.get(value.name).deserialize(value.value); | ||
case 0 /* RAW */: | ||
case "RAW" /* RAW */: | ||
return value.value; | ||
@@ -296,0 +298,0 @@ } |
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).Comlink={})}(this,(function(e){"use strict";const t=Symbol("Comlink.proxy"),n=Symbol("Comlink.endpoint"),r=Symbol("Comlink.releaseProxy"),a=Symbol("Comlink.thrown"),s=e=>"object"==typeof e&&null!==e||"function"==typeof e,o=new Map([["proxy",{canHandle:e=>s(e)&&e[t],serialize(e){const{port1:t,port2:n}=new MessageChannel;return i(e,t),[n,[n]]},deserialize:e=>(e.start(),u(e))}],["throw",{canHandle:e=>s(e)&&a in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function i(e,t=self){t.addEventListener("message",(function n(r){if(!r||!r.data)return;const{id:s,type:o,path:u}=Object.assign({path:[]},r.data),l=(r.data.argumentList||[]).map(g);let p;try{const t=u.slice(0,-1).reduce((e,t)=>e[t],e),n=u.reduce((e,t)=>e[t],e);switch(o){case 0:p=n;break;case 1:t[u.slice(-1)[0]]=g(r.data.value),p=!0;break;case 2:p=n.apply(t,l);break;case 3:p=m(new n(...l));break;case 4:{const{port1:t,port2:n}=new MessageChannel;i(e,n),p=f(t,[t])}break;case 5:p=void 0}}catch(e){p={value:e,[a]:0}}Promise.resolve(p).catch(e=>({value:e,[a]:0})).then(e=>{const[r,a]=y(e);t.postMessage(Object.assign(Object.assign({},r),{id:s}),a),5===o&&(t.removeEventListener("message",n),c(t))})})),t.start&&t.start()}function c(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function u(e,t){return function e(t,a=[],s=function(){}){let o=!1;const i=new Proxy(s,{get(n,s){if(l(o),s===r)return()=>h(t,{type:5,path:a.map(e=>e.toString())}).then(()=>{c(t),o=!0});if("then"===s){if(0===a.length)return{then:()=>i};const e=h(t,{type:0,path:a.map(e=>e.toString())}).then(g);return e.then.bind(e)}return e(t,[...a,s])},set(e,n,r){l(o);const[s,i]=y(r);return h(t,{type:1,path:[...a,n].map(e=>e.toString()),value:s},i).then(g)},apply(r,s,i){l(o);const c=a[a.length-1];if(c===n)return h(t,{type:4}).then(g);if("bind"===c)return e(t,a.slice(0,-1));const[u,d]=p(i);return h(t,{type:2,path:a.map(e=>e.toString()),argumentList:u},d).then(g)},construct(e,n){l(o);const[r,s]=p(n);return h(t,{type:3,path:a.map(e=>e.toString()),argumentList:r},s).then(g)}});return i}(e,[],t)}function l(e){if(e)throw new Error("Proxy has been released and is not useable")}function p(e){const t=e.map(y);return[t.map(e=>e[0]),(n=t.map(e=>e[1]),Array.prototype.concat.apply([],n))];var n}const d=new WeakMap;function f(e,t){return d.set(e,t),e}function m(e){return Object.assign(e,{[t]:!0})}function y(e){for(const[t,n]of o)if(n.canHandle(e)){const[r,a]=n.serialize(e);return[{type:3,name:t,value:r},a]}return[{type:0,value:e},d.get(e)||[]]}function g(e){switch(e.type){case 3:return o.get(e.name).deserialize(e.value);case 0:return e.value}}function h(e,t,n){return new Promise(r=>{const a=new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");e.addEventListener("message",(function t(n){n.data&&n.data.id&&n.data.id===a&&(e.removeEventListener("message",t),r(n.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:a},t),n)})}e.createEndpoint=n,e.expose=i,e.proxy=m,e.proxyMarker=t,e.releaseProxy=r,e.transfer=f,e.transferHandlers=o,e.windowEndpoint=function(e,t=self,n="*"){return{postMessage:(t,r)=>e.postMessage(t,n,r),addEventListener:t.addEventListener.bind(t),removeEventListener:t.removeEventListener.bind(t)}},e.wrap=u,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).Comlink={})}(this,(function(e){"use strict";const t=Symbol("Comlink.proxy"),n=Symbol("Comlink.endpoint"),r=Symbol("Comlink.releaseProxy"),a=Symbol("Comlink.thrown"),s=e=>"object"==typeof e&&null!==e||"function"==typeof e,o=new Map([["proxy",{canHandle:e=>s(e)&&e[t],serialize(e){const{port1:t,port2:n}=new MessageChannel;return i(e,t),[n,[n]]},deserialize:e=>(e.start(),u(e))}],["throw",{canHandle:e=>s(e)&&a in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function i(e,t=self){t.addEventListener("message",(function n(r){if(!r||!r.data)return;const{id:s,type:o,path:u}=Object.assign({path:[]},r.data),l=(r.data.argumentList||[]).map(y);let p;try{const t=u.slice(0,-1).reduce((e,t)=>e[t],e),n=u.reduce((e,t)=>e[t],e);switch(o){case"GET":p=n;break;case"SET":t[u.slice(-1)[0]]=y(r.data.value),p=!0;break;case"APPLY":p=n.apply(t,l);break;case"CONSTRUCT":p=m(new n(...l));break;case"ENDPOINT":{const{port1:t,port2:n}=new MessageChannel;i(e,n),p=f(t,[t])}break;case"RELEASE":p=void 0;break;default:return}}catch(e){p={value:e,[a]:0}}Promise.resolve(p).catch(e=>({value:e,[a]:0})).then(e=>{const[r,a]=E(e);t.postMessage(Object.assign(Object.assign({},r),{id:s}),a),"RELEASE"===o&&(t.removeEventListener("message",n),c(t))})})),t.start&&t.start()}function c(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function u(e,t){return function e(t,a=[],s=function(){}){let o=!1;const i=new Proxy(s,{get(n,s){if(l(o),s===r)return()=>g(t,{type:"RELEASE",path:a.map(e=>e.toString())}).then(()=>{c(t),o=!0});if("then"===s){if(0===a.length)return{then:()=>i};const e=g(t,{type:"GET",path:a.map(e=>e.toString())}).then(y);return e.then.bind(e)}return e(t,[...a,s])},set(e,n,r){l(o);const[s,i]=E(r);return g(t,{type:"SET",path:[...a,n].map(e=>e.toString()),value:s},i).then(y)},apply(r,s,i){l(o);const c=a[a.length-1];if(c===n)return g(t,{type:"ENDPOINT"}).then(y);if("bind"===c)return e(t,a.slice(0,-1));const[u,d]=p(i);return g(t,{type:"APPLY",path:a.map(e=>e.toString()),argumentList:u},d).then(y)},construct(e,n){l(o);const[r,s]=p(n);return g(t,{type:"CONSTRUCT",path:a.map(e=>e.toString()),argumentList:r},s).then(y)}});return i}(e,[],t)}function l(e){if(e)throw new Error("Proxy has been released and is not useable")}function p(e){const t=e.map(E);return[t.map(e=>e[0]),(n=t.map(e=>e[1]),Array.prototype.concat.apply([],n))];var n}const d=new WeakMap;function f(e,t){return d.set(e,t),e}function m(e){return Object.assign(e,{[t]:!0})}function E(e){for(const[t,n]of o)if(n.canHandle(e)){const[r,a]=n.serialize(e);return[{type:"HANDLER",name:t,value:r},a]}return[{type:"RAW",value:e},d.get(e)||[]]}function y(e){switch(e.type){case"HANDLER":return o.get(e.name).deserialize(e.value);case"RAW":return e.value}}function g(e,t,n){return new Promise(r=>{const a=new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");e.addEventListener("message",(function t(n){n.data&&n.data.id&&n.data.id===a&&(e.removeEventListener("message",t),r(n.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:a},t),n)})}e.createEndpoint=n,e.expose=i,e.proxy=m,e.proxyMarker=t,e.releaseProxy=r,e.transfer=f,e.transferHandlers=o,e.windowEndpoint=function(e,t=self,n="*"){return{postMessage:(t,r)=>e.postMessage(t,n,r),addEventListener:t.addEventListener.bind(t),removeEventListener:t.removeEventListener.bind(t)}},e.wrap=u,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=comlink.min.js.map |
@@ -25,6 +25,6 @@ /** | ||
export declare const enum WireValueType { | ||
RAW = 0, | ||
PROXY = 1, | ||
THROW = 2, | ||
HANDLER = 3 | ||
RAW = "RAW", | ||
PROXY = "PROXY", | ||
THROW = "THROW", | ||
HANDLER = "HANDLER" | ||
} | ||
@@ -45,8 +45,8 @@ export interface RawWireValue { | ||
export declare const enum MessageType { | ||
GET = 0, | ||
SET = 1, | ||
APPLY = 2, | ||
CONSTRUCT = 3, | ||
ENDPOINT = 4, | ||
RELEASE = 5 | ||
GET = "GET", | ||
SET = "SET", | ||
APPLY = "APPLY", | ||
CONSTRUCT = "CONSTRUCT", | ||
ENDPOINT = "ENDPOINT", | ||
RELEASE = "RELEASE" | ||
} | ||
@@ -53,0 +53,0 @@ export interface GetMessage { |
{ | ||
"name": "comlink", | ||
"version": "4.3.0", | ||
"version": "4.3.1", | ||
"description": "Comlink makes WebWorkers enjoyable", | ||
@@ -8,2 +8,3 @@ "main": "dist/umd/comlink.js", | ||
"types": "dist/umd/comlink.d.ts", | ||
"sideEffects": false, | ||
"scripts": { | ||
@@ -36,20 +37,20 @@ "build": "rollup -c", | ||
"conditional-type-checks": "1.0.5", | ||
"husky": "^4.2.5", | ||
"karma": "^5.0.2", | ||
"husky": "4.2.5", | ||
"karma": "^5.0.9", | ||
"karma-chai": "0.1.0", | ||
"karma-chrome-launcher": "3.1.0", | ||
"karma-detect-browsers": "2.3.3", | ||
"karma-firefox-launcher": "^1.3.0", | ||
"karma-mocha": "^2.0.0", | ||
"karma-firefox-launcher": "1.3.0", | ||
"karma-mocha": "^2.0.1", | ||
"karma-safari-launcher": "1.0.0", | ||
"karma-safaritechpreview-launcher": "2.0.2", | ||
"mocha": "^7.1.2", | ||
"prettier": "^2.0.5", | ||
"rimraf": "^3.0.2", | ||
"rollup": "^2.7.3", | ||
"rollup-plugin-terser": "^5.3.0", | ||
"rollup-plugin-typescript2": "^0.27.0", | ||
"typescript": "3.8.3" | ||
"mocha": "^7.2.0", | ||
"prettier": "2.0.5", | ||
"rimraf": "3.0.2", | ||
"rollup": "^2.11.2", | ||
"rollup-plugin-terser": "^6.1.0", | ||
"rollup-plugin-typescript2": "^0.27.1", | ||
"typescript": "^3.9.3" | ||
}, | ||
"dependencies": {} | ||
} |
@@ -97,2 +97,56 @@ # Comlink | ||
### [`SharedWorker`](./docs/examples/07-sharedworker-example) | ||
When using Comlink with a [`SharedWorker`](https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker) you have to: | ||
1. Use the [`port`](https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker/port) property, of the `SharedWorker` instance, when calling `Comlink.wrap`. | ||
2. Call `Comlink.expose` within the [`onconnect`](https://developer.mozilla.org/en-US/docs/Web/API/SharedWorkerGlobalScope/onconnect) callback of the shared worker. | ||
**Pro tip:** You can access DevTools for any shared worker currently running in Chrome by going to: **chrome://inspect/#workers** | ||
**main.js** | ||
```javascript | ||
import * as Comlink from "https://unpkg.com/comlink/dist/esm/comlink.mjs"; | ||
async function init() { | ||
const worker = new SharedWorker("worker.js"); | ||
/** | ||
* SharedWorkers communicate via the `postMessage` function in their `port` property. | ||
* Therefore you must use the SharedWorker's `port` property when calling `Comlink.wrap`. | ||
*/ | ||
const obj = Comlink.wrap(worker.port); | ||
alert(`Counter: ${await obj.counter}`); | ||
await obj.inc(); | ||
alert(`Counter: ${await obj.counter}`); | ||
} | ||
init(); | ||
``` | ||
**worker.js** | ||
```javascript | ||
importScripts("https://unpkg.com/comlink/dist/umd/comlink.js"); | ||
// importScripts("../../../dist/umd/comlink.js"); | ||
const obj = { | ||
counter: 0, | ||
inc() { | ||
this.counter++; | ||
}, | ||
}; | ||
/** | ||
* When a connection is made into this shared worker, expose `obj` | ||
* via the connection `port`. | ||
*/ | ||
onconnect = function (event) { | ||
const port = event.ports[0]; | ||
Comlink.expose(obj, port); | ||
}; | ||
// Single line alternative: | ||
// onconnect = (e) => Comlink.expose(obj, e.ports[0]); | ||
``` | ||
**For additional examples, please see the [docs/examples](./docs/examples) directory in the project.** | ||
@@ -157,3 +211,3 @@ | ||
Note that this particular transfer handler won’t create an actual `Event`, but just an object that has the `event.target.id` and `event.target.classList` property. Often, this enough. If not, the transfer handler can be easily augmented to provide all necessary data. | ||
Note that this particular transfer handler won’t create an actual `Event`, but just an object that has the `event.target.id` and `event.target.classList` property. Often, this is enough. If not, the transfer handler can be easily augmented to provide all necessary data. | ||
@@ -160,0 +214,0 @@ ### `Comlink.releaseProxy` |
@@ -30,3 +30,2 @@ import typescript from "rollup-plugin-typescript2"; | ||
? terser({ | ||
sourcemap: true, | ||
compress: true, | ||
@@ -33,0 +32,0 @@ mangle: true, |
@@ -333,2 +333,4 @@ /** | ||
break; | ||
default: | ||
return; | ||
} | ||
@@ -472,3 +474,3 @@ } catch (value) { | ||
const transferCache = new WeakMap<any, Transferable[]>(); | ||
export function transfer(obj: any, transfers: Transferable[]) { | ||
export function transfer<T>(obj: T, transfers: Transferable[]): T { | ||
transferCache.set(obj, transfers); | ||
@@ -475,0 +477,0 @@ return obj; |
@@ -20,2 +20,3 @@ /** | ||
): void; | ||
removeEventListener( | ||
@@ -38,2 +39,3 @@ type: string, | ||
postMessage(message: any, transfer?: Transferable[]): void; | ||
start?: () => void; | ||
@@ -43,6 +45,6 @@ } | ||
export const enum WireValueType { | ||
RAW, | ||
PROXY, | ||
THROW, | ||
HANDLER, | ||
RAW = "RAW", | ||
PROXY = "PROXY", | ||
THROW = "THROW", | ||
HANDLER = "HANDLER", | ||
} | ||
@@ -68,8 +70,8 @@ | ||
export const enum MessageType { | ||
GET, | ||
SET, | ||
APPLY, | ||
CONSTRUCT, | ||
ENDPOINT, | ||
RELEASE, | ||
GET = "GET", | ||
SET = "SET", | ||
APPLY = "APPLY", | ||
CONSTRUCT = "CONSTRUCT", | ||
ENDPOINT = "ENDPOINT", | ||
RELEASE = "RELEASE", | ||
} | ||
@@ -76,0 +78,0 @@ |
@@ -478,3 +478,3 @@ /** | ||
it("will proxy deeply nested values", async function () { | ||
xit("will proxy deeply nested values", async function () { | ||
const thing = Comlink.wrap(this.port1); | ||
@@ -481,0 +481,0 @@ const obj = { |
@@ -158,6 +158,6 @@ import { assert, Has, NotHas, IsAny, IsExact } from "conditional-type-checks"; | ||
// @ts-expect-error | ||
// proxy.proxyProp.method(123); | ||
proxy.proxyProp.method(123); | ||
// @ts-expect-error | ||
// proxy.proxyProp.method(); | ||
proxy.proxyProp.method(); | ||
@@ -192,6 +192,6 @@ const r4 = proxy.methodWithProxiedReturnValue(); | ||
// @ts-expect-error | ||
// await new ProxiedFooClass(123); | ||
await new ProxiedFooClass(123); | ||
// @ts-expect-error | ||
// await new ProxiedFooClass(); | ||
await new ProxiedFooClass(); | ||
@@ -307,3 +307,3 @@ // | ||
// @ts-expect-error | ||
// subscriber.next(); | ||
subscriber.next(); | ||
@@ -313,3 +313,3 @@ if (subscriber.next) { | ||
// @ts-expect-error | ||
// subscriber.next(); | ||
subscriber.next(); | ||
} | ||
@@ -331,3 +331,3 @@ | ||
Comlink.proxy(async ({ textDocument }: Params) => { | ||
return Comlink.proxy({ | ||
const subscribable = Comlink.proxy({ | ||
subscribe( | ||
@@ -353,2 +353,3 @@ subscriber: Comlink.Remote<Subscriber<string> & Comlink.ProxyMarked> | ||
}); | ||
return subscribable; | ||
}) | ||
@@ -355,0 +356,0 @@ ); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
337653
77
3573
271