Skip to content

Commit 3cbe83c

Browse files
committed
Base64 TypeScript
1 parent 5592466 commit 3cbe83c

File tree

5 files changed

+143
-45
lines changed

5 files changed

+143
-45
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ ESMJSDEPS=$(shell cat misc/mjs.lst)
1919

2020
ULIB=$(shell echo $(LIB) | tr a-z A-Z)
2121
DEPS=$(sort $(wildcard bits/*.js))
22+
TSBITS=$(patsubst modules/%,bits/%,$(wildcard modules/[0-9][0-9]_*.js))
2223
TARGET=$(LIB).js
2324
FLOWTARGET=$(LIB).flow.js
2425
FLOWAUX=$(patsubst %.js,%.flow.js,$(AUXTARGETS))
@@ -53,7 +54,7 @@ bits/01_version.js: package.json
5354
bits/18_cfb.js: node_modules/cfb/xlscfb.flow.js
5455
cp $^ $@
5556

56-
bits/83_numbers.js: modules/83_numbers.js
57+
$(TSBITS): bits/%: modules/%
5758
cp $^ $@
5859

5960

bits/04_base64.js

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,47 @@
1-
var Base64 = (function make_b64(){
2-
var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
3-
return {
4-
encode: function(input/*:string*/)/*:string*/ {
5-
var o = "";
6-
var c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;
7-
for(var i = 0; i < input.length; ) {
8-
c1 = input.charCodeAt(i++);
9-
e1 = (c1 >> 2);
10-
11-
c2 = input.charCodeAt(i++);
12-
e2 = ((c1 & 3) << 4) | (c2 >> 4);
13-
14-
c3 = input.charCodeAt(i++);
15-
e3 = ((c2 & 15) << 2) | (c3 >> 6);
16-
e4 = (c3 & 63);
17-
if (isNaN(c2)) { e3 = e4 = 64; }
18-
else if (isNaN(c3)) { e4 = 64; }
19-
o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);
20-
}
21-
return o;
22-
},
23-
decode: function b64_decode(input/*:string*/)/*:string*/ {
24-
var o = "";
25-
var c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;
26-
input = input.replace(/[^\w\+\/\=]/g, "");
27-
for(var i = 0; i < input.length;) {
28-
e1 = map.indexOf(input.charAt(i++));
29-
e2 = map.indexOf(input.charAt(i++));
30-
c1 = (e1 << 2) | (e2 >> 4);
31-
o += String.fromCharCode(c1);
32-
33-
e3 = map.indexOf(input.charAt(i++));
34-
c2 = ((e2 & 15) << 4) | (e3 >> 2);
35-
if (e3 !== 64) { o += String.fromCharCode(c2); }
36-
37-
e4 = map.indexOf(input.charAt(i++));
38-
c3 = ((e3 & 3) << 6) | e4;
39-
if (e4 !== 64) { o += String.fromCharCode(c3); }
40-
}
41-
return o;
42-
}
43-
};
44-
})();
1+
var Base64 = function() {
2+
var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
3+
return {
4+
encode: function(input) {
5+
var o = "";
6+
var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
7+
for (var i = 0; i < input.length; ) {
8+
c1 = input.charCodeAt(i++);
9+
e1 = c1 >> 2;
10+
c2 = input.charCodeAt(i++);
11+
e2 = (c1 & 3) << 4 | c2 >> 4;
12+
c3 = input.charCodeAt(i++);
13+
e3 = (c2 & 15) << 2 | c3 >> 6;
14+
e4 = c3 & 63;
15+
if (isNaN(c2)) {
16+
e3 = e4 = 64;
17+
} else if (isNaN(c3)) {
18+
e4 = 64;
19+
}
20+
o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);
21+
}
22+
return o;
23+
},
24+
decode: function(input) {
25+
var o = "";
26+
var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
27+
input = input.replace(/[^\w\+\/\=]/g, "");
28+
for (var i = 0; i < input.length; ) {
29+
e1 = map.indexOf(input.charAt(i++));
30+
e2 = map.indexOf(input.charAt(i++));
31+
c1 = e1 << 2 | e2 >> 4;
32+
o += String.fromCharCode(c1);
33+
e3 = map.indexOf(input.charAt(i++));
34+
c2 = (e2 & 15) << 4 | e3 >> 2;
35+
if (e3 !== 64) {
36+
o += String.fromCharCode(c2);
37+
}
38+
e4 = map.indexOf(input.charAt(i++));
39+
c3 = (e3 & 3) << 6 | e4;
40+
if (e4 !== 64) {
41+
o += String.fromCharCode(c3);
42+
}
43+
}
44+
return o;
45+
}
46+
};
47+
}();

modules/04_base64.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
var Base64 = function() {
2+
var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
3+
return {
4+
encode: function(input) {
5+
var o = "";
6+
var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
7+
for (var i = 0; i < input.length; ) {
8+
c1 = input.charCodeAt(i++);
9+
e1 = c1 >> 2;
10+
c2 = input.charCodeAt(i++);
11+
e2 = (c1 & 3) << 4 | c2 >> 4;
12+
c3 = input.charCodeAt(i++);
13+
e3 = (c2 & 15) << 2 | c3 >> 6;
14+
e4 = c3 & 63;
15+
if (isNaN(c2)) {
16+
e3 = e4 = 64;
17+
} else if (isNaN(c3)) {
18+
e4 = 64;
19+
}
20+
o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);
21+
}
22+
return o;
23+
},
24+
decode: function(input) {
25+
var o = "";
26+
var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
27+
input = input.replace(/[^\w\+\/\=]/g, "");
28+
for (var i = 0; i < input.length; ) {
29+
e1 = map.indexOf(input.charAt(i++));
30+
e2 = map.indexOf(input.charAt(i++));
31+
c1 = e1 << 2 | e2 >> 4;
32+
o += String.fromCharCode(c1);
33+
e3 = map.indexOf(input.charAt(i++));
34+
c2 = (e2 & 15) << 4 | e3 >> 2;
35+
if (e3 !== 64) {
36+
o += String.fromCharCode(c2);
37+
}
38+
e4 = map.indexOf(input.charAt(i++));
39+
c3 = (e3 & 3) << 6 | e4;
40+
if (e4 !== 64) {
41+
o += String.fromCharCode(c3);
42+
}
43+
}
44+
return o;
45+
}
46+
};
47+
}();

modules/04_base64.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
var Base64 = (() => {
2+
var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
3+
return {
4+
encode: function(input: string): string {
5+
var o = "";
6+
var c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;
7+
for(var i = 0; i < input.length; ) {
8+
c1 = input.charCodeAt(i++);
9+
e1 = (c1 >> 2);
10+
11+
c2 = input.charCodeAt(i++);
12+
e2 = ((c1 & 3) << 4) | (c2 >> 4);
13+
14+
c3 = input.charCodeAt(i++);
15+
e3 = ((c2 & 15) << 2) | (c3 >> 6);
16+
e4 = (c3 & 63);
17+
if (isNaN(c2)) { e3 = e4 = 64; }
18+
else if (isNaN(c3)) { e4 = 64; }
19+
o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);
20+
}
21+
return o;
22+
},
23+
decode: function(input: string): string {
24+
var o = "";
25+
var c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;
26+
input = input.replace(/[^\w\+\/\=]/g, "");
27+
for(var i = 0; i < input.length;) {
28+
e1 = map.indexOf(input.charAt(i++));
29+
e2 = map.indexOf(input.charAt(i++));
30+
c1 = (e1 << 2) | (e2 >> 4);
31+
o += String.fromCharCode(c1);
32+
33+
e3 = map.indexOf(input.charAt(i++));
34+
c2 = ((e2 & 15) << 4) | (e3 >> 2);
35+
if (e3 !== 64) { o += String.fromCharCode(c2); }
36+
37+
e4 = map.indexOf(input.charAt(i++));
38+
c3 = ((e3 & 3) << 6) | e4;
39+
if (e4 !== 64) { o += String.fromCharCode(c3); }
40+
}
41+
return o;
42+
}
43+
};
44+
})();

modules/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ ENTRIES=$(subst .ts,.js,$(TSFILES))
55
.PHONY: all
66
all: $(ENTRIES)
77

8+
04_base64.js: 04_base64.ts $(LIBFILES)
9+
npx esbuild $< --outfile=$@ --platform=browser --target=es5
10+
811
83_numbers.js: 83_numbers.ts $(LIBFILES)
912
npx esbuild $< --bundle --outfile=$@ --platform=browser --format=iife --global-name=NUMBERS --target=es5
1013

0 commit comments

Comments
 (0)