chore: restructure packages of the project (#7)

* chore: restructure validation package

* chore: move zod only to validation package

* chore: rename packages from alparr to homarr

* chore: move mantine core, dates and icons library to ui package, move most other mantine packages to seperate packages for further customization and centralization

* chore: fix formatting

* fix: wrong typecheck command in turbo generator

* chore: fix formatting

* chore: address pull request feedback

* chore: fix ci check issues
This commit is contained in:
Meier Lukas
2024-01-02 14:18:37 +01:00
committed by GitHub
parent a082f70470
commit fa19966fcc
67 changed files with 562 additions and 304 deletions

View File

@@ -1,5 +1,5 @@
{
"name": "@alparr/api",
"name": "@homarr/api",
"version": "0.1.0",
"private": true,
"main": "./index.ts",
@@ -12,18 +12,17 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@alparr/auth": "workspace:^0.1.0",
"@alparr/db": "workspace:^0.1.0",
"@alparr/validation": "workspace:^0.1.0",
"@homarr/auth": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@trpc/client": "next",
"@trpc/server": "next",
"superjson": "2.2.1",
"zod": "^3.22.2"
"superjson": "2.2.1"
},
"devDependencies": {
"@alparr/eslint-config": "workspace:^0.2.0",
"@alparr/prettier-config": "workspace:^0.1.0",
"@alparr/tsconfig": "workspace:^0.1.0",
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^8.53.0",
"prettier": "^3.1.0",
"typescript": "^5.3.3"
@@ -31,8 +30,8 @@
"eslintConfig": {
"root": true,
"extends": [
"@alparr/eslint-config/base"
"@homarr/eslint-config/base"
]
},
"prettier": "@alparr/prettier-config"
"prettier": "@homarr/prettier-config"
}

View File

@@ -2,15 +2,15 @@ import "server-only";
import { TRPCError } from "@trpc/server";
import { createSalt, hashPassword } from "@alparr/auth";
import { createId, schema } from "@alparr/db";
import { initUserSchema } from "@alparr/validation";
import { createSalt, hashPassword } from "@homarr/auth";
import { createId, schema } from "@homarr/db";
import { validation } from "@homarr/validation";
import { createTRPCRouter, publicProcedure } from "../trpc";
export const userRouter = createTRPCRouter({
initUser: publicProcedure
.input(initUserSchema)
.input(validation.user.init)
.mutation(async ({ ctx, input }) => {
const firstUser = await ctx.db.query.users.findFirst({
columns: {

View File

@@ -8,11 +8,11 @@
*/
import { initTRPC, TRPCError } from "@trpc/server";
import superjson from "superjson";
import { ZodError } from "zod";
import { auth } from "@alparr/auth";
import type { Session } from "@alparr/auth";
import { db } from "@alparr/db";
import { auth } from "@homarr/auth";
import type { Session } from "@homarr/auth";
import { db } from "@homarr/db";
import { ZodError } from "@homarr/validation";
/**
* 1. CONTEXT

View File

@@ -1,5 +1,5 @@
{
"extends": "@alparr/tsconfig/base.json",
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},

View File

@@ -3,7 +3,7 @@ import { DrizzleAdapter } from "@auth/drizzle-adapter";
import NextAuth from "next-auth";
import Credentials from "next-auth/providers/credentials";
import { db } from "@alparr/db";
import { db } from "@homarr/db";
import { credentialsConfiguration } from "./providers/credentials";
import { EmptyNextAuthProvider } from "./providers/empty";

View File

@@ -1,5 +1,5 @@
{
"name": "@alparr/auth",
"name": "@homarr/auth",
"version": "0.1.0",
"private": true,
"main": "./index.ts",
@@ -12,7 +12,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@alparr/db": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@auth/core": "^0.18.4",
"@auth/drizzle-adapter": "^0.3.9",
"@t3-oss/env-nextjs": "^0.7.1",
@@ -21,14 +21,13 @@
"next": "^14.0.3",
"next-auth": "5.0.0-beta.4",
"react": "18.2.0",
"react-dom": "18.2.0",
"zod": "^3.22.2"
"react-dom": "18.2.0"
},
"devDependencies": {
"@alparr/eslint-config": "workspace:^0.2.0",
"@alparr/prettier-config": "workspace:^0.1.0",
"@alparr/tsconfig": "workspace:^0.1.0",
"@alparr/validation": "workspace:^0.1.0",
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@types/bcrypt": "5.0.2",
"@types/cookies": "0.7.10",
"eslint": "^8.53.0",
@@ -38,8 +37,8 @@
"eslintConfig": {
"root": true,
"extends": [
"@alparr/eslint-config/base"
"@homarr/eslint-config/base"
]
},
"prettier": "@alparr/prettier-config"
"prettier": "@homarr/prettier-config"
}

View File

@@ -1,9 +1,9 @@
import type Credentials from "@auth/core/providers/credentials";
import bcrypt from "bcrypt";
import { db, eq } from "@alparr/db";
import { users } from "@alparr/db/schema/sqlite";
import { signInSchema } from "@alparr/validation";
import { db, eq } from "@homarr/db";
import { users } from "@homarr/db/schema/sqlite";
import { validation } from "@homarr/validation";
type CredentialsConfiguration = Parameters<typeof Credentials>[0];
@@ -21,7 +21,7 @@ export const credentialsConfiguration = {
},
},
async authorize(credentials) {
const data = await signInSchema.parseAsync(credentials);
const data = await validation.user.signIn.parseAsync(credentials);
const user = await db.query.users.findFirst({
where: eq(users.name, data.name),

View File

@@ -1,5 +1,5 @@
{
"extends": "@alparr/tsconfig/base.json",
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},

View File

@@ -1,5 +1,5 @@
{
"name": "@alparr/db",
"name": "@homarr/db",
"version": "0.1.0",
"private": true,
"main": "./index.ts",
@@ -19,9 +19,9 @@
"drizzle-orm": "^0.29.1"
},
"devDependencies": {
"@alparr/eslint-config": "workspace:^0.2.0",
"@alparr/prettier-config": "workspace:^0.1.0",
"@alparr/tsconfig": "workspace:^0.1.0",
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/better-sqlite3": "7.6.8",
"dotenv-cli": "^7.3.0",
"drizzle-kit": "^0.20.6",
@@ -32,8 +32,8 @@
"eslintConfig": {
"root": true,
"extends": [
"@alparr/eslint-config/base"
"@homarr/eslint-config/base"
]
},
"prettier": "@alparr/prettier-config"
"prettier": "@homarr/prettier-config"
}

View File

@@ -1,5 +1,5 @@
{
"extends": "@alparr/tsconfig/base.json",
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},

2
packages/form/index.ts Normal file
View File

@@ -0,0 +1,2 @@
export * from "./src";
export * from "@mantine/form";

View File

@@ -0,0 +1,38 @@
{
"name": "@homarr/form",
"private": true,
"version": "0.1.0",
"exports": {
".": "./index.ts"
},
"typesVersions": {
"*": {
"*": [
"src/*"
]
}
},
"license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
"lint": "eslint .",
"format": "prettier --check . --ignore-path ../../.gitignore",
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^8.53.0",
"typescript": "^5.3.3"
},
"eslintConfig": {
"extends": [
"@homarr/eslint-config/base"
]
},
"prettier": "@homarr/prettier-config",
"dependencies": {
"@mantine/form": "^7.3.2"
}
}

View File

@@ -0,0 +1 @@
export const name = "form";

View File

@@ -0,0 +1,8 @@
{
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},
"include": ["*.ts", "src"],
"exclude": ["node_modules"]
}

View File

@@ -0,0 +1,2 @@
export * from "./src";
export { Notifications } from "@mantine/notifications";

View File

@@ -0,0 +1,40 @@
{
"name": "@homarr/notifications",
"private": true,
"version": "0.1.0",
"exports": {
".": "./index.ts",
"./styles.css": "./src/styles.css"
},
"typesVersions": {
"*": {
"*": [
"src/*"
]
}
},
"license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
"lint": "eslint .",
"format": "prettier --check . --ignore-path ../../.gitignore",
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^8.53.0",
"typescript": "^5.3.3"
},
"dependencies": {
"@mantine/notifications": "7.3.2",
"@homarr/ui": "workspace:^0.1.0"
},
"eslintConfig": {
"extends": [
"@homarr/eslint-config/base"
]
},
"prettier": "@homarr/prettier-config"
}

View File

@@ -0,0 +1,20 @@
import type { NotificationData } from "@mantine/notifications";
import { notifications } from "@mantine/notifications";
import { IconCheck, IconX, rem } from "@homarr/ui";
type CommonNotificationProps = Pick<NotificationData, "title" | "message">;
export const showSuccessNotification = (props: CommonNotificationProps) =>
notifications.show({
...props,
color: "teal",
icon: <IconCheck size={rem(20)} />,
});
export const showErrorNotification = (props: CommonNotificationProps) =>
notifications.show({
...props,
color: "red",
icon: <IconX size={rem(20)} />,
});

View File

@@ -0,0 +1 @@
@import "@mantine/notifications/styles.css";

View File

@@ -0,0 +1,8 @@
{
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},
"include": ["*.ts", "src"],
"exclude": ["node_modules"]
}

View File

@@ -0,0 +1 @@
export * from "./src";

View File

@@ -0,0 +1,38 @@
{
"name": "@homarr/spotlight",
"private": true,
"version": "0.1.0",
"exports": {
".": "./index.ts"
},
"typesVersions": {
"*": {
"*": [
"src/*"
]
}
},
"license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
"lint": "eslint .",
"format": "prettier --check . --ignore-path ../../.gitignore",
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^8.53.0",
"typescript": "^5.3.3"
},
"eslintConfig": {
"extends": [
"@homarr/eslint-config/base"
]
},
"prettier": "@homarr/prettier-config",
"dependencies": {
"@mantine/spotlight": "^7.3.2"
}
}

View File

@@ -0,0 +1 @@
export const name = "spotlight";

View File

@@ -0,0 +1,8 @@
{
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},
"include": ["*.ts", "src"],
"exclude": ["node_modules"]
}

View File

@@ -1,5 +1,5 @@
{
"name": "@alparr/translation",
"name": "@homarr/translation",
"private": true,
"version": "0.1.0",
"exports": {
@@ -23,18 +23,18 @@
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@alparr/eslint-config": "workspace:^0.2.0",
"@alparr/prettier-config": "workspace:^0.1.0",
"@alparr/tsconfig": "workspace:^0.1.0",
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^8.53.0",
"typescript": "^5.3.3"
},
"eslintConfig": {
"extends": [
"@alparr/eslint-config/base"
"@homarr/eslint-config/base"
]
},
"prettier": "@alparr/prettier-config",
"prettier": "@homarr/prettier-config",
"dependencies": {
"next-international": "^1.1.4"
}

View File

@@ -6,7 +6,7 @@ export default {
subtitle: "Willkommen zurück! Bitte gib deine Zugangsdaten ein",
},
init: {
title: "Neue Alparr Installation",
title: "Neue Homarr Installation",
subtitle: "Bitte erstelle den initialen Administrator Benutzer",
},
},

View File

@@ -6,7 +6,7 @@ export default {
subtitle: "Welcome back! Please enter your credentials",
},
init: {
title: "New Alparr installation",
title: "New Homarr installation",
subtitle: "Please create the initial administator user",
},
},

View File

@@ -1,5 +1,5 @@
{
"extends": "@alparr/tsconfig/base.json",
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},

View File

@@ -1 +1,4 @@
export * from "./src";
export * from "@mantine/core";
export * from "@mantine/dates";
export * from "@tabler/icons-react";

View File

@@ -1,9 +1,10 @@
{
"name": "@alparr/ui",
"name": "@homarr/ui",
"private": true,
"version": "0.1.0",
"exports": {
".": "./index.ts"
".": "./index.ts",
"./styles.css": "./src/styles.css"
},
"typesVersions": {
"*": {
@@ -20,19 +21,21 @@
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@alparr/eslint-config": "workspace:^0.2.0",
"@alparr/prettier-config": "workspace:^0.1.0",
"@alparr/tsconfig": "workspace:^0.1.0",
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^8.53.0",
"typescript": "^5.3.3"
},
"eslintConfig": {
"extends": [
"@alparr/eslint-config/base"
"@homarr/eslint-config/base"
]
},
"prettier": "@alparr/prettier-config",
"prettier": "@homarr/prettier-config",
"dependencies": {
"@mantine/core": "^7.3.1"
"@mantine/core": "^7.3.2",
"@mantine/dates": "7.3.2",
"@tabler/icons-react": "^2.42.0"
}
}

View File

@@ -0,0 +1,2 @@
@import "@mantine/core/styles.css";
@import "@mantine/dates/styles.css";

View File

@@ -1,5 +1,5 @@
{
"extends": "@alparr/tsconfig/base.json",
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},

View File

@@ -1 +1,2 @@
export * from "./src";
export * from "zod";

View File

@@ -1,5 +1,5 @@
{
"name": "@alparr/validation",
"name": "@homarr/validation",
"private": true,
"version": "0.1.0",
"exports": {
@@ -20,18 +20,18 @@
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@alparr/eslint-config": "workspace:^0.2.0",
"@alparr/prettier-config": "workspace:^0.1.0",
"@alparr/tsconfig": "workspace:^0.1.0",
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^8.53.0",
"typescript": "^5.3.3"
},
"eslintConfig": {
"extends": [
"@alparr/eslint-config/base"
"@homarr/eslint-config/base"
]
},
"prettier": "@alparr/prettier-config",
"prettier": "@homarr/prettier-config",
"dependencies": {
"zod": "^3.22.2"
}

View File

@@ -1 +1,5 @@
export * from "./user";
import { userSchemas } from "./user";
export const validation = {
user: userSchemas,
};

View File

@@ -3,7 +3,7 @@ import { z } from "zod";
const usernameSchema = z.string().min(3).max(255);
const passwordSchema = z.string().min(8).max(255);
export const initUserSchema = z
const initUserSchema = z
.object({
username: usernameSchema,
password: passwordSchema,
@@ -14,7 +14,12 @@ export const initUserSchema = z
message: "Passwords do not match",
});
export const signInSchema = z.object({
const signInSchema = z.object({
name: z.string(),
password: z.string(),
});
export const userSchemas = {
signIn: signInSchema,
init: initUserSchema,
};

View File

@@ -1,5 +1,5 @@
{
"extends": "@alparr/tsconfig/base.json",
"extends": "@homarr/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},