@@ -5,3 +5,73 @@ export function capitalize(name: string) {
55export function snakeCaseToPascalCase ( name : string ) {
66 return name . split ( '_' ) . map ( capitalize ) . join ( '' ) ;
77}
8+
9+ /**
10+ * Copyright 2008 The Closure Library Authors. All Rights Reserved.
11+ * http://www.apache.org/licenses/LICENSE-2.0
12+ */
13+ export const byteArrayToUtfString = ( byteArray : number [ ] ) => {
14+ const out = [ ] ;
15+
16+ let pos = 0 ;
17+ let c = 0 ;
18+ while ( pos < byteArray . length ) {
19+ const c1 = byteArray [ pos ++ ] ;
20+ if ( c1 < 128 ) {
21+ out [ c ++ ] = String . fromCharCode ( c1 ) ;
22+ } else if ( c1 > 191 && c1 < 224 ) {
23+ const c2 = byteArray [ pos ++ ] ;
24+ out [ c ++ ] = String . fromCharCode ( ( ( c1 & 31 ) << 6 ) | ( c2 & 63 ) ) ;
25+ } else if ( c1 > 239 && c1 < 365 ) {
26+ // Surrogate Pair
27+ const c2 = byteArray [ pos ++ ] ;
28+ const c3 = byteArray [ pos ++ ] ;
29+ const c4 = byteArray [ pos ++ ] ;
30+ const u = ( ( ( c1 & 7 ) << 18 ) | ( ( c2 & 63 ) << 12 ) | ( ( c3 & 63 ) << 6 ) | ( c4 & 63 ) ) - 0x10000 ;
31+ out [ c ++ ] = String . fromCharCode ( 0xd800 + ( u >> 10 ) ) ;
32+ out [ c ++ ] = String . fromCharCode ( 0xdc00 + ( u & 1023 ) ) ;
33+ } else {
34+ const c2 = byteArray [ pos ++ ] ;
35+ const c3 = byteArray [ pos ++ ] ;
36+ out [ c ++ ] = String . fromCharCode ( ( ( c1 & 15 ) << 12 ) | ( ( c2 & 63 ) << 6 ) | ( c3 & 63 ) ) ;
37+ }
38+ }
39+
40+ return out . join ( '' ) ;
41+ } ;
42+
43+ /**
44+ * Copyright 2008 The Closure Library Authors. All Rights Reserved.
45+ * http://www.apache.org/licenses/LICENSE-2.0
46+ */
47+ export function utfStringToByteArray ( string : string ) {
48+ const out = [ ] ;
49+
50+ let p = 0 ;
51+ for ( let i = 0 ; i < string . length ; i ++ ) {
52+ let c = string . charCodeAt ( i ) ;
53+ if ( c < 128 ) {
54+ out [ p ++ ] = c ;
55+ } else if ( c < 2048 ) {
56+ out [ p ++ ] = ( c >> 6 ) | 192 ;
57+ out [ p ++ ] = ( c & 63 ) | 128 ;
58+ } else if (
59+ ( c & 0xfc00 ) == 0xd800 &&
60+ i + 1 < string . length &&
61+ ( string . charCodeAt ( i + 1 ) & 0xfc00 ) == 0xdc00
62+ ) {
63+ // Surrogate Pair
64+ c = 0x10000 + ( ( c & 0x03ff ) << 10 ) + ( string . charCodeAt ( ++ i ) & 0x03ff ) ;
65+ out [ p ++ ] = ( c >> 18 ) | 240 ;
66+ out [ p ++ ] = ( ( c >> 12 ) & 63 ) | 128 ;
67+ out [ p ++ ] = ( ( c >> 6 ) & 63 ) | 128 ;
68+ out [ p ++ ] = ( c & 63 ) | 128 ;
69+ } else {
70+ out [ p ++ ] = ( c >> 12 ) | 224 ;
71+ out [ p ++ ] = ( ( c >> 6 ) & 63 ) | 128 ;
72+ out [ p ++ ] = ( c & 63 ) | 128 ;
73+ }
74+ }
75+
76+ return out ;
77+ }
0 commit comments