first commit

This commit is contained in:
Stefan Hacker
2026-04-03 09:38:48 +02:00
commit 37ad745546
47450 changed files with 3120798 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
export * from './json';
export * from './jsonSizeFast';
export * from './maxEncodingCapacity';
+7
View File
@@ -0,0 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
tslib_1.__exportStar(require("./json"), exports);
tslib_1.__exportStar(require("./jsonSizeFast"), exports);
tslib_1.__exportStar(require("./maxEncodingCapacity"), exports);
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/json-size/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,yDAA+B;AAC/B,gEAAsC"}
+2
View File
@@ -0,0 +1,2 @@
export declare const jsonSize: (value: unknown) => number;
export declare const jsonSizeApprox: (value: unknown) => number;
+88
View File
@@ -0,0 +1,88 @@
"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
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/json-size/json.ts"],"names":[],"mappings":"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"}
+1
View File
@@ -0,0 +1 @@
export declare const jsonSizeFast: (value: unknown) => number;
+33
View File
@@ -0,0 +1,33 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.jsonSizeFast = void 0;
const arraySize = (arr) => {
let size = 2;
for (let i = arr.length - 1; i >= 0; i--)
size += (0, exports.jsonSizeFast)(arr[i]);
return size;
};
const objectSize = (obj) => {
let size = 2;
for (const key in obj)
if (obj.hasOwnProperty(key))
size += 2 + key.length + (0, exports.jsonSizeFast)(obj[key]);
return size;
};
const jsonSizeFast = (value) => {
if (value === null)
return 1;
switch (typeof value) {
case 'number':
return 9;
case 'string':
return 4 + value.length;
case 'boolean':
return 1;
}
if (value instanceof Array)
return arraySize(value);
return objectSize(value);
};
exports.jsonSizeFast = jsonSizeFast;
//# sourceMappingURL=jsonSizeFast.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"jsonSizeFast.js","sourceRoot":"","sources":["../../src/json-size/jsonSizeFast.ts"],"names":[],"mappings":";;;AAAA,MAAM,SAAS,GAAG,CAAC,GAAc,EAAU,EAAE;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,IAAA,oBAAY,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAA4B,EAAU,EAAE;IAC1D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,GAAG,IAAI,GAAG;QAAE,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,IAAA,oBAAY,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACpG,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAiCK,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE;IACrD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC7B,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,KAAgC,CAAC,CAAC;AACtD,CAAC,CAAC;AAZW,QAAA,YAAY,gBAYvB"}
+15
View File
@@ -0,0 +1,15 @@
export declare const enum MaxEncodingOverhead {
Null = 4,
Boolean = 5,
Number = 22,
String = 5,
StringLengthMultiplier = 5,
Binary = 41,
BinaryLengthMultiplier = 2,
Array = 5,
ArrayElement = 1,
Object = 5,
ObjectElement = 2,
Undefined = 45
}
export declare const maxEncodingCapacity: (value: unknown) => number;
+47
View File
@@ -0,0 +1,47 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.maxEncodingCapacity = void 0;
const maxEncodingCapacity = (value) => {
switch (typeof value) {
case 'number':
return 22;
case 'string':
return 5 + value.length * 5;
case 'boolean':
return 5;
case 'object': {
if (!value)
return 4;
const constructor = value.constructor;
switch (constructor) {
case Array: {
const arr = value;
const length = arr.length;
let size = 5 + length * 1;
for (let i = arr.length - 1; i >= 0; i--)
size += (0, exports.maxEncodingCapacity)(arr[i]);
return size;
}
case Uint8Array: {
return 41 + value.length * 2;
}
case Object: {
let size = 5;
const obj = value;
for (const key in obj)
if (obj.hasOwnProperty(key))
size += 2 + (0, exports.maxEncodingCapacity)(key) + (0, exports.maxEncodingCapacity)(obj[key]);
return size;
}
default:
return 45;
}
}
case 'bigint':
return 22;
default:
return 45;
}
};
exports.maxEncodingCapacity = maxEncodingCapacity;
//# sourceMappingURL=maxEncodingCapacity.js.map
@@ -0,0 +1 @@
{"version":3,"file":"maxEncodingCapacity.js","sourceRoot":"","sources":["../../src/json-size/maxEncodingCapacity.ts"],"names":[],"mappings":";;;AAeO,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC5D,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,UAAkC;QACpC,KAAK,QAAQ;YACX,OAAO,IAA6B,KAAK,CAAC,MAAM,IAA6C,CAAC;QAChG,KAAK,SAAS;YACZ,SAAmC;QACrC,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,KAAK;gBAAE,SAAgC;YAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YACtC,QAAQ,WAAW,EAAE,CAAC;gBACpB,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,GAAG,GAAG,KAAkB,CAAC;oBAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC1B,IAAI,IAAI,GAAG,IAA4B,MAAM,IAAmC,CAAC;oBACjF,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;wBAAE,IAAI,IAAI,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9E,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,OAAO,KAA8B,KAAoB,CAAC,MAAM,IAA6C,CAAC;gBAChH,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IAAI,IAAI,IAA6B,CAAC;oBACtC,MAAM,GAAG,GAAG,KAAgC,CAAC;oBAC7C,KAAK,MAAM,GAAG,IAAI,GAAG;wBACnB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC;4BACzB,IAAI,IAAI,IAAoC,IAAA,2BAAmB,EAAC,GAAG,CAAC,GAAG,IAAA,2BAAmB,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACzG,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD;oBACE,UAAqC;YACzC,CAAC;QACH,CAAC;QACD,KAAK,QAAQ;YACX,UAAkC;QACpC;YACE,UAAqC;IACzC,CAAC;AACH,CAAC,CAAC;AAvCW,QAAA,mBAAmB,uBAuC9B"}