Socket
Socket
Sign inDemoInstall

undefsafe

Package Overview
Dependencies
0
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.0 to 1.1.0

.jscsrc

9

lib/undefsafe.js
'use strict';
function undefsafe(obj, path) {
function undefsafe(obj, path, value) {
var parts = path.split('.');
var key = null;
var type = typeof obj;
var parent = obj;

@@ -16,2 +17,3 @@ // we're dealing with a primative

while ((key = parts.shift())) {
parent = obj;
obj = obj[key];

@@ -27,2 +29,5 @@ if (obj === undefined || obj === null) {

obj = undefined;
} else if (value) {
key = path.split('.').pop();
parent[key] = value;
}

@@ -35,2 +40,2 @@

module.exports = undefsafe;
}
}
{
"name": "undefsafe",
"version": "1.0.0",
"description": "Undefined safe way of extracting object properties",

@@ -11,7 +10,9 @@ "main": "lib/undefsafe.js",

"scripts": {
"test": "node_modules/mocha/bin/_mocha --ui bdd test/**/*.test.js"
"test": "tap test/**/*.test.js -R spec",
"cover": "tap test/*.test.js --cov --coverage-report=lcov",
"semantic-release": "semantic-release pre && npm publish && semantic-release post"
},
"repository": {
"type": "git",
"url": "git://github.com/remy/undefsafe.git"
"url": "https://github.com/remy/undefsafe.git"
},

@@ -22,6 +23,8 @@ "keywords": [

"author": "Remy Sharp",
"license": "MIT / http://rem.mit-license.org",
"license": "MIT",
"devDependencies": {
"mocha": "~1.16.2"
}
}
"semantic-release": "^4.3.5",
"tap": "^5.7.1"
},
"version": "1.1.0"
}

@@ -1,6 +0,7 @@

undefsafe
=========
# undefsafe
Simple *function* for retrieving deep object properties without getting "Cannot read property 'X' of undefined"
Can also be used to safely set deep values.
## Usage

@@ -14,3 +15,3 @@

d: [1,2,3],
e: false
e: 'remy'
}

@@ -20,5 +21,22 @@ }

console.log(undefsafe(object, 'a.b.e') === false);
console.log(undefsafe(object, 'a.b.e')); // "remy"
console.log(undefsafe(object, 'a.b.not.found')); // undefined
```
Demo: [https://jsbin.com/eroqame/3/edit?js,console](https://jsbin.com/eroqame/3/edit?js,console)
## Setting
```js
var object = {
a: {
b: [1,2,3]
}
};
// modified object
var res = undefsafe(object, 'a.b.0', 10);
console.log(object); // { a: { b: [10, 2, 3] } }
console.log(res); // 1 - previous value
```
'use strict';
/*global describe:true, it: true */
var assert = require('assert');
var test = require('tap').test;
var undefsafe = require('../lib/undefsafe');
describe('undefsafe', function () {
it('should handle primatives', function () {
var r = undefsafe(1, '');
assert(r === 1, 'undefsafe is 1: ' + r);
});
test('should handle primatives', function (t) {
var r = undefsafe(1, '');
t.equal(r, 1, 'undefsafe is 1: ' + r);
t.end();
});
it('should handle empty objects', function () {
var value = {};
var r;
test('should handle empty objects', function (t) {
var value = {};
var r;
r = undefsafe(value, '');
assert(r === value, 'value is value' + r);
r = undefsafe(value, '');
t.equal(r, value, 'value is value' + r);
r = undefsafe(value, 'foo');
assert(r === undefined, 'value.foo is undefined: ' + r);
r = undefsafe(value, 'foo');
t.equal(r, undefined, 'value.foo is undefined: ' + r);
r = undefsafe(value, 'foo.bar');
assert(r === undefined, 'value.foo.bar is undefined: ' + r);
});
r = undefsafe(value, 'foo.bar');
t.equal(r, undefined, 'value.foo.bar is undefined: ' + r);
it('should handle null properties', function () {
var value = {
a: {
b: null,
},
};
var r;
t.end();
});
r = undefsafe(value, 'a.b');
assert(r === null, 'value.a.b is null: ' + r);
test('should handle null properties', function (t) {
var value = {
a: {
b: null,
},
};
var r;
r = undefsafe(value, 'a.b.c');
assert(r === undefined, 'value.a.b.c is undefined: ' + r);
});
r = undefsafe(value, 'a.b');
t.equal(r, null, 'value.a.b is null: ' + r);
it('should find deep object properties', function () {
var value = {
a: {
b: {
c: {
d: 10,
e: {
f: 20,
},
g: true,
h: false,
i: undefined,
j: null,
r = undefsafe(value, 'a.b.c');
t.equal(r, undefined, 'value.a.b.c is undefined: ' + r);
t.end();
});
test('should find deep object properties', function (t) {
var value = {
a: {
b: {
c: {
d: 10,
e: {
f: 20,
},
g: true,
h: false,
i: undefined,
j: null,
},
},
};
var r;
},
};
var r;
r = undefsafe(value, 'a');
assert(r === value.a, 'value.a: ' + r + ' ' + value.a);
r = undefsafe(value, 'a');
t.equal(r, value.a, 'value.a: ' + r + ' ' + value.a);
r = undefsafe(value, 'a.foo');
assert(r === undefined, 'value.a.foo is undefined: ' + r);
r = undefsafe(value, 'a.foo');
t.equal(r, undefined, 'value.a.foo is undefined: ' + r);
r = undefsafe(value, 'a.b.c.d');
assert(r === 10, 'value.a.b.c.d = 10');
r = undefsafe(value, 'a.b.c.d');
t.equal(r, 10, 'value.a.b.c.d = 10');
r = undefsafe(value, 'a.b.c.e');
assert(r === value.a.b.c.e, 'value.a.b.c.e = <object>');
r = undefsafe(value, 'a.b.c.e');
t.equal(r, value.a.b.c.e, 'value.a.b.c.e = <object>');
r = undefsafe(value, 'a.b.c.g');
assert(r === true, 'bool(true)');
r = undefsafe(value, 'a.b.c.g');
t.equal(r, true, 'bool(true)');
r = undefsafe(value, 'a.b.c.h');
assert(r === false, 'bool(false)');
r = undefsafe(value, 'a.b.c.h');
t.equal(r, false, 'bool(false)');
r = undefsafe(value, 'a.b.c.i');
assert(r === undefined, 'undefined');
r = undefsafe(value, 'a.b.c.i');
t.equal(r, undefined, 'undefined');
r = undefsafe(value, 'a.b.c.j');
assert(r === null, 'null');
});
});
r = undefsafe(value, 'a.b.c.j');
t.equal(r, null, 'null');
t.end();
});

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