8000 Support for Node v0.8. · rvagg/archived-string_decoder@53f692c · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Apr 5, 2018. It is now read-only.

Commit 53f692c

Browse files
committed
Support for Node v0.8.
1 parent d27e49a commit 53f692c

File tree

6 files changed

+76
-38
lines changed

6 files changed

+76
-38
lines changed

build/files.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,25 @@ module.exports['string_decoder.js'] = [
1414
, ''
1515
]
1616

17+
, [
18+
/const Buffer = require\('buffer'\).Buffer;/
19+
, 'var Buffer = require(\'buffer\').Buffer;\n' +
20+
'var bufferShim = require(\'buffer-shims\');'
21+
]
22+
23+
// allocUnsafe
24+
25+
, [
26+
/Buffer\.((?:alloc)|(?:allocUnsafe)|(?:from))/g,
27+
'bufferShim.$1'
28+
]
29+
1730
// add Buffer.isEncoding where missing
1831
, [
1932
/const isEncoding = Buffer\[internalUtil.kIsEncodingSymbol\];/
2033
, '\nvar isEncoding = Buffer.isEncoding'
2134
+ '\n || function(encoding) {'
35+
+ '\n encoding = \'\' + encoding'
2236
+ '\n switch (encoding && encoding.toLowerCase()) {'
2337
+ '\n case \'hex\': case \'utf8\': case \'utf-8\': case \'ascii\': case \'binary\': case \'base64\': case \'ucs2\': case \'ucs-2\': case \'utf16le\': case \'utf-16le\': case \'raw\': return true;'
2438
+ '\n default: return false;'

build/test-replacements.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ module.exports.all = [
44
, 'require(\'../../\')'
55
]
66

7+
, [
8+
/Buffer\.((?:alloc)|(?:allocUnsafe)|(?:from))/g,
9+
'bufferShim.$1'
10+
]
11+
12+
, [
13+
/^('use strict';)$/m,
14+
'$1\nconst bufferShim = require(\'buffer-shims\');'
15+< 9E88 /span>
]
16+
717
]
818

919
module.exports['common.js'] = [
@@ -42,3 +52,12 @@ module.exports['common.js'] = [
4252
+ ' /*</replacement>*/\n\n$1'
4353
]
4454
]
55+
56+
module.exports['test-string-decoder.js'] = [
57+
// test removed because it is V8-version dependant.
58+
[
59+
/test\('utf-8', bufferShim.from\('EDA0B5EDB08D'.*\n.*\n/
60+
, ''
61+
]
62+
]
63+

lib/string_decoder.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
'use strict';
22

33
var Buffer = require('buffer').Buffer;
4+
var bufferShim = require('buffer-shims');
45

56
var isEncoding = Buffer.isEncoding || function (encoding) {
7+
encoding = '' + encoding;
68
switch (encoding && encoding.toLowerCase()) {
79
case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
810
return true;
@@ -76,7 +78,7 @@ function StringDecoder(encoding) {
7678
}
7779
this.lastNeed = 0;
7880
this.lastTotal = 0;
79-
this.lastChar = Buffer.allocUnsafe(nb);
81+
this.lastChar = bufferShim.allocUnsafe(nb);
8082
}
8183

8284
StringDecoder.prototype.write = function (buf) {

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
"version": "0.11.10-3",
44
"description": "The string_decoder module from Node core",
55
"main": "lib/string_decoder.js",
6-
"dependencies": {},
6+
"dependencies": {
7+
"buffer-shims": "^1.0.0"
8+
},
79
"devDependencies": {
810
"babel-polyfill": "^6.23.0",
911
"tap": "~0.4.8"

test/parallel/test-string-decoder-end.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
'use strict';
2+
3+
var bufferShim = require('buffer-shims');
24
// verify that the string decoder works getting 1 byte at a time,
35
// the whole buffer at once, and that both match the .toString(enc)
46
// result of the entire buffer.
@@ -9,15 +11,15 @@ var SD = require('../../').StringDecoder;
911
var encodings = ['base64', 'hex', 'utf8', 'utf16le', 'ucs2'];
1012

1113
var bufs = ['☃💩', 'asdf'].map(function (b) {
12-
return Buffer.from(b);
14+
return bufferShim.from(b);
1315
});
1416

1517
// also test just arbitrary bytes from 0-15.
1618
for (var i = 1; i <= 16; i++) {
1719
var bytes = '.'.repeat(i - 1).split('.').map(function (_, j) {
1820
return j + 0x78;
1921
});
20-
bufs.push(Buffer.from(bytes));
22+
bufs.push(bufferShim.from(bytes));
2123
}
2224

2325
encodings.forEach(testEncoding);

test/parallel/test-string-decoder.js

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22

3+
var bufferShim = require('buffer-shims');
34
require('../common');
45
var assert = require('assert');
56
var inspect = require('util').inspect;
@@ -12,18 +13,18 @@ assert.strictEqual(decoder.encoding, 'utf8');
1213
process.stdout.write('scanning ');
1314

1415
// UTF-8
15-
test('utf-8', Buffer.from('$', 'utf-8'), '$');
16-
test('utf-8', Buffer.from('¢', 'utf-8'), '¢');
17-
test('utf-8', Buffer.from('€', 'utf-8'), '€');
18-
test('utf-8', Buffer.from('𤭢', 'utf-8'), '𤭢');
16+
test('utf-8', bufferShim.from('$', 'utf-8'), '$');
17+
test('utf-8', bufferShim.from('¢', 'utf-8'), '¢');
18+
test('utf-8', bufferShim.from('€', 'utf-8'), '€');
19+
test('utf-8', bufferShim.from('𤭢', 'utf-8'), '𤭢');
1920
// A mixed ascii and non-ascii string
2021
// Test stolen from deps/v8/test/cctest/test-strings.cc
2122
// U+02E4 -> CB A4
2223
// U+0064 -> 64
2324
// U+12E4 -> E1 8B A4
2425
// U+0030 -> 30
2526
// U+3045 -> E3 81 85
26-
test('utf-8', Buffer.from([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, 0x30, 0xE3, 0x81, 0x85]), '\u02e4\u0064\u12e4\u0030\u3045');
27+
test('utf-8', bufferShim.from([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, 0x30, 0xE3, 0x81, 0x85]), '\u02e4\u0064\u12e4\u0030\u3045');
2728

2829
// Some invalid input, known to have caused trouble with chunking
2930
// in https://github.com/nodejs/node/pull/7310#issuecomment-226445923
@@ -35,72 +36,70 @@ test('utf-8', Buffer.from([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, 0x30, 0xE3, 0x81,
3536
// F0: 11110|000 four-byte head
3637
// F1: 11110|001'another four-byte head
3738
// FB: 111110|11 "five-byte head", not UTF-8
38-
test('utf-8', Buffer.from('C9B5A941', 'hex'), '\u0275\ufffdA');
39-
test('utf-8', Buffer.from('E2', 'hex'), '\ufffd');
40-
test('utf-8', Buffer.from('E241', 'hex'), '\ufffdA');
41-
test('utf-8', Buffer.from('CCCCB8', 'hex'), '\ufffd\u0338');
42-
test('utf-8', Buffer.from('F0B841', 'hex'), '\ufffd\ufffdA');
43-
test('utf-8', Buffer.from('F1CCB8', 'hex'), '\ufffd\u0338');
44-
test('utf-8', Buffer.from('F0FB00', 'hex'), '\ufffd\ufffd\0');
45-
test('utf-8', Buffer.from('CCE2B8B8', 'hex'), '\ufffd\u2e38');
46-
test('utf-8', Buffer.from('E2B8CCB8', 'hex'), '\ufffd\ufffd\u0338');
47-
test('utf-8', Buffer.from('E2FBCC01', 'hex'), '\ufffd\ufffd\ufffd\u0001');
48-
test('utf-8', Buffer.from('EDA0B5EDB08D', 'hex'), // CESU-8 of U+1D40D
49-
'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd');
50-
test('utf-8', Buffer.from('CCB8CDB9', 'hex'), '\u0338\u0379');
39+
test('utf-8', bufferShim.from('C9B5A941', 'hex'), '\u0275\ufffdA');
40+
test('utf-8', bufferShim.from('E2', 'hex'), '\ufffd');
41+
test('utf-8', bufferShim.from('E241', 'hex'), '\ufffdA');
42+
test('utf-8', bufferShim.from('CCCCB8', 'hex'), '\ufffd\u0338');
43+
test('utf-8', bufferShim.from('F0B841', 'hex'), '\ufffd\ufffdA');
44+
test('utf-8', bufferShim.from('F1CCB8', 'hex'), '\ufffd\u0338');
45+
test('utf-8', bufferShim.from('F0FB00', 'hex'), '\ufffd\ufffd\0');
46+
test('utf-8', bufferShim.from('CCE2B8B8', 'hex'), '\ufffd\u2e38');
47+
test('utf-8', bufferShim.from('E2B8CCB8', 'hex'), '\ufffd\ufffd\u0338');
48+
test('utf-8', bufferShim.from('E2FBCC01', 'hex'), '\ufffd\ufffd\ufffd\u0001');
49+
test('utf-8', bufferShim.from('CCB8CDB9', 'hex'), '\u0338\u0379');
5150

5251
// UCS-2
53-
test('ucs2', Buffer.from('ababc', 'ucs2'), 'ababc');
52+
test('ucs2', bufferShim.from('ababc', 'ucs2'), 'ababc');
5453

5554
// UTF-16LE
56-
test('utf16le', Buffer.from('3DD84DDC', 'hex'), '\ud83d\udc4d'); // thumbs up
55+
test('utf16le', bufferShim.from('3DD84DDC', 'hex'), '\ud83d\udc4d'); // thumbs up
5756

5857
console.log(' crayon!');
5958

6059
// Additional UTF-8 tests
6160
decoder = new StringDecoder('utf8');
62-
assert.strictEqual(decoder.write(Buffer.from('E1', 'hex')), '');
61+
assert.strictEqual(decoder.write(bufferShim.from('E1', 'hex')), '');
6362
assert.strictEqual(decoder.end(), '\ufffd');
6463

6564
decoder = new StringDecoder('utf8');
66-
assert.strictEqual(decoder.write(Buffer.from('E18B', 'hex')), '');
65+
assert.strictEqual(decoder.write(bufferShim.from('E18B', 'hex')), '');
6766
assert.strictEqual(decoder.end(), '\ufffd\ufffd');
6867

6968
decoder = new StringDecoder('utf8');
70-
assert.strictEqual(decoder.write(Buffer.from('\ufffd')), '\ufffd');
69+
assert.strictEqual(decoder.write(bufferShim.from('\ufffd')), '\ufffd');
7170
assert.strictEqual(decoder.end(), '');
7271

7372
decoder = new StringDecoder('utf8');
74-
assert.strictEqual(decoder.write(Buffer.from('\ufffd\ufffd\ufffd')), '\ufffd\ufffd\ufffd');
73+
assert.strictEqual(decoder.write(bufferShim.from('\ufffd\ufffd\ufffd')), '\ufffd\ufffd\ufffd');
7574
assert.strictEqual(decoder.end(), '');
7675

7776
decoder = new StringDecoder('utf8');
78-
assert.strictEqual(decoder.write(Buffer.from('EFBFBDE2', 'hex')), '\ufffd');
77+
assert.strictEqual(decoder.write(bufferShim.from('EFBFBDE2', 'hex')), '\ufffd');
7978
assert.strictEqual(decoder.end(), '\ufffd');
8079

8180
decoder = new StringDecoder('utf8');
82-
assert.strictEqual(decoder.write(Buffer.from('F1', 'hex')), '');
83-
assert.strictEqual(decoder.write(Buffer.from('41F2', 'hex')), '\ufffdA');
81+
assert.strictEqual(decoder.write(bufferShim.from('F1', 'hex')), '');
82+
assert.strictEqual(decoder.write(bufferShim.from('41F2', 'hex')), '\ufffdA');
8483
assert.strictEqual(decoder.end(), '\ufffd');
8584

8685
// Additional utf8Text test
8786
decoder = new StringDecoder('utf8');
88-
assert.strictEqual(decoder.text(Buffer.from([0x41]), 2), '');
87+
assert.strictEqual(decoder.text(bufferShim.from([0x41]), 2), '');
8988

9089
// Additional UTF-16LE surrogate pair tests
9190
decoder = new StringDecoder('utf16le');
92-
assert.strictEqual(decoder.write(Buffer.from('3DD8', 'hex')), '');
93-
assert.strictEqual(decoder.write(Buffer.from('4D', 'hex')), '');
94-
assert.strictEqual(decoder.write(Buffer.from('DC', 'hex')), '\ud83d\udc4d');
91+
assert.strictEqual(decoder.write(bufferShim.from('3DD8', 'hex')), '');
92+
assert.strictEqual(decoder.write(bufferShim.from('4D', 'hex')), '');
93+
assert.strictEqual(decoder.write(bufferShim.from('DC', 'hex')), '\ud83d\udc4d');
9594
assert.strictEqual(decoder.end(), '');
9695

9796
decoder = new StringDecoder('utf16le');
98-
assert.strictEqual(decoder.write(Buffer.from('3DD8', 'hex')), '');
97+
assert.strictEqual(decoder.write(bufferShim.from('3DD8', 'hex')), '');
9998
assert.strictEqual(decoder.end(), '\ud83d');
10099

101100
decoder = new StringDecoder('utf16le');
102-
assert.strictEqual(decoder.write(Buffer.from('3DD8', 'hex')), '');
103-
assert.strictEqual(decoder.write(Buffer.from('4D', 'hex')), '');
101+
assert.strictEqual(decoder.write(bufferShim.from('3DD8', 'hex')), '');
102+
assert.strictEqual(decoder.write(bufferShim.from('4D', 'hex')), '');
104103
assert.strictEqual(decoder.end(), '\ud83d');
105104

106105
assert.throws(function () {

0 commit comments

Comments
 (0)
0