Socket
Socket
Sign inDemoInstall

comlink

Package Overview
Dependencies
Maintainers
2
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

comlink - npm Package Compare versions

Comparing version 4.3.0 to 4.3.1

docs/examples/07-sharedworker-example/index.html

2

dist/esm/comlink.d.ts

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc