source: frontend/node_modules/source-map/lib/base64-vlq.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.4 KB
Line 
1/* -*- Mode: js; js-indent-level: 2; -*- */
2/*
3 * Copyright 2011 Mozilla Foundation and contributors
4 * Licensed under the New BSD license. See LICENSE or:
5 * http://opensource.org/licenses/BSD-3-Clause
6 *
7 * Based on the Base 64 VLQ implementation in Closure Compiler:
8 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
9 *
10 * Copyright 2011 The Closure Compiler Authors. All rights reserved.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions are
13 * met:
14 *
15 * * Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 * * Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials provided
20 * with the distribution.
21 * * Neither the name of Google Inc. nor the names of its
22 * contributors may be used to endorse or promote products derived
23 * from this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 */
37
38const base64 = require("./base64");
39
40// A single base 64 digit can contain 6 bits of data. For the base 64 variable
41// length quantities we use in the source map spec, the first bit is the sign,
42// the next four bits are the actual value, and the 6th bit is the
43// continuation bit. The continuation bit tells us whether there are more
44// digits in this value following this digit.
45//
46// Continuation
47// | Sign
48// | |
49// V V
50// 101011
51
52const VLQ_BASE_SHIFT = 5;
53
54// binary: 100000
55const VLQ_BASE = 1 << VLQ_BASE_SHIFT;
56
57// binary: 011111
58const VLQ_BASE_MASK = VLQ_BASE - 1;
59
60// binary: 100000
61const VLQ_CONTINUATION_BIT = VLQ_BASE;
62
63/**
64 * Converts from a two-complement value to a value where the sign bit is
65 * placed in the least significant bit. For example, as decimals:
66 * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
67 * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
68 */
69function toVLQSigned(aValue) {
70 return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;
71}
72
73/**
74 * Returns the base 64 VLQ encoded value.
75 */
76exports.encode = function base64VLQ_encode(aValue) {
77 let encoded = "";
78 let digit;
79
80 let vlq = toVLQSigned(aValue);
81
82 do {
83 digit = vlq & VLQ_BASE_MASK;
84 vlq >>>= VLQ_BASE_SHIFT;
85 if (vlq > 0) {
86 // There are still more digits in this value, so we must make sure the
87 // continuation bit is marked.
88 digit |= VLQ_CONTINUATION_BIT;
89 }
90 encoded += base64.encode(digit);
91 } while (vlq > 0);
92
93 return encoded;
94};
Note: See TracBrowser for help on using the repository browser.