Merge branch 'master' into next
This commit is contained in:
14
package-lock.json
generated
14
package-lock.json
generated
@@ -127,7 +127,7 @@
|
||||
"stream-browserify": "^3.0.0",
|
||||
"tachyons-sass": "^4.9.5",
|
||||
"terser-webpack-plugin": "^5.3.6",
|
||||
"webpack": "^5.65.0",
|
||||
"webpack": "^5.76.0",
|
||||
"webpack-bundle-size-analyzer": "^3.1.0",
|
||||
"webpack-cli": "^4.10.0",
|
||||
"webpack-dev-server": "^4.7.4",
|
||||
@@ -28687,9 +28687,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/webpack": {
|
||||
"version": "5.75.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
|
||||
"integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
|
||||
"version": "5.76.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz",
|
||||
"integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/eslint-scope": "^3.7.3",
|
||||
@@ -50811,9 +50811,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"webpack": {
|
||||
"version": "5.75.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
|
||||
"integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
|
||||
"version": "5.76.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz",
|
||||
"integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/eslint-scope": "^3.7.3",
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
"stream-browserify": "^3.0.0",
|
||||
"tachyons-sass": "^4.9.5",
|
||||
"terser-webpack-plugin": "^5.3.6",
|
||||
"webpack": "^5.65.0",
|
||||
"webpack": "^5.76.0",
|
||||
"webpack-bundle-size-analyzer": "^3.1.0",
|
||||
"webpack-cli": "^4.10.0",
|
||||
"webpack-dev-server": "^4.7.4",
|
||||
|
||||
@@ -3,6 +3,16 @@ import ImmutablePureComponent from "react-immutable-pure-component"
|
||||
import ImPropTypes from "react-immutable-proptypes"
|
||||
import PropTypes from "prop-types"
|
||||
|
||||
const decodeRefName = uri => {
|
||||
const unescaped = uri.replace(/~1/g, "/").replace(/~0/g, "~")
|
||||
|
||||
try {
|
||||
return decodeURIComponent(unescaped)
|
||||
} catch {
|
||||
return unescaped
|
||||
}
|
||||
}
|
||||
|
||||
export default class Model extends ImmutablePureComponent {
|
||||
static propTypes = {
|
||||
schema: ImPropTypes.map.isRequired,
|
||||
@@ -22,10 +32,10 @@ export default class Model extends ImmutablePureComponent {
|
||||
|
||||
getModelName =( ref )=> {
|
||||
if ( ref.indexOf("#/definitions/") !== -1 ) {
|
||||
return ref.replace(/^.*#\/definitions\//, "")
|
||||
return decodeRefName(ref.replace(/^.*#\/definitions\//, ""))
|
||||
}
|
||||
if ( ref.indexOf("#/components/schemas/") !== -1 ) {
|
||||
return ref.replace(/^.*#\/components\/schemas\//, "")
|
||||
return decodeRefName(ref.replace(/^.*#\/components\/schemas\//, ""))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
39
test/unit/core/helpers/get-model-name.js
Normal file
39
test/unit/core/helpers/get-model-name.js
Normal file
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* @prettier
|
||||
*/
|
||||
|
||||
import Model from "../../../../src/core/components/model"
|
||||
|
||||
describe("getModelName", () => {
|
||||
const model = new Model()
|
||||
|
||||
it("should decode JSON Pointer and URI encoding for OpenAPI v3 refs", () => {
|
||||
const actual = model.getModelName("#/components/schemas/a~1b%2Bc")
|
||||
const expected = "a/b+c"
|
||||
|
||||
expect(actual).toStrictEqual(expected)
|
||||
})
|
||||
|
||||
it("should decode JSON Pointer and URI encoding for Swagger v2 refs", () => {
|
||||
const actual = model.getModelName(
|
||||
"#/definitions/custom%3A%3Anamespace%3A%3APerson"
|
||||
)
|
||||
const expected = "custom::namespace::Person"
|
||||
|
||||
expect(actual).toStrictEqual(expected)
|
||||
})
|
||||
|
||||
it("should decode multiple json-pointer values", () => {
|
||||
const actual = model.getModelName("#/components/schemas/~1~1~0~0")
|
||||
const expected = "//~~"
|
||||
|
||||
expect(actual).toStrictEqual(expected)
|
||||
})
|
||||
|
||||
it("should support invalid URI encoding", () => {
|
||||
const actual = model.getModelName("#/components/schemas/%25%d")
|
||||
const expected = "%25%d"
|
||||
|
||||
expect(actual).toStrictEqual(expected)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user