@redocly/reference-docs 2.45.9 → 2.45.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli/commands/redocly-docs-cli.min.js +48 -48
- package/bin/cli/commands/redocly-docs-cli.min.js.LICENSE.txt +2 -2
- package/dist/console.redocly-reference-docs.min.js +78 -78
- package/dist/oauth2-redirect.js +1 -1
- package/dist/redocly-reference-docs.min.js +663 -664
- package/lib/components/OperationParameters/OperationParameters.js +1 -1
- package/lib/components/OperationParameters/utils.js +1 -1
- package/lib/components/Overlay/Overlay.js +1 -1
- package/lib/components/RedoclyReferenceDocs.js +1 -1
- package/lib/components/StoreProvider.js +1 -1
- package/lib/components/Tabs/CollapsingTabs/CollapsingTabsBase.js +1 -1
- package/lib/components/VersionSwitcher.js +1 -1
- package/lib/components/common/form.js +1 -1
- package/lib/components/console/ActionPanel.js +1 -1
- package/lib/components/console/AuthPanel.js +1 -1
- package/lib/components/console/Console.js +1 -1
- package/lib/components/console/ConsoleBadges.js +1 -1
- package/lib/components/console/OAuth2Flow.js +1 -1
- package/lib/components/console/OAuth2TokenInput.js +1 -1
- package/lib/components/console/ParameterArray.js +1 -1
- package/lib/components/console/RequestBody/RequestBody.js +1 -1
- package/lib/components/console/RequestBodyForm.js +1 -1
- package/lib/components/console/Scope.js +1 -1
- package/lib/components/console/ServersDropdown/ServersDropdown.js +1 -1
- package/lib/components/console/utils.js +1 -1
- package/lib/components/pluggable/PullRight.js +1 -1
- package/lib/components/shared/Button.js +1 -1
- package/lib/components/styled.elements.js +1 -1
- package/lib/redoc-lib/src/common-elements/Tooltip.js +1 -1
- package/lib/redoc-lib/src/common-elements/fields-layout.js +1 -1
- package/lib/redoc-lib/src/common-elements/fields.js +1 -1
- package/lib/redoc-lib/src/common-elements/icons.js +1 -1
- package/lib/redoc-lib/src/common-elements/panels.js +1 -1
- package/lib/redoc-lib/src/common-elements/perfect-scrollbar.js +1 -1
- package/lib/redoc-lib/src/components/CallbackSamples/CallbackSamples.js +1 -1
- package/lib/redoc-lib/src/components/DiscriminatorDropdown/DiscriminatorDropdown.js +1 -1
- package/lib/redoc-lib/src/components/Fields/EnumValues.js +1 -1
- package/lib/redoc-lib/src/components/Fields/FieldDetails.js +1 -1
- package/lib/redoc-lib/src/components/RequestSamples/useCodeSamples.js +1 -1
- package/lib/redoc-lib/src/components/Schema/ArraySchema.js +1 -1
- package/lib/redoc-lib/src/components/Schema/Schema.js +1 -1
- package/lib/redoc-lib/src/components/SecurityRequirement/SecurityRequirement.js +1 -1
- package/lib/redoc-lib/src/components/SecurityRequirement/SecurityRequirementElement.js +1 -1
- package/lib/redoc-lib/src/components/SecurityRequirement/SecurityRequirementPanelDescription.js +1 -1
- package/lib/redoc-lib/src/components/SideMenu/styled.elements.js +1 -1
- package/lib/redoc-lib/src/components/StickySidebar/ChevronSvg.js +1 -1
- package/lib/redoc-lib/src/components/StickySidebar/StickyResponsiveSidebar.js +1 -1
- package/lib/redoc-lib/src/services/MarkdownRenderer.js +1 -1
- package/lib/redoc-lib/src/services/MenuBuilder.js +1 -1
- package/lib/redoc-lib/src/services/OpenAPIParser.js +1 -1
- package/lib/redoc-lib/src/services/RedocNormalizedOptions.js +1 -1
- package/lib/redoc-lib/src/services/models/Example.js +1 -1
- package/lib/redoc-lib/src/services/models/Schema.js +1 -1
- package/lib/redoc-lib/src/services/models/SecurityRequirement.js +1 -1
- package/lib/redoc-lib/src/theme.js +1 -1
- package/lib/redoc-lib/src/utils/helpers.js +1 -1
- package/lib/redoc-lib/src/utils/index.d.ts +1 -0
- package/lib/redoc-lib/src/utils/index.js +1 -1
- package/lib/redoc-lib/src/utils/jsonToHtml.js +1 -1
- package/lib/redoc-lib/src/utils/media-css.js +1 -1
- package/lib/redoc-lib/src/utils/memoize.js +1 -1
- package/lib/redoc-lib/src/utils/openapi.js +1 -1
- package/lib/redoc-lib/src/utils/url.d.ts +1 -0
- package/lib/redoc-lib/src/utils/url.js +2 -0
- package/lib/services/OAuth2.js +1 -1
- package/lib/services/ProMenu.js +1 -1
- package/lib/services/ProStore.js +1 -1
- package/lib/services/SearchStore.js +1 -1
- package/lib/services/code-samples/generator.js +1 -1
- package/lib/services/code-samples/httpsnippet/helpers/code-builder.js +1 -1
- package/lib/services/code-samples/httpsnippet/helpers/code-helpers.js +1 -1
- package/lib/services/code-samples/httpsnippet/helpers/lodash-int.js +1 -1
- package/lib/services/code-samples/httpsnippet/index.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/csharp/httpclient.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/csharpNewtonsoft/httpclient.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/go/native.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/java/httpclient.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/java8/apachehttp.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/javascript/fetch.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/node/fetch.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/php/curl.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/php/utils.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/python/requests.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/r/httr.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/r/utils.js +1 -1
- package/lib/services/code-samples/httpsnippet/targets/ruby/native.js +1 -1
- package/lib/services/extendTheme.js +1 -1
- package/lib/services/utils.js +1 -1
- package/lib/utils.js +1 -1
- package/lib-browser/components/console/AuthPanel.js +1 -1
- package/lib-browser/redoc-lib/src/services/models/Example.js +1 -1
- package/lib-browser/redoc-lib/src/utils/helpers.js +1 -1
- package/lib-browser/redoc-lib/src/utils/index.d.ts +1 -0
- package/lib-browser/redoc-lib/src/utils/index.js +1 -1
- package/lib-browser/redoc-lib/src/utils/url.d.ts +1 -0
- package/lib-browser/redoc-lib/src/utils/url.js +2 -0
- package/lib-browser/services/code-samples/httpsnippet/index.js +1 -1
- package/lib-browser/services/utils.js +1 -1
- package/lib-esm/components/console/AuthPanel.js +1 -1
- package/lib-esm/redoc-lib/src/services/models/Example.js +1 -1
- package/lib-esm/redoc-lib/src/utils/helpers.js +1 -1
- package/lib-esm/redoc-lib/src/utils/index.d.ts +1 -0
- package/lib-esm/redoc-lib/src/utils/index.js +1 -1
- package/lib-esm/redoc-lib/src/utils/url.d.ts +1 -0
- package/lib-esm/redoc-lib/src/utils/url.js +2 -0
- package/lib-esm/services/code-samples/httpsnippet/index.js +1 -1
- package/lib-esm/services/utils.js +1 -1
- package/package.json +3 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import slugify from"slugify";import{
|
|
1
|
+
import slugify from"slugify";import{urlParse}from"./url";import{ZERO_BREAKPOINT}from"./media-css";import{isNamedDefinition}from"./openapi";import JsonPointer from"./JsonPointer";export function mapWithLast(e,t){const r=[];for(let n=0;n<e.length-1;n++)r.push(t(e[n],!1));return 0!==e.length&&r.push(t(e[e.length-1],!0)),r}export function mapValues(e,t){const r={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=t(e[n],n,e));return r}export function flattenByProp(e,t){const r=[],n=e=>{for(const o of e)r.push(o),o[t]&&n(o[t])};return n(e),r}export function stripTrailingSlash(e){return e.endsWith("/")?e.substring(0,e.length-1):e}export function isNumeric(e){return!isNaN(parseFloat(e))&&isFinite(e)}export function appendToMdHeading(e,t,r){const n=new RegExp(`(^|\\n)#\\s?${t}\\s*\\n`,"i"),o=new RegExp(`((\\n|^)#\\s*${t}\\s*(\\n|$)(?:.|\\n)*?)(\\n#|$)`,"i");if(n.test(e))return e.replace(o,`$1\n\n${r}\n$4`);{const n=""===e||e.endsWith("\n\n")?"":e.endsWith("\n")?"\n":"\n\n";return`${e}${n}# ${t}\n\n${r}`}}export const mergeObjects=(e,...t)=>{if(!t.length)return e;const r=t.shift();return void 0===r?e:(isMergeableObject(e)&&isMergeableObject(r)&&Object.keys(r).forEach((t=>{isMergeableObject(r[t])?(e[t]||(e[t]={}),["string","number"].includes(typeof e[t])&&(r[t][ZERO_BREAKPOINT]||0===r[t][ZERO_BREAKPOINT]||console.warn(`Theme resolver: using default value of "${e[t]}" for "${t}". This is not recommended. Prefer adding default value by providing "${ZERO_BREAKPOINT}" property to ${JSON.stringify(r[t])}.`),e[t]={[ZERO_BREAKPOINT]:e[t]}),mergeObjects(e[t],r[t])):e[t]=r[t]})),mergeObjects(e,...t))};export const isObject=e=>null!==e&&"object"==typeof e;export const isArrayOfObjects=e=>Array.isArray(e)&&e.some((e=>isObject(e)));export const deleteEmptyArrayItem=e=>e.filter((e=>!!e));export const isMergeableObject=e=>isObject(e)&&!Array.isArray(e);export function safeSlugify(e){return slugify(e)||e.toString().toLowerCase().replace(/\s+/g,"-").replace(/&/g,"-and-").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")}export function isAbsoluteUrl(e){return/(?:^[a-z][a-z0-9+.-]*:|\/\/)/i.test(e)}export function resolveUrl(e,t){var r;let n;if(t.startsWith("//"))n=`${(null===(r=urlParse(e,!0))||void 0===r?void 0:r.protocol)||"https:"}${t}`;else if(isAbsoluteUrl(t))n=t;else if(t.startsWith("/")){const r=urlParse(e);r?(r.pathname=t,n=r.toString()):n=t}else n=stripTrailingSlash(e)+"/"+t;return stripTrailingSlash(n)}export function getBasePath(e){try{return parseURL(e).pathname}catch(t){return e}}export function titleize(e){return e.charAt(0).toUpperCase()+e.slice(1)}export function removeQueryStringAndHash(e){try{const t=parseURL(e);return t.search="",t.hash="",t.toString()}catch(t){return e}}function parseURL(e){return"undefined"==typeof URL?new(require("url").URL)(e):new URL(e)}export function escapeHTMLAttrChars(e){return e.replace(/["\\]/g,"\\$&")}export function unescapeHTMLChars(e){return e.replace(/&#(\d+);/g,((e,t)=>String.fromCharCode(parseInt(t,10)))).replace(/&/g,"&").replace(/"/g,'"')}export function sanitizeItemId(e){return e&&e.replace(/#/g,"_")}export function getSchemaTitle(e,t){return t||isNamedDefinition(e)&&JsonPointer.baseName(e)||""}export function isLastInArray(e,t){return t===e.length-1}export function isLastProperty(e,t){const r=Object.keys(e);return r.indexOf(t)===r.length-1}
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export*from"./JsonPointer";export*from"./openapi";export*from"./helpers";export*from"./highlight";export*from"./loadAndBundleSpec";export*from"./dom";export*from"./decorators";export*from"./debug";export*from"./memoize";export*from"./sort";export*from"./argValuesHelpers";
|
|
1
|
+
export*from"./JsonPointer";export*from"./openapi";export*from"./helpers";export*from"./highlight";export*from"./loadAndBundleSpec";export*from"./dom";export*from"./decorators";export*from"./debug";export*from"./memoize";export*from"./sort";export*from"./argValuesHelpers";export*from"./url";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function urlParse(url: string, slashesDenoteHost?: boolean): URL | null;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as qs from"querystring";import
|
|
1
|
+
import*as qs from"querystring";import{normalizeMimeType,unescapeServerVariables}from"../../utils";import{MediaTypes}from"../../../types";import targets from"./targets";import reducer from"./helpers/reducer";import{paramsToObject}from"./helpers/code-helpers";export class HTTPSnippet{constructor(e){Object.defineProperty(this,"request",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const r=Object.assign({},e);this.request=this.prepare(Object.assign(Object.assign({},r),{httpVersion:r.httpVersion||"HTTP/1.1",queryString:r.queryString||[],headers:r.headers||[],cookies:r.cookies||[],postData:r.postData?Object.assign(Object.assign({},r.postData),{jsonObj:void 0,paramsObj:void 0}):void 0,bodySize:0,headersSize:0,queryObj:{},headersObj:{},cookiesObj:{},allHeaders:{},uriObj:{},fullUrl:"",pathParameters:r.pathParameters||{},serverVariables:r.serverVariables||{}}))}prepare(e){var r;if(e.queryString&&e.queryString.length&&(e.queryObj=e.queryString.reduce(reducer,{})),e.headers&&e.headers.length){const r=/^HTTP\/2/;e.headersObj=e.headers.reduce((function(t,a){let s=a.name;return e.httpVersion.match(r)&&(s=s.toLowerCase()),t[s]=a.value,t}),{})}e.cookies&&e.cookies.length&&(e.cookiesObj=e.cookies.reduceRight((function(e,r){return e[r.name]=r.value,e}),{}));const t=e.cookies.map((function(e){return encodeURIComponent(e.name)+"="+encodeURIComponent(e.value)}));if(t.length&&(e.allHeaders.cookie=t.join("; ")),e.postData)switch(normalizeMimeType(e.postData.mimeType)){case"multipart/mixed":case"multipart/related":case MediaTypes.MULTIPART:case"multipart/alternative":break;case MediaTypes.URL_ENCODED:(null===(r=e.postData)||void 0===r?void 0:r.params)?(e.postData.paramsObj=e.postData.params.reduce(reducer,{}),e.postData.text=qs.stringify(e.postData.paramsObj)):e.postData.text="";break;case"text/json":case"text/x-json":case MediaTypes.JSON:case"application/x-json":if(e.postData.text)try{e.postData.jsonObj=JSON.parse(e.postData.text)}catch(r){e.postData.mimeType="text/plain"}}e.allHeaders=Object.assign(e.allHeaders,e.headersObj),e.uriObj=new URL(e.url),e.queryObj=Object.assign(e.queryObj,paramsToObject(e.uriObj.searchParams)),e.uriObj.query="",e.uriObj.search="",e.uriObj.path=e.uriObj.pathname=unescapeServerVariables(e.uriObj.pathname);const a=new URL(e.uriObj.toString());return a.search="",e.url=unescapeServerVariables(a.toString()),e.uriObj.query=e.queryObj,e.uriObj.search=qs.stringify(e.queryObj),e.uriObj.search&&(e.uriObj.path=e.uriObj.pathname+"?"+e.uriObj.search),e.fullUrl=unescapeServerVariables(a.toString()),e}convert(e,r,t){!t&&r&&(t=r);const a=this._matchTarget(e,r);if(a){const s=a(this.request,t,{target:e,client:r});return 1===s.length?s[0]:s}throw new Error("Can not match target")}_matchTarget(e,r){return!!Object.prototype.hasOwnProperty.call(targets,e)&&("string"==typeof r&&"function"==typeof targets[e][r]?targets[e][r]:targets[e][targets[e].info.default])}}
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import merge from"deepmerge";import{isMergeableObject,isObject}from"../redoc-lib/src/utils/helpers";export function normalizePath(e){return e.startsWith("/")||(e="/"+e),e.endsWith("/")&&(e=e.slice(0,-1)),e}export function isSameMime(e,r){return!(!e||!r)&&normalizeMimeType(e)===normalizeMimeType(r)}export function normalizeMimeType(e){if(!e)return;const r=e.split(";")[0].toLowerCase(),[t,n]=r.split("/");if(void 0===n)return t;return`${t}/${n.split("+").pop()}`}export function unescapeServerVariables(e){const r=new RegExp("%7B","g"),t=new RegExp("%7D","g");return e.replace(r,"{").replace(t,"}").replace("///","//")}export function arrayMergeStrategy(e,r){if(!e.length||!hasObjectOrArray(e))return r;const t=e.filter((e=>Object.keys(e).length>0));return r.forEach((function(r,n){isMergeableObject(r)?t[n]=merge(e[n],r,{arrayMerge:arrayMergeStrategy}):Array.isArray(r)?t.push(r):t[n]=r})),t}const hasObjectOrArray=e=>e.some((e=>isObject(e)&&Object.keys(e).length>0));export function isEmptyObject(e){return!!e&&0===Object.keys(e).length}export const cryptoLib="undefined"!=typeof window&&(window.crypto||window.msCrypto)||void 0;export function randString(e=32){let r="";for(;r.length<e;)r+=Math.random().toString(32).substring(2);return r.substring(0,e)}export function encodeState(e){const r=Object.assign({randomStr:randString()},e);return btoa(JSON.stringify(r))}export async function sha256(e){const r=(new TextEncoder).encode(e);return null==cryptoLib?void 0:cryptoLib.subtle.digest("SHA-256",r)}export function base64UrlEncode(e){if(e)return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}
|
|
1
|
+
import merge from"deepmerge";import{isMergeableObject,isObject}from"../redoc-lib/src/utils/helpers";export function normalizePath(e){return e.startsWith("/")||(e="/"+e),e.endsWith("/")&&(e=e.slice(0,-1)),e}export function isSameMime(e,r){return!(!e||!r)&&normalizeMimeType(e)===normalizeMimeType(r)}export function normalizeMimeType(e){if(!e)return;const r=e.split(";")[0].toLowerCase(),[t,n]=r.split("/");if(void 0===n)return t;return`${t}/${n.split("+").pop()}`}export function unescapeServerVariables(e){const r=new RegExp("%7B","g"),t=new RegExp("%7D","g");return e.replace(r,"{").replace(t,"}").replace("///","//").replace("./",".")}export function arrayMergeStrategy(e,r){if(!e.length||!hasObjectOrArray(e))return r;const t=e.filter((e=>Object.keys(e).length>0));return r.forEach((function(r,n){isMergeableObject(r)?t[n]=merge(e[n],r,{arrayMerge:arrayMergeStrategy}):Array.isArray(r)?t.push(r):t[n]=r})),t}const hasObjectOrArray=e=>e.some((e=>isObject(e)&&Object.keys(e).length>0));export function isEmptyObject(e){return!!e&&0===Object.keys(e).length}export const cryptoLib="undefined"!=typeof window&&(window.crypto||window.msCrypto)||void 0;export function randString(e=32){let r="";for(;r.length<e;)r+=Math.random().toString(32).substring(2);return r.substring(0,e)}export function encodeState(e){const r=Object.assign({randomStr:randString()},e);return btoa(JSON.stringify(r))}export async function sha256(e){const r=(new TextEncoder).encode(e);return null==cryptoLib?void 0:cryptoLib.subtle.digest("SHA-256",r)}export function base64UrlEncode(e){if(e)return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{Component,Fragment}from"react";import{fromSessionStorage,getSecurityDetailsOptions,toSessionStorage,escapeFormId}from"../../utils";import{FormDropdown,FormTextField}from"../common/TextField";import{FormControl,FormLabel,FormWrapper}from"../common/form";import{l}from"../../redoc-lib/src/services/Labels";import{Dropdown}from"../common/Dropdown";import{OpenIDConnect,Error}from"./OpenIDConnect";import{OAuth2Flow}from"./OAuth2Flow";import OAuth2TokenInput from"./OAuth2TokenInput";export function requiredValidator(e){if(!e)return"Field is required"}const getCookie=function(e){const o=document.cookie.match("\\b"+e+"=([^;]*)\\b");return o?o[1]:void 0};function fromCookie(e){if("cookie"===e.in)return getCookie(e.name)}export class AuthPanel extends Component{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:{activeScheme:0}}),Object.defineProperty(this,"handleSchemeChange",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.setState({activeScheme:e.idx}),toSessionStorage("securityRequirementName",e.value)}})}static getDerivedStateFromProps(e){const o=e.operation.security.map((e=>e.schemes.map((e=>e.id)).join(" and "))),t=fromSessionStorage("securityRequirementName"),i=o.findIndex((e=>e===t));return{activeScheme:i<0?0:i}}render(){const{securityDefaults:e}=this.props,{activeScheme:o}=this.state,t=this.props.operation.security,i=t.map((e=>e.schemes.map((e=>e.id)).join(" and "))).filter(Boolean).map(((e,o)=>({value:e,idx:o})));return 0===i.length?_jsx(Error,{message:"Cannot find security schema in the definition"},void 0):_jsxs(_Fragment,{children:[_jsxs(FormWrapper,{children:[i.length>1&&_jsxs(FormControl,{children:[_jsx(FormLabel,{children:" Security scheme: "},void 0),_jsx(Dropdown,{variant:"dark",fullWidth:!0,options:i,value:i[o].value,onChange:this.handleSchemeChange},void 0)]},void 0)||null,t[o].schemes.map((o=>{var t,i,r,s,n,a,d;const
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{Component,Fragment}from"react";import{fromSessionStorage,getSecurityDetailsOptions,toSessionStorage,escapeFormId}from"../../utils";import{FormDropdown,FormTextField}from"../common/TextField";import{FormControl,FormLabel,FormWrapper}from"../common/form";import{l}from"../../redoc-lib/src/services/Labels";import{Dropdown}from"../common/Dropdown";import{OpenIDConnect,Error}from"./OpenIDConnect";import{OAuth2Flow}from"./OAuth2Flow";import OAuth2TokenInput from"./OAuth2TokenInput";export function requiredValidator(e){if(!e)return"Field is required"}const getCookie=function(e){const o=document.cookie.match("\\b"+e+"=([^;]*)\\b");return o?o[1]:void 0};function fromCookie(e){if("cookie"===e.in)return getCookie(e.name)}export class AuthPanel extends Component{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:{activeScheme:0}}),Object.defineProperty(this,"handleSchemeChange",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.setState({activeScheme:e.idx}),toSessionStorage("securityRequirementName",e.value)}})}static getDerivedStateFromProps(e){const o=e.operation.security.map((e=>e.schemes.map((e=>e.id)).join(" and "))),t=fromSessionStorage("securityRequirementName"),i=o.findIndex((e=>e===t));return{activeScheme:i<0?0:i}}render(){const{securityDefaults:e}=this.props,{activeScheme:o}=this.state,t=this.props.operation.security,i=t.map((e=>e.schemes.map((e=>e.id)).join(" and "))).filter(Boolean).map(((e,o)=>({value:e,idx:o})));return 0===i.length?_jsx(Error,{message:"Cannot find security schema in the definition"},void 0):_jsxs(_Fragment,{children:[_jsxs(FormWrapper,{children:[i.length>1&&_jsxs(FormControl,{children:[_jsx(FormLabel,{children:" Security scheme: "},void 0),_jsx(Dropdown,{variant:"dark",fullWidth:!0,options:i,value:i[o].value,onChange:this.handleSchemeChange},void 0)]},void 0)||null,t[o].schemes.map((o=>{var t,i,r,s,n,a,d,u;const h=escapeFormId(o.id);if("apiKey"===o.type){const t=getSecurityDetailsOptions(h,""),i={field:`auth.${h}`,fullWidth:!0,initialValue:fromCookie(o)||fromSessionStorage(`auth.${h}`)||(null==e?void 0:e[h]),initValue:fromCookie(o)||fromSessionStorage(`auth.${h}`)||(null==e?void 0:e[h]),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return _jsxs(FormControl,{children:[_jsxs(FormLabel,{children:[" ",o.name,": "]},void 0),t?_jsx(FormDropdown,Object.assign({},i,{options:t}),void 0):_jsx(FormTextField,Object.assign({},i,{type:"password","data-cy":"apiKey-auth-password"}),void 0)]},h)}if("http"===o.type){if("basic"===o.scheme){const o=getSecurityDetailsOptions(h,"username"),s={field:`auth.${h}.username`,fullWidth:!0,initialValue:fromSessionStorage(`auth.${h}.username`)||(null===(t=null==e?void 0:e[h])||void 0===t?void 0:t.username),initValue:fromSessionStorage(`auth.${h}.username`)||(null===(i=null==e?void 0:e[h])||void 0===i?void 0:i.username),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return _jsxs(Fragment,{children:[_jsxs(FormControl,{children:[_jsxs(FormLabel,{children:[" ",l("tryItAuthBasicUsername"),": "]},void 0),o?_jsx(FormDropdown,Object.assign({},s,{options:o}),void 0):_jsx(FormTextField,Object.assign({},s),void 0)]},void 0),_jsxs(FormControl,{children:[_jsxs(FormLabel,{children:[" ",l("tryItAuthBasicPassword"),": "]},void 0),_jsx(FormTextField,{type:"password","data-cy":"http-auth-password",fullWidth:!0,field:`auth.${h}.password`,initialValue:fromSessionStorage(`auth.${h}.password`)||(null===(r=null==e?void 0:e[h])||void 0===r?void 0:r.password)||"",validateOnBlur:!0,validateOnChange:!0},void 0)]},void 0)]},h)}if("bearer"===o.scheme){const o=getSecurityDetailsOptions(h,""),t={field:`auth.${h}`,fullWidth:!0,initialValue:fromSessionStorage(`auth.${h}`)||(null==e?void 0:e[h]),initValue:fromSessionStorage(`auth.${h}`)||(null==e?void 0:e[h]),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return _jsx(Fragment,{children:_jsxs(FormControl,{children:[_jsx(FormLabel,{children:" Bearer Token: "},void 0),o?_jsx(FormDropdown,Object.assign({},t,{options:o}),void 0):_jsx(FormTextField,Object.assign({},t,{type:"password",placeholder:"(without 'Bearer')"}),void 0)]},void 0)},h)}}else{if("oauth2"===o.type&&o.flows&&o.flows.clientCredentials)return _jsx(OAuth2TokenInput,{flow:Object.assign(Object.assign({},o.flows.clientCredentials),{"x-tokenEndpointAuthMethod":null!==(s=o.flows.clientCredentials["x-tokenEndpointAuthMethod"])&&void 0!==s?s:o["x-tokenEndpointAuthMethod"]}),server:this.props.activeServer,authCorsProxyUrl:this.props.authCorsProxyUrl,id:h,form:this.props.form,formApi:this.props.formApi,clientId:o.flows.clientCredentials["x-defaultClientId"]||o["x-defaultClientId"],defaultValues:null==e?void 0:e[h]},h);if("oauth2"===o.type&&o.flows&&o.flows.implicit)return _jsx(OAuth2Flow,{authorizationUrl:o.flows.implicit.authorizationUrl,authCorsProxyUrl:this.props.authCorsProxyUrl,scopes:Object.keys((null===(a=null===(n=null==o?void 0:o.flows)||void 0===n?void 0:n.implicit)||void 0===a?void 0:a.scopes)||{}),server:this.props.activeServer,id:h,form:this.props.form,formApi:this.props.formApi,clientId:o.flows.implicit["x-defaultClientId"]||o["x-defaultClientId"],flow:"implicit",defaultValues:null==e?void 0:e[h]},h);if("oauth2"===o.type&&o.flows&&o.flows.authorizationCode)return _jsx(OAuth2Flow,{authorizationUrl:o.flows.authorizationCode.authorizationUrl,tokenUrl:o.flows.authorizationCode.tokenUrl,authCorsProxyUrl:this.props.authCorsProxyUrl,scopes:Object.keys((null===(d=o.flows.authorizationCode)||void 0===d?void 0:d.scopes)||{}),server:this.props.activeServer,id:h,form:this.props.form,formApi:this.props.formApi,clientId:o.flows.authorizationCode["x-defaultClientId"]||o["x-defaultClientId"],flow:"authorizationCode",tokenEndpointAuthMethod:o.flows.authorizationCode["x-tokenEndpointAuthMethod"]||o["x-tokenEndpointAuthMethod"],usePkce:o.flows.authorizationCode["x-usePkce"],defaultValues:null==e?void 0:e[h]},h);if("oauth2"===o.type){let o=fromSessionStorage(`auth.${h}.token`)||JSON.stringify(null===(u=null==e?void 0:e[h])||void 0===u?void 0:u.token);return o=o?JSON.parse(o):{},_jsxs(Fragment,{children:[_jsxs(FormControl,{children:[_jsx(FormLabel,{children:" Access Token Type: "},void 0),_jsx(FormTextField,{fullWidth:!0,field:`auth.${h}.token.token_type`,initialValue:o.token_type||"Bearer"},void 0)]},void 0),_jsxs(FormControl,{children:[_jsx(FormLabel,{children:" Access Token: "},void 0),_jsx(FormTextField,{type:"password",fullWidth:!0,field:`auth.${h}.token.access_token`,validate:requiredValidator,initialValue:o.access_token,validateOnBlur:!0,validateOnChange:!0},void 0)]},void 0)]},h)}if("openIdConnect"===o.type)return _jsx(OpenIDConnect,{server:this.props.activeServer,authCorsProxyUrl:this.props.authCorsProxyUrl,id:h,form:this.props.form,formApi:this.props.formApi,scheme:o,clientId:o["x-defaultClientId"],defaultValues:null==e?void 0:e[h]},h);if("none"===o.type)return _jsx("span",{children:"None"},h)}}))]},void 0),_jsxs("small",{children:[_jsx("strong",{children:"Note"},void 0),": Your credentials will be saved until the end of the browser session"]},void 0)]},void 0)}}
|
|
2
2
|
//# sourceMappingURL=AuthPanel.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{isJsonLike,resolveUrl}from"../../utils";const externalExamplesCache={};export class ExampleModel{constructor(e,r,l,t){Object.defineProperty(this,"mime",{enumerable:!0,configurable:!0,writable:!0,value:l}),Object.defineProperty(this,"encoding",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"value",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"rawValue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"summary",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"description",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"externalValueUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const{resolved:a}=e.deref(r);this.rawValue=a.value,this.value=a.value,this.summary=a.summary,this.description=a.description,a.externalValue&&(this.externalValueUrl=resolveUrl(e.definitionUrl||"",a.externalValue))}getExternalValue(e){return this.externalValueUrl?(this.externalValueUrl in externalExamplesCache||(externalExamplesCache[this.externalValueUrl]=fetch(this.externalValueUrl).then((r=>r.text().then((l=>{if(!r.ok)return Promise.reject(new Error(l));if(!isJsonLike(e))return l;try{return JSON.parse(l)}catch(e){return l}}))))),externalExamplesCache[this.externalValueUrl]):Promise.resolve(void 0)}}
|
|
2
2
|
//# sourceMappingURL=Example.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import slugify from"slugify";import{
|
|
1
|
+
import slugify from"slugify";import{urlParse}from"./url";import{ZERO_BREAKPOINT}from"./media-css";import{isNamedDefinition}from"./openapi";import JsonPointer from"./JsonPointer";export function mapWithLast(e,t){const r=[];for(let n=0;n<e.length-1;n++)r.push(t(e[n],!1));return 0!==e.length&&r.push(t(e[e.length-1],!0)),r}export function mapValues(e,t){const r={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=t(e[n],n,e));return r}export function flattenByProp(e,t){const r=[],n=e=>{for(const o of e)r.push(o),o[t]&&n(o[t])};return n(e),r}export function stripTrailingSlash(e){return e.endsWith("/")?e.substring(0,e.length-1):e}export function isNumeric(e){return!isNaN(parseFloat(e))&&isFinite(e)}export function appendToMdHeading(e,t,r){const n=new RegExp(`(^|\\n)#\\s?${t}\\s*\\n`,"i"),o=new RegExp(`((\\n|^)#\\s*${t}\\s*(\\n|$)(?:.|\\n)*?)(\\n#|$)`,"i");if(n.test(e))return e.replace(o,`$1\n\n${r}\n$4`);{const n=""===e||e.endsWith("\n\n")?"":e.endsWith("\n")?"\n":"\n\n";return`${e}${n}# ${t}\n\n${r}`}}export const mergeObjects=(e,...t)=>{if(!t.length)return e;const r=t.shift();return void 0===r?e:(isMergeableObject(e)&&isMergeableObject(r)&&Object.keys(r).forEach((t=>{isMergeableObject(r[t])?(e[t]||(e[t]={}),["string","number"].includes(typeof e[t])&&(r[t][ZERO_BREAKPOINT]||0===r[t][ZERO_BREAKPOINT]||console.warn(`Theme resolver: using default value of "${e[t]}" for "${t}". This is not recommended. Prefer adding default value by providing "${ZERO_BREAKPOINT}" property to ${JSON.stringify(r[t])}.`),e[t]={[ZERO_BREAKPOINT]:e[t]}),mergeObjects(e[t],r[t])):e[t]=r[t]})),mergeObjects(e,...t))};export const isObject=e=>null!==e&&"object"==typeof e;export const isArrayOfObjects=e=>Array.isArray(e)&&e.some((e=>isObject(e)));export const deleteEmptyArrayItem=e=>e.filter((e=>!!e));export const isMergeableObject=e=>isObject(e)&&!Array.isArray(e);export function safeSlugify(e){return slugify(e)||e.toString().toLowerCase().replace(/\s+/g,"-").replace(/&/g,"-and-").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")}export function isAbsoluteUrl(e){return/(?:^[a-z][a-z0-9+.-]*:|\/\/)/i.test(e)}export function resolveUrl(e,t){var r;let n;if(t.startsWith("//"))n=`${(null===(r=urlParse(e,!0))||void 0===r?void 0:r.protocol)||"https:"}${t}`;else if(isAbsoluteUrl(t))n=t;else if(t.startsWith("/")){const r=urlParse(e);r?(r.pathname=t,n=r.toString()):n=t}else n=stripTrailingSlash(e)+"/"+t;return stripTrailingSlash(n)}export function getBasePath(e){try{return parseURL(e).pathname}catch(t){return e}}export function titleize(e){return e.charAt(0).toUpperCase()+e.slice(1)}export function removeQueryStringAndHash(e){try{const t=parseURL(e);return t.search="",t.hash="",t.toString()}catch(t){return e}}function parseURL(e){return"undefined"==typeof URL?new(require("url").URL)(e):new URL(e)}export function escapeHTMLAttrChars(e){return e.replace(/["\\]/g,"\\$&")}export function unescapeHTMLChars(e){return e.replace(/&#(\d+);/g,((e,t)=>String.fromCharCode(parseInt(t,10)))).replace(/&/g,"&").replace(/"/g,'"')}export function sanitizeItemId(e){return e&&e.replace(/#/g,"_")}export function getSchemaTitle(e,t){return t||isNamedDefinition(e)&&JsonPointer.baseName(e)||""}export function isLastInArray(e,t){return t===e.length-1}export function isLastProperty(e,t){const r=Object.keys(e);return r.indexOf(t)===r.length-1}
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export*from"./JsonPointer";export*from"./openapi";export*from"./helpers";export*from"./highlight";export*from"./loadAndBundleSpec";export*from"./dom";export*from"./decorators";export*from"./debug";export*from"./memoize";export*from"./sort";export*from"./argValuesHelpers";
|
|
1
|
+
export*from"./JsonPointer";export*from"./openapi";export*from"./helpers";export*from"./highlight";export*from"./loadAndBundleSpec";export*from"./dom";export*from"./decorators";export*from"./debug";export*from"./memoize";export*from"./sort";export*from"./argValuesHelpers";export*from"./url";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function urlParse(url: string, slashesDenoteHost?: boolean): URL | null;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as qs from"querystring";import
|
|
1
|
+
import*as qs from"querystring";import{normalizeMimeType,unescapeServerVariables}from"../../utils";import{MediaTypes}from"../../../types";import targets from"./targets";import reducer from"./helpers/reducer";import{paramsToObject}from"./helpers/code-helpers";export class HTTPSnippet{constructor(e){Object.defineProperty(this,"request",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const r=Object.assign({},e);this.request=this.prepare(Object.assign(Object.assign({},r),{httpVersion:r.httpVersion||"HTTP/1.1",queryString:r.queryString||[],headers:r.headers||[],cookies:r.cookies||[],postData:r.postData?Object.assign(Object.assign({},r.postData),{jsonObj:void 0,paramsObj:void 0}):void 0,bodySize:0,headersSize:0,queryObj:{},headersObj:{},cookiesObj:{},allHeaders:{},uriObj:{},fullUrl:"",pathParameters:r.pathParameters||{},serverVariables:r.serverVariables||{}}))}prepare(e){var r;if(e.queryString&&e.queryString.length&&(e.queryObj=e.queryString.reduce(reducer,{})),e.headers&&e.headers.length){const r=/^HTTP\/2/;e.headersObj=e.headers.reduce((function(t,a){let s=a.name;return e.httpVersion.match(r)&&(s=s.toLowerCase()),t[s]=a.value,t}),{})}e.cookies&&e.cookies.length&&(e.cookiesObj=e.cookies.reduceRight((function(e,r){return e[r.name]=r.value,e}),{}));const t=e.cookies.map((function(e){return encodeURIComponent(e.name)+"="+encodeURIComponent(e.value)}));if(t.length&&(e.allHeaders.cookie=t.join("; ")),e.postData)switch(normalizeMimeType(e.postData.mimeType)){case"multipart/mixed":case"multipart/related":case MediaTypes.MULTIPART:case"multipart/alternative":break;case MediaTypes.URL_ENCODED:(null===(r=e.postData)||void 0===r?void 0:r.params)?(e.postData.paramsObj=e.postData.params.reduce(reducer,{}),e.postData.text=qs.stringify(e.postData.paramsObj)):e.postData.text="";break;case"text/json":case"text/x-json":case MediaTypes.JSON:case"application/x-json":if(e.postData.text)try{e.postData.jsonObj=JSON.parse(e.postData.text)}catch(r){e.postData.mimeType="text/plain"}}e.allHeaders=Object.assign(e.allHeaders,e.headersObj),e.uriObj=new URL(e.url),e.queryObj=Object.assign(e.queryObj,paramsToObject(e.uriObj.searchParams)),e.uriObj.query="",e.uriObj.search="",e.uriObj.path=e.uriObj.pathname=unescapeServerVariables(e.uriObj.pathname);const a=new URL(e.uriObj.toString());return a.search="",e.url=unescapeServerVariables(a.toString()),e.uriObj.query=e.queryObj,e.uriObj.search=qs.stringify(e.queryObj),e.uriObj.search&&(e.uriObj.path=e.uriObj.pathname+"?"+e.uriObj.search),e.fullUrl=unescapeServerVariables(a.toString()),e}convert(e,r,t){!t&&r&&(t=r);const a=this._matchTarget(e,r);if(a){const s=a(this.request,t,{target:e,client:r});return 1===s.length?s[0]:s}throw new Error("Can not match target")}_matchTarget(e,r){return!!Object.prototype.hasOwnProperty.call(targets,e)&&("string"==typeof r&&"function"==typeof targets[e][r]?targets[e][r]:targets[e][targets[e].info.default])}}
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import merge from"deepmerge";import{isMergeableObject,isObject}from"../redoc-lib/src/utils/helpers";export function normalizePath(e){return e.startsWith("/")||(e="/"+e),e.endsWith("/")&&(e=e.slice(0,-1)),e}export function isSameMime(e,r){return!(!e||!r)&&normalizeMimeType(e)===normalizeMimeType(r)}export function normalizeMimeType(e){if(!e)return;const r=e.split(";")[0].toLowerCase(),[t,n]=r.split("/");if(void 0===n)return t;return`${t}/${n.split("+").pop()}`}export function unescapeServerVariables(e){const r=new RegExp("%7B","g"),t=new RegExp("%7D","g");return e.replace(r,"{").replace(t,"}").replace("///","//")}export function arrayMergeStrategy(e,r){if(!e.length||!hasObjectOrArray(e))return r;const t=e.filter((e=>Object.keys(e).length>0));return r.forEach((function(r,n){isMergeableObject(r)?t[n]=merge(e[n],r,{arrayMerge:arrayMergeStrategy}):Array.isArray(r)?t.push(r):t[n]=r})),t}const hasObjectOrArray=e=>e.some((e=>isObject(e)&&Object.keys(e).length>0));export function isEmptyObject(e){return!!e&&0===Object.keys(e).length}export const cryptoLib="undefined"!=typeof window&&(window.crypto||window.msCrypto)||void 0;export function randString(e=32){let r="";for(;r.length<e;)r+=Math.random().toString(32).substring(2);return r.substring(0,e)}export function encodeState(e){const r=Object.assign({randomStr:randString()},e);return btoa(JSON.stringify(r))}export async function sha256(e){const r=(new TextEncoder).encode(e);return null==cryptoLib?void 0:cryptoLib.subtle.digest("SHA-256",r)}export function base64UrlEncode(e){if(e)return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}
|
|
1
|
+
import merge from"deepmerge";import{isMergeableObject,isObject}from"../redoc-lib/src/utils/helpers";export function normalizePath(e){return e.startsWith("/")||(e="/"+e),e.endsWith("/")&&(e=e.slice(0,-1)),e}export function isSameMime(e,r){return!(!e||!r)&&normalizeMimeType(e)===normalizeMimeType(r)}export function normalizeMimeType(e){if(!e)return;const r=e.split(";")[0].toLowerCase(),[t,n]=r.split("/");if(void 0===n)return t;return`${t}/${n.split("+").pop()}`}export function unescapeServerVariables(e){const r=new RegExp("%7B","g"),t=new RegExp("%7D","g");return e.replace(r,"{").replace(t,"}").replace("///","//").replace("./",".")}export function arrayMergeStrategy(e,r){if(!e.length||!hasObjectOrArray(e))return r;const t=e.filter((e=>Object.keys(e).length>0));return r.forEach((function(r,n){isMergeableObject(r)?t[n]=merge(e[n],r,{arrayMerge:arrayMergeStrategy}):Array.isArray(r)?t.push(r):t[n]=r})),t}const hasObjectOrArray=e=>e.some((e=>isObject(e)&&Object.keys(e).length>0));export function isEmptyObject(e){return!!e&&0===Object.keys(e).length}export const cryptoLib="undefined"!=typeof window&&(window.crypto||window.msCrypto)||void 0;export function randString(e=32){let r="";for(;r.length<e;)r+=Math.random().toString(32).substring(2);return r.substring(0,e)}export function encodeState(e){const r=Object.assign({randomStr:randString()},e);return btoa(JSON.stringify(r))}export async function sha256(e){const r=(new TextEncoder).encode(e);return null==cryptoLib?void 0:cryptoLib.subtle.digest("SHA-256",r)}export function base64UrlEncode(e){if(e)return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redocly/reference-docs",
|
|
3
|
-
"version": "2.45.
|
|
3
|
+
"version": "2.45.12",
|
|
4
4
|
"description": "Redocly Reference Docs",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-esm/index.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"codemirror": "^5.65.0",
|
|
22
22
|
"decko": "^1.2.0",
|
|
23
23
|
"deepmerge": "^4.2.2",
|
|
24
|
-
"dompurify": "
|
|
24
|
+
"dompurify": "3.2.6",
|
|
25
25
|
"eventemitter3": "^4.0.4",
|
|
26
26
|
"fast-deep-equal": "^3.1.3",
|
|
27
27
|
"handlebars": "^4.7.6",
|
|
@@ -104,7 +104,6 @@
|
|
|
104
104
|
"@testing-library/react-hooks": "^8.0.1",
|
|
105
105
|
"@testing-library/user-event": "^12.1.10",
|
|
106
106
|
"@types/codemirror": "0.0.88",
|
|
107
|
-
"@types/dompurify": "^2.0.2",
|
|
108
107
|
"@types/enzyme-to-json": "^1.5.3",
|
|
109
108
|
"@types/jest": "^25.1.4",
|
|
110
109
|
"@types/jest-when": "^3.5.2",
|
|
@@ -155,7 +154,7 @@
|
|
|
155
154
|
"terser": "^5.6.1",
|
|
156
155
|
"ts-jest": "^28.0.7",
|
|
157
156
|
"ts-node": "^8.8.1",
|
|
158
|
-
"typescript": "4.
|
|
157
|
+
"typescript": "^4.5.5",
|
|
159
158
|
"url-polyfill": "^1.1.7",
|
|
160
159
|
"webpack": "^5.64.4",
|
|
161
160
|
"webpack-cli": "^4.9.1",
|