(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.vlq = {})); })(this, (function (exports) { 'use strict'; /** @type {Record} */ let char_to_integer = {}; /** @type {Record} */ let integer_to_char = {}; 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' .split('') .forEach(function (char, i) { char_to_integer[char] = i; integer_to_char[i] = char; }); /** @param {string} string */ function decode(string) { /** @type {number[]} */ let result = []; let shift = 0; let value = 0; for (let i = 0; i < string.length; i += 1) { let integer = char_to_integer[string[i]]; if (integer === undefined) { throw new Error('Invalid character (' + string[i] + ')'); } const has_continuation_bit = integer & 32; integer &= 31; value += integer << shift; if (has_continuation_bit) { shift += 5; } else { const should_negate = value & 1; value >>>= 1; if (should_negate) { result.push(value === 0 ? -0x80000000 : -value); } else { result.push(value); } // reset value = shift = 0; } } return result; } /** @param {number | number[]} value */ function encode(value) { if (typeof value === 'number') { return encode_integer(value); } let result = ''; for (let i = 0; i < value.length; i += 1) { result += encode_integer(value[i]); } return result; } /** @param {number} num */ function encode_integer(num) { let result = ''; if (num < 0) { num = (-num << 1) | 1; } else { num <<= 1; } do { let clamped = num & 31; num >>>= 5; if (num > 0) { clamped |= 32; } result += integer_to_char[clamped]; } while (num > 0); return result; } exports.decode = decode; exports.encode = encode; Object.defineProperty(exports, '__esModule', { value: true }); }));