doc: add esm examples to node:readline · nodejs/node@7a10ef8
@@ -703,9 +703,18 @@ added: v17.0.0
703703The `readlinePromises.createInterface()` method creates a new `readlinePromises.Interface`
704704instance.
705705706-```js
707-const readlinePromises = require('node:readline/promises');
708-const rl = readlinePromises.createInterface({
706+```mjs
707+import { createInterface } from 'node:readline/promises';
708+import { stdin, stdout } from 'node:process';
709+const rl = createInterface({
710+ input: stdin,
711+ output: stdout,
712+});
713+```
714+715+```cjs
716+const { createInterface } = require('node:readline/promises');
717+const rl = createInterface({
709718 input: process.stdin,
710719 output: process.stdout,
711720});
@@ -960,9 +969,18 @@ changes:
960969The `readline.createInterface()` method creates a new `readline.Interface`
961970instance.
962971963-```js
964-const readline = require('node:readline');
965-const rl = readline.createInterface({
972+```mjs
973+import { createInterface } from 'node:readline';
974+import { stdin, stdout } from 'node:process';
975+const rl = createInterface({
976+ input: stdin,
977+ output: stdout,
978+});
979+```
980+981+```cjs
982+const { createInterface } = require('node:readline');
983+const rl = createInterface({
966984 input: process.stdin,
967985 output: process.stdout,
968986});
@@ -1098,9 +1116,36 @@ if (process.stdin.isTTY)
10981116The following example illustrates the use of `readline.Interface` class to
10991117implement a small command-line interface:
110011181101-```js
1102-const readline = require('node:readline');
1103-const rl = readline.createInterface({
1119+```mjs
1120+import { createInterface } from 'node:readline';
1121+import { exit, stdin, stdout } from 'node:process';
1122+const rl = createInterface({
1123+ input: stdin,
1124+ output: stdout,
1125+ prompt: 'OHAI> ',
1126+});
1127+1128+rl.prompt();
1129+1130+rl.on('line', (line) => {
1131+switch (line.trim()) {
1132+case 'hello':
1133+console.log('world!');
1134+break;
1135+default:
1136+console.log(`Say what? I might have heard '${line.trim()}'`);
1137+break;
1138+ }
1139+rl.prompt();
1140+}).on('close', () => {
1141+console.log('Have a great day!');
1142+exit(0);
1143+});
1144+```
1145+1146+```cjs
1147+const { createInterface } = require('node:readline');
1148+const rl = createInterface({
11041149 input: process.stdin,
11051150 output: process.stdout,
11061151 prompt: 'OHAI> ',
@@ -1130,14 +1175,37 @@ A common use case for `readline` is to consume an input file one line at a
11301175time. The easiest way to do so is leveraging the [`fs.ReadStream`][] API as
11311176well as a `for await...of` loop:
113211771133-```js
1134-const fs = require('node:fs');
1135-const readline = require('node:readline');
1178+```mjs
1179+import { createReadStream } from 'node:fs';
1180+import { createInterface } from 'node:readline';
1136118111371182async function processLineByLine() {
1138-const fileStream = fs.createReadStream('input.txt');
1183+const fileStream = createReadStream('input.txt');
113911841140-const rl = readline.createInterface({
1185+const rl = createInterface({
1186+ input: fileStream,
1187+ crlfDelay: Infinity,
1188+ });
1189+// Note: we use the crlfDelay option to recognize all instances of CR LF
1190+// ('\r\n') in input.txt as a single line break.
1191+1192+for await (const line of rl) {
1193+// Each line in input.txt will be successively available here as `line`.
1194+console.log(`Line from file: ${line}`);
1195+ }
1196+}
1197+1198+processLineByLine();
1199+```
1200+1201+```cjs
1202+const { createReadStream } = require('node:fs');
1203+const { createInterface } = require('node:readline');
1204+1205+async function processLineByLine() {
1206+const fileStream = createReadStream('input.txt');
1207+1208+const rl = createInterface({
11411209 input: fileStream,
11421210 crlfDelay: Infinity,
11431211 });
@@ -1155,12 +1223,26 @@ processLineByLine();
1155122311561224Alternatively, one could use the [`'line'`][] event:
115712251158-```js
1159-const fs = require('node:fs');
1160-const readline = require('node:readline');
1226+```mjs
1227+import { createReadStream } from 'node:fs';
1228+import { createInterface } from 'node:readline';
116112291162-const rl = readline.createInterface({
1163- input: fs.createReadStream('sample.txt'),
1230+const rl = createInterface({
1231+ input: createReadStream('sample.txt'),
1232+ crlfDelay: Infinity,
1233+});
1234+1235+rl.on('line', (line) => {
1236+console.log(`Line from file: ${line}`);
1237+});
1238+```
1239+1240+```cjs
1241+const { createReadStream } = require('node:fs');
1242+const { createInterface } = require('node:readline');
1243+1244+const rl = createInterface({
1245+ input: createReadStream('sample.txt'),
11641246 crlfDelay: Infinity,
11651247});
11661248@@ -1172,7 +1254,32 @@ rl.on('line', (line) => {
11721254Currently, `for await...of` loop can be a bit slower. If `async` / `await`
11731255flow and speed are both essential, a mixed approach can be applied:
117412561175-```js
1257+```mjs
1258+import { once } from 'node:events';
1259+import { createReadStream } from 'node:fs';
1260+import { createInterface } from 'node:readline';
1261+1262+(async function processLineByLine() {
1263+try {
1264+const rl = createInterface({
1265+ input: createReadStream('big-file.txt'),
1266+ crlfDelay: Infinity,
1267+ });
1268+1269+rl.on('line', (line) => {
1270+// Process the line.
1271+ });
1272+1273+await once(rl, 'close');
1274+1275+console.log('File processed.');
1276+ } catch (err) {
1277+console.error(err);
1278+ }
1279+})();
1280+```
1281+1282+```cjs
11761283const { once } = require('node:events');
11771284const { createReadStream } = require('node:fs');
11781285const { createInterface } = require('node:readline');