Skip to content

Commit cf4f2f9

Browse files
authored
Merge branch 'master' into add-model-postfix
2 parents c32bad3 + 4379538 commit cf4f2f9

File tree

12 files changed

+1411
-857
lines changed

12 files changed

+1411
-857
lines changed

package-lock.json

Lines changed: 1237 additions & 758 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,28 +77,28 @@
7777
"@angular/platform-browser": "14.0.1",
7878
"@angular/platform-browser-dynamic": "14.0.1",
7979
"@angular/router": "14.0.1",
80-
"@babel/cli": "7.18.6",
81-
"@babel/core": "7.18.6",
82-
"@babel/preset-env": "7.18.6",
80+
"@babel/cli": "7.18.10",
81+
"@babel/core": "7.18.13",
82+
"@babel/preset-env": "7.19.0",
8383
"@babel/preset-typescript": "7.18.6",
84-
"@rollup/plugin-commonjs": "22.0.1",
84+
"@rollup/plugin-commonjs": "22.0.2",
8585
"@rollup/plugin-node-resolve": "13.3.0",
86-
"@rollup/plugin-typescript": "8.3.3",
86+
"@rollup/plugin-typescript": "8.5.0",
8787
"@types/cross-spawn": "6.0.2",
8888
"@types/express": "4.17.13",
8989
"@types/fs-extra": "^9.0.13",
9090
"@types/glob": "7.2.0",
91-
"@types/jest": "28.1.5",
92-
"@types/node": "18.0.4",
91+
"@types/jest": "28.1.8",
92+
"@types/node": "18.7.17",
9393
"@types/node-fetch": "2.6.1",
9494
"@types/qs": "6.9.7",
95-
"@typescript-eslint/eslint-plugin": "5.30.6",
96-
"@typescript-eslint/parser": "5.30.6",
95+
"@typescript-eslint/eslint-plugin": "5.36.2",
96+
"@typescript-eslint/parser": "5.37.0",
9797
"abort-controller": "3.0.0",
9898
"axios": "0.27.2",
9999
"codecov": "3.8.3",
100100
"cross-spawn": "7.0.3",
101-
"eslint": "8.19.0",
101+
"eslint": "8.23.1",
102102
"eslint-config-prettier": "8.5.0",
103103
"eslint-plugin-prettier": "4.2.1",
104104
"eslint-plugin-simple-import-sort": "7.0.0",
@@ -108,16 +108,16 @@
108108
"jest": "28.1.3",
109109
"jest-cli": "28.1.3",
110110
"prettier": "2.7.1",
111-
"puppeteer": "15.4.0",
111+
"puppeteer": "15.5.0",
112112
"qs": "6.11.0",
113113
"rimraf": "3.0.2",
114-
"rollup": "2.76.0",
114+
"rollup": "2.79.0",
115115
"rollup-plugin-terser": "7.0.2",
116116
"rxjs": "7.5.6",
117-
"ts-node": "10.8.2",
117+
"ts-node": "10.9.1",
118118
"tslib": "2.4.0",
119119
"typescript": "4.7.3",
120-
"zone.js": "0.11.6"
120+
"zone.js": "0.11.8"
121121
},
122122
"resolutions": {
123123
"node-fetch": "2.6.7"

src/openApi/v3/parser/getModel.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,13 @@ export const getModel = (
9595
}
9696
}
9797

98-
if (definition.type === 'object' && typeof definition.additionalProperties === 'object') {
99-
if (definition.additionalProperties.$ref) {
100-
const additionalProperties = getType(definition.additionalProperties.$ref);
98+
if (
99+
definition.type === 'object' &&
100+
(typeof definition.additionalProperties === 'object' || definition.additionalProperties === true)
101+
) {
102+
const ap = typeof definition.additionalProperties === 'object' ? definition.additionalProperties : {};
103+
if (ap.$ref) {
104+
const additionalProperties = getType(ap.$ref);
101105
model.export = 'dictionary';
102106
model.type = additionalProperties.type;
103107
model.base = additionalProperties.base;
@@ -106,7 +110,7 @@ export const getModel = (
106110
model.default = getModelDefault(definition, model);
107111
return model;
108112
} else {
109-
const additionalProperties = getModel(openApi, definition.additionalProperties);
113+
const additionalProperties = getModel(openApi, ap);
110114
model.export = 'dictionary';
111115
model.type = additionalProperties.type;
112116
model.base = additionalProperties.base;
@@ -146,12 +150,12 @@ export const getModel = (
146150
}
147151

148152
if (definition.type === 'object') {
149-
model.export = 'interface';
150-
model.type = 'any';
151-
model.base = 'any';
152-
model.default = getModelDefault(definition, model);
153-
154153
if (definition.properties) {
154+
model.export = 'interface';
155+
model.type = 'any';
156+
model.base = 'any';
157+
model.default = getModelDefault(definition, model);
158+
155159
const modelProperties = getModelProperties(openApi, definition, getModel, model);
156160
modelProperties.forEach(modelProperty => {
157161
model.imports.push(...modelProperty.imports);
@@ -161,8 +165,18 @@ export const getModel = (
161165
model.enums.push(modelProperty);
162166
}
163167
});
168+
return model;
169+
} else {
170+
const additionalProperties = getModel(openApi, {});
171+
model.export = 'dictionary';
172+
model.type = additionalProperties.type;
173+
model.base = additionalProperties.base;
174+
model.template = additionalProperties.template;
175+
model.link = additionalProperties;
176+
model.imports.push(...additionalProperties.imports);
177+
model.default = getModelDefault(definition, model);
178+
return model;
164179
}
165-
return model;
166180
}
167181

168182
// If the schema has a type than it can be a basic or generic type.

src/templates/core/fetch/getResponseBody.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ const getResponseBody = async (response: Response): Promise<any> => {
33
try {
44
const contentType = response.headers.get('Content-Type');
55
if (contentType) {
6-
const isJSON = contentType.toLowerCase().startsWith('application/json');
6+
const jsonTypes = ['application/json', 'application/problem+json']
7+
const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));
78
if (isJSON) {
89
return await response.json();
910
} else {

src/templates/core/node/getResponseBody.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ const getResponseBody = async (response: Response): Promise<any> => {
33
try {
44
const contentType = response.headers.get('Content-Type');
55
if (contentType) {
6-
const isJSON = contentType.toLowerCase().startsWith('application/json');
6+
const jsonTypes = ['application/json', 'application/problem+json']
7+
const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));
78
if (isJSON) {
89
return await response.json();
910
} else {

src/templates/core/xhr/getResponseBody.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ const getResponseBody = (xhr: XMLHttpRequest): any => {
33
try {
44
const contentType = xhr.getResponseHeader('Content-Type');
55
if (contentType) {
6-
const isJSON = contentType.toLowerCase().startsWith('application/json');
6+
const jsonTypes = ['application/json', 'application/problem+json']
7+
const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));
78
if (isJSON) {
89
return JSON.parse(xhr.responseText);
910
} else {

src/templates/exportService.hbs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ import { request as __request } from '../core/request';
3232
{{/if}}
3333

3434
{{#equals @root.httpClient 'angular'}}
35-
@Injectable()
35+
@Injectable({
36+
providedIn: 'root',
37+
})
3638
{{/equals}}
3739
export class {{{name}}}{{{@root.postfix}}} {
3840
{{#if @root.exportClient}}

src/utils/getPattern.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ describe('getPattern', () => {
1010
expect(getPattern('\\')).toEqual('\\\\');
1111
expect(getPattern('\\/')).toEqual('\\\\/');
1212
expect(getPattern('\\/\\/')).toEqual('\\\\/\\\\/');
13+
// eslint-disable-next-line prettier/prettier
14+
expect(getPattern("'")).toEqual("\\'");
1315
});
1416
});

src/utils/getPattern.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
* However, to use it in HTML or inside new RegExp() we need to
44
* escape the pattern to become: '^\\d{3}-\\d{2}-\\d{4}$' in order
55
* to make it a valid regexp string.
6+
*
7+
* Also, escape single quote characters, because the output uses single quotes for strings
8+
*
69
* @param pattern
710
*/
811
export const getPattern = (pattern?: string): string | undefined => {
9-
return pattern?.replace(/\\/g, '\\\\');
12+
// eslint-disable-next-line prettier/prettier
13+
return pattern?.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
1014
};

0 commit comments

Comments
 (0)