Comparing version 0.2.0 to 0.2.1
29
index.js
@@ -10,13 +10,11 @@ 'use strict'; | ||
var type = require('type-detect'); | ||
/** | ||
* ### .hasProperty(object, name) | ||
* | ||
* This allows checking whether an object has | ||
* named property or numeric array index. | ||
* This allows checking whether an object has own | ||
* or inherited from prototype chain named property. | ||
* | ||
* Basically does the same thing as the `in` | ||
* operator but works properly with natives | ||
* and null/undefined values. | ||
* operator but works properly with null/undefined values | ||
* and other primitives. | ||
* | ||
@@ -43,3 +41,3 @@ * var obj = { | ||
* @param {Object} object | ||
* @param {String|Number} name | ||
* @param {String|Symbol} name | ||
* @returns {Boolean} whether it exists | ||
@@ -51,20 +49,9 @@ * @namespace Utils | ||
var literals = { | ||
'number': Number, | ||
'string': String, | ||
}; | ||
function hasProperty(obj, name) { | ||
var objType = type(obj); | ||
// Bad Object, obviously no props at all | ||
if (objType === 'null' || objType === 'undefined') { | ||
if (typeof obj === 'undefined' || obj === null) { | ||
return false; | ||
} | ||
// The `in` operator does not work with certain literals | ||
// box these before the check | ||
if (literals[objType] && typeof obj !== 'object') { | ||
obj = new literals[objType](obj); | ||
} | ||
return name in obj; | ||
// The `in` operator does not work with primitives. | ||
return name in Object(obj); | ||
} | ||
@@ -71,0 +58,0 @@ |
@@ -52,5 +52,2 @@ { | ||
}, | ||
"dependencies": { | ||
"type-detect": "^2.0.1" | ||
}, | ||
"devDependencies": { | ||
@@ -82,3 +79,3 @@ "browserify": "^13.0.0", | ||
}, | ||
"version": "0.2.0" | ||
"version": "0.2.1" | ||
} |
376
pathval.js
@@ -11,13 +11,11 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pathval = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
var type = require('type-detect'); | ||
/** | ||
* ### .hasProperty(object, name) | ||
* | ||
* This allows checking whether an object has | ||
* named property or numeric array index. | ||
* This allows checking whether an object has own | ||
* or inherited from prototype chain named property. | ||
* | ||
* Basically does the same thing as the `in` | ||
* operator but works properly with natives | ||
* and null/undefined values. | ||
* operator but works properly with null/undefined values | ||
* and other primitives. | ||
* | ||
@@ -44,3 +42,3 @@ * var obj = { | ||
* @param {Object} object | ||
* @param {String|Number} name | ||
* @param {String|Symbol} name | ||
* @returns {Boolean} whether it exists | ||
@@ -52,20 +50,9 @@ * @namespace Utils | ||
var literals = { | ||
'number': Number, | ||
'string': String, | ||
}; | ||
function hasProperty(obj, name) { | ||
var objType = type(obj); | ||
// Bad Object, obviously no props at all | ||
if (objType === 'null' || objType === 'undefined') { | ||
if (typeof obj === 'undefined' || obj === null) { | ||
return false; | ||
} | ||
// The `in` operator does not work with certain literals | ||
// box these before the check | ||
if (literals[objType] && typeof obj !== 'object') { | ||
obj = new literals[objType](obj); | ||
} | ||
return name in obj; | ||
// The `in` operator does not work with primitives. | ||
return name in Object(obj); | ||
} | ||
@@ -309,350 +296,3 @@ | ||
},{"type-detect":2}],2:[function(require,module,exports){ | ||
'use strict'; | ||
/* ! | ||
* type-detect | ||
* Copyright(c) 2013 jake luer <jake@alogicalparadox.com> | ||
* MIT Licensed | ||
*/ | ||
var getPrototypeOfExists = typeof Object.getPrototypeOf === 'function'; | ||
var promiseExists = typeof Promise === 'function'; | ||
var globalObject = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : self; // eslint-disable-line | ||
var isDom = 'location' in globalObject && 'document' in globalObject; | ||
var htmlElementExists = typeof HTMLElement !== 'undefined'; | ||
var isArrayExists = typeof Array.isArray === 'function'; | ||
var symbolExists = typeof Symbol !== 'undefined'; | ||
var mapExists = typeof Map !== 'undefined'; | ||
var setExists = typeof Set !== 'undefined'; | ||
var weakMapExists = typeof WeakMap !== 'undefined'; | ||
var weakSetExists = typeof WeakSet !== 'undefined'; | ||
var dataViewExists = typeof DataView !== 'undefined'; | ||
var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; | ||
var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; | ||
var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; | ||
var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; | ||
var setIteratorPrototype = getPrototypeOfExists && setEntriesExists && Object.getPrototypeOf(new Set().entries()); | ||
var mapIteratorPrototype = getPrototypeOfExists && mapEntriesExists && Object.getPrototypeOf(new Map().entries()); | ||
var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; | ||
var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); | ||
var stringIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; | ||
var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); | ||
var toStringLeftSliceLength = 8; | ||
var toStringRightSliceLength = -1; | ||
/** | ||
* ### typeOf (obj) | ||
* | ||
* Uses `Object.prototype.toString` to determine the type of an object, | ||
* normalising behaviour across engine versions & well optimised. | ||
* | ||
* @param {Mixed} object | ||
* @return {String} object type | ||
* @api public | ||
*/ | ||
module.exports = function typeDetect(obj) { | ||
/* ! Speed optimisation | ||
* Pre: | ||
* string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) | ||
* boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) | ||
* number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) | ||
* undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) | ||
* function x 2,556,769 ops/sec ±1.73% (77 runs sampled) | ||
* Post: | ||
* string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) | ||
* boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) | ||
* number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) | ||
* undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) | ||
* function x 31,296,870 ops/sec ±0.96% (83 runs sampled) | ||
*/ | ||
var typeofObj = typeof obj; | ||
if (typeofObj !== 'object') { | ||
return typeofObj; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* null x 28,645,765 ops/sec ±1.17% (82 runs sampled) | ||
* Post: | ||
* null x 36,428,962 ops/sec ±1.37% (84 runs sampled) | ||
*/ | ||
if (obj === null) { | ||
return 'null'; | ||
} | ||
/* ! Spec Conformance | ||
* Test: `Object.prototype.toString.call(window)`` | ||
* - Node === "[object global]" | ||
* - Chrome === "[object global]" | ||
* - Firefox === "[object Window]" | ||
* - PhantomJS === "[object Window]" | ||
* - Safari === "[object Window]" | ||
* - IE 11 === "[object Window]" | ||
* - IE Edge === "[object Window]" | ||
* Test: `Object.prototype.toString.call(this)`` | ||
* - Chrome Worker === "[object global]" | ||
* - Firefox Worker === "[object DedicatedWorkerGlobalScope]" | ||
* - Safari Worker === "[object DedicatedWorkerGlobalScope]" | ||
* - IE 11 Worker === "[object WorkerGlobalScope]" | ||
* - IE Edge Worker === "[object WorkerGlobalScope]" | ||
*/ | ||
if (obj === globalObject) { | ||
return 'global'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) | ||
* Post: | ||
* array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) | ||
*/ | ||
if (isArrayExists && Array.isArray(obj)) { | ||
return 'array'; | ||
} | ||
if (isDom) { | ||
/* ! Spec Conformance | ||
* (https://html.spec.whatwg.org/multipage/browsers.html#location) | ||
* WhatWG HTML$7.7.3 - The `Location` interface | ||
* Test: `Object.prototype.toString.call(window.location)`` | ||
* - IE <=11 === "[object Object]" | ||
* - IE Edge <=13 === "[object Object]" | ||
*/ | ||
if (obj === globalObject.location) { | ||
return 'location'; | ||
} | ||
/* ! Spec Conformance | ||
* (https://html.spec.whatwg.org/#document) | ||
* WhatWG HTML$3.1.1 - The `Document` object | ||
* Note: Most browsers currently adher to the W3C DOM Level 2 spec | ||
* (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) | ||
* which suggests that browsers should use HTMLTableCellElement for | ||
* both TD and TH elements. WhatWG separates these. | ||
* WhatWG HTML states: | ||
* > For historical reasons, Window objects must also have a | ||
* > writable, configurable, non-enumerable property named | ||
* > HTMLDocument whose value is the Document interface object. | ||
* Test: `Object.prototype.toString.call(document)`` | ||
* - Chrome === "[object HTMLDocument]" | ||
* - Firefox === "[object HTMLDocument]" | ||
* - Safari === "[object HTMLDocument]" | ||
* - IE <=10 === "[object Document]" | ||
* - IE 11 === "[object HTMLDocument]" | ||
* - IE Edge <=13 === "[object HTMLDocument]" | ||
*/ | ||
if (obj === globalObject.document) { | ||
return 'document'; | ||
} | ||
/* ! Spec Conformance | ||
* (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) | ||
* WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray | ||
* Test: `Object.prototype.toString.call(navigator.mimeTypes)`` | ||
* - IE <=10 === "[object MSMimeTypesCollection]" | ||
*/ | ||
if (obj === (globalObject.navigator || {}).mimeTypes) { | ||
return 'mimetypearray'; | ||
} | ||
/* ! Spec Conformance | ||
* (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) | ||
* WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray | ||
* Test: `Object.prototype.toString.call(navigator.plugins)`` | ||
* - IE <=10 === "[object MSPluginsCollection]" | ||
*/ | ||
if (obj === (globalObject.navigator || {}).plugins) { | ||
return 'pluginarray'; | ||
} | ||
/* ! Spec Conformance | ||
* (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) | ||
* WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` | ||
* Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` | ||
* - IE <=10 === "[object HTMLBlockElement]" | ||
*/ | ||
if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'BLOCKQUOTE') { | ||
return 'htmlquoteelement'; | ||
} | ||
/* ! Spec Conformance | ||
* (https://html.spec.whatwg.org/#htmltabledatacellelement) | ||
* WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` | ||
* Note: Most browsers currently adher to the W3C DOM Level 2 spec | ||
* (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) | ||
* which suggests that browsers should use HTMLTableCellElement for | ||
* both TD and TH elements. WhatWG separates these. | ||
* Test: Object.prototype.toString.call(document.createElement('td')) | ||
* - Chrome === "[object HTMLTableCellElement]" | ||
* - Firefox === "[object HTMLTableCellElement]" | ||
* - Safari === "[object HTMLTableCellElement]" | ||
*/ | ||
if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'TD') { | ||
return 'htmltabledatacellelement'; | ||
} | ||
/* ! Spec Conformance | ||
* (https://html.spec.whatwg.org/#htmltableheadercellelement) | ||
* WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` | ||
* Note: Most browsers currently adher to the W3C DOM Level 2 spec | ||
* (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) | ||
* which suggests that browsers should use HTMLTableCellElement for | ||
* both TD and TH elements. WhatWG separates these. | ||
* Test: Object.prototype.toString.call(document.createElement('th')) | ||
* - Chrome === "[object HTMLTableCellElement]" | ||
* - Firefox === "[object HTMLTableCellElement]" | ||
* - Safari === "[object HTMLTableCellElement]" | ||
*/ | ||
if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'TH') { | ||
return 'htmltableheadercellelement'; | ||
} | ||
} | ||
if (getPrototypeOfExists && (symbolToStringTagExists === false || typeof obj[Symbol.toStringTag] === 'undefined')) { | ||
var objPrototype = Object.getPrototypeOf(obj); | ||
/* ! Speed optimisation | ||
* Pre: | ||
* regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) | ||
* regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) | ||
* Post: | ||
* regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) | ||
* regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) | ||
*/ | ||
if (objPrototype === RegExp.prototype) { | ||
return 'regexp'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* date x 2,130,074 ops/sec ±4.42% (68 runs sampled) | ||
* Post: | ||
* date x 3,953,779 ops/sec ±1.35% (77 runs sampled) | ||
*/ | ||
if (objPrototype === Date.prototype) { | ||
return 'date'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) | ||
* ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": | ||
* Test: `Object.prototype.toString.call(Promise.resolve())`` | ||
* - Chrome <=47 === "[object Object]" | ||
* - Edge <=20 === "[object Object]" | ||
* - Firefox 29-Latest === "[object Promise]" | ||
* - Safari 7.1-Latest === "[object Promise]" | ||
*/ | ||
if (promiseExists && objPrototype === Promise.prototype) { | ||
return 'promise'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* set x 2,222,186 ops/sec ±1.31% (82 runs sampled) | ||
* Post: | ||
* set x 4,545,879 ops/sec ±1.13% (83 runs sampled) | ||
*/ | ||
if (setExists && objPrototype === Set.prototype) { | ||
return 'set'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* map x 2,396,842 ops/sec ±1.59% (81 runs sampled) | ||
* Post: | ||
* map x 4,183,945 ops/sec ±6.59% (82 runs sampled) | ||
*/ | ||
if (mapExists && objPrototype === Map.prototype) { | ||
return 'map'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) | ||
* Post: | ||
* weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) | ||
*/ | ||
if (weakSetExists && objPrototype === WeakSet.prototype) { | ||
return 'weakset'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) | ||
* Post: | ||
* weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) | ||
*/ | ||
if (weakMapExists && objPrototype === WeakMap.prototype) { | ||
return 'weakmap'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) | ||
* ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": | ||
* Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (dataViewExists && objPrototype === DataView.prototype) { | ||
return 'dataview'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) | ||
* ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": | ||
* Test: `Object.prototype.toString.call(new Map().entries())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (mapExists && objPrototype === mapIteratorPrototype) { | ||
return 'map iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) | ||
* ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": | ||
* Test: `Object.prototype.toString.call(new Set().entries())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (setExists && objPrototype === setIteratorPrototype) { | ||
return 'set iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) | ||
* ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": | ||
* Test: `Object.prototype.toString.call([][Symbol.iterator]())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { | ||
return 'array iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) | ||
* ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": | ||
* Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (stringIteratorExists && objPrototype === stringIteratorPrototype) { | ||
return 'string iterator'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) | ||
* Post: | ||
* object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) | ||
*/ | ||
if (objPrototype === null) { | ||
return 'object'; | ||
} | ||
} | ||
return Object | ||
.prototype | ||
.toString | ||
.call(obj) | ||
.slice(toStringLeftSliceLength, toStringRightSliceLength) | ||
.toLowerCase(); | ||
}; | ||
module.exports.typeDetect = module.exports; | ||
},{}]},{},[1])(1) | ||
}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
0
0
23648
539
- Removedtype-detect@^2.0.1
- Removedtype-detect@2.0.2(transitive)