@@ -40,38 +40,17 @@ const { |
40 | 40 | flush, |
41 | 41 | } = internalBinding('string_decoder'); |
42 | 42 | const { |
43 | | - kIsEncodingSymbol, |
44 | 43 | encodingsMap, |
45 | | - normalizeEncoding: _normalizeEncoding, |
| 44 | + normalizeEncoding, |
46 | 45 | } = require('internal/util'); |
47 | 46 | const { |
48 | 47 | ERR_INVALID_ARG_TYPE, |
49 | 48 | ERR_INVALID_THIS, |
50 | 49 | ERR_UNKNOWN_ENCODING, |
51 | 50 | } = require('internal/errors').codes; |
52 | | -const isEncoding = Buffer[kIsEncodingSymbol]; |
53 | 51 |
|
54 | 52 | const kNativeDecoder = Symbol('kNativeDecoder'); |
55 | 53 |
|
56 | | -// Do not cache `Buffer.isEncoding` when checking encoding names as some |
57 | | -// modules monkey-patch it to support additional encodings |
58 | | -/** |
59 | | - * Normalize encoding notation |
60 | | - * @param {string} enc |
61 | | - * @returns {"utf8" | "utf16le" | "hex" | "ascii" |
62 | | - * | "base64" | "latin1" | "base64url"} |
63 | | - * @throws {TypeError} Throws an error when encoding is invalid |
64 | | - */ |
65 | | -function normalizeEncoding(enc) { |
66 | | - const nenc = _normalizeEncoding(enc); |
67 | | - if (nenc === undefined) { |
68 | | - if (Buffer.isEncoding === isEncoding || !Buffer.isEncoding(enc)) |
69 | | - throw new ERR_UNKNOWN_ENCODING(enc); |
70 | | - return enc; |
71 | | - } |
72 | | - return nenc; |
73 | | -} |
74 | | - |
75 | 54 | /** |
76 | 55 | * StringDecoder provides an interface for efficiently splitting a series of |
77 | 56 | * buffers into a series of JS strings without breaking apart multi-byte |
@@ -80,6 +59,9 @@ function normalizeEncoding(enc) { |
80 | 59 | */ |
81 | 60 | function StringDecoder(encoding) { |
82 | 61 | this.encoding = normalizeEncoding(encoding); |
| 62 | + if (this.encoding === undefined) { |
| 63 | + throw new ERR_UNKNOWN_ENCODING(encoding); |
| 64 | + } |
83 | 65 | this[kNativeDecoder] = Buffer.alloc(kSize); |
84 | 66 | this[kNativeDecoder][kEncodingField] = encodingsMap[this.encoding]; |
85 | 67 | } |
@@ -112,11 +94,9 @@ StringDecoder.prototype.write = function write(buf) { |
112 | 94 | * @returns {string} |
113 | 95 | */ |
114 | 96 | StringDecoder.prototype.end = function end(buf) { |
115 | | - let ret = ''; |
116 | | - if (buf !== undefined) |
117 | | - ret = this.write(buf); |
| 97 | + const ret = buf === undefined ? '' : this.write(buf); |
118 | 98 | if (this[kNativeDecoder][kBufferedBytes] > 0) |
119 | | - ret += flush(this[kNativeDecoder]); |
| 99 | + return ret + flush(this[kNativeDecoder]); |
120 | 100 | return ret; |
121 | 101 | }; |
122 | 102 |
|
|