forked from acacode/swagger-typescript-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomponents.js
60 lines (49 loc) · 1.3 KB
/
components.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const _ = require("lodash");
const { parseSchema } = require("./schema");
const { addToConfig } = require("./config");
/**
*
* @typedef TypeInfo
* {
* typeName: "Foo",
* componentName: "schemas",
* rawTypeData: {...},
* typeData: {...} (result parseSchema())
* }
*/
/**
* @returns {{ "#/components/schemas/Foo": TypeInfo, ... }}
*/
const createComponentsMap = components => {
const componentsMap = _.reduce(components, (map, component, componentName) => {
_.each(component, (rawTypeData, typeName) => {
// only map data for now
map[`#/components/${componentName}/${typeName}`] = {
typeName,
rawTypeData,
componentName,
typeData: null,
}
})
return map;
}, {})
addToConfig({ componentsMap })
return componentsMap;
}
/**
* @returns {TypeInfo[]}
*/
const filterComponentsMap = (componentsMap, componentName) =>
_.filter(componentsMap, (v, ref) => _.startsWith(ref, `#/components/${componentName}`))
/** @returns {{ type, typeIdentifier, name, description, content }} */
const getTypeData = typeInfo => {
if (!typeInfo.typeData) {
typeInfo.typeData = parseSchema(typeInfo.rawTypeData, typeInfo.typeName)
}
return typeInfo.typeData;
}
module.exports = {
getTypeData,
createComponentsMap,
filterComponentsMap,
}