Skip to content

Commit 7056e26

Browse files
authored
Release/1.5.0 (acacode#27)
* feat: add prettier for output typescript api module; fix: problem with array type; bump: up version to 1.5.0 * feat: improve types for object with dynamic keys ( `additionalProperties` ); docs: update CHANGELOG
1 parent 89b9567 commit 7056e26

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+5165
-3632
lines changed

CHANGELOG.md

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# next release
22

3+
# 1.5.0
4+
5+
Features:
6+
7+
- Add `prettier` for beautify output typescript api module
8+
- Support `additionalProperties` type data
9+
![additional properties](./assets/changelog_assets/additional-properties-types.jpg)
10+
11+
Fixes:
12+
13+
- Fix problem with array `type` definitions without `type` property([#26](https://github.com/acacode/swagger-typescript-api/issues/26))
14+
315
# 1.4.1
416

517
Fixes:
Loading

package-lock.json

+8-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"name": "swagger-typescript-api",
3-
"version": "1.4.1",
3+
"version": "1.5.0",
44
"description": "Create typescript api module from swagger schema",
55
"scripts": {
66
"cli": "node index.js -d -p ./swagger-test-cli.json -n swagger-test-cli.ts",
7-
"cli:debug": "node --nolazy --inspect-brk=9229 index.js -p ./tests/schemas/v2.0/adafruit.yaml -n swagger-test-cli.ts",
7+
"cli:debug": "node --nolazy --inspect-brk=9229 index.js -p ./swagger-test-cli.json -n swagger-test-cli.ts",
88
"cli:help": "node index.js -h",
99
"test:all": "npm-run-all generate validate test:routeTypes test:noClient test:defaultAsSuccess test:responses --continue-on-error",
1010
"generate": "node tests/generate.js",
@@ -23,9 +23,9 @@
2323
"devDependencies": {
2424
"@types/lodash": "^4.14.149",
2525
"@types/mustache": "^4.0.0",
26+
"@types/prettier": "^1.19.0",
2627
"husky": "^4.2.3",
2728
"npm-run-all": "^4.1.5",
28-
"prettier": "^1.19.1",
2929
"pretty-quick": "^2.0.1",
3030
"typescript": "^3.7.4"
3131
},
@@ -35,7 +35,8 @@
3535
"js-yaml": "^3.13.1",
3636
"lodash": "^4.17.15",
3737
"mustache": "^4.0.0",
38-
"swagger2openapi": "^5.3.3"
38+
"swagger2openapi": "^5.3.3",
39+
"prettier": "^1.19.1"
3940
},
4041
"bin": {
4142
"swagger-typescript-api": "index.js",

src/common.js

+10-9
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,25 @@ const _ = require("lodash");
22

33
module.exports = {
44
formatDescription: (description, inline) => {
5+
if (!description) return "";
6+
57
let prettified = description;
68

7-
prettified = _.replace(prettified, /\*\//g, "*\/");
9+
prettified = _.replace(prettified, /\*\//g, "*/");
810

9-
const hasMultipleLines = _.includes(prettified, '\n');
11+
const hasMultipleLines = _.includes(prettified, "\n");
1012

11-
if (!hasMultipleLines)
12-
return prettified;
13+
if (!hasMultipleLines) return prettified;
1314

1415
if (inline) {
1516
return _(prettified)
1617
.split(/\n/g)
1718
.map(part => _.trim(part))
1819
.compact()
19-
.join(' ')
20-
.valueOf()
20+
.join(" ")
21+
.valueOf();
2122
}
2223

23-
return _.replace(prettified, /\n$/g, '')
24-
}
25-
}
24+
return _.replace(prettified, /\n$/g, "");
25+
},
26+
};

src/index.js

+73-55
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,25 @@
77
// Repository https://github.com/acacode/swagger-typescript-api
88

99
const mustache = require("mustache");
10+
const prettier = require("prettier");
1011
const _ = require("lodash");
11-
const { parseSchemas } = require('./schema');
12-
const { parseRoutes, groupRoutes } = require('./routes');
13-
const { createApiConfig } = require('./apiConfig');
14-
const { getModelType } = require('./modelTypes');
15-
const { getSwaggerObject } = require('./swagger');
12+
const { parseSchemas } = require("./schema");
13+
const { parseRoutes, groupRoutes } = require("./routes");
14+
const { createApiConfig } = require("./apiConfig");
15+
const { getModelType } = require("./modelTypes");
16+
const { getSwaggerObject } = require("./swagger");
1617
const { createComponentsMap, filterComponentsMap } = require("./components");
17-
const { getTemplate, createFile, pathIsExist } = require('./files');
18+
const { getTemplate, createFile, pathIsExist } = require("./files");
1819
const { addToConfig, config: defaults } = require("./config");
1920

20-
mustache.escape = value => value
21+
mustache.escape = value => value;
22+
23+
const prettierConfig = {
24+
printWidth: 120,
25+
tabWidth: 2,
26+
trailingComma: "all",
27+
parser: "typescript",
28+
};
2129

2230
module.exports = {
2331
generateApi: ({
@@ -29,58 +37,68 @@ module.exports = {
2937
defaultResponseAsSuccess = defaults.defaultResponseAsSuccess,
3038
generateRouteTypes = defaults.generateRouteTypes,
3139
generateClient = defaults.generateClient,
32-
}) => new Promise((resolve, reject) => {
33-
addToConfig({
34-
defaultResponseAsSuccess,
35-
generateRouteTypes,
36-
generateClient,
37-
generateResponses,
38-
})
39-
getSwaggerObject(input, url).then(swaggerSchema => {
40-
console.log('☄️ start generating your typescript api')
41-
42-
addToConfig({ swaggerSchema });
40+
}) =>
41+
new Promise((resolve, reject) => {
42+
addToConfig({
43+
defaultResponseAsSuccess,
44+
generateRouteTypes,
45+
generateClient,
46+
generateResponses,
47+
});
48+
getSwaggerObject(input, url)
49+
.then(swaggerSchema => {
50+
console.log("☄️ start generating your typescript api");
4351

44-
const { info, paths, servers, components } = swaggerSchema;
52+
addToConfig({ swaggerSchema });
4553

46-
const apiTemplate = getTemplate('api');
47-
const clientTemplate = getTemplate('client');
48-
const routeTypesTemplate = getTemplate('route-types');
54+
const { info, paths, servers, components } = swaggerSchema;
4955

50-
const componentsMap = createComponentsMap(components);
51-
const schemasMap = filterComponentsMap(componentsMap, "schemas")
56+
const apiTemplate = getTemplate("api");
57+
const clientTemplate = getTemplate("client");
58+
const routeTypesTemplate = getTemplate("route-types");
5259

53-
const parsedSchemas = parseSchemas(components);
54-
const routes = parseRoutes(swaggerSchema, parsedSchemas, componentsMap, components);
55-
const hasSecurityRoutes = routes.some(route => route.security);
56-
const hasQueryRoutes = routes.some(route => route.hasQuery);
57-
const apiConfig = createApiConfig({ info, servers }, hasSecurityRoutes);
58-
59-
const configuration = {
60-
apiConfig,
61-
modelTypes: _.map(schemasMap, getModelType),
62-
hasSecurityRoutes,
63-
hasQueryRoutes,
64-
generateResponses,
65-
routes: groupRoutes(routes),
66-
};
67-
68-
const sourceFile = [
69-
mustache.render(apiTemplate, configuration),
70-
generateRouteTypes ? mustache.render(routeTypesTemplate, configuration) : '',
71-
generateClient ? mustache.render(clientTemplate, configuration) : '',
72-
].join('');
60+
const componentsMap = createComponentsMap(components);
61+
const schemasMap = filterComponentsMap(componentsMap, "schemas");
62+
63+
const parsedSchemas = parseSchemas(components);
64+
const routes = parseRoutes(swaggerSchema, parsedSchemas, componentsMap, components);
65+
const hasSecurityRoutes = routes.some(route => route.security);
66+
const hasQueryRoutes = routes.some(route => route.hasQuery);
67+
const apiConfig = createApiConfig({ info, servers }, hasSecurityRoutes);
68+
69+
const configuration = {
70+
apiConfig,
71+
modelTypes: _.map(schemasMap, getModelType),
72+
hasSecurityRoutes,
73+
hasQueryRoutes,
74+
generateResponses,
75+
routes: groupRoutes(routes),
76+
};
7377

74-
if (pathIsExist(output)) {
75-
createFile(output, name, sourceFile);
76-
console.log(`✔️ your typescript api file created in "${output}"`)
77-
}
78+
const sourceFile = prettier.format(
79+
[
80+
mustache.render(apiTemplate, configuration),
81+
generateRouteTypes ? mustache.render(routeTypesTemplate, configuration) : "",
82+
generateClient ? mustache.render(clientTemplate, configuration) : "",
83+
].join(""),
84+
{
85+
printWidth: 120,
86+
tabWidth: 2,
87+
trailingComma: "all",
88+
parser: "typescript",
89+
},
90+
);
7891

79-
resolve(sourceFile);
80-
}).catch(e =>{
81-
reject(e);
82-
throw new Error('Swagger schema parse error!\r\n ' + e)
83-
})
84-
})
85-
}
92+
if (pathIsExist(output)) {
93+
createFile(output, name, sourceFile);
94+
console.log(`✔️ your typescript api file created in "${output}"`);
95+
}
8696

97+
resolve(sourceFile);
98+
})
99+
.catch(e => {
100+
reject(e);
101+
throw new Error("Swagger schema parse error!\r\n " + e);
102+
});
103+
}),
104+
};

0 commit comments

Comments
 (0)