120 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
const base64DecodeMap = [
 | 
						|
  // starts at 0x2B
 | 
						|
  62,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  63,
 | 
						|
  52,
 | 
						|
  53,
 | 
						|
  54,
 | 
						|
  55,
 | 
						|
  56,
 | 
						|
  57,
 | 
						|
  58,
 | 
						|
  59,
 | 
						|
  60,
 | 
						|
  61,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0, // 0x3A-0x40
 | 
						|
  0,
 | 
						|
  1,
 | 
						|
  2,
 | 
						|
  3,
 | 
						|
  4,
 | 
						|
  5,
 | 
						|
  6,
 | 
						|
  7,
 | 
						|
  8,
 | 
						|
  9,
 | 
						|
  10,
 | 
						|
  11,
 | 
						|
  12,
 | 
						|
  13,
 | 
						|
  14,
 | 
						|
  15,
 | 
						|
  16,
 | 
						|
  17,
 | 
						|
  18,
 | 
						|
  19,
 | 
						|
  20,
 | 
						|
  21,
 | 
						|
  22,
 | 
						|
  23,
 | 
						|
  24,
 | 
						|
  25,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0,
 | 
						|
  0, // 0x5B-0x0x60
 | 
						|
  26,
 | 
						|
  27,
 | 
						|
  28,
 | 
						|
  29,
 | 
						|
  30,
 | 
						|
  31,
 | 
						|
  32,
 | 
						|
  33,
 | 
						|
  34,
 | 
						|
  35,
 | 
						|
  36,
 | 
						|
  37,
 | 
						|
  38,
 | 
						|
  39,
 | 
						|
  40,
 | 
						|
  41,
 | 
						|
  42,
 | 
						|
  43,
 | 
						|
  44,
 | 
						|
  45,
 | 
						|
  46,
 | 
						|
  47,
 | 
						|
  48,
 | 
						|
  49,
 | 
						|
  50,
 | 
						|
  51
 | 
						|
]
 | 
						|
 | 
						|
const base64DecodeMapOffset = 0x2b
 | 
						|
const base64EOF = 0x3d
 | 
						|
 | 
						|
export function decodeRestrictedBase64ToBytes(encoded: string) {
 | 
						|
  let ch: any
 | 
						|
  let code: any
 | 
						|
  let code2: any
 | 
						|
 | 
						|
  const len = encoded.length
 | 
						|
  const padding = encoded.charAt(len - 2) === '=' ? 2 : encoded.charAt(len - 1) === '=' ? 1 : 0
 | 
						|
  const decoded = new Uint8Array((encoded.length >> 2) * 3 - padding)
 | 
						|
 | 
						|
  for (let i = 0, j = 0; i < encoded.length; ) {
 | 
						|
    ch = encoded.charCodeAt(i++)
 | 
						|
    code = base64DecodeMap[ch - base64DecodeMapOffset]
 | 
						|
    ch = encoded.charCodeAt(i++)
 | 
						|
    code2 = base64DecodeMap[ch - base64DecodeMapOffset]
 | 
						|
    decoded[j++] = (code << 2) | ((code2 & 0x30) >> 4)
 | 
						|
 | 
						|
    ch = encoded.charCodeAt(i++)
 | 
						|
    if (ch === base64EOF) {
 | 
						|
      return decoded
 | 
						|
    }
 | 
						|
    code = base64DecodeMap[ch - base64DecodeMapOffset]
 | 
						|
    decoded[j++] = ((code2 & 0x0f) << 4) | ((code & 0x3c) >> 2)
 | 
						|
 | 
						|
    ch = encoded.charCodeAt(i++)
 | 
						|
    if (ch === base64EOF) {
 | 
						|
      return decoded
 | 
						|
    }
 | 
						|
    code2 = base64DecodeMap[ch - base64DecodeMapOffset]
 | 
						|
    decoded[j++] = ((code & 0x03) << 6) | code2
 | 
						|
  }
 | 
						|
  return decoded
 | 
						|
}
 |