diff --git a/src/core/config/defaults.js b/src/core/config/defaults.js index bee47f04cdd..8fe7a53a629 100644 --- a/src/core/config/defaults.js +++ b/src/core/config/defaults.js @@ -23,7 +23,10 @@ const defaultOptions = Object.freeze({ displayRequestDuration: false, deepLinking: false, tryItOutEnabled: false, - requestInterceptor: (a) => a, + requestInterceptor: (request) => { + request.curlOptions = [] + return request + }, responseInterceptor: (a) => a, showMutatedRequest: true, defaultModelRendering: "example", @@ -80,6 +83,11 @@ const defaultOptions = Object.freeze({ activated: true, theme: "agate", }, + operationsSorter: null, + tagsSorter: null, + onComplete: null, + modelPropertyMacro: null, + parameterMacro: null, }) export default defaultOptions diff --git a/src/core/config/type-cast/mappings.js b/src/core/config/type-cast/mappings.js index b085f5ec8ce..b025fb1295e 100644 --- a/src/core/config/type-cast/mappings.js +++ b/src/core/config/type-cast/mappings.js @@ -5,16 +5,21 @@ import arrayTypeCaster from "./type-casters/array" import booleanTypeCaster from "./type-casters/boolean" import domNodeTypeCaster from "./type-casters/dom-node" import filterTypeCaster from "./type-casters/filter" +import functionTypeCaster from "./type-casters/function" import nullableArrayTypeCaster from "./type-casters/nullable-array" +import nullableFunctionTypeCaster from "./type-casters/nullable-function" import nullableStringTypeCaster from "./type-casters/nullable-string" import numberTypeCaster from "./type-casters/number" import objectTypeCaster from "./type-casters/object" +import sorterTypeCaster from "./type-casters/sorter" import stringTypeCaster from "./type-casters/string" import syntaxHighlightTypeCaster from "./type-casters/syntax-highlight" import undefinedStringTypeCaster from "./type-casters/undefined-string" import defaultOptions from "../defaults" const mappings = { + components: { typeCaster: objectTypeCaster }, + configs: { typeCaster: objectTypeCaster }, configUrl: { typeCaster: nullableStringTypeCaster }, deepLinking: { typeCaster: booleanTypeCaster, @@ -41,12 +46,20 @@ const mappings = { dom_id: { typeCaster: nullableStringTypeCaster }, domNode: { typeCaster: domNodeTypeCaster }, filter: { typeCaster: filterTypeCaster }, + fn: { typeCaster: objectTypeCaster }, + initialState: { typeCaster: objectTypeCaster }, layout: { typeCaster: stringTypeCaster }, maxDisplayedTags: { typeCaster: numberTypeCaster, defaultValue: defaultOptions.maxDisplayedTags, }, + modelPropertyMacro: { typeCaster: nullableFunctionTypeCaster }, oauth2RedirectUrl: { typeCaster: undefinedStringTypeCaster }, + onComplete: { typeCaster: nullableFunctionTypeCaster }, + operationsSorter: { + typeCaster: sorterTypeCaster, + }, + paramaterMacro: { typeCaster: nullableFunctionTypeCaster }, persistAuthorization: { typeCaster: booleanTypeCaster, defaultValue: defaultOptions.persistAuthorization, @@ -59,6 +72,10 @@ const mappings = { typeCaster: arrayTypeCaster, defaultValue: defaultOptions.presets, }, + requestInterceptor: { + typeCaster: functionTypeCaster, + defaultValue: defaultOptions.requestInterceptor, + }, requestSnippets: { typeCaster: objectTypeCaster, defaultValue: defaultOptions.requestSnippets, @@ -67,6 +84,10 @@ const mappings = { typeCaster: booleanTypeCaster, defaultValue: defaultOptions.requestSnippetsEnabled, }, + responseInterceptor: { + typeCaster: functionTypeCaster, + defaultValue: defaultOptions.responseInterceptor, + }, showCommonExtensions: { typeCaster: booleanTypeCaster, defaultValue: defaultOptions.showCommonExtensions, @@ -93,6 +114,9 @@ const mappings = { defaultValue: defaultOptions.syntaxHighlight.activated, }, "syntaxHighlight.theme": { typeCaster: stringTypeCaster }, + tagsSorter: { + typeCaster: sorterTypeCaster, + }, tryItOutEnabled: { typeCaster: booleanTypeCaster, defaultValue: defaultOptions.tryItOutEnabled, diff --git a/src/core/config/type-cast/type-casters/function.js b/src/core/config/type-cast/type-casters/function.js new file mode 100644 index 00000000000..35ace3cfaa5 --- /dev/null +++ b/src/core/config/type-cast/type-casters/function.js @@ -0,0 +1,7 @@ +/** + * @prettier + */ +const functionTypeCaster = (value, defaultValue) => + typeof value === "function" ? value : defaultValue + +export default functionTypeCaster diff --git a/src/core/config/type-cast/type-casters/nullable-function.js b/src/core/config/type-cast/type-casters/nullable-function.js new file mode 100644 index 00000000000..23832ae1204 --- /dev/null +++ b/src/core/config/type-cast/type-casters/nullable-function.js @@ -0,0 +1,7 @@ +/** + * @prettier + */ +const nullableFunctionTypeCaster = (value) => + typeof value === "function" ? value : null + +export default nullableFunctionTypeCaster diff --git a/src/core/config/type-cast/type-casters/sorter.js b/src/core/config/type-cast/type-casters/sorter.js new file mode 100644 index 00000000000..5773a7172ef --- /dev/null +++ b/src/core/config/type-cast/type-casters/sorter.js @@ -0,0 +1,7 @@ +/** + * @prettier + */ +const sorterTypeCaster = (value) => + typeof value === "function" || typeof value === "string" ? value : null + +export default sorterTypeCaster diff --git a/src/core/plugins/request-snippets/fn.js b/src/core/plugins/request-snippets/fn.js index 8fe7f539ccd..4e71454cc6c 100644 --- a/src/core/plugins/request-snippets/fn.js +++ b/src/core/plugins/request-snippets/fn.js @@ -1,4 +1,4 @@ -import { Map } from "immutable" +import { List, Map } from "immutable" import win from "../../window" @@ -83,7 +83,8 @@ const curlify = (request, escape, newLine, ext = "") => { let headers = request.get("headers") curlified += "curl" + ext - if (request.has("curlOptions")) { + const curlOptions = request.get("curlOptions") + if (List.isList(curlOptions) && !curlOptions.isEmpty()) { addWords(...request.get("curlOptions")) }