
Company News
/Security News
Socket Selected for OpenAI's Cybersecurity Grant Program
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.
Take a nested Javascript object and flatten it, or unflatten an object with delimited keys. Fork from (hughsk/flat).
This package is a fork of the original flat library but the JavaScript files have the .mjs extension instead of the .js extension. This does not change the behavior of the library but it fixes the "jest encountered an unexpected token" issue when executing unit test with jest.
Take a nested Javascript object and flatten it, or unflatten an object with delimited keys.
$ npm install flat-esm
Flattens the object - it'll return an object one level deep, regardless of how nested the original object was:
import { flatten } from 'flat'
flatten({
key1: {
keyA: 'valueI'
},
key2: {
keyB: 'valueII'
},
key3: { a: { b: { c: 2 } } }
})
// {
// 'key1.keyA': 'valueI',
// 'key2.keyB': 'valueII',
// 'key3.a.b.c': 2
// }
Flattening is reversible too, you can call unflatten on an object:
import { unflatten } from 'flat'
unflatten({
'three.levels.deep': 42,
'three.levels': {
nested: true
}
})
// {
// three: {
// levels: {
// deep: 42,
// nested: true
// }
// }
// }
Use a custom delimiter for (un)flattening your objects, instead of ..
When enabled, both flat and unflatten will preserve arrays and their
contents. This is disabled by default.
import { flatten } from 'flat'
flatten({
this: [
{ contains: 'arrays' },
{ preserving: {
them: 'for you'
}}
]
}, {
safe: true
})
// {
// 'this': [
// { contains: 'arrays' },
// { preserving: {
// them: 'for you'
// }}
// ]
// }
When enabled, arrays will not be created automatically when calling unflatten, like so:
unflatten({
'hello.you.0': 'ipsum',
'hello.you.1': 'lorem',
'hello.other.world': 'foo'
}, { object: true })
// hello: {
// you: {
// 0: 'ipsum',
// 1: 'lorem',
// },
// other: { world: 'foo' }
// }
When enabled, existing keys in the unflattened object may be overwritten if they cannot hold a newly encountered nested value:
unflatten({
'TRAVIS': 'true',
'TRAVIS.DIR': '/home/travis/build/kvz/environmental'
}, { overwrite: true })
// TRAVIS: {
// DIR: '/home/travis/build/kvz/environmental'
// }
Without overwrite set to true, the TRAVIS key would already have been set to a string, thus could not accept the nested DIR element.
This only makes sense on ordered arrays, and since we're overwriting data, should be used with care.
Maximum number of nested objects to flatten.
import { flatten } from 'flat'
flatten({
key1: {
keyA: 'valueI'
},
key2: {
keyB: 'valueII'
},
key3: { a: { b: { c: 2 } } }
}, { maxDepth: 2 })
// {
// 'key1.keyA': 'valueI',
// 'key2.keyB': 'valueII',
// 'key3.a': { b: { c: 2 } }
// }
Transform each part of a flat key before and after flattening.
import { flatten, unflatten } from 'flat'
flatten({
key1: {
keyA: 'valueI'
},
key2: {
keyB: 'valueII'
},
key3: { a: { b: { c: 2 } } }
}, {
transformKey: function(key){
return '__' + key + '__';
}
})
// {
// '__key1__.__keyA__': 'valueI',
// '__key2__.__keyB__': 'valueII',
// '__key3__.__a__.__b__.__c__': 2
// }
unflatten({
'__key1__.__keyA__': 'valueI',
'__key2__.__keyB__': 'valueII',
'__key3__.__a__.__b__.__c__': 2
}, {
transformKey: function(key){
return key.substring(2, key.length - 2)
}
})
// {
// key1: {
// keyA: 'valueI'
// },
// key2: {
// keyB: 'valueII'
// },
// key3: { a: { b: { c: 2 } } }
// }
flat is also available as a command line tool. You can run it with npx:
npx flat-esm foo.json
Or install the flat-esm command globally:
npm i -g flat-esm && flat foo.json
Accepts a filename as an argument:
flat foo.json
Also accepts JSON on stdin:
cat foo.json | flat
FAQs
Take a nested Javascript object and flatten it, or unflatten an object with delimited keys. Fork from (hughsk/flat).
The npm package flat-esm receives a total of 163 weekly downloads. As such, flat-esm popularity was classified as not popular.
We found that flat-esm demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.

Security News
Socket CEO Feross Aboukhadijeh joins 10 Minutes or Less, a podcast by Ali Rohde, to discuss the recent surge in open source supply chain attacks.

Research
/Security News
Campaign of 108 extensions harvests identities, steals sessions, and adds backdoors to browsers, all tied to the same C2 infrastructure.