Skip to content

Commit

Permalink
Add new files and dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
m10rten committed Jan 12, 2024
1 parent 1b05726 commit cf9ad75
Show file tree
Hide file tree
Showing 13 changed files with 3,582 additions and 7,058 deletions.
2 changes: 1 addition & 1 deletion apps/showcase/next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const { withContentlayer } = require("next-contentlayer");
const nextConfig = {
swcMinify: true,
reactStrictMode: true,
// transpilePackages: ["@mvdlei/ui"],
transpilePackages: ["@mvdlei/log", "@mvdlei/env"],
};

module.exports = withContentlayer(nextConfig);
8 changes: 4 additions & 4 deletions apps/showcase/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
},
"dependencies": {
"@hookform/resolvers": "3.3.3",
"@mvdlei/env": "workspace:*",
"@mvdlei/hooks": "workspace:*",
"@mvdlei/log": "workspace:*",
"@mvdlei/types": "workspace:*",
"@mvdlei/env": "workspace:^",
"@mvdlei/hooks": "workspace:^",
"@mvdlei/log": "workspace:^",
"@mvdlei/types": "workspace:^",
"@radix-ui/react-accordion": "1.1.2",
"@radix-ui/react-alert-dialog": "1.0.5",
"@radix-ui/react-aspect-ratio": "1.0.3",
Expand Down
2 changes: 1 addition & 1 deletion apps/showcase/src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const metadata: Metadata = {

export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<html lang="en" suppressHydrationWarning>
<body className={GeistSans.className}>
<Providers>
<Header />
Expand Down
19 changes: 19 additions & 0 deletions apps/showcase/src/lib/env.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { define } from "@mvdlei/env";
import { type Level } from "@mvdlei/log";
import { z } from "zod";

export const env = define({
env: {
NODE_ENV: z
.string()
.default("development")
.transform((val) => val.toLowerCase()),
},
prefix: "INTERNAL_",
prefixed: {
INTERNAL_LOG_LEVEL: z
.enum(["error", "warn", "info", "http", "verbose", "debug", "silly"] as const)
.default("info")
.transform((val) => val.toLowerCase() as Level),
},
});
7 changes: 7 additions & 0 deletions apps/showcase/src/lib/winston.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { create } from "@mvdlei/log";

import { env } from "./env";

export const winston = create({
level: env.NODE_ENV === "production" ? "info" : env.INTERNAL_LOG_LEVEL ?? "info",
});
3 changes: 3 additions & 0 deletions packages/env/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
"keywords": [],
"author": "",
"license": "MIT",
"dependencies": {
"@mvdlei/types": "workspace:^"
},
"devDependencies": {
"@types/node": "20.10.5",
"internal-config": "workspace:*"
Expand Down
7 changes: 5 additions & 2 deletions packages/env/src/env.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/* eslint-disable no-console */
import type { Prettify } from "@mvdlei/types";
import { z, type ZodError, type ZodObject, type ZodType } from "zod";

export type ErrorMessage<T extends string> = T;
Expand Down Expand Up @@ -145,7 +146,9 @@ export function define<
TEnv extends Record<string, ZodType> = NonNullable<unknown>,
>(
opts: EnvOptions<TPrefix, TPrefixed, TEnv>,
): Readonly<z.infer<ZodObject<TPrefixed>> & z.infer<ZodObject<TEnv>>> {
): Prettify<
Readonly<Prettify<z.infer<ZodObject<TPrefixed>> & z.infer<ZodObject<TEnv>>>>
> {
const source = opts.source ?? opts.strict ?? opts.runtime ?? process.env;

const emptyStringAsUndefined = opts.emptyStringAsUndefined ?? false;
Expand Down Expand Up @@ -208,5 +211,5 @@ export function define<
});

// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-explicit-any
return env as any;
return env as unknown as any;
}
71 changes: 26 additions & 45 deletions packages/internal/log/index.ts
Original file line number Diff line number Diff line change
@@ -1,50 +1,31 @@
import winston from "winston";
import winston, { createLogger } from "winston";

export const defaultOptions: winston.LoggerOptions = {
format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
transports: [new winston.transports.Console()],
};
export type Level = "error" | "warn" | "info" | "verbose" | "debug" | "silly";
export interface LoggerOptions extends winston.LoggerOptions {
level?: Level;
}

export const create = (options: winston.LoggerOptions = defaultOptions) => {
return Logger.create(options);
export const defaultOptions = {
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple(),
winston.format.timestamp(),
winston.format.printf((info) => {
const { timestamp, level, message, ...rest } = info;
return `${timestamp} [${level}]: ${message} ${
Object.keys(rest).length ? JSON.stringify(rest, null, 2) : ""
}`;
}),
winston.format.errors({ stack: true }),
),
transports: [new winston.transports.Console()] as const,
level: "debug",
} satisfies LoggerOptions;

export const create = (options: LoggerOptions = defaultOptions) => {
return createLogger(options);
};

export class Logger {
private static _logger: winston.Logger;
private static _instance: Logger;

public static log = Logger._logger.log;
public static error = Logger._logger.error;
public static warn = Logger._logger.warn;
public static info = Logger._logger.info;
public static verbose = Logger._logger.verbose;
public static debug = Logger._logger.debug;
public static silly = Logger._logger.silly;

public log = Logger._logger.log;
public error = Logger._logger.error;
public warn = Logger._logger.warn;
public info = Logger._logger.info;
public verbose = Logger._logger.verbose;
public debug = Logger._logger.debug;
public silly = Logger._logger.silly;

public static create = (options: winston.LoggerOptions = defaultOptions) => {
const _logger = Logger.getInstance(options);
return _logger;
};

public static getInstance = (options: winston.LoggerOptions = defaultOptions) => {
if (!Logger._instance) {
Logger._logger = winston.createLogger(options);
Logger._instance = new Logger(options);
}
return Logger._instance;
};

constructor(options: winston.LoggerOptions = defaultOptions) {
Logger.getInstance(options);
}
}
const logger = create(defaultOptions);

export default Logger;
logger.info("Hello, world!");
2 changes: 2 additions & 0 deletions packages/internal/log/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
"private": true,
"description": "<>",
"main": "./index.ts",
"types": "./index.ts",
"module": "./index.ts",
"scripts": {
"build": "tsup --format cjs,esm --dts",
"lint": "eslint **/*.ts",
Expand Down
4 changes: 4 additions & 0 deletions packages/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export * from "./src/index";
export * from "./src/helpers";
export * from "./src/primitives";
export * from "./src/tests";
12 changes: 6 additions & 6 deletions packages/ui/components/ui/sonner.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
"use client";

import { useTheme } from "next-themes";
import { Toaster as Sonner } from "sonner";
import { Toaster as SonnerF } from "sonner";

type ToasterProps = React.ComponentProps<typeof Sonner>;
type SonnerProps = React.ComponentProps<typeof SonnerF>;

const Toaster = ({ ...props }: ToasterProps) => {
const Sonner = ({ ...props }: SonnerProps) => {
const { theme = "system" } = useTheme();

return (
<Sonner
theme={theme as ToasterProps["theme"]}
<SonnerF
theme={theme as SonnerProps["theme"]}
className="toaster group"
toastOptions={{
classNames: {
Expand All @@ -27,4 +27,4 @@ const Toaster = ({ ...props }: ToasterProps) => {
);
};

export { Toaster };
export { Sonner };
57 changes: 57 additions & 0 deletions packages/ui/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// export * from "./components/ui/accordion";
// export * from "./components/ui/alert";
// export * from "./components/ui/alert-dialog";
// export * from "./components/ui/aspect-ratio";
// export * from "./components/ui/avatar";

// export * from "./components/ui/badge";
// export * from "./components/ui/button";

// export * from "./components/ui/calendar";
// export * from "./components/ui/card";
// export * from "./components/ui/carousel";
// export * from "./components/ui/checkbox";
// export * from "./components/ui/collapsible";
// export * from "./components/ui/command";
// export * from "./components/ui/context-menu";

// export * from "./components/ui/dialog";
// export * from "./components/ui/drawer";
// export * from "./components/ui/dropdown-menu";

// export * from "./components/ui/form";

// export * from "./components/ui/hover-card";

// export * from "./components/ui/input";

// export * from "./components/ui/label";

// export * from "./components/ui/menubar";

// export * from "./components/ui/navigation-menu";

// export * from "./components/ui/pagination";
// export * from "./components/ui/popover";
// export * from "./components/ui/progress";

// export * from "./components/ui/radio-group";
// export * from "./components/ui/resizable";

// export * from "./components/ui/scroll-area";
// export * from "./components/ui/select";
// export * from "./components/ui/separator";
// export * from "./components/ui/sheet";
// export * from "./components/ui/skeleton";
// export * from "./components/ui/slider";
// export * from "./components/ui/sonner";
// export * from "./components/ui/switch";

// export * from "./components/ui/table";
// export * from "./components/ui/tabs";
// export * from "./components/ui/textarea";
// export * from "./components/ui/toast";
// export * from "./components/ui/toaster";
// export * from "./components/ui/toggle";
// export * from "./components/ui/toggle-group";
// export * from "./components/ui/tooltip";
Loading

0 comments on commit cf9ad75

Please sign in to comment.