(function (global, factory) {
|
// eslint-disable-next-line no-unused-expressions
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports)
|
// eslint-disable-next-line no-undef
|
: typeof define === 'function' && define.amd ? define('jsonlint-formatter', ['exports'], factory)
|
// eslint-disable-next-line no-undef
|
: (global = global || self, factory(global.jsonlintFormatter = {}))
|
}(this, function (exports) {
|
'use strict'
|
|
/**
|
* Manual formatter taken straight from https://github.com/umbrae/jsonlintdotcom
|
*
|
* jsl.format - Provide json reformatting in a character-by-character approach,
|
* so that even invalid JSON may be reformatted (to the best of its ability).
|
*
|
*/
|
|
function repeat (s, count) {
|
return new Array(count + 1).join(s)
|
}
|
|
function format (json, indent) {
|
var i = 0
|
var length = 0
|
var indentString = indent !== undefined
|
? typeof indent === 'number'
|
? new Array(indent + 1).join(' ') : indent : ' '
|
var outputString = ''
|
var indentLevel = 0
|
var inString
|
var currentChar
|
|
for (i = 0, length = json.length; i < length; i += 1) {
|
currentChar = json.charAt(i)
|
switch (currentChar) {
|
case '{':
|
case '[':
|
if (!inString) {
|
outputString += currentChar + '\n' + repeat(indentString, indentLevel + 1)
|
indentLevel += 1
|
} else {
|
outputString += currentChar
|
}
|
break
|
case '}':
|
case ']':
|
if (!inString) {
|
indentLevel -= 1
|
outputString += '\n' + repeat(indentString, indentLevel) + currentChar
|
} else {
|
outputString += currentChar
|
}
|
break
|
case ',':
|
if (!inString) {
|
outputString += ',\n' + repeat(indentString, indentLevel)
|
} else {
|
outputString += currentChar
|
}
|
break
|
case ':':
|
if (!inString) {
|
outputString += ': '
|
} else {
|
outputString += currentChar
|
}
|
break
|
case ' ':
|
case '\n':
|
case '\t':
|
if (inString) {
|
outputString += currentChar
|
}
|
break
|
case '"':
|
if (i > 0 && json.charAt(i - 1) !== '\\') {
|
inString = !inString
|
}
|
outputString += currentChar
|
break
|
default:
|
outputString += currentChar
|
break
|
}
|
}
|
|
return outputString
|
}
|
|
exports.format = format
|
|
Object.defineProperty(exports, '__esModule', { value: true })
|
}))
|