Socket
Socket
Sign inDemoInstall

flat

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

flat - npm Package Compare versions

Comparing version 0.0.2 to 0.1.0

34

index.js
var flat = module.exports = {}
var flatten = flat.flatten = function (target, delimeter) {
var flatten = flat.flatten = function (target, opts) {
var output = {}
, delimeter = delimeter || '.'
, opts = opts || {}
, delimiter = opts.delimiter || '.'
function getkey(key, prev) {
return prev ? prev + delimeter + key : key
return prev ? prev + delimiter + key : key
};

@@ -13,3 +14,6 @@

Object.keys(object).forEach(function(key) {
if (typeof object[key] === 'object') {
var isarray = opts.safe && Array.isArray(object[key])
, isobject = typeof object[key] === 'object'
if (!isarray && isobject) {
return step(object[key]

@@ -29,12 +33,18 @@ , getkey(key, prev)

var unflatten = flat.unflatten = function (target, delimeter) {
var unflatten = flat.unflatten = function (target, opts) {
if (typeof target !== 'object') return target
target = flatten(target, delimeter)
var opts = opts || {}
, delimiter = opts.delimiter || '.'
var keys = Object.keys(target)
, delimeter = delimeter || '.'
if (opts.safe && Array.isArray(target)) {
return target.map(function(value) {
return unflatten(value, opts);
});
}
var unflat = keys.reduce(function (memo, key) {
var split = key.split(delimeter)
target = flatten(target, opts)
var unflat = Object.keys(target).reduce(function (memo, key) {
var split = key.split(delimiter)
, first = split.shift()

@@ -48,5 +58,5 @@

memo[first] = memo[first] || {}
memo[first][split.join(delimeter)] = target[key]
memo[first][split.join(delimiter)] = target[key]
memo[first] = unflatten(memo[first], delimeter)
memo[first] = unflatten(memo[first], opts)

@@ -53,0 +63,0 @@ return memo;

{
"name": "flat",
"version": "0.0.2",
"version": "0.1.0",
"main": "index.js",

@@ -5,0 +5,0 @@ "scripts": {

@@ -14,3 +14,3 @@ # flat [![Build Status](https://secure.travis-ci.org/hughsk/flat.png?branch=master)](http://travis-ci.org/hughsk/flat)

### flat.flatten(original, [delimiter='.'])
### flat.flatten(original, options)

@@ -40,3 +40,3 @@ Flattens the object - it'll return an object one level deep, regardless of how

### flat.flatten(original, [delimiter='.'])
### flat.flatten(original, options)

@@ -63,2 +63,37 @@ Flattening is reversible too, you can call `flat.unflatten()` on an object:

// }
```
## Options
### delimiter
Use a custom delimiter for (un)flattening your objects, instead of `.`.
### safe
When enabled, both `flat` and `unflatten` will preserve arrays and their
contents. This is disabled by default.
``` javascript
var flatten = require('flat').flatten
flatten({
this: [
{ contains: 'arrays' },
{ preserving: {
them: 'for you'
}}
]
}, {
safe: true
})
// {
// 'this': [
// { contains: 'arrays' },
// { preserving: {
// them: 'for you'
// }}
// ]
// }
```

@@ -55,3 +55,5 @@ var assert = require('assert')

}
}, ':'), {
}, {
delimiter: ':'
}), {
'hello:world:again': 'good morning'

@@ -113,3 +115,5 @@ })

'hello world again': 'good morning'
}, ' '))
}, {
delimiter: ' '
}))
})

@@ -147,2 +151,41 @@ test('Messy', function() {

})
suite('.safe', function() {
test('Should protect arrays when true', function() {
assert.deepEqual(flatten({
hello: [
{ world: { again: 'foo' } }
, { lorem: 'ipsum' }
]
, another: {
nested: [{ array: { too: 'deep' }}]
}
, lorem: {
ipsum: 'whoop'
}
}, {
safe: true
}), {
hello: [
{ world: { again: 'foo' } }
, { lorem: 'ipsum' }
]
, 'lorem.ipsum': 'whoop'
, 'another.nested': [{ array: { too: 'deep' }}]
})
})
test('Should not protect arrays when false', function() {
assert.deepEqual(flatten({
hello: [
{ world: { again: 'foo' } }
, { lorem: 'ipsum' }
]
}, {
safe: false
}), {
'hello.0.world.again': 'foo'
, 'hello.1.lorem': 'ipsum'
})
})
})
})

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc