UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

103 lines (102 loc) 4.11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.logWithViteTag = logWithViteTag; exports.logWithVikeTag = logWithVikeTag; exports.logDirectly = logDirectly; exports.applyViteSourceMapToStackTrace = applyViteSourceMapToStackTrace; const utils_js_1 = require("../../utils.js"); const picocolors_1 = __importDefault(require("@brillout/picocolors")); const isErrorDebug_js_1 = require("../../../shared/isErrorDebug.js"); const globalContext_js_1 = require("../../../runtime/globalContext.js"); (0, utils_js_1.assertIsNotProductionRuntime)(); function logWithVikeTag(msg, logType, category, showVikeVersion = false) { const projectTag = getProjectTag(showVikeVersion); msg = prependTags(msg, projectTag, category, logType); logDirectly(msg, logType); } function getProjectTag(showVikeVersion) { let projectTag; if (showVikeVersion) { projectTag = `[vike@${utils_js_1.PROJECT_VERSION}]`; } else { projectTag = `[vike]`; } return projectTag; } function logWithViteTag(msg, logType, category) { msg = prependTags(msg, '[vite]', category, logType); logDirectly(msg, logType); } // Not production => every log is triggered by logDirectly() // - Even all Vite logs also go through logDirectly() (see interceptors of loggerVite.ts) // - Production => logs aren't managed by loggerNotProd.ts => logDirectly() is never called (not even loaded as asserted by assertIsVitePluginCode()) function logDirectly(thing, logType) { applyViteSourceMapToStackTrace(thing); if (logType === 'info') { console.log(thing); return; } if (logType === 'warn') { console.warn(thing); return; } if (logType === 'error') { console.error(thing); return; } if (logType === 'error-recover') { // stderr because user will most likely want to know about error recovering console.error(thing); return; } (0, utils_js_1.assert)(false); } function applyViteSourceMapToStackTrace(thing) { if ((0, isErrorDebug_js_1.isErrorDebug)()) return; if (!(0, utils_js_1.hasProp)(thing, 'stack')) return; const viteDevServer = (0, globalContext_js_1.getViteDevServer)(); if (!viteDevServer) return; // Apply Vite's source maps viteDevServer.ssrFixStacktrace(thing); } function prependTags(msg, projectTag, category, logType) { const color = (s) => { if (logType === 'error' && !hasRed(msg)) return picocolors_1.default.bold(picocolors_1.default.red(s)); if (logType === 'error-recover' && !hasGreen(msg)) return picocolors_1.default.bold(picocolors_1.default.green(s)); if (logType === 'warn' && !hasYellow(msg)) return picocolors_1.default.yellow(s); if (projectTag === '[vite]') return picocolors_1.default.bold(picocolors_1.default.cyan(s)); if (projectTag.startsWith(`[vike`)) return picocolors_1.default.bold(picocolors_1.default.cyan(s)); (0, utils_js_1.assert)(false); }; let tag = color(`${projectTag}`); if (category) { tag = tag + picocolors_1.default.dim(`[${category}]`); } const timestamp = picocolors_1.default.dim(new Date().toLocaleTimeString()); const whitespace = /\s|\[/.test((0, utils_js_1.stripAnsi)(msg)[0]) ? '' : ' '; return `${timestamp} ${tag}${whitespace}${msg}`; } function hasRed(str) { // https://github.com/brillout/picocolors/blob/e291f2a3e3251a7f218ab6369ae94434d85d0eb0/picocolors.js#L57 return str.includes('\x1b[31m'); } function hasGreen(str) { // https://github.com/brillout/picocolors/blob/e291f2a3e3251a7f218ab6369ae94434d85d0eb0/picocolors.js#L58 return str.includes('\x1b[32m'); } function hasYellow(str) { // https://github.com/brillout/picocolors/blob/e291f2a3e3251a7f218ab6369ae94434d85d0eb0/picocolors.js#L59 return str.includes('\x1b[33m'); }