123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.toAst = exports.AnnotationAstNode = exports.ObjAstNode = exports.ArrAstNode = exports.BinAstNode = exports.StrAstNode = exports.FloatAstNode = exports.NintAstNode = exports.UintAstNode = exports.BoolAstNode = exports.NullAstNode = void 0;
- const utf8_1 = require("@jsonjoy.com/util/lib/strings/utf8");
- class NullAstNode {
- constructor() {
- this.val = null;
- this.len = 1;
- }
- byteLength() {
- return 1;
- }
- }
- exports.NullAstNode = NullAstNode;
- class BoolAstNode {
- constructor(val) {
- this.val = val;
- this.len = 1;
- }
- byteLength() {
- return 1;
- }
- }
- exports.BoolAstNode = BoolAstNode;
- class UintAstNode {
- constructor(val) {
- this.val = val;
- if (!val)
- this.len = 0;
- else if (val <= 0xff)
- this.len = 1;
- else if (val <= 0xffff)
- this.len = 2;
- else if (val <= 0xffffff)
- this.len = 3;
- else if (val <= 0xffffffff)
- this.len = 4;
- else if (val <= 0xffffffffff)
- this.len = 5;
- else if (val <= 0xffffffffffff)
- this.len = 6;
- else
- this.len = 7;
- }
- byteLength() {
- return 1 + this.len;
- }
- }
- exports.UintAstNode = UintAstNode;
- class NintAstNode {
- constructor(val) {
- this.val = val;
- const uint = -val;
- if (!uint)
- this.len = 0;
- else if (uint <= 0xff)
- this.len = 1;
- else if (uint <= 0xffff)
- this.len = 2;
- else if (uint <= 0xffffff)
- this.len = 3;
- else if (uint <= 0xffffffff)
- this.len = 4;
- else if (uint <= 0xffffffffff)
- this.len = 5;
- else if (uint <= 0xffffffffffff)
- this.len = 6;
- else
- this.len = 7;
- }
- byteLength() {
- return 1 + this.len;
- }
- }
- exports.NintAstNode = NintAstNode;
- class FloatAstNode {
- constructor(val) {
- this.val = val;
- this.len = 8;
- }
- byteLength() {
- return 1 + this.len;
- }
- }
- exports.FloatAstNode = FloatAstNode;
- const vUintLen = (num) => {
- if (num <= 0b1111111)
- return 1;
- else if (num <= 16383)
- return 2;
- else if (num <= 2097151)
- return 3;
- else if (num <= 268435455)
- return 4;
- else if (num <= 34359738367)
- return 5;
- else
- return 6;
- };
- class StrAstNode {
- constructor(val) {
- this.val = val;
- this.len = (0, utf8_1.utf8Size)(val);
- }
- byteLength() {
- return this.len < 14 ? 1 + this.len : 1 + vUintLen(this.len) + this.len;
- }
- }
- exports.StrAstNode = StrAstNode;
- class BinAstNode {
- constructor(val) {
- this.val = val;
- this.len = val.length;
- }
- byteLength() {
- return this.len < 14 ? 1 + this.len : 1 + vUintLen(this.len) + this.len;
- }
- }
- exports.BinAstNode = BinAstNode;
- class ArrAstNode {
- constructor(val) {
- this.val = val;
- if (val === null) {
- this.len = 1;
- }
- else {
- if (!val.length)
- this.len = 0;
- else {
- let elementLength = 0;
- for (let i = 0; i < val.length; i++)
- elementLength += val[i].byteLength();
- this.len = elementLength;
- }
- }
- }
- byteLength() {
- return this.len < 14 ? 1 + this.len : 1 + vUintLen(this.len) + this.len;
- }
- }
- exports.ArrAstNode = ArrAstNode;
- class ObjAstNode {
- constructor(val) {
- this.val = val;
- if (val === null) {
- this.len = 1;
- }
- else {
- if (!val.size)
- this.len = 0;
- else {
- let len = 0;
- val.forEach((node, symbolId) => {
- len += vUintLen(symbolId) + node.byteLength();
- });
- this.len = len;
- }
- }
- }
- byteLength() {
- return this.len < 14 ? 1 + this.len : 1 + vUintLen(this.len) + this.len;
- }
- }
- exports.ObjAstNode = ObjAstNode;
- class AnnotationAstNode {
- constructor(val, annotations) {
- this.val = val;
- this.annotations = annotations;
- let len = 0;
- for (let i = 0; i < annotations.length; i++)
- len += vUintLen(annotations[i]);
- this.annotationLen = len;
- len += vUintLen(len);
- len += val.byteLength();
- this.len = len;
- }
- byteLength() {
- return this.len < 14 ? 1 + this.len : 1 + vUintLen(this.len) + this.len;
- }
- }
- exports.AnnotationAstNode = AnnotationAstNode;
- const isSafeInteger = Number.isSafeInteger;
- const toAst = (val, symbols) => {
- if (val === null)
- return new NullAstNode();
- if (val instanceof Array)
- return new ArrAstNode(val.map((el) => (0, exports.toAst)(el, symbols)));
- if (val instanceof Uint8Array)
- return new BinAstNode(val);
- switch (typeof val) {
- case 'boolean':
- return new BoolAstNode(val);
- case 'number': {
- if (isSafeInteger(val))
- return val >= 0 ? new UintAstNode(val) : new NintAstNode(val);
- else
- return new FloatAstNode(val);
- }
- case 'string':
- return new StrAstNode(val);
- case 'object': {
- const struct = new Map();
- for (const key in val) {
- const symbolId = symbols.add(key);
- struct.set(symbolId, (0, exports.toAst)(val[key], symbols));
- }
- return new ObjAstNode(struct);
- }
- }
- throw new Error('UNKNOWN_TYPE');
- };
- exports.toAst = toAst;
- //# sourceMappingURL=ast.js.map
|