Skip to content

Commit fb20a04

Browse files
committed
internal: reorganize name-resolver util
1 parent 928025b commit fb20a04

File tree

11 files changed

+130
-64
lines changed

11 files changed

+130
-64
lines changed

index.d.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,12 @@ interface GenerateApiParamsBase {
199199
* ```
200200
*/
201201
customTranslator?: new () => typeof import("./src/translators/translator").Translator;
202+
/** fallback name for enum key resolver */
203+
enumKeyResolverName?: string;
204+
/** fallback name for type name resolver */
205+
typeNameResolverName?: string;
206+
/** fallback name for specific arg name resolver */
207+
specificArgNameResolverName?: string;
202208
}
203209

204210
type CodeGenConstruct = {
@@ -549,12 +555,15 @@ export interface GenerateApiConfiguration {
549555
enumNamesAsValues: boolean;
550556
version: string;
551557
compilerTsConfig: Record<string, any>;
558+
enumKeyResolverName: string;
559+
typeNameResolverName: string;
560+
specificArgNameResolverName: string;
552561
/** do not use constructor args, it can break functionality of this property, just send class reference */
553562
customTranslator?: new (...args: never[]) => typeof import("./src/translators/translator").Translator;
554563
internalTemplateOptions: {
555564
addUtilRequiredKeysType: boolean;
556565
};
557-
componentTypeNameResolver: typeof import("./src/util/name-resolver").ComponentTypeNameResolver;
566+
componentTypeNameResolver: typeof import("./src/component-type-name-resolver").ComponentTypeNameResolver;
558567
fileNames: {
559568
dataContracts: string;
560569
routeTypes: string;

src/code-gen-process.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const { Logger } = require("./util/logger.js");
55
const { TypeNameFormatter } = require("./type-name-formatter.js");
66
const _ = require("lodash");
77
const { SchemaParserFabric } = require("./schema-parser/schema-parser-fabric");
8-
const { SchemaRoutes } = require("./schema-parser/schema-routes.js");
8+
const { SchemaRoutes } = require("./schema-routes/schema-routes.js");
99
const { CodeGenConfig } = require("./configuration.js");
1010
const { SchemaWalker } = require("./schema-walker");
1111
const { FileSystem } = require("./util/file-system");

src/component-type-name-resolver.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const { getRandomInt } = require("./util/random");
2+
const { pascalCase } = require("./util/pascal-case");
3+
const { NameResolver } = require("./util/name-resolver");
4+
5+
class ComponentTypeNameResolver extends NameResolver {
6+
counter = 1;
7+
fallbackNameCounter = 1;
8+
9+
/**
10+
* @param {CodeGenConfig} config;
11+
* @param {Logger} logger;
12+
* @param {string[]} reservedNames
13+
*/
14+
constructor(config, logger, reservedNames) {
15+
super(config, logger, reservedNames, (variants) => {
16+
const randomVariant = variants[getRandomInt(0, variants.length - 1)];
17+
const generatedVariant = pascalCase(
18+
(randomVariant && `${randomVariant}${this.counter++}`) ||
19+
`${this.config.componentTypeNameResolver}${this.fallbackNameCounter++}`,
20+
);
21+
this.logger.debug("generated fallback type name for component - ", generatedVariant);
22+
return generatedVariant;
23+
});
24+
}
25+
}
26+
27+
module.exports = {
28+
ComponentTypeNameResolver,
29+
};

src/configuration.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { objectAssign } = require("./util/object-assign");
22
const _ = require("lodash");
33
const CONSTANTS = require("./constants");
4-
const { ComponentTypeNameResolver } = require("./util/name-resolver");
4+
const { ComponentTypeNameResolver } = require("./component-type-name-resolver");
55
const { cosmiconfigSync } = require("cosmiconfig");
66
const ts = require("typescript");
77

@@ -36,7 +36,7 @@ const TsCodeGenKeyword = {
3636
class CodeGenConfig {
3737
version = CONSTANTS.PROJECT_VERSION;
3838
/** CLI flag */
39-
templates = "../templates/default";
39+
templates = "";
4040
/** CLI flag */
4141
generateResponses = false;
4242
/** CLI flag */
@@ -135,7 +135,8 @@ class CodeGenConfig {
135135
enumKeyPrefix = "";
136136
enumKeySuffix = "";
137137
patch = false;
138-
componentTypeNameResolver = new ComponentTypeNameResolver(null, []);
138+
/** @type {ComponentTypeNameResolver} */
139+
componentTypeNameResolver;
139140
/** name of the main exported class */
140141
apiClassName = "Api";
141142
debug = false;
@@ -159,6 +160,10 @@ class CodeGenConfig {
159160
fixInvalidTypeNamePrefix = "Type";
160161
fixInvalidEnumKeyPrefix = "Value";
161162

163+
enumKeyResolverName = "Value";
164+
typeNameResolverName = "ComponentType";
165+
specificArgNameResolverName = "arg";
166+
162167
successResponseStatusRange = [200, 299];
163168

164169
/** @type {ExtractingOptions} */
@@ -360,6 +365,7 @@ class CodeGenConfig {
360365

361366
this.jsPrimitiveTypes = [this.Ts.Keyword.Number, this.Ts.Keyword.String, this.Ts.Keyword.Boolean];
362367
this.jsEmptyTypes = [this.Ts.Keyword.Null, this.Ts.Keyword.Undefined];
368+
this.componentTypeNameResolver = new ComponentTypeNameResolver(this, null, []);
363369
}
364370

365371
/**

src/schema-parser/base-schema-parsers/enum.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,17 @@ const { MonoSchemaParser } = require("../mono-schema-parser");
22
const { pascalCase } = require("../../util/pascal-case");
33
const _ = require("lodash");
44
const { SCHEMA_TYPES } = require("../../constants");
5+
const { EnumKeyResolver } = require("../util/enum-key-resolver");
56

67
class EnumSchemaParser extends MonoSchemaParser {
8+
/** @type {EnumKeyResolver} */
9+
enumKeyResolver;
10+
11+
constructor(...args) {
12+
super(...args);
13+
this.enumKeyResolver = new EnumKeyResolver(this.config, this.logger, []);
14+
}
15+
716
parse() {
817
const pathTypeName = this.buildTypeNameFromPath();
918

@@ -113,12 +122,13 @@ class EnumSchemaParser extends MonoSchemaParser {
113122
});
114123
}
115124

116-
return (
117-
formatted ||
118-
this.typeNameFormatter.format(`${value}`, {
125+
if (!formatted) {
126+
formatted = this.typeNameFormatter.format(`${value}`, {
119127
type: "enum-key",
120-
})
121-
);
128+
});
129+
}
130+
131+
return this.enumKeyResolver.resolve([formatted]);
122132
};
123133
}
124134

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const { NameResolver } = require("../../util/name-resolver");
2+
3+
class EnumKeyResolver extends NameResolver {
4+
counter = 1;
5+
/**
6+
* @param {CodeGenConfig} config;
7+
* @param {Logger} logger;
8+
* @param {string[]} reservedNames
9+
*/
10+
constructor(config, logger, reservedNames) {
11+
super(config, logger, reservedNames, (variants) => {
12+
const generatedVariant =
13+
(variants[0] && `${variants[0]}${this.counter++}`) || `${this.config.enumKeyResolverName}${this.counter++}`;
14+
this.logger.debug("generated fallback type name for enum key - ", generatedVariant);
15+
return generatedVariant;
16+
});
17+
}
18+
}
19+
20+
module.exports = {
21+
EnumKeyResolver,
22+
};

src/schema-parser/schema-routes.js renamed to src/schema-routes/schema-routes.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const _ = require("lodash");
22
const { generateId } = require("../util/id.js");
3-
const { SpecificArgNameResolver } = require("../util/name-resolver.js");
3+
const { SpecificArgNameResolver } = require("./util/specific-arg-name-resolver");
44
const {
55
DEFAULT_BODY_ARG_NAME,
66
RESERVED_BODY_ARG_NAMES,
@@ -810,7 +810,7 @@ class SchemaRoutes {
810810
? this.schemaParserFabric.getInlineParseContent(headersObjectSchema, null, [routeName])
811811
: null;
812812

813-
const nameResolver = new SpecificArgNameResolver(this.logger, pathArgsNames);
813+
const nameResolver = new SpecificArgNameResolver(this.config, this.logger, pathArgsNames);
814814

815815
const specificArgs = {
816816
query: queryType
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const { NameResolver } = require("../../util/name-resolver");
2+
3+
class SpecificArgNameResolver extends NameResolver {
4+
counter = 1;
5+
/**
6+
* @param {CodeGenConfig} config;
7+
* @param {Logger} logger;
8+
* @param {string[]} reservedNames
9+
*/
10+
constructor(config, logger, reservedNames) {
11+
super(config, logger, reservedNames, (variants) => {
12+
const generatedVariant =
13+
(variants[0] && `${variants[0]}${this.counter++}`) ||
14+
`${this.config.specificArgNameResolverName}${this.counter++}`;
15+
this.logger.debug("generated fallback type name for specific arg - ", generatedVariant);
16+
return generatedVariant;
17+
});
18+
}
19+
}
20+
21+
module.exports = {
22+
SpecificArgNameResolver,
23+
};

src/templates-worker.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,17 @@ class TemplatesWorker {
2828
this.getRenderTemplateData = getRenderTemplateData;
2929
}
3030

31-
getTemplatePaths = ({ templates, modular }) => {
31+
/**
32+
*
33+
* @param config {CodeGenConfig}
34+
* @returns {CodeGenConfig.templatePaths}
35+
*/
36+
getTemplatePaths = (config) => {
3237
const baseTemplatesPath = resolve(__dirname, "../templates/base");
3338
const defaultTemplatesPath = resolve(__dirname, "../templates/default");
3439
const modularTemplatesPath = resolve(__dirname, "../templates/modular");
35-
const originalTemplatesPath = modular ? modularTemplatesPath : defaultTemplatesPath;
36-
const customTemplatesPath = (templates && resolve(process.cwd(), templates)) || null;
40+
const originalTemplatesPath = config.modular ? modularTemplatesPath : defaultTemplatesPath;
41+
const customTemplatesPath = (config.templates && resolve(process.cwd(), config.templates)) || null;
3742

3843
return {
3944
/** `templates/base` */
@@ -63,7 +68,10 @@ class TemplatesWorker {
6368
const isPath = _.startsWith(packageOrPath, "./") || _.startsWith(packageOrPath, "../");
6469

6570
if (isPath) {
66-
return require(path.resolve(this.config.templates, packageOrPath));
71+
return require(path.resolve(
72+
this.config.templatePaths.custom || this.config.templatePaths.original,
73+
packageOrPath,
74+
));
6775
}
6876

6977
return require(packageOrPath);

src/type-name-formatter.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,6 @@ class TypeNameFormatter {
7070
fixModelName = (name, options) => {
7171
const { type } = options || {};
7272

73-
if (type === "enum-key") {
74-
name = name.replace("+", "Plus").replace("-", "Minus");
75-
}
76-
7773
if (!this.isValidName(name)) {
7874
if (!/^[a-zA-Z_$]/g.test(name)) {
7975
const fixPrefix =

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy