Skip to content

Commit e2a606e

Browse files
committed
feat: add the saddleback layout for generate custom services
1 parent 8e4d97c commit e2a606e

13 files changed

+227
-2
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
{{#if imports}}
2+
{{#each imports}}
3+
import type { {{{this}}} } from '../models/{{{this}}}.models';
4+
{{/each}}
5+
{{/if}}
6+
import axios, {
7+
AxiosError,
8+
AxiosResponse,
9+
} from 'axios';
10+
import serviceError from 'global/api/serviceError';
11+
import getBaseConfig from 'global/api/getBaseConfig';
12+
13+
{{#each operations}}
14+
/**
15+
{{#if deprecated}}
16+
* @deprecated
17+
{{/if}}
18+
{{#if summary}}
19+
* {{{escapeComment summary}}}
20+
{{/if}}
21+
{{#if description}}
22+
* {{{escapeComment description}}}
23+
{{/if}}
24+
{{#unless @root.useOptions}}
25+
{{#if parameters}}
26+
{{#each parameters}}
27+
* @param {{{name}}} {{#if description}}{{{escapeComment description}}}{{/if}}
28+
{{/each}}
29+
{{/if}}
30+
{{/unless}}
31+
{{#each results}}
32+
* @returns {{{type}}} {{#if description}}{{{escapeComment description}}}{{/if}}
33+
{{/each}}
34+
* @throws Error('{{{../name}}}Service > {{name}}')
35+
*/
36+
37+
export const fetch{{{../name}}}{{pascalCase name}} = async ({{> saddlebackParameters}}): Promise<AxiosResponse<{{>result}}>> => {
38+
const setBaseConfig = getBaseConfig({
39+
{{#if parametersBody}}
40+
data,
41+
{{/if}}
42+
{{#if parametersPath}}
43+
params,
44+
{{else if parametersQuery}}
45+
params,
46+
{{/if}}
47+
method: '{{{method}}}',
48+
url: '{{{path}}}',
49+
{{#if parametersBody}}
50+
{{#if parametersBody.mediaType}}
51+
contentType: '{{{parametersBody.mediaType}}}',
52+
{{/if}}
53+
{{/if}}
54+
});
55+
56+
try {
57+
const response: AxiosResponse<{{>result}}> = await axios({
58+
...setBaseConfig,
59+
});
60+
61+
return response;
62+
} catch (error) {
63+
const axiosError = error as AxiosError;
64+
65+
serviceError({
66+
response: axiosError.response,
67+
});
68+
69+
throw new Error('{{{../name}}}Service > {{name}}');
70+
}
71+
};
72+
73+
{{/each}}
74+
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
{{#if parameters}}
2+
{
3+
{{#if parametersBody}}
4+
data,
5+
{{/if}}
6+
{{#if parametersPath}}
7+
params,
8+
{{else if parametersQuery}}
9+
params,
10+
{{/if~}} }: {
11+
{{#if parametersBody}}
12+
data: {{#equals parametersBody.in 'formData'}}FormData;{{else}}{{{parametersBody.type}}};{{/equals}}
13+
{{/if}}
14+
{{#if parametersPath}}
15+
params: {
16+
{{#each parametersPath}}
17+
{{#ifdef description deprecated}}
18+
/**
19+
{{#if description}}
20+
* {{{escapeComment description}}}
21+
{{/if}}
22+
{{#if deprecated}}
23+
* @deprecated
24+
{{/if}}
25+
*/
26+
{{/ifdef}}
27+
{{{name}}}{{>isRequired}}: {{>type}};
28+
{{/each}}
29+
{{#each parametersQuery}}
30+
{{#ifdef description deprecated}}
31+
/**
32+
{{#if description}}
33+
* {{{escapeComment description}}}
34+
{{/if}}
35+
{{#if deprecated}}
36+
* @deprecated
37+
{{/if}}
38+
*/
39+
{{/ifdef}}
40+
{{{name}}}{{>isRequired}}: {{>type}};
41+
{{/each}}
42+
};
43+
{{else if parametersQuery}}
44+
params: {
45+
{{#each parametersPath}}
46+
{{#ifdef description deprecated}}
47+
/**
48+
{{#if description}}
49+
* {{{escapeComment description}}}
50+
{{/if}}
51+
{{#if deprecated}}
52+
* @deprecated
53+
{{/if}}
54+
*/
55+
{{/ifdef}}
56+
{{{name}}}{{>isRequired}}: {{>type}};
57+
{{/each}}
58+
{{#each parametersQuery}}
59+
{{#ifdef description deprecated}}
60+
/**
61+
{{#if description}}
62+
* {{{escapeComment description}}}
63+
{{/if}}
64+
{{#if deprecated}}
65+
* @deprecated
66+
{{/if}}
67+
*/
68+
{{/ifdef}}
69+
{{{name}}}{{>isRequired}}: {{>type}};
70+
{{/each}}
71+
};
72+
{{/if}}
73+
}{{/if}}

src/utils/registerHandlebarTemplates.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import xhrGetResponseHeader from '../templates/core/xhr/getResponseHeader.hbs';
5353
import xhrRequest from '../templates/core/xhr/request.hbs';
5454
import xhrSendRequest from '../templates/core/xhr/sendRequest.hbs';
5555
import templateExportModel from '../templates/exportModel.hbs';
56+
import templateExportSaddlebackService from '../templates/exportSaddlebackService.hbs';
5657
import templateExportSchema from '../templates/exportSchema.hbs';
5758
import templateExportService from '../templates/exportService.hbs';
5859
import templateIndex from '../templates/index.hbs';
@@ -67,6 +68,7 @@ import partialIsReadOnly from '../templates/partials/isReadOnly.hbs';
6768
import partialIsRequired from '../templates/partials/isRequired.hbs';
6869
import partialParameters from '../templates/partials/parameters.hbs';
6970
import partialResult from '../templates/partials/result.hbs';
71+
import saddlebackParameters from '../templates/partials/saddlebackParameters.hbs';
7072
import partialSchema from '../templates/partials/schema.hbs';
7173
import partialSchemaArray from '../templates/partials/schemaArray.hbs';
7274
import partialSchemaComposition from '../templates/partials/schemaComposition.hbs';
@@ -92,6 +94,7 @@ export interface Templates {
9294
model: Handlebars.TemplateDelegate;
9395
schema: Handlebars.TemplateDelegate;
9496
service: Handlebars.TemplateDelegate;
97+
saddlebackService: Handlebars.TemplateDelegate;
9598
};
9699
core: {
97100
settings: Handlebars.TemplateDelegate;
@@ -124,6 +127,7 @@ export const registerHandlebarTemplates = (root: {
124127
model: Handlebars.template(templateExportModel),
125128
schema: Handlebars.template(templateExportSchema),
126129
service: Handlebars.template(templateExportService),
130+
saddlebackService: Handlebars.template(templateExportSaddlebackService),
127131
},
128132
core: {
129133
settings: Handlebars.template(templateCoreSettings),
@@ -147,6 +151,7 @@ export const registerHandlebarTemplates = (root: {
147151
Handlebars.registerPartial('isReadOnly', Handlebars.template(partialIsReadOnly));
148152
Handlebars.registerPartial('isRequired', Handlebars.template(partialIsRequired));
149153
Handlebars.registerPartial('parameters', Handlebars.template(partialParameters));
154+
Handlebars.registerPartial('saddlebackParameters', Handlebars.template(saddlebackParameters));
150155
Handlebars.registerPartial('result', Handlebars.template(partialResult));
151156
Handlebars.registerPartial('schema', Handlebars.template(partialSchema));
152157
Handlebars.registerPartial('schemaArray', Handlebars.template(partialSchemaArray));

src/utils/writeClient.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ describe('writeClient', () => {
2323
model: () => 'model',
2424
schema: () => 'schema',
2525
service: () => 'service',
26+
saddlebackService: () => 'saddlebackService',
2627
},
2728
core: {
2829
settings: () => 'settings',

src/utils/writeClient.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { writeClientIndex } from './writeClientIndex';
1313
import { writeClientModels } from './writeClientModels';
1414
import { writeClientSchemas } from './writeClientSchemas';
1515
import { writeClientServices } from './writeClientServices';
16+
import { writeSaddlebackClientServices } from './writeSaddlebackClientServices';
1617

1718
/**
1819
* Write our OpenAPI client, using the given templates at the given output
@@ -53,6 +54,7 @@ export const writeClient = async (
5354
const outputPathModels = resolve(outputPath, 'models');
5455
const outputPathSchemas = resolve(outputPath, 'schemas');
5556
const outputPathServices = resolve(outputPath, 'services');
57+
const outputPathSaddlebackServices = resolve(outputPath, 'saddlebackServices');
5658

5759
if (!isSubDirectory(process.cwd(), output)) {
5860
throw new Error(`Output folder is not a subdirectory of the current working directory`);
@@ -112,4 +114,21 @@ export const writeClient = async (
112114
clientName
113115
);
114116
}
117+
118+
if (true) {
119+
await rmdir(outputPathSaddlebackServices);
120+
await mkdir(outputPathSaddlebackServices);
121+
122+
await writeSaddlebackClientServices(
123+
client.services,
124+
templates,
125+
outputPathSaddlebackServices,
126+
httpClient,
127+
useUnionTypes,
128+
useOptions,
129+
indent,
130+
postfix,
131+
clientName
132+
);
133+
}
115134
};

src/utils/writeClientClass.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ describe('writeClientClass', () => {
2323
model: () => 'model',
2424
schema: () => 'schema',
2525
service: () => 'service',
26+
saddlebackService: () => 'saddlebackService',
2627
},
2728
core: {
2829
settings: () => 'settings',

src/utils/writeClientCore.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ describe('writeClientCore', () => {
2525
model: () => 'model',
2626
schema: () => 'schema',
2727
service: () => 'service',
28+
saddlebackService: () => 'saddlebackService',
2829
},
2930
core: {
3031
settings: () => 'settings',

src/utils/writeClientIndex.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ describe('writeClientIndex', () => {
2121
model: () => 'model',
2222
schema: () => 'schema',
2323
service: () => 'service',
24+
saddlebackService: () => 'saddlebackService',
2425
},
2526
core: {
2627
settings: () => 'settings',

src/utils/writeClientModels.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ describe('writeClientModels', () => {
3838
model: () => 'model',
3939
schema: () => 'schema',
4040
service: () => 'service',
41+
saddlebackService: () => 'saddlebackService',
4142
},
4243
core: {
4344
settings: () => 'settings',

src/utils/writeClientSchemas.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ describe('writeClientSchemas', () => {
3838
model: () => 'model',
3939
schema: () => 'schema',
4040
service: () => 'service',
41+
saddlebackService: () => 'saddlebackService',
4142
},
4243
core: {
4344
settings: () => 'settings',

0 commit comments

Comments
 (0)