From 0209f7b46954d1b7bf923b4191e5a356ec09622c Mon Sep 17 00:00:00 2001
From: Chen Su <ghosind@gmail.com>
Date: Tue, 14 Nov 2023 03:13:20 +0800
Subject: [PATCH] fix(ext/console): fix inspecting iterators error. (#20720)

Fixes #19776 and #20676.
---
 ext/console/01_console.js                         | 13 ++++---------
 .../polyfills/internal/console/constructor.mjs    | 13 +------------
 ext/node/polyfills/internal_binding/util.ts       | 15 +++++++++++++++
 3 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/ext/console/01_console.js b/ext/console/01_console.js
index 67c75f74d2..b3624ea7ca 100644
--- a/ext/console/01_console.js
+++ b/ext/console/01_console.js
@@ -136,6 +136,7 @@ const {
   WeakSetPrototypeHas,
   isNaN,
 } = primordials;
+import { previewEntries } from "ext:deno_node/internal_binding/util.ts";
 
 let noColor = () => false;
 
@@ -1493,9 +1494,7 @@ function getIteratorBraces(type, tag) {
 
 const iteratorRegExp = new SafeRegExp(" Iterator] {$");
 function formatIterator(braces, ctx, value, recurseTimes) {
-  // TODO(wafuwafu13): Implement
-  // const { 0: entries, 1: isKeyValue } = previewEntries(value, true);
-  const { 0: entries, 1: isKeyValue } = value;
+  const { 0: entries, 1: isKeyValue } = previewEntries(value, true);
   if (isKeyValue) {
     // Mark entry iterators as such.
     braces[0] = StringPrototypeReplace(
@@ -1704,16 +1703,12 @@ function formatWeakCollection(ctx) {
 }
 
 function formatWeakSet(ctx, value, recurseTimes) {
-  // TODO(wafuwafu13): Implement
-  // const entries = previewEntries(value);
-  const entries = value;
+  const entries = previewEntries(value);
   return formatSetIterInner(ctx, recurseTimes, entries, kWeak);
 }
 
 function formatWeakMap(ctx, value, recurseTimes) {
-  // TODO(wafuwafu13): Implement
-  // const entries = previewEntries(value);
-  const entries = value;
+  const entries = previewEntries(value);
   return formatMapIterInner(ctx, recurseTimes, entries, kWeak);
 }
 
diff --git a/ext/node/polyfills/internal/console/constructor.mjs b/ext/node/polyfills/internal/console/constructor.mjs
index 5ea9eeb3a2..afa18bb97e 100644
--- a/ext/node/polyfills/internal/console/constructor.mjs
+++ b/ext/node/polyfills/internal/console/constructor.mjs
@@ -17,17 +17,7 @@ import {
   validateInteger,
   validateObject,
 } from "ext:deno_node/internal/validators.mjs";
-const previewEntries = (iter, isKeyValue) => {
-  if (isKeyValue) {
-    const arr = [...iter];
-    if (Array.isArray(arr[0]) && arr[0].length === 2) {
-      return [[].concat(...arr), true];
-    }
-    return [arr, false];
-  } else {
-    return [...iter];
-  }
-};
+import { previewEntries } from "ext:deno_node/internal_binding/util.ts";
 import { Buffer } from "node:buffer";
 const { isBuffer } = Buffer;
 import {
@@ -475,7 +465,6 @@ const consoleMethods = {
 
   // https://console.spec.whatwg.org/#table
   table(tabularData, properties) {
-    console.log("tabularData", tabularData);
     if (properties !== undefined) {
       validateArray(properties, "properties");
     }
diff --git a/ext/node/polyfills/internal_binding/util.ts b/ext/node/polyfills/internal_binding/util.ts
index 38eeebee00..651fe9a4b6 100644
--- a/ext/node/polyfills/internal_binding/util.ts
+++ b/ext/node/polyfills/internal_binding/util.ts
@@ -129,3 +129,18 @@ export function getOwnNonIndexProperties(
   }
   return result;
 }
+
+export function previewEntries(
+  iter: Iterable<unknown>,
+  isKeyValue?: boolean,
+): Array<unknown | boolean> {
+  if (isKeyValue) {
+    const arr = [...iter];
+    if (Array.isArray(arr[0]) && arr[0].length === 2) {
+      return [([] as unknown[]).concat(...arr), true];
+    }
+    return [arr, false];
+  } else {
+    return [...iter];
+  }
+}