fs: Add string encoding option for Stream method
Add string encoding option for fs.createReadStream and fs.createWriteStream. and check argument type more strictly PR-URL: https://github.com/nodejs/io.js/pull/1845 Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
59d9734e21
commit
353e26e3c7
@ -795,7 +795,7 @@ on Unix systems, it never was.
|
||||
|
||||
Returns a new ReadStream object (See `Readable Stream`).
|
||||
|
||||
`options` is an object with the following defaults:
|
||||
`options` is an object or string with the following defaults:
|
||||
|
||||
{ flags: 'r',
|
||||
encoding: null,
|
||||
@ -821,6 +821,7 @@ An example to read the last 10 bytes of a file which is 100 bytes long:
|
||||
|
||||
fs.createReadStream('sample.txt', {start: 90, end: 99});
|
||||
|
||||
If `options` is a string, then it specifies the encoding.
|
||||
|
||||
## Class: fs.ReadStream
|
||||
|
||||
@ -837,7 +838,7 @@ Emitted when the ReadStream's file is opened.
|
||||
|
||||
Returns a new WriteStream object (See `Writable Stream`).
|
||||
|
||||
`options` is an object with the following defaults:
|
||||
`options` is an object or string with the following defaults:
|
||||
|
||||
{ flags: 'w',
|
||||
encoding: null,
|
||||
@ -854,6 +855,7 @@ Like `ReadStream` above, if `fd` is specified, `WriteStream` will ignore the
|
||||
`path` argument and will use the specified file descriptor. This means that no
|
||||
`open` event will be emitted.
|
||||
|
||||
If `options` is a string, then it specifies the encoding.
|
||||
|
||||
## Class: fs.WriteStream
|
||||
|
||||
|
18
lib/fs.js
18
lib/fs.js
@ -1617,8 +1617,15 @@ function ReadStream(path, options) {
|
||||
if (!(this instanceof ReadStream))
|
||||
return new ReadStream(path, options);
|
||||
|
||||
if (options === undefined)
|
||||
options = {};
|
||||
else if (typeof options === 'string')
|
||||
options = { encoding: options };
|
||||
else if (options === null || typeof options !== 'object')
|
||||
throw new TypeError('options must be a string or an object');
|
||||
|
||||
// a little bit bigger buffer and water marks by default
|
||||
options = Object.create(options || {});
|
||||
options = Object.create(options);
|
||||
if (options.highWaterMark === undefined)
|
||||
options.highWaterMark = 64 * 1024;
|
||||
|
||||
@ -1783,7 +1790,14 @@ function WriteStream(path, options) {
|
||||
if (!(this instanceof WriteStream))
|
||||
return new WriteStream(path, options);
|
||||
|
||||
options = options || {};
|
||||
if (options === undefined)
|
||||
options = {};
|
||||
else if (typeof options === 'string')
|
||||
options = { encoding: options };
|
||||
else if (options === null || typeof options !== 'object')
|
||||
throw new TypeError('options must be a string or an object');
|
||||
|
||||
options = Object.create(options);
|
||||
|
||||
Writable.call(this, options);
|
||||
|
||||
|
17
test/parallel/test-fs-read-stream-encoding.js
Normal file
17
test/parallel/test-fs-read-stream-encoding.js
Normal file
@ -0,0 +1,17 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const stream = require('stream');
|
||||
const encoding = 'base64';
|
||||
|
||||
const example = path.join(common.fixturesDir, 'x.txt');
|
||||
const assertStream = new stream.Writable({
|
||||
write: function(chunk, enc, next) {
|
||||
const expected = new Buffer('xyz');
|
||||
assert(chunk.equals(expected));
|
||||
}
|
||||
});
|
||||
assertStream.setDefaultEncoding(encoding);
|
||||
fs.createReadStream(example, encoding).pipe(assertStream);
|
33
test/parallel/test-fs-read-stream-throw-type-error.js
Normal file
33
test/parallel/test-fs-read-stream-throw-type-error.js
Normal file
@ -0,0 +1,33 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const example = path.join(common.fixturesDir, 'x.txt');
|
||||
|
||||
assert.doesNotThrow(function() {
|
||||
fs.createReadStream(example, undefined);
|
||||
});
|
||||
assert.doesNotThrow(function() {
|
||||
fs.createReadStream(example, 'utf8');
|
||||
});
|
||||
assert.doesNotThrow(function() {
|
||||
fs.createReadStream(example, {encoding: 'utf8'});
|
||||
});
|
||||
|
||||
assert.throws(function() {
|
||||
fs.createReadStream(example, null);
|
||||
}, /options must be a string or an object/);
|
||||
assert.throws(function() {
|
||||
fs.createReadStream(example, 123);
|
||||
}, /options must be a string or an object/);
|
||||
assert.throws(function() {
|
||||
fs.createReadStream(example, 0);
|
||||
}, /options must be a string or an object/);
|
||||
assert.throws(function() {
|
||||
fs.createReadStream(example, true);
|
||||
}, /options must be a string or an object/);
|
||||
assert.throws(function() {
|
||||
fs.createReadStream(example, false);
|
||||
}, /options must be a string or an object/);
|
33
test/parallel/test-fs-write-stream-throw-type-error.js
Normal file
33
test/parallel/test-fs-write-stream-throw-type-error.js
Normal file
@ -0,0 +1,33 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const example = path.join(common.tmpDir, 'dummy');
|
||||
|
||||
assert.doesNotThrow(function() {
|
||||
fs.createWriteStream(example, undefined);
|
||||
});
|
||||
assert.doesNotThrow(function() {
|
||||
fs.createWriteStream(example, 'utf8');
|
||||
});
|
||||
assert.doesNotThrow(function() {
|
||||
fs.createWriteStream(example, {encoding: 'utf8'});
|
||||
});
|
||||
|
||||
assert.throws(function() {
|
||||
fs.createWriteStream(example, null);
|
||||
}, /options must be a string or an object/);
|
||||
assert.throws(function() {
|
||||
fs.createWriteStream(example, 123);
|
||||
}, /options must be a string or an object/);
|
||||
assert.throws(function() {
|
||||
fs.createWriteStream(example, 0);
|
||||
}, /options must be a string or an object/);
|
||||
assert.throws(function() {
|
||||
fs.createWriteStream(example, true);
|
||||
}, /options must be a string or an object/);
|
||||
assert.throws(function() {
|
||||
fs.createWriteStream(example, false);
|
||||
}, /options must be a string or an object/);
|
Loading…
x
Reference in New Issue
Block a user