12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.jsonSizeApprox = exports.jsonSize = void 0;
- const utf8_1 = require("../strings/utf8");
- const numberSize = (num) => {
- const isInteger = num === Math.round(num);
- if (isInteger)
- return Math.max(Math.floor(Math.log10(Math.abs(num))), 0) + 1 + (num < 0 ? 1 : 0);
- return JSON.stringify(num).length;
- };
- const stringSize = (str) => {
- const strLength = str.length;
- let byteLength = strLength;
- let pos = 0;
- while (pos < strLength) {
- const value = str.charCodeAt(pos++);
- if (value < 128) {
- switch (value) {
- case 8:
- case 9:
- case 10:
- case 12:
- case 13:
- case 34:
- case 92:
- byteLength += 1;
- break;
- }
- continue;
- }
- else
- return (0, utf8_1.utf8Size)(JSON.stringify(str));
- }
- return byteLength + 2;
- };
- const booleanSize = (bool) => (bool ? 4 : 5);
- const arraySize = (arr) => {
- let size = 0;
- const length = arr.length;
- for (let i = 0; i < length; i++)
- size += (0, exports.jsonSize)(arr[i]);
- return size + 2 + (length > 1 ? length - 1 : 0);
- };
- const objectSize = (obj) => {
- let size = 2;
- let length = 0;
- for (const key in obj)
- if (obj.hasOwnProperty(key)) {
- length++;
- size += stringSize(key) + (0, exports.jsonSize)(obj[key]);
- }
- const colonSize = length;
- const commaSize = length > 1 ? length - 1 : 0;
- return size + colonSize + commaSize;
- };
- const jsonSize = (value) => {
- if (value === null)
- return 4;
- switch (typeof value) {
- case 'number':
- return numberSize(value);
- case 'string':
- return stringSize(value);
- case 'boolean':
- return booleanSize(value);
- }
- if (value instanceof Array)
- return arraySize(value);
- return objectSize(value);
- };
- exports.jsonSize = jsonSize;
- const jsonSizeApprox = (value) => {
- if (value === null)
- return 4;
- switch (typeof value) {
- case 'number':
- return numberSize(value);
- case 'string':
- return value.length;
- case 'boolean':
- return booleanSize(value);
- }
- if (value instanceof Array)
- return arraySize(value);
- return objectSize(value);
- };
- exports.jsonSizeApprox = jsonSizeApprox;
- //# sourceMappingURL=json.js.map
|