json-summary
Advanced tools
Comparing version 1.0.0 to 1.1.0
@@ -1,25 +0,28 @@ | ||
// https://andrewtburks.dev/json-summary v1.0.0 Copyright 2019 Andrew Burks | ||
// https://andrewtburks.dev/json-summary v1.1.0 Copyright 2019 Andrew Burks | ||
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
(global = global || self, factory(global.jsonSummary = {})); | ||
}(this, function (exports) { 'use strict'; | ||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : | ||
typeof define === 'function' && define.amd ? define(factory) : | ||
(global = global || self, global.jsonSummary = factory()); | ||
}(this, function () { 'use strict'; | ||
var defaults = { | ||
arraySampleCount: 10, | ||
indentation: " ", // or "\t" | ||
indentCount: 2, | ||
showExampleValue: true, | ||
startExpanded: false, | ||
theme: "dark" | ||
}; | ||
let arraySampleCount = 10, | ||
indentation = " ", // or "\t" | ||
indentCount = 2, | ||
showExampleValue = true, | ||
startExpanded = false, | ||
theme = "dark"; | ||
let defaultSummOpt = { | ||
arraySampleCount: defaults.arraySampleCount | ||
}; | ||
var defaults = /*#__PURE__*/Object.freeze({ | ||
arraySampleCount: arraySampleCount, | ||
indentation: indentation, | ||
indentCount: indentCount, | ||
showExampleValue: showExampleValue, | ||
startExpanded: startExpanded, | ||
theme: theme | ||
}); | ||
// utility function to extract overall json structure without printing entire data object | ||
function summarizeJSON(data, { | ||
arraySampleCount = defaultSummOpt.arraySampleCount | ||
} = defaultSummOpt) { | ||
arraySampleCount: arraySampleCount$1 = arraySampleCount | ||
} = defaults) { | ||
let summary = summarizeItem(data); | ||
@@ -44,4 +47,4 @@ | ||
if (arr.length) { | ||
if (arraySampleCount > 0) { | ||
let numToSample = arraySampleCount === "all" ? arr.length : Math.min(arraySampleCount, arr.length); | ||
if (arraySampleCount$1 > 0) { | ||
let numToSample = arraySampleCount$1 === "all" ? arr.length : Math.min(arraySampleCount$1, arr.length); | ||
let sampledItems = {}; | ||
@@ -293,11 +296,11 @@ | ||
var summarize = summarizeJSON; | ||
// let defaults = require("./defaults"); | ||
let defaultPrintOpt = { | ||
indentation: defaults.indentation, // or "\t" | ||
indentCount: defaults.indentCount, | ||
showExampleValue: defaults.showExampleValue, | ||
startExpanded: defaults.startExpanded, | ||
theme: defaults.theme | ||
}; | ||
// let defaultPrintOpt = { | ||
// indentation: defaults.indentation, // or "\t" | ||
// indentCount: defaults.indentCount, | ||
// showExampleValue: defaults.showExampleValue, | ||
// startExpanded: defaults.startExpanded, | ||
// theme: defaults.theme | ||
// }; | ||
@@ -308,12 +311,12 @@ // utility function to stringify the summary output from summarizeJSON | ||
{ | ||
indentation = defaultPrintOpt.indentation, // or "\t" | ||
indentCount = defaultPrintOpt.indentCount, | ||
showExampleValue = defaultPrintOpt.showExampleValue, | ||
startExpanded = defaultPrintOpt.startExpanded, | ||
theme = defaultPrintOpt.theme | ||
} = defaultPrintOpt | ||
indentation: indentation$1 = indentation, // or "\t" | ||
indentCount: indentCount$1 = indentCount, | ||
showExampleValue: showExampleValue$1 = showExampleValue, | ||
startExpanded: startExpanded$1 = startExpanded, | ||
theme: theme$1 = theme | ||
} = defaults | ||
) { | ||
// start at 0 indentation | ||
return ( | ||
`<div class="theme ${theme}"><div class='json-summary-wrapper'>` + | ||
`<div class="theme ${theme$1}"><div class='json-summary-wrapper'>` + | ||
printSummaryLevel(summary, 0) + | ||
@@ -344,3 +347,3 @@ `<div></div>` | ||
for (let i = 0; i < data.keys.length; i++) { | ||
childStringCombined += indentation.repeat((l + 1) * indentCount); | ||
childStringCombined += indentation$1.repeat((l + 1) * indentCount$1); | ||
@@ -364,3 +367,3 @@ childStringCombined += wrapInHTML(data.keys[i], "name") + ": "; | ||
childStringCombined += indentation.repeat(l * indentCount); | ||
childStringCombined += indentation$1.repeat(l * indentCount$1); | ||
@@ -387,3 +390,3 @@ string += wrapInHTML(childStringCombined, "child"); | ||
if (needsNewlines) { | ||
string += "\n" + indentation.repeat((l + 1) * indentCount); | ||
string += "\n" + indentation$1.repeat((l + 1) * indentCount$1); | ||
} | ||
@@ -394,3 +397,3 @@ | ||
if (needsNewlines) { | ||
string += "\n" + indentation.repeat(l * indentCount); | ||
string += "\n" + indentation$1.repeat(l * indentCount$1); | ||
} | ||
@@ -409,3 +412,3 @@ } | ||
if (showExampleValue) { | ||
if (showExampleValue$1) { | ||
string += wrapInHTML(data.example, "value", data.type); | ||
@@ -437,5 +440,5 @@ data.count > 1 && | ||
layer: () => `<span class="json-summary json-summary-checkbox ${ | ||
startExpanded ? "checked" : "" | ||
startExpanded$1 ? "checked" : "" | ||
}"> | ||
<input type="checkbox" ${startExpanded ? "checked" : ""}> | ||
<input type="checkbox" ${startExpanded$1 ? "checked" : ""}> | ||
<span class="json-summary-checkboxmarker" onclick="(function(me){ | ||
@@ -458,21 +461,14 @@ me.parentNode.classList.toggle('checked'); | ||
} | ||
// module.exports = printSummarizedJSON; | ||
var printSummary = printSummarizedJSON; | ||
// https://andrewtburks.dev/json-summary Copyright 2019 Andrew Burks | ||
var jsonSummary = { | ||
defaults: defaults, | ||
summarize: summarize, | ||
printSummary: printSummary | ||
var index = { | ||
defaults, | ||
summarize: summarizeJSON, | ||
printSummary: printSummarizedJSON | ||
}; | ||
var jsonSummary_1 = jsonSummary.defaults; | ||
var jsonSummary_2 = jsonSummary.summarize; | ||
var jsonSummary_3 = jsonSummary.printSummary; | ||
exports.default = jsonSummary; | ||
exports.defaults = jsonSummary_1; | ||
exports.printSummary = jsonSummary_3; | ||
exports.summarize = jsonSummary_2; | ||
return index; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
})); |
@@ -1,2 +0,2 @@ | ||
// https://andrewtburks.dev/json-summary v1.0.0 Copyright 2019 Andrew Burks | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).jsonSummary={})}(this,function(e){"use strict";var t={arraySampleCount:10,indentation:" ",indentCount:2,showExampleValue:!0,startExpanded:!1,theme:"dark"};let n={arraySampleCount:t.arraySampleCount};let a={indentation:t.indentation,indentCount:t.indentCount,showExampleValue:t.showExampleValue,startExpanded:t.startExpanded,theme:t.theme};var r={defaults:t,summarize:function(e,{arraySampleCount:t=n.arraySampleCount}=n){let a=function e(n){let a={Array:n=>{let a={count:1,type:"Array",length:n.length};if(n.length)if(t>0){let s="all"===t?n.length:Math.min(t,n.length),l={};for(;s>0;){let e=Math.floor(Math.random()*n.length);l.hasOwnProperty(e)||(l[e]=n[e],s--)}let u=[];for(let t of Object.entries(l)){let n=t[1];u.push(e(n))}let m=r(u);a.items={0:m}}else a.items={0:e(n[0])};else a.items={0:void 0};return a},Object:t=>{let n={count:1,type:"Object",keys:Object.keys(t),items:{}};for(let a of n.keys)n.items[a]=e(t[a]);return n},Other:e=>{let t;return"string"==typeof e?t=[e.length,e.length]:"number"==typeof e&&(t=[e,e]),{type:typeof e,example:e,count:1,range:t}}},s="Other";return n instanceof Array?s="Array":n instanceof Object&&(s="Object"),n&&n["*snippets_mark*"]?{type:s,circular:!0}:("Other"!==s&&(Object.defineProperty(n,"*snippets_mark*",{enumerable:!1,writable:!0,configurable:!0}),n["*snippets_mark*"]=!0),a[s](n))}(e);return function e(t){if(t&&t["*snippets_mark*"])if(delete t["*snippets_mark*"],t instanceof Array&&t.length)e(t[0]);else if(t instanceof Object)for(let n of Object.keys(t))e(t[n])}(e),a;function r(e){let t={Array:!0,Object:!0,boolean:!0,string:!0,number:!0},n=e.filter(e=>t[e.type]);if(n.length){let e=n[0].type;return function(e,t){return e=e.filter(e=>e.type===t),{string:function(e){let t=e.reduce((e,t)=>Math.min(e,t.range[0]),1/0),n=e.reduce((e,t)=>Math.max(e,t.range[1]),-1/0);return{type:"string",example:e[0].example,range:[t,n],count:e.reduce((e,t)=>e+t.count,0)}},number:function(e){let t=e.reduce((e,t)=>Math.min(e,t.range[0]),1/0),n=e.reduce((e,t)=>Math.max(e,t.range[1]),-1/0);return{type:"number",example:e[0].example,range:[t,n],count:e.reduce((e,t)=>e+t.count,0)}},boolean:function(e){return{type:"boolean",example:e[0].example,count:e.reduce((e,t)=>e+t.count,0)}},Object:function(e){let t={};for(let n of e)if(!n.circular)for(let e of n.keys)!t[e]&&(t[e]=[]),t[e].push(n.items[e]);let n={type:"Object",keys:[],items:{},count:e.length};for(let e of Object.keys(t))n.keys.push(e),n.items[e]=r(t[e]);return n},Array:function(e){let t=r(e.map(e=>e.items[0]).filter(e=>e));return{count:e.length,items:{0:t},length:t.count/e.length,type:"Array"}}}[t](e)}(n.filter(t=>t.type===e),e)}return{count:0}}},printSummary:function(e,{indentation:t=a.indentation,indentCount:n=a.indentCount,showExampleValue:r=a.showExampleValue,startExpanded:s=a.startExpanded,theme:l=a.theme}=a){return`<div class="theme ${l}"><div class='json-summary-wrapper'>`+function e(a,s){let l="";if(a.circular)l+=u("(circular reference)","circular");else if("Object"===a.type){l+="{";let r=a.keys.map(e=>`'${e}'`).join(", ");l+=u(r,"keys");let o=a.keys.map(t=>e(a.items[t],s+1));if(o.length){let e="\n";for(let r=0;r<a.keys.length;r++)e+=t.repeat((s+1)*n),e+=u(a.keys[r],"name")+": ",a.count>1&&(e+=`<div class="json-summary json-summary-bar" title="${(m=a.items[a.keys[r]].count/a.count*100).toFixed(2)}%"><div class="json-summary json-summary-percentage" style="width:${m}%;"></div></div>`),e+=o[r],r<a.keys.length-1&&(e+=","),e+="\n";e+=t.repeat(s*n),l+=u(e,"child")}l=u(l+="}","layer")}else if("Array"===a.type){if(l+=u(a.count>1?"μ = "+a.length.toFixed(1):a.length,"length")+" [",a.length){let r="Object"===a.items[0].type||"Array"===a.items[0].type;r&&(l+="\n"+t.repeat((s+1)*n)),l+=e(a.items[0],s+1,a.count),r&&(l+="\n"+t.repeat(s*n))}l+="]"}else null==a.example||null==a.example?l+=u("?","type"):l+=u(a.type,"type"),r&&(l+=u(a.example,"value",a.type),a.count>1&&a.range&&(l+=u(a.range,"range",a.type)));var m;return l}(e,0)+"<div></div>";function u(e,t,n){return{type:()=>`<span class="json-summary json-summary-type json-summary-type-${e}"><${e}></span>`,value:()=>`<span class="json-summary json-summary-value json-summary-value-${n}">${e}</span>`,range:()=>`<span class="json-summary json-summary-range json-summary-range-${n}">[${e[0]}, ${e[1]}]</span>`,name:()=>`<span class="json-summary json-summary-name">${e}</span>`,length:()=>`<span class="json-summary json-summary-length">(${e})</span>`,circular:()=>`<span class="json-summary json-summary-circular">${e}</span>`,layer:()=>`<span class="json-summary json-summary-checkbox ${s?"checked":""}">\n <input type="checkbox" ${s?"checked":""}>\n <span class="json-summary-checkboxmarker" onclick="(function(me){\n me.parentNode.classList.toggle('checked');\n })(this)"></span>\n </span><div class="json-summary json-summary-layer">${e}</div>`,child:()=>`<div class="json-summary json-summary-child">${e}</div>`,keys:()=>`<span class="json-summary json-summary-keys">${e}</span>`}[t]()}}},s=r.defaults,l=r.summarize,u=r.printSummary;e.default=r,e.defaults=s,e.printSummary=u,e.summarize=l,Object.defineProperty(e,"__esModule",{value:!0})}); | ||
// https://andrewtburks.dev/json-summary v1.1.0 Copyright 2019 Andrew Burks | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).jsonSummary=t()}(this,function(){"use strict";let e=10,t=" ",n=2,r=!0,s=!1,a="dark";var l=Object.freeze({arraySampleCount:e,indentation:t,indentCount:n,showExampleValue:r,startExpanded:s,theme:a});return{defaults:l,summarize:function(t,{arraySampleCount:n=e}=l){let r=function e(t){let r={Array:t=>{let r={count:1,type:"Array",length:t.length};if(t.length)if(n>0){let a="all"===n?t.length:Math.min(n,t.length),l={};for(;a>0;){let e=Math.floor(Math.random()*t.length);l.hasOwnProperty(e)||(l[e]=t[e],a--)}let u=[];for(let t of Object.entries(l)){let n=t[1];u.push(e(n))}let o=s(u);r.items={0:o}}else r.items={0:e(t[0])};else r.items={0:void 0};return r},Object:t=>{let n={count:1,type:"Object",keys:Object.keys(t),items:{}};for(let r of n.keys)n.items[r]=e(t[r]);return n},Other:e=>{let t;return"string"==typeof e?t=[e.length,e.length]:"number"==typeof e&&(t=[e,e]),{type:typeof e,example:e,count:1,range:t}}},a="Other";return t instanceof Array?a="Array":t instanceof Object&&(a="Object"),t&&t["*snippets_mark*"]?{type:a,circular:!0}:("Other"!==a&&(Object.defineProperty(t,"*snippets_mark*",{enumerable:!1,writable:!0,configurable:!0}),t["*snippets_mark*"]=!0),r[a](t))}(t);return function e(t){if(t&&t["*snippets_mark*"])if(delete t["*snippets_mark*"],t instanceof Array&&t.length)e(t[0]);else if(t instanceof Object)for(let n of Object.keys(t))e(t[n])}(t),r;function s(e){let t={Array:!0,Object:!0,boolean:!0,string:!0,number:!0},n=e.filter(e=>t[e.type]);if(n.length){let e=n[0].type;return function(e,t){return e=e.filter(e=>e.type===t),{string:function(e){let t=e.reduce((e,t)=>Math.min(e,t.range[0]),1/0),n=e.reduce((e,t)=>Math.max(e,t.range[1]),-1/0);return{type:"string",example:e[0].example,range:[t,n],count:e.reduce((e,t)=>e+t.count,0)}},number:function(e){let t=e.reduce((e,t)=>Math.min(e,t.range[0]),1/0),n=e.reduce((e,t)=>Math.max(e,t.range[1]),-1/0);return{type:"number",example:e[0].example,range:[t,n],count:e.reduce((e,t)=>e+t.count,0)}},boolean:function(e){return{type:"boolean",example:e[0].example,count:e.reduce((e,t)=>e+t.count,0)}},Object:function(e){let t={};for(let n of e)if(!n.circular)for(let e of n.keys)!t[e]&&(t[e]=[]),t[e].push(n.items[e]);let n={type:"Object",keys:[],items:{},count:e.length};for(let e of Object.keys(t))n.keys.push(e),n.items[e]=s(t[e]);return n},Array:function(e){let t=s(e.map(e=>e.items[0]).filter(e=>e));return{count:e.length,items:{0:t},length:t.count/e.length,type:"Array"}}}[t](e)}(n.filter(t=>t.type===e),e)}return{count:0}}},printSummary:function(e,{indentation:u=t,indentCount:o=n,showExampleValue:m=r,startExpanded:c=s,theme:i=a}=l){return`<div class="theme ${i}"><div class='json-summary-wrapper'>`+function e(t,n){let r="";if(t.circular)r+=y("(circular reference)","circular");else if("Object"===t.type){r+="{";let a=t.keys.map(e=>`'${e}'`).join(", ");r+=y(a,"keys");let l=t.keys.map(r=>e(t.items[r],n+1));if(l.length){let e="\n";for(let r=0;r<t.keys.length;r++)e+=u.repeat((n+1)*o),e+=y(t.keys[r],"name")+": ",t.count>1&&(e+=`<div class="json-summary json-summary-bar" title="${(s=t.items[t.keys[r]].count/t.count*100).toFixed(2)}%"><div class="json-summary json-summary-percentage" style="width:${s}%;"></div></div>`),e+=l[r],r<t.keys.length-1&&(e+=","),e+="\n";e+=u.repeat(n*o),r+=y(e,"child")}r=y(r+="}","layer")}else if("Array"===t.type){if(r+=y(t.count>1?"μ = "+t.length.toFixed(1):t.length,"length")+" [",t.length){let s="Object"===t.items[0].type||"Array"===t.items[0].type;s&&(r+="\n"+u.repeat((n+1)*o)),r+=e(t.items[0],n+1,t.count),s&&(r+="\n"+u.repeat(n*o))}r+="]"}else null==t.example||null==t.example?r+=y("?","type"):r+=y(t.type,"type"),m&&(r+=y(t.example,"value",t.type),t.count>1&&t.range&&(r+=y(t.range,"range",t.type)));var s;return r}(e,0)+"<div></div>";function y(e,t,n){return{type:()=>`<span class="json-summary json-summary-type json-summary-type-${e}"><${e}></span>`,value:()=>`<span class="json-summary json-summary-value json-summary-value-${n}">${e}</span>`,range:()=>`<span class="json-summary json-summary-range json-summary-range-${n}">[${e[0]}, ${e[1]}]</span>`,name:()=>`<span class="json-summary json-summary-name">${e}</span>`,length:()=>`<span class="json-summary json-summary-length">(${e})</span>`,circular:()=>`<span class="json-summary json-summary-circular">${e}</span>`,layer:()=>`<span class="json-summary json-summary-checkbox ${c?"checked":""}">\n <input type="checkbox" ${c?"checked":""}>\n <span class="json-summary-checkboxmarker" onclick="(function(me){\n me.parentNode.classList.toggle('checked');\n })(this)"></span>\n </span><div class="json-summary json-summary-layer">${e}</div>`,child:()=>`<div class="json-summary json-summary-child">${e}</div>`,keys:()=>`<span class="json-summary json-summary-keys">${e}</span>`}[t]()}}}}); |
16
index.js
@@ -1,7 +0,11 @@ | ||
"use strict"; | ||
// https://andrewtburks.dev/json-summary Copyright 2019 Andrew Burks | ||
module.exports = { | ||
defaults: require("./src/defaults"), | ||
summarize: require("./src/summarize"), | ||
printSummary: require("./src/printSummary") | ||
}; | ||
import * as defaults from "./src/defaults"; | ||
import summarize from "./src/summarize"; | ||
import printSummary from "./src/printSummary"; | ||
export default { | ||
defaults, | ||
summarize, | ||
printSummary | ||
}; |
{ | ||
"name": "json-summary", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "A simple JSON summarizer to extract the structure from a JSON object", | ||
@@ -11,3 +11,4 @@ "keywords": [ | ||
], | ||
"main": "index.js", | ||
"main": "dist/json-summary-node.js", | ||
"module": "index.js", | ||
"browser": "dist/json-summary.js", | ||
@@ -20,4 +21,5 @@ "browserMin": "dist/json-summary.min.js", | ||
"scripts": { | ||
"lint": "eslint -c .eslintrc.json 'index.js' 'src/**'", | ||
"jest": "jest", | ||
"test": "jest --coverage --coverageReporters=text-lcov | coveralls", | ||
"test": "npm run lint && jest --coverage --coverageReporters=text-lcov | coveralls", | ||
"prepublish": "npm run build && npm test", | ||
@@ -40,5 +42,9 @@ "build": "rollup -c && cp dist/json-summary.js docs/json-summary.js && sass style/main.scss dist/summarizer.css && cp dist/summarizer.css docs/summarizer.css" | ||
"devDependencies": { | ||
"@babel/core": "^7.4.3", | ||
"@babel/preset-env": "^7.4.3", | ||
"babel-jest": "^24.7.1", | ||
"coveralls": "^3.0.3", | ||
"eslint": "^5.16.0", | ||
"jest": "^24.7.1", | ||
"jsdom": "^15.0.0", | ||
"rollup": "^1.9.0", | ||
@@ -50,4 +56,14 @@ "rollup-plugin-commonjs": "^9.3.4", | ||
}, | ||
"jest": { | ||
"transform": { | ||
"^.+\\.jsx?$": "./node_modules/babel-jest" | ||
} | ||
}, | ||
"babel": { | ||
"presets": [ | ||
"@babel/env" | ||
] | ||
}, | ||
"dependencies": {}, | ||
"eslintConfig": "./.eslintrc.json" | ||
} |
1087
43982
12