jsonbinpack
Version:
A space-efficient schema-driven binary JSON serialization format based on JSON Schema
79 lines (78 loc) • 3.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isNumber = exports.isNegativeInteger = exports.isPositiveInteger = exports.isNull = exports.isFalse = exports.isTrue = exports.getMetadata = exports.getTypeTag = exports.isType = exports.LONG_STRING_BASE_EXPONENT_MAXIMUM = exports.LONG_STRING_BASE_EXPONENT_MINIMUM = exports.Subtype = exports.Type = void 0;
var assert_1 = require("assert");
var limits_1 = require("../../utils/limits");
var Type;
(function (Type) {
Type[Type["SharedString"] = 0] = "SharedString";
Type[Type["String"] = 1] = "String";
Type[Type["LongString"] = 2] = "LongString";
Type[Type["Object"] = 3] = "Object";
Type[Type["Array"] = 4] = "Array";
Type[Type["PositiveIntegerByte"] = 5] = "PositiveIntegerByte";
Type[Type["NegativeIntegerByte"] = 6] = "NegativeIntegerByte";
Type[Type["Other"] = 7] = "Other";
})(Type = exports.Type || (exports.Type = {}));
var Subtype;
(function (Subtype) {
Subtype[Subtype["False"] = 0] = "False";
Subtype[Subtype["True"] = 1] = "True";
Subtype[Subtype["Null"] = 2] = "Null";
Subtype[Subtype["PositiveInteger"] = 3] = "PositiveInteger";
Subtype[Subtype["NegativeInteger"] = 4] = "NegativeInteger";
Subtype[Subtype["Number"] = 5] = "Number";
Subtype[Subtype["LongStringBaseExponent7"] = 7] = "LongStringBaseExponent7";
Subtype[Subtype["LongStringBaseExponent8"] = 8] = "LongStringBaseExponent8";
Subtype[Subtype["LongStringBaseExponent9"] = 9] = "LongStringBaseExponent9";
Subtype[Subtype["LongStringBaseExponent10"] = 10] = "LongStringBaseExponent10";
})(Subtype = exports.Subtype || (exports.Subtype = {}));
exports.LONG_STRING_BASE_EXPONENT_MINIMUM = 7;
exports.LONG_STRING_BASE_EXPONENT_MAXIMUM = 10;
var isType = function (type, value) {
assert_1.strict(type >= limits_1.UINT3_MIN && type <= limits_1.UINT3_MAX);
assert_1.strict(value >= limits_1.UINT8_MIN && value <= limits_1.UINT8_MAX);
return (value & 7) === type;
};
exports.isType = isType;
var getTypeTag = function (type, metadata) {
assert_1.strict(type >= limits_1.UINT3_MIN && type <= limits_1.UINT3_MAX);
assert_1.strict(metadata >= limits_1.UINT5_MIN && metadata <= limits_1.UINT5_MAX);
return (metadata << 3) | type;
};
exports.getTypeTag = getTypeTag;
var getMetadata = function (value) {
assert_1.strict(value >= limits_1.UINT8_MIN && value <= limits_1.UINT8_MAX);
return value >>> 3;
};
exports.getMetadata = getMetadata;
var isTrue = function (value) {
return exports.isType(Type.Other, value) &&
exports.getMetadata(value) === Subtype.True;
};
exports.isTrue = isTrue;
var isFalse = function (value) {
return exports.isType(Type.Other, value) &&
exports.getMetadata(value) === Subtype.False;
};
exports.isFalse = isFalse;
var isNull = function (value) {
return exports.isType(Type.Other, value) &&
exports.getMetadata(value) === Subtype.Null;
};
exports.isNull = isNull;
var isPositiveInteger = function (value) {
return exports.isType(Type.Other, value) &&
exports.getMetadata(value) === Subtype.PositiveInteger;
};
exports.isPositiveInteger = isPositiveInteger;
var isNegativeInteger = function (value) {
return exports.isType(Type.Other, value) &&
exports.getMetadata(value) === Subtype.NegativeInteger;
};
exports.isNegativeInteger = isNegativeInteger;
var isNumber = function (value) {
return exports.isType(Type.Other, value) &&
exports.getMetadata(value) === Subtype.Number;
};
exports.isNumber = isNumber;