pax_global_header00006660000000000000000000000064130622611020014503gustar00rootroot0000000000000052 comment=14c8b5703569d9c4f8788812abfea2ecab8433a6 es6-weak-map-2.0.2/000077500000000000000000000000001306226110200137015ustar00rootroot00000000000000es6-weak-map-2.0.2/.gitignore000066400000000000000000000000631306226110200156700ustar00rootroot00000000000000.DS_Store /node_modules /npm-debug.log /.lintcache es6-weak-map-2.0.2/.lint000066400000000000000000000001151306226110200146450ustar00rootroot00000000000000@root module tabs indent 2 maxlen 100 ass nomen plusplus predef+ WeakMap es6-weak-map-2.0.2/.travis.yml000066400000000000000000000003111306226110200160050ustar00rootroot00000000000000sudo: false # use faster docker infrastructure language: node_js node_js: - 0.12 - 4 - 6 - 7 notifications: email: - medikoo+es6-weak-map@medikoo.com script: "npm test && npm run lint" es6-weak-map-2.0.2/CHANGES000066400000000000000000000025501306226110200146760ustar00rootroot00000000000000v2.0.2 -- 2017.03.15 * Update dependencies v2.0.1 -- 2015.10.02 * Update to use es6-symbol at v3 v2.0.0 -- 2015.09.04 * Relax native implementation detection, stringification of instance should returm expected result (not necesarily prototype) v1.0.2 -- 2015.05.07 * Add "ponyfill" keyword to meta description. Fixes #7 v1.0.1 -- 2015.04.14 * Fix isNativeImplemented, so it's not affected by #3619 V8 bug * Fix internal prototype resolution, in case where isNativeImplemented was true, and native implementation was shadowed it got into stack overflow v1.0.0 -- 2015.04.13 * It's v0.1.3 republished as v1.0.0 v0.1.4 -- 2015.04.13 * Republish v0.1.2 as v0.1.4 due to breaking changes (v0.1.3 should have been published as next major) v0.1.3 -- 2015.04.12 * Update up to changes in specification (require new, remove clear method) * Improve native implementation validation * Configure lint scripts * Rename LICENCE to LICENSE v0.1.2 -- 2014.09.01 * Use internal random and unique id generator instead of external (time-uuid based). Global uniqueness is not needed in scope of this module. Fixes #1 v0.1.1 -- 2014.05.15 * Improve valid WeakMap detection v0.1.0 -- 2014.04.29 * Assure to depend only npm hosted dependencies * Update to use latest versions of dependencies * Use ES6 symbols internally v0.0.0 -- 2013.10.24 Initial (dev version) es6-weak-map-2.0.2/LICENSE000066400000000000000000000020631306226110200147070ustar00rootroot00000000000000Copyright (C) 2013 Mariusz Nowak (www.medikoo.com) 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. es6-weak-map-2.0.2/README.md000066400000000000000000000034201306226110200151570ustar00rootroot00000000000000# es6-weak-map ## WeakMap collection as specified in ECMAScript6 _Roughly inspired by Mark Miller's and Kris Kowal's [WeakMap implementation](https://github.com/drses/weak-map)_. Differences are: - Assumes compliant ES5 environment (no weird ES3 workarounds or hacks) - Well modularized CJS style - Based on one solution. ### Limitations - Will fail on non extensible objects provided as keys ### Installation $ npm install es6-weak-map To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) ### Usage If you want to make sure your environment implements `WeakMap`, do: ```javascript require('es6-weak-map/implement'); ``` If you'd like to use native version when it exists and fallback to polyfill if it doesn't, but without implementing `WeakMap` on global scope, do: ```javascript var WeakMap = require('es6-weak-map'); ``` If you strictly want to use polyfill even if native `WeakMap` exists, do: ```javascript var WeakMap = require('es6-weak-map/polyfill'); ``` #### API Best is to refer to [specification](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-weakmap-objects). Still if you want quick look, follow example: ```javascript var WeakMap = require('es6-weak-map'); var map = new WeakMap(); var obj = {}; map.set(obj, 'foo'); // map map.get(obj); // 'foo' map.has(obj); // true map.delete(obj); // true map.get(obj); // undefined map.has(obj); // false map.set(obj, 'bar'); // map map.has(obj); // false ``` ## Tests [![Build Status](https://travis-ci.org/medikoo/es6-weak-map.svg)](https://travis-ci.org/medikoo/es6-weak-map) $ npm test es6-weak-map-2.0.2/implement.js000066400000000000000000000003231306226110200162270ustar00rootroot00000000000000'use strict'; if (!require('./is-implemented')()) { Object.defineProperty(require('es5-ext/global'), 'WeakMap', { value: require('./polyfill'), configurable: true, enumerable: false, writable: true }); } es6-weak-map-2.0.2/index.js000066400000000000000000000001411306226110200153420ustar00rootroot00000000000000'use strict'; module.exports = require('./is-implemented')() ? WeakMap : require('./polyfill'); es6-weak-map-2.0.2/is-implemented.js000066400000000000000000000011461306226110200171550ustar00rootroot00000000000000'use strict'; module.exports = function () { var weakMap, x; if (typeof WeakMap !== 'function') return false; try { // WebKit doesn't support arguments and crashes weakMap = new WeakMap([[x = {}, 'one'], [{}, 'two'], [{}, 'three']]); } catch (e) { return false; } if (String(weakMap) !== '[object WeakMap]') return false; if (typeof weakMap.set !== 'function') return false; if (weakMap.set({}, 1) !== weakMap) return false; if (typeof weakMap.delete !== 'function') return false; if (typeof weakMap.has !== 'function') return false; if (weakMap.get(x) !== 'one') return false; return true; }; es6-weak-map-2.0.2/is-native-implemented.js000066400000000000000000000004231306226110200204360ustar00rootroot00000000000000// Exports true if environment provides native `WeakMap` implementation, whatever that is. 'use strict'; module.exports = (function () { if (typeof WeakMap !== 'function') return false; return (Object.prototype.toString.call(new WeakMap()) === '[object WeakMap]'); }()); es6-weak-map-2.0.2/is-weak-map.js000066400000000000000000000005731306226110200163570ustar00rootroot00000000000000'use strict'; var toStringTagSymbol = require('es6-symbol').toStringTag , toString = Object.prototype.toString , id = '[object WeakMap]' , Global = (typeof WeakMap === 'undefined') ? null : WeakMap; module.exports = function (x) { return (x && ((Global && (x instanceof Global)) || (toString.call(x) === id) || (x[toStringTagSymbol] === 'WeakMap'))) || false; }; es6-weak-map-2.0.2/package.json000066400000000000000000000017131306226110200161710ustar00rootroot00000000000000{ "name": "es6-weak-map", "version": "2.0.2", "description": "ECMAScript6 WeakMap polyfill", "author": "Mariusz Nowak (http://www.medikoo.com/)", "keywords": [ "map", "weakmap", "collection", "es6", "harmony", "list", "hash", "gc", "ponyfill" ], "repository": { "type": "git", "url": "git://github.com/medikoo/es6-weak-map.git" }, "dependencies": { "d": "1", "es5-ext": "^0.10.14", "es6-iterator": "^2.0.1", "es6-symbol": "^3.1.1" }, "devDependencies": { "tad": "^0.2.7", "xlint": "^0.2.2", "xlint-jslint-medikoo": "^0.1.4" }, "scripts": { "lint": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream", "lint-console": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch", "test": "node ./node_modules/tad/bin/tad" }, "license": "MIT" } es6-weak-map-2.0.2/polyfill.js000066400000000000000000000042551306226110200160770ustar00rootroot00000000000000'use strict'; var setPrototypeOf = require('es5-ext/object/set-prototype-of') , object = require('es5-ext/object/valid-object') , value = require('es5-ext/object/valid-value') , randomUniq = require('es5-ext/string/random-uniq') , d = require('d') , getIterator = require('es6-iterator/get') , forOf = require('es6-iterator/for-of') , toStringTagSymbol = require('es6-symbol').toStringTag , isNative = require('./is-native-implemented') , isArray = Array.isArray, defineProperty = Object.defineProperty , hasOwnProperty = Object.prototype.hasOwnProperty, getPrototypeOf = Object.getPrototypeOf , WeakMapPoly; module.exports = WeakMapPoly = function (/*iterable*/) { var iterable = arguments[0], self; if (!(this instanceof WeakMapPoly)) throw new TypeError('Constructor requires \'new\''); if (isNative && setPrototypeOf && (WeakMap !== WeakMapPoly)) { self = setPrototypeOf(new WeakMap(), getPrototypeOf(this)); } else { self = this; } if (iterable != null) { if (!isArray(iterable)) iterable = getIterator(iterable); } defineProperty(self, '__weakMapData__', d('c', '$weakMap$' + randomUniq())); if (!iterable) return self; forOf(iterable, function (val) { value(val); self.set(val[0], val[1]); }); return self; }; if (isNative) { if (setPrototypeOf) setPrototypeOf(WeakMapPoly, WeakMap); WeakMapPoly.prototype = Object.create(WeakMap.prototype, { constructor: d(WeakMapPoly) }); } Object.defineProperties(WeakMapPoly.prototype, { delete: d(function (key) { if (hasOwnProperty.call(object(key), this.__weakMapData__)) { delete key[this.__weakMapData__]; return true; } return false; }), get: d(function (key) { if (hasOwnProperty.call(object(key), this.__weakMapData__)) { return key[this.__weakMapData__]; } }), has: d(function (key) { return hasOwnProperty.call(object(key), this.__weakMapData__); }), set: d(function (key, value) { defineProperty(object(key), this.__weakMapData__, d('c', value)); return this; }), toString: d(function () { return '[object WeakMap]'; }) }); defineProperty(WeakMapPoly.prototype, toStringTagSymbol, d('c', 'WeakMap')); es6-weak-map-2.0.2/test/000077500000000000000000000000001306226110200146605ustar00rootroot00000000000000es6-weak-map-2.0.2/test/implement.js000066400000000000000000000001241306226110200172050ustar00rootroot00000000000000'use strict'; module.exports = function (t, a) { a(typeof WeakMap, 'function'); }; es6-weak-map-2.0.2/test/index.js000066400000000000000000000001531306226110200163240ustar00rootroot00000000000000'use strict'; module.exports = function (T, a) { var x = {}; a((new T([[x, 'foo']])).get(x), 'foo'); }; es6-weak-map-2.0.2/test/is-implemented.js000066400000000000000000000005001306226110200201250ustar00rootroot00000000000000'use strict'; var global = require('es5-ext/global') , polyfill = require('../polyfill'); module.exports = function (t, a) { var cache; a(typeof t(), 'boolean'); cache = global.WeakMap; global.WeakMap = polyfill; a(t(), true); if (cache === undefined) delete global.WeakMap; else global.WeakMap = cache; }; es6-weak-map-2.0.2/test/is-native-implemented.js000066400000000000000000000001151306226110200214130ustar00rootroot00000000000000'use strict'; module.exports = function (t, a) { a(typeof t, 'boolean'); }; es6-weak-map-2.0.2/test/is-weak-map.js000066400000000000000000000006261306226110200173350ustar00rootroot00000000000000'use strict'; var WeakMapPoly = require('../polyfill'); module.exports = function (t, a) { a(t(undefined), false, "Undefined"); a(t(null), false, "Null"); a(t(true), false, "Primitive"); a(t('raz'), false, "String"); a(t({}), false, "Object"); a(t([]), false, "Array"); if (typeof WeakMap !== 'undefined') { a(t(new WeakMap()), true, "Native"); } a(t(new WeakMapPoly()), true, "Polyfill"); }; es6-weak-map-2.0.2/test/polyfill.js000066400000000000000000000012451306226110200170520ustar00rootroot00000000000000'use strict'; module.exports = function (T, a) { var x = {}, y = {}, z = {}, arr = [[x, 'raz'], [y, 'dwa']], map = new T(arr); a(map instanceof T, true, "WeakMap"); a(map.has(x), true, "Has: true"); a(map.get(x), 'raz', "Get: contains"); a(map.has(z), false, "Has: false"); a(map.get(z), undefined, "Get: doesn't contain"); a(map.set(z, 'trzy'), map, "Set: return"); a(map.has(z), true, "Add"); a(map.delete({}), false, "Delete: false"); a(map.delete(x), true, "Delete: true"); a(map.get(x), undefined, "Get: after delete"); a(map.has(x), false, "Has: after delete"); a.h1("Empty initialization"); map = new T(); map.set(x, 'bar'); a(map.get(x), 'bar'); }; es6-weak-map-2.0.2/test/valid-weak-map.js000066400000000000000000000011371306226110200200170ustar00rootroot00000000000000'use strict'; var WeakMapPoly = require('../polyfill'); module.exports = function (t, a) { var map; a.throws(function () { t(undefined); }, TypeError, "Undefined"); a.throws(function () { t(null); }, TypeError, "Null"); a.throws(function () { t(true); }, TypeError, "Primitive"); a.throws(function () { t('raz'); }, TypeError, "String"); a.throws(function () { t({}); }, TypeError, "Object"); a.throws(function () { t([]); }, TypeError, "Array"); if (typeof WeakMap !== 'undefined') { map = new WeakMap(); a(t(map), map, "Native"); } map = new WeakMapPoly(); a(t(map), map, "Polyfill"); }; es6-weak-map-2.0.2/valid-weak-map.js000066400000000000000000000002521306226110200170350ustar00rootroot00000000000000'use strict'; var isWeakMap = require('./is-weak-map'); module.exports = function (x) { if (!isWeakMap(x)) throw new TypeError(x + " is not a WeakMap"); return x; };