diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 000000000..243a99b44
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,2 @@
+/apps/web/src/app/[locale]/(main)/(plugins)
+/apps/web/src/app/[locale]/admin/(auth)/(plugins)
\ No newline at end of file
diff --git a/apps/docs/content/docs/dev/debugging.mdx b/apps/docs/content/docs/dev/debugging.mdx
index ef063e84d..3f3d1a845 100644
--- a/apps/docs/content/docs/dev/debugging.mdx
+++ b/apps/docs/content/docs/dev/debugging.mdx
@@ -38,7 +38,7 @@ Want to know exactly what's happening with your API calls? Next.js has your back
```ts title="next.config.ts"
import type { NextConfig } from 'next';
-import { vitNodeNextConfig } from 'vitnode/config/next.config';
+import { vitNodeNextConfig } from '@vitnode/core/config/next.config';
const nextConfig: NextConfig = {
// [!code ++]
diff --git a/apps/docs/content/docs/dev/fetcher.mdx b/apps/docs/content/docs/dev/fetcher.mdx
index c1d181a1a..c38504f37 100644
--- a/apps/docs/content/docs/dev/fetcher.mdx
+++ b/apps/docs/content/docs/dev/fetcher.mdx
@@ -15,8 +15,8 @@ The VitNode fetcher provides a type-safe RPC (Remote Procedure Call) style inter
First, import the required dependencies:
```ts
-import { fetcher } from 'vitnode/lib/fetcher';
-import { usersModule } from 'vitnode/api/modules/users/users.module';
+import { fetcher } from '@vitnode/core/lib/fetcher';
+import { usersModule } from '@vitnode/core/api/modules/users/users.module';
```
Make your first API call:
diff --git a/apps/docs/content/docs/dev/i18n/namespaces.mdx b/apps/docs/content/docs/dev/i18n/namespaces.mdx
index 01a624306..3d65491c1 100644
--- a/apps/docs/content/docs/dev/i18n/namespaces.mdx
+++ b/apps/docs/content/docs/dev/i18n/namespaces.mdx
@@ -49,7 +49,7 @@ To translate your content, select the plugin in `frontend` folder, go to `langs`
To get access to the translation strings in other namespaces you need to use the `TranslationsProvider` component.
```tsx title="apps/frontend/src/app/[locale]/(main)/{your_plugin}/layout.tsx"
-import { I18nProvider } from 'vitnode/components/i18n-provider';
+import { I18nProvider } from '@vitnode/core/components/i18n-provider';
export default function Layout({ children }: { children: React.ReactNode }) {
return {children};
diff --git a/apps/docs/content/docs/dev/pagination.mdx b/apps/docs/content/docs/dev/pagination.mdx
index 6f68cafcb..9e2d5d272 100644
--- a/apps/docs/content/docs/dev/pagination.mdx
+++ b/apps/docs/content/docs/dev/pagination.mdx
@@ -167,8 +167,8 @@ import { middlewareModule } from '@/api/modules/middleware/middleware.module';
import {
DataTable,
SearchParamsDataTable,
-} from 'vitnode/components/table/data-table';
-import { fetcher } from 'vitnode/lib/fetcher';
+} from '@vitnode/core/components/table/data-table';
+import { fetcher } from '@vitnode/core/lib/fetcher';
export const UsersAdminView = async ({
searchParams,
diff --git a/apps/docs/content/docs/dev/sso.mdx b/apps/docs/content/docs/dev/sso.mdx
index a682cf9bd..fb9bfafc8 100644
--- a/apps/docs/content/docs/dev/sso.mdx
+++ b/apps/docs/content/docs/dev/sso.mdx
@@ -17,7 +17,7 @@ import { Callout } from 'fumadocs-ui/components/callout';
Let's start with the basics. Create a new file for your SSO provider:
```ts title="src/utils/sso/discord_api.ts"
-import { SSOApiPlugin, getRedirectUri } from 'vitnode/api/models/sso';
+import { SSOApiPlugin, getRedirectUri } from '@vitnode/core/api/models/sso';
export const DiscordSSOApiPlugin = ({
clientId,
@@ -43,7 +43,7 @@ This is like creating a blueprint for your SSO provider. The `id` will be used i
Now let's add the magic that sends users to Discord for login:
```ts title="src/utils/sso/discord_api.ts"
-import { SSOApiPlugin, getRedirectUri } from 'vitnode/api/models/sso';
+import { SSOApiPlugin, getRedirectUri } from '@vitnode/core/api/models/sso';
export const DiscordSSOApiPlugin = ({
clientId,
@@ -94,7 +94,7 @@ export const DiscordSSOApiPlugin = ({
After the user approves access, Discord sends us a code. Let's exchange it for an access token:
```ts title="src/utils/sso/discord_api.ts"
-import { SSOApiPlugin, getRedirectUri } from 'vitnode/api/models/sso';
+import { SSOApiPlugin, getRedirectUri } from '@vitnode/core/api/models/sso';
import { HTTPException } from 'hono/http-exception';
import { ContentfulStatusCode } from 'hono/utils/http-status';
import { z } from 'zod';
@@ -205,7 +205,7 @@ export const DiscordSSOApiPlugin = ({
Finally, let's get the user's profile data using our shiny new access token:
```ts title="src/utils/sso/discord_api.ts"
-import { SSOApiPlugin, getRedirectUri } from 'vitnode/api/models/sso';
+import { SSOApiPlugin, getRedirectUri } from '@vitnode/core/api/models/sso';
import { HTTPException } from 'hono/http-exception';
import { ContentfulStatusCode } from 'hono/utils/http-status';
import { z } from 'zod';
@@ -324,7 +324,7 @@ Last step! Let's plug your new SSO provider into your app:
```ts title="src/app/api/[...route]/route.ts"
import { OpenAPIHono } from '@hono/zod-openapi';
import { handle } from 'hono/vercel';
-import { VitNodeAPI } from 'vitnode/api/config';
+import { VitNodeAPI } from '@vitnode/core/api/config';
import { DiscordSSOApiPlugin } from '@/utils/sso/discord_api';
const app = new OpenAPIHono().basePath('/api');
diff --git a/apps/docs/content/docs/guides/sso/discord.mdx b/apps/docs/content/docs/guides/sso/discord.mdx
index 42fbce732..69fa65f35 100644
--- a/apps/docs/content/docs/guides/sso/discord.mdx
+++ b/apps/docs/content/docs/guides/sso/discord.mdx
@@ -60,7 +60,7 @@ Add the Discord SSO plugin to your API routes.
```ts title="src/app/api/[...route]/route.ts"
// [!code ++]
-import { DiscordSSOApiPlugin } from 'vitnode/api/plugins/sso/discord';
+import { DiscordSSOApiPlugin } from '@vitnode/core/api/plugins/sso/discord';
VitNodeAPI({
app,
diff --git a/apps/docs/content/docs/guides/sso/facebook.mdx b/apps/docs/content/docs/guides/sso/facebook.mdx
index e22ee76d1..f1d1486f3 100644
--- a/apps/docs/content/docs/guides/sso/facebook.mdx
+++ b/apps/docs/content/docs/guides/sso/facebook.mdx
@@ -54,7 +54,7 @@ Add the Facebook SSO plugin to your API routes.
```ts title="src/app/api/[...route]/route.ts"
// [!code ++]
-import { FacebookSSOApiPlugin } from 'vitnode/api/plugins/sso/facebook';
+import { FacebookSSOApiPlugin } from '@vitnode/core/api/plugins/sso/facebook';
VitNodeAPI({
app,
diff --git a/apps/docs/content/docs/guides/sso/google.mdx b/apps/docs/content/docs/guides/sso/google.mdx
index cdff7c524..d9a9edcf2 100644
--- a/apps/docs/content/docs/guides/sso/google.mdx
+++ b/apps/docs/content/docs/guides/sso/google.mdx
@@ -115,7 +115,7 @@ Add the Discord SSO plugin to your API routes.
```ts title="src/app/api/[...route]/route.ts"
// [!code ++]
-import { GoogleSSOApiPlugin } from 'vitnode/api/plugins/sso/google';
+import { GoogleSSOApiPlugin } from '@vitnode/core/api/plugins/sso/google';
VitNodeAPI({
app,
diff --git a/apps/docs/content/docs/ui/auto-form.mdx b/apps/docs/content/docs/ui/auto-form.mdx
index 64e38b530..8f26ba47c 100644
--- a/apps/docs/content/docs/ui/auto-form.mdx
+++ b/apps/docs/content/docs/ui/auto-form.mdx
@@ -7,8 +7,8 @@ description: Component creates form based on Zod schemas & react-hook-form with
```tsx
import { z } from 'zod';
-import { AutoForm } from 'vitnode/components/form/auto-form';
-import { AutoFormInput } from 'vitnode/components/form/fields/input';
+import { AutoForm } from '@vitnode/core/components/form/auto-form';
+import { AutoFormInput } from '@vitnode/core/components/form/fields/input';
```
```ts
diff --git a/apps/docs/content/docs/ui/checkbox.mdx b/apps/docs/content/docs/ui/checkbox.mdx
index f15f008ab..b8de36019 100644
--- a/apps/docs/content/docs/ui/checkbox.mdx
+++ b/apps/docs/content/docs/ui/checkbox.mdx
@@ -17,8 +17,8 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
```ts
import { z } from 'zod';
-import { AutoForm } from 'vitnode/components/form/auto-form';
-import { AutoFormCheckbox } from 'vitnode/components/form/fields/checkbox';
+import { AutoForm } from '@vitnode/core/components/form/auto-form';
+import { AutoFormCheckbox } from '@vitnode/core/components/form/fields/checkbox';
```
```ts
@@ -50,7 +50,7 @@ const formSchema = z.object({
```ts
-import { Checkbox } from 'vitnode-frontend/components/ui/checkbox';
+import { Checkbox } from '@vitnode/core-frontend/components/ui/checkbox';
```
```tsx
diff --git a/apps/docs/content/docs/ui/data-table.mdx b/apps/docs/content/docs/ui/data-table.mdx
index 91a3fc155..779c9b19e 100644
--- a/apps/docs/content/docs/ui/data-table.mdx
+++ b/apps/docs/content/docs/ui/data-table.mdx
@@ -6,7 +6,7 @@ description: A table component with sorting, filtering, and pagination compatibl
## Usage
```ts
-import { DataTable } from 'vitnode/components/table/data-table';
+import { DataTable } from '@vitnode/core/components/table/data-table';
```
```tsx
@@ -131,9 +131,9 @@ Here's a complete example showing how to use the `DataTable` component in a page
import {
DataTable,
SearchParamsDataTable,
-} from 'vitnode/components/table/data-table';
+} from '@vitnode/core/components/table/data-table';
import { userModule } from '@/api/modules/user/user.module';
-import { fetcher } from 'vitnode/lib/fetcher';
+import { fetcher } from '@vitnode/core/lib/fetcher';
export const UsersView = async ({
searchParams,
diff --git a/apps/docs/content/docs/ui/input.mdx b/apps/docs/content/docs/ui/input.mdx
index b680b91a2..29fa01c93 100644
--- a/apps/docs/content/docs/ui/input.mdx
+++ b/apps/docs/content/docs/ui/input.mdx
@@ -16,8 +16,8 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
```ts
import { z } from 'zod';
-import { AutoForm } from 'vitnode/components/form/auto-form';
-import { AutoFormInput } from 'vitnode/components/form/fields/input';
+import { AutoForm } from '@vitnode/core/components/form/auto-form';
+import { AutoFormInput } from '@vitnode/core/components/form/fields/input';
```
```ts
@@ -60,7 +60,7 @@ const formSchema = z.object({
```ts
-import { Input } from 'vitnode-frontend/components/ui/input';
+import { Input } from '@vitnode/core-frontend/components/ui/input';
```
```tsx
diff --git a/apps/docs/content/docs/ui/not-found.mdx b/apps/docs/content/docs/ui/not-found.mdx
index dd6da8737..b6727048f 100644
--- a/apps/docs/content/docs/ui/not-found.mdx
+++ b/apps/docs/content/docs/ui/not-found.mdx
@@ -6,7 +6,7 @@ description: xxx
VitNode has implemented own 404 page. You can create your own page by modifying the `app/[locale]/(main)/not-found.tsx` file.
```tsx
-import { ErrorView } from 'vitnode/views/error/error-view';
+import { ErrorView } from '@vitnode/core/views/error/error-view';
export default function NotFoundPage() {
return ;
diff --git a/apps/docs/content/docs/ui/radio-group.mdx b/apps/docs/content/docs/ui/radio-group.mdx
index e23a85c59..1cb0ab80b 100644
--- a/apps/docs/content/docs/ui/radio-group.mdx
+++ b/apps/docs/content/docs/ui/radio-group.mdx
@@ -16,8 +16,8 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
```ts
import { z } from 'zod';
-import { AutoForm } from 'vitnode/components/form/auto-form';
-import { AutoFormRadioGroup } from 'vitnode/components/form/fields/radio-group';
+import { AutoForm } from '@vitnode/core/components/form/auto-form';
+import { AutoFormRadioGroup } from '@vitnode/core/components/form/fields/radio-group';
```
```ts
@@ -62,11 +62,11 @@ const formSchema = z.object({
```ts
-import { Label } from 'vitnode-frontend/components/ui/label';
+import { Label } from '@vitnode/core-frontend/components/ui/label';
import {
RadioGroup,
RadioGroupItem,
-} from 'vitnode-frontend/components/ui/radio-group';
+} from '@vitnode/core-frontend/components/ui/radio-group';
```
```tsx
diff --git a/apps/docs/content/docs/ui/select.mdx b/apps/docs/content/docs/ui/select.mdx
index 243ed70d4..764a02d69 100644
--- a/apps/docs/content/docs/ui/select.mdx
+++ b/apps/docs/content/docs/ui/select.mdx
@@ -17,8 +17,8 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
```ts
import { z } from 'zod';
-import { AutoForm } from 'vitnode/components/form/auto-form';
-import { AutoFormSelect } from 'vitnode/components/form/fields/select';
+import { AutoForm } from '@vitnode/core/components/form/auto-form';
+import { AutoFormSelect } from '@vitnode/core/components/form/fields/select';
```
```ts
@@ -69,7 +69,7 @@ import {
SelectItem,
SelectTrigger,
SelectValue,
-} from 'vitnode-frontend/components/ui/select';
+} from '@vitnode/core-frontend/components/ui/select';
```
```tsx
diff --git a/apps/docs/content/docs/ui/switch.mdx b/apps/docs/content/docs/ui/switch.mdx
index 59d726019..15eb39115 100644
--- a/apps/docs/content/docs/ui/switch.mdx
+++ b/apps/docs/content/docs/ui/switch.mdx
@@ -17,8 +17,8 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
```ts
import { z } from 'zod';
-import { AutoForm } from 'vitnode/components/form/auto-form';
-import { AutoFormCheckbox } from 'vitnode/components/form/fields/checkbox';
+import { AutoForm } from '@vitnode/core/components/form/auto-form';
+import { AutoFormCheckbox } from '@vitnode/core/components/form/fields/checkbox';
```
```ts
@@ -50,7 +50,7 @@ const formSchema = z.object({
```ts
-import { Switch } from 'vitnode-frontend/components/ui/switch';
+import { Switch } from '@vitnode/core-frontend/components/ui/switch';
```
```tsx
diff --git a/apps/docs/content/docs/ui/textarea.mdx b/apps/docs/content/docs/ui/textarea.mdx
index 285c7e54a..da393a549 100644
--- a/apps/docs/content/docs/ui/textarea.mdx
+++ b/apps/docs/content/docs/ui/textarea.mdx
@@ -17,8 +17,8 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
```ts
import { z } from 'zod';
-import { AutoForm } from 'vitnode/components/form/auto-form';
-import { AutoFormTextarea } from 'vitnode/components/form/fields/textarea';
+import { AutoForm } from '@vitnode/core/components/form/auto-form';
+import { AutoFormTextarea } from '@vitnode/core/components/form/fields/textarea';
```
```ts
@@ -50,7 +50,7 @@ const formSchema = z.object({
```ts
-import { Textarea } from 'vitnode-frontend/components/ui/textarea';
+import { Textarea } from '@vitnode/core-frontend/components/ui/textarea';
```
```tsx
diff --git a/apps/docs/package.json b/apps/docs/package.json
index 1f2437197..82d756631 100644
--- a/apps/docs/package.json
+++ b/apps/docs/package.json
@@ -18,7 +18,7 @@
"next": "^15.3.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
- "vitnode": "workspace:*"
+ "@vitnode/core": "workspace:*"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.4",
diff --git a/apps/docs/src/app/(home)/page.tsx b/apps/docs/src/app/(home)/page.tsx
index cea07d8aa..aca80a00b 100644
--- a/apps/docs/src/app/(home)/page.tsx
+++ b/apps/docs/src/app/(home)/page.tsx
@@ -1,8 +1,8 @@
import Link from 'fumadocs-core/link';
import { PlusIcon } from 'lucide-react';
import { Metadata } from 'next';
-import { buttonVariants } from 'vitnode/components/ui/button';
-import { cn } from 'vitnode/lib/utils';
+import { buttonVariants } from '@vitnode/core/components/ui/button';
+import { cn } from '@vitnode/core/lib/utils';
export const metadata: Metadata = {
title: 'VitNode: Extendable Framework for Building Apps',
diff --git a/apps/docs/src/components/logo-vitnode.tsx b/apps/docs/src/components/logo-vitnode.tsx
index 5dc63d957..6268f597e 100644
--- a/apps/docs/src/components/logo-vitnode.tsx
+++ b/apps/docs/src/components/logo-vitnode.tsx
@@ -1,4 +1,4 @@
-import { cn } from 'vitnode/lib/utils';
+import { cn } from '@vitnode/core/lib/utils';
export const LogoVitNode = ({
className,
diff --git a/apps/docs/src/content/docs/guides/sso/discord.mdx b/apps/docs/src/content/docs/guides/sso/discord.mdx
index 42fbce732..69fa65f35 100644
--- a/apps/docs/src/content/docs/guides/sso/discord.mdx
+++ b/apps/docs/src/content/docs/guides/sso/discord.mdx
@@ -60,7 +60,7 @@ Add the Discord SSO plugin to your API routes.
```ts title="src/app/api/[...route]/route.ts"
// [!code ++]
-import { DiscordSSOApiPlugin } from 'vitnode/api/plugins/sso/discord';
+import { DiscordSSOApiPlugin } from '@vitnode/core/api/plugins/sso/discord';
VitNodeAPI({
app,
diff --git a/apps/docs/src/content/docs/guides/sso/facebook.mdx b/apps/docs/src/content/docs/guides/sso/facebook.mdx
index e22ee76d1..f1d1486f3 100644
--- a/apps/docs/src/content/docs/guides/sso/facebook.mdx
+++ b/apps/docs/src/content/docs/guides/sso/facebook.mdx
@@ -54,7 +54,7 @@ Add the Facebook SSO plugin to your API routes.
```ts title="src/app/api/[...route]/route.ts"
// [!code ++]
-import { FacebookSSOApiPlugin } from 'vitnode/api/plugins/sso/facebook';
+import { FacebookSSOApiPlugin } from '@vitnode/core/api/plugins/sso/facebook';
VitNodeAPI({
app,
diff --git a/apps/docs/src/content/docs/guides/sso/google.mdx b/apps/docs/src/content/docs/guides/sso/google.mdx
index cdff7c524..d9a9edcf2 100644
--- a/apps/docs/src/content/docs/guides/sso/google.mdx
+++ b/apps/docs/src/content/docs/guides/sso/google.mdx
@@ -115,7 +115,7 @@ Add the Discord SSO plugin to your API routes.
```ts title="src/app/api/[...route]/route.ts"
// [!code ++]
-import { GoogleSSOApiPlugin } from 'vitnode/api/plugins/sso/google';
+import { GoogleSSOApiPlugin } from '@vitnode/core/api/plugins/sso/google';
VitNodeAPI({
app,
diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts
index 19e4cd5ad..adef895c1 100644
--- a/apps/web/next.config.ts
+++ b/apps/web/next.config.ts
@@ -1,5 +1,5 @@
import type { NextConfig } from 'next';
-import { vitNodeNextConfig } from 'vitnode/config/next.config';
+import { vitNodeNextConfig } from '@vitnode/core/config/next.config';
const nextConfig: NextConfig = {
/* config options here */
diff --git a/apps/web/package.json b/apps/web/package.json
index 66b5cf072..f689f91fa 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -36,8 +36,8 @@
"react-dom": "^19.1.0",
"react-hook-form": "^7.56.1",
"sonner": "^2.0.3",
- "vitnode": "workspace:*",
- "vitnode-blog": "workspace:*",
+ "@vitnode/core": "workspace:*",
+ "@vitnode/blog": "workspace:*",
"zod": "^3.24.3"
},
"devDependencies": {
diff --git a/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/layout.tsx b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/layout.tsx
index 8bc961a91..112fe952e 100644
--- a/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/layout.tsx
+++ b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/layout.tsx
@@ -1,4 +1,4 @@
-import { TestLayout } from 'vitnode-blog/views/test/layout';
+import { TestLayout } from '@vitnode/blog/views/test/layout';
export default function Layout({ children }: { children: React.ReactNode }) {
return {children};
diff --git a/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/page.tsx b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/page.tsx
index d89100e90..c3458bc27 100644
--- a/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/page.tsx
+++ b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/page.tsx
@@ -1,6 +1,6 @@
-import { Test } from 'vitnode-blog/views/test';
-import { TestClient } from 'vitnode-blog/views/test/client';
-import { Link } from 'vitnode/lib/navigation';
+import { Test } from '@vitnode/blog/views/test';
+import { TestClient } from '@vitnode/blog/views/test/client';
+import { Link } from '@vitnode/core/lib/navigation';
export default function Page() {
return (
diff --git a/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/test/page.tsx b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/test/page.tsx
index c34490860..46501b448 100644
--- a/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/test/page.tsx
+++ b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-blog)/blog/test/page.tsx
@@ -1,4 +1,4 @@
-import { Link } from 'vitnode/lib/navigation';
+import { Link } from '@vitnode/core/lib/navigation';
export default function Page() {
return (
diff --git a/apps/web/src/app/[locale]/(main)/(vitnode)/login/page.tsx b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/login/page.tsx
similarity index 83%
rename from apps/web/src/app/[locale]/(main)/(vitnode)/login/page.tsx
rename to apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/login/page.tsx
index 9a04c0d56..291f8fbe6 100644
--- a/apps/web/src/app/[locale]/(main)/(vitnode)/login/page.tsx
+++ b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/login/page.tsx
@@ -1,7 +1,7 @@
import type { Metadata } from 'next/dist/types';
+import { SignInView } from '@vitnode/core/views/auth/sign-in/sign-in-view';
import { getTranslations } from 'next-intl/server';
-import { SignInView } from 'vitnode/views/auth/sign-in/sign-in-view';
export const generateMetadata = async ({
locale,
diff --git a/apps/web/src/app/[locale]/(main)/(vitnode)/login/sso/[providerId]/page.tsx b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/login/sso/[providerId]/page.tsx
similarity index 80%
rename from apps/web/src/app/[locale]/(main)/(vitnode)/login/sso/[providerId]/page.tsx
rename to apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/login/sso/[providerId]/page.tsx
index bf0d48947..31b3fd3f1 100644
--- a/apps/web/src/app/[locale]/(main)/(vitnode)/login/sso/[providerId]/page.tsx
+++ b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/login/sso/[providerId]/page.tsx
@@ -1,4 +1,4 @@
-import { CallbackSSOView } from 'vitnode/views/auth/sso/callback/callback-sso-view';
+import { CallbackSSOView } from '@vitnode/core/views/auth/sso/callback/callback-sso-view';
export default async function Page({
params,
diff --git a/apps/web/src/app/[locale]/(main)/(vitnode)/register/page.tsx b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/register/page.tsx
similarity index 83%
rename from apps/web/src/app/[locale]/(main)/(vitnode)/register/page.tsx
rename to apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/register/page.tsx
index 4c9e16800..fa13dda37 100644
--- a/apps/web/src/app/[locale]/(main)/(vitnode)/register/page.tsx
+++ b/apps/web/src/app/[locale]/(main)/(plugins)/(vitnode-core)/register/page.tsx
@@ -1,7 +1,7 @@
import type { Metadata } from 'next/dist/types';
+import { SignUpView } from '@vitnode/core/views/auth/sign-up/sign-up-view';
import { getTranslations } from 'next-intl/server';
-import { SignUpView } from 'vitnode/views/auth/sign-up/sign-up-view';
export const generateMetadata = async ({
locale,
diff --git a/apps/web/src/app/[locale]/(main)/layout.tsx b/apps/web/src/app/[locale]/(main)/layout.tsx
index 7b48fe071..b55a566bb 100644
--- a/apps/web/src/app/[locale]/(main)/layout.tsx
+++ b/apps/web/src/app/[locale]/(main)/layout.tsx
@@ -1,5 +1,5 @@
-import { LogoVitNode } from 'vitnode/components/logo-vitnode';
-import { ThemeLayout } from 'vitnode/views/layouts/theme/layout';
+import { LogoVitNode } from '@vitnode/core/components/logo-vitnode';
+import { ThemeLayout } from '@vitnode/core/views/layouts/theme/layout';
export default function Layout({ children }: { children: React.ReactNode }) {
return (
diff --git a/apps/web/src/app/[locale]/(main)/not-found.tsx b/apps/web/src/app/[locale]/(main)/not-found.tsx
index 9fe5db24c..1c4db2aeb 100644
--- a/apps/web/src/app/[locale]/(main)/not-found.tsx
+++ b/apps/web/src/app/[locale]/(main)/not-found.tsx
@@ -1,4 +1,4 @@
-import { ErrorView } from 'vitnode/views/error/error-view';
+import { ErrorView } from '@vitnode/core/views/error/error-view';
export default function NotFoundPage() {
return ;
diff --git a/apps/web/src/app/[locale]/(main)/page.tsx b/apps/web/src/app/[locale]/(main)/page.tsx
index 1afe41cf8..11db00745 100644
--- a/apps/web/src/app/[locale]/(main)/page.tsx
+++ b/apps/web/src/app/[locale]/(main)/page.tsx
@@ -1,9 +1,9 @@
+import { LogoVitNode } from '@vitnode/core/components/logo-vitnode';
+import { buttonVariants } from '@vitnode/core/components/ui/button';
+import { Link } from '@vitnode/core/lib/navigation';
+import { cn } from '@vitnode/core/lib/utils';
import { ArrowRight, Book, Terminal } from 'lucide-react';
import { getTranslations } from 'next-intl/server';
-import { LogoVitNode } from 'vitnode/components/logo-vitnode';
-import { buttonVariants } from 'vitnode/components/ui/button';
-import { Link } from 'vitnode/lib/navigation';
-import { cn } from 'vitnode/lib/utils';
export default async function Home({
params,
diff --git a/apps/web/src/app/[locale]/admin/(auth)/(plugins)/(vitnode-core)/test/page.tsx b/apps/web/src/app/[locale]/admin/(auth)/(plugins)/(vitnode-core)/test/page.tsx
new file mode 100644
index 000000000..f0f142aca
--- /dev/null
+++ b/apps/web/src/app/[locale]/admin/(auth)/(plugins)/(vitnode-core)/test/page.tsx
@@ -0,0 +1,5 @@
+import { TestView } from '@vitnode/core/views/admin/views/core/test';
+
+export default function Page() {
+ return ;
+}
diff --git a/apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/users/page.tsx b/apps/web/src/app/[locale]/admin/(auth)/(plugins)/(vitnode-core)/users/page.tsx
similarity index 58%
rename from apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/users/page.tsx
rename to apps/web/src/app/[locale]/admin/(auth)/(plugins)/(vitnode-core)/users/page.tsx
index 306e0807b..baf01a179 100644
--- a/apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/users/page.tsx
+++ b/apps/web/src/app/[locale]/admin/(auth)/(plugins)/(vitnode-core)/users/page.tsx
@@ -1,4 +1,4 @@
-import { UsersAdminView } from 'vitnode/views/admin/views/core/users/users-admin-view';
+import { UsersAdminView } from '@vitnode/core/views/admin/views/core/users/users-admin-view';
export default function Page(
props: React.ComponentProps,
diff --git a/apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/page.tsx b/apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/page.tsx
deleted file mode 100644
index 63745336c..000000000
--- a/apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/page.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { DashboardAdminView } from 'vitnode/views/admin/views/core/dashboard/dashboard-admin-view';
-
-export default function Page() {
- return ;
-}
diff --git a/apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/test/page.tsx b/apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/test/page.tsx
deleted file mode 100644
index 92ea2fc30..000000000
--- a/apps/web/src/app/[locale]/admin/(auth)/(vitnode)/core/test/page.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { TestView } from 'vitnode/views/admin/views/core/test';
-
-export default function Page() {
- return ;
-}
diff --git a/apps/web/src/app/[locale]/admin/(auth)/layout.tsx b/apps/web/src/app/[locale]/admin/(auth)/layout.tsx
index 952523ac1..70967ed39 100644
--- a/apps/web/src/app/[locale]/admin/(auth)/layout.tsx
+++ b/apps/web/src/app/[locale]/admin/(auth)/layout.tsx
@@ -1,4 +1,4 @@
-import { AdminLayout } from 'vitnode/views/admin/layouts/admin-layout';
+import { AdminLayout } from '@vitnode/core/views/admin/layouts/admin-layout';
export default function Layout(
props: React.ComponentProps,
diff --git a/apps/web/src/app/[locale]/admin/not-found.tsx b/apps/web/src/app/[locale]/admin/not-found.tsx
index 9fe5db24c..1c4db2aeb 100644
--- a/apps/web/src/app/[locale]/admin/not-found.tsx
+++ b/apps/web/src/app/[locale]/admin/not-found.tsx
@@ -1,4 +1,4 @@
-import { ErrorView } from 'vitnode/views/error/error-view';
+import { ErrorView } from '@vitnode/core/views/error/error-view';
export default function NotFoundPage() {
return ;
diff --git a/apps/web/src/app/[locale]/admin/page.tsx b/apps/web/src/app/[locale]/admin/page.tsx
index 1f2c8426c..9238ffa31 100644
--- a/apps/web/src/app/[locale]/admin/page.tsx
+++ b/apps/web/src/app/[locale]/admin/page.tsx
@@ -1,4 +1,4 @@
-import { SignInAdminView } from 'vitnode/views/admin/sign-in/sign-in-admin-view';
+import { SignInAdminView } from '@vitnode/core/views/admin/sign-in/sign-in-admin-view';
export default function Page() {
return ;
diff --git a/apps/web/src/app/[locale]/layout.tsx b/apps/web/src/app/[locale]/layout.tsx
index bce550ffd..e19ecf39c 100644
--- a/apps/web/src/app/[locale]/layout.tsx
+++ b/apps/web/src/app/[locale]/layout.tsx
@@ -1,12 +1,12 @@
+import type { RootLayoutProps } from '@vitnode/core/views/layouts/root-layout';
import type { Metadata } from 'next';
-import type { RootLayoutProps } from 'vitnode/views/layouts/root-layout';
import { vitNodeConfig } from '@/vitnode.config';
-import { Geist, Geist_Mono } from 'next/font/google';
import {
generateMetadataRootLayout,
RootLayout,
-} from 'vitnode/views/layouts/root-layout';
+} from '@vitnode/core/views/layouts/root-layout';
+import { Geist, Geist_Mono } from 'next/font/google';
const geistSans = Geist({
variable: '--font-geist-sans',
diff --git a/apps/web/src/app/api/[...route]/route.ts b/apps/web/src/app/api/[...route]/route.ts
index 267ff5d37..7721aa797 100644
--- a/apps/web/src/app/api/[...route]/route.ts
+++ b/apps/web/src/app/api/[...route]/route.ts
@@ -1,8 +1,8 @@
import { vitNodeApiConfig } from '@/vitnode.api.config';
import { vitNodeConfig } from '@/vitnode.config';
import { OpenAPIHono } from '@hono/zod-openapi';
+import { VitNodeAPI } from '@vitnode/core/api/config';
import { handle } from 'hono/vercel';
-import { VitNodeAPI } from 'vitnode/api/config';
const app = new OpenAPIHono().basePath('/api');
VitNodeAPI({
diff --git a/apps/web/src/app/global-error.tsx b/apps/web/src/app/global-error.tsx
index d93df4e31..5633ed557 100644
--- a/apps/web/src/app/global-error.tsx
+++ b/apps/web/src/app/global-error.tsx
@@ -1,11 +1,11 @@
'use client';
import { vitNodeConfig } from '@/vitnode.config';
-import { Geist, Geist_Mono } from 'next/font/google';
+import { GlobalErrorView } from '@vitnode/core/views/error/global-error-view';
import './globals.css';
-import { GlobalErrorView } from 'vitnode/views/error/global-error-view';
+import { Geist, Geist_Mono } from 'next/font/google';
const geistSans = Geist({
variable: '--font-geist-sans',
diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css
index b11b3fb84..3123b1d23 100644
--- a/apps/web/src/app/globals.css
+++ b/apps/web/src/app/globals.css
@@ -2,8 +2,8 @@
@import 'tw-animate-css';
-@source "../../node_modules/vitnode/dist/src/components";
-@source "../../node_modules/vitnode/dist/src/views";
+@source "../../node_modules/@vitnode/core/dist/src/components";
+@source "../../node_modules/@vitnode/core/dist/src/views";
@custom-variant dark (&:is(.dark *));
diff --git a/apps/web/src/vitnode.api.config.ts b/apps/web/src/vitnode.api.config.ts
index 06b3cc7bb..e977708b5 100644
--- a/apps/web/src/vitnode.api.config.ts
+++ b/apps/web/src/vitnode.api.config.ts
@@ -1,9 +1,9 @@
-import { blogApiPlugin } from 'vitnode-blog/config.api';
-import { NodemailerEmailPlugin } from 'vitnode/api/plugins/email/nodemailer';
-import { DiscordSSOApiPlugin } from 'vitnode/api/plugins/sso/discord';
-import { FacebookSSOApiPlugin } from 'vitnode/api/plugins/sso/facebook';
-import { GoogleSSOApiPlugin } from 'vitnode/api/plugins/sso/google';
-import { buildApiConfig } from 'vitnode/vitnode.config';
+import { blogApiPlugin } from '@vitnode/blog/config.api';
+import { NodemailerEmailPlugin } from '@vitnode/core/api/plugins/email/nodemailer';
+import { DiscordSSOApiPlugin } from '@vitnode/core/api/plugins/sso/discord';
+import { FacebookSSOApiPlugin } from '@vitnode/core/api/plugins/sso/facebook';
+import { GoogleSSOApiPlugin } from '@vitnode/core/api/plugins/sso/google';
+import { buildApiConfig } from '@vitnode/core/vitnode.config';
export const vitNodeApiConfig = buildApiConfig({
plugins: [blogApiPlugin()],
diff --git a/apps/web/src/vitnode.config.ts b/apps/web/src/vitnode.config.ts
index 6dab4cc08..4999c2f4f 100644
--- a/apps/web/src/vitnode.config.ts
+++ b/apps/web/src/vitnode.config.ts
@@ -1,6 +1,6 @@
+import { blogPlugin } from '@vitnode/blog/plugin';
+import { buildConfig, handleRequestConfig } from '@vitnode/core/vitnode.config';
import { getRequestConfig } from 'next-intl/server';
-import { blogPlugin } from 'vitnode-blog/plugin';
-import { buildConfig, handleRequestConfig } from 'vitnode/vitnode.config';
export const vitNodeConfig = buildConfig({
metadata: {
diff --git a/packages/vitnode/package.json b/packages/vitnode/package.json
index dd37eba80..6f354539d 100644
--- a/packages/vitnode/package.json
+++ b/packages/vitnode/package.json
@@ -1,5 +1,5 @@
{
- "name": "vitnode",
+ "name": "@vitnode/core",
"version": "2.0.0-canary.0",
"devDependencies": {
"@hono/swagger-ui": "^0.5.1",
diff --git a/packages/vitnode/scripts/plugin.ts b/packages/vitnode/scripts/plugin.ts
index 83d785505..1497df257 100644
--- a/packages/vitnode/scripts/plugin.ts
+++ b/packages/vitnode/scripts/plugin.ts
@@ -33,6 +33,9 @@ export const processPlugin = ({ initMessage }: { initMessage: string }) => {
return;
}
+ // Transform plugin name for path usage
+ const pluginPathName = pluginName.replace(/\//g, '-').replace(/@/g, '');
+
const mainDest = join(
repoRoot,
'apps',
@@ -41,9 +44,7 @@ export const processPlugin = ({ initMessage }: { initMessage: string }) => {
'app',
'[locale]',
'(main)',
- pluginName === 'vitnode'
- ? join('(vitnode)')
- : join('(plugins)', `(${pluginName})`),
+ join('(plugins)', `(${pluginPathName})`),
);
const adminDest = join(
repoRoot,
@@ -54,9 +55,7 @@ export const processPlugin = ({ initMessage }: { initMessage: string }) => {
'[locale]',
'admin',
'(auth)',
- pluginName === 'vitnode'
- ? join('(vitnode)', 'core')
- : join('(plugins)', `(${pluginName})`),
+ join('(plugins)', `(${pluginPathName})`),
);
// tell the copier about both trees
diff --git a/packages/vitnode/scripts/prepare/prepare-plugins.ts b/packages/vitnode/scripts/prepare/prepare-plugins.ts
index 1752cad63..c19fde63c 100644
--- a/packages/vitnode/scripts/prepare/prepare-plugins.ts
+++ b/packages/vitnode/scripts/prepare/prepare-plugins.ts
@@ -44,6 +44,9 @@ export const preparePlugins = async () => {
return;
}
+ // Transform plugin name for path usage
+ const pluginPathName = pluginName.replace(/\//g, '-').replace(/@/g, '');
+
const mainDest = join(
repoRoot,
'apps',
@@ -52,9 +55,7 @@ export const preparePlugins = async () => {
'app',
'[locale]',
'(main)',
- pluginName === 'vitnode'
- ? join('(vitnode)')
- : join('(plugins)', `(${pluginName})`),
+ join('(plugins)', `(${pluginPathName})`),
);
const adminDest = join(
repoRoot,
@@ -65,9 +66,7 @@ export const preparePlugins = async () => {
'[locale]',
'admin',
'(auth)',
- pluginName === 'vitnode'
- ? join('(vitnode)', 'core')
- : join('(plugins)', `(${pluginName})`),
+ join('(plugins)', `(${pluginPathName})`),
);
// Define source configurations for this plugin
diff --git a/packages/vitnode/src/api/lib/check-plugin-name.ts b/packages/vitnode/src/api/lib/check-plugin-name.ts
index 816b7e6e5..32c7dfa2f 100644
--- a/packages/vitnode/src/api/lib/check-plugin-name.ts
+++ b/packages/vitnode/src/api/lib/check-plugin-name.ts
@@ -22,9 +22,9 @@ export const checkPluginName = (pluginName: string): null | PackageJSON => {
const path = join(process.cwd(), 'node_modules', pluginName, 'package.json');
- if (!existsSync(path) && pluginName !== 'vitnode') {
+ if (!existsSync(path)) {
throw new Error(
- `package.json file not found at ${path}. If you are the developer of this plugin, please ensure you are using the correct plugin name as specified in its package.json.`,
+ `package.json file not found at ${path}. Please ensure you are using the correct plugin name as specified in its package.json.`,
);
}
diff --git a/packages/vitnode/src/api/lib/route.ts b/packages/vitnode/src/api/lib/route.ts
index 8b069003c..22f917372 100644
--- a/packages/vitnode/src/api/lib/route.ts
+++ b/packages/vitnode/src/api/lib/route.ts
@@ -33,13 +33,10 @@ export const buildRoute = <
getRoutingPath: () => RoutingPath;
};
} => {
- const pluginTag =
- plugin === 'vitnode'
- ? 'Core'
- : plugin
- .split(/[-_]/)
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
- .join(' ');
+ const pluginTag = plugin
+ .split(/[-_]/)
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
+ .join(' ');
const tags = [pluginTag, ...(route.tags ?? [])];
diff --git a/packages/vitnode/src/api/modules/admin/admin.module.ts b/packages/vitnode/src/api/modules/admin/admin.module.ts
index 70b3935b5..940f41372 100644
--- a/packages/vitnode/src/api/modules/admin/admin.module.ts
+++ b/packages/vitnode/src/api/modules/admin/admin.module.ts
@@ -5,7 +5,7 @@ import { usersAdminModule } from './users/users.admin.module';
export const adminModule = buildModule({
name: 'admin',
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
routes: [sessionAdminRoute],
modules: [usersAdminModule],
});
diff --git a/packages/vitnode/src/api/modules/admin/routes/session.route.ts b/packages/vitnode/src/api/modules/admin/routes/session.route.ts
index b8d907e6c..cb29bacf1 100644
--- a/packages/vitnode/src/api/modules/admin/routes/session.route.ts
+++ b/packages/vitnode/src/api/modules/admin/routes/session.route.ts
@@ -4,7 +4,7 @@ import { HTTPException } from 'hono/http-exception';
import { z } from 'zod';
export const sessionAdminRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'get',
description: 'Verify admin session',
diff --git a/packages/vitnode/src/api/modules/admin/users/routes/list.route.ts b/packages/vitnode/src/api/modules/admin/users/routes/list.route.ts
index 37d02485e..3efa998f9 100644
--- a/packages/vitnode/src/api/modules/admin/users/routes/list.route.ts
+++ b/packages/vitnode/src/api/modules/admin/users/routes/list.route.ts
@@ -9,7 +9,7 @@ import { core_users } from '@/database/schema/users';
import { z } from '@hono/zod-openapi';
export const listUsersAdminRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'get',
description: 'Get list of all users',
diff --git a/packages/vitnode/src/api/modules/admin/users/routes/users.route.ts b/packages/vitnode/src/api/modules/admin/users/routes/users.route.ts
index 14132f645..72545e7c0 100644
--- a/packages/vitnode/src/api/modules/admin/users/routes/users.route.ts
+++ b/packages/vitnode/src/api/modules/admin/users/routes/users.route.ts
@@ -9,7 +9,7 @@ import { core_users } from '@/database/schema/users';
import { z } from '@hono/zod-openapi';
export const usersAdminRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'get',
description: 'Get list of all users (Admin only)',
diff --git a/packages/vitnode/src/api/modules/admin/users/users.admin.module.ts b/packages/vitnode/src/api/modules/admin/users/users.admin.module.ts
index 1ea5193b5..513a0b86e 100644
--- a/packages/vitnode/src/api/modules/admin/users/users.admin.module.ts
+++ b/packages/vitnode/src/api/modules/admin/users/users.admin.module.ts
@@ -4,6 +4,6 @@ import { listUsersAdminRoute } from './routes/list.route';
export const usersAdminModule = buildModule({
name: 'users',
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
routes: [listUsersAdminRoute],
});
diff --git a/packages/vitnode/src/api/modules/middleware/middleware.module.ts b/packages/vitnode/src/api/modules/middleware/middleware.module.ts
index 7669ea521..bc1f307aa 100644
--- a/packages/vitnode/src/api/modules/middleware/middleware.module.ts
+++ b/packages/vitnode/src/api/modules/middleware/middleware.module.ts
@@ -4,7 +4,7 @@ import { routeMiddleware } from './route';
import { routeTestMiddleware } from './test';
export const middlewareModule = buildModule({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
name: 'middleware',
routes: [routeMiddleware, routeTestMiddleware],
});
diff --git a/packages/vitnode/src/api/modules/middleware/route.ts b/packages/vitnode/src/api/modules/middleware/route.ts
index 7e6e8045b..6dd8dd71c 100644
--- a/packages/vitnode/src/api/modules/middleware/route.ts
+++ b/packages/vitnode/src/api/modules/middleware/route.ts
@@ -3,7 +3,7 @@ import { EmailModel } from '@/api/models/email';
import { z } from 'zod';
export const routeMiddleware = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
path: '/',
method: 'get',
diff --git a/packages/vitnode/src/api/modules/middleware/test.ts b/packages/vitnode/src/api/modules/middleware/test.ts
index a6d5bd054..b2f65987e 100644
--- a/packages/vitnode/src/api/modules/middleware/test.ts
+++ b/packages/vitnode/src/api/modules/middleware/test.ts
@@ -10,7 +10,7 @@ import {
} from '../../lib/with-pagination';
export const routeTestMiddleware = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
path: '/test',
method: 'get',
diff --git a/packages/vitnode/src/api/modules/users/routes/session.route.ts b/packages/vitnode/src/api/modules/users/routes/session.route.ts
index e7942c3eb..597e924c4 100644
--- a/packages/vitnode/src/api/modules/users/routes/session.route.ts
+++ b/packages/vitnode/src/api/modules/users/routes/session.route.ts
@@ -3,7 +3,7 @@ import { SessionAdminModel } from '@/api/models/session-admin';
import { z } from 'zod';
export const sessionRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'get',
description: 'Verify session',
diff --git a/packages/vitnode/src/api/modules/users/routes/sign-in.route.ts b/packages/vitnode/src/api/modules/users/routes/sign-in.route.ts
index 4ee8f87e7..85b49b1df 100644
--- a/packages/vitnode/src/api/modules/users/routes/sign-in.route.ts
+++ b/packages/vitnode/src/api/modules/users/routes/sign-in.route.ts
@@ -5,7 +5,7 @@ import { UserModel } from '@/api/models/user';
import { z } from 'zod';
export const signInRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'post',
description: 'Sign in with email and password',
diff --git a/packages/vitnode/src/api/modules/users/routes/sign-out.route.ts b/packages/vitnode/src/api/modules/users/routes/sign-out.route.ts
index 32c260ed4..f13f5c08a 100644
--- a/packages/vitnode/src/api/modules/users/routes/sign-out.route.ts
+++ b/packages/vitnode/src/api/modules/users/routes/sign-out.route.ts
@@ -4,7 +4,7 @@ import { SessionAdminModel } from '@/api/models/session-admin';
import { z } from '@hono/zod-openapi';
export const signOutRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'delete',
description: 'Sign out the current admin',
diff --git a/packages/vitnode/src/api/modules/users/routes/sign-up.route.ts b/packages/vitnode/src/api/modules/users/routes/sign-up.route.ts
index b048b56e7..cad27f562 100644
--- a/packages/vitnode/src/api/modules/users/routes/sign-up.route.ts
+++ b/packages/vitnode/src/api/modules/users/routes/sign-up.route.ts
@@ -6,7 +6,7 @@ import { z } from 'zod';
const nameRegex = /^(?!.* {2})[\p{L}\p{N}._@ -]*$/u;
export const signUpRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'post',
description: 'Create a new user',
diff --git a/packages/vitnode/src/api/modules/users/routes/test.route.ts b/packages/vitnode/src/api/modules/users/routes/test.route.ts
index 47b7128e7..bfeb97879 100644
--- a/packages/vitnode/src/api/modules/users/routes/test.route.ts
+++ b/packages/vitnode/src/api/modules/users/routes/test.route.ts
@@ -2,7 +2,7 @@ import { buildRoute } from '@/api/lib/route';
import { z } from 'zod';
export const testRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'get',
description: 'Test route',
diff --git a/packages/vitnode/src/api/modules/users/sso/routes/callback.route.ts b/packages/vitnode/src/api/modules/users/sso/routes/callback.route.ts
index 8bef71c4c..3fb9f1426 100644
--- a/packages/vitnode/src/api/modules/users/sso/routes/callback.route.ts
+++ b/packages/vitnode/src/api/modules/users/sso/routes/callback.route.ts
@@ -4,7 +4,7 @@ import { SSOModel } from '@/api/models/sso';
import { z } from 'zod';
export const callbackRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'get',
description: 'SSO Callback',
diff --git a/packages/vitnode/src/api/modules/users/sso/routes/create-url.route.ts b/packages/vitnode/src/api/modules/users/sso/routes/create-url.route.ts
index 818b6eb3c..0bca51227 100644
--- a/packages/vitnode/src/api/modules/users/sso/routes/create-url.route.ts
+++ b/packages/vitnode/src/api/modules/users/sso/routes/create-url.route.ts
@@ -3,7 +3,7 @@ import { SSOModel } from '@/api/models/sso';
import { z } from 'zod';
export const createUrlRoute = buildRoute({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
route: {
method: 'post',
description: 'Generate SSO URL',
diff --git a/packages/vitnode/src/api/modules/users/sso/sso.module.ts b/packages/vitnode/src/api/modules/users/sso/sso.module.ts
index 51f8a2e89..7dd405e66 100644
--- a/packages/vitnode/src/api/modules/users/sso/sso.module.ts
+++ b/packages/vitnode/src/api/modules/users/sso/sso.module.ts
@@ -5,6 +5,6 @@ import { createUrlRoute } from './routes/create-url.route';
export const ssoUserModule = buildModule({
name: 'sso',
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
routes: [callbackRoute, createUrlRoute],
});
diff --git a/packages/vitnode/src/api/modules/users/users.module.ts b/packages/vitnode/src/api/modules/users/users.module.ts
index 76126e18a..55aaafcee 100644
--- a/packages/vitnode/src/api/modules/users/users.module.ts
+++ b/packages/vitnode/src/api/modules/users/users.module.ts
@@ -8,7 +8,7 @@ import { testRoute } from './routes/test.route';
import { ssoUserModule } from './sso/sso.module';
export const usersModule = buildModule({
- plugin: 'vitnode',
+ plugin: '@vitnode/core',
name: 'users',
routes: [sessionRoute, signInRoute, signOutRoute, signUpRoute, testRoute],
modules: [ssoUserModule],
diff --git a/packages/vitnode/src/api/plugin.ts b/packages/vitnode/src/api/plugin.ts
index 307e5556d..8b9570d88 100644
--- a/packages/vitnode/src/api/plugin.ts
+++ b/packages/vitnode/src/api/plugin.ts
@@ -4,6 +4,6 @@ import { middlewareModule } from './modules/middleware/middleware.module';
import { usersModule } from './modules/users/users.module';
export const newBuildPluginApiCore = buildApiPlugin({
- name: 'vitnode',
+ name: '@vitnode/core',
modules: [middlewareModule, usersModule, adminModule],
});
diff --git a/plugins/blog/package.json b/plugins/blog/package.json
index d6f16cacb..21a2783a3 100644
--- a/plugins/blog/package.json
+++ b/plugins/blog/package.json
@@ -1,5 +1,5 @@
{
- "name": "vitnode-blog",
+ "name": "@vitnode/blog",
"version": "2.0.0-canary.0",
"description": "Backend wrapper for VitNode projects",
"author": "VitNode",
@@ -28,7 +28,7 @@
"next-intl": "^4.1.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
- "vitnode": "workspace:*",
+ "@vitnode/core": "workspace:*",
"zod": "^3.24.3"
},
"devDependencies": {
diff --git a/plugins/blog/src/api/modules/categories/categories.module.ts b/plugins/blog/src/api/modules/categories/categories.module.ts
index 438103d9a..47f947ab2 100644
--- a/plugins/blog/src/api/modules/categories/categories.module.ts
+++ b/plugins/blog/src/api/modules/categories/categories.module.ts
@@ -1,9 +1,9 @@
-import { buildModule } from 'vitnode/api/lib/module';
+import { buildModule } from '@vitnode/core/api/lib/module';
import { categoriesRoute } from './route';
export const categoriesModule = buildModule({
- plugin: 'vitnode-blog',
+ plugin: '@vitnode/blog',
name: 'categories',
routes: [categoriesRoute],
});
diff --git a/plugins/blog/src/api/modules/categories/route.ts b/plugins/blog/src/api/modules/categories/route.ts
index d4a2dd6b9..4942e01a5 100644
--- a/plugins/blog/src/api/modules/categories/route.ts
+++ b/plugins/blog/src/api/modules/categories/route.ts
@@ -1,8 +1,8 @@
import { z } from '@hono/zod-openapi';
-import { buildRoute } from 'vitnode/api/lib/route';
+import { buildRoute } from '@vitnode/core/api/lib/route';
export const categoriesRoute = buildRoute({
- plugin: 'vitnode-blog',
+ plugin: '@vitnode/blog',
route: {
method: 'get',
path: '/',
diff --git a/plugins/blog/src/app/blog/page.tsx b/plugins/blog/src/app/blog/page.tsx
index 085899b19..1cb582c95 100644
--- a/plugins/blog/src/app/blog/page.tsx
+++ b/plugins/blog/src/app/blog/page.tsx
@@ -1,4 +1,4 @@
-import { Link } from 'vitnode/lib/navigation';
+import { Link } from '@vitnode/core/lib/navigation';
import { Test } from '../../views/test';
import { TestClient } from '../../views/test/client';
diff --git a/plugins/blog/src/app/blog/test/page.tsx b/plugins/blog/src/app/blog/test/page.tsx
index c34490860..46501b448 100644
--- a/plugins/blog/src/app/blog/test/page.tsx
+++ b/plugins/blog/src/app/blog/test/page.tsx
@@ -1,4 +1,4 @@
-import { Link } from 'vitnode/lib/navigation';
+import { Link } from '@vitnode/core/lib/navigation';
export default function Page() {
return (
diff --git a/plugins/blog/src/config.api.ts b/plugins/blog/src/config.api.ts
index a0e33347c..8bfc91cc9 100644
--- a/plugins/blog/src/config.api.ts
+++ b/plugins/blog/src/config.api.ts
@@ -1,4 +1,4 @@
-import { buildApiPlugin } from 'vitnode/api/lib/plugin';
+import { buildApiPlugin } from '@vitnode/core/api/lib/plugin';
import { categoriesModule } from './api/modules/categories/categories.module';
import { configPlugin } from './config';
diff --git a/plugins/blog/src/config.ts b/plugins/blog/src/config.ts
index 6afc7e884..38223aa5d 100644
--- a/plugins/blog/src/config.ts
+++ b/plugins/blog/src/config.ts
@@ -1,3 +1,3 @@
export const configPlugin = {
- name: 'vitnode-blog' as const,
+ name: '@vitnode/blog' as const,
};
diff --git a/plugins/blog/src/plugin.tsx b/plugins/blog/src/plugin.tsx
index 9527c5e0a..6f36f84bb 100644
--- a/plugins/blog/src/plugin.tsx
+++ b/plugins/blog/src/plugin.tsx
@@ -1,4 +1,4 @@
-import { buildPlugin } from 'vitnode/lib/plugin';
+import { buildPlugin } from '@vitnode/core/lib/plugin';
import { configPlugin } from './config';
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fc982b2cb..30986f26f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,6 +26,9 @@ importers:
apps/docs:
dependencies:
+ '@vitnode/core':
+ specifier: workspace:*
+ version: link:../../packages/vitnode
babel-plugin-react-compiler:
specifier: 19.1.0-rc.1
version: 19.1.0-rc.1
@@ -53,9 +56,6 @@ importers:
react-dom:
specifier: ^19.1.0
version: 19.1.0(react@19.1.0)
- vitnode:
- specifier: workspace:*
- version: link:../../packages/vitnode
devDependencies:
'@tailwindcss/postcss':
specifier: ^4.1.4
@@ -99,6 +99,12 @@ importers:
'@react-email/components':
specifier: 0.0.39
version: 0.0.39(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@vitnode/blog':
+ specifier: workspace:*
+ version: link:../../plugins/blog
+ '@vitnode/core':
+ specifier: workspace:*
+ version: link:../../packages/vitnode
babel-plugin-react-compiler:
specifier: 19.1.0-rc.1
version: 19.1.0-rc.1
@@ -122,7 +128,7 @@ importers:
version: 15.3.2(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next-intl:
specifier: ^4.1.0
- version: 4.1.0(next@15.3.2(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
+ version: 4.1.0(next@15.3.2(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
react:
specifier: ^19.1.0
version: 19.1.0
@@ -135,12 +141,6 @@ importers:
sonner:
specifier: ^2.0.3
version: 2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- vitnode:
- specifier: workspace:*
- version: link:../../packages/vitnode
- vitnode-blog:
- specifier: workspace:*
- version: link:../../plugins/blog
zod:
specifier: ^3.24.3
version: 3.24.4
@@ -426,6 +426,9 @@ importers:
'@hono/zod-openapi':
specifier: ^0.19.6
version: 0.19.6(hono@4.7.9)(zod@3.24.4)
+ '@vitnode/core':
+ specifier: workspace:*
+ version: link:../../packages/vitnode
drizzle-kit:
specifier: ^0.31.0
version: 0.31.1
@@ -443,16 +446,13 @@ importers:
version: 15.3.2(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next-intl:
specifier: ^4.1.0
- version: 4.1.0(next@15.3.2(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
+ version: 4.1.0(next@15.3.2(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
react:
specifier: ^19.1.0
version: 19.1.0
react-dom:
specifier: ^19.1.0
version: 19.1.0(react@19.1.0)
- vitnode:
- specifier: workspace:*
- version: link:../../packages/vitnode
zod:
specifier: ^3.24.3
version: 3.24.4
@@ -12848,7 +12848,7 @@ snapshots:
optionalDependencies:
typescript: 5.8.3
- next-intl@4.1.0(next@15.3.2(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3):
+ next-intl@4.1.0(next@15.3.2(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3):
dependencies:
'@formatjs/intl-localematcher': 0.5.10
negotiator: 1.0.0