3.0.22 • Published 10 months ago

oparser v3.0.22

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

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.

3.0.21

11 months ago

3.0.22

10 months ago

3.0.20

11 months ago

3.0.18

11 months ago

3.0.19

11 months ago

3.0.16

11 months ago

3.0.17

11 months ago

3.0.13

1 year ago

3.0.14

1 year ago

3.0.15

1 year ago

3.0.12

1 year ago

3.0.10

1 year ago

3.0.11

1 year ago

3.0.9

1 year ago

3.0.8

1 year ago

3.0.4

2 years ago

3.0.3

2 years ago

3.0.2

2 years ago

3.0.1

2 years ago

3.0.7

2 years ago

3.0.6

2 years ago

3.0.5

2 years ago

3.0.0

2 years ago

2.2.1

2 years ago

2.2.0

2 years ago

2.1.1

2 years ago

2.0.2

3 years ago

2.1.0

2 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago