File size: 6,311 Bytes
fea495a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
const _picocolors = require("../../lib/picocolors");
const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external");
const isColorSupported = (0, _picocolors.dim)('test') !== 'test';
// 50% opacity for dimmed text
const dimStyle = 'color: color(from currentColor xyz x y z / 0.5);';
const reactBadgeFormat = '\x1b[0m\x1b[7m%c%s\x1b[0m%c ';
function dimmedConsoleArgs(...inputArgs) {
if (!isColorSupported) {
return inputArgs;
}
const newArgs = inputArgs.slice(0);
let template = '';
let argumentsPointer = 0;
if (typeof inputArgs[0] === 'string') {
const originalTemplateString = inputArgs[0];
// Remove the original template string from the args.
newArgs.splice(argumentsPointer, 1);
argumentsPointer += 1;
let i = 0;
if (originalTemplateString.startsWith(reactBadgeFormat)) {
i = reactBadgeFormat.length;
// for `format` we already moved the pointer earlier
// style, badge, reset style
argumentsPointer += 3;
template += reactBadgeFormat;
// React's badge reset styles, reapply dimming
template += '\x1b[2m%c';
// argumentsPointer includes template
newArgs.splice(argumentsPointer - 1, 0, dimStyle);
// dim the badge
newArgs[0] += `;${dimStyle}`;
}
for(i; i < originalTemplateString.length; i++){
const currentChar = originalTemplateString[i];
if (currentChar !== '%') {
template += currentChar;
continue;
}
const nextChar = originalTemplateString[i + 1];
++i;
switch(nextChar){
case 'f':
case 'O':
case 'o':
case 'd':
case 's':
case 'i':
case 'c':
++argumentsPointer;
template += `%${nextChar}`;
break;
default:
template += `%${nextChar}`;
}
}
}
for(argumentsPointer; argumentsPointer < inputArgs.length; ++argumentsPointer){
const arg = inputArgs[argumentsPointer];
const argType = typeof arg;
if (argumentsPointer > 0) {
template += ' ';
}
switch(argType){
case 'boolean':
case 'string':
template += '%s';
break;
case 'bigint':
template += '%s';
break;
case 'number':
if (arg % 0) {
template += '%f';
} else {
template += '%d';
}
break;
case 'object':
template += '%O';
break;
case 'symbol':
case 'undefined':
case 'function':
template += '%s';
break;
default:
// deopt to string for new, unknown types
template += '%s';
}
}
template += '\x1b[22m';
return [
(0, _picocolors.dim)(`%c${template}`),
dimStyle,
...newArgs
];
}
function dimConsoleCall(methodName, args) {
switch(methodName){
case 'dir':
case 'dirxml':
case 'group':
case 'groupCollapsed':
case 'groupEnd':
case 'table':
{
// These methods cannot be colorized because they don't take a formatting string.
return args;
}
case 'assert':
{
// assert takes formatting options as the second argument.
return [
args[0]
].concat(...dimmedConsoleArgs(args[1], ...args.slice(2)));
}
case 'error':
case 'debug':
case 'info':
case 'log':
case 'trace':
case 'warn':
return dimmedConsoleArgs(args[0], ...args.slice(1));
default:
return methodName;
}
}
// Based on https://github.com/facebook/react/blob/28dc0776be2e1370fe217549d32aee2519f0cf05/packages/react-server/src/ReactFlightServer.js#L248
function patchConsoleMethodDEV(methodName) {
const descriptor = Object.getOwnPropertyDescriptor(console, methodName);
if (descriptor && (descriptor.configurable || descriptor.writable) && typeof descriptor.value === 'function') {
const originalMethod = descriptor.value;
const originalName = Object.getOwnPropertyDescriptor(originalMethod, 'name');
const wrapperMethod = function(...args) {
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
switch(workUnitStore == null ? void 0 : workUnitStore.type){
case 'prerender':
case 'prerender-client':
case 'prerender-runtime':
originalMethod.apply(this, dimConsoleCall(methodName, args));
break;
case 'prerender-ppr':
case 'prerender-legacy':
case 'request':
case 'cache':
case 'private-cache':
case 'unstable-cache':
case undefined:
originalMethod.apply(this, args);
break;
default:
workUnitStore;
}
};
if (originalName) {
Object.defineProperty(wrapperMethod, 'name', originalName);
}
Object.defineProperty(console, methodName, {
value: wrapperMethod
});
}
}
patchConsoleMethodDEV('error');
patchConsoleMethodDEV('assert');
patchConsoleMethodDEV('debug');
patchConsoleMethodDEV('dir');
patchConsoleMethodDEV('dirxml');
patchConsoleMethodDEV('group');
patchConsoleMethodDEV('groupCollapsed');
patchConsoleMethodDEV('groupEnd');
patchConsoleMethodDEV('info');
patchConsoleMethodDEV('log');
patchConsoleMethodDEV('table');
patchConsoleMethodDEV('trace');
patchConsoleMethodDEV('warn');
//# sourceMappingURL=console-dev.js.map |