Gathering detailed insights and metrics for polite-json
Gathering detailed insights and metrics for polite-json
npm install polite-json
Typescript
Module System
Min. Node Version
Node Version
NPM Version
99.6
Supply Chain
99.5
Quality
76
Maintenance
100
Vulnerability
100
License
TypeScript (98.78%)
Shell (1.22%)
Total Downloads
8,474,062
Last Day
34,933
Last Week
192,042
Last Month
803,074
Last Year
8,204,608
23 Stars
61 Commits
2 Watching
1 Branches
6 Contributors
Minified
Minified + Gzipped
Latest Version
5.0.0
Package Id
polite-json@5.0.0
Unpacked Size
52.61 kB
Size
9.09 kB
File Count
13
NPM Version
10.7.0
Node Version
20.11.0
Publised On
18 May 2024
Cumulative downloads
Total Downloads
Last day
-2.2%
34,933
Compared to previous day
Last week
-0.7%
192,042
Compared to previous week
Last month
1.6%
803,074
Compared to previous month
Last year
2,944.9%
8,204,608
Compared to previous year
8
This is a Node.js library for getting nicer errors out of
JSON.parse()
, including context and position of the parse
errors.
It also preserves the newline and indentation styles of the JSON
data, by putting them in the object or array in the
Symbol.for('indent')
and Symbol.for('newline')
properties, so
that if you stringify()
the object you parsed, it'll be
formatted with the same indentation and newlines (in most cases,
it's not a super clever streaming in-place editor, it just uses
the first line break and indentation it sees).
$ npm install --save polite-json
1import { parse, parseNoExceptions, stringify } from 'polite-json' 2// or: const { parse, stringify } = require('polite-json') 3 4parse('"foo"') // returns the string 'foo' 5const obj = parse('{\r\n\t"hello": "world"\r\n}') // { hello: 'world' } 6stringify(obj) // stringifies with \r\n line breaks, \t indentation 7parse('garbage') // more useful error message 8parseNoExceptions('garbage') // no error, just undefined
noExceptions
method that returns undefined rather than throwing.Symbol.for('newline')
property on objects and arrays.Symbol.for('indent')
property on objects and arrays.Indentation and newline information is saved on the
Symbol.for('indent')
and Symbol.for('newline')
properties,
respectively. This is usually not a problem for JSON objects,
since JSON ignores symbols, but if you are using them for some
other purpose, it could cause weird behavior.
Indentation is determined by looking at the whitespace between
the initial {
and [
and the character that follows it. If
you have lots of weird inconsistent indentation, then it won't
track that or give you any way to preserve it. Whether this is a
bug or a feature is debatable ;)
parse(txt, reviver = null, context = 20)
Works just like JSON.parse
, but will include a bit more
information when an error happens, and attaches a
Symbol.for('indent')
and Symbol.for('newline')
on objects and
arrays. This throws a JSONParseError
.
parseNoExceptions(txt, reviver = null)
Works just like JSON.parse
, but will return undefined
rather
than throwing an error.
class JSONParseError(er, text, context = 20, caller = null)
Extends the JavaScript SyntaxError
class to parse the message
and provide better metadata.
Pass in the error thrown by the built-in JSON.parse
, and the
text being parsed, and it'll parse out the bits needed to be
helpful.
context
defaults to 20.
The er
parameter is attached as the JSONParseError.cause
property. This is used to provide a reference to the original
system error that was raised by JSON.parse()
.
Set a caller
function to trim internal implementation details
out of the stack trace. When calling parseJson
, this is set to
the parseJson
function. If not set, then the constructor
defaults to itself, so the stack trace will point to the spot
where you call new JSONParseError
.
stringify(obj, reviver = undefined, indent = undefined)
If the object was parsed using the parse()
methods in this
library, then it will default to using the same indentation and
newline strings that were detected, if relevant.
If indent
is set, then the stored formatting information is
ignored, and \n
newlines will be used.
A final newline will be appended if indentation is used.
No vulnerabilities found.
No security vulnerabilities found.