initial commit
[squeep-base64url] / lib / base64url.js
1 'use strict';
2
3 const reEqual = /=/g;
4 const rePlus = /\+/g;
5 const reSlash = /\//g;
6 const reDash = /-/g;
7 const reUnder = /_/g;
8 const blockSize = 4;
9
10 /**
11 * Convert Base64 to Base64URL.
12 * @param {String} input
13 * @returns {String}
14 */
15 const base64ToBase64URL = (input) => {
16 return input
17 .replace(reEqual, '')
18 .replace(rePlus, '-')
19 .replace(reSlash, '_');
20 };
21
22 /**
23 * Convert Base64URL to normal Base64.
24 * @param {String} input
25 * @returns {String}
26 */
27 const base64URLToBase64 = (input) => {
28 return base64RePad(input)
29 .replace(reDash, '+')
30 .replace(reUnder, '/');
31 };
32
33 /**
34 * Add any missing trailing padding which may have been removed from Base64URL encoding.
35 * @param {String} input
36 */
37 const base64RePad = (input) => {
38 const lastBlockSize = input.length % blockSize;
39 if (lastBlockSize) {
40 const missing = blockSize - lastBlockSize;
41 return input + '='.repeat(missing);
42 }
43 return input;
44 };
45
46 module.exports = {
47 base64ToBase64URL,
48 base64URLToBase64,
49 base64RePad,
50 }