create-carlonicora-app 1.0.0
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.
- package/LICENSE +675 -0
- package/README.md +104 -0
- package/bin/cli.js +3 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +92 -0
- package/dist/cli.js.map +1 -0
- package/dist/git.d.ts +7 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +80 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.d.ts +5 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +30 -0
- package/dist/prompts.js.map +1 -0
- package/dist/replacer.d.ts +9 -0
- package/dist/replacer.d.ts.map +1 -0
- package/dist/replacer.js +11 -0
- package/dist/replacer.js.map +1 -0
- package/dist/scaffold.d.ts +3 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +79 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/files.d.ts +6 -0
- package/dist/utils/files.d.ts.map +1 -0
- package/dist/utils/files.js +103 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/logger.d.ts +12 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +35 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +6 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +63 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +52 -0
- package/template/.env.example +159 -0
- package/template/.github/workflows/check-library-updates.yml +71 -0
- package/template/.github/workflows/dev.yml +63 -0
- package/template/.github/workflows/pull-request.yml +55 -0
- package/template/.gitmodules +6 -0
- package/template/.husky/pre-commit +1 -0
- package/template/.husky/pre-push +1 -0
- package/template/.prettierignore +1 -0
- package/template/.prettierrc +13 -0
- package/template/.releaserc +134 -0
- package/template/.vscode/settings.json +16 -0
- package/template/CHANGELOG.md +0 -0
- package/template/CLAUDE.md +34 -0
- package/template/DOCKER.md +1591 -0
- package/template/Dockerfile +228 -0
- package/template/README.md +1 -0
- package/template/apps/api/.prettierrc +12 -0
- package/template/apps/api/eslint.config.mjs +54 -0
- package/template/apps/api/jest.config.js +29 -0
- package/template/apps/api/nest-cli.json +15 -0
- package/template/apps/api/package.json +155 -0
- package/template/apps/api/src/config/config.ts +17 -0
- package/template/apps/api/src/config/enums/job.name.ts +6 -0
- package/template/apps/api/src/config/enums/queue.id.ts +3 -0
- package/template/apps/api/src/config/interfaces/config.interface.ts +3 -0
- package/template/apps/api/src/features/features.modules.ts +6 -0
- package/template/apps/api/src/i18n/en/notifications.json +3 -0
- package/template/apps/api/src/main.ts +23 -0
- package/template/apps/api/src/neo4j.migrations/20250901_001.ts +33 -0
- package/template/apps/api/src/neo4j.migrations/20250901_002.ts +90 -0
- package/template/apps/api/src/neo4j.migrations/20250901_003.ts +57 -0
- package/template/apps/api/src/neo4j.migrations/20250901_004.ts +32 -0
- package/template/apps/api/src/neo4j.migrations/queries/migration.queries.ts +49 -0
- package/template/apps/api/src/types/langchain.d.ts +56 -0
- package/template/apps/api/tsconfig.build.json +4 -0
- package/template/apps/api/tsconfig.json +38 -0
- package/template/apps/web/.swcrc +26 -0
- package/template/apps/web/components.json +21 -0
- package/template/apps/web/eslint.config.mjs +33 -0
- package/template/apps/web/global.d.ts +7 -0
- package/template/apps/web/messages/en.json +249 -0
- package/template/apps/web/next.config.js +50 -0
- package/template/apps/web/package.json +146 -0
- package/template/apps/web/playwright.config.ts +86 -0
- package/template/apps/web/postcss.config.mjs +5 -0
- package/template/apps/web/public/sw.js +32 -0
- package/template/apps/web/src/app/[locale]/(admin)/administration/companies/[id]/page.tsx +46 -0
- package/template/apps/web/src/app/[locale]/(admin)/administration/companies/page.tsx +23 -0
- package/template/apps/web/src/app/[locale]/(admin)/layout.tsx +49 -0
- package/template/apps/web/src/app/[locale]/(auth)/activation/[code]/page.tsx +13 -0
- package/template/apps/web/src/app/[locale]/(auth)/auth/page.tsx +11 -0
- package/template/apps/web/src/app/[locale]/(auth)/invitation/[code]/page.tsx +7 -0
- package/template/apps/web/src/app/[locale]/(auth)/layout.tsx +9 -0
- package/template/apps/web/src/app/[locale]/(auth)/login/page.tsx +6 -0
- package/template/apps/web/src/app/[locale]/(auth)/logout/page.tsx +5 -0
- package/template/apps/web/src/app/[locale]/(auth)/register/page.tsx +6 -0
- package/template/apps/web/src/app/[locale]/(auth)/reset/[code]/page.tsx +7 -0
- package/template/apps/web/src/app/[locale]/(main)/(foundations)/notifications/page.tsx +9 -0
- package/template/apps/web/src/app/[locale]/(main)/(foundations)/roles/[id]/page.tsx +23 -0
- package/template/apps/web/src/app/[locale]/(main)/(foundations)/roles/page.tsx +12 -0
- package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/error.tsx +14 -0
- package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/loading.tsx +21 -0
- package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/page.tsx +46 -0
- package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/page.tsx +17 -0
- package/template/apps/web/src/app/[locale]/(main)/error.tsx +62 -0
- package/template/apps/web/src/app/[locale]/(main)/layout.tsx +40 -0
- package/template/apps/web/src/app/[locale]/(main)/page.tsx +41 -0
- package/template/apps/web/src/app/[locale]/layout.tsx +54 -0
- package/template/apps/web/src/app/globals.css +256 -0
- package/template/apps/web/src/config/BootstrapProvider.tsx +13 -0
- package/template/apps/web/src/config/Bootstrapper.ts +77 -0
- package/template/apps/web/src/config/env.ts +51 -0
- package/template/apps/web/src/config/middleware-env.ts +14 -0
- package/template/apps/web/src/enums/feature.ids.ts +3 -0
- package/template/apps/web/src/features/common/components/containers/IndexContainer.tsx +11 -0
- package/template/apps/web/src/features/common/components/details/LayoutDetails.tsx +33 -0
- package/template/apps/web/src/features/common/components/navigations/CommonSidebar.tsx +233 -0
- package/template/apps/web/src/features/common/components/navigations/CreationDropDown.tsx +117 -0
- package/template/apps/web/src/features/common/components/navigations/UserSidebarFooter.tsx +115 -0
- package/template/apps/web/src/features/common/components/navigations/VersionDisplay.tsx +18 -0
- package/template/apps/web/src/features/common/contexts/ErrorContext.tsx +62 -0
- package/template/apps/web/src/i18n/request.ts +13 -0
- package/template/apps/web/src/i18n/routing.ts +9 -0
- package/template/apps/web/src/i18n/useDateFnsLocale.ts +15 -0
- package/template/apps/web/src/proxy.ts +107 -0
- package/template/apps/web/src/server-actions/auth-cookies.ts +134 -0
- package/template/apps/web/src/types/modules.d.ts +10 -0
- package/template/apps/web/src/utils/metadata.ts +50 -0
- package/template/apps/web/src/utils/revalidation.ts +7 -0
- package/template/apps/web/tsconfig.json +51 -0
- package/template/docker-compose.yml +211 -0
- package/template/package.json +72 -0
- package/template/packages/nestjs-neo4jsonapi/.gitkeep +0 -0
- package/template/packages/nextjs-jsonapi/.gitkeep +0 -0
- package/template/packages/shared/package.json +23 -0
- package/template/packages/shared/src/const/roles.id.ts +5 -0
- package/template/packages/shared/src/const/system.roles.id.ts +4 -0
- package/template/packages/shared/src/index.ts +1 -0
- package/template/packages/shared/tsconfig.json +10 -0
- package/template/packages/shared/tsup.config.ts +16 -0
- package/template/pnpm-workspace.yaml +3 -0
- package/template/tsconfig.base.json +62 -0
- package/template/tsconfig.json +12 -0
- package/template/turbo.json +88 -0
- package/template/versions.production.json +4 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const logger: {
|
|
2
|
+
info: (message: string) => void;
|
|
3
|
+
success: (message: string) => void;
|
|
4
|
+
warn: (message: string) => void;
|
|
5
|
+
error: (message: string) => void;
|
|
6
|
+
title: (message: string) => void;
|
|
7
|
+
step: (step: number, total: number, message: string) => void;
|
|
8
|
+
command: (cmd: string) => void;
|
|
9
|
+
newline: () => void;
|
|
10
|
+
};
|
|
11
|
+
export declare function printSuccessMessage(projectName: string, targetDir: string): void;
|
|
12
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,MAAM;uBACH,MAAM;oBACT,MAAM;qBACL,MAAM;qBAEN,MAAM;iBAEV,MAAM,SAAS,MAAM,WAAW,MAAM;mBAGpC,MAAM;;CAGtB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAsBhF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export const logger = {
|
|
3
|
+
info: (message) => console.log(chalk.blue('info'), message),
|
|
4
|
+
success: (message) => console.log(chalk.green('success'), message),
|
|
5
|
+
warn: (message) => console.log(chalk.yellow('warn'), message),
|
|
6
|
+
error: (message) => console.log(chalk.red('error'), message),
|
|
7
|
+
title: (message) => console.log(chalk.bold.cyan(`\n${message}\n`)),
|
|
8
|
+
step: (step, total, message) => console.log(chalk.gray(`[${step}/${total}]`), message),
|
|
9
|
+
command: (cmd) => console.log(chalk.cyan(` ${cmd}`)),
|
|
10
|
+
newline: () => console.log(),
|
|
11
|
+
};
|
|
12
|
+
export function printSuccessMessage(projectName, targetDir) {
|
|
13
|
+
console.log();
|
|
14
|
+
console.log(chalk.green.bold('Success!'), `Created ${chalk.cyan(projectName)} at ${chalk.gray(targetDir)}`);
|
|
15
|
+
console.log();
|
|
16
|
+
console.log('Inside that directory, you can run several commands:');
|
|
17
|
+
console.log();
|
|
18
|
+
console.log(chalk.cyan(' pnpm dev'));
|
|
19
|
+
console.log(' Starts the development server');
|
|
20
|
+
console.log();
|
|
21
|
+
console.log(chalk.cyan(' pnpm build'));
|
|
22
|
+
console.log(' Builds the app for production');
|
|
23
|
+
console.log();
|
|
24
|
+
console.log(chalk.cyan(' pnpm test'));
|
|
25
|
+
console.log(' Runs the test suite');
|
|
26
|
+
console.log();
|
|
27
|
+
console.log('We suggest that you begin by typing:');
|
|
28
|
+
console.log();
|
|
29
|
+
console.log(chalk.cyan(` cd ${projectName}`));
|
|
30
|
+
console.log(chalk.cyan(' cp .env.example .env'));
|
|
31
|
+
console.log(chalk.gray(' # Edit .env with your configuration'));
|
|
32
|
+
console.log(chalk.cyan(' pnpm dev'));
|
|
33
|
+
console.log();
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ValidationResult } from '../types/index.js';
|
|
2
|
+
export declare function validateProjectName(name: string): ValidationResult;
|
|
3
|
+
export declare function toKebabCase(str: string): string;
|
|
4
|
+
export declare function toPascalCase(str: string): string;
|
|
5
|
+
export declare function toCamelCase(str: string): string;
|
|
6
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAuB1D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAgClE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const RESERVED_NAMES = [
|
|
2
|
+
'node_modules',
|
|
3
|
+
'favicon.ico',
|
|
4
|
+
'package',
|
|
5
|
+
'npm',
|
|
6
|
+
'test',
|
|
7
|
+
'tests',
|
|
8
|
+
'src',
|
|
9
|
+
'dist',
|
|
10
|
+
'build',
|
|
11
|
+
'public',
|
|
12
|
+
'static',
|
|
13
|
+
'assets',
|
|
14
|
+
'app',
|
|
15
|
+
'api',
|
|
16
|
+
'web',
|
|
17
|
+
];
|
|
18
|
+
// Valid npm package name pattern (kebab-case)
|
|
19
|
+
const NPM_NAME_REGEX = /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
|
|
20
|
+
export function validateProjectName(name) {
|
|
21
|
+
// Must not be empty
|
|
22
|
+
if (!name || name.trim() === '') {
|
|
23
|
+
return { valid: false, message: 'Project name cannot be empty' };
|
|
24
|
+
}
|
|
25
|
+
const trimmedName = name.trim();
|
|
26
|
+
// Must be valid npm package name (kebab-case)
|
|
27
|
+
if (!NPM_NAME_REGEX.test(trimmedName)) {
|
|
28
|
+
return {
|
|
29
|
+
valid: false,
|
|
30
|
+
message: 'Project name must be lowercase, kebab-case (e.g., my-project)',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Must not be a reserved name
|
|
34
|
+
if (RESERVED_NAMES.includes(trimmedName.toLowerCase())) {
|
|
35
|
+
return { valid: false, message: `"${trimmedName}" is a reserved name` };
|
|
36
|
+
}
|
|
37
|
+
// Must not start with a dot or underscore
|
|
38
|
+
if (trimmedName.startsWith('.') || trimmedName.startsWith('_')) {
|
|
39
|
+
return { valid: false, message: 'Project name cannot start with a dot or underscore' };
|
|
40
|
+
}
|
|
41
|
+
// Reasonable length limit
|
|
42
|
+
if (trimmedName.length > 100) {
|
|
43
|
+
return { valid: false, message: 'Project name is too long (max 100 characters)' };
|
|
44
|
+
}
|
|
45
|
+
return { valid: true };
|
|
46
|
+
}
|
|
47
|
+
export function toKebabCase(str) {
|
|
48
|
+
return str
|
|
49
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
50
|
+
.replace(/[\s_]+/g, '-')
|
|
51
|
+
.toLowerCase();
|
|
52
|
+
}
|
|
53
|
+
export function toPascalCase(str) {
|
|
54
|
+
return str
|
|
55
|
+
.split(/[-_\s]+/)
|
|
56
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
57
|
+
.join('');
|
|
58
|
+
}
|
|
59
|
+
export function toCamelCase(str) {
|
|
60
|
+
const pascal = toPascalCase(str);
|
|
61
|
+
return pascal.charAt(0).toLowerCase() + pascal.slice(1);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG;IACrB,cAAc;IACd,aAAa;IACb,SAAS;IACT,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,KAAK;IACL,KAAK;CACN,CAAC;AAEF,8CAA8C;AAC9C,MAAM,cAAc,GAAG,4DAA4D,CAAC;AAEpF,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,oBAAoB;IACpB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAEhC,8CAA8C;IAC9C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,+DAA+D;SACzE,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,WAAW,sBAAsB,EAAE,CAAC;IAC1E,CAAC;IAED,0CAA0C;IAC1C,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAAC;IACzF,CAAC;IAED,0BAA0B;IAC1B,IAAI,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC;IACpF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG;SACP,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG;SACP,KAAK,CAAC,SAAS,CAAC;SAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACzE,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-carlonicora-app",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Create a NestJS + Next.js monorepo project with Neo4j and JSON:API",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"create-carlonicora-app": "./bin/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"bin",
|
|
13
|
+
"template"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"dev": "tsc --watch",
|
|
18
|
+
"sync-template": "node scripts/sync-template.js",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"cli",
|
|
23
|
+
"scaffold",
|
|
24
|
+
"nestjs",
|
|
25
|
+
"nextjs",
|
|
26
|
+
"monorepo",
|
|
27
|
+
"template",
|
|
28
|
+
"neo4j",
|
|
29
|
+
"jsonapi"
|
|
30
|
+
],
|
|
31
|
+
"author": "Carlo Nicora",
|
|
32
|
+
"license": "GPL-3.0",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/carlonicora/create-carlonicora-app"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18.0.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@inquirer/prompts": "^7.0.0",
|
|
42
|
+
"chalk": "^5.3.0",
|
|
43
|
+
"commander": "^12.0.0",
|
|
44
|
+
"fs-extra": "^11.2.0",
|
|
45
|
+
"ora": "^8.0.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/fs-extra": "^11.0.4",
|
|
49
|
+
"@types/node": "^22.0.0",
|
|
50
|
+
"typescript": "^5.6.0"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# API CONFIGURATION (API)
|
|
3
|
+
# =============================================================================
|
|
4
|
+
API_URL="http://api.{{name}}.test:3950/"
|
|
5
|
+
API_PORT=3950
|
|
6
|
+
API_NODE_OPTIONS="--max-old-space-size=6144"
|
|
7
|
+
WORKER_NODE_OPTIONS="--max-old-space-size=6144"
|
|
8
|
+
|
|
9
|
+
# =============================================================================
|
|
10
|
+
# WEB APP CONFIGURATION (WEB)
|
|
11
|
+
# =============================================================================
|
|
12
|
+
APP_URL="http://{{name}}.test:3951/"
|
|
13
|
+
NEXT_PUBLIC_API_URL="http://api.{{name}}.test:3950/"
|
|
14
|
+
NEXT_PUBLIC_ADDRESS="http://{{name}}.test:3951"
|
|
15
|
+
PORT=3951
|
|
16
|
+
WEB_NODE_OPTIONS="--max-old-space-size=4096"
|
|
17
|
+
|
|
18
|
+
# =============================================================================
|
|
19
|
+
# LOGGING
|
|
20
|
+
# =============================================================================
|
|
21
|
+
CONSOLE_ENABLED=true
|
|
22
|
+
|
|
23
|
+
# =============================================================================
|
|
24
|
+
# DATABASE - NEO4J (API)
|
|
25
|
+
# =============================================================================
|
|
26
|
+
NEO4J_URI=bolt://localhost:7687
|
|
27
|
+
NEO4J_USER=neo4j
|
|
28
|
+
NEO4J_PASSWORD=password
|
|
29
|
+
NEO4J_DATABASE={{name}}
|
|
30
|
+
|
|
31
|
+
# =============================================================================
|
|
32
|
+
# CACHE & QUEUE - REDIS (API)
|
|
33
|
+
# =============================================================================
|
|
34
|
+
REDIS_HOST=localhost
|
|
35
|
+
REDIS_PASSWORD=
|
|
36
|
+
REDIS_PORT=6379
|
|
37
|
+
REDIS_USERNAME=
|
|
38
|
+
REDIS_QUEUE={{name}}
|
|
39
|
+
|
|
40
|
+
# =============================================================================
|
|
41
|
+
# CACHE CONFIGURATION (API)
|
|
42
|
+
# =============================================================================
|
|
43
|
+
CACHE_ENABLED=false
|
|
44
|
+
CACHE_DEFAULT_TTL=600
|
|
45
|
+
CACHE_SKIP_PATTERNS=""
|
|
46
|
+
|
|
47
|
+
# =============================================================================
|
|
48
|
+
# AUTHENTICATION - JWT (API)
|
|
49
|
+
# =============================================================================
|
|
50
|
+
JWT_SECRET="{{name}}_SECRET"
|
|
51
|
+
JWT_EXPIRES_IN="1d"
|
|
52
|
+
|
|
53
|
+
# =============================================================================
|
|
54
|
+
# WEB PUSH - VAPID (API & WEB)
|
|
55
|
+
# =============================================================================
|
|
56
|
+
VAPID_PUBLIC_KEY=""
|
|
57
|
+
VAPID_PRIVATE_KEY=""
|
|
58
|
+
VAPID_EMAIL=""
|
|
59
|
+
|
|
60
|
+
# Web-specific VAPID public key (for client-side use)
|
|
61
|
+
NEXT_PUBLIC_VAPID_PUBLIC_KEY=
|
|
62
|
+
|
|
63
|
+
# =============================================================================
|
|
64
|
+
# EMAIL CONFIGURATION (API)
|
|
65
|
+
# =============================================================================
|
|
66
|
+
EMAIL_PROVIDER=
|
|
67
|
+
EMAIL_API_KEY=
|
|
68
|
+
EMAIL_FROM=
|
|
69
|
+
|
|
70
|
+
# =============================================================================
|
|
71
|
+
# LOGGING - LOKI (API)
|
|
72
|
+
# =============================================================================
|
|
73
|
+
LOKI_ENABLED=true
|
|
74
|
+
LOKI_HOST=http://api.{{name}}.test:3100
|
|
75
|
+
# LOKI_USERNAME=your_username
|
|
76
|
+
# LOKI_PASSWORD=your_password
|
|
77
|
+
LOKI_APP_LABEL={{name}}-api
|
|
78
|
+
|
|
79
|
+
# =============================================================================
|
|
80
|
+
# TRACING - TEMPO (API)
|
|
81
|
+
# =============================================================================
|
|
82
|
+
TEMPO_ENABLED=true
|
|
83
|
+
TEMPO_ENDPOINT=http://localhost:4318/v1/traces
|
|
84
|
+
TEMPO_SERVICE_NAME={{name}}-api
|
|
85
|
+
TEMPO_SERVICE_VERSION=1.0.0
|
|
86
|
+
|
|
87
|
+
# =============================================================================
|
|
88
|
+
# OBJECT STORAGE - S3 / MINIO (API)
|
|
89
|
+
# =============================================================================
|
|
90
|
+
S3_TYPE="minio"
|
|
91
|
+
S3_ENDPOINT="http://minio.{{name}}.test:9000/"
|
|
92
|
+
S3_BUCKET="{{name}}"
|
|
93
|
+
S3_ACCESS_KEY_ID="minioadmin"
|
|
94
|
+
S3_SECRET_ACCESS_KEY="minioadmin"
|
|
95
|
+
S3_REGION=""
|
|
96
|
+
|
|
97
|
+
# =============================================================================
|
|
98
|
+
# RATE LIMITING / THROTTLER (API)
|
|
99
|
+
# =============================================================================
|
|
100
|
+
RATE_LIMIT_ENABLED=true
|
|
101
|
+
RATE_LIMIT_TTL=60000
|
|
102
|
+
RATE_LIMIT_REQUESTS=1000
|
|
103
|
+
IP_RATE_LIMIT_REQUESTS=200
|
|
104
|
+
|
|
105
|
+
# =============================================================================
|
|
106
|
+
# CORS CONFIGURATION (API)
|
|
107
|
+
# =============================================================================
|
|
108
|
+
CORS_ORIGINS=http://{{name}}.test:3951
|
|
109
|
+
CORS_ORIGIN_PATTERNS=
|
|
110
|
+
CORS_CREDENTIALS=true
|
|
111
|
+
CORS_METHODS=GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS
|
|
112
|
+
CORS_ALLOWED_HEADERS=Content-Type,Authorization,X-Requested-With,x-language,x-companyid
|
|
113
|
+
CORS_MAX_AGE=86400
|
|
114
|
+
CORS_PREFLIGHT_CONTINUE=false
|
|
115
|
+
CORS_OPTIONS_SUCCESS_STATUS=204
|
|
116
|
+
CORS_LOG_VIOLATIONS=false
|
|
117
|
+
|
|
118
|
+
# =============================================================================
|
|
119
|
+
# IMAGE SOURCES (WEB)
|
|
120
|
+
# =============================================================================
|
|
121
|
+
IMAGE_SOURCES=http://localhost:9000,http://host.docker.internal:9000,http://minio.{{name}}.test:9000
|
|
122
|
+
|
|
123
|
+
# =============================================================================
|
|
124
|
+
# AI
|
|
125
|
+
# =============================================================================
|
|
126
|
+
AI_PROVIDER=
|
|
127
|
+
AI_API_KEY=
|
|
128
|
+
AI_MODEL=
|
|
129
|
+
AI_URL=
|
|
130
|
+
AI_REGION=
|
|
131
|
+
AI_SECRET=
|
|
132
|
+
AI_INSTANCE=
|
|
133
|
+
AI_API_VERSION=
|
|
134
|
+
AI_INPUT_COST_PER_1M_TOKENS=0.1
|
|
135
|
+
AI_OUTPUT_COST_PER_1M_TOKENS=0.4
|
|
136
|
+
|
|
137
|
+
# =============================================================================
|
|
138
|
+
# EMBEDDER (API)
|
|
139
|
+
# =============================================================================
|
|
140
|
+
EMBEDDER_PROVIDER=
|
|
141
|
+
EMBEDDER_API_KEY=
|
|
142
|
+
EMBEDDER_MODEL=
|
|
143
|
+
EMBEDDER_URL=
|
|
144
|
+
EMBEDDER_INSTANCE=
|
|
145
|
+
EMBEDDER_API_VERSION=
|
|
146
|
+
EMBEDDER_DIMENSIONS=3072
|
|
147
|
+
|
|
148
|
+
# =============================================================================
|
|
149
|
+
# RATE LIMITER / THROTTLER (API)
|
|
150
|
+
# =============================================================================
|
|
151
|
+
RATE_LIMIT_ENABLED=true
|
|
152
|
+
RATE_LIMIT_TTL=60000
|
|
153
|
+
RATE_LIMIT_REQUESTS=1000
|
|
154
|
+
IP_RATE_LIMIT_REQUESTS=200
|
|
155
|
+
|
|
156
|
+
# =============================================================================
|
|
157
|
+
# GOOGLE API KEYS (API & WEB)
|
|
158
|
+
# =============================================================================
|
|
159
|
+
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=""
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: Check Library Updates
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 8 * * *' # Daily at 8 AM UTC
|
|
6
|
+
workflow_dispatch: # Manual trigger
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
check-updates:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- uses: actions/setup-node@v4
|
|
19
|
+
with:
|
|
20
|
+
node-version: 22
|
|
21
|
+
|
|
22
|
+
- name: Check for updates
|
|
23
|
+
id: check
|
|
24
|
+
run: |
|
|
25
|
+
# Read current versions
|
|
26
|
+
CURRENT=$(cat versions.production.json)
|
|
27
|
+
|
|
28
|
+
# Check latest versions from npm
|
|
29
|
+
NESTJS_LATEST=$(npm view @carlonicora/nestjs-neo4jsonapi version 2>/dev/null || echo "")
|
|
30
|
+
NEXTJS_LATEST=$(npm view @carlonicora/nextjs-jsonapi version 2>/dev/null || echo "")
|
|
31
|
+
|
|
32
|
+
NESTJS_CURRENT=$(echo "$CURRENT" | jq -r '.["@carlonicora/nestjs-neo4jsonapi"]')
|
|
33
|
+
NEXTJS_CURRENT=$(echo "$CURRENT" | jq -r '.["@carlonicora/nextjs-jsonapi"]')
|
|
34
|
+
|
|
35
|
+
UPDATES=""
|
|
36
|
+
|
|
37
|
+
if [ -n "$NESTJS_LATEST" ] && [ "$NESTJS_LATEST" != "$NESTJS_CURRENT" ]; then
|
|
38
|
+
UPDATES="$UPDATES nestjs-neo4jsonapi:$NESTJS_CURRENT→$NESTJS_LATEST"
|
|
39
|
+
jq --arg v "$NESTJS_LATEST" '.["@carlonicora/nestjs-neo4jsonapi"] = $v' versions.production.json > tmp.json && mv tmp.json versions.production.json
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [ -n "$NEXTJS_LATEST" ] && [ "$NEXTJS_LATEST" != "$NEXTJS_CURRENT" ]; then
|
|
43
|
+
UPDATES="$UPDATES nextjs-jsonapi:$NEXTJS_CURRENT→$NEXTJS_LATEST"
|
|
44
|
+
jq --arg v "$NEXTJS_LATEST" '.["@carlonicora/nextjs-jsonapi"] = $v' versions.production.json > tmp.json && mv tmp.json versions.production.json
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
if [ -n "$UPDATES" ]; then
|
|
48
|
+
echo "updates=true" >> $GITHUB_OUTPUT
|
|
49
|
+
echo "changes=$UPDATES" >> $GITHUB_OUTPUT
|
|
50
|
+
else
|
|
51
|
+
echo "updates=false" >> $GITHUB_OUTPUT
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
- name: Create Pull Request
|
|
55
|
+
if: steps.check.outputs.updates == 'true'
|
|
56
|
+
uses: peter-evans/create-pull-request@v6
|
|
57
|
+
with:
|
|
58
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
59
|
+
commit-message: "chore(deps): update library versions"
|
|
60
|
+
title: "chore(deps): update library versions"
|
|
61
|
+
body: |
|
|
62
|
+
Updates detected: ${{ steps.check.outputs.changes }}
|
|
63
|
+
|
|
64
|
+
This PR updates the production library versions in `versions.production.json`.
|
|
65
|
+
|
|
66
|
+
**Review the changelogs before merging:**
|
|
67
|
+
- [nestjs-neo4jsonapi releases](https://github.com/carlonicora/nestjs-neo4jsonapi/releases)
|
|
68
|
+
- [nextjs-jsonapi releases](https://github.com/carlonicora/nextjs-jsonapi/releases)
|
|
69
|
+
branch: deps/library-updates
|
|
70
|
+
base: dev
|
|
71
|
+
delete-branch: true
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: Dev
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- dev
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
strategy:
|
|
16
|
+
matrix:
|
|
17
|
+
node-version: [22.x]
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
with:
|
|
22
|
+
fetch-depth: 0
|
|
23
|
+
|
|
24
|
+
- name: Install pnpm
|
|
25
|
+
uses: pnpm/action-setup@v4
|
|
26
|
+
|
|
27
|
+
- name: Use Node.js 22.x
|
|
28
|
+
uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: "22.x"
|
|
31
|
+
cache: "pnpm"
|
|
32
|
+
|
|
33
|
+
- name: Install Dependencies
|
|
34
|
+
run: |
|
|
35
|
+
sed -i '/nestjs-neo4jsonapi/d; /nextjs-jsonapi/d' pnpm-workspace.yaml
|
|
36
|
+
pnpm install --no-frozen-lockfile
|
|
37
|
+
|
|
38
|
+
- name: Create .env file
|
|
39
|
+
run: |
|
|
40
|
+
cat > .env << EOF
|
|
41
|
+
NEXT_PUBLIC_API_URL=http://localhost:3000
|
|
42
|
+
NEXT_PUBLIC_ADDRESS=http://localhost:3001
|
|
43
|
+
NEXT_PUBLIC_VAPID_PUBLIC_KEY=placeholder
|
|
44
|
+
EOF
|
|
45
|
+
|
|
46
|
+
- name: Build shared package
|
|
47
|
+
run: pnpm --filter @{{name}}/shared build
|
|
48
|
+
|
|
49
|
+
- name: Build API
|
|
50
|
+
run: pnpm --filter {{name}}-api build
|
|
51
|
+
env:
|
|
52
|
+
NODE_OPTIONS: --max-old-space-size=4096
|
|
53
|
+
|
|
54
|
+
- name: Build Web
|
|
55
|
+
run: pnpm --filter {{name}}-web build
|
|
56
|
+
env:
|
|
57
|
+
NODE_OPTIONS: --max-old-space-size=4096
|
|
58
|
+
|
|
59
|
+
- name: Create Tag
|
|
60
|
+
env:
|
|
61
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
62
|
+
HUSKY: "0"
|
|
63
|
+
run: pnpm dlx semantic-release
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: Pull Request
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types:
|
|
6
|
+
- opened
|
|
7
|
+
- synchronize
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
node-version: [22.x]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- name: Install pnpm
|
|
23
|
+
uses: pnpm/action-setup@v4
|
|
24
|
+
|
|
25
|
+
- name: Use Node.js 22.x
|
|
26
|
+
uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: "22.x"
|
|
29
|
+
cache: "pnpm"
|
|
30
|
+
|
|
31
|
+
- name: Install Dependencies
|
|
32
|
+
run: |
|
|
33
|
+
sed -i '/nestjs-neo4jsonapi/d; /nextjs-jsonapi/d' pnpm-workspace.yaml
|
|
34
|
+
pnpm install --no-frozen-lockfile
|
|
35
|
+
|
|
36
|
+
- name: Create .env file
|
|
37
|
+
run: |
|
|
38
|
+
cat > .env << EOF
|
|
39
|
+
NEXT_PUBLIC_API_URL=http://localhost:3000
|
|
40
|
+
NEXT_PUBLIC_ADDRESS=http://localhost:3001
|
|
41
|
+
NEXT_PUBLIC_VAPID_PUBLIC_KEY=placeholder
|
|
42
|
+
EOF
|
|
43
|
+
|
|
44
|
+
- name: Build shared package
|
|
45
|
+
run: pnpm --filter @{{name}}/shared build
|
|
46
|
+
|
|
47
|
+
- name: Build API
|
|
48
|
+
run: pnpm --filter {{name}}-api build
|
|
49
|
+
env:
|
|
50
|
+
NODE_OPTIONS: --max-old-space-size=4096
|
|
51
|
+
|
|
52
|
+
- name: Build Web
|
|
53
|
+
run: pnpm --filter {{name}}-web build
|
|
54
|
+
env:
|
|
55
|
+
NODE_OPTIONS: --max-old-space-size=4096
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pnpm lint
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pnpm build
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
node_modules
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"printWidth": 120,
|
|
3
|
+
"tabWidth": 2,
|
|
4
|
+
"useTabs": false,
|
|
5
|
+
"semi": true,
|
|
6
|
+
"quoteProps": "as-needed",
|
|
7
|
+
"singleQuote": false,
|
|
8
|
+
"trailingComma": "all",
|
|
9
|
+
"bracketSpacing": true,
|
|
10
|
+
"bracketSameLine": false,
|
|
11
|
+
"arrowParens": "always",
|
|
12
|
+
"plugins": ["prettier-plugin-tailwindcss"]
|
|
13
|
+
}
|