current commit
260718.6 · repl: use inspector over vm
import * as common from '../common/index.mjs';
import hijackstdio from '../common/hijackstdio.js';
import assert from 'node:assert';
import { startNewREPLServer, complete } from '../common/repl.js';

const { replServer, run } = startNewREPLServer();

for (const type of [
  Array,
  Buffer,

  Uint8Array,
  Uint16Array,
  Uint32Array,

  Uint8ClampedArray,
  Int8Array,
  Int16Array,
  Int32Array,
  Float32Array,
  Float64Array,
]) {
  await run(['.clear']);

  if (type === Array) {
    await run([
      'var ele = [];',
      'for (let i = 0; i < 1e6 + 1; i++) ele[i] = 0;',
      'ele.biu = 1;',
    ]);
  } else if (type === Buffer) {
    await run(['var ele = Buffer.alloc(1e6 + 1); ele.biu = 1;']);
  } else {
    await run([`var ele = new ${type.name}(1e6 + 1); ele.biu = 1;`]);
  }

  hijackstdio.hijackStderr(common.mustNotCall());
  const data = await complete(replServer, 'ele.');
  hijackstdio.restoreStderr();

  const ele =
    type === Array ? [] : type === Buffer ? Buffer.alloc(0) : new type(0);

  assert.strictEqual(data[0].includes('ele.biu'), true);

  for (const key of data[0]) {
    if (!key || key === 'ele.biu') break;
    assert.notStrictEqual(ele[key.slice(4)], undefined);
  }
}

// check Buffer.prototype.length not crashing.
// Refs: https://github.com/nodejs/node/pull/11961
await run(['.clear']);
await complete(replServer, 'Buffer.prototype.');

replServer.close();