oparser
v3.0.22
Published
A very forgiving key-value option parser
Downloads
5,899
Readme
oparser
A very forgiving key-value option parser.
Converts plain text key-value pairs to useable javascript objects.
See oparser.test.js
for more usage examples.
Install
npm install oparser
Example
Handles single & multiline complex strings of key-value pairs
/* String */
const str = parse(`name=bob`)
const str = parse(`name='bob'`)
const str = parse(`name="bob"`)
const str = parse(`name={bob}`)
/* > output js object
{ name: 'bob' }
*/
const multipleValues = optionsParse(`a='foo' b="bar" c=zaz`)
/* > output js object
{ a: 'foo', b: 'bar', c: 'zaz' }
*/
/* Boolean */
const bool = parse(`isCool`)
const bool = parse(`isCool = true`)
const bool = parse(`isCool =true`)
const bool = parse(`isCool=true`)
const bool = parse(`isCool={true}`)
const bool = parse(`isCool={{true}}`)
/* > output js object
{ isCool: true }
*/
/* Arrays */
const arrayWithNumbers = parse(`key=[ 1, 2, 3 ]`)
/* > output js object
{ key: [ 1, 2, 3 ] }
*/
const arrayWithStrings = parse(`key=[ "1", "2", "3" ]`)
/* > output js object
{ key: [ "1", "2", "3" ] }
*/
const arrayWithNonQuotedStrings = parse(`key=[ one, two, three ]`)
/* > output js object
{ key: [ "one", "two", "three" ] }
*/
const arrayWithMixedValues = parse(`
great={["scoot", "sco ot", 'scooo ttt', one, two, 3, 4, true]}
`)
/* > output js object
{ great: [ 'scoot', 'sco ot', 'scooo ttt', 'one', 'two', 3, 4, true ] }
*/
/* Objects */
const obj = parse(`key={{ "a": "b" }}`)
const obj = parse(`key={{ "a": b }}`)
const obj = parse(`key={{ a: "b" }}`)
const obj = parse(`key={{ a: b }}`)
const obj = parse(`key={ a : b }`)
/* > output js object
{ key: { a: 'b' }}
*/
/* Multiline Objects */
const reactStyleObjects = `
foo={{
baz: {
bar: {
fuzz: "hello"
}
}
}}
`
console.log(parse(reactStyleObjects))
/* > output js object
{
foo: {
baz: {
bar: {
fuzz: "hello"
}
}
}
}
*/
/* Here's an example of a giant unruley string with comments */
const giantMultiLineExample = `
width={999}
height={{111}}
numberAsString="12345"
great={["scoot", "sco ot", 'scooo ttt']}
nice={{ value: nice, cool: "true" }}
soclose=[jdjdjd, hdhfhfhffh]
rad="boss"
cool=true notCool=false
nooooo={[one, two, 3, 4]}
numberArray=[3, 7]
stringArray=["3", "7"]
numberZero=0,
xyz=999,
nope=false,
// js style comment
yes={true}
isWhat,
/* js block style comment */
foo={{ rad: ["whatever", "man", "with spaces"], cool: { beans: 'here' } }}
# yaml style comment
what='xnxnx'
isLoading
whatever={{ chill: "https://app.netlify.com/start/deploy?repository=https://github.com/netlify/netlify-faunadb-example&stack=fauna", pill: ['yo']}}
href="https://fooo.com/start/deploy?repository=https://github.com/netlify/netlify-faunadb-example&stack=fauna"
src="https://user-images.github{user}content.com/532272/123136878-46f1a300-d408-11eb-82f2-ad452498457b.jpg"
deep={{ rad: 'blue', what: { nice: 'cool', wow: { deep: true } } }}
`
console.log(parse(giantMultiLineExample))
/* > output js object */
const output = {
width: 999,
height: 111,
numberAsString: "12345",
great: ['scoot', 'sco ot', 'scooo ttt'],
nice: {
value: 'nice',
cool: 'true'
},
soclose: ['jdjdjd', 'hdhfhfhffh'],
rad: 'boss',
cool: true,
notCool: false,
nooooo: ['one', 'two', 3, 4],
numberArray: [3, 7],
stringArray: ["3", "7"],
numberZero: 0,
xyz: 999,
nope: false,
yes: true,
isWhat: true,
foo: {
rad: ['whatever', 'man', "with spaces"],
cool: {
beans: 'here'
}
},
what: 'xnxnx',
isLoading: true,
whatever: {
chill: "https://app.netlify.com/start/deploy?repository=https://github.com/netlify/netlify-faunadb-example&stack=fauna",
pill: ['yo']
},
href: "https://fooo.com/start/deploy?repository=https://github.com/netlify/netlify-faunadb-example&stack=fauna",
src: 'https://user-images.github{user}content.com/532272/123136878-46f1a300-d408-11eb-82f2-ad452498457b.jpg',
deep: {
rad: 'blue',
what: {
nice: 'cool',
wow: {
deep: true
}
}
}
}
See /src/oparser.test.js
for more usage examples.
Note
This package uses regular expressions. Beware of ReDoS if using this package on the server.