@tsed/cli 7.0.0-alpha.3 → 7.0.0-alpha.5

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 (79) hide show
  1. package/lib/esm/Cli.js +1 -0
  2. package/lib/esm/bin/tsed.js +1 -0
  3. package/lib/esm/commands/generate/GenerateCmd.js +6 -5
  4. package/lib/esm/commands/index.js +2 -1
  5. package/lib/esm/commands/init/InitCmd.js +1 -1
  6. package/lib/esm/commands/init/config/FeaturesPrompt.js +12 -13
  7. package/lib/esm/commands/init/mappers/mapToContext.js +4 -0
  8. package/lib/esm/commands/init/prompts/getFeaturesPrompt.js +0 -12
  9. package/lib/esm/commands/init/utils/hasFeature.js +3 -0
  10. package/lib/esm/commands/template/CreateTemplateCommand.js +99 -0
  11. package/lib/esm/services/CliProjectService.js +4 -5
  12. package/lib/esm/services/CliTemplatesService.js +57 -9
  13. package/lib/esm/services/ProjectClient.js +22 -22
  14. package/lib/esm/services/mappers/addContextMethods.js +17 -0
  15. package/lib/esm/services/mappers/mapDefaultTemplateOptions.js +7 -1
  16. package/lib/esm/templates/barrels.template.js +3 -2
  17. package/lib/esm/templates/controller.template.js +24 -25
  18. package/lib/esm/templates/decorator.template.js +26 -24
  19. package/lib/esm/templates/docker-compose.template.js +2 -2
  20. package/lib/esm/templates/dockerfile.template.js +5 -5
  21. package/lib/esm/templates/index.command.template.js +1 -0
  22. package/lib/esm/templates/index.config.utils.template.js +1 -1
  23. package/lib/esm/templates/index.js +1 -0
  24. package/lib/esm/templates/index.logger.template.js +2 -1
  25. package/lib/esm/templates/middleware.template.js +16 -14
  26. package/lib/esm/templates/new-template.template.js +67 -0
  27. package/lib/esm/templates/readme.template.js +3 -3
  28. package/lib/esm/templates/tsconfig.spec.template.js +5 -4
  29. package/lib/esm/templates/tsconfig.template.js +3 -2
  30. package/lib/esm/utils/defineTemplate.js +2 -2
  31. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  32. package/lib/types/Cli.d.ts +2 -1
  33. package/lib/types/bin/tsed.d.ts +1 -1
  34. package/lib/types/commands/generate/GenerateCmd.d.ts +1 -36
  35. package/lib/types/commands/index.d.ts +2 -1
  36. package/lib/types/commands/init/config/FeaturesPrompt.d.ts +13 -6
  37. package/lib/types/commands/init/prompts/getFeaturesPrompt.d.ts +0 -6
  38. package/lib/types/commands/init/utils/hasFeature.d.ts +1 -0
  39. package/lib/types/commands/template/CreateTemplateCommand.d.ts +62 -0
  40. package/lib/types/interfaces/GenerateCmdContext.d.ts +2 -0
  41. package/lib/types/interfaces/RenderDataContext.d.ts +1 -0
  42. package/lib/types/pipes/SymbolNamePipe.d.ts +1 -1
  43. package/lib/types/services/CliProjectService.d.ts +2 -2
  44. package/lib/types/services/CliTemplatesService.d.ts +7 -3
  45. package/lib/types/services/ProjectClient.d.ts +3 -3
  46. package/lib/types/services/mappers/addContextMethods.d.ts +12 -0
  47. package/lib/types/templates/asyncFactory.template.d.ts +15 -1
  48. package/lib/types/templates/barrels.template.d.ts +15 -1
  49. package/lib/types/templates/command.template.d.ts +15 -1
  50. package/lib/types/templates/config.template.d.ts +15 -1
  51. package/lib/types/templates/controller.template.d.ts +16 -1
  52. package/lib/types/templates/decorator.template.d.ts +16 -1
  53. package/lib/types/templates/docker-compose.template.d.ts +15 -1
  54. package/lib/types/templates/exception-filter.template.d.ts +15 -1
  55. package/lib/types/templates/factory.template.d.ts +15 -1
  56. package/lib/types/templates/index.command.template.d.ts +15 -1
  57. package/lib/types/templates/index.config.utils.template.d.ts +15 -1
  58. package/lib/types/templates/index.controller.template.d.ts +15 -1
  59. package/lib/types/templates/index.d.ts +1 -0
  60. package/lib/types/templates/index.logger.template.d.ts +15 -1
  61. package/lib/types/templates/index.template.d.ts +15 -1
  62. package/lib/types/templates/interceptor.template.d.ts +15 -1
  63. package/lib/types/templates/interface.template.d.ts +15 -1
  64. package/lib/types/templates/middleware.template.d.ts +16 -1
  65. package/lib/types/templates/model.template.d.ts +15 -1
  66. package/lib/types/templates/module.template.d.ts +15 -1
  67. package/lib/types/templates/new-template.template.d.ts +9 -0
  68. package/lib/types/templates/pipe.template.d.ts +15 -1
  69. package/lib/types/templates/prisma.service.template.d.ts +15 -1
  70. package/lib/types/templates/readme.template.d.ts +15 -1
  71. package/lib/types/templates/repository.template.d.ts +15 -1
  72. package/lib/types/templates/response-filter.template.d.ts +15 -1
  73. package/lib/types/templates/server.template.d.ts +15 -1
  74. package/lib/types/templates/service.template.d.ts +15 -1
  75. package/lib/types/templates/tsconfig.spec.template.d.ts +15 -1
  76. package/lib/types/templates/tsconfig.template.d.ts +15 -1
  77. package/lib/types/templates/value.template.d.ts +15 -1
  78. package/lib/types/utils/defineTemplate.d.ts +31 -3
  79. package/package.json +3 -3
@@ -32,7 +32,7 @@ ENV NODE_ENV production`;
32
32
  }
33
33
  defineTemplate({
34
34
  id: "dockerfile.yarn",
35
- label: "Dockerfile",
35
+ label: "Dockerfile (Yarn classic)",
36
36
  fileName: "Dockerfile",
37
37
  outputDir: ".",
38
38
  ext: null,
@@ -71,7 +71,7 @@ CMD ["pm2-runtime", "start", "processes.config.cjs", "--env", "production"]
71
71
  });
72
72
  defineTemplate({
73
73
  id: "dockerfile.yarn_berry",
74
- label: "Dockerfile",
74
+ label: "Dockerfile (Yarn Berry)",
75
75
  fileName: "Dockerfile",
76
76
  outputDir: ".",
77
77
  ext: null,
@@ -113,7 +113,7 @@ CMD ["pm2-runtime", "start", "processes.config.cjs", "--env", "production"]
113
113
  });
114
114
  defineTemplate({
115
115
  id: "dockerfile.npm",
116
- label: "Dockerfile",
116
+ label: "Dockerfile (NPM)",
117
117
  fileName: "Dockerfile",
118
118
  outputDir: ".",
119
119
  ext: null,
@@ -151,7 +151,7 @@ CMD ["pm2-runtime", "start", "processes.config.cjs", "--env", "production"]`;
151
151
  });
152
152
  defineTemplate({
153
153
  id: "dockerfile.pnpm",
154
- label: "Dockerfile",
154
+ label: "Dockerfile (PNPM)",
155
155
  fileName: "Dockerfile",
156
156
  outputDir: ".",
157
157
  ext: null,
@@ -190,7 +190,7 @@ CMD ["pm2-runtime", "start", "processes.config.cjs", "--env", "production"]
190
190
  });
191
191
  defineTemplate({
192
192
  id: "dockerfile.bun",
193
- label: "Dockerfile",
193
+ label: "Dockerfile (Bun)",
194
194
  fileName: "Dockerfile",
195
195
  outputDir: ".",
196
196
  ext: null,
@@ -4,6 +4,7 @@ export default defineTemplate({
4
4
  label: "CLI Entry Point",
5
5
  description: "Create a new CLI entry point file",
6
6
  outputDir: "{{srcDir}}/bin",
7
+ hidden: true,
7
8
  render() {
8
9
  return `#!/usr/bin/env node
9
10
  import {CliCore} from "@tsed/cli-core";
@@ -8,7 +8,7 @@ export default defineTemplate({
8
8
  outputDir: "{{srcDir}}/config/utils",
9
9
  preserveCase: true,
10
10
  hidden: true,
11
- render(_, data) {
11
+ render() {
12
12
  return `process.env.NODE_ENV = process.env.NODE_ENV || "development";
13
13
 
14
14
  export const isProduction = process.env.NODE_ENV === "production";
@@ -30,3 +30,4 @@ import "./docker-compose.template.js";
30
30
  import "./dockerfile.template.js";
31
31
  import "./pm2.template.js";
32
32
  import "./readme.template.js";
33
+ import "./new-template.template.js";
@@ -7,7 +7,8 @@ export default defineTemplate({
7
7
  outputDir: "{{srcDir}}/config/logger",
8
8
  fileName: "index",
9
9
  preserveCase: true,
10
- render(_, data) {
10
+ hidden: true,
11
+ render() {
11
12
  return `import {DILoggerOptions} from "@tsed/di";
12
13
  import {$log} from "@tsed/logger";
13
14
  import {isProduction} from "../utils/index.js";
@@ -4,21 +4,23 @@ export default defineTemplate({
4
4
  label: "Middleware",
5
5
  fileName: "{{symbolName}}.middleware",
6
6
  outputDir: "{{srcDir}}/middlewares",
7
- prompts: (data) => [
8
- {
9
- type: "list",
10
- name: "middlewarePosition",
11
- message: () => `The middleware should be called:`,
12
- choices: [
13
- { name: "Before the endpoint", value: "before" },
14
- { name: "After the endpoint", value: "after" }
15
- ],
16
- when(state) {
17
- return !!((["decorator"].includes(state.type || data.type) && ["middleware"].includes(state.templateType)) ||
18
- data.middlewarePosition);
7
+ prompts(context) {
8
+ return [
9
+ {
10
+ type: "list",
11
+ name: "middlewarePosition",
12
+ message: () => `The middleware should be called:`,
13
+ choices: [
14
+ { name: "Before the endpoint", value: "before" },
15
+ { name: "After the endpoint", value: "after" }
16
+ ],
17
+ when(state) {
18
+ return !!((["decorator"].includes(state.type || context.type) && ["middleware"].includes(state.templateType)) ||
19
+ context.middlewarePosition);
20
+ }
19
21
  }
20
- }
21
- ],
22
+ ];
23
+ },
22
24
  render(symbolName) {
23
25
  return `import {Middleware, MiddlewareMethods} from "@tsed/platform-middlewares";
24
26
  import {Context} from "@tsed/platform-params";
@@ -0,0 +1,67 @@
1
+ import { defineTemplate } from "../utils/defineTemplate.js";
2
+ defineTemplate({
3
+ id: "new-template",
4
+ label: "New Template",
5
+ fileName: "{{symbolName}}.template",
6
+ preserveCase: true,
7
+ outputDir: "./.templates",
8
+ hidden: true,
9
+ render(_, context) {
10
+ if (context.from === "new") {
11
+ return `import {defineTemplate} from "@tsed/cli";
12
+
13
+ defineTemplate({
14
+ id: "${context.templateId}",
15
+ label: "${context.name}",
16
+ fileName: "{{symbolName}}.services",
17
+ outputDir: "{{srcDir}}/services",
18
+ render(symbolName, context) {
19
+ return \`export class \${symbolName} {}\`
20
+ }
21
+ });`;
22
+ }
23
+ if (context.template) {
24
+ const { id, ...props } = context.template;
25
+ const render = props.render.toString();
26
+ if (render.includes(""))
27
+ return `import {defineTemplate} from "@tsed/cli";
28
+
29
+ defineTemplate({
30
+ id: "${context.override ? id : context.templateId}",
31
+ label: "${context.name}",
32
+ fileName: "${props.fileName}",
33
+ outputDir: "${props.outputDir}",
34
+ ${props.prompts ? `${props.prompts.toString()},` : ""}
35
+ ${props.render.toString()}
36
+ });`;
37
+ }
38
+ },
39
+ hooks: {
40
+ $afterCreateSourceFile(sourceFile) {
41
+ const sourceFileText = sourceFile.getFullText();
42
+ if (sourceFileText.includes("camelCase")) {
43
+ sourceFile.addImportDeclaration({
44
+ namedImports: ["camelCase"],
45
+ moduleSpecifier: "change-case"
46
+ });
47
+ }
48
+ if (sourceFileText.includes("pascalCase")) {
49
+ sourceFile.addImportDeclaration({
50
+ namedImports: ["pascalCase"],
51
+ moduleSpecifier: "change-case"
52
+ });
53
+ }
54
+ if (sourceFileText.includes("kebabCase")) {
55
+ sourceFile.addImportDeclaration({
56
+ namedImports: ["kebabCase"],
57
+ moduleSpecifier: "change-case"
58
+ });
59
+ }
60
+ sourceFile.formatText({
61
+ indentSize: 2
62
+ });
63
+ sourceFile.saveSync();
64
+ return sourceFile;
65
+ }
66
+ }
67
+ });
@@ -8,14 +8,14 @@ export default defineTemplate({
8
8
  ext: "md",
9
9
  preserveCase: true,
10
10
  hidden: true,
11
- render(_, data) {
12
- const pkgCmd = data.packageManager === PackageManager.YARN_BERRY ? "yarn" : data.packageManager;
11
+ render(_, context) {
12
+ const pkgCmd = context.packageManager === PackageManager.YARN_BERRY ? "yarn" : context.packageManager;
13
13
  return `<p style="text-align: center" align="center">
14
14
  <a href="https://tsed.dev" target="_blank"><img src="https://tsed.dev/tsed-og.png" width="200" alt="Ts.ED logo"/></a>
15
15
  </p>
16
16
 
17
17
  <div align="center">
18
- <h1>Ts.ED - ${data.projectName}</h1>
18
+ <h1>Ts.ED - ${context.projectName}</h1>
19
19
  <br />
20
20
  <div align="center">
21
21
  <a href="https://cli.tsed.dev/">Website</a>
@@ -1,13 +1,14 @@
1
1
  import { defineTemplate } from "../utils/defineTemplate.js";
2
2
  export default defineTemplate({
3
3
  id: "tsconfig.spec.json",
4
- label: "TSConfig",
4
+ label: "TSConfig spec",
5
5
  description: "Create a tsconfig.json file.",
6
6
  fileName: "tsconfig",
7
7
  outputDir: ".",
8
8
  ext: "json",
9
9
  preserveCase: true,
10
- render: function (_, data) {
10
+ hidden: true,
11
+ render: function (_, context) {
11
12
  const tsconfig = {
12
13
  extends: "./tsconfig.base.json",
13
14
  compilerOptions: {
@@ -22,10 +23,10 @@ export default defineTemplate({
22
23
  include: ["src/**/*"],
23
24
  exclude: ["dist", "coverage", "node_modules"]
24
25
  };
25
- if (data.jest) {
26
+ if (context.jest) {
26
27
  tsconfig.compilerOptions.types.push("jest");
27
28
  }
28
- if (data.vitest) {
29
+ if (context.vitest) {
29
30
  tsconfig.compilerOptions.types.push("vitest/globals", "vitest/importMeta", "vite/client", "vitest");
30
31
  tsconfig.include.push("vitest.config.mts");
31
32
  }
@@ -6,8 +6,9 @@ export default defineTemplate({
6
6
  fileName: "tsconfig",
7
7
  outputDir: ".",
8
8
  ext: "json",
9
+ hidden: true,
9
10
  preserveCase: true,
10
- render(_, data) {
11
+ render(_, context) {
11
12
  const tsconfig = {
12
13
  extends: "./tsconfig.base.json",
13
14
  compilerOptions: {
@@ -21,7 +22,7 @@ export default defineTemplate({
21
22
  }
22
23
  ]
23
24
  };
24
- if (data.testing) {
25
+ if (context.testing) {
25
26
  tsconfig.references?.push({
26
27
  path: "./tsconfig.test.json"
27
28
  });
@@ -1,4 +1,4 @@
1
- import { injectable } from "@tsed/di";
1
+ import { injectable } from "@tsed/cli-core";
2
2
  export function defineTemplate(opts) {
3
3
  const provider = injectable(Symbol.for(`TEMPLATE:${opts.id}`))
4
4
  .type("CLI_TEMPLATES")
@@ -9,5 +9,5 @@ export function defineTemplate(opts) {
9
9
  if (opts.hooks) {
10
10
  provider.hooks(opts.hooks);
11
11
  }
12
- return opts;
12
+ return provider.token();
13
13
  }