summaryrefslogtreecommitdiff
path: root/ext/console/02_console.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/console/02_console.js')
-rw-r--r--ext/console/02_console.js64
1 files changed, 40 insertions, 24 deletions
diff --git a/ext/console/02_console.js b/ext/console/02_console.js
index 04ac50670..faea692af 100644
--- a/ext/console/02_console.js
+++ b/ext/console/02_console.js
@@ -288,6 +288,11 @@ function cliTable(head, columns) {
}
/* End of forked part */
+// We can match Node's quoting behavior exactly by swapping the double quote and
+// single quote in this array. That would give preference to single quotes.
+// However, we prefer double quotes as the default.
+const QUOTES = ['"', "'", "`"];
+
const DEFAULT_INSPECT_OPTIONS = {
depth: 4,
indentLevel: 0,
@@ -300,6 +305,11 @@ const DEFAULT_INSPECT_OPTIONS = {
getters: false,
showHidden: false,
strAbbreviateSize: 100,
+ /** You can override the quotes preference in inspectString.
+ * Used by util.inspect() */
+ // TODO(kt3k): Consider using symbol as a key to hide this from the public
+ // API.
+ quotes: QUOTES,
};
const DEFAULT_INDENT = " "; // Default indent string
@@ -678,7 +688,7 @@ function _inspectValue(
switch (typeof value) {
case "string":
- return green(quoteString(value));
+ return green(quoteString(value, inspectOptions));
case "number": // Numbers are yellow
// Special handling of -0
return yellow(ObjectIs(value, -0) ? "-0" : `${value}`);
@@ -687,7 +697,7 @@ function _inspectValue(
case "undefined": // undefined is gray
return gray(String(value));
case "symbol": // Symbols are green
- return green(maybeQuoteSymbol(value));
+ return green(maybeQuoteSymbol(value, inspectOptions));
case "bigint": // Bigints are yellow
return yellow(`${value}n`);
case "function": // Function string is cyan
@@ -731,11 +741,6 @@ function inspectValue(
return x;
}
-// We can match Node's quoting behavior exactly by swapping the double quote and
-// single quote in this array. That would give preference to single quotes.
-// However, we prefer double quotes as the default.
-const QUOTES = ['"', "'", "`"];
-
/** Surround the string in quotes.
*
* The quote symbol is chosen by taking the first of the `QUOTES` array which
@@ -744,10 +749,11 @@ const QUOTES = ['"', "'", "`"];
* Insert a backslash before any occurrence of the chosen quote symbol and
* before any backslash.
*/
-function quoteString(string) {
+function quoteString(string, inspectOptions = DEFAULT_INSPECT_OPTIONS) {
+ const quotes = inspectOptions.quotes;
const quote =
- ArrayPrototypeFind(QUOTES, (c) => !StringPrototypeIncludes(string, c)) ??
- QUOTES[0];
+ ArrayPrototypeFind(quotes, (c) => !StringPrototypeIncludes(string, c)) ??
+ quotes[0];
const escapePattern = new SafeRegExp(`(?=[${quote}\\\\])`, "g");
string = StringPrototypeReplace(string, escapePattern, "\\");
string = replaceEscapeSequences(string);
@@ -789,20 +795,20 @@ function replaceEscapeSequences(string) {
const QUOTE_STRING_PATTERN = new SafeRegExp(/^[a-zA-Z_][a-zA-Z_0-9]*$/);
// Surround a string with quotes when it is required (e.g the string not a valid identifier).
-function maybeQuoteString(string) {
+function maybeQuoteString(string, inspectOptions) {
if (
RegExpPrototypeTest(QUOTE_STRING_PATTERN, string)
) {
return replaceEscapeSequences(string);
}
- return quoteString(string);
+ return quoteString(string, inspectOptions);
}
const QUOTE_SYMBOL_REG = new SafeRegExp(/^[a-zA-Z_][a-zA-Z_.0-9]*$/);
// Surround a symbol's description in quotes when it is required (e.g the description has non printable characters).
-function maybeQuoteSymbol(symbol) {
+function maybeQuoteSymbol(symbol, inspectOptions) {
if (symbol.description === undefined) {
return SymbolPrototypeToString(symbol);
}
@@ -816,7 +822,7 @@ function maybeQuoteSymbol(symbol) {
return SymbolPrototypeToString(symbol);
}
- return `Symbol(${quoteString(symbol.description)})`;
+ return `Symbol(${quoteString(symbol.description, inspectOptions)})`;
}
const CTX_STACK = [];
@@ -842,7 +848,7 @@ function inspectValueWithQuotes(
const trunc = value.length > abbreviateSize
? StringPrototypeSlice(value, 0, abbreviateSize) + "..."
: value;
- return green(quoteString(trunc)); // Quoted strings are green
+ return green(quoteString(trunc, inspectOptions)); // Quoted strings are green
}
default:
return inspectValue(value, inspectOptions);
@@ -1101,7 +1107,11 @@ function inspectBigIntObject(value, inspectOptions) {
function inspectSymbolObject(value, inspectOptions) {
const cyan = maybeColor(colors.cyan, inspectOptions);
- return cyan(`[Symbol: ${maybeQuoteSymbol(SymbolPrototypeValueOf(value))}]`); // wrappers are in cyan
+ return cyan(
+ `[Symbol: ${
+ maybeQuoteSymbol(SymbolPrototypeValueOf(value), inspectOptions)
+ }]`,
+ ); // wrappers are in cyan
}
const PromiseState = {
@@ -1206,21 +1216,24 @@ function inspectRawObject(
: red(`[Thrown ${error.name}: ${error.message}]`);
ArrayPrototypePush(
entries,
- `${maybeQuoteString(key)}: ${inspectedValue}`,
+ `${maybeQuoteString(key, inspectOptions)}: ${inspectedValue}`,
);
} else {
const descriptor = ObjectGetOwnPropertyDescriptor(value, key);
if (descriptor.get !== undefined && descriptor.set !== undefined) {
ArrayPrototypePush(
entries,
- `${maybeQuoteString(key)}: [Getter/Setter]`,
+ `${maybeQuoteString(key, inspectOptions)}: [Getter/Setter]`,
);
} else if (descriptor.get !== undefined) {
- ArrayPrototypePush(entries, `${maybeQuoteString(key)}: [Getter]`);
+ ArrayPrototypePush(
+ entries,
+ `${maybeQuoteString(key, inspectOptions)}: [Getter]`,
+ );
} else {
ArrayPrototypePush(
entries,
- `${maybeQuoteString(key)}: ${
+ `${maybeQuoteString(key, inspectOptions)}: ${
inspectValueWithQuotes(value[key], inspectOptions)
}`,
);
@@ -1250,21 +1263,24 @@ function inspectRawObject(
: red(`Thrown ${error.name}: ${error.message}`);
ArrayPrototypePush(
entries,
- `[${maybeQuoteSymbol(key)}]: ${inspectedValue}`,
+ `[${maybeQuoteSymbol(key, inspectOptions)}]: ${inspectedValue}`,
);
} else {
const descriptor = ObjectGetOwnPropertyDescriptor(value, key);
if (descriptor.get !== undefined && descriptor.set !== undefined) {
ArrayPrototypePush(
entries,
- `[${maybeQuoteSymbol(key)}]: [Getter/Setter]`,
+ `[${maybeQuoteSymbol(key, inspectOptions)}]: [Getter/Setter]`,
);
} else if (descriptor.get !== undefined) {
- ArrayPrototypePush(entries, `[${maybeQuoteSymbol(key)}]: [Getter]`);
+ ArrayPrototypePush(
+ entries,
+ `[${maybeQuoteSymbol(key, inspectOptions)}]: [Getter]`,
+ );
} else {
ArrayPrototypePush(
entries,
- `[${maybeQuoteSymbol(key)}]: ${
+ `[${maybeQuoteSymbol(key, inspectOptions)}]: ${
inspectValueWithQuotes(value[key], inspectOptions)
}`,
);