@nestia/migrate 0.7.6 → 0.7.7

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 (68) hide show
  1. package/lib/MigrateApplication.js +7 -4
  2. package/lib/MigrateApplication.js.map +1 -1
  3. package/lib/analyzers/MigrateAnalyzer.d.ts +2 -3
  4. package/lib/analyzers/MigrateAnalyzer.js +1 -5
  5. package/lib/analyzers/MigrateAnalyzer.js.map +1 -1
  6. package/lib/analyzers/MigrateControllerAnalyzer.d.ts +2 -2
  7. package/lib/analyzers/MigrateControllerAnalyzer.js +22 -13
  8. package/lib/analyzers/MigrateControllerAnalyzer.js.map +1 -1
  9. package/lib/analyzers/MigrateMethodAnalyzer.d.ts +2 -2
  10. package/lib/analyzers/MigrateMethodAnalyzer.js +16 -16
  11. package/lib/analyzers/MigrateMethodAnalyzer.js.map +1 -1
  12. package/lib/module.d.ts +8 -0
  13. package/lib/module.js +8 -0
  14. package/lib/module.js.map +1 -1
  15. package/lib/programmers/MigrateApiFileProgrammer.d.ts +2 -2
  16. package/lib/programmers/MigrateApiFileProgrammer.js.map +1 -1
  17. package/lib/programmers/MigrateApiFunctionProgrammer.d.ts +2 -2
  18. package/lib/programmers/MigrateApiFunctionProgrammer.js.map +1 -1
  19. package/lib/programmers/MigrateApiNamespaceProgrammer.d.ts +2 -2
  20. package/lib/programmers/MigrateApiNamespaceProgrammer.js.map +1 -1
  21. package/lib/programmers/MigrateApiProgrammer.js +3 -3
  22. package/lib/programmers/MigrateApiProgrammer.js.map +1 -1
  23. package/lib/programmers/MigrateImportProgrammer.js +5 -5
  24. package/lib/programmers/MigrateImportProgrammer.js.map +1 -1
  25. package/lib/programmers/MigrateSchemaProgrammer.d.ts +1 -1
  26. package/lib/structures/IMigrateDto.d.ts +1 -1
  27. package/lib/structures/IMigrateProgram.d.ts +20 -4
  28. package/lib/structures/IMigrateRoute.d.ts +1 -1
  29. package/lib/structures/ISwaggerComponents.d.ts +1 -1
  30. package/lib/structures/ISwaggerRoute.d.ts +1 -1
  31. package/lib/structures/{ISwaggeSchema.js → ISwaggerSchema.js} +1 -1
  32. package/lib/structures/ISwaggerSchema.js.map +1 -0
  33. package/lib/utils/SwaggerTypeChecker.d.ts +1 -1
  34. package/package.json +1 -1
  35. package/src/MigrateApplication.ts +54 -48
  36. package/src/analyzers/MigrateAnalyzer.ts +9 -13
  37. package/src/analyzers/MigrateControllerAnalyzer.ts +139 -122
  38. package/src/analyzers/MigrateMethodAnalyzer.ts +350 -348
  39. package/src/archivers/MigrateFileArchiver.ts +38 -38
  40. package/src/executable/bundle.ts +109 -109
  41. package/src/internal/MigrateCommander.ts +51 -51
  42. package/src/module.ts +10 -0
  43. package/src/programmers/MigrateApiFileProgrammer.ts +53 -53
  44. package/src/programmers/MigrateApiFunctionProgrammer.ts +203 -203
  45. package/src/programmers/MigrateApiNamespaceProgrammer.ts +430 -430
  46. package/src/programmers/MigrateApiProgrammer.ts +132 -132
  47. package/src/programmers/MigrateApiSimulatationProgrammer.ts +328 -328
  48. package/src/programmers/MigrateDtoProgrammer.ts +78 -78
  49. package/src/programmers/MigrateImportProgrammer.ts +114 -116
  50. package/src/programmers/MigrateNestControllerProgrammer.ts +50 -50
  51. package/src/programmers/MigrateNestMethodProgrammer.ts +249 -249
  52. package/src/programmers/MigrateNestModuleProgrammer.ts +62 -62
  53. package/src/programmers/MigrateNestProgrammer.ts +74 -74
  54. package/src/programmers/MigrateSchemaProgrammer.ts +257 -257
  55. package/src/structures/IMigrateDto.ts +1 -1
  56. package/src/structures/IMigrateProgram.ts +20 -4
  57. package/src/structures/IMigrateRoute.ts +46 -46
  58. package/src/structures/ISwaggerComponents.ts +1 -1
  59. package/src/structures/ISwaggerRoute.ts +1 -1
  60. package/src/utils/FilePrinter.ts +36 -36
  61. package/src/utils/SwaggerTypeChecker.ts +67 -67
  62. package/lib/IMigrateConfig.d.ts +0 -4
  63. package/lib/IMigrateConfig.js +0 -3
  64. package/lib/IMigrateConfig.js.map +0 -1
  65. package/lib/structures/ISwaggeSchema.js.map +0 -1
  66. package/src/IMigrateConfig.ts +0 -4
  67. /package/lib/structures/{ISwaggeSchema.d.ts → ISwaggerSchema.d.ts} +0 -0
  68. /package/src/structures/{ISwaggeSchema.ts → ISwaggerSchema.ts} +0 -0
@@ -17,15 +17,15 @@ class MigrateImportProgrammer {
17
17
  return this.external_.size === 0 && this.dtos_.size === 0;
18
18
  }
19
19
  external(props) {
20
- const element = MapUtil_1.MapUtil.take(this.external_)(props.library)(() => ({
20
+ const clause = MapUtil_1.MapUtil.take(this.external_)(props.library)(() => ({
21
21
  default: null,
22
22
  instances: new Set(),
23
23
  }));
24
24
  const name = props.name.split(".")[0];
25
25
  if (props.type === "default")
26
- element.default = props.name;
26
+ clause.default = props.name;
27
27
  else
28
- element.instances.add(name);
28
+ clause.instances.add(name);
29
29
  return name;
30
30
  }
31
31
  dto(name) {
@@ -34,12 +34,12 @@ class MigrateImportProgrammer {
34
34
  return typescript_1.default.factory.createTypeReferenceNode(name);
35
35
  }
36
36
  tag(type, arg) {
37
- this.external({
37
+ const instance = this.external({
38
38
  type: "instance",
39
39
  library: "typia",
40
40
  name: "tags",
41
41
  });
42
- return typescript_1.default.factory.createTypeReferenceNode(`tags.${type}`, [
42
+ return typescript_1.default.factory.createTypeReferenceNode(`${instance}.${type}`, [
43
43
  typescript_1.default.factory.createLiteralTypeNode(typeof arg === "string"
44
44
  ? typescript_1.default.factory.createStringLiteral(arg)
45
45
  : ExpressionFactory_1.ExpressionFactory.number(arg)),
@@ -1 +1 @@
1
- {"version":3,"file":"MigrateImportProgrammer.js","sourceRoot":"","sources":["../../src/programmers/MigrateImportProgrammer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MigrateImportProgrammer.js","sourceRoot":"","sources":["../../src/programmers/MigrateImportProgrammer.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import ts from "typescript";
2
- import { ISwaggerSchema } from "../structures/ISwaggeSchema";
2
+ import { ISwaggerSchema } from "../structures/ISwaggerSchema";
3
3
  import { ISwaggerComponents } from "../structures/ISwaggerComponents";
4
4
  import { MigrateImportProgrammer } from "./MigrateImportProgrammer";
5
5
  export declare namespace MigrateSchemaProgrammer {
@@ -1,4 +1,4 @@
1
- import { ISwaggerSchema } from "./ISwaggeSchema";
1
+ import { ISwaggerSchema } from "./ISwaggerSchema";
2
2
  export interface IMigrateDto {
3
3
  name: string;
4
4
  location: string;
@@ -1,8 +1,24 @@
1
- import { IMigrateConfig } from "../IMigrateConfig";
2
1
  import { IMigrateController } from "./IMigrateController";
2
+ import { IMigrateRoute } from "./IMigrateRoute";
3
3
  import { ISwagger } from "./ISwagger";
4
- export interface IMigrateProgram {
5
- config: IMigrateConfig;
4
+ import { ISwaggerRoute } from "./ISwaggerRoute";
5
+ export interface IMigrateProgram extends IMigrateProgram.IProps {
6
6
  controllers: IMigrateController[];
7
- swagger: ISwagger;
7
+ }
8
+ export declare namespace IMigrateProgram {
9
+ type Dictionary = Map<ISwaggerRoute, IEntry>;
10
+ interface IEntry {
11
+ controller: IMigrateController;
12
+ route: IMigrateRoute;
13
+ }
14
+ interface IProps {
15
+ mode: "nest" | "sdk";
16
+ simulate: boolean;
17
+ swagger: ISwagger;
18
+ dictionary: Dictionary;
19
+ }
20
+ interface IConfig {
21
+ mode: "nest" | "sdk";
22
+ simulate: boolean;
23
+ }
8
24
  }
@@ -1,4 +1,4 @@
1
- import { ISwaggerSchema } from "./ISwaggeSchema";
1
+ import { ISwaggerSchema } from "./ISwaggerSchema";
2
2
  export interface IMigrateRoute {
3
3
  name: string;
4
4
  path: string;
@@ -1,4 +1,4 @@
1
- import { ISwaggerSchema } from "./ISwaggeSchema";
1
+ import { ISwaggerSchema } from "./ISwaggerSchema";
2
2
  import { ISwaggerSecurity } from "./ISwaggerSecurity";
3
3
  export interface ISwaggerComponents {
4
4
  schemas?: Record<string, ISwaggerSchema>;
@@ -1,5 +1,5 @@
1
1
  import { IJsDocTagInfo } from "typia/lib/schemas/metadata/IJsDocTagInfo";
2
- import { ISwaggerSchema } from "./ISwaggeSchema";
2
+ import { ISwaggerSchema } from "./ISwaggerSchema";
3
3
  export interface ISwaggerRoute {
4
4
  parameters?: ISwaggerRoute.IParameter[];
5
5
  requestBody?: ISwaggerRoute.IRequestBody;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ISwaggeSchema.js.map
3
+ //# sourceMappingURL=ISwaggerSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISwaggerSchema.js","sourceRoot":"","sources":["../../src/structures/ISwaggerSchema.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { ISwaggerSchema } from "../structures/ISwaggeSchema";
1
+ import { ISwaggerSchema } from "../structures/ISwaggerSchema";
2
2
  import { ISwaggerComponents } from "../structures/ISwaggerComponents";
3
3
  export declare namespace SwaggerSwaggerChecker {
4
4
  const isAnyOf: (schema: ISwaggerSchema) => schema is ISwaggerSchema.IAnyOf;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/migrate",
3
- "version": "0.7.6",
3
+ "version": "0.7.7",
4
4
  "description": "Migration program from swagger to NestJS",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -1,48 +1,54 @@
1
- import typia from "typia";
2
-
3
- import { MigrateAnalyzer } from "./analyzers/MigrateAnalyzer";
4
- import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE";
5
- import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE";
6
- import { IMigrateProgram } from "./module";
7
- import { MigrateApiProgrammer } from "./programmers/MigrateApiProgrammer";
8
- import { MigrateNestProgrammer } from "./programmers/MigrateNestProgrammer";
9
- import { IMigrateFile } from "./structures/IMigrateFile";
10
- import { ISwagger } from "./structures/ISwagger";
11
-
12
- export class MigrateApplication {
13
- public constructor(public readonly swagger: ISwagger) {
14
- typia.assert(swagger);
15
- }
16
-
17
- public nest(simulate: boolean): MigrateApplication.IOutput {
18
- const program: IMigrateProgram = MigrateAnalyzer.analyze({
19
- mode: "nest",
20
- simulate,
21
- })(this.swagger);
22
- return {
23
- program,
24
- files: [
25
- ...NEST_TEMPLATE,
26
- ...MigrateNestProgrammer.write(program),
27
- ...MigrateApiProgrammer.write(program),
28
- ],
29
- };
30
- }
31
-
32
- public sdk(simulate: boolean): MigrateApplication.IOutput {
33
- const program: IMigrateProgram = MigrateAnalyzer.analyze({
34
- mode: "sdk",
35
- simulate,
36
- })(this.swagger);
37
- return {
38
- program,
39
- files: [...SDK_TEMPLATE, ...MigrateApiProgrammer.write(program)],
40
- };
41
- }
42
- }
43
- export namespace MigrateApplication {
44
- export interface IOutput {
45
- program: IMigrateProgram;
46
- files: IMigrateFile[];
47
- }
48
- }
1
+ import typia from "typia";
2
+
3
+ import { MigrateAnalyzer } from "./analyzers/MigrateAnalyzer";
4
+ import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE";
5
+ import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE";
6
+ import { IMigrateProgram } from "./module";
7
+ import { MigrateApiProgrammer } from "./programmers/MigrateApiProgrammer";
8
+ import { MigrateNestProgrammer } from "./programmers/MigrateNestProgrammer";
9
+ import { IMigrateFile } from "./structures/IMigrateFile";
10
+ import { ISwagger } from "./structures/ISwagger";
11
+
12
+ export class MigrateApplication {
13
+ public readonly swagger: ISwagger;
14
+
15
+ public constructor(swagger: ISwagger) {
16
+ this.swagger = typia.assert(swagger);
17
+ }
18
+
19
+ public nest(simulate: boolean): MigrateApplication.IOutput {
20
+ const program: IMigrateProgram = MigrateAnalyzer.analyze({
21
+ mode: "nest",
22
+ simulate,
23
+ swagger: this.swagger,
24
+ dictionary: new Map(),
25
+ });
26
+ return {
27
+ program,
28
+ files: [
29
+ ...NEST_TEMPLATE,
30
+ ...MigrateNestProgrammer.write(program),
31
+ ...MigrateApiProgrammer.write(program),
32
+ ],
33
+ };
34
+ }
35
+
36
+ public sdk(simulate: boolean): MigrateApplication.IOutput {
37
+ const program: IMigrateProgram = MigrateAnalyzer.analyze({
38
+ mode: "sdk",
39
+ simulate,
40
+ swagger: this.swagger,
41
+ dictionary: new Map(),
42
+ });
43
+ return {
44
+ program,
45
+ files: [...SDK_TEMPLATE, ...MigrateApiProgrammer.write(program)],
46
+ };
47
+ }
48
+ }
49
+ export namespace MigrateApplication {
50
+ export interface IOutput {
51
+ program: IMigrateProgram;
52
+ files: IMigrateFile[];
53
+ }
54
+ }
@@ -1,13 +1,9 @@
1
- import { IMigrateConfig } from "../IMigrateConfig";
2
- import { IMigrateProgram, ISwagger } from "../module";
3
- import { MigrateControllerAnalyzer } from "./MigrateControllerAnalyzer";
4
-
5
- export namespace MigrateAnalyzer {
6
- export const analyze =
7
- (config: IMigrateConfig) =>
8
- (swagger: ISwagger): IMigrateProgram => ({
9
- config,
10
- swagger,
11
- controllers: MigrateControllerAnalyzer.analyze(swagger),
12
- });
13
- }
1
+ import { IMigrateProgram } from "../structures/IMigrateProgram";
2
+ import { MigrateControllerAnalyzer } from "./MigrateControllerAnalyzer";
3
+
4
+ export namespace MigrateAnalyzer {
5
+ export const analyze = (props: IMigrateProgram.IProps): IMigrateProgram => ({
6
+ ...props,
7
+ controllers: MigrateControllerAnalyzer.analyze(props),
8
+ });
9
+ }
@@ -1,122 +1,139 @@
1
- import { Escaper } from "typia/lib/utils/Escaper";
2
-
3
- import { ISwagger } from "../module";
4
- import { IMigrateController } from "../structures/IMigrateController";
5
- import { IMigrateRoute } from "../structures/IMigrateRoute";
6
- import { MapUtil } from "../utils/MapUtil";
7
- import { StringUtil } from "../utils/StringUtil";
8
- import { MigrateMethodAnalzyer } from "./MigrateMethodAnalyzer";
9
-
10
- export namespace MigrateControllerAnalyzer {
11
- export const analyze = (swagger: ISwagger): IMigrateController[] => {
12
- const dict: Map<string, IMigrateRoute[]> = new Map();
13
-
14
- // GATHER ROUTES
15
- for (const [path, collection] of Object.entries(swagger.paths)) {
16
- // PREPARE DIRECTORIES
17
- const location: string = StringUtil.splitWithNormalization(path)
18
- .filter((str) => str[0] !== "{" && str[0] !== ":")
19
- .join("/");
20
- for (const s of sequence(location)) MapUtil.take(dict)(s)(() => []);
21
-
22
- // INSERT ROUTES TO THE LAST DIRECTORY
23
- const routes: IMigrateRoute[] = MapUtil.take(dict)(location)(() => []);
24
- for (const [method, value] of Object.entries(collection)) {
25
- const r: IMigrateRoute | null = MigrateMethodAnalzyer.analyze(swagger)({
26
- path,
27
- method,
28
- })(value);
29
- if (r !== null) routes.push(r);
30
- }
31
- }
32
-
33
- // ABSORB STANDALONE ROUTES
34
- const emended: Map<string, IMigrateRoute[]> = new Map(
35
- [...dict.entries()].sort((a, b) => a[0].localeCompare(b[0])),
36
- );
37
- for (const [location, routes] of emended) {
38
- if (routes.length !== 1) continue;
39
- for (const s of sequence(location).slice(0, 1)) {
40
- const parent = emended.get(s);
41
- if (parent) {
42
- parent.push(...routes);
43
- emended.delete(location);
44
- break;
45
- }
46
- }
47
- }
48
-
49
- // GENERATE CONTROLLERS
50
- return [...emended.entries()]
51
- .filter(([_l, routes]) => !!routes.length)
52
- .map(([location, routes]) => {
53
- const prefix: string = StringUtil.commonPrefix(
54
- routes.map((r) => r.path),
55
- );
56
- for (const r of routes)
57
- r.path = StringUtil.reJoinWithDecimalParameters(
58
- r.path.replace(prefix, ""),
59
- );
60
- const controller: IMigrateController = {
61
- name: StringUtil.pascal(location) + "Controller",
62
- path: StringUtil.reJoinWithDecimalParameters(prefix),
63
- location: "src/controllers/" + location,
64
- routes,
65
- };
66
- if (controller.name === "Controller") controller.name = "__Controller";
67
- emend(controller);
68
- return controller;
69
- });
70
- };
71
-
72
- const sequence = (location: string): string[] =>
73
- StringUtil.splitWithNormalization(location)
74
- .map((_str, i, entire) => entire.slice(0, i + 1).join("/"))
75
- .slice(0, -1)
76
- .reverse();
77
-
78
- const emend = (controller: IMigrateController): void => {
79
- interface IRouteCapsule {
80
- variables: string[];
81
- route: IMigrateRoute;
82
- }
83
- const dict: Map<string, IRouteCapsule[]> = new Map();
84
- for (const route of controller.routes) {
85
- const additional: string[] = StringUtil.splitWithNormalization(
86
- route.path,
87
- );
88
- const statics: string[] = additional.filter((str) => str[0] !== ":");
89
- if (statics.length) route.name = StringUtil.camel(statics.join("/"));
90
- else
91
- MapUtil.take(dict)(route.method)(() => []).push({
92
- variables: additional
93
- .filter((str) => str[0] === ":")
94
- .map((str) => str.substring(1)),
95
- route,
96
- });
97
- }
98
- for (const [method, capsules] of dict) {
99
- const emended: string = method === "delete" ? "erase" : method;
100
- for (const c of capsules) {
101
- const empty: boolean = c.variables.length === 0;
102
- c.route.name = empty
103
- ? emended
104
- : StringUtil.camel(`${emended}By/${c.variables.join("/and/")}`);
105
- }
106
- }
107
- for (const method of controller.routes) {
108
- if (Escaper.variable(method.name) === false)
109
- method.name = "_" + method.name;
110
- for (const spec of [method.headers, method.query, method.body])
111
- if (spec)
112
- spec.key = StringUtil.escapeDuplicate(
113
- method.parameters.map((p) => p.key),
114
- )(spec.key);
115
- }
116
- controller.routes.forEach((r, i) => {
117
- r.name = StringUtil.escapeDuplicate(
118
- controller.routes.filter((_r, j) => i !== j).map((x) => x.name),
119
- )(r.name);
120
- });
121
- };
122
- }
1
+ import { Escaper } from "typia/lib/utils/Escaper";
2
+
3
+ import { IMigrateController } from "../structures/IMigrateController";
4
+ import { IMigrateProgram } from "../structures/IMigrateProgram";
5
+ import { IMigrateRoute } from "../structures/IMigrateRoute";
6
+ import { ISwaggerRoute } from "../structures/ISwaggerRoute";
7
+ import { MapUtil } from "../utils/MapUtil";
8
+ import { StringUtil } from "../utils/StringUtil";
9
+ import { MigrateMethodAnalzyer } from "./MigrateMethodAnalyzer";
10
+
11
+ export namespace MigrateControllerAnalyzer {
12
+ export const analyze = (
13
+ props: IMigrateProgram.IProps,
14
+ ): IMigrateController[] => {
15
+ interface IEntry {
16
+ endpoint: ISwaggerRoute;
17
+ route: IMigrateRoute;
18
+ }
19
+ const endpoints: Map<string, IEntry[]> = new Map();
20
+
21
+ // GATHER ROUTES
22
+ for (const [path, collection] of Object.entries(props.swagger.paths)) {
23
+ // PREPARE DIRECTORIES
24
+ const location: string = StringUtil.splitWithNormalization(path)
25
+ .filter((str) => str[0] !== "{" && str[0] !== ":")
26
+ .join("/");
27
+ for (const s of sequence(location)) MapUtil.take(endpoints)(s)(() => []);
28
+
29
+ // INSERT ROUTES TO THE LAST DIRECTORY
30
+ const routes: IEntry[] = MapUtil.take(endpoints)(location)(() => []);
31
+ for (const [method, value] of Object.entries(collection)) {
32
+ const r: IMigrateRoute | null = MigrateMethodAnalzyer.analyze(props)({
33
+ path,
34
+ method,
35
+ })(value);
36
+ if (r === null) continue;
37
+ routes.push({
38
+ endpoint: value,
39
+ route: r,
40
+ });
41
+ }
42
+ }
43
+
44
+ // ABSORB STANDALONE ROUTES
45
+ const emended: Map<string, IEntry[]> = new Map(
46
+ [...endpoints.entries()].sort((a, b) => a[0].localeCompare(b[0])),
47
+ );
48
+ for (const [location, routes] of emended) {
49
+ if (routes.length !== 1) continue;
50
+ for (const s of sequence(location).slice(0, 1)) {
51
+ const parent = emended.get(s);
52
+ if (parent) {
53
+ parent.push(...routes);
54
+ emended.delete(location);
55
+ break;
56
+ }
57
+ }
58
+ }
59
+
60
+ // GENERATE CONTROLLERS
61
+ return [...emended.entries()]
62
+ .filter(([_l, routes]) => !!routes.length)
63
+ .map(([location, routes]) => {
64
+ const prefix: string = StringUtil.commonPrefix(
65
+ routes.map((e) => e.route.path),
66
+ );
67
+ for (const e of routes)
68
+ e.route.path = StringUtil.reJoinWithDecimalParameters(
69
+ e.route.path.replace(prefix, ""),
70
+ );
71
+ const controller: IMigrateController = {
72
+ name: StringUtil.pascal(location) + "Controller",
73
+ path: StringUtil.reJoinWithDecimalParameters(prefix),
74
+ location: "src/controllers/" + location,
75
+ routes: routes.map((e) => e.route),
76
+ };
77
+ if (controller.name === "Controller") controller.name = "__Controller";
78
+ emend(controller);
79
+
80
+ for (const e of routes)
81
+ props.dictionary.set(e.endpoint, {
82
+ controller,
83
+ route: e.route,
84
+ });
85
+ return controller;
86
+ });
87
+ };
88
+
89
+ const sequence = (location: string): string[] =>
90
+ StringUtil.splitWithNormalization(location)
91
+ .map((_str, i, entire) => entire.slice(0, i + 1).join("/"))
92
+ .slice(0, -1)
93
+ .reverse();
94
+
95
+ const emend = (controller: IMigrateController): void => {
96
+ interface IRouteCapsule {
97
+ variables: string[];
98
+ route: IMigrateRoute;
99
+ }
100
+ const dict: Map<string, IRouteCapsule[]> = new Map();
101
+ for (const route of controller.routes) {
102
+ const additional: string[] = StringUtil.splitWithNormalization(
103
+ route.path,
104
+ );
105
+ const statics: string[] = additional.filter((str) => str[0] !== ":");
106
+ if (statics.length) route.name = StringUtil.camel(statics.join("/"));
107
+ else
108
+ MapUtil.take(dict)(route.method)(() => []).push({
109
+ variables: additional
110
+ .filter((str) => str[0] === ":")
111
+ .map((str) => str.substring(1)),
112
+ route,
113
+ });
114
+ }
115
+ for (const [method, capsules] of dict) {
116
+ const emended: string = method === "delete" ? "erase" : method;
117
+ for (const c of capsules) {
118
+ const empty: boolean = c.variables.length === 0;
119
+ c.route.name = empty
120
+ ? emended
121
+ : StringUtil.camel(`${emended}By/${c.variables.join("/and/")}`);
122
+ }
123
+ }
124
+ for (const method of controller.routes) {
125
+ if (Escaper.variable(method.name) === false)
126
+ method.name = "_" + method.name;
127
+ for (const spec of [method.headers, method.query, method.body])
128
+ if (spec)
129
+ spec.key = StringUtil.escapeDuplicate(
130
+ method.parameters.map((p) => p.key),
131
+ )(spec.key);
132
+ }
133
+ controller.routes.forEach((r, i) => {
134
+ r.name = StringUtil.escapeDuplicate(
135
+ controller.routes.filter((_r, j) => i !== j).map((x) => x.name),
136
+ )(r.name);
137
+ });
138
+ };
139
+ }