45 lines
882 B
JavaScript
45 lines
882 B
JavaScript
import { createSelector } from "reselect"
|
|
import { Map } from "immutable"
|
|
|
|
// Helpers
|
|
|
|
function onlyOAS3(selector) {
|
|
return (ori, system) => (...args) => {
|
|
const spec = system.getSystem().specSelectors.specJson()
|
|
const version = spec.get("openapi")
|
|
if(typeof version === "string" && version.startsWith("3.0.0")) {
|
|
return selector(...args)
|
|
} else {
|
|
return ori(...args)
|
|
}
|
|
}
|
|
}
|
|
|
|
const state = state => {
|
|
return state || Map()
|
|
}
|
|
|
|
const specJson = createSelector(
|
|
state,
|
|
spec => spec.get("json", Map())
|
|
)
|
|
|
|
const specResolved = createSelector(
|
|
state,
|
|
spec => spec.get("resolved", Map())
|
|
)
|
|
|
|
const spec = state => {
|
|
let res = specResolved(state)
|
|
if(res.count() < 1)
|
|
res = specJson(state)
|
|
return res
|
|
}
|
|
|
|
// Wrappers
|
|
|
|
export const definitions = onlyOAS3(createSelector(
|
|
spec,
|
|
spec => spec.getIn(["components", "schemas"]) || Map()
|
|
))
|