diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 53b3d19..db0acce 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -17,12 +17,12 @@ ## Scope -- [ ] `dashbore-api` (`apps/api/`) -- [ ] `dashbore-ui` (`apps/ui/`) -- [ ] `dashbore-common` (`packages/common/`) -- [ ] `dashbore-database` (`packages/database/`) -- [ ] `dashbore-business` (`packages/business/`) -- [ ] `dashbore-cache` (`packages/cache/`) +- [ ] `@dashbore/api` (`apps/api/`) +- [ ] `@dashbore/ui` (`apps/ui/`) +- [ ] `@dashbore/common` (`packages/common/`) +- [ ] `@dashbore/database` (`packages/database/`) +- [ ] `@dashbore/business` (`packages/business/`) +- [ ] `@dashbore/cache` (`packages/cache/`) - [ ] Root / config ## Changes diff --git a/apps/api/bunfig.toml b/apps/api/bunfig.toml index c752f2a..bb3b651 100644 --- a/apps/api/bunfig.toml +++ b/apps/api/bunfig.toml @@ -5,5 +5,6 @@ coverageThreshold = 0.6 # Skip test files coverageSkipTestFiles = true +elide-lines = 0 root = "tests" \ No newline at end of file diff --git a/apps/api/package.json b/apps/api/package.json index 5e37f66..d7a216e 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -1,5 +1,5 @@ { - "name": "dashbore-api", + "name": "@dashbore/api", "module": "src/index.ts", "type": "module", "private": true, @@ -7,11 +7,11 @@ "dev:debug": "bun run --inspect src/index.ts", "build": "bun build src/index.ts --outfile dist/index.js --target=bun", "start": "bun run dist/index.js", - "postinstall": "bun run --filter=dashbore-database generate", - "dev": "bun run --filter=dashbore-database generate && bun run migrate && bun run --watch src/index.ts", + "postinstall": "bun run --filter=@dashbore/database generate", + "dev": "bun run --filter=@dashbore/database generate && bun run migrate && bun run --watch src/index.ts", "test": "cross-env NODE_ENV=test bun run migrate && bun run seed && bun test --preload ./tests/preload.ts", - "migrate": "bun run --filter=dashbore-database migrate", - "seed": "bun run --filter=dashbore-database seed" + "migrate": "bun run --filter=@dashbore/database migrate", + "seed": "bun run --filter=@dashbore/database seed" }, "devDependencies": { "@types/bun": "latest", @@ -25,11 +25,11 @@ "dependencies": { "@hono/swagger-ui": "^0.5.1", "@hono/zod-validator": "^0.4.3", + "@dashbore/business": "workspace:*", + "@dashbore/cache": "workspace:*", + "@dashbore/common": "workspace:*", + "@dashbore/database": "workspace:*", "colorette": "^2.0.20", - "dashbore-business": "workspace:*", - "dashbore-cache": "workspace:*", - "dashbore-common": "workspace:*", - "dashbore-database": "workspace:*", "hono": "^4.7.6", "hono-openapi": "^0.4.6", "zod": "^3.24.2", diff --git a/apps/api/src/app.ts b/apps/api/src/app.ts index 274f997..e2fa85b 100644 --- a/apps/api/src/app.ts +++ b/apps/api/src/app.ts @@ -1,7 +1,7 @@ import appFactory from "./factory/app.factory"; import useOpenApi from "./middleware/openapi.middleware"; -import PermissionService from "@business/services/permission/permission.service"; +import { PermissionService } from "@business/services/permission/permission.service"; import authRoute from "./routes/auth/auth.route"; import userRoute from "./routes/users/users.route"; diff --git a/apps/api/src/middleware/auth.middleware.ts b/apps/api/src/middleware/auth.middleware.ts index 901e2c1..cd2d4e8 100644 --- a/apps/api/src/middleware/auth.middleware.ts +++ b/apps/api/src/middleware/auth.middleware.ts @@ -1,6 +1,6 @@ -import TokenService from "@business/services/token/token.service"; -import UserService from "@business/services/user/user.service"; -import UserUtil from "@business/util/user.util"; +import { TokenService } from "@business/services/token/token.service"; +import { UserService } from "@business/services/user/user.service"; +import { UserUtil } from "@business/util/user.util"; import type { Context, Next } from "hono"; import { HTTPException } from "hono/http-exception"; diff --git a/apps/api/src/routes/auth/auth.route.ts b/apps/api/src/routes/auth/auth.route.ts index 1d62747..3230c54 100644 --- a/apps/api/src/routes/auth/auth.route.ts +++ b/apps/api/src/routes/auth/auth.route.ts @@ -2,8 +2,8 @@ import { createOpenApiPathBuilder } from "@/builder/openapi/openapi.builder"; import appFactory from "@/factory/app.factory"; import responseFactory from "@/factory/response.factory"; import AuthMiddleware from "@/middleware/auth.middleware"; -import AuthService from "@business/services/auth/auth.service"; -import TokenService from "@business/services/token/token.service"; +import { AuthService } from "@business/services/auth/auth.service"; +import { TokenService } from "@business/services/token/token.service"; import type { NormalizedUser } from "@business/services/user/user.service"; import { AuthValidation } from "@common/index"; import { zValidator } from "@hono/zod-validator"; diff --git a/apps/api/src/routes/users/users.route.ts b/apps/api/src/routes/users/users.route.ts index e96e3cc..3aaf83c 100644 --- a/apps/api/src/routes/users/users.route.ts +++ b/apps/api/src/routes/users/users.route.ts @@ -1,7 +1,7 @@ import { createOpenApiPathBuilder } from "@/builder/openapi/openapi.builder"; import PaginationBuilder from "@/builder/pagination/pagination.builder"; -import RedisCache from "@cache/core/cache/redis.cache"; -import CorePermissionKey from "@business/core/permission/core.permission"; +import { RedisCache } from "@cache/core/cache/redis.cache"; +import { CorePermissionKey } from "@business/core/permission/core.permission"; import appFactory from "@/factory/app.factory"; import PaginationUtil from "@/util/pagination.util"; import getPrismaClient from "@/util/prisma.util"; diff --git a/apps/api/tests/core/cache/cache.spec.ts b/apps/api/tests/core/cache/cache.spec.ts index dacfffa..b0eb97d 100644 --- a/apps/api/tests/core/cache/cache.spec.ts +++ b/apps/api/tests/core/cache/cache.spec.ts @@ -1,4 +1,4 @@ -import RedisCache from "@cache/core/cache/redis.cache"; +import { RedisCache } from "@cache/core/cache/redis.cache"; import { afterEach, describe, expect, test } from "bun:test"; describe("Redis Cache", () => { diff --git a/apps/api/tests/factory/redis.factory.spec.ts b/apps/api/tests/factory/redis.factory.spec.ts index 8b4a2dc..cea8bb0 100644 --- a/apps/api/tests/factory/redis.factory.spec.ts +++ b/apps/api/tests/factory/redis.factory.spec.ts @@ -1,4 +1,4 @@ -import RedisFactory from "@cache/factory/redis.factory"; +import { RedisFactory } from "@cache/factory/redis.factory"; import { describe, expect, test } from "bun:test"; describe("Redis Factory", () => { diff --git a/apps/api/tests/middleware/auth.middleware.spec.ts b/apps/api/tests/middleware/auth.middleware.spec.ts index 3aa82ee..2b33384 100644 --- a/apps/api/tests/middleware/auth.middleware.spec.ts +++ b/apps/api/tests/middleware/auth.middleware.spec.ts @@ -1,6 +1,6 @@ import appFactory from "@/factory/app.factory"; import AuthMiddleware from "@/middleware/auth.middleware"; -import AuthService from "@business/services/auth/auth.service"; +import { AuthService } from "@business/services/auth/auth.service"; import { describe, expect, it } from "bun:test"; describe("AuthMiddleware", () => { diff --git a/apps/api/tests/preload.ts b/apps/api/tests/preload.ts index e3d18f0..7436f74 100644 --- a/apps/api/tests/preload.ts +++ b/apps/api/tests/preload.ts @@ -1,4 +1,4 @@ -import PermissionService from "@business/services/permission/permission.service"; +import { PermissionService } from "@business/services/permission/permission.service"; import { beforeAll } from "bun:test"; import { green } from "colorette"; import TestAuthUtil from "./util/testAuth"; diff --git a/apps/api/tests/routes/auth.route.spec.ts b/apps/api/tests/routes/auth.route.spec.ts index 8e7ac5c..6ec3ecf 100644 --- a/apps/api/tests/routes/auth.route.spec.ts +++ b/apps/api/tests/routes/auth.route.spec.ts @@ -1,5 +1,5 @@ import app from "@/app"; -import TokenService from "@business/services/token/token.service"; +import { TokenService } from "@business/services/token/token.service"; import type { User } from "@database/index"; import { beforeEach, describe, expect, it } from "bun:test"; import { testClient } from "hono/testing"; diff --git a/apps/api/tests/services/token/token.test.spec.ts b/apps/api/tests/services/token/token.test.spec.ts index 24e42df..6e7c255 100644 --- a/apps/api/tests/services/token/token.test.spec.ts +++ b/apps/api/tests/services/token/token.test.spec.ts @@ -1,4 +1,4 @@ -import TokenService from "@business/services/token/token.service"; +import { TokenService } from "@business/services/token/token.service"; import type { User } from "@database/index"; import { describe, expect, it } from "bun:test"; diff --git a/apps/api/tests/util/testAuth.ts b/apps/api/tests/util/testAuth.ts index 9519cbe..369ea8d 100644 --- a/apps/api/tests/util/testAuth.ts +++ b/apps/api/tests/util/testAuth.ts @@ -1,5 +1,5 @@ -import AuthService from "@business/services/auth/auth.service"; -import TokenService from "@business/services/token/token.service"; +import { AuthService } from "@business/services/auth/auth.service"; +import { TokenService } from "@business/services/token/token.service"; import TestContext from "tests/test.context.spec"; async function login() { diff --git a/apps/ui/package.json b/apps/ui/package.json index f9c954a..25518ae 100644 --- a/apps/ui/package.json +++ b/apps/ui/package.json @@ -1,5 +1,5 @@ { - "name": "dashbore-ui", + "name": "@dashbore/ui", "type": "module", "private": true, "scripts": { @@ -23,7 +23,7 @@ "typescript": "^5" }, "dependencies": { - "dashbore-common": "workspace:*", + "@dashbore/common": "workspace:*", "@mantine/colors-generator": "^7.17.4", "@mantine/core": "^7.17.4", "@mantine/form": "^7.17.4", diff --git a/apps/ui/src/routeTree.gen.ts b/apps/ui/src/routeTree.gen.ts index 3151fa8..ea26a01 100644 --- a/apps/ui/src/routeTree.gen.ts +++ b/apps/ui/src/routeTree.gen.ts @@ -8,127 +8,88 @@ // You should NOT make any changes in this file as it will be overwritten. // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. -// Import Routes +import { Route as rootRouteImport } from './routes/__root' +import { Route as HomeRouteImport } from './routes/home' +import { Route as IndexRouteImport } from './routes/index' +import { Route as DashboardIndexRouteImport } from './routes/dashboard/index' -import { Route as rootRoute } from './routes/__root' -import { Route as HomeImport } from './routes/home' -import { Route as IndexImport } from './routes/index' -import { Route as DashboardIndexImport } from './routes/dashboard/index' - -// Create/Update Routes - -const HomeRoute = HomeImport.update({ +const HomeRoute = HomeRouteImport.update({ id: '/home', path: '/home', - getParentRoute: () => rootRoute, + getParentRoute: () => rootRouteImport, } as any) - -const IndexRoute = IndexImport.update({ +const IndexRoute = IndexRouteImport.update({ id: '/', path: '/', - getParentRoute: () => rootRoute, + getParentRoute: () => rootRouteImport, } as any) - -const DashboardIndexRoute = DashboardIndexImport.update({ +const DashboardIndexRoute = DashboardIndexRouteImport.update({ id: '/dashboard/', path: '/dashboard/', - getParentRoute: () => rootRoute, + getParentRoute: () => rootRouteImport, } as any) -// Populate the FileRoutesByPath interface - -declare module '@tanstack/react-router' { - interface FileRoutesByPath { - '/': { - id: '/' - path: '/' - fullPath: '/' - preLoaderRoute: typeof IndexImport - parentRoute: typeof rootRoute - } - '/home': { - id: '/home' - path: '/home' - fullPath: '/home' - preLoaderRoute: typeof HomeImport - parentRoute: typeof rootRoute - } - '/dashboard/': { - id: '/dashboard/' - path: '/dashboard' - fullPath: '/dashboard' - preLoaderRoute: typeof DashboardIndexImport - parentRoute: typeof rootRoute - } - } -} - -// Create and export the route tree - export interface FileRoutesByFullPath { '/': typeof IndexRoute '/home': typeof HomeRoute - '/dashboard': typeof DashboardIndexRoute + '/dashboard/': typeof DashboardIndexRoute } - export interface FileRoutesByTo { '/': typeof IndexRoute '/home': typeof HomeRoute '/dashboard': typeof DashboardIndexRoute } - export interface FileRoutesById { - __root__: typeof rootRoute + __root__: typeof rootRouteImport '/': typeof IndexRoute '/home': typeof HomeRoute '/dashboard/': typeof DashboardIndexRoute } - export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/' | '/home' | '/dashboard' + fullPaths: '/' | '/home' | '/dashboard/' fileRoutesByTo: FileRoutesByTo to: '/' | '/home' | '/dashboard' id: '__root__' | '/' | '/home' | '/dashboard/' fileRoutesById: FileRoutesById } - export interface RootRouteChildren { IndexRoute: typeof IndexRoute HomeRoute: typeof HomeRoute DashboardIndexRoute: typeof DashboardIndexRoute } +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/home': { + id: '/home' + path: '/home' + fullPath: '/home' + preLoaderRoute: typeof HomeRouteImport + parentRoute: typeof rootRouteImport + } + '/': { + id: '/' + path: '/' + fullPath: '/' + preLoaderRoute: typeof IndexRouteImport + parentRoute: typeof rootRouteImport + } + '/dashboard/': { + id: '/dashboard/' + path: '/dashboard' + fullPath: '/dashboard/' + preLoaderRoute: typeof DashboardIndexRouteImport + parentRoute: typeof rootRouteImport + } + } +} + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, HomeRoute: HomeRoute, DashboardIndexRoute: DashboardIndexRoute, } - -export const routeTree = rootRoute +export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() - -/* ROUTE_MANIFEST_START -{ - "routes": { - "__root__": { - "filePath": "__root.tsx", - "children": [ - "/", - "/home", - "/dashboard/" - ] - }, - "/": { - "filePath": "index.tsx" - }, - "/home": { - "filePath": "home.tsx" - }, - "/dashboard/": { - "filePath": "dashboard/index.tsx" - } - } -} -ROUTE_MANIFEST_END */ diff --git a/bun.lock b/bun.lock index b8f347f..bcb59e9 100644 --- a/bun.lock +++ b/bun.lock @@ -9,15 +9,15 @@ }, }, "apps/api": { - "name": "dashbore-api", + "name": "@dashbore/api", "dependencies": { + "@dashbore/business": "workspace:*", + "@dashbore/cache": "workspace:*", + "@dashbore/common": "workspace:*", + "@dashbore/database": "workspace:*", "@hono/swagger-ui": "^0.5.1", "@hono/zod-validator": "^0.4.3", "colorette": "^2.0.20", - "dashbore-business": "workspace:*", - "dashbore-cache": "workspace:*", - "dashbore-common": "workspace:*", - "dashbore-database": "workspace:*", "hono": "^4.7.6", "hono-openapi": "^0.4.6", "zod": "^3.24.2", @@ -34,8 +34,9 @@ }, }, "apps/ui": { - "name": "dashbore-ui", + "name": "@dashbore/ui", "dependencies": { + "@dashbore/common": "workspace:*", "@mantine/colors-generator": "^7.17.4", "@mantine/core": "^7.17.4", "@mantine/form": "^7.17.4", @@ -46,7 +47,6 @@ "axios": "^1.8.4", "chroma-js": "^3.1.2", "clsx": "^2.1.1", - "dashbore-common": "workspace:*", "lucide-react": "^0.487.0", "react": "^19.1.0", "react-dom": "^19.1.0", @@ -72,10 +72,10 @@ }, }, "packages/business": { - "name": "dashbore-business", + "name": "@dashbore/business", "dependencies": { - "dashbore-common": "workspace:*", - "dashbore-database": "workspace:*", + "@dashbore/common": "workspace:*", + "@dashbore/database": "workspace:*", "hono": "^4.7.6", "jsonwebtoken": "^9.0.2", }, @@ -88,7 +88,7 @@ }, }, "packages/cache": { - "name": "dashbore-cache", + "name": "@dashbore/cache", "dependencies": { "semver": "^7.7.1", }, @@ -101,7 +101,7 @@ }, }, "packages/common": { - "name": "dashbore-common", + "name": "@dashbore/common", "dependencies": { "zod": "^3.24.2", }, @@ -113,7 +113,7 @@ }, }, "packages/database": { - "name": "dashbore-database", + "name": "@dashbore/database", "dependencies": { "@prisma/adapter-pg": "^7.0.0", "@prisma/client": "^7.0.0", @@ -170,6 +170,18 @@ "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], + "@dashbore/api": ["@dashbore/api@workspace:apps/api"], + + "@dashbore/business": ["@dashbore/business@workspace:packages/business"], + + "@dashbore/cache": ["@dashbore/cache@workspace:packages/cache"], + + "@dashbore/common": ["@dashbore/common@workspace:packages/common"], + + "@dashbore/database": ["@dashbore/database@workspace:packages/database"], + + "@dashbore/ui": ["@dashbore/ui@workspace:apps/ui"], + "@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], "@electric-sql/pglite-socket": ["@electric-sql/pglite-socket@0.1.1", "", { "peerDependencies": { "@electric-sql/pglite": "0.4.1" }, "bin": { "pglite-server": "dist/scripts/server.js" } }, "sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw=="], @@ -548,18 +560,6 @@ "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - "dashbore-api": ["dashbore-api@workspace:apps/api"], - - "dashbore-business": ["dashbore-business@workspace:packages/business"], - - "dashbore-cache": ["dashbore-cache@workspace:packages/cache"], - - "dashbore-common": ["dashbore-common@workspace:packages/common"], - - "dashbore-database": ["dashbore-database@workspace:packages/database"], - - "dashbore-ui": ["dashbore-ui@workspace:apps/ui"], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "deepmerge-ts": ["deepmerge-ts@7.1.5", "", {}, "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw=="], diff --git a/bunfig.toml b/bunfig.toml index d2bfb9c..e87c02b 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -1,3 +1,4 @@ [test] -coverageThreshold = 0.6 \ No newline at end of file +coverageThreshold = 0.6 +elide-lines = 0 \ No newline at end of file diff --git a/docs/building.md b/docs/building.md index dc29d37..5ec99f6 100644 --- a/docs/building.md +++ b/docs/building.md @@ -9,6 +9,6 @@ bun run build:ui # vite build Or target a single workspace: ```sh -bun run --filter=dashbore-api dev -bun run --filter=dashbore-ui test +bun run --filter=@dashbore/api dev +bun run --filter=@dashbore/ui test ``` diff --git a/docs/getting-started.md b/docs/getting-started.md index a1f46f4..f95f452 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -9,9 +9,9 @@ | package | path | stack | |---|---|---| -| `dashbore-api` | `apps/api/` | Hono + Prisma (MySQL) + JWT + Redis | -| `dashbore-ui` | `apps/ui/` | React 19 + Vite + TanStack Router + Mantine UI + Tailwind v4 + Zustand + TanStack Query | -| `dashbore-common` | `packages/common/` | Shared Zod schemas, re-exported through `@common/index` | +| `@dashbore/api` | `apps/api/` | Hono + Prisma (MySQL) + JWT + Redis | +| `@dashbore/ui` | `apps/ui/` | React 19 + Vite + TanStack Router + Mantine UI + Tailwind v4 + Zustand + TanStack Query | +| `@dashbore/common` | `packages/common/` | Shared Zod schemas, re-exported through `@common/index` | ## Installation diff --git a/package.json b/package.json index 3c9b874..def0ef8 100644 --- a/package.json +++ b/package.json @@ -4,17 +4,17 @@ "workspaces": ["apps/*", "packages/*"], "scripts": { "dev": "concurrently -n api,ui \"bun run dev:api\" \"bun run dev:ui\"", - "dev:api": "bun run --filter=dashbore-api dev", - "dev:ui": "bun run --filter=dashbore-ui dev", + "dev:api": "bun run --filter=@dashbore/api dev", + "dev:ui": "bun run --filter=@dashbore/ui dev", "build": "concurrently -n api,ui \"bun run build:api\" \"bun run build:ui\"", - "build:api": "bun run --filter=dashbore-api build", - "build:ui": "bun run --filter=dashbore-ui build", + "build:api": "bun run --filter=@dashbore/api build", + "build:ui": "bun run --filter=@dashbore/ui build", "test": "concurrently --raw \"bun run test:api\" \"bun run test:ui\"", - "test:api": "bun run --filter=dashbore-api test", - "test:ui": "bun run --filter=dashbore-ui test", - "migrate": "bun run --filter=dashbore-database migrate", - "seed": "bun run --filter=dashbore-database seed", - "generate": "bun run --filter=dashbore-database generate" + "test:api": "bun run --filter=@dashbore/api test", + "test:ui": "bun run --filter=@dashbore/ui test", + "migrate": "bun run --filter=@dashbore/database migrate", + "seed": "bun run --filter=@dashbore/database seed", + "generate": "bun run --filter=@dashbore/database generate" }, "devDependencies": { "concurrently": "^9.1.2" diff --git a/packages/business/package.json b/packages/business/package.json index 41a8978..538f69f 100644 --- a/packages/business/package.json +++ b/packages/business/package.json @@ -1,11 +1,18 @@ { - "name": "dashbore-business", + "name": "@dashbore/business", "module": "src/index.ts", + "main": "src/index.ts", + "exports": { + ".": { + "import": "./src/index.ts", + "types": "./src/index.ts" + } + }, "type": "module", "private": true, "dependencies": { - "dashbore-common": "workspace:*", - "dashbore-database": "workspace:*", + "@dashbore/common": "workspace:*", + "@dashbore/database": "workspace:*", "hono": "^4.7.6", "jsonwebtoken": "^9.0.2" }, diff --git a/packages/business/src/core/permission/core.permission.ts b/packages/business/src/core/permission/core.permission.ts index 4231dad..23f2709 100644 --- a/packages/business/src/core/permission/core.permission.ts +++ b/packages/business/src/core/permission/core.permission.ts @@ -1,6 +1,6 @@ -import type { Permission } from "dashbore-database"; +import type { Permission } from "@dashbore/database"; -enum CorePermissionKey { +export enum CorePermissionKey { ALL = "*", USERS_READ = "users:read", USERS_WRITE = "users:write", @@ -30,6 +30,4 @@ const CorePermissionProperties: Record = { }, }; -export default CorePermissionKey; - export const CorePermissions = Object.values(CorePermissionProperties); diff --git a/packages/business/src/core/permission/manager.permission.ts b/packages/business/src/core/permission/manager.permission.ts index 4cfc107..7955742 100644 --- a/packages/business/src/core/permission/manager.permission.ts +++ b/packages/business/src/core/permission/manager.permission.ts @@ -1,5 +1,5 @@ -import { getPrismaClient } from "dashbore-database"; -import type { Permission } from "dashbore-database"; +import { getPrismaClient } from "@dashbore/database"; +import type { Permission } from "@dashbore/database"; class PermissionManager { private permissions: Map = new Map(); diff --git a/packages/business/src/index.ts b/packages/business/src/index.ts index c2d2572..0ee3cc4 100644 --- a/packages/business/src/index.ts +++ b/packages/business/src/index.ts @@ -1,11 +1,11 @@ -export { default as AuthService } from "./services/auth/auth.service"; -export { default as TokenService } from "./services/token/token.service"; -export { default as UserService } from "./services/user/user.service"; +export { AuthService } from "./services/auth/auth.service"; +export { TokenService } from "./services/token/token.service"; +export { UserService } from "./services/user/user.service"; export type { NormalizedUser, UserWithRoles, } from "./services/user/user.service"; -export { default as PermissionService } from "./services/permission/permission.service"; -export { default as CorePermissionKey, CorePermissions } from "./core/permission/core.permission"; +export { PermissionService } from "./services/permission/permission.service"; +export { CorePermissionKey, CorePermissions } from "./core/permission/core.permission"; export { getPermissionManager } from "./core/permission/manager.permission"; -export { default as UserUtil } from "./util/user.util"; +export { UserUtil } from "./util/user.util"; diff --git a/packages/business/src/services/auth/auth.service.ts b/packages/business/src/services/auth/auth.service.ts index 5320094..8499478 100644 --- a/packages/business/src/services/auth/auth.service.ts +++ b/packages/business/src/services/auth/auth.service.ts @@ -1,7 +1,7 @@ -import { getPrismaClient } from "dashbore-database"; +import { getPrismaClient } from "@dashbore/database"; import { HTTPException } from "hono/http-exception"; -const AuthService = { +export const AuthService = { login: async (email: string, password: string) => { const user = await getPrismaClient().user.findUnique({ where: { email }, @@ -25,5 +25,3 @@ const AuthService = { return user; }, }; - -export default AuthService; diff --git a/packages/business/src/services/permission/permission.service.ts b/packages/business/src/services/permission/permission.service.ts index a9ae479..b8b05c0 100644 --- a/packages/business/src/services/permission/permission.service.ts +++ b/packages/business/src/services/permission/permission.service.ts @@ -1,6 +1,6 @@ import { CorePermissions } from "../../core/permission/core.permission"; import { getPermissionManager } from "../../core/permission/manager.permission"; -import { getPrismaClient } from "dashbore-database"; +import { getPrismaClient } from "@dashbore/database"; async function loadCorePermissions() { console.log(`[Permission] Loading core permissions...`); @@ -34,8 +34,6 @@ async function bootstrap() { await loadPermissionsOnStartup(); } -const PermissionService = { +export const PermissionService = { bootstrap, }; - -export default PermissionService; diff --git a/packages/business/src/services/token/token.service.ts b/packages/business/src/services/token/token.service.ts index 5062530..0904a47 100644 --- a/packages/business/src/services/token/token.service.ts +++ b/packages/business/src/services/token/token.service.ts @@ -1,11 +1,11 @@ -import type { User } from "dashbore-database"; +import type { User } from "@dashbore/database"; import { HTTPException } from "hono/http-exception"; import jwt, { type JwtPayload } from "jsonwebtoken"; const JWT_SECRET = process.env.JWT_SECRET as string; const JWT_EXPIRATION_TIME = process.env.JWT_EXPIRATION_TIME as string; -const TokenService = { +export const TokenService = { generateToken: async (user: User) => { const token = jwt.sign( { @@ -37,5 +37,3 @@ const TokenService = { } }, }; - -export default TokenService; diff --git a/packages/business/src/services/user/user.service.ts b/packages/business/src/services/user/user.service.ts index d13df87..e291a33 100644 --- a/packages/business/src/services/user/user.service.ts +++ b/packages/business/src/services/user/user.service.ts @@ -1,5 +1,5 @@ -import CorePermissionKey from "../../core/permission/core.permission"; -import { getPrismaClient } from "dashbore-database"; +import { CorePermissionKey } from "../../core/permission/core.permission"; +import { getPrismaClient } from "@dashbore/database"; import type { Permission, Prisma, @@ -7,7 +7,7 @@ import type { RolePermission, User, UserRole, -} from "dashbore-database"; +} from "@dashbore/database"; export type UserWithRoles = User & { roles: (UserRole & { @@ -22,7 +22,7 @@ export type NormalizedUser = User & { roles: string[]; }; -const UserService = { +export const UserService = { getUserById: async (id: number, omit?: Prisma.UserSelect) => { const user = await getPrismaClient().user.findUnique({ where: { @@ -63,5 +63,3 @@ const UserService = { return hasPermission; }, }; - -export default UserService; diff --git a/packages/business/src/util/user.util.ts b/packages/business/src/util/user.util.ts index d830dac..2e3594e 100644 --- a/packages/business/src/util/user.util.ts +++ b/packages/business/src/util/user.util.ts @@ -18,8 +18,6 @@ async function normalizeUser(user: UserWithRoles): Promise { }; } -const UserUtil = { +export const UserUtil = { normalizeUser, }; - -export default UserUtil; diff --git a/packages/cache/package.json b/packages/cache/package.json index c882969..c86ce18 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,13 @@ { - "name": "dashbore-cache", + "name": "@dashbore/cache", "module": "src/index.ts", + "main": "src/index.ts", + "exports": { + ".": { + "import": "./src/index.ts", + "types": "./src/index.ts" + } + }, "type": "module", "private": true, "dependencies": { diff --git a/packages/cache/src/core/cache/redis.cache.ts b/packages/cache/src/core/cache/redis.cache.ts index 9f541b6..14a1a81 100644 --- a/packages/cache/src/core/cache/redis.cache.ts +++ b/packages/cache/src/core/cache/redis.cache.ts @@ -1,4 +1,4 @@ -import RedisFactory from "../../factory/redis.factory"; +import { RedisFactory } from "../../factory/redis.factory"; import type { RedisClient } from "bun"; let defaultRedisClient: RedisClient | undefined; @@ -60,11 +60,9 @@ async function invalidateCache(base: string, params?: Record) { return await client.del(...keys); } -const RedisCache = { +export const RedisCache = { getOrSetCacheItem, hasCacheItem, invalidateCache, getRedisClient, }; - -export default RedisCache; diff --git a/packages/cache/src/factory/redis.factory.ts b/packages/cache/src/factory/redis.factory.ts index 8d37af9..47b503a 100644 --- a/packages/cache/src/factory/redis.factory.ts +++ b/packages/cache/src/factory/redis.factory.ts @@ -13,8 +13,6 @@ const createRedisClient = (options?: Bun.RedisOptions) => { return new RedisClient(REDIS_URL, options); }; -const RedisFactory = { +export const RedisFactory = { createRedisClient, }; - -export default RedisFactory; diff --git a/packages/cache/src/index.ts b/packages/cache/src/index.ts index 3275bc4..dc38d17 100644 --- a/packages/cache/src/index.ts +++ b/packages/cache/src/index.ts @@ -1,3 +1,3 @@ -export { default as RedisFactory } from "./factory/redis.factory"; -export { default as RedisCache } from "./core/cache/redis.cache"; +export { RedisFactory } from "./factory/redis.factory"; +export { RedisCache } from "./core/cache/redis.cache"; export type { CacheItem } from "./core/cache/redis.cache"; diff --git a/packages/common/.gitignore b/packages/common/.gitignore index a14702c..3c3629e 100644 --- a/packages/common/.gitignore +++ b/packages/common/.gitignore @@ -1,34 +1 @@ -# dependencies (bun install) node_modules - -# output -out -dist -*.tgz - -# code coverage -coverage -*.lcov - -# logs -logs -_.log -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# caches -.eslintcache -.cache -*.tsbuildinfo - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store diff --git a/packages/common/package.json b/packages/common/package.json index 8b0b44c..926cf0c 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,13 @@ { - "name": "dashbore-common", + "name": "@dashbore/common", "module": "src/index.ts", + "main": "src/index.ts", + "exports": { + ".": { + "import": "./src/index.ts", + "types": "./src/index.ts" + } + }, "type": "module", "private": true, "dependencies": { diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 9536a0f..5025574 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -1,3 +1,6 @@ { - "extends": "../../tsconfig.base.json" + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "types": ["bun"] + } } diff --git a/packages/database/package.json b/packages/database/package.json index 384280d..26f3747 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -1,5 +1,5 @@ { - "name": "dashbore-database", + "name": "@dashbore/database", "module": "src/index.ts", "main": "src/index.ts", "exports": {