readline: remove max limit of crlfDelay
PR-URL: https://github.com/nodejs/node/pull/13497 Reviewed-By: Prince John Wesley <princejohnwesley@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Refael Ackermann <refack@gmail.com>
This commit is contained in:
parent
717a138b4a
commit
b8e0a5ea23
@ -369,7 +369,9 @@ changes:
|
|||||||
* `crlfDelay` {number} If the delay between `\r` and `\n` exceeds
|
* `crlfDelay` {number} If the delay between `\r` and `\n` exceeds
|
||||||
`crlfDelay` milliseconds, both `\r` and `\n` will be treated as separate
|
`crlfDelay` milliseconds, both `\r` and `\n` will be treated as separate
|
||||||
end-of-line input. Default to `100` milliseconds.
|
end-of-line input. Default to `100` milliseconds.
|
||||||
`crlfDelay` will be coerced to `[100, 2000]` range.
|
`crlfDelay` will be coerced to a number no less than `100`. It can be set to
|
||||||
|
`Infinity`, in which case `\r` followed by `\n` will always be considered a
|
||||||
|
single newline.
|
||||||
* `removeHistoryDuplicates` {boolean} If `true`, when a new input line added
|
* `removeHistoryDuplicates` {boolean} If `true`, when a new input line added
|
||||||
to the history list duplicates an older one, this removes the older line
|
to the history list duplicates an older one, this removes the older line
|
||||||
from the list. Defaults to `false`.
|
from the list. Defaults to `false`.
|
||||||
|
@ -50,7 +50,6 @@ const {
|
|||||||
|
|
||||||
const kHistorySize = 30;
|
const kHistorySize = 30;
|
||||||
const kMincrlfDelay = 100;
|
const kMincrlfDelay = 100;
|
||||||
const kMaxcrlfDelay = 2000;
|
|
||||||
// \r\n, \n, or \r followed by something other than \n
|
// \r\n, \n, or \r followed by something other than \n
|
||||||
const lineEnding = /\r?\n|\r(?!\n)/;
|
const lineEnding = /\r?\n|\r(?!\n)/;
|
||||||
|
|
||||||
@ -125,8 +124,8 @@ function Interface(input, output, completer, terminal) {
|
|||||||
this.input = input;
|
this.input = input;
|
||||||
this.historySize = historySize;
|
this.historySize = historySize;
|
||||||
this.removeHistoryDuplicates = !!removeHistoryDuplicates;
|
this.removeHistoryDuplicates = !!removeHistoryDuplicates;
|
||||||
this.crlfDelay = Math.max(kMincrlfDelay,
|
this.crlfDelay = crlfDelay ?
|
||||||
Math.min(kMaxcrlfDelay, crlfDelay >>> 0));
|
Math.max(kMincrlfDelay, crlfDelay) : kMincrlfDelay;
|
||||||
|
|
||||||
// Check arity, 2 - for async, 1 for sync
|
// Check arity, 2 - for async, 1 for sync
|
||||||
if (typeof completer === 'function') {
|
if (typeof completer === 'function') {
|
||||||
|
@ -63,14 +63,26 @@ function isWarned(emitter) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// Maximum crlfDelay is 2000ms
|
// set crlfDelay to float 100.5ms
|
||||||
const fi = new FakeInput();
|
const fi = new FakeInput();
|
||||||
const rli = new readline.Interface({
|
const rli = new readline.Interface({
|
||||||
input: fi,
|
input: fi,
|
||||||
output: fi,
|
output: fi,
|
||||||
crlfDelay: 1 << 30
|
crlfDelay: 100.5
|
||||||
});
|
});
|
||||||
assert.strictEqual(rli.crlfDelay, 2000);
|
assert.strictEqual(rli.crlfDelay, 100.5);
|
||||||
|
rli.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// set crlfDelay to 5000ms
|
||||||
|
const fi = new FakeInput();
|
||||||
|
const rli = new readline.Interface({
|
||||||
|
input: fi,
|
||||||
|
output: fi,
|
||||||
|
crlfDelay: 5000
|
||||||
|
});
|
||||||
|
assert.strictEqual(rli.crlfDelay, 5000);
|
||||||
rli.close();
|
rli.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,6 +282,53 @@ function isWarned(emitter) {
|
|||||||
}), delay * 2);
|
}), delay * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Emit one line events when the delay between \r and \n is
|
||||||
|
// over the default crlfDelay but within the setting value
|
||||||
|
{
|
||||||
|
const fi = new FakeInput();
|
||||||
|
const delay = 200;
|
||||||
|
const crlfDelay = 500;
|
||||||
|
const rli = new readline.Interface({
|
||||||
|
input: fi,
|
||||||
|
output: fi,
|
||||||
|
terminal: terminal,
|
||||||
|
crlfDelay
|
||||||
|
});
|
||||||
|
let callCount = 0;
|
||||||
|
rli.on('line', function(line) {
|
||||||
|
callCount++;
|
||||||
|
});
|
||||||
|
fi.emit('data', '\r');
|
||||||
|
setTimeout(common.mustCall(() => {
|
||||||
|
fi.emit('data', '\n');
|
||||||
|
assert.strictEqual(callCount, 1);
|
||||||
|
rli.close();
|
||||||
|
}), delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set crlfDelay to `Infinity` is allowed
|
||||||
|
{
|
||||||
|
const fi = new FakeInput();
|
||||||
|
const delay = 200;
|
||||||
|
const crlfDelay = Infinity;
|
||||||
|
const rli = new readline.Interface({
|
||||||
|
input: fi,
|
||||||
|
output: fi,
|
||||||
|
terminal: terminal,
|
||||||
|
crlfDelay
|
||||||
|
});
|
||||||
|
let callCount = 0;
|
||||||
|
rli.on('line', function(line) {
|
||||||
|
callCount++;
|
||||||
|
});
|
||||||
|
fi.emit('data', '\r');
|
||||||
|
setTimeout(common.mustCall(() => {
|
||||||
|
fi.emit('data', '\n');
|
||||||
|
assert.strictEqual(callCount, 1);
|
||||||
|
rli.close();
|
||||||
|
}), delay);
|
||||||
|
}
|
||||||
|
|
||||||
// \t when there is no completer function should behave like an ordinary
|
// \t when there is no completer function should behave like an ordinary
|
||||||
// character
|
// character
|
||||||
fi = new FakeInput();
|
fi = new FakeInput();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user