Skip to content

Commit 7aed6bc

Browse files
committed
custom generator to generate opendev code
1 parent b973aa1 commit 7aed6bc

File tree

6 files changed

+22
-7
lines changed

6 files changed

+22
-7
lines changed

bin/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const params = program
2323
.option('--exportIndex <value>', 'Write Index to disk', true)
2424
.option('--exportSchemas <value>', 'Write schemas to disk', false)
2525
.option('--indent <value>', 'Indentation options [4, 2, tabs]', '4')
26-
.option('--postfixServices <value>', 'Service name postfix', 'Service')
26+
.option('--postfixServices <value>', 'Service name postfix', '')
2727
.option('--postfixModels <value>', 'Model name postfix')
2828
.option('--request <value>', 'Path to custom request file')
2929
.option('--serviceTemplate <value>', 'Path to custom service handlebars template to generate the service files')

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export const generate = async ({
7373
exportIndex = true,
7474
exportSchemas = false,
7575
indent = Indent.SPACE_4,
76-
postfixServices = 'Service',
76+
postfixServices = '',
7777
postfixModels = '',
7878
request,
7979
serviceTemplate,

src/openApi/v3/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@ import { getServiceVersion } from './parser/getServiceVersion';
1313
export const parse = (openApi: OpenApi): Client => {
1414
const version = getServiceVersion(openApi.info.version);
1515
const server = getServer(openApi);
16-
const models = getModels(openApi);
17-
const services = getServices(openApi);
16+
const models = cleanDTO(getModels(openApi));
17+
const services = cleanDTO(getServices(openApi));
1818

1919
return { version, server, models, services };
2020
};
21+
22+
function cleanDTO<T>(model: T) {
23+
const str = JSON.stringify(model).replace(/DTO/g, 'Model');
24+
25+
return JSON.parse(str) as T;
26+
}

src/openApi/v3/parser/getOperation.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { Operation } from '../../../client/interfaces/Operation';
2+
import { OperationParameter } from '../../../client/interfaces/OperationParameter';
23
import type { OperationParameters } from '../../../client/interfaces/OperationParameters';
34
import type { OpenApi } from '../interfaces/OpenApi';
45
import type { OpenApiOperation } from '../interfaces/OpenApiOperation';
@@ -60,6 +61,10 @@ export const getOperation = (
6061
operation.parametersBody = parameters.parametersBody;
6162
}
6263

64+
if (operation.parametersPath?.length) {
65+
operation.path = feedParamsToUrl(operation.path);
66+
}
67+
6368
if (op.requestBody) {
6469
const requestBodyDef = getRef<OpenApiRequestBody>(openApi, op.requestBody);
6570
const requestBody = getOperationRequestBody(openApi, requestBodyDef);
@@ -85,3 +90,7 @@ export const getOperation = (
8590

8691
return operation;
8792
};
93+
94+
function feedParamsToUrl(url: string) {
95+
return url.replace(/{([^{}]*)}/g, (_match, p1) => `\${encodeURIComponent(options.pathParams!.${p1})}`);
96+
}

src/utils/writeClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export const writeClient = async (
5656
const outputPathCore = resolve(outputPath, 'core');
5757
const outputPathModels = resolve(outputPath, 'models');
5858
const outputPathSchemas = resolve(outputPath, 'schemas');
59-
const outputPathServices = resolve(outputPath, 'services');
59+
const outputPathServices = resolve(outputPath, 'store');
6060

6161
if (!isSubDirectory(process.cwd(), output)) {
6262
throw new Error(`Output folder is not a subdirectory of the current working directory`);

src/utils/writeCustomTemplate/clientServices.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ export const writeClientServicesCustomTemplate = async (
3838

3939
const serviceTemplate = Handlebars.compile(await readFile(templatePath, 'utf8'));
4040

41-
const servicesDir = resolve(outputPath, 'services');
41+
const servicesDir = resolve(outputPath, 'store');
4242
await remove(servicesDir);
4343
await mkdir(servicesDir);
4444

4545
for (const service of client.services) {
46-
const file = resolve(outputPath, `services/${service.name}${postfixServices}.ts`);
46+
const file = resolve(outputPath, `store/${service.name}${postfixServices}.ts`);
4747
const templateResult = serviceTemplate({
4848
...service,
4949
serviceBaseUrl: client.server,

0 commit comments

Comments
 (0)