mirror of
https://github.com/denoland/deno.git
synced 2024-11-22 15:06:54 -05:00
console: Hide values
for console.table if display not necessary (#5914)
This commit is contained in:
parent
f6e58b076c
commit
3cbcdd4250
2 changed files with 52 additions and 19 deletions
|
@ -842,27 +842,33 @@ export class Console {
|
||||||
resultData = data!;
|
resultData = data!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let hasPrimitives = false;
|
||||||
Object.keys(resultData).forEach((k, idx): void => {
|
Object.keys(resultData).forEach((k, idx): void => {
|
||||||
const value: unknown = resultData[k]!;
|
const value: unknown = resultData[k]!;
|
||||||
|
const primitive =
|
||||||
if (value !== null && typeof value === "object") {
|
value === null ||
|
||||||
Object.entries(value as { [key: string]: unknown }).forEach(
|
(typeof value !== "function" && typeof value !== "object");
|
||||||
([k, v]): void => {
|
if (properties === undefined && primitive) {
|
||||||
if (properties && !properties.includes(k)) {
|
hasPrimitives = true;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (objectValues[k]) {
|
|
||||||
objectValues[k].push(stringifyValue(v));
|
|
||||||
} else {
|
|
||||||
objectValues[k] = createColumn(v, idx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
values.push("");
|
|
||||||
} else {
|
|
||||||
values.push(stringifyValue(value));
|
values.push(stringifyValue(value));
|
||||||
|
} else {
|
||||||
|
const valueObj = (value as { [key: string]: unknown }) || {};
|
||||||
|
const keys = properties || Object.keys(valueObj);
|
||||||
|
for (const k of keys) {
|
||||||
|
if (primitive || !valueObj.hasOwnProperty(k)) {
|
||||||
|
if (objectValues[k]) {
|
||||||
|
// fill with blanks for idx to avoid misplacing from later values
|
||||||
|
objectValues[k].push("");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (objectValues[k]) {
|
||||||
|
objectValues[k].push(stringifyValue(valueObj[k]));
|
||||||
|
} else {
|
||||||
|
objectValues[k] = createColumn(valueObj[k], idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
values.push("");
|
||||||
}
|
}
|
||||||
|
|
||||||
indexKeys.push(k);
|
indexKeys.push(k);
|
||||||
|
@ -872,10 +878,7 @@ export class Console {
|
||||||
const bodyValues = Object.values(objectValues);
|
const bodyValues = Object.values(objectValues);
|
||||||
const header = [
|
const header = [
|
||||||
indexKey,
|
indexKey,
|
||||||
...(properties || [
|
...(properties || [...headerKeys, !isMap && hasPrimitives && valuesKey]),
|
||||||
...headerKeys,
|
|
||||||
!isMap && values.length > 0 && valuesKey,
|
|
||||||
]),
|
|
||||||
].filter(Boolean) as string[];
|
].filter(Boolean) as string[];
|
||||||
const body = [indexKeys, ...bodyValues, values];
|
const body = [indexKeys, ...bodyValues, values];
|
||||||
|
|
||||||
|
|
|
@ -1070,6 +1070,36 @@ unitTest(function consoleTable(): void {
|
||||||
│ 1 │ "你好" │
|
│ 1 │ "你好" │
|
||||||
│ 2 │ "Amapá" │
|
│ 2 │ "Amapá" │
|
||||||
└───────┴─────────┘
|
└───────┴─────────┘
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
mockConsole((console, out): void => {
|
||||||
|
console.table([
|
||||||
|
[1, 2],
|
||||||
|
[3, 4],
|
||||||
|
]);
|
||||||
|
assertEquals(
|
||||||
|
stripColor(out.toString()),
|
||||||
|
`┌───────┬───┬───┐
|
||||||
|
│ (idx) │ 0 │ 1 │
|
||||||
|
├───────┼───┼───┤
|
||||||
|
│ 0 │ 1 │ 2 │
|
||||||
|
│ 1 │ 3 │ 4 │
|
||||||
|
└───────┴───┴───┘
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
mockConsole((console, out): void => {
|
||||||
|
console.table({ 1: { a: 4, b: 5 }, 2: null, 3: { b: 6, c: 7 } }, ["b"]);
|
||||||
|
assertEquals(
|
||||||
|
stripColor(out.toString()),
|
||||||
|
`┌───────┬───┐
|
||||||
|
│ (idx) │ b │
|
||||||
|
├───────┼───┤
|
||||||
|
│ 1 │ 5 │
|
||||||
|
│ 2 │ │
|
||||||
|
│ 3 │ 6 │
|
||||||
|
└───────┴───┘
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue