immutable-tuple
Version:
Immutable finite list objects with constant-time equality testing (===) and no memory leaks
2 lines (1 loc) • 2.38 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var t="function"==typeof Symbol&&"function"==typeof Symbol.for,e=t?Symbol.for("immutable-tuple"):"@@__IMMUTABLE_TUPLE__@@",r=t?Symbol.for("immutable-tuple-root"):"@@__IMMUTABLE_TUPLE_ROOT__@@";function n(t,e,r,n){return Object.defineProperty(t,e,{value:r,enumerable:!!n,writable:!1,configurable:!1}),r}var o=Object.freeze||function(t){return t};function a(t){switch(typeof t){case"object":if(null===t)return!1;case"function":return!0;default:return!1}}function u(e){function r(t,r){var n=Object.getOwnPropertyDescriptor(Array.prototype,t);e(t,n,!!r)}r("every"),r("filter"),r("find"),r("findIndex"),r("forEach"),r("includes"),r("indexOf"),r("join"),r("lastIndexOf"),r("map"),r("reduce"),r("reduceRight"),r("slice"),r("some"),r("toLocaleString"),r("toString"),r("reverse",!0),r("sort",!0),r(t&&Symbol.iterator||"@@iterator")}var p=function(){this._weakMap=null,this._strongMap=null,this.data=null};p.prototype.get=function(t){var e=this._getMap(t,!1);if(e)return e.get(t)},p.prototype.set=function(t,e){return this._getMap(t,!0).set(t,e),e},p.prototype._getMap=function(t,e){return e?a(t)?this._weakMap||(this._weakMap=new WeakMap):this._strongMap||(this._strongMap=new Map):a(t)?this._weakMap:this._strongMap};var i=Array[r]||n(Array,r,new p,!1);function l(){return f(arguments)}function f(t){for(var e=i,r=t.length,n=0;n<r;++n){var o=t[n];e=e.get(o)||e.set(o,new p)}return e.data||(e.data=Object.create(null))}function tuple(){var t=arguments,e=l.apply(null,arguments);if(e.tuple)return e.tuple;for(var r=Object.create(tuple.prototype),a=arguments.length,u=0;u<a;++u)r[u]=t[u];return n(r,"length",a,!1),o(e.tuple=r)}function c(t){return!(!t||!0!==t[e])}function s(tuple){for(var t=[],e=tuple.length;e--;)t[e]=tuple[e];return t}n(tuple.prototype,e,!0,!1),tuple.isTuple=c,u(function(t,e,r){var n=e&&e.value;"function"==typeof n&&(e.value=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var o=n.apply(r?s(this):this,t);return Array.isArray(o)?tuple.apply(void 0,o):o},Object.defineProperty(tuple.prototype,t,e))});var y=Array.prototype,v=y.concat;tuple.prototype.concat=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return tuple.apply(void 0,v.apply(s(this),t.map(function(t){return c(t)?s(t):t})))},exports.default=tuple,exports.tuple=tuple,exports.lookup=l,exports.lookupArray=f;