@dmail/uneval

5.7.0 • Public • Published

uneval

npm package build codecov

Overcome JSON.stringify limitations.

What is uneval

uneval is a function turning a JavaScript value into a string that can be evaluated.

It exists to overcome JSON.stringify limitations.
But you should better use JSON.stringify and avoid using uneval at all.
However, if some JSON.stringify limitations is a problem for you uneval might be what you're looking for.

JSON.stringify limitations

  • Transforms regexp into {}
JSON.stringify(/foo/) === "{}"
  • Transforms -0 into 0
JSON.stringify(-0) === "0"
  • Transforms NaN into null
JSON.stringify(NaN) === "null"
  • Transforms Infinity into null
JSON.stringify(Infinity) === "null"
  • Does not support circular structure
const value = {}
value.self = value
try {
  JSON.stringify(value)
} catch (error) {
  error.name === "TypeError"
}
  • Transforms dates into strings
JSON.stringify(new Date(0)) === `"1970-01-01T00:00:00.000Z"`
  • Is not optimized for repetitive structure
JSON.stringify(["very-long-string", "very-long-string"]) ===
  `["very-long-string","very-long-string"]`

"very-long-string" is repeated twice. It can becomes a waste if you use it to stringify very big structures.

  • Ignores non enumerable properties
JSON.stringify(Object.defineProperty({}, "foo", { enumerable: false })) === "{}"

How to use

npm install --save-dev @dmail/uneval

See browser and node examples below.

browser example

<script src="https://unpkg.com/@dmail/uneval@5.3.0/dist/global/main.js"></script>
<script>
  const { uneval } = window.__dmail_uneval__
  console.log(eval(uneval({ answer: 42 })))
</script>

node example

const { uneval } = require("@dmail/uneval")

console.log(eval(uneval({ answer: 42 })))

Interactive browser example

— see https://dmail.github.io/uneval/browser-example.

Interactive node example

— see https://dmail.github.io/uneval/node-example

Readme

Keywords

none

Package Sidebar

Install

npm i @dmail/uneval

Weekly Downloads

22

Version

5.7.0

License

MIT

Unpacked Size

276 kB

Total Files

14

Last publish

Collaborators

  • dmail