create-carlonicora-app 1.0.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 (41) hide show
  1. package/dist/utils/files.d.ts.map +1 -1
  2. package/dist/utils/files.js +14 -1
  3. package/dist/utils/files.js.map +1 -1
  4. package/package.json +6 -1
  5. package/template/apps/api/package.json +1 -1
  6. package/template/apps/web/next-env.d.ts +6 -0
  7. package/template/apps/web/package.json +1 -1
  8. package/template/apps/web/src/app/[locale]/(admin)/administration/companies/[id]/page.tsx +1 -3
  9. package/template/apps/web/src/app/[locale]/(admin)/layout.tsx +1 -2
  10. package/template/apps/web/src/app/[locale]/(auth)/activation/[code]/page.tsx +1 -2
  11. package/template/apps/web/src/app/[locale]/(auth)/auth/page.tsx +1 -1
  12. package/template/apps/web/src/app/[locale]/(auth)/invitation/[code]/page.tsx +1 -2
  13. package/template/apps/web/src/app/[locale]/(auth)/login/page.tsx +1 -2
  14. package/template/apps/web/src/app/[locale]/(auth)/register/page.tsx +1 -2
  15. package/template/apps/web/src/app/[locale]/(auth)/reset/[code]/page.tsx +1 -2
  16. package/template/apps/web/src/app/[locale]/(main)/(foundations)/roles/[id]/page.tsx +1 -3
  17. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/loading.tsx +1 -2
  18. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/page.tsx +1 -3
  19. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/page.tsx +1 -2
  20. package/template/apps/web/src/app/[locale]/(main)/error.tsx +1 -2
  21. package/template/apps/web/src/app/[locale]/(main)/layout.tsx +1 -3
  22. package/template/apps/web/src/app/[locale]/(main)/page.tsx +2 -2
  23. package/template/apps/web/src/app/[locale]/layout.tsx +2 -3
  24. package/template/apps/web/src/config/Bootstrapper.ts +6 -6
  25. package/template/apps/web/src/config/env.ts +2 -1
  26. package/template/apps/web/src/features/common/components/details/LayoutDetails.tsx +2 -2
  27. package/template/apps/web/src/features/common/components/navigations/CommonSidebar.tsx +4 -5
  28. package/template/apps/web/src/features/common/components/navigations/CreationDropDown.tsx +3 -3
  29. package/template/apps/web/src/features/common/components/navigations/UserSidebarFooter.tsx +8 -6
  30. package/template/gitignore +91 -0
  31. package/template/npmrc +1 -0
  32. package/template/package.json +4 -2
  33. package/template/scripts/apply-production-versions.js +37 -0
  34. package/template/.vscode/settings.json +0 -16
  35. /package/template/apps/api/{.prettierrc → prettierrc} +0 -0
  36. /package/template/apps/web/{.swcrc → swcrc} +0 -0
  37. /package/template/{.env.example → env.example} +0 -0
  38. /package/template/{.gitmodules → gitmodules} +0 -0
  39. /package/template/{.prettierignore → prettierignore} +0 -0
  40. /package/template/{.prettierrc → prettierrc} +0 -0
  41. /package/template/{.releaserc → releaserc} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AA0C3D,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAcf;AAuBD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpE"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAsD3D,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAuBD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpE"}
@@ -38,11 +38,24 @@ function isBinaryFile(filePath) {
38
38
  const ext = path.extname(filePath).toLowerCase();
39
39
  return BINARY_EXTENSIONS.has(ext);
40
40
  }
41
+ // Files that need to be renamed from "name" to ".name" (npm strips dotfiles)
42
+ const DOTFILE_RENAMES = {
43
+ gitignore: '.gitignore',
44
+ gitmodules: '.gitmodules',
45
+ prettierrc: '.prettierrc',
46
+ prettierignore: '.prettierignore',
47
+ npmrc: '.npmrc',
48
+ releaserc: '.releaserc',
49
+ swcrc: '.swcrc',
50
+ 'env.example': '.env.example',
51
+ };
41
52
  export async function copyTemplate(srcDir, destDir, config) {
42
53
  const entries = await fs.readdir(srcDir, { withFileTypes: true });
43
54
  for (const entry of entries) {
44
55
  const srcPath = path.join(srcDir, entry.name);
45
- const destPath = path.join(destDir, entry.name);
56
+ // Rename dotfiles back to their proper names
57
+ const destName = DOTFILE_RENAMES[entry.name] || entry.name;
58
+ const destPath = path.join(destDir, destName);
46
59
  if (entry.isDirectory()) {
47
60
  await fs.ensureDir(destPath);
48
61
  await copyTemplate(srcPath, destPath, config);
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-carlonicora-app",
3
- "version": "1.0.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",
@@ -45,8 +45,13 @@
45
45
  "ora": "^8.0.0"
46
46
  },
47
47
  "devDependencies": {
48
+ "@semantic-release/changelog": "^6.0.3",
49
+ "@semantic-release/git": "^10.0.1",
50
+ "@semantic-release/github": "^11.0.0",
48
51
  "@types/fs-extra": "^11.0.4",
49
52
  "@types/node": "^22.0.0",
53
+ "conventional-changelog-conventionalcommits": "^8.0.0",
54
+ "semantic-release": "^24.0.0",
50
55
  "typescript": "^5.6.0"
51
56
  }
52
57
  }
@@ -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",
@@ -0,0 +1,6 @@
1
+ /// <reference types="next" />
2
+ /// <reference types="next/image-types/global" />
3
+ import "./.next/types/routes.d.ts";
4
+
5
+ // NOTE: This file should not be edited
6
+ // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
@@ -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";
@@ -0,0 +1,91 @@
1
+ # Dependencies
2
+ node_modules/
3
+ .pnp
4
+ .pnp.js
5
+
6
+ # Testing
7
+ coverage/
8
+ *.lcov
9
+ .nyc_output
10
+
11
+ # Production builds
12
+ dist/
13
+ build/
14
+ out/
15
+ .next/
16
+ *.tsbuildinfo
17
+ next-env.d.ts
18
+
19
+ # Logs
20
+ logs
21
+ *.log
22
+ npm-debug.log*
23
+ yarn-debug.log*
24
+ yarn-error.log*
25
+ pnpm-debug.log*
26
+ lerna-debug.log*
27
+
28
+ # Environment variables
29
+ .env
30
+ .env.local
31
+ .env.development.local
32
+ .env.test.local
33
+ .env.production.local
34
+ .env*.local
35
+
36
+ # IDE
37
+ .vscode/*
38
+ !.vscode/settings.json
39
+ !.vscode/tasks.json
40
+ !.vscode/launch.json
41
+ !.vscode/extensions.json
42
+ .idea/
43
+ *.swp
44
+ *.swo
45
+ *~
46
+ .DS_Store
47
+
48
+ # Turborepo
49
+ .turbo/
50
+
51
+ # Vercel
52
+ .vercel
53
+
54
+ # Playwright
55
+ playwright-report/
56
+ playwright/.cache/
57
+ playwright/.auth/
58
+ test-results/
59
+
60
+ # Debug
61
+ debug/
62
+ .vscode-test
63
+
64
+ # Misc
65
+ *.pem
66
+ .cache
67
+ .parcel-cache
68
+ .nuxt
69
+ .cache/
70
+ .vuepress/dist
71
+ .temp
72
+ .docusaurus
73
+
74
+ # Lock files (keep only pnpm-lock.yaml)
75
+ package-lock.json
76
+ yarn.lock
77
+
78
+ # Backup files
79
+ api-git-backup*.tar.gz
80
+ .env-backup/
81
+
82
+ # OS files
83
+ Thumbs.db
84
+ .DS_Store
85
+
86
+ # Temporary files
87
+ tmp/
88
+ temp/
89
+
90
+ # REST test files
91
+ REST.http
package/template/npmrc ADDED
@@ -0,0 +1 @@
1
+ link-workspace-packages=true
@@ -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.');
@@ -1,16 +0,0 @@
1
- {
2
- "typescript.tsdk": "node_modules/typescript/lib",
3
- "typescript.enablePromptUseWorkspaceTsdk": true,
4
- "typescript.preferences.includePackageJsonAutoImports": "on",
5
- "i18n-ally.localesPaths": [
6
- "apps/web/messages",
7
- "apps/api/src/i18n"
8
- ],
9
- "i18n-ally.sourceLanguage": "en",
10
- "i18n-ally.displayLanguage": "en",
11
- "i18n-ally.enabledFrameworks": [
12
- "next-intl",
13
- "i18next"
14
- ],
15
- "i18n-ally.keystyle": "nested"
16
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes