swagger-typescript-api 10.0.2 → 11.0.0--alpha

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 (55) hide show
  1. package/README.md +263 -41
  2. package/index.d.ts +97 -0
  3. package/index.js +242 -115
  4. package/package.json +121 -116
  5. package/src/code-formatter.js +101 -0
  6. package/src/code-gen-process.js +456 -0
  7. package/src/configuration.js +425 -0
  8. package/src/constants.js +14 -31
  9. package/src/index.js +20 -271
  10. package/src/schema-components-map.js +60 -0
  11. package/src/schema-parser/schema-formatters.js +145 -0
  12. package/src/schema-parser/schema-parser.js +497 -0
  13. package/src/schema-parser/schema-routes.js +902 -0
  14. package/src/swagger-schema-resolver.js +187 -0
  15. package/src/templates.js +174 -155
  16. package/src/translators/JavaScript.js +3 -14
  17. package/src/type-name.js +79 -0
  18. package/src/util/file-system.js +76 -0
  19. package/src/{utils → util}/id.js +9 -9
  20. package/src/util/internal-case.js +5 -0
  21. package/src/util/logger.js +100 -0
  22. package/src/{utils/resolveName.js → util/name-resolver.js} +94 -97
  23. package/src/util/object-assign.js +11 -0
  24. package/src/util/pascal-case.js +5 -0
  25. package/src/{utils → util}/random.js +14 -14
  26. package/templates/base/data-contract-jsdoc.ejs +29 -24
  27. package/templates/base/data-contracts.ejs +3 -3
  28. package/templates/base/interface-data-contract.ejs +1 -0
  29. package/templates/base/route-docs.ejs +3 -4
  30. package/templates/base/route-type.ejs +2 -2
  31. package/templates/default/procedure-call.ejs +2 -2
  32. package/templates/default/route-types.ejs +2 -2
  33. package/templates/modular/api.ejs +2 -2
  34. package/templates/modular/procedure-call.ejs +2 -2
  35. package/templates/modular/route-types.ejs +2 -2
  36. package/src/apiConfig.js +0 -30
  37. package/src/common.js +0 -28
  38. package/src/components.js +0 -91
  39. package/src/config.js +0 -106
  40. package/src/filePrefix.js +0 -14
  41. package/src/files.js +0 -56
  42. package/src/formatFileContent.js +0 -81
  43. package/src/logger.js +0 -59
  44. package/src/modelNames.js +0 -78
  45. package/src/modelTypes.js +0 -31
  46. package/src/output.js +0 -165
  47. package/src/prettierOptions.js +0 -23
  48. package/src/render/utils/fmtToJSDocLine.js +0 -10
  49. package/src/render/utils/index.js +0 -31
  50. package/src/render/utils/templateRequire.js +0 -17
  51. package/src/routeNames.js +0 -46
  52. package/src/routes.js +0 -809
  53. package/src/schema.js +0 -474
  54. package/src/swagger.js +0 -152
  55. package/src/typeFormatters.js +0 -121
package/src/output.js DELETED
@@ -1,165 +0,0 @@
1
- const _ = require("lodash");
2
- const { getFileContent } = require("./files");
3
- const { classNameCase } = require("./render/utils");
4
- const { renderTemplate } = require("./templates");
5
- const { translate: translateToJS } = require("./translators/JavaScript");
6
- const ts = require("typescript");
7
- const formatFileContent = require("./formatFileContent");
8
- const { config } = require("./config");
9
-
10
- const getFileNameWithoutExt = (fileName) => {
11
- const fileNameParts = _.split(fileName, ".");
12
-
13
- if (fileNameParts.length > 1) {
14
- fileNameParts.pop();
15
- }
16
-
17
- return fileNameParts.join(".");
18
- };
19
-
20
- const createFileInfo = (configuration, fileName, content) => {
21
- const fixedFileName = getFileNameWithoutExt(fileName);
22
-
23
- if (configuration.translateToJavaScript) {
24
- const { sourceContent, declarationContent } = translateToJS(`${fixedFileName}${ts.Extension.Ts}`, content);
25
-
26
- if (config.debug) {
27
- console.info("generating output for", `${fixedFileName}${ts.Extension.Js}`);
28
- console.info(sourceContent);
29
- }
30
-
31
- if (config.debug) {
32
- console.info("generating output for", `${fixedFileName}${ts.Extension.Dts}`);
33
- console.info(declarationContent);
34
- }
35
-
36
- return {
37
- name: `${fixedFileName}${ts.Extension.Js}`,
38
- content: formatFileContent(sourceContent),
39
- declaration: {
40
- name: `${fixedFileName}${ts.Extension.Dts}`,
41
- content: formatFileContent(declarationContent),
42
- },
43
- };
44
- }
45
-
46
- if (config.debug) {
47
- console.info("generating output for", `${fixedFileName}${ts.Extension.Ts}`);
48
- console.info(content);
49
- }
50
-
51
- return {
52
- name: `${fixedFileName}${ts.Extension.Ts}`,
53
- content: formatFileContent(content),
54
- declaration: null,
55
- };
56
- };
57
-
58
- const createMultipleFileInfos = (templatesToRender, configuration) => {
59
- const { routes } = configuration;
60
- const { fileNames, generateRouteTypes, generateClient } = configuration.config;
61
- const modularApiFileInfos = [];
62
-
63
- if (routes.$outOfModule) {
64
- if (generateRouteTypes) {
65
- const outOfModuleRouteContent = renderTemplate(templatesToRender.routeTypes, {
66
- ...configuration,
67
- route: configuration.routes.$outOfModule,
68
- });
69
-
70
- modularApiFileInfos.push(createFileInfo(configuration, fileNames.outOfModuleApi, outOfModuleRouteContent));
71
- }
72
- if (generateClient) {
73
- const outOfModuleApiContent = renderTemplate(templatesToRender.api, {
74
- ...configuration,
75
- route: configuration.routes.$outOfModule,
76
- });
77
-
78
- modularApiFileInfos.push(createFileInfo(configuration, fileNames.outOfModuleApi, outOfModuleApiContent));
79
- }
80
- }
81
-
82
- if (routes.combined) {
83
- modularApiFileInfos.push(
84
- ..._.reduce(
85
- routes.combined,
86
- (apiFileInfos, route) => {
87
- if (generateRouteTypes) {
88
- const routeModuleContent = renderTemplate(templatesToRender.routeTypes, {
89
- ...configuration,
90
- route,
91
- });
92
-
93
- apiFileInfos.push(
94
- createFileInfo(configuration, classNameCase(`${route.moduleName}_Route`), routeModuleContent),
95
- );
96
- }
97
-
98
- if (generateClient) {
99
- const apiModuleContent = renderTemplate(templatesToRender.api, {
100
- ...configuration,
101
- route,
102
- });
103
-
104
- apiFileInfos.push(createFileInfo(configuration, classNameCase(route.moduleName), apiModuleContent));
105
- }
106
-
107
- return apiFileInfos;
108
- },
109
- [],
110
- ),
111
- );
112
- }
113
-
114
- return [
115
- createFileInfo(
116
- configuration,
117
- fileNames.dataContracts,
118
- renderTemplate(templatesToRender.dataContracts, configuration),
119
- ),
120
- generateClient &&
121
- createFileInfo(configuration, fileNames.httpClient, renderTemplate(templatesToRender.httpClient, configuration)),
122
- ...modularApiFileInfos,
123
- ];
124
- };
125
-
126
- const createSingleFileInfo = (templatesToRender, configuration) => {
127
- const { generateRouteTypes, generateClient } = configuration.config;
128
-
129
- return [
130
- createFileInfo(
131
- configuration,
132
- configuration.fileName,
133
- _.compact([
134
- renderTemplate(templatesToRender.dataContracts, configuration),
135
- generateRouteTypes && renderTemplate(templatesToRender.routeTypes, configuration),
136
- generateClient && renderTemplate(templatesToRender.httpClient, configuration),
137
- generateClient && renderTemplate(templatesToRender.api, configuration),
138
- ]).join("\n"),
139
- ),
140
- ];
141
- };
142
-
143
- const createExtraFileInfos = (configuration) => {
144
- return _.map(configuration.extraTemplates, (extraTemplate) => {
145
- return createFileInfo(
146
- configuration,
147
- extraTemplate.name,
148
- renderTemplate(getFileContent(extraTemplate.path), configuration),
149
- );
150
- });
151
- };
152
-
153
- module.exports = {
154
- generateOutputFiles: ({ modular, templatesToRender, configuration }) => {
155
- const output = modular
156
- ? createMultipleFileInfos(templatesToRender, configuration)
157
- : createSingleFileInfo(templatesToRender, configuration);
158
-
159
- if (!_.isEmpty(configuration.extraTemplates)) {
160
- output.push(...createExtraFileInfos(configuration));
161
- }
162
-
163
- return output.filter((fileInfo) => !!fileInfo && !!fileInfo.content);
164
- },
165
- };
@@ -1,23 +0,0 @@
1
- const { cosmiconfigSync } = require("cosmiconfig");
2
- const constants = require("./constants");
3
-
4
- /**
5
- * Get prettier options from user's project or return the default one
6
- * @return {import('prettier').Options} Prettier options
7
- */
8
- function getPrettierOptions() {
9
- const prettier = cosmiconfigSync("prettier").search();
10
-
11
- if (prettier) {
12
- return {
13
- ...prettier.config,
14
- parser: "typescript",
15
- };
16
- }
17
-
18
- return constants.PRETTIER_OPTIONS;
19
- }
20
-
21
- module.exports = {
22
- getPrettierOptions,
23
- };
@@ -1,10 +0,0 @@
1
- /**
2
- * Format a line in JSDOC line by adding ' *' at the beginning and \n character at the end
3
- *
4
- * @example 'abc' -> ' * abc\n'
5
- * @param line
6
- * @return {string}
7
- */
8
- module.exports = function fmtToJSDocLine(line, { eol = true }) {
9
- return ` * ${line}${eol ? "\n" : ""}`;
10
- };
@@ -1,31 +0,0 @@
1
- const { classNameCase, formatDescription, internalCase } = require("../../common");
2
- const { getComponentByRef } = require("../../components");
3
- const { formatModelName } = require("../../modelNames");
4
- const {
5
- getInlineParseContent,
6
- getParseContent,
7
- parseSchema,
8
- checkAndAddNull,
9
- isNeedToAddNull,
10
- } = require("../../schema");
11
- const { formatters, inlineExtraFormatters } = require("../../typeFormatters");
12
- const { NameResolver } = require("../../utils/resolveName");
13
-
14
- module.exports = {
15
- formatDescription,
16
- internalCase,
17
- classNameCase,
18
- getInlineParseContent,
19
- getParseContent,
20
- getComponentByRef,
21
- parseSchema,
22
- formatters,
23
- checkAndAddNull,
24
- isNeedToAddNull,
25
- inlineExtraFormatters,
26
- formatModelName,
27
- fmtToJSDocLine: require("./fmtToJSDocLine"),
28
- NameResolver: NameResolver,
29
- _: require("lodash"),
30
- require: require("./templateRequire").templateRequire,
31
- };
@@ -1,17 +0,0 @@
1
- const _ = require("lodash");
2
- const path = require("path");
3
- const { config } = require("../../config");
4
-
5
- const templateRequire = (packageOrPath) => {
6
- const isPath = _.startsWith(packageOrPath, "./") || _.startsWith(packageOrPath, "../");
7
-
8
- if (isPath) {
9
- return require(path.resolve(config.templates, packageOrPath));
10
- }
11
-
12
- return require(packageOrPath);
13
- };
14
-
15
- module.exports = {
16
- templateRequire,
17
- };
package/src/routeNames.js DELETED
@@ -1,46 +0,0 @@
1
- const { config } = require("./config");
2
- const { logger } = require("./logger");
3
- const { renderTemplate } = require("./templates");
4
-
5
- const getRouteName = (routeInfo) => {
6
- const { moduleName } = routeInfo;
7
- const { routeNameDuplicatesMap, templatesToRender } = config;
8
- const routeNameTemplate = templatesToRender.routeName;
9
-
10
- const routeNameFromTemplate = renderTemplate(routeNameTemplate, {
11
- routeInfo: routeInfo,
12
- utils: require("./render/utils"),
13
- config,
14
- });
15
-
16
- const routeName = config.hooks.onFormatRouteName(routeInfo, routeNameFromTemplate) || routeNameFromTemplate;
17
-
18
- const duplicateIdentifier = `${moduleName}|${routeName}`;
19
-
20
- if (routeNameDuplicatesMap.has(duplicateIdentifier)) {
21
- routeNameDuplicatesMap.set(duplicateIdentifier, routeNameDuplicatesMap.get(duplicateIdentifier) + 1);
22
-
23
- logger.warn(
24
- `Module "${moduleName}" already has method "${routeName}()"`,
25
- `\nThis method has been renamed to "${
26
- routeName + routeNameDuplicatesMap.get(duplicateIdentifier)
27
- }()" to solve conflict names.`,
28
- );
29
- } else {
30
- routeNameDuplicatesMap.set(duplicateIdentifier, 1);
31
- }
32
-
33
- const duplicates = routeNameDuplicatesMap.get(duplicateIdentifier);
34
-
35
- const routeNameInfo = {
36
- usage: routeName + (duplicates > 1 ? duplicates : ""),
37
- original: routeName,
38
- duplicate: duplicates > 1,
39
- };
40
-
41
- return config.hooks.onCreateRouteName(routeNameInfo, routeInfo) || routeNameInfo;
42
- };
43
-
44
- module.exports = {
45
- getRouteName,
46
- };