aboutsummaryrefslogtreecommitdiff
path: root/node_modules/es6-set/primitive/index.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-08-14 05:01:11 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-08-14 05:02:09 +0200
commit363723fc84f7b8477592e0105aeb331ec9a017af (patch)
tree29f92724f34131bac64d6a318dd7e30612e631c7 /node_modules/es6-set/primitive/index.js
parent5634e77ad96bfe1818f6b6ee70b7379652e5487f (diff)
node_modules
Diffstat (limited to 'node_modules/es6-set/primitive/index.js')
-rw-r--r--node_modules/es6-set/primitive/index.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/node_modules/es6-set/primitive/index.js b/node_modules/es6-set/primitive/index.js
new file mode 100644
index 000000000..6bcad18d3
--- /dev/null
+++ b/node_modules/es6-set/primitive/index.js
@@ -0,0 +1,87 @@
+'use strict';
+
+var callable = require('es5-ext/object/valid-callable')
+ , clear = require('es5-ext/object/clear')
+ , setPrototypeOf = require('es5-ext/object/set-prototype-of')
+ , d = require('d')
+ , iterator = require('es6-iterator/valid-iterable')
+ , forOf = require('es6-iterator/for-of')
+ , Set = require('../polyfill')
+ , Iterator = require('../lib/primitive-iterator')
+ , isNative = require('../is-native-implemented')
+
+ , create = Object.create, defineProperties = Object.defineProperties
+ , defineProperty = Object.defineProperty, getPrototypeOf = Object.getPrototypeOf
+ , hasOwnProperty = Object.prototype.hasOwnProperty
+ , PrimitiveSet;
+
+module.exports = PrimitiveSet = function (/*iterable, serialize*/) {
+ var iterable = arguments[0], serialize = arguments[1], self;
+ if (!(this instanceof PrimitiveSet)) throw new TypeError('Constructor requires \'new\'');
+ if (isNative && setPrototypeOf) self = setPrototypeOf(new Set(), getPrototypeOf(this));
+ else self = this;
+ if (iterable != null) iterator(iterable);
+ if (serialize !== undefined) {
+ callable(serialize);
+ defineProperty(self, '_serialize', d('', serialize));
+ }
+ defineProperties(self, {
+ __setData__: d('c', create(null)),
+ __size__: d('w', 0)
+ });
+ if (!iterable) return self;
+ forOf(iterable, function (value) {
+ var key = self._serialize(value);
+ if (key == null) throw new TypeError(value + " cannot be serialized");
+ if (hasOwnProperty.call(self.__setData__, key)) return;
+ self.__setData__[key] = value;
+ ++self.__size__;
+ });
+ return self;
+};
+if (setPrototypeOf) setPrototypeOf(PrimitiveSet, Set);
+
+PrimitiveSet.prototype = create(Set.prototype, {
+ constructor: d(PrimitiveSet),
+ _serialize: d(function (value) {
+ if (value && (typeof value.toString !== 'function')) return null;
+ return String(value);
+ }),
+ add: d(function (value) {
+ var key = this._serialize(value);
+ if (key == null) throw new TypeError(value + " cannot be serialized");
+ if (hasOwnProperty.call(this.__setData__, key)) return this;
+ this.__setData__[key] = value;
+ ++this.__size__;
+ this.emit('_add', key);
+ return this;
+ }),
+ clear: d(function () {
+ if (!this.__size__) return;
+ clear(this.__setData__);
+ this.__size__ = 0;
+ this.emit('_clear');
+ }),
+ delete: d(function (value) {
+ var key = this._serialize(value);
+ if (key == null) return false;
+ if (!hasOwnProperty.call(this.__setData__, key)) return false;
+ delete this.__setData__[key];
+ --this.__size__;
+ this.emit('_delete', key);
+ return true;
+ }),
+ entries: d(function () { return new Iterator(this, 'key+value'); }),
+ get: d(function (key) {
+ key = this._serialize(key);
+ if (key == null) return;
+ return this.__setData__[key];
+ }),
+ has: d(function (value) {
+ var key = this._serialize(value);
+ if (key == null) return false;
+ return hasOwnProperty.call(this.__setData__, key);
+ }),
+ size: d.gs(function () { return this.__size__; }),
+ values: d(function () { return new Iterator(this); })
+});