Skip to content

Commit 7f20ae7

Browse files
committed
Reverting back to having {encode, decode} on the returned object after realizing it was a mistake to remove it
1 parent 5324d6a commit 7f20ae7

File tree

3 files changed

+85
-23
lines changed

3 files changed

+85
-23
lines changed

NodeJS/EncoderAndDecoderNodeJS.src.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,24 @@
104104
return result;
105105
}
106106
TextEncoder.prototype["encode"] = encode;
107+
108+
function bindMethod(inst, name, _) {
109+
_ = inst[name];
110+
return function() {
111+
_.apply(inst, arguments);
112+
};
113+
}
114+
115+
var GlobalTextEncoder = global["TextEncoder"];
116+
var GlobalTextDecoder = global["TextDecoder"];
117+
107118
function factory(obj) {
108-
if (!obj["TextDecoder"]) obj["TextDecoder"] = global["TextDecoder"] || TextDecoder;
109-
if (!obj["TextEncoder"]) obj["TextEncoder"] = global["TextEncoder"] || TextEncoder;
110-
//if (obj !== global) obj["decode"] = decode, obj["encode"] = encode;
119+
obj["TextEncoder"] = GlobalTextEncoder || TextEncoder;
120+
obj["TextDecoder"] = GlobalTextDecoder || TextDecoder;
121+
if (obj !== global) {
122+
obj["encode"] = GlobalTextEncoder ? bindMethod(new GlobalTextEncoder, "encode") : encode;
123+
obj["decode"] = GlobalTextDecoder ? bindMethod(new GlobalTextDecoder, "decode") : decode;
124+
}
111125
return obj;
112126
}
113127

NodeJS/EncoderAndDecoderNodeJS.src.module.js

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,21 +96,57 @@ function encode(inputString){
9696
// 0xc0 => 0b11000000; 0xff => 0b11111111; 0xc0-0xff => 0b11xxxxxx
9797
// 0x80 => 0b10000000; 0xbf => 0b10111111; 0x80-0xbf => 0b10xxxxxx
9898
var encodedString = inputString === void 0 ? "" : ("" + inputString).replace(/[\x80-\uD7ff\uDC00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g, encoderReplacer);
99-
var len=encodedString.length|0, result = usingTypedArrays ? new NativeUint8Array(len) : NativeBuffer["alloc"] ? NativeBuffer["alloc"](len) : new NativeBuffer(len);
99+
var len=encodedString.length|0, result = usingTypedArrays ? new NativeUint8Array(len) : NativeBuffer["allocUnsafe"] ? NativeBuffer["allocUnsafe"](len) : new NativeBuffer(len);
100100
var i=0;
101101
for (; i<len; i=i+1|0)
102102
result[i] = encodedString.charCodeAt(i)|0;
103103
return result;
104104
};
105105
TextEncoder.prototype["encode"] = encode;
106106

107-
var FinalTextDecoder = window_global["TextDecoder"] || TextDecoder;
108-
var FinalTextEncoder = window_global["TextEncoder"] || TextEncoder;
107+
var GlobalTextDecoder = window_global["TextDecoder"];
108+
var GlobalTextEncoder = window_global["TextEncoder"];
109109

110-
window["export_TextDecoder"] = FinalTextDecoder;
111-
window["export_TextEncoder"] = FinalTextEncoder;
112-
//window["export_decode"] = FinalTextDecoder === TextDecoder ? decode : new FinalTextDecoder["decode"];
113-
//window["export_encode"] = FinalTextEncoder === TextEncoder ? encode : new FinalTextEncoder["encode"];
110+
function bindMethod(inst, name, _) {
111+
_ = inst[name];
112+
return function() {
113+
_.apply(inst, arguments);
114+
};
115+
}
116+
117+
window["export_TextEncoder"] = GlobalTextEncoder || TextEncoder;
118+
window["export_TextDecoder"] = GlobalTextDecoder || TextDecoder;
119+
window["export_encode"] = GlobalTextEncoder ? bindMethod(new GlobalTextEncoder, "encode") : encode;
120+
window["export_decode"] = GlobalTextDecoder ? bindMethod(new GlobalTextDecoder, "decode") : decode;
114121

115122
export default {};
116123

124+
125+
126+
127+
128+
129+
130+
131+
132+
133+
134+
135+
136+
137+
138+
139+
140+
141+
142+
143+
144+
145+
146+
147+
148+
149+
150+
151+
152+

README.md

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,31 @@ As for NodeJS, calling `require("EncoderAndDecoderNodeJS.min.js")` yields the fo
7373
```Javascript
7474
module.exports = {
7575
TextEncoder: function TextEncoder(){/*...*/},
76-
TextDecoder: function TextDecoder(){/*...*/}
76+
TextDecoder: function TextDecoder(){/*...*/},
77+
encode: TextEncoder.prototype.encode,
78+
decode: TextDecoder.prototype.decode
7779
}
7880
```
7981

80-
All of the code snippets below function identically <sub>(aside from unused local variables introduced into the scope)</sub>.
82+
In NodeJS, one does not ever have to use `new` just to get the encoder/decoder (although one still can do so if they want to). All of the code snippets below function identically <sub>(aside from unused local variables introduced into the scope)</sub>.
8183

8284
```Javascript
8385
// Variation 1
8486
const {TextEncoder, TextDecoder} = require("fastestsmallesttextencoderdecoder");
85-
const encode = TextEncoder.prototype.encode.bind( new TextEncoder );
86-
const decode = TextDecoder.prototype.decode.bind( new TextDecoder );
87+
const encode = (new TextEncoder).encode;
88+
const decode = (new TextDecoder).decode;
8789
```
8890

8991
```Javascript
9092
// Variation 2
91-
const encodeAndDecodeMod = require("fastestsmallesttextencoderdecoder");
92-
const encode = encodeAndDecodeMod.TextEncoder.prototype.encode.bind( new TextEncoder );
93-
const decode = encodeAndDecodeMod.TextDecoder.prototype.decode.bind( new TextDecoder );
93+
const {encode, decode} = require("fastestsmallesttextencoderdecoder");
94+
```
95+
96+
```Javascript
97+
// Variation 3 (a rewording of Variation 2)
98+
const encodeAndDecodeModule = require("fastestsmallesttextencoderdecoder");
99+
const encode = encodeAndDecodeModule.encode;
100+
const decode = encodeAndDecodeModule.decode;
94101
```
95102

96103
Or, one can use the new and shiny [ES6 module importation](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/import) statements.
@@ -99,15 +106,20 @@ Or, one can use the new and shiny [ES6 module importation](https://developer.moz
99106
```Javascript
100107
// Variation 1
101108
import {TextEncoder, TextDecoder} from "fastestsmallesttextencoderdecoder";
102-
const encode = TextEncoder.prototype.encode.bind( new TextEncoder );
103-
const decode = TextDecoder.prototype.decode.bind( new TextDecoder );
109+
const encode = (new TextEncoder).encode;
110+
const decode = (new TextDecoder).decode;
111+
```
112+
113+
```Javascript
114+
// Variation 2
115+
import {encode, decode} from "fastestsmallesttextencoderdecoder";
104116
```
105117

106118
```Javascript
107-
// Variation 2 (a rewording of Variation 1)
108-
import * as encodeAndDecodeMod from "fastestsmallesttextencoderdecoder";
109-
const encode = encodeAndDecodeMod.TextEncoder.prototype.encode.bind( new TextEncoder );
110-
const decode = encodeAndDecodeMod.TextDecoder.prototype.decode.bind( new TextDecoder );
119+
// Variation 3 (a rewording of Variation 2)
120+
import * as encodeAndDecodeModule from "fastestsmallesttextencoderdecoder";
121+
const encode = encodeAndDecodeModule.encode;
122+
const decode = encodeAndDecodeModule.decode;
111123
```
112124

113125

0 commit comments

Comments
 (0)