summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/json-stringify-nice/index.js
diff options
context:
space:
mode:
authorMyles Borins <mylesborins@github.com>2020-10-02 17:52:19 -0400
committerMyles Borins <mylesborins@github.com>2020-10-07 09:59:49 -0400
commit2e545249557c265f7d5f338cc3a382985211603c (patch)
treea18ca49252a58cc5a80cd438a020a99bf48a8d23 /deps/npm/node_modules/json-stringify-nice/index.js
parent14699846452e627f97dedb85991eea67d932a79d (diff)
downloadnode-new-2e545249557c265f7d5f338cc3a382985211603c.tar.gz
deps: update npm to 7.0.0-rc.3
PR-URL: https://github.com/nodejs/node/pull/35474 Reviewed-By: Ruy Adorno <ruyadorno@github.com> Reviewed-By: Ujjwal Sharma <ryzokuken@disroot.org> Reviewed-By: Ben Coe <bencoe@gmail.com> Reviewed-By: Geoffrey Booth <webmaster@geoffreybooth.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Shelley Vohr <codebytere@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'deps/npm/node_modules/json-stringify-nice/index.js')
-rw-r--r--deps/npm/node_modules/json-stringify-nice/index.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/deps/npm/node_modules/json-stringify-nice/index.js b/deps/npm/node_modules/json-stringify-nice/index.js
new file mode 100644
index 0000000000..1ca7e14fa0
--- /dev/null
+++ b/deps/npm/node_modules/json-stringify-nice/index.js
@@ -0,0 +1,38 @@
+const isObj = val => val && !Array.isArray(val) && typeof val === 'object'
+
+const compare = (ak, bk, prefKeys) =>
+ prefKeys.includes(ak) && !prefKeys.includes(bk) ? -1
+ : prefKeys.includes(bk) && !prefKeys.includes(ak) ? 1
+ : prefKeys.includes(ak) && prefKeys.includes(bk)
+ ? prefKeys.indexOf(ak) - prefKeys.indexOf(bk)
+ : ak.localeCompare(bk)
+
+const sort = (replacer, seen) => (key, val) => {
+ const prefKeys = Array.isArray(replacer) ? replacer : []
+
+ if (typeof replacer === 'function')
+ val = replacer(key, val)
+
+ if (!isObj(val))
+ return val
+
+ if (seen.has(val))
+ return seen.get(val)
+
+ const ret = Object.entries(val).sort(
+ ([ak, av], [bk, bv]) =>
+ isObj(av) === isObj(bv) ? compare(ak, bk, prefKeys)
+ : isObj(av) ? 1
+ : -1
+ ).reduce((set, [k, v]) => {
+ set[k] = v
+ return set
+ }, {})
+
+ seen.set(val, ret)
+ return ret
+}
+
+module.exports = (obj, replacer, space = 2) =>
+ JSON.stringify(obj, sort(replacer, new Map()), space)
+ + (space ? '\n' : '')