nestforge-generator 0.5.0 → 0.6.1

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 (37) hide show
  1. package/README.md +28 -0
  2. package/README.pt-BR.md +28 -0
  3. package/dist/capabilities.js +19 -0
  4. package/dist/capabilities.js.map +1 -0
  5. package/dist/cli-arguments.js +109 -0
  6. package/dist/cli-arguments.js.map +1 -0
  7. package/dist/cli-help.js +40 -0
  8. package/dist/cli-help.js.map +1 -0
  9. package/dist/doctor.js +88 -0
  10. package/dist/doctor.js.map +1 -0
  11. package/dist/generator.js +3 -2
  12. package/dist/generator.js.map +1 -1
  13. package/dist/index.js +46 -3
  14. package/dist/index.js.map +1 -1
  15. package/dist/options.js +18 -0
  16. package/dist/options.js.map +1 -0
  17. package/dist/project-options.js +67 -0
  18. package/dist/project-options.js.map +1 -0
  19. package/dist/prompts.js +20 -16
  20. package/dist/prompts.js.map +1 -1
  21. package/dist/update-notifier.js +4 -0
  22. package/dist/update-notifier.js.map +1 -1
  23. package/package.json +2 -2
  24. package/templates/drizzle/eslint.config.mjs +47 -0
  25. package/templates/drizzle/src/app.module.ts +12 -5
  26. package/templates/drizzle/src/auth/auth.controller.ts +4 -1
  27. package/templates/drizzle/src/auth/auth.service.ts +15 -5
  28. package/templates/drizzle/src/database/schema/postgres.schema.ts +3 -1
  29. package/templates/drizzle/src/main.ts +3 -1
  30. package/templates/prisma/eslint.config.mjs +47 -0
  31. package/templates/prisma/src/app.module.ts +12 -5
  32. package/templates/prisma/src/auth/auth.controller.ts +4 -1
  33. package/templates/prisma/src/auth/auth.service.ts +7 -2
  34. package/templates/typeorm/eslint.config.mjs +47 -0
  35. package/templates/typeorm/src/app.module.ts +12 -5
  36. package/templates/typeorm/src/auth/auth.controller.ts +4 -1
  37. package/templates/typeorm/src/auth/auth.service.ts +13 -5
package/README.md CHANGED
@@ -16,6 +16,34 @@ Run the locally installed CLI:
16
16
  npx nestforge
17
17
  ```
18
18
 
19
+ ## Command-line usage
20
+
21
+ Running `npx nestforge` without arguments starts the complete interactive flow. You can also provide part of the configuration and answer only the remaining prompts:
22
+
23
+ ```bash
24
+ npx nestforge my-api --orm prisma --database postgres
25
+ ```
26
+
27
+ Use `--yes` or `--non-interactive` to generate without prompts. Omitted options use the documented defaults: TypeScript, Prisma, PostgreSQL, JWT, all optional features enabled, access control enabled, and automatic `.env` creation.
28
+
29
+ ```bash
30
+ npx nestforge my-api --yes
31
+ npx nestforge my-api --non-interactive --orm drizzle --database sqlite --no-redis
32
+ ```
33
+
34
+ Available utility commands:
35
+
36
+ ```bash
37
+ npx nestforge --help
38
+ npx nestforge --version
39
+ npx nestforge --list
40
+ npx nestforge --doctor
41
+ ```
42
+
43
+ Generation flags include `--language`, `--orm`, `--database`, `--auth`, `--docker`, `--swagger`, `--validation`, `--redis`, `--access-control`, and `--env`. Boolean features also accept the corresponding `--no-*` form. Use `--no-update-check` to skip the registry check and `--no-banner` to hide the banner.
44
+
45
+ Invalid values, contradictory toggles, and unsupported combinations terminate with an error instead of silently changing the requested configuration.
46
+
19
47
  ## Automatic update check
20
48
 
21
49
  When the CLI starts, it checks the npm registry for a newer stable version. If an update is available, you can:
package/README.pt-BR.md CHANGED
@@ -16,6 +16,34 @@ Execute a CLI instalada localmente:
16
16
  npx nestforge
17
17
  ```
18
18
 
19
+ ## Uso pela linha de comando
20
+
21
+ Executar `npx nestforge` sem argumentos inicia o fluxo interativo completo. Também é possível informar parte da configuração e responder apenas às perguntas restantes:
22
+
23
+ ```bash
24
+ npx nestforge minha-api --orm prisma --database postgres
25
+ ```
26
+
27
+ Use `--yes` ou `--non-interactive` para gerar sem prompts. As opções omitidas usam os padrões documentados: TypeScript, Prisma, PostgreSQL, JWT, todos os recursos opcionais habilitados, controle de acesso habilitado e criação automática do `.env`.
28
+
29
+ ```bash
30
+ npx nestforge minha-api --yes
31
+ npx nestforge minha-api --non-interactive --orm drizzle --database sqlite --no-redis
32
+ ```
33
+
34
+ Comandos utilitários disponíveis:
35
+
36
+ ```bash
37
+ npx nestforge --help
38
+ npx nestforge --version
39
+ npx nestforge --list
40
+ npx nestforge --doctor
41
+ ```
42
+
43
+ As flags de geração incluem `--language`, `--orm`, `--database`, `--auth`, `--docker`, `--swagger`, `--validation`, `--redis`, `--access-control` e `--env`. Recursos booleanos também aceitam a forma `--no-*` correspondente. Use `--no-update-check` para não consultar o registro e `--no-banner` para ocultar o banner.
44
+
45
+ Valores inválidos, toggles contraditórios e combinações não suportadas encerram a execução com erro, sem modificar silenciosamente a configuração solicitada.
46
+
19
47
  ## Verificação automática de atualizações
20
48
 
21
49
  Quando a CLI inicia, ela consulta o registro do npm em busca de uma versão estável mais recente. Se houver uma atualização, você pode:
@@ -0,0 +1,19 @@
1
+ export const CAPABILITIES = `
2
+ Supported NestForge combinations
3
+
4
+ Languages:
5
+ typescript, javascript
6
+
7
+ ORMs and databases:
8
+ prisma postgres, mysql, sqlite, mongodb
9
+ typeorm postgres, mysql, sqlite
10
+ drizzle postgres, mysql, sqlite
11
+ none no database
12
+
13
+ Authentication:
14
+ jwt, session, oauth, none
15
+
16
+ Projects without an ORM currently support only authentication "none".
17
+ MongoDB is currently available only with Prisma.
18
+ `.trim();
19
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;CAiB3B,CAAC,IAAI,EAAE,CAAC"}
@@ -0,0 +1,109 @@
1
+ import { parseArgs } from 'node:util';
2
+ import { AUTH_STRATEGY_CHOICES, DATABASE_CHOICES, LANGUAGE_CHOICES, ORM_CHOICES, } from './options.js';
3
+ export function parseCliArguments(args) {
4
+ const { values, positionals } = parseArgs({
5
+ args,
6
+ allowPositionals: true,
7
+ strict: true,
8
+ options: {
9
+ help: { type: 'boolean', short: 'h' },
10
+ version: { type: 'boolean', short: 'V' },
11
+ list: { type: 'boolean' },
12
+ doctor: { type: 'boolean' },
13
+ name: { type: 'string' },
14
+ language: { type: 'string' },
15
+ orm: { type: 'string' },
16
+ database: { type: 'string' },
17
+ auth: { type: 'string' },
18
+ 'non-interactive': { type: 'boolean' },
19
+ yes: { type: 'boolean', short: 'y' },
20
+ docker: { type: 'boolean' },
21
+ 'no-docker': { type: 'boolean' },
22
+ swagger: { type: 'boolean' },
23
+ 'no-swagger': { type: 'boolean' },
24
+ validation: { type: 'boolean' },
25
+ 'no-validation': { type: 'boolean' },
26
+ redis: { type: 'boolean' },
27
+ 'no-redis': { type: 'boolean' },
28
+ 'access-control': { type: 'boolean' },
29
+ 'no-access-control': { type: 'boolean' },
30
+ env: { type: 'boolean' },
31
+ 'no-env': { type: 'boolean' },
32
+ 'no-update-check': { type: 'boolean' },
33
+ 'no-banner': { type: 'boolean' },
34
+ },
35
+ });
36
+ const commands = [
37
+ values.help && 'help',
38
+ values.version && 'version',
39
+ values.list && 'list',
40
+ values.doctor && 'doctor',
41
+ ].filter(Boolean);
42
+ if (commands.length > 1) {
43
+ throw new Error('Use only one command at a time: --help, --version, --list, or --doctor.');
44
+ }
45
+ if (positionals.length > 1) {
46
+ throw new Error('Only one positional project name is allowed.');
47
+ }
48
+ if (values.name && positionals[0] && values.name !== positionals[0]) {
49
+ throw new Error('The positional project name and --name must match when both are provided.');
50
+ }
51
+ const projectName = values.name ?? positionals[0];
52
+ return {
53
+ command: commands[0] ?? 'generate',
54
+ options: {
55
+ projectName,
56
+ language: parseChoice(values.language, LANGUAGE_CHOICES, '--language'),
57
+ orm: parseChoice(values.orm, ORM_CHOICES, '--orm'),
58
+ database: parseChoice(values.database, DATABASE_CHOICES, '--database'),
59
+ authStrategy: parseChoice(values.auth, AUTH_STRATEGY_CHOICES, '--auth'),
60
+ docker: readToggle(values, 'docker'),
61
+ swagger: readToggle(values, 'swagger'),
62
+ validation: readToggle(values, 'validation'),
63
+ redis: readToggle(values, 'redis'),
64
+ accessControl: readToggle(values, 'access-control'),
65
+ createEnv: readToggle(values, 'env'),
66
+ },
67
+ nonInteractive: Boolean(values['non-interactive'] || values.yes),
68
+ checkUpdates: values['no-update-check'] !== true,
69
+ showBanner: values['no-banner'] !== true,
70
+ };
71
+ }
72
+ export function readCliArgumentVector(args = process.argv.slice(2), restartedArgs = process.env.NESTFORGE_RESTART_ARGS) {
73
+ if (!restartedArgs) {
74
+ return args;
75
+ }
76
+ try {
77
+ const parsed = JSON.parse(restartedArgs);
78
+ if (Array.isArray(parsed) &&
79
+ parsed.every((argument) => typeof argument === 'string')) {
80
+ return parsed;
81
+ }
82
+ }
83
+ catch {
84
+ // Ignore malformed external environment values.
85
+ }
86
+ return args;
87
+ }
88
+ function readToggle(values, name) {
89
+ const enabled = values[name] === true;
90
+ const disabled = values[`no-${name}`] === true;
91
+ if (enabled && disabled) {
92
+ throw new Error(`Options --${name} and --no-${name} cannot be used together.`);
93
+ }
94
+ if (enabled)
95
+ return true;
96
+ if (disabled)
97
+ return false;
98
+ return undefined;
99
+ }
100
+ function parseChoice(value, choices, flag) {
101
+ if (value === undefined) {
102
+ return undefined;
103
+ }
104
+ if (!choices.includes(value)) {
105
+ throw new Error(`Invalid value for ${flag}: "${value}". Available values: ${choices.join(', ')}.`);
106
+ }
107
+ return value;
108
+ }
109
+ //# sourceMappingURL=cli-arguments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-arguments.js","sourceRoot":"","sources":["../src/cli-arguments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export const CLI_HELP = `
2
+ NestForge — generate production-ready NestJS projects
3
+
4
+ Usage:
5
+ nestforge [project-name] [options]
6
+ nestforge --name <project-name> [options]
7
+
8
+ Commands:
9
+ -h, --help Show this help
10
+ -V, --version Show the installed version
11
+ --list List supported combinations
12
+ --doctor Check the local environment
13
+
14
+ Generation:
15
+ --language <value> typescript | javascript
16
+ --orm <value> prisma | typeorm | drizzle | none
17
+ --database <value> postgres | mysql | sqlite | mongodb | none
18
+ --auth <value> jwt | session | oauth | none
19
+ -y, --yes Generate non-interactively with defaults
20
+ --non-interactive Never open configuration prompts
21
+
22
+ Feature toggles:
23
+ --docker / --no-docker
24
+ --swagger / --no-swagger
25
+ --validation / --no-validation
26
+ --redis / --no-redis
27
+ --access-control / --no-access-control
28
+ --env / --no-env
29
+
30
+ Output and updates:
31
+ --no-banner Hide the NestForge banner
32
+ --no-update-check Skip the automatic update check
33
+
34
+ Examples:
35
+ nestforge
36
+ nestforge my-api --orm prisma
37
+ nestforge my-api --yes
38
+ nestforge my-api --non-interactive --orm drizzle --database sqlite
39
+ `.trim();
40
+ //# sourceMappingURL=cli-help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-help.js","sourceRoot":"","sources":["../src/cli-help.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCvB,CAAC,IAAI,EAAE,CAAC"}
package/dist/doctor.js ADDED
@@ -0,0 +1,88 @@
1
+ export async function runDoctorChecks() {
2
+ const nodeMajor = Number(process.versions.node.split('.')[0]);
3
+ const checks = [
4
+ {
5
+ label: 'Node.js',
6
+ status: nodeMajor >= 20 ? 'pass' : 'fail',
7
+ detail: `v${process.versions.node} (NestForge requires Node.js 20 or newer)`,
8
+ },
9
+ ];
10
+ try {
11
+ await access(process.cwd(), constants.W_OK);
12
+ checks.push({
13
+ label: 'Current directory',
14
+ status: 'pass',
15
+ detail: 'Writable',
16
+ });
17
+ }
18
+ catch {
19
+ checks.push({
20
+ label: 'Current directory',
21
+ status: 'fail',
22
+ detail: 'Not writable',
23
+ });
24
+ }
25
+ checks.push(checkCommand('npm', ['--version'], false));
26
+ checks.push(checkCommand('Git', ['--version'], false, 'git'));
27
+ checks.push(checkCommand('Docker', ['--version'], true, 'docker'));
28
+ return {
29
+ checks,
30
+ healthy: checks.every((check) => check.status !== 'fail'),
31
+ };
32
+ }
33
+ export function formatDoctorReport(report) {
34
+ const symbols = {
35
+ pass: '✓',
36
+ warning: '!',
37
+ fail: '✗',
38
+ };
39
+ return [
40
+ 'NestForge doctor',
41
+ '',
42
+ ...report.checks.map((check) => `${symbols[check.status]} ${check.label}: ${check.detail}`),
43
+ '',
44
+ report.healthy
45
+ ? 'Environment ready.'
46
+ : 'Resolve the failed checks before generating a project.',
47
+ ].join('\n');
48
+ }
49
+ function checkCommand(label, args, optional, command = label) {
50
+ if (process.platform === 'win32') {
51
+ const lookup = spawnSync('where.exe', [command], {
52
+ encoding: 'utf8',
53
+ windowsHide: true,
54
+ });
55
+ if (lookup.status === 0) {
56
+ return {
57
+ label,
58
+ status: 'pass',
59
+ detail: lookup.stdout.trim().split(/\r?\n/)[0],
60
+ };
61
+ }
62
+ return {
63
+ label,
64
+ status: optional ? 'warning' : 'fail',
65
+ detail: optional ? 'Not found (optional)' : 'Not found',
66
+ };
67
+ }
68
+ const result = spawnSync(command, args, {
69
+ encoding: 'utf8',
70
+ windowsHide: true,
71
+ });
72
+ if (result.status === 0) {
73
+ return {
74
+ label,
75
+ status: 'pass',
76
+ detail: (result.stdout || result.stderr).trim(),
77
+ };
78
+ }
79
+ return {
80
+ label,
81
+ status: optional ? 'warning' : 'fail',
82
+ detail: optional ? 'Not found (optional)' : 'Not found',
83
+ };
84
+ }
85
+ import { constants } from 'node:fs';
86
+ import { access } from 'node:fs/promises';
87
+ import { spawnSync } from 'node:child_process';
88
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAkB;QAC1B;YACI,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACzC,MAAM,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,2CAA2C;SAC/E;KACJ,CAAC;IAEF,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC;YACR,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,UAAU;SACrB,CAAC,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,CAAC,IAAI,CAAC;YACR,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,cAAc;SACzB,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnE,OAAO;QACH,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;KAC5D,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACnD,MAAM,OAAO,GAAiC;QAC1C,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,GAAG;KACZ,CAAC;IAEF,OAAO;QACH,kBAAkB;QAClB,EAAE;QACF,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAChB,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CACxE;QACD,EAAE;QACF,MAAM,CAAC,OAAO;YACV,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,wDAAwD;KACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CACjB,KAAa,EACb,IAAc,EACd,QAAiB,EACjB,OAAO,GAAG,KAAK;IAEf,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,SAAS,CACpB,WAAW,EACX,CAAC,OAAO,CAAC,EACT;YACI,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,IAAI;SACpB,CACJ,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO;gBACH,KAAK;gBACL,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACjD,CAAC;QACN,CAAC;QAED,OAAO;YACH,KAAK;YACL,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YACrC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW;SAC1D,CAAC;IACN,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACpC,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACH,KAAK;YACL,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;SAClD,CAAC;IACN,CAAC;IAED,OAAO;QACH,KAAK;QACL,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;QACrC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW;KAC1D,CAAC;AACN,CAAC;AACD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/generator.js CHANGED
@@ -66,7 +66,7 @@ export async function generateProject(options) {
66
66
  throw new Error(`The "${projectName}" directory already exists. Choose another name or remove the directory.`);
67
67
  }
68
68
  await fs.copy(templateDir, targetDir);
69
- const enabledFeatures = buildEnabledFeatures(features, accessControl, database, authStrategy);
69
+ const enabledFeatures = buildEnabledFeatures(features, accessControl, database, authStrategy, language);
70
70
  await applyDockerToggle(targetDir, enabledFeatures);
71
71
  if (orm !== 'none') {
72
72
  await applyDatabaseConfig(targetDir, database);
@@ -84,8 +84,9 @@ export async function generateProject(options) {
84
84
  }
85
85
  return targetDir;
86
86
  }
87
- function buildEnabledFeatures(features, accessControl, database, authStrategy) {
87
+ function buildEnabledFeatures(features, accessControl, database, authStrategy, language) {
88
88
  const enabled = new Set(features);
89
+ enabled.add(`language:${language}`);
89
90
  if (accessControl) {
90
91
  enabled.add('rbac');
91
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,12 +5,55 @@ import path from 'node:path';
5
5
  import { runPrompts } from './prompts.js';
6
6
  import { generateProject } from './generator.js';
7
7
  import { handleUpdateNotification } from './update-notifier.js';
8
+ import { parseCliArguments, readCliArgumentVector } from './cli-arguments.js';
9
+ import { CLI_HELP } from './cli-help.js';
10
+ import { readPackageInfo } from './package-info.js';
11
+ import { CAPABILITIES } from './capabilities.js';
12
+ import { formatDoctorReport, runDoctorChecks } from './doctor.js';
13
+ import { resolveNonInteractiveOptions } from './project-options.js';
8
14
  async function main() {
9
- const updateResult = await handleUpdateNotification();
15
+ try {
16
+ await run();
17
+ }
18
+ catch (error) {
19
+ log.error(error instanceof Error ? error.message : String(error));
20
+ process.exitCode = 1;
21
+ }
22
+ }
23
+ async function run() {
24
+ const cli = parseCliArguments(readCliArgumentVector());
25
+ if (cli.command === 'help') {
26
+ console.log(CLI_HELP);
27
+ return;
28
+ }
29
+ if (cli.command === 'version') {
30
+ const packageInfo = await readPackageInfo();
31
+ console.log(packageInfo.version);
32
+ return;
33
+ }
34
+ if (cli.command === 'list') {
35
+ console.log(CAPABILITIES);
36
+ return;
37
+ }
38
+ if (cli.command === 'doctor') {
39
+ const report = await runDoctorChecks();
40
+ console.log(formatDoctorReport(report));
41
+ if (!report.healthy) {
42
+ process.exitCode = 1;
43
+ }
44
+ return;
45
+ }
46
+ const updateResult = cli.checkUpdates
47
+ ? await handleUpdateNotification()
48
+ : 'continue';
10
49
  if (updateResult === 'restarted') {
11
50
  return;
12
51
  }
13
- const options = await runPrompts();
52
+ const options = cli.nonInteractive
53
+ ? resolveNonInteractiveOptions(cli.options)
54
+ : await runPrompts(cli.options, {
55
+ showBanner: cli.showBanner,
56
+ });
14
57
  try {
15
58
  const targetDir = await generateProject(options);
16
59
  const relativeDir = path.relative(process.cwd(), targetDir) || '.';
@@ -72,7 +115,7 @@ async function main() {
72
115
  }
73
116
  catch (error) {
74
117
  log.error(error instanceof Error ? error.message : String(error));
75
- process.exit(1);
118
+ process.exitCode = 1;
76
119
  }
77
120
  }
78
121
  main();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export const LANGUAGE_CHOICES = ['typescript', 'javascript'];
2
+ export const ORM_CHOICES = ['prisma', 'typeorm', 'drizzle', 'none'];
3
+ export const DATABASE_CHOICES = ['postgres', 'mysql', 'sqlite', 'mongodb', 'none'];
4
+ export const AUTH_STRATEGY_CHOICES = ['jwt', 'session', 'oauth', 'none'];
5
+ export const FEATURE_NAMES = ['docker', 'swagger', 'validation', 'redis'];
6
+ export const DEFAULT_PROJECT_OPTIONS = {
7
+ language: 'typescript',
8
+ orm: 'prisma',
9
+ database: 'postgres',
10
+ docker: true,
11
+ swagger: true,
12
+ validation: true,
13
+ redis: true,
14
+ authStrategy: 'jwt',
15
+ accessControl: true,
16
+ createEnv: true,
17
+ };
18
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,YAAY,CAAU,CAAC;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAC5F,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAElF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAU,CAAC;AAGnF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACnC,QAAQ,EAAE,YAAY;IACtB,GAAG,EAAE,QAAQ;IACb,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,IAAI;CACyC,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { DEFAULT_PROJECT_OPTIONS, } from './options.js';
2
+ export function buildFeatureList(options) {
3
+ return [
4
+ options.docker && 'docker',
5
+ options.swagger && 'swagger',
6
+ options.validation && 'validation',
7
+ options.redis && 'redis',
8
+ ].filter((feature) => Boolean(feature));
9
+ }
10
+ export function assertCompatibleOptionInput(input) {
11
+ if (input.orm === 'none' && input.database && input.database !== 'none') {
12
+ throw new Error('Projects without an ORM must use "none" as their database option.');
13
+ }
14
+ if (input.orm === 'none' && input.authStrategy && input.authStrategy !== 'none') {
15
+ throw new Error('Projects without an ORM currently support only the "none" authentication strategy.');
16
+ }
17
+ if (input.orm === 'none' && input.accessControl === true) {
18
+ throw new Error('Access control is not available without an ORM.');
19
+ }
20
+ if (input.database === 'mongodb' && input.orm && input.orm !== 'prisma') {
21
+ throw new Error('MongoDB is currently available only with Prisma.');
22
+ }
23
+ if (input.authStrategy === 'none' && input.accessControl === true) {
24
+ throw new Error('Access control requires an authentication strategy.');
25
+ }
26
+ }
27
+ export function resolveNonInteractiveOptions(input) {
28
+ assertCompatibleOptionInput(input);
29
+ if (!input.projectName) {
30
+ throw new Error('A project name is required in non-interactive mode.');
31
+ }
32
+ const orm = input.orm ?? DEFAULT_PROJECT_OPTIONS.orm;
33
+ const database = orm === 'none'
34
+ ? 'none'
35
+ : input.database ?? DEFAULT_PROJECT_OPTIONS.database;
36
+ const authStrategy = orm === 'none'
37
+ ? 'none'
38
+ : input.authStrategy ?? DEFAULT_PROJECT_OPTIONS.authStrategy;
39
+ const accessControl = authStrategy === 'none'
40
+ ? false
41
+ : input.accessControl ?? DEFAULT_PROJECT_OPTIONS.accessControl;
42
+ const featureInput = {
43
+ docker: input.docker ?? DEFAULT_PROJECT_OPTIONS.docker,
44
+ swagger: input.swagger ?? DEFAULT_PROJECT_OPTIONS.swagger,
45
+ validation: input.validation ?? DEFAULT_PROJECT_OPTIONS.validation,
46
+ redis: input.redis ?? DEFAULT_PROJECT_OPTIONS.redis,
47
+ };
48
+ const resolved = {
49
+ projectName: input.projectName,
50
+ language: input.language ?? DEFAULT_PROJECT_OPTIONS.language,
51
+ orm,
52
+ database,
53
+ features: buildFeatureList(featureInput),
54
+ authStrategy,
55
+ accessControl,
56
+ createEnv: input.createEnv ?? DEFAULT_PROJECT_OPTIONS.createEnv,
57
+ };
58
+ assertCompatibleOptionInput({
59
+ ...input,
60
+ orm: resolved.orm,
61
+ database: resolved.database,
62
+ authStrategy: resolved.authStrategy,
63
+ accessControl: resolved.accessControl,
64
+ });
65
+ return resolved;
66
+ }
67
+ //# sourceMappingURL=project-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-options.js","sourceRoot":"","sources":["../src/project-options.ts"],"names":[],"mappings":"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"}
package/dist/prompts.js CHANGED
@@ -2,6 +2,7 @@ import { intro, outro, text, select, confirm, isCancel, cancel } from '@clack/pr
2
2
  import gradient from 'gradient-string';
3
3
  import pc from 'picocolors';
4
4
  import { validateProjectName } from './project-name.js';
5
+ import { assertCompatibleOptionInput } from './project-options.js';
5
6
  // red -> orange, the NestJS colors
6
7
  const nestforgeGradient = gradient(['#e0234e', '#ff8a65']);
7
8
  const logo = [
@@ -25,11 +26,14 @@ function handleCancel(value) {
25
26
  process.exit(0);
26
27
  }
27
28
  }
28
- export async function runPrompts() {
29
- showBanner();
29
+ export async function runPrompts(initial = {}, settings = {}) {
30
+ assertCompatibleOptionInput(initial);
31
+ if (settings.showBanner !== false) {
32
+ showBanner();
33
+ }
30
34
  intro(pc.bgMagenta(pc.black(' NestForge ')));
31
35
  // 1. Project name
32
- const projectName = await text({
36
+ const projectName = initial.projectName ?? await text({
33
37
  message: 'What is your project name?',
34
38
  placeholder: 'my-nest-api',
35
39
  defaultValue: 'my-nest-api',
@@ -37,7 +41,7 @@ export async function runPrompts() {
37
41
  });
38
42
  handleCancel(projectName);
39
43
  // 2. Language
40
- const language = await select({
44
+ const language = initial.language ?? await select({
41
45
  message: 'TypeScript or JavaScript?',
42
46
  options: [
43
47
  { value: 'typescript', label: 'TypeScript', hint: 'Recommended' },
@@ -46,7 +50,7 @@ export async function runPrompts() {
46
50
  });
47
51
  handleCancel(language);
48
52
  // 3. ORM selection
49
- const orm = await select({
53
+ const orm = initial.orm ?? await select({
50
54
  message: 'Choose the ORM/Query Builder:',
51
55
  options: [
52
56
  { value: 'prisma', label: 'Prisma', hint: 'Recommended' },
@@ -57,8 +61,8 @@ export async function runPrompts() {
57
61
  });
58
62
  handleCancel(orm);
59
63
  // 4. Database
60
- let database = 'none';
61
- if (orm !== 'none') {
64
+ let database = initial.database ?? 'none';
65
+ if (orm !== 'none' && initial.database === undefined) {
62
66
  const databaseSelection = await select({
63
67
  message: 'Which database do you want to use?',
64
68
  options: [
@@ -75,28 +79,28 @@ export async function runPrompts() {
75
79
  }
76
80
  // 5. Additional features (one yes/no prompt at a time)
77
81
  const features = [];
78
- const wantsDocker = await confirm({
82
+ const wantsDocker = initial.docker ?? await confirm({
79
83
  message: 'Do you want to add Docker?',
80
84
  initialValue: true,
81
85
  });
82
86
  handleCancel(wantsDocker);
83
87
  if (wantsDocker)
84
88
  features.push('docker');
85
- const wantsSwagger = await confirm({
89
+ const wantsSwagger = initial.swagger ?? await confirm({
86
90
  message: 'Do you want to include Swagger/OpenAPI documentation?',
87
91
  initialValue: true,
88
92
  });
89
93
  handleCancel(wantsSwagger);
90
94
  if (wantsSwagger)
91
95
  features.push('swagger');
92
- const wantsValidation = await confirm({
96
+ const wantsValidation = initial.validation ?? await confirm({
93
97
  message: 'Do you want to enable global validation with Zod?',
94
98
  initialValue: true,
95
99
  });
96
100
  handleCancel(wantsValidation);
97
101
  if (wantsValidation)
98
102
  features.push('validation');
99
- const wantsRedis = await confirm({
103
+ const wantsRedis = initial.redis ?? await confirm({
100
104
  message: 'Do you want to include Redis (cache/queues + email through BullMQ)?',
101
105
  initialValue: true,
102
106
  });
@@ -104,8 +108,8 @@ export async function runPrompts() {
104
108
  if (wantsRedis)
105
109
  features.push('redis');
106
110
  // 6. Authentication strategy
107
- let authStrategy = 'none';
108
- if (orm !== 'none') {
111
+ let authStrategy = initial.authStrategy ?? 'none';
112
+ if (orm !== 'none' && initial.authStrategy === undefined) {
109
113
  const authStrategySelection = await select({
110
114
  message: 'Which authentication strategy do you want to use?',
111
115
  options: [
@@ -119,8 +123,8 @@ export async function runPrompts() {
119
123
  authStrategy = authStrategySelection;
120
124
  }
121
125
  // 7. Access control (only applicable when authentication is enabled)
122
- let accessControl = false;
123
- if (authStrategy !== 'none') {
126
+ let accessControl = initial.accessControl ?? false;
127
+ if (authStrategy !== 'none' && initial.accessControl === undefined) {
124
128
  const wantsAccessControl = await confirm({
125
129
  message: '🛡️ Do you want to include access control (RBAC + Permissions)?',
126
130
  initialValue: true,
@@ -129,7 +133,7 @@ export async function runPrompts() {
129
133
  accessControl = wantsAccessControl;
130
134
  }
131
135
  // 8. Automatic .env creation
132
- const createEnv = await confirm({
136
+ const createEnv = initial.createEnv ?? await confirm({
133
137
  message: 'Do you want to create the .env file automatically (from .env.example)?',
134
138
  initialValue: true,
135
139
  });
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,10 @@ export async function runLatestVersion() {
26
26
  const child = spawn(updateProcess.command, updateProcess.args, {
27
27
  stdio: 'inherit',
28
28
  shell: false,
29
+ env: {
30
+ ...process.env,
31
+ NESTFORGE_RESTART_ARGS: JSON.stringify(process.argv.slice(2)),
32
+ },
29
33
  });
30
34
  let settled = false;
31
35
  const finish = (success) => {
@@ -1 +1 @@
1
- {"version":3,"file":"update-notifier.js","sourceRoot":"","sources":["../src/update-notifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-notifier.js","sourceRoot":"","sources":["../src/update-notifier.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nestforge-generator",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "description": "Interactive CLI for generating a NestJS project from a NestForge starter template",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -19,7 +19,7 @@
19
19
  "build": "tsc -p tsconfig.json && npm run copy:templates",
20
20
  "copy:templates": "node scripts/copy-templates.mjs",
21
21
  "dev": "tsx src/index.ts",
22
- "test": "tsx --test test/generator.test.ts test/update-check.test.ts",
22
+ "test": "tsx --test test/generator.test.ts test/update-check.test.ts test/cli-arguments.test.ts test/project-options.test.ts",
23
23
  "lint": "eslint \"src/**/*.ts\" --fix",
24
24
  "prepack": "npm run build",
25
25
  "prepublishOnly": "npm test"
@@ -0,0 +1,47 @@
1
+ import prettier from 'eslint-config-prettier';
2
+ // nestforge:feature:language:typescript
3
+ import tseslint from '@typescript-eslint/eslint-plugin';
4
+ import tsParser from '@typescript-eslint/parser';
5
+ // nestforge:feature:language:typescript:end
6
+
7
+ export default [
8
+ {
9
+ ignores: ['dist/', 'coverage/', 'node_modules/'],
10
+ },
11
+ // nestforge:feature:language:typescript
12
+ {
13
+ files: ['src/**/*.ts', 'test/**/*.ts'],
14
+ languageOptions: {
15
+ parser: tsParser,
16
+ parserOptions: {
17
+ ecmaVersion: 'latest',
18
+ sourceType: 'commonjs',
19
+ },
20
+ },
21
+ plugins: {
22
+ '@typescript-eslint': tseslint,
23
+ },
24
+ rules: {
25
+ ...tseslint.configs.recommended.rules,
26
+ },
27
+ },
28
+ {
29
+ files: ['src/**/*.spec.ts', 'test/**/*.ts'],
30
+ rules: {
31
+ '@typescript-eslint/no-explicit-any': 'off',
32
+ },
33
+ },
34
+ // nestforge:feature:language:typescript:end
35
+ // nestforge:feature:language:javascript
36
+ {
37
+ files: ['src/**/*.js', 'test/**/*.js'],
38
+ languageOptions: {
39
+ parserOptions: {
40
+ ecmaVersion: 'latest',
41
+ sourceType: 'commonjs',
42
+ },
43
+ },
44
+ },
45
+ // nestforge:feature:language:javascript:end
46
+ prettier,
47
+ ];
@@ -1,4 +1,7 @@
1
- import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
1
+ import { Module } from '@nestjs/common';
2
+ // nestforge:feature:auth:session
3
+ import { MiddlewareConsumer, NestModule } from '@nestjs/common';
4
+ // nestforge:feature:auth:session:end
2
5
  import { ConfigModule } from '@nestjs/config';
3
6
  import { ThrottlerModule } from '@nestjs/throttler';
4
7
  // nestforge:feature:redis
@@ -61,12 +64,16 @@ import { validateEnv } from './config/env.validation';
61
64
  MetricsModule,
62
65
  ],
63
66
  })
64
- export class AppModule implements NestModule {
67
+ export class AppModule
68
+ // nestforge:feature:auth:session
69
+ implements NestModule
70
+ // nestforge:feature:auth:session:end
71
+ {
72
+ // nestforge:feature:auth:session
65
73
  configure(consumer: MiddlewareConsumer) {
66
- // nestforge:feature:auth:session
67
74
  if (process.env.ENABLE_CSRF === 'true') {
68
75
  consumer.apply(CsrfMiddleware).forRoutes('*');
69
76
  }
70
- // nestforge:feature:auth:session:end
71
77
  }
72
- }
78
+ // nestforge:feature:auth:session:end
79
+ }
@@ -1,4 +1,7 @@
1
- import { Body, Controller, Get, HttpCode, HttpStatus, Post, Query, Req, UseGuards } from '@nestjs/common';
1
+ import { Body, Controller, Get, HttpCode, HttpStatus, Post, Req, UseGuards } from '@nestjs/common';
2
+ // nestforge:feature:redis,auth:password
3
+ import { Query } from '@nestjs/common';
4
+ // nestforge:feature:redis,auth:password:end
2
5
  // nestforge:feature:swagger
3
6
  import { ApiExcludeEndpoint, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
4
7
  // nestforge:feature:swagger:end
@@ -1,19 +1,27 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ // nestforge:feature:auth:password
1
3
  import {
2
4
  ConflictException,
3
- Injectable,
4
5
  UnauthorizedException,
5
6
  } from '@nestjs/common';
7
+ // nestforge:feature:auth:password:end
6
8
  import {
7
9
  and,
8
10
  eq,
9
- isNull,
10
11
  } from 'drizzle-orm';
12
+ // nestforge:feature:redis,auth:password
13
+ import { isNull } from 'drizzle-orm';
14
+ // nestforge:feature:redis,auth:password:end
15
+ // nestforge:feature:auth:password
11
16
  import * as bcrypt from 'bcryptjs';
17
+ // nestforge:feature:auth:password:end
18
+ import { randomUUID } from 'node:crypto';
19
+ // nestforge:feature:redis,auth:password
12
20
  import {
13
21
  createHash,
14
22
  randomBytes,
15
- randomUUID,
16
23
  } from 'node:crypto';
24
+ // nestforge:feature:redis,auth:password:end
17
25
  import { Role } from '../common/constants/role.enum';
18
26
  import { InjectDatabase } from '../database/database.decorators';
19
27
  import type { DrizzleDatabase } from '../database/database.types';
@@ -22,9 +30,9 @@ import {
22
30
  users,
23
31
  } from '../database/schema';
24
32
 
25
- // nestforge:feature:auth:token
33
+ // nestforge:feature:redis,auth:password,auth:token
26
34
  import { refreshTokens } from '../database/schema';
27
- // nestforge:feature:auth:token:end
35
+ // nestforge:feature:redis,auth:password,auth:token:end
28
36
 
29
37
  // nestforge:feature:redis,auth:password
30
38
  import { MailService } from '../mail/mail.service';
@@ -623,9 +631,11 @@ export class AuthService {
623
631
  };
624
632
  }
625
633
 
634
+ // nestforge:feature:redis,auth:password
626
635
  private hashToken(token: string): string {
627
636
  return createHash('sha256')
628
637
  .update(token)
629
638
  .digest('hex');
630
639
  }
640
+ // nestforge:feature:redis,auth:password:end
631
641
  }
@@ -1,10 +1,12 @@
1
1
  // nestforge:feature-file:database:postgres
2
2
  import {
3
+ // nestforge:feature:auth:session
3
4
  bigint,
5
+ text,
6
+ // nestforge:feature:auth:session:end
4
7
  index,
5
8
  pgEnum,
6
9
  pgTable,
7
- text,
8
10
  timestamp,
9
11
  uniqueIndex,
10
12
  uuid,
@@ -142,4 +142,6 @@ async function bootstrap() {
142
142
  const port = process.env.PORT ?? 3000;
143
143
 
144
144
  await app.listen(port);
145
- }
145
+ }
146
+
147
+ void bootstrap();
@@ -0,0 +1,47 @@
1
+ import prettier from 'eslint-config-prettier';
2
+ // nestforge:feature:language:typescript
3
+ import tseslint from '@typescript-eslint/eslint-plugin';
4
+ import tsParser from '@typescript-eslint/parser';
5
+ // nestforge:feature:language:typescript:end
6
+
7
+ export default [
8
+ {
9
+ ignores: ['dist/', 'coverage/', 'node_modules/'],
10
+ },
11
+ // nestforge:feature:language:typescript
12
+ {
13
+ files: ['src/**/*.ts', 'test/**/*.ts'],
14
+ languageOptions: {
15
+ parser: tsParser,
16
+ parserOptions: {
17
+ ecmaVersion: 'latest',
18
+ sourceType: 'commonjs',
19
+ },
20
+ },
21
+ plugins: {
22
+ '@typescript-eslint': tseslint,
23
+ },
24
+ rules: {
25
+ ...tseslint.configs.recommended.rules,
26
+ },
27
+ },
28
+ {
29
+ files: ['src/**/*.spec.ts', 'test/**/*.ts'],
30
+ rules: {
31
+ '@typescript-eslint/no-explicit-any': 'off',
32
+ },
33
+ },
34
+ // nestforge:feature:language:typescript:end
35
+ // nestforge:feature:language:javascript
36
+ {
37
+ files: ['src/**/*.js', 'test/**/*.js'],
38
+ languageOptions: {
39
+ parserOptions: {
40
+ ecmaVersion: 'latest',
41
+ sourceType: 'commonjs',
42
+ },
43
+ },
44
+ },
45
+ // nestforge:feature:language:javascript:end
46
+ prettier,
47
+ ];
@@ -1,4 +1,7 @@
1
- import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
1
+ import { Module } from '@nestjs/common';
2
+ // nestforge:feature:auth:session
3
+ import { MiddlewareConsumer, NestModule } from '@nestjs/common';
4
+ // nestforge:feature:auth:session:end
2
5
  import { ConfigModule } from '@nestjs/config';
3
6
  import { ThrottlerModule } from '@nestjs/throttler';
4
7
  // nestforge:feature:redis
@@ -61,12 +64,16 @@ import { validateEnv } from './config/env.validation';
61
64
  MetricsModule,
62
65
  ],
63
66
  })
64
- export class AppModule implements NestModule {
67
+ export class AppModule
68
+ // nestforge:feature:auth:session
69
+ implements NestModule
70
+ // nestforge:feature:auth:session:end
71
+ {
72
+ // nestforge:feature:auth:session
65
73
  configure(consumer: MiddlewareConsumer) {
66
- // nestforge:feature:auth:session
67
74
  if (process.env.ENABLE_CSRF === 'true') {
68
75
  consumer.apply(CsrfMiddleware).forRoutes('*');
69
76
  }
70
- // nestforge:feature:auth:session:end
71
77
  }
72
- }
78
+ // nestforge:feature:auth:session:end
79
+ }
@@ -1,4 +1,7 @@
1
- import { Body, Controller, Get, HttpCode, HttpStatus, Post, Query, Req, UseGuards } from '@nestjs/common';
1
+ import { Body, Controller, Get, HttpCode, HttpStatus, Post, Req, UseGuards } from '@nestjs/common';
2
+ // nestforge:feature:redis,auth:password
3
+ import { Query } from '@nestjs/common';
4
+ // nestforge:feature:redis,auth:password:end
2
5
  // nestforge:feature:swagger
3
6
  import { ApiExcludeEndpoint, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
4
7
  // nestforge:feature:swagger:end
@@ -1,10 +1,14 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ // nestforge:feature:auth:password
1
3
  import {
2
4
  ConflictException,
3
- Injectable,
4
5
  UnauthorizedException,
5
6
  } from '@nestjs/common';
6
7
  import * as bcrypt from 'bcryptjs';
8
+ // nestforge:feature:auth:password:end
9
+ // nestforge:feature:redis,auth:password
7
10
  import { createHash, randomBytes } from 'crypto';
11
+ // nestforge:feature:redis,auth:password:end
8
12
  import { PrismaService } from '../database/prisma.service';
9
13
  // nestforge:feature:redis,auth:password
10
14
  import { MailService } from '../mail/mail.service';
@@ -217,8 +221,9 @@ export class AuthService {
217
221
  role: user.role,
218
222
  };
219
223
  }
220
-
224
+ // nestforge:feature:redis,auth:password
221
225
  private hashToken(token: string): string {
222
226
  return createHash('sha256').update(token).digest('hex');
223
227
  }
228
+ // nestforge:feature:redis,auth:password:end
224
229
  }
@@ -0,0 +1,47 @@
1
+ import prettier from 'eslint-config-prettier';
2
+ // nestforge:feature:language:typescript
3
+ import tseslint from '@typescript-eslint/eslint-plugin';
4
+ import tsParser from '@typescript-eslint/parser';
5
+ // nestforge:feature:language:typescript:end
6
+
7
+ export default [
8
+ {
9
+ ignores: ['dist/', 'coverage/', 'node_modules/'],
10
+ },
11
+ // nestforge:feature:language:typescript
12
+ {
13
+ files: ['src/**/*.ts', 'test/**/*.ts'],
14
+ languageOptions: {
15
+ parser: tsParser,
16
+ parserOptions: {
17
+ ecmaVersion: 'latest',
18
+ sourceType: 'commonjs',
19
+ },
20
+ },
21
+ plugins: {
22
+ '@typescript-eslint': tseslint,
23
+ },
24
+ rules: {
25
+ ...tseslint.configs.recommended.rules,
26
+ },
27
+ },
28
+ {
29
+ files: ['src/**/*.spec.ts', 'test/**/*.ts'],
30
+ rules: {
31
+ '@typescript-eslint/no-explicit-any': 'off',
32
+ },
33
+ },
34
+ // nestforge:feature:language:typescript:end
35
+ // nestforge:feature:language:javascript
36
+ {
37
+ files: ['src/**/*.js', 'test/**/*.js'],
38
+ languageOptions: {
39
+ parserOptions: {
40
+ ecmaVersion: 'latest',
41
+ sourceType: 'commonjs',
42
+ },
43
+ },
44
+ },
45
+ // nestforge:feature:language:javascript:end
46
+ prettier,
47
+ ];
@@ -1,4 +1,7 @@
1
- import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
1
+ import { Module } from '@nestjs/common';
2
+ // nestforge:feature:auth:session
3
+ import { MiddlewareConsumer, NestModule } from '@nestjs/common';
4
+ // nestforge:feature:auth:session:end
2
5
  import { ConfigModule } from '@nestjs/config';
3
6
  import { ThrottlerModule } from '@nestjs/throttler';
4
7
  // nestforge:feature:redis
@@ -61,12 +64,16 @@ import { validateEnv } from './config/env.validation';
61
64
  MetricsModule,
62
65
  ],
63
66
  })
64
- export class AppModule implements NestModule {
67
+ export class AppModule
68
+ // nestforge:feature:auth:session
69
+ implements NestModule
70
+ // nestforge:feature:auth:session:end
71
+ {
72
+ // nestforge:feature:auth:session
65
73
  configure(consumer: MiddlewareConsumer) {
66
- // nestforge:feature:auth:session
67
74
  if (process.env.ENABLE_CSRF === 'true') {
68
75
  consumer.apply(CsrfMiddleware).forRoutes('*');
69
76
  }
70
- // nestforge:feature:auth:session:end
71
77
  }
72
- }
78
+ // nestforge:feature:auth:session:end
79
+ }
@@ -1,4 +1,7 @@
1
- import { Body, Controller, Get, HttpCode, HttpStatus, Post, Query, Req, UseGuards } from '@nestjs/common';
1
+ import { Body, Controller, Get, HttpCode, HttpStatus, Post, Req, UseGuards } from '@nestjs/common';
2
+ // nestforge:feature:redis,auth:password
3
+ import { Query } from '@nestjs/common';
4
+ // nestforge:feature:redis,auth:password:end
2
5
  // nestforge:feature:swagger
3
6
  import { ApiExcludeEndpoint, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
4
7
  // nestforge:feature:swagger:end
@@ -1,22 +1,28 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ // nestforge:feature:auth:password
1
3
  import {
2
4
  ConflictException,
3
- Injectable,
4
5
  UnauthorizedException,
5
6
  } from '@nestjs/common';
7
+ import * as bcrypt from 'bcryptjs';
8
+ // nestforge:feature:auth:password:end
6
9
  import { InjectRepository } from '@nestjs/typeorm';
7
10
  import {
8
11
  DataSource,
9
- IsNull,
10
12
  Repository,
11
13
  } from 'typeorm';
12
- import * as bcrypt from 'bcryptjs';
14
+ // nestforge:feature:redis,auth:password,auth:token
15
+ import { IsNull } from 'typeorm';
16
+ // nestforge:feature:redis,auth:password,auth:token:end
17
+ // nestforge:feature:redis,auth:password
13
18
  import { createHash, randomBytes } from 'crypto';
19
+ // nestforge:feature:redis,auth:password:end
14
20
  import { UserEntity } from '../users/entities/user.entity';
15
21
  import { OAuthAccountEntity } from './entities/oauth-account.entity';
16
22
 
17
- // nestforge:feature:auth:token
23
+ // nestforge:feature:redis,auth:password,auth:token
18
24
  import { RefreshTokenEntity } from './entities/refresh-token.entity';
19
- // nestforge:feature:auth:token:end
25
+ // nestforge:feature:redis,auth:password,auth:token:end
20
26
 
21
27
  // nestforge:feature:redis,auth:password
22
28
  import { MailService } from '../mail/mail.service';
@@ -338,9 +344,11 @@ export class AuthService {
338
344
  };
339
345
  }
340
346
 
347
+ // nestforge:feature:redis,auth:password
341
348
  private hashToken(token: string): string {
342
349
  return createHash('sha256')
343
350
  .update(token)
344
351
  .digest('hex');
345
352
  }
353
+ // nestforge:feature:redis,auth:password:end
346
354
  }