UNPKG

jsonbinpack

Version:

A space-efficient schema-driven binary JSON serialization format based on JSON Schema

182 lines (181 loc) 7.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var codemirror_1 = __importDefault(require("codemirror")); var jsonstats_1 = require("../contrib/jsonstats"); var EXAMPLE_JSON = { tags: [], tz: -25200, days: [1, 1, 2, 1], coord: [-90.0715, 29.9510], data: [ { name: 'ox03', staff: true }, { name: null, staff: false, extra: { info: '' } }, { name: 'ox03', staff: true }, {} ] }; var editorElement = document.getElementById('editor'); if (editorElement === null) { throw new Error('Editor element does not exist'); } var code = codemirror_1.default(editorElement, { lineNumbers: true, value: JSON.stringify(EXAMPLE_JSON, null, 2), theme: 'idea', mode: 'json' }); var buttonElement = document.getElementById('analyze'); if (buttonElement === null) { throw new Error('Button element does not exist'); } var parseJSON = function (value) { try { var result = JSON.parse(value); return result; } catch (error) { if (error instanceof SyntaxError) { document.querySelectorAll('.error-modal').forEach(function (element) { element.classList.remove('hidden'); }); } throw error; } }; var ANALYZE_VALUES_STRUCTURAL_COUNT = document.getElementById('analyze-values-structural-count'); var ANALYZE_VALUES_STRUCTURAL_BYTESIZE = document.getElementById('analyze-values-structural-bytesize'); var ANALYZE_VALUES_NUMERIC_COUNT = document.getElementById('analyze-values-numeric-count'); var ANALYZE_VALUES_NUMERIC_BYTESIZE = document.getElementById('analyze-values-numeric-bytesize'); var ANALYZE_VALUES_BOOLEAN_COUNT = document.getElementById('analyze-values-boolean-count'); var ANALYZE_VALUES_BOOLEAN_BYTESIZE = document.getElementById('analyze-values-boolean-bytesize'); var ANALYZE_VALUES_TEXTUAL_COUNT = document.getElementById('analyze-values-textual-count'); var ANALYZE_VALUES_TEXTUAL_BYTESIZE = document.getElementById('analyze-values-textual-bytesize'); var ANALYZE_KEYS_COUNT = document.getElementById('analyze-keys-count'); var ANALYZE_KEYS_BYTESIZE = document.getElementById('analyze-keys-bytesize'); var ANALYZE_LARGEST_LEVEL = document.getElementById('analyze-largest-level'); var ANALYZE_HEIGHT = document.getElementById('analyze-height'); var ANALYZE_DUPLICATED_KEYS = document.getElementById('analyze-duplicated-keys'); var ANALYZE_DUPLICATED_VALUES = document.getElementById('analyze-duplicated-values'); var ANALYZE_BYTESIZE = document.getElementById('analyze-bytesize'); if (ANALYZE_VALUES_STRUCTURAL_COUNT === null || ANALYZE_VALUES_STRUCTURAL_BYTESIZE === null || ANALYZE_VALUES_NUMERIC_COUNT === null || ANALYZE_VALUES_NUMERIC_BYTESIZE === null || ANALYZE_VALUES_BOOLEAN_COUNT === null || ANALYZE_VALUES_BOOLEAN_BYTESIZE === null || ANALYZE_VALUES_TEXTUAL_COUNT === null || ANALYZE_VALUES_TEXTUAL_BYTESIZE === null || ANALYZE_KEYS_COUNT === null || ANALYZE_KEYS_BYTESIZE === null || ANALYZE_LARGEST_LEVEL === null || ANALYZE_HEIGHT === null || ANALYZE_DUPLICATED_KEYS === null || ANALYZE_DUPLICATED_VALUES === null || ANALYZE_BYTESIZE === null) { throw new Error('Not all analyze elements exist'); } var SUMMARY_SIZE = document.getElementById('summary-size'); var SUMMARY_KEYS_REDUNDANCY = document.getElementById('summary-keys-redundancy'); var SUMMARY_VALUES_REDUNDANCY = document.getElementById('summary-values-redundancy'); var SUMMARY_NESTING_WEIGHT = document.getElementById('summary-nesting-weight'); var SUMMARY_NUMERIC_WEIGHT = document.getElementById('summary-numeric-weight'); var SUMMARY_TEXTUAL_WEIGHT = document.getElementById('summary-textual-weight'); var SUMMARY_BOOLEAN_WEIGHT = document.getElementById('summary-boolean-weight'); var SUMMARY_STRUCTURAL_WEIGHT = document.getElementById('summary-structural-weight'); if (SUMMARY_SIZE === null || SUMMARY_KEYS_REDUNDANCY === null || SUMMARY_VALUES_REDUNDANCY === null || SUMMARY_NESTING_WEIGHT === null || SUMMARY_NUMERIC_WEIGHT === null || SUMMARY_TEXTUAL_WEIGHT === null || SUMMARY_BOOLEAN_WEIGHT === null || SUMMARY_STRUCTURAL_WEIGHT === null) { throw new Error('Not all summary elements exist'); } var QUALIFIERS_CONTAINER = document.getElementById('qualifiers'); if (QUALIFIERS_CONTAINER === null) { throw new Error('The qualifiers container does not exist'); } var capitalize = function (text) { return text[0].toUpperCase() + text.slice(1); }; var populate = function (contents) { var json = parseJSON(contents); var stats = jsonstats_1.analyze(json); ANALYZE_BYTESIZE.innerHTML = String(stats.byteSize); ANALYZE_DUPLICATED_KEYS.innerHTML = String(stats.duplicatedKeys); ANALYZE_DUPLICATED_VALUES.innerHTML = String(stats.duplicatedValues); ANALYZE_HEIGHT.innerHTML = String(stats.height); ANALYZE_LARGEST_LEVEL.innerHTML = String(stats.largestLevel); ANALYZE_KEYS_COUNT.innerHTML = String(stats.keys.count); ANALYZE_KEYS_BYTESIZE.innerHTML = String(stats.keys.byteSize); ANALYZE_VALUES_NUMERIC_COUNT.innerHTML = String(stats.values.numeric.count); ANALYZE_VALUES_NUMERIC_BYTESIZE.innerHTML = String(stats.values.numeric.byteSize); ANALYZE_VALUES_BOOLEAN_COUNT.innerHTML = String(stats.values.boolean.count); ANALYZE_VALUES_BOOLEAN_BYTESIZE.innerHTML = String(stats.values.boolean.byteSize); ANALYZE_VALUES_TEXTUAL_COUNT.innerHTML = String(stats.values.textual.count); ANALYZE_VALUES_TEXTUAL_BYTESIZE.innerHTML = String(stats.values.textual.byteSize); ANALYZE_VALUES_STRUCTURAL_COUNT.innerHTML = String(stats.values.structural.count); ANALYZE_VALUES_STRUCTURAL_BYTESIZE.innerHTML = String(stats.values.structural.byteSize); var summary = jsonstats_1.summarize(stats); SUMMARY_SIZE.innerHTML = summary.size; SUMMARY_NESTING_WEIGHT.innerHTML = String(summary.nestingWeight); var precision = 4; SUMMARY_KEYS_REDUNDANCY.innerHTML = summary.keysRedundancy.toFixed(precision); SUMMARY_VALUES_REDUNDANCY.innerHTML = summary.valuesRedundancy.toFixed(precision); SUMMARY_NUMERIC_WEIGHT.innerHTML = summary.numericWeight.toFixed(precision); SUMMARY_TEXTUAL_WEIGHT.innerHTML = summary.textualWeight.toFixed(precision); SUMMARY_BOOLEAN_WEIGHT.innerHTML = summary.booleanWeight.toFixed(precision); SUMMARY_STRUCTURAL_WEIGHT.innerHTML = summary.structuralWeight.toFixed(precision); QUALIFIERS_CONTAINER.innerHTML = jsonstats_1.qualify(summary).map(capitalize).join(', '); }; buttonElement.addEventListener('click', function () { var contents = code.getValue(); populate(contents); }); var modalButtonElement = document.getElementById('close-modal'); if (modalButtonElement === null) { throw new Error('Modal button element does not exist'); } modalButtonElement.addEventListener('click', function () { document.querySelectorAll('.error-modal').forEach(function (element) { element.classList.add('hidden'); }); }); populate(code.getValue());