Socket
Socket
Sign inDemoInstall

cross-domain-safe-weakmap

Package Overview
Dependencies
0
Maintainers
1
Versions
29
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.3 to 1.0.4

src/native.js

191

dist/cross-domain-safe-weakmap.js

@@ -59,8 +59,9 @@ (function webpackUniversalModuleDefinition(root, factory) {

});
var WeakMap = exports.WeakMap = void 0;
if (window.WeakMap) {
exports.WeakMap = WeakMap = window.WeakMap;
} else {
exports.WeakMap = WeakMap = __webpack_require__("./src/weakmap.js").WeakMap;
}
var _weakmap = __webpack_require__("./src/weakmap.js");
Object.defineProperty(exports, "WeakMap", {
enumerable: true,
get: function get() {
return _weakmap.WeakMap;
}
});
},

@@ -90,2 +91,3 @@ "./src/weakmap.js": function(module, exports, __webpack_require__) {

var _util = __webpack_require__("./src/util.js");
var _native = __webpack_require__("./src/native.js");
function _classCallCheck(instance, Constructor) {

@@ -103,2 +105,5 @@ if (!(instance instanceof Constructor)) {

this.name = "__weakmap_" + (Math.random() * 1e9 >>> 0) + "__" + counter;
if ((0, _native.hasNativeWeakMap)()) {
this.weakmap = new window.WeakMap();
}
this.keys = [];

@@ -110,14 +115,31 @@ this.values = [];

value: function set(key, value) {
var weakmap = this.weakmap;
if (weakmap) {
try {
weakmap.set(key, value);
} catch (err) {
delete this.weakmap;
}
}
if ((0, _util.isWindow)(key)) {
return this.safeSet(key, value);
}
var name = this.name;
var entry = key[name];
if (entry && entry[0] === key) {
entry[1] = value;
var keys = this.keys;
var values = this.values;
var index = keys.indexOf(key);
if (index === -1) {
keys.push(key);
values.push(value);
} else {
values[index] = value;
}
} else {
defineProperty(key, name, {
value: [ key, value ],
writable: true
});
var name = this.name;
var entry = key[name];
if (entry && entry[0] === key) {
entry[1] = value;
} else {
defineProperty(key, name, {
value: [ key, value ],
writable: true
});
}
}

@@ -128,9 +150,25 @@ }

value: function get(key) {
var weakmap = this.weakmap;
if (weakmap) {
try {
if (weakmap.has(key)) {
return weakmap.get(key);
}
} catch (err) {
delete this.weakmap;
}
}
if ((0, _util.isWindow)(key)) {
return this.safeGet(key);
var keys = this.keys;
var index = keys.indexOf(key);
if (index === -1) {
return;
}
return this.values[index];
} else {
var entry = key[this.name];
if (entry && entry[0] === key) {
return entry[1];
}
}
var entry = key[this.name];
if (entry && entry[0] === key) {
return entry[1];
}
}

@@ -140,9 +178,23 @@ }, {

value: function _delete(key) {
var weakmap = this.weakmap;
if (weakmap) {
try {
weakmap["delete"](key);
} catch (err) {
delete this.weakmap;
}
}
if ((0, _util.isWindow)(key)) {
return this.safeDelete(key);
var keys = this.keys;
var index = keys.indexOf(key);
if (index !== -1) {
keys.splice(index, 1);
this.values.splice(index, 1);
}
} else {
var entry = key[this.name];
if (entry && entry[0] === key) {
entry[0] = entry[1] = undefined;
}
}
var entry = key[this.name];
if (entry && entry[0] === key) {
entry[0] = entry[1] = undefined;
}
}

@@ -152,49 +204,20 @@ }, {

value: function has(key) {
var weakmap = this.weakmap;
if (weakmap) {
try {
return weakmap.has(key);
} catch (err) {
delete this.weakmap;
}
}
if ((0, _util.isWindow)(key)) {
return this.safeHas(key);
return this.keys.indexOf(key) !== -1;
} else {
var entry = key[this.name];
if (entry && entry[0] === key) {
return true;
}
return false;
}
var entry = key[this.name];
if (entry && entry[0] === key) {
return true;
}
return false;
}
}, {
key: "safeSet",
value: function safeSet(key, value) {
var keys = this.keys;
var values = this.values;
var index = keys.indexOf(key);
if (index === -1) {
keys.push(key);
values.push(value);
return;
}
values[index] = value;
}
}, {
key: "safeGet",
value: function safeGet(key) {
var keys = this.keys;
var index = keys.indexOf(key);
if (index === -1) {
return;
}
return this.values[index];
}
}, {
key: "safeDelete",
value: function safeDelete(key) {
var keys = this.keys;
var index = keys.indexOf(key);
if (index !== -1) {
keys.splice(index, 1);
this.values.splice(index, 1);
}
}
}, {
key: "safeHas",
value: function safeHas(key) {
return this.keys.indexOf(key) !== -1;
}
} ]);

@@ -223,2 +246,30 @@ return WeakMap;

}
},
"./src/native.js": function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.hasNativeWeakMap = hasNativeWeakMap;
function hasNativeWeakMap() {
if (!window.WeakMap) {
return false;
}
if (!window.Object.freeze) {
return false;
}
try {
var testWeakMap = new window.WeakMap();
var testKey = {};
var testValue = "__testvalue__";
window.Object.freeze(testKey);
testWeakMap.set(testKey, testValue);
if (testWeakMap.get(testKey) === testValue) {
return true;
}
return false;
} catch (err) {
return false;
}
}
}

@@ -225,0 +276,0 @@ });

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("xdsweakmap",[],t):"object"==typeof exports?exports.xdsweakmap=t():e.xdsweakmap=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,"__esModule",{value:!0});var i=n(1);Object.keys(i).forEach(function(e){"default"!==e&&"__esModule"!==e&&Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}})});var a=r(i);t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.WeakMap=void 0;window.WeakMap?t.WeakMap=r=window.WeakMap:t.WeakMap=r=n(2).WeakMap},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.WeakMap=void 0;var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(3),u=Object.defineProperty,o=Date.now()%1e9;t.WeakMap=function(){function e(){r(this,e),o+=1,this.name="__weakmap_"+(1e9*Math.random()>>>0)+"__"+o,this.keys=[],this.values=[]}return i(e,[{key:"set",value:function(e,t){if((0,a.isWindow)(e))return this.safeSet(e,t);var n=this.name,r=e[n];r&&r[0]===e?r[1]=t:u(e,n,{value:[e,t],writable:!0})}},{key:"get",value:function(e){if((0,a.isWindow)(e))return this.safeGet(e);var t=e[this.name];return t&&t[0]===e?t[1]:void 0}},{key:"delete",value:function(e){if((0,a.isWindow)(e))return this.safeDelete(e);var t=e[this.name];t&&t[0]===e&&(t[0]=t[1]=void 0)}},{key:"has",value:function(e){if((0,a.isWindow)(e))return this.safeHas(e);var t=e[this.name];return!(!t||t[0]!==e)}},{key:"safeSet",value:function(e,t){var n=this.keys,r=this.values,i=n.indexOf(e);return i===-1?(n.push(e),void r.push(t)):void(r[i]=t)}},{key:"safeGet",value:function(e){var t=this.keys,n=t.indexOf(e);if(n!==-1)return this.values[n]}},{key:"safeDelete",value:function(e){var t=this.keys,n=t.indexOf(e);n!==-1&&(t.splice(n,1),this.values.splice(n,1))}},{key:"safeHas",value:function(e){return this.keys.indexOf(e)!==-1}}]),e}()},function(e,t){"use strict";function n(e){if(r.indexOf(e)!==-1)return!0;try{if(e&&e.self===e)return r.push(e),!0}catch(e){}return!1}Object.defineProperty(t,"__esModule",{value:!0}),t.isWindow=n;var r=[]}])});
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("xdsweakmap",[],t):"object"==typeof exports?exports.xdsweakmap=t():e.xdsweakmap=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var a=r[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}Object.defineProperty(t,"__esModule",{value:!0});var a=r(1);Object.keys(a).forEach(function(e){"default"!==e&&"__esModule"!==e&&Object.defineProperty(t,e,{enumerable:!0,get:function(){return a[e]}})});var i=n(a);t.default=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(2);Object.defineProperty(t,"WeakMap",{enumerable:!0,get:function(){return n.WeakMap}})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.WeakMap=void 0;var a=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),i=r(3),u=r(4),s=Object.defineProperty,o=Date.now()%1e9;t.WeakMap=function(){function e(){n(this,e),o+=1,this.name="__weakmap_"+(1e9*Math.random()>>>0)+"__"+o,(0,u.hasNativeWeakMap)()&&(this.weakmap=new window.WeakMap),this.keys=[],this.values=[]}return a(e,[{key:"set",value:function(e,t){var r=this.weakmap;if(r)try{r.set(e,t)}catch(e){delete this.weakmap}if((0,i.isWindow)(e)){var n=this.keys,a=this.values,u=n.indexOf(e);u===-1?(n.push(e),a.push(t)):a[u]=t}else{var o=this.name,f=e[o];f&&f[0]===e?f[1]=t:s(e,o,{value:[e,t],writable:!0})}}},{key:"get",value:function(e){var t=this.weakmap;if(t)try{if(t.has(e))return t.get(e)}catch(e){delete this.weakmap}if((0,i.isWindow)(e)){var r=this.keys,n=r.indexOf(e);if(n===-1)return;return this.values[n]}var a=e[this.name];if(a&&a[0]===e)return a[1]}},{key:"delete",value:function(e){var t=this.weakmap;if(t)try{t.delete(e)}catch(e){delete this.weakmap}if((0,i.isWindow)(e)){var r=this.keys,n=r.indexOf(e);n!==-1&&(r.splice(n,1),this.values.splice(n,1))}else{var a=e[this.name];a&&a[0]===e&&(a[0]=a[1]=void 0)}}},{key:"has",value:function(e){var t=this.weakmap;if(t)try{return t.has(e)}catch(e){delete this.weakmap}if((0,i.isWindow)(e))return this.keys.indexOf(e)!==-1;var r=e[this.name];return!(!r||r[0]!==e)}}]),e}()},function(e,t){"use strict";function r(e){if(n.indexOf(e)!==-1)return!0;try{if(e&&e.self===e)return n.push(e),!0}catch(e){}return!1}Object.defineProperty(t,"__esModule",{value:!0}),t.isWindow=r;var n=[]},function(e,t){"use strict";function r(){if(!window.WeakMap)return!1;if(!window.Object.freeze)return!1;try{var e=new window.WeakMap,t={},r="__testvalue__";return window.Object.freeze(t),e.set(t,r),e.get(t)===r}catch(e){return!1}}Object.defineProperty(t,"__esModule",{value:!0}),t.hasNativeWeakMap=r}])});
//# sourceMappingURL=cross-domain-safe-weakmap.min.js.map
{
"name": "cross-domain-safe-weakmap",
"version": "1.0.3",
"version": "1.0.4",
"description": "Cross domain safe WeakMap.",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -0,4 +1,5 @@

/* @flow */
import * as INTERFACE from './interface';
export * from './interface';
export default INTERFACE;
export default INTERFACE;

@@ -0,8 +1,3 @@

/* @flow */
export let WeakMap;
if (window.WeakMap) {
WeakMap = window.WeakMap;
} else {
WeakMap = require('./weakmap').WeakMap;
}
export { WeakMap } from './weakmap';
/* @flow */
import { isWindow } from './util';
import { hasNativeWeakMap } from './native';

@@ -11,2 +12,3 @@ let defineProperty = Object.defineProperty;

name : string
weakmap : WeakMap
keys : Array<mixed>

@@ -18,2 +20,7 @@ values : Array<mixed>

this.name = `__weakmap_${Math.random() * 1e9 >>> 0}__${counter}`; // eslint-disable-line
if (hasNativeWeakMap()) {
this.weakmap = new window.WeakMap();
}
this.keys = [];

@@ -25,16 +32,38 @@ this.values = [];

if (isWindow(key)) {
return this.safeSet(key, value);
let weakmap = this.weakmap;
if (weakmap) {
try {
weakmap.set(key, value);
} catch (err) {
delete this.weakmap;
}
}
let name = this.name;
let entry = key[name];
if (isWindow(key)) {
if (entry && entry[0] === key) {
entry[1] = value;
let keys = this.keys;
let values = this.values;
let index = keys.indexOf(key);
if (index === -1) {
keys.push(key);
values.push(value);
} else {
values[index] = value;
}
} else {
defineProperty(key, name, {
value: [ key, value ],
writable: true
});
let name = this.name;
let entry = key[name];
if (entry && entry[0] === key) {
entry[1] = value;
} else {
defineProperty(key, name, {
value: [ key, value ],
writable: true
});
}
}

@@ -45,83 +74,94 @@ }

if (isWindow(key)) {
return this.safeGet(key);
let weakmap = this.weakmap;
if (weakmap) {
try {
if (weakmap.has(key)) {
return weakmap.get(key);
}
} catch (err) {
delete this.weakmap;
}
}
let entry = key[this.name];
if (isWindow(key)) {
if (entry && entry[0] === key) {
return entry[1];
}
}
let keys = this.keys;
let index = keys.indexOf(key);
delete(key : Object) {
if (index === -1) {
return;
}
if (isWindow(key)) {
return this.safeDelete(key);
}
return this.values[index];
let entry = key[this.name];
} else {
if (entry && entry[0] === key) {
entry[0] = entry[1] = undefined;
let entry = key[this.name];
if (entry && entry[0] === key) {
return entry[1];
}
}
}
has(key : Object) {
delete(key : Object) {
if (isWindow(key)) {
return this.safeHas(key);
let weakmap = this.weakmap;
if (weakmap) {
try {
weakmap.delete(key);
} catch (err) {
delete this.weakmap;
}
}
let entry = key[this.name];
if (isWindow(key)) {
if (entry && entry[0] === key) {
return true;
}
let keys = this.keys;
let index = keys.indexOf(key);
return false;
}
if (index !== -1) {
keys.splice(index, 1);
this.values.splice(index, 1);
}
safeSet(key : Object, value : mixed) {
} else {
let keys = this.keys;
let values = this.values;
let index = keys.indexOf(key);
let entry = key[this.name];
if (index === -1) {
keys.push(key);
values.push(value);
return;
if (entry && entry[0] === key) {
entry[0] = entry[1] = undefined;
}
}
values[index] = value;
}
safeGet(key : Object) : ?mixed {
has(key : Object) {
let keys = this.keys;
let index = keys.indexOf(key);
let weakmap = this.weakmap;
if (index === -1) {
return;
if (weakmap) {
try {
return weakmap.has(key);
} catch (err) {
delete this.weakmap;
}
}
return this.values[index];
}
if (isWindow(key)) {
safeDelete(key : Object) {
return this.keys.indexOf(key) !== -1;
let keys = this.keys;
let index = keys.indexOf(key);
} else {
if (index !== -1) {
keys.splice(index, 1);
this.values.splice(index, 1);
}
}
let entry = key[this.name];
safeHas(key : Object) {
if (entry && entry[0] === key) {
return true;
}
return this.keys.indexOf(key) !== -1;
return false;
}
}
}

@@ -188,1 +188,233 @@ /* @flow */

});
describe('weakmap standard cases with no native WeakMap', () => {
it('should set and get a key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = {};
let val = 'foo';
map.set(obj, val);
let result = map.get(obj);
if (result !== val) {
throw new Error(`Expected ${result || ''} to be '${val}'`);
}
});
it('should get a non-existant key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = {};
let result = map.get(obj);
if (result !== undefined) {
throw new Error(`Expected result to be undefined`);
}
});
it('should set over an existing key, and get a key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = {};
let val1 = 'foo';
let val2 = 'bar';
map.set(obj, val1);
map.set(obj, val2);
let result = map.get(obj);
if (result !== val2) {
throw new Error(`Expected ${result || ''} to be '${val2}'`);
}
});
it('should set and check for a key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = {};
let val = 'foo';
map.set(obj, val);
let result = map.has(obj);
if (!result) {
throw new Error(`Expected ${result.toString()} to be true`);
}
});
it('should check for a non-existant key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = {};
let result = map.has(obj);
if (result) {
throw new Error(`Expected ${result.toString()} to be false`);
}
});
it('should set, delete, and check for a key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = {};
let val = 'foo';
map.set(obj, val);
map.delete(obj);
let result = map.has(obj);
if (result) {
throw new Error(`Expected ${result.toString()} to be false`);
}
});
});
describe('weakmap cross-origin cases with no native WeakMap', () => {
let win = {};
win.self = win;
it('should set and get a key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = win;
let val = 'foo';
map.set(obj, val);
let result = map.get(obj);
if (result !== val) {
throw new Error(`Expected ${result || ''} to be '${val}'`);
}
});
it('should get a non-existant key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = win;
let result = map.get(obj);
if (result !== undefined) {
throw new Error(`Expected result to be undefined`);
}
});
it('should set over an existing key, and get a key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = win;
let val1 = 'foo';
let val2 = 'bar';
map.set(obj, val1);
map.set(obj, val2);
let result = map.get(obj);
if (result !== val2) {
throw new Error(`Expected ${result || ''} to be '${val2}'`);
}
});
it('should set and check for a key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = win;
let val = 'foo';
map.set(obj, val);
let result = map.has(obj);
if (!result) {
throw new Error(`Expected ${result.toString()} to be true`);
}
});
it('should check for a non-existant key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = win;
let result = map.has(obj);
if (result) {
throw new Error(`Expected ${result.toString()} to be false`);
}
});
it('should set, delete, and check for a key', () => {
let weakMap = window.WeakMap;
delete window.WeakMap;
let map = new WeakMap();
window.WeakMap = weakMap;
let obj = win;
let val = 'foo';
map.set(obj, val);
map.delete(obj);
let result = map.has(obj);
if (result) {
throw new Error(`Expected ${result.toString()} to be false`);
}
});
});

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc