create-carlonicora-app 1.1.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/package.json +1 -1
  2. package/template/apps/api/package.json +1 -1
  3. package/template/apps/web/package.json +1 -1
  4. package/template/apps/web/src/app/[locale]/(admin)/administration/companies/[id]/page.tsx +1 -3
  5. package/template/apps/web/src/app/[locale]/(admin)/layout.tsx +1 -2
  6. package/template/apps/web/src/app/[locale]/(auth)/activation/[code]/page.tsx +1 -2
  7. package/template/apps/web/src/app/[locale]/(auth)/auth/page.tsx +1 -1
  8. package/template/apps/web/src/app/[locale]/(auth)/invitation/[code]/page.tsx +1 -2
  9. package/template/apps/web/src/app/[locale]/(auth)/login/page.tsx +1 -2
  10. package/template/apps/web/src/app/[locale]/(auth)/register/page.tsx +1 -2
  11. package/template/apps/web/src/app/[locale]/(auth)/reset/[code]/page.tsx +1 -2
  12. package/template/apps/web/src/app/[locale]/(main)/(foundations)/roles/[id]/page.tsx +1 -3
  13. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/loading.tsx +1 -2
  14. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/page.tsx +1 -3
  15. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/page.tsx +1 -2
  16. package/template/apps/web/src/app/[locale]/(main)/error.tsx +1 -2
  17. package/template/apps/web/src/app/[locale]/(main)/layout.tsx +1 -3
  18. package/template/apps/web/src/app/[locale]/(main)/page.tsx +2 -2
  19. package/template/apps/web/src/app/[locale]/layout.tsx +2 -3
  20. package/template/apps/web/src/config/Bootstrapper.ts +6 -6
  21. package/template/apps/web/src/config/env.ts +2 -1
  22. package/template/apps/web/src/features/common/components/details/LayoutDetails.tsx +2 -2
  23. package/template/apps/web/src/features/common/components/navigations/CommonSidebar.tsx +4 -5
  24. package/template/apps/web/src/features/common/components/navigations/CreationDropDown.tsx +3 -3
  25. package/template/apps/web/src/features/common/components/navigations/UserSidebarFooter.tsx +8 -6
  26. package/template/package.json +4 -2
  27. package/template/scripts/apply-production-versions.js +37 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-carlonicora-app",
3
- "version": "1.1.0",
3
+ "version": "1.3.2",
4
4
  "description": "Create a NestJS + Next.js monorepo project with Neo4j and JSON:API",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "author": "",
3
3
  "dependencies": {
4
- "@carlonicora/nestjs-neo4jsonapi": "1.2.0",
4
+ "@carlonicora/nestjs-neo4jsonapi": "workspace:*",
5
5
  "@aws-sdk/client-s3": "^3.948.0",
6
6
  "@aws-sdk/s3-request-presigner": "^3.948.0",
7
7
  "@azure/msal-node": "^3.8.4",
@@ -32,7 +32,7 @@
32
32
  "@hello-pangea/dnd": "^18.0.1",
33
33
  "@hookform/resolvers": "^5.2.2",
34
34
  "@next/third-parties": "16.0.10",
35
- "@carlonicora/nextjs-jsonapi": "1.1.1",
35
+ "@carlonicora/nextjs-jsonapi": "workspace:*",
36
36
  "@{{name}}/shared": "workspace:*",
37
37
  "@radix-ui/react-accordion": "^1.2.12",
38
38
  "@radix-ui/react-alert-dialog": "^1.1.15",
@@ -1,9 +1,7 @@
1
1
  import { generateSpecificMetadata } from "@/utils/metadata";
2
2
  import { AdminCompanyContainer, PageContainer } from "@carlonicora/nextjs-jsonapi/components";
3
3
  import { CompanyProvider } from "@carlonicora/nextjs-jsonapi/contexts";
4
- import { Modules } from "@carlonicora/nextjs-jsonapi/core";
5
- import { CompanyInterface, CompanyService } from "@carlonicora/nextjs-jsonapi/features";
6
- import { Action } from "@carlonicora/nextjs-jsonapi/permissions";
4
+ import { Action, CompanyInterface, CompanyService, Modules } from "@carlonicora/nextjs-jsonapi/core";
7
5
  import { ServerSession } from "@carlonicora/nextjs-jsonapi/server";
8
6
  import { RoleId } from "@{{name}}/shared";
9
7
  import { Metadata } from "next";
@@ -3,9 +3,8 @@ import "react-horizontal-scrolling-menu/dist/styles.css";
3
3
 
4
4
  import LayoutDetails from "@/features/common/components/details/LayoutDetails";
5
5
  import { routing } from "@/i18n/routing";
6
- import { PushNotificationProvider, RefreshUser } from "@carlonicora/nextjs-jsonapi/components";
6
+ import { PushNotificationProvider, RefreshUser, SidebarProvider } from "@carlonicora/nextjs-jsonapi/components";
7
7
  import { NotificationContextProvider, SocketProvider } from "@carlonicora/nextjs-jsonapi/contexts";
8
- import { SidebarProvider } from "@carlonicora/nextjs-jsonapi/shadcnui";
9
8
  import { hasLocale } from "next-intl";
10
9
  import { getMessages, setRequestLocale } from "next-intl/server";
11
10
  import { Inter } from "next/font/google";
@@ -1,6 +1,5 @@
1
1
  import { generateSpecificMetadata } from "@/utils/metadata";
2
- import { AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
3
- import { AuthComponent } from "@carlonicora/nextjs-jsonapi/features";
2
+ import { AuthComponent, AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
4
3
  import { Metadata } from "next";
5
4
 
6
5
  export async function generateMetadata(): Promise<Metadata> {
@@ -1,5 +1,5 @@
1
1
  import { Cookies } from "@carlonicora/nextjs-jsonapi/components";
2
- import { AuthInterface, AuthService } from "@carlonicora/nextjs-jsonapi/features";
2
+ import { AuthInterface, AuthService } from "@carlonicora/nextjs-jsonapi/core";
3
3
 
4
4
  export default async function AuthPage(props: { searchParams: Promise<{ code: string }> }) {
5
5
  const searchParams = await props.searchParams;
@@ -1,5 +1,4 @@
1
- import { AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
2
- import { AuthComponent } from "@carlonicora/nextjs-jsonapi/features";
1
+ import { AuthComponent, AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
3
2
 
4
3
  export default async function InvitationPage(props: { params: Promise<{ code: string }> }) {
5
4
  const params = await props.params;
@@ -1,5 +1,4 @@
1
- import { AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
2
- import { AuthComponent } from "@carlonicora/nextjs-jsonapi/features";
1
+ import { AuthComponent, AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
3
2
 
4
3
  export default async function LoginPage() {
5
4
  return <AuthContainer componentType={AuthComponent.Login} />;
@@ -1,5 +1,4 @@
1
- import { AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
2
- import { AuthComponent } from "@carlonicora/nextjs-jsonapi/features";
1
+ import { AuthComponent, AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
3
2
 
4
3
  export default async function RegisterPage() {
5
4
  return <AuthContainer componentType={AuthComponent.Register} />;
@@ -1,5 +1,4 @@
1
- import { AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
2
- import { AuthComponent } from "@carlonicora/nextjs-jsonapi/features";
1
+ import { AuthComponent, AuthContainer } from "@carlonicora/nextjs-jsonapi/components";
3
2
 
4
3
  export default async function ResetPage(props: { params: Promise<{ code: string }> }) {
5
4
  const params = await props.params;
@@ -1,8 +1,6 @@
1
1
  import { PageContainer, RoleContainer } from "@carlonicora/nextjs-jsonapi/components";
2
2
  import { RoleProvider } from "@carlonicora/nextjs-jsonapi/contexts";
3
- import { Modules } from "@carlonicora/nextjs-jsonapi/core";
4
- import { RoleInterface, RoleService } from "@carlonicora/nextjs-jsonapi/features";
5
- import { Action } from "@carlonicora/nextjs-jsonapi/permissions";
3
+ import { Action, Modules, RoleInterface, RoleService } from "@carlonicora/nextjs-jsonapi/core";
6
4
  import { ServerSession } from "@carlonicora/nextjs-jsonapi/server";
7
5
 
8
6
  export default async function RolePage(props: { params: Promise<{ id: string }> }) {
@@ -1,8 +1,7 @@
1
1
  "use server";
2
2
 
3
- import { PageContainer } from "@carlonicora/nextjs-jsonapi/components";
3
+ import { PageContainer, Skeleton } from "@carlonicora/nextjs-jsonapi/components";
4
4
  import { UserProvider } from "@carlonicora/nextjs-jsonapi/contexts";
5
- import { Skeleton } from "@carlonicora/nextjs-jsonapi/shadcnui";
6
5
 
7
6
  export default async function Loading() {
8
7
  return (
@@ -1,9 +1,7 @@
1
1
  import { generateSpecificMetadata } from "@/utils/metadata";
2
2
  import { PageContainer, UserContainer } from "@carlonicora/nextjs-jsonapi/components";
3
3
  import { CompanyProvider, UserProvider } from "@carlonicora/nextjs-jsonapi/contexts";
4
- import { Modules } from "@carlonicora/nextjs-jsonapi/core";
5
- import { UserInterface, UserService } from "@carlonicora/nextjs-jsonapi/features";
6
- import { Action } from "@carlonicora/nextjs-jsonapi/permissions";
4
+ import { Action, Modules, UserInterface, UserService } from "@carlonicora/nextjs-jsonapi/core";
7
5
  import { ServerSession } from "@carlonicora/nextjs-jsonapi/server";
8
6
  import { Metadata } from "next";
9
7
  import { getTranslations } from "next-intl/server";
@@ -1,7 +1,6 @@
1
1
  import { PageContainer, UsersListContainer } from "@carlonicora/nextjs-jsonapi/components";
2
2
  import { UserProvider } from "@carlonicora/nextjs-jsonapi/contexts";
3
- import { Modules } from "@carlonicora/nextjs-jsonapi/core";
4
- import { Action } from "@carlonicora/nextjs-jsonapi/permissions";
3
+ import { Action, Modules } from "@carlonicora/nextjs-jsonapi/core";
5
4
  import { ServerSession } from "@carlonicora/nextjs-jsonapi/server";
6
5
 
7
6
  export default async function UsersListPage() {
@@ -1,7 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { ErrorDetails, Logout } from "@carlonicora/nextjs-jsonapi/components";
4
- import { Button } from "@carlonicora/nextjs-jsonapi/shadcnui";
3
+ import { Button, ErrorDetails, Logout } from "@carlonicora/nextjs-jsonapi/components";
5
4
  import { useMessages } from "next-intl";
6
5
  import { useEffect } from "react";
7
6
 
@@ -2,10 +2,8 @@ import { ServerSession } from "@carlonicora/nextjs-jsonapi/server";
2
2
  import "react-horizontal-scrolling-menu/dist/styles.css";
3
3
 
4
4
  import LayoutDetails from "@/features/common/components/details/LayoutDetails";
5
- import { AuthContainer, PushNotificationProvider, RefreshUser } from "@carlonicora/nextjs-jsonapi/components";
5
+ import { AuthComponent, AuthContainer, PushNotificationProvider, RefreshUser, SidebarProvider } from "@carlonicora/nextjs-jsonapi/components";
6
6
  import { NotificationContextProvider, SocketProvider } from "@carlonicora/nextjs-jsonapi/contexts";
7
- import { AuthComponent } from "@carlonicora/nextjs-jsonapi/features";
8
- import { SidebarProvider } from "@carlonicora/nextjs-jsonapi/shadcnui";
9
7
  import { cookies } from "next/headers";
10
8
 
11
9
  export default async function MainLayout(props: { children: React.ReactNode; params: Promise<{ locale: string }> }) {
@@ -1,8 +1,8 @@
1
1
  import IndexContainer from "@/features/common/components/containers/IndexContainer";
2
2
  import { generateSpecificMetadata } from "@/utils/metadata";
3
- import { AuthContainer, CompaniesList, PageContainer } from "@carlonicora/nextjs-jsonapi/components";
3
+ import { AuthComponent, AuthContainer, CompaniesList, PageContainer } from "@carlonicora/nextjs-jsonapi/components";
4
4
  import { CommonProvider, CompanyProvider } from "@carlonicora/nextjs-jsonapi/contexts";
5
- import { AuthComponent, ContentInterface, ContentService } from "@carlonicora/nextjs-jsonapi/features";
5
+ import { ContentInterface, ContentService } from "@carlonicora/nextjs-jsonapi/core";
6
6
  import { ServerSession } from "@carlonicora/nextjs-jsonapi/server";
7
7
  import { RoleId } from "@{{name}}/shared";
8
8
  import { Metadata } from "next";
@@ -1,13 +1,12 @@
1
1
  import { BootstrapProvider } from "@/config/BootstrapProvider";
2
2
  import "@/config/env"; // Server-side bootstrap
3
+ import { TooltipProvider } from "@carlonicora/nextjs-jsonapi/components";
3
4
  import { CurrentUserProvider } from "@carlonicora/nextjs-jsonapi/contexts";
5
+ import { cn } from "@carlonicora/nextjs-jsonapi/core";
4
6
  import { Provider } from "jotai";
5
7
  import "react-horizontal-scrolling-menu/dist/styles.css";
6
8
 
7
9
  import { routing } from "@/i18n/routing";
8
- // import { cn } from "@/lib/utils";
9
- import { TooltipProvider } from "@carlonicora/nextjs-jsonapi/shadcnui";
10
- import { cn } from "@carlonicora/nextjs-jsonapi/utils";
11
10
  import { hasLocale, NextIntlClientProvider } from "next-intl";
12
11
  import { getMessages, setRequestLocale } from "next-intl/server";
13
12
  import { ThemeProvider } from "next-themes";
@@ -1,22 +1,22 @@
1
1
  import { FeatureIds } from "@/enums/feature.ids";
2
- import { DataClassRegistry, FieldSelector, ModuleRegistry } from "@carlonicora/nextjs-jsonapi/core";
3
- import { ModuleWithPermissions } from "@carlonicora/nextjs-jsonapi/permissions";
4
- import { LucideIcon } from "lucide-react";
5
-
6
- // Foundation module imports (from app - code stays in app)
7
2
  import {
8
3
  AuthModule,
9
4
  AuthorModule,
10
5
  CompanyModule,
11
6
  ContentModule,
7
+ DataClassRegistry,
12
8
  FeatureModule,
9
+ FieldSelector,
13
10
  ModuleModule,
11
+ ModuleRegistry,
12
+ ModuleWithPermissions,
14
13
  NotificationModule,
15
14
  PushModule,
16
15
  RoleModule,
17
16
  S3Module,
18
17
  UserModule,
19
- } from "@carlonicora/nextjs-jsonapi/features";
18
+ } from "@carlonicora/nextjs-jsonapi/core";
19
+ import { LucideIcon } from "lucide-react";
20
20
 
21
21
  // Feature module imports
22
22
 
@@ -3,7 +3,8 @@ import { ENV } from "@/config/middleware-env";
3
3
  import { Link, usePathname, useRouter } from "@/i18n/routing";
4
4
  import { useDateFnsLocale } from "@/i18n/useDateFnsLocale";
5
5
  import { removeToken, updateToken } from "@/server-actions/auth-cookies";
6
- import { configureAuth, configureI18n, configureJsonApi, configureRoles, Modules } from "@carlonicora/nextjs-jsonapi";
6
+ import { configureAuth, configureI18n, configureJsonApi, configureRoles } from "@carlonicora/nextjs-jsonapi";
7
+ import { Modules } from "@carlonicora/nextjs-jsonapi/core";
7
8
  import { RoleId } from "@{{name}}/shared";
8
9
  import { useLocale, useTranslations } from "next-intl";
9
10
 
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import CommonSidebar from "@/features/common/components/navigations/CommonSidebar";
4
+ import { useNotificationSync, usePageTracker } from "@carlonicora/nextjs-jsonapi/client";
4
5
  import { useCurrentUserContext, useNotificationContext } from "@carlonicora/nextjs-jsonapi/contexts";
5
- import { RoleInterface, UserInterface } from "@carlonicora/nextjs-jsonapi/features";
6
- import { useNotificationSync, usePageTracker } from "@carlonicora/nextjs-jsonapi/hooks";
6
+ import { RoleInterface, UserInterface } from "@carlonicora/nextjs-jsonapi/core";
7
7
  import { RoleId } from "@{{name}}/shared";
8
8
  import { useEffect } from "react";
9
9
 
@@ -2,12 +2,10 @@
2
2
 
3
3
  import CreationDropDown from "@/features/common/components/navigations/CreationDropDown";
4
4
  import { useRouter } from "@/i18n/routing";
5
- import { recentPagesAtom } from "@carlonicora/nextjs-jsonapi/atoms";
6
- import { RecentPagesNavigator } from "@carlonicora/nextjs-jsonapi/components";
7
- import { useCurrentUserContext, useNotificationContext } from "@carlonicora/nextjs-jsonapi/contexts";
8
- import { usePageUrlGenerator } from "@carlonicora/nextjs-jsonapi/hooks";
5
+ import { usePageUrlGenerator } from "@carlonicora/nextjs-jsonapi/client";
9
6
  import {
10
7
  Link,
8
+ RecentPagesNavigator,
11
9
  Sidebar,
12
10
  SidebarContent,
13
11
  SidebarFooter,
@@ -21,7 +19,8 @@ import {
21
19
  TooltipContent,
22
20
  TooltipTrigger,
23
21
  useSidebar,
24
- } from "@carlonicora/nextjs-jsonapi/shadcnui";
22
+ } from "@carlonicora/nextjs-jsonapi/components";
23
+ import { recentPagesAtom, useCurrentUserContext, useNotificationContext } from "@carlonicora/nextjs-jsonapi/contexts";
25
24
 
26
25
  import { UserSidebarFooter } from "@/features/common/components/navigations/UserSidebarFooter";
27
26
  import { useAtomValue } from "jotai";
@@ -1,7 +1,5 @@
1
1
  "use client";
2
2
 
3
- import { useCurrentUserContext } from "@carlonicora/nextjs-jsonapi/contexts";
4
- import { UserInterface } from "@carlonicora/nextjs-jsonapi/features";
5
3
  import {
6
4
  Button,
7
5
  DropdownMenu,
@@ -10,7 +8,9 @@ import {
10
8
  DropdownMenuSeparator,
11
9
  DropdownMenuTrigger,
12
10
  useSidebar,
13
- } from "@carlonicora/nextjs-jsonapi/shadcnui";
11
+ } from "@carlonicora/nextjs-jsonapi/components";
12
+ import { useCurrentUserContext } from "@carlonicora/nextjs-jsonapi/contexts";
13
+ import { UserInterface } from "@carlonicora/nextjs-jsonapi/core";
14
14
  import { PlusCircleIcon } from "lucide-react";
15
15
  import { useTranslations } from "next-intl";
16
16
  import { useState } from "react";
@@ -1,11 +1,8 @@
1
1
  "use client";
2
2
 
3
3
  import VersionDisplay from "@/features/common/components/navigations/VersionDisplay";
4
- import { Modules } from "@carlonicora/nextjs-jsonapi";
5
- import { ModeToggleSwitch, NotificationModal, UserAvatar } from "@carlonicora/nextjs-jsonapi/components";
6
- import { useCurrentUserContext } from "@carlonicora/nextjs-jsonapi/contexts";
7
- import { UserInterface } from "@carlonicora/nextjs-jsonapi/features";
8
- import { usePageUrlGenerator } from "@carlonicora/nextjs-jsonapi/hooks";
4
+ import { Modules } from "@carlonicora/nextjs-jsonapi/core";
5
+ import { usePageUrlGenerator } from "@carlonicora/nextjs-jsonapi/client";
9
6
  import {
10
7
  DropdownMenu,
11
8
  DropdownMenuContent,
@@ -15,11 +12,16 @@ import {
15
12
  DropdownMenuSeparator,
16
13
  DropdownMenuTrigger,
17
14
  Link,
15
+ ModeToggleSwitch,
16
+ NotificationModal,
18
17
  SidebarMenu,
19
18
  SidebarMenuButton,
20
19
  SidebarMenuItem,
20
+ UserAvatar,
21
21
  useSidebar,
22
- } from "@carlonicora/nextjs-jsonapi/shadcnui";
22
+ } from "@carlonicora/nextjs-jsonapi/components";
23
+ import { useCurrentUserContext } from "@carlonicora/nextjs-jsonapi/contexts";
24
+ import { UserInterface } from "@carlonicora/nextjs-jsonapi/core";
23
25
  import { RoleId } from "@{{name}}/shared";
24
26
  import { ChevronsUpDown, LogOut, SettingsIcon, UserIcon } from "lucide-react";
25
27
  import { useTranslations } from "next-intl";
@@ -2,7 +2,7 @@
2
2
  "name": "{{name}}",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
- "description": "Role Playing Game platform powered by AI",
5
+ "description": "",
6
6
  "engines": {
7
7
  "node": ">=22.0.0",
8
8
  "pnpm": ">=10.0.0"
@@ -29,7 +29,9 @@
29
29
  "structure": "bash scripts/import-structure.sh",
30
30
  "prepare": "husky",
31
31
  "preinstall": "npx only-allow pnpm",
32
- "neo4jsonapi-migrate": "node ./packages/nestjs-neo4jsonapi/dist/tools/migrate-entity/index.js"
32
+ "neo4jsonapi-migrate": "node ./packages/nestjs-neo4jsonapi/dist/tools/migrate-entity/index.js",
33
+ "generate-module": "node ./packages/nestjs-neo4jsonapi/dist/scripts/generate-module/index.js",
34
+ "generate-web-module": "node ./packages/nextjs-jsonapi/dist/scripts/generate-web-module/index.js"
33
35
  },
34
36
  "dependencies": {
35
37
  "dotenv-cli": "^11.0.0",
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Replaces workspace:* dependencies with pinned npm versions
4
+ * for production Docker builds.
5
+ */
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ const versionsFile = path.join(__dirname, '..', 'versions.production.json');
10
+ const versions = JSON.parse(fs.readFileSync(versionsFile, 'utf8'));
11
+
12
+ const packageFiles = [
13
+ 'apps/api/package.json',
14
+ 'apps/web/package.json',
15
+ ];
16
+
17
+ for (const file of packageFiles) {
18
+ const filePath = path.join(__dirname, '..', file);
19
+ if (!fs.existsSync(filePath)) continue;
20
+
21
+ const pkg = JSON.parse(fs.readFileSync(filePath, 'utf8'));
22
+ let modified = false;
23
+
24
+ for (const [dep, version] of Object.entries(versions)) {
25
+ if (pkg.dependencies?.[dep] === 'workspace:*') {
26
+ pkg.dependencies[dep] = version;
27
+ modified = true;
28
+ console.log(`${file}: ${dep} → ${version}`);
29
+ }
30
+ }
31
+
32
+ if (modified) {
33
+ fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2) + '\n');
34
+ }
35
+ }
36
+
37
+ console.log('Production versions applied.');