@serwist/next
Version:
A module that integrates Serwist into your Next.js application.
59 lines (46 loc) • 1.79 kB
text/typescript
import { createRequire } from "node:module";
import { bold, green, red, white, yellow } from "kolorist";
import semver from "semver";
const require = createRequire(import.meta.url);
const LOGGING_SPACE_PREFIX = semver.gte(require("next/package.json").version, "16.0.0") ? "" : " ";
export type LoggingMethods = "wait" | "error" | "warn" | "info" | "event";
const prefixedLog = (prefixType: LoggingMethods, ...message: any[]) => {
let prefix: string;
let consoleMethod: keyof Console;
switch (prefixType) {
case "wait":
prefix = `${white(bold("○"))} (serwist)`;
consoleMethod = "log";
break;
case "error":
prefix = `${red(bold("X"))} (serwist)`;
consoleMethod = "error";
break;
case "warn":
prefix = `${yellow(bold("⚠"))} (serwist)`;
consoleMethod = "warn";
break;
case "info":
prefix = `${white(bold("○"))} (serwist)`;
consoleMethod = "log";
break;
case "event":
prefix = `${green(bold("✓"))} (serwist)`;
consoleMethod = "log";
break;
}
if ((message[0] === "" || message[0] === undefined) && message.length === 1) {
message.shift();
}
// If there's no message, don't print the prefix but a new line
if (message.length === 0) {
console[consoleMethod]("");
} else {
console[consoleMethod](`${LOGGING_SPACE_PREFIX}${prefix}`, ...message);
}
};
export const wait = (...message: any[]) => prefixedLog("wait", ...message);
export const error = (...message: any[]) => prefixedLog("error", ...message);
export const warn = (...message: any[]) => prefixedLog("warn", ...message);
export const info = (...message: any[]) => prefixedLog("info", ...message);
export const event = (...message: any[]) => prefixedLog("event", ...message);