mirror of
https://github.com/Redocly/redoc.git
synced 2025-08-06 05:10:20 +03:00
Revert "feat: Webhooks option to reverse readOnly/writeOnly properties #1720"
This reverts commit 7486e70039
.
This commit is contained in:
parent
c04e4035d5
commit
1487b24776
|
@ -11,11 +11,6 @@ const userUrl = window.location.search.match(/url=(.*)$/);
|
|||
const specUrl =
|
||||
(userUrl && userUrl[1]) || (swagger ? 'swagger.yaml' : big ? 'big-openapi.json' : 'openapi.yaml');
|
||||
|
||||
const options: RedocRawOptions = {
|
||||
nativeScrollbars: false,
|
||||
maxDisplayedEnumValues: 3,
|
||||
reverseEventsReadOnlyProps: true,
|
||||
reverseEventsWriteOnlyProps: true,
|
||||
};
|
||||
const options: RedocRawOptions = { nativeScrollbars: false, maxDisplayedEnumValues: 3 };
|
||||
|
||||
render(<RedocStandalone specUrl={specUrl} options={options} />, document.getElementById('example'));
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { observer } from 'mobx-react';
|
||||
import * as React from 'react';
|
||||
|
||||
import { OperationModel, ReverseEventsRWOProps } from '../../services/models';
|
||||
import { OperationModel } from '../../services/models';
|
||||
import styled from '../../styled-components';
|
||||
import { Endpoint } from '../Endpoint/Endpoint';
|
||||
import { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocumentation';
|
||||
|
@ -14,13 +14,12 @@ import { CallbackDetailsWrap } from './styled.elements';
|
|||
|
||||
export interface CallbackDetailsProps {
|
||||
operation: OperationModel;
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
}
|
||||
|
||||
@observer
|
||||
export class CallbackDetails extends React.Component<CallbackDetailsProps> {
|
||||
render() {
|
||||
const { operation, reverseEventsReadWriteOnly } = this.props;
|
||||
const { operation } = this.props;
|
||||
const { description, externalDocs } = operation;
|
||||
const hasDescription = !!(description || externalDocs);
|
||||
|
||||
|
@ -35,16 +34,8 @@ export class CallbackDetails extends React.Component<CallbackDetailsProps> {
|
|||
<Endpoint operation={this.props.operation} inverted={true} compact={true} />
|
||||
<Extensions extensions={operation.extensions} />
|
||||
<SecurityRequirements securities={operation.security} />
|
||||
<Parameters
|
||||
parameters={operation.parameters}
|
||||
body={operation.requestBody}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
<ResponsesList
|
||||
responses={operation.responses}
|
||||
isCallback={operation.isCallback}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
<Parameters parameters={operation.parameters} body={operation.requestBody} />
|
||||
<ResponsesList responses={operation.responses} isCallback={operation.isCallback} />
|
||||
</CallbackDetailsWrap>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,24 +1,18 @@
|
|||
import { observer } from 'mobx-react';
|
||||
import * as React from 'react';
|
||||
|
||||
import { OperationModel, ReverseEventsRWOProps } from '../../services/models';
|
||||
import { OperationModel } from '../../services/models';
|
||||
import { StyledCallbackTitle } from './styled.elements';
|
||||
import { CallbackDetails } from './CallbackDetails';
|
||||
|
||||
export interface CallbackOperationProps {
|
||||
callbackOperation: OperationModel;
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
}
|
||||
|
||||
@observer
|
||||
export class CallbackOperation extends React.Component<CallbackOperationProps> {
|
||||
export class CallbackOperation extends React.Component<{ callbackOperation: OperationModel }> {
|
||||
toggle = () => {
|
||||
this.props.callbackOperation.toggle();
|
||||
};
|
||||
|
||||
render() {
|
||||
const { name, expanded, httpVerb, deprecated } = this.props.callbackOperation;
|
||||
const { reverseEventsReadWriteOnly } = this.props;
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -29,12 +23,7 @@ export class CallbackOperation extends React.Component<CallbackOperationProps> {
|
|||
httpVerb={httpVerb}
|
||||
deprecated={deprecated}
|
||||
/>
|
||||
{expanded &&
|
||||
<CallbackDetails
|
||||
operation={this.props.callbackOperation}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
}
|
||||
{expanded && <CallbackDetails operation={this.props.callbackOperation} />}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
import * as React from 'react';
|
||||
|
||||
import { CallbackModel, ReverseEventsRWOProps } from '../../services/models';
|
||||
import { CallbackModel } from '../../services/models';
|
||||
import styled from '../../styled-components';
|
||||
import { CallbackOperation } from './CallbackOperation';
|
||||
|
||||
export interface CallbacksListProps {
|
||||
callbacks: CallbackModel[];
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
}
|
||||
|
||||
export class CallbacksList extends React.PureComponent<CallbacksListProps> {
|
||||
render() {
|
||||
const { callbacks, reverseEventsReadWriteOnly } = this.props;
|
||||
const { callbacks } = this.props;
|
||||
|
||||
if (!callbacks || callbacks.length === 0) {
|
||||
return null;
|
||||
|
@ -23,11 +22,7 @@ export class CallbacksList extends React.PureComponent<CallbacksListProps> {
|
|||
{callbacks.map(callback => {
|
||||
return callback.operations.map((operation, index) => {
|
||||
return (
|
||||
<CallbackOperation
|
||||
key={`${callback.name}_${index}`}
|
||||
callbackOperation={operation}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
<CallbackOperation key={`${callback.name}_${index}`} callbackOperation={operation} />
|
||||
);
|
||||
});
|
||||
})}
|
||||
|
|
|
@ -3,7 +3,7 @@ import * as React from 'react';
|
|||
|
||||
import { Badge, DarkRightPanel, H2, MiddlePanel, Row } from '../../common-elements';
|
||||
import { ShareLink } from '../../common-elements/linkify';
|
||||
import { OperationModel, ReverseEventsRWOProps } from '../../services/models';
|
||||
import { OperationModel } from '../../services/models';
|
||||
import styled from '../../styled-components';
|
||||
import { CallbacksList } from '../Callbacks';
|
||||
import { CallbackSamples } from '../CallbackSamples/CallbackSamples';
|
||||
|
@ -30,14 +30,14 @@ const Description = styled.div`
|
|||
|
||||
export interface OperationProps {
|
||||
operation: OperationModel;
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
}
|
||||
|
||||
@observer
|
||||
export class Operation extends React.Component<OperationProps> {
|
||||
render() {
|
||||
const { operation } = this.props;
|
||||
const { name: summary, description, deprecated, externalDocs, isWebhook, reverseEventsReadWriteOnly = {} } = operation;
|
||||
|
||||
const { name: summary, description, deprecated, externalDocs, isWebhook } = operation;
|
||||
const hasDescription = !!(description || externalDocs);
|
||||
|
||||
return (
|
||||
|
@ -61,19 +61,9 @@ export class Operation extends React.Component<OperationProps> {
|
|||
)}
|
||||
<Extensions extensions={operation.extensions} />
|
||||
<SecurityRequirements securities={operation.security} />
|
||||
<Parameters
|
||||
parameters={operation.parameters}
|
||||
body={operation.requestBody}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
<ResponsesList
|
||||
responses={operation.responses}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
<CallbacksList
|
||||
callbacks={operation.callbacks}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
<Parameters parameters={operation.parameters} body={operation.requestBody} />
|
||||
<ResponsesList responses={operation.responses} />
|
||||
<CallbacksList callbacks={operation.callbacks} />
|
||||
</MiddlePanel>
|
||||
<DarkRightPanel>
|
||||
{!options.pathInMiddlePanel && !isWebhook && <Endpoint operation={operation} />}
|
||||
|
|
|
@ -4,7 +4,7 @@ import { ParametersGroup } from './ParametersGroup';
|
|||
|
||||
import { UnderlinedHeader } from '../../common-elements';
|
||||
|
||||
import { MediaContentModel, ReverseEventsRWOProps } from '../../services';
|
||||
import { MediaContentModel } from '../../services';
|
||||
import { FieldModel, RequestBodyModel } from '../../services/models';
|
||||
import { MediaTypesSwitch } from '../MediaTypeSwitch/MediaTypesSwitch';
|
||||
import { Schema } from '../Schema';
|
||||
|
@ -21,7 +21,6 @@ function safePush(obj, prop, item) {
|
|||
export interface ParametersProps {
|
||||
parameters?: FieldModel[];
|
||||
body?: RequestBodyModel;
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
}
|
||||
|
||||
const PARAM_PLACES = ['path', 'query', 'cookie', 'header'];
|
||||
|
@ -36,7 +35,7 @@ export class Parameters extends React.PureComponent<ParametersProps> {
|
|||
}
|
||||
|
||||
render() {
|
||||
const { body, parameters = [], reverseEventsReadWriteOnly } = this.props;
|
||||
const { body, parameters = [] } = this.props;
|
||||
if (body === undefined && parameters === undefined) {
|
||||
return null;
|
||||
}
|
||||
|
@ -54,13 +53,7 @@ export class Parameters extends React.PureComponent<ParametersProps> {
|
|||
{paramsPlaces.map(place => (
|
||||
<ParametersGroup key={place} place={place} parameters={paramsMap[place]} />
|
||||
))}
|
||||
{bodyContent &&
|
||||
<BodyContent
|
||||
content={bodyContent}
|
||||
description={bodyDescription}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
}
|
||||
{bodyContent && <BodyContent content={bodyContent} description={bodyDescription} />}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -74,17 +67,15 @@ function DropdownWithinHeader(props) {
|
|||
);
|
||||
}
|
||||
|
||||
export function BodyContent(props: { content: MediaContentModel; description?: string, reverseEventsReadWriteOnly?: ReverseEventsRWOProps }): JSX.Element {
|
||||
export function BodyContent(props: { content: MediaContentModel; description?: string }): JSX.Element {
|
||||
const { content, description } = props;
|
||||
const { reverseEventsReadOnlyProps, reverseEventsWriteOnlyProps } = props.reverseEventsReadWriteOnly || {};
|
||||
const skipReadOnly = !reverseEventsReadOnlyProps;
|
||||
return (
|
||||
<MediaTypesSwitch content={content} renderDropdown={DropdownWithinHeader}>
|
||||
{({ schema }) => {
|
||||
return (
|
||||
<>
|
||||
{description !== undefined && <Markdown source={description} />}
|
||||
<Schema skipReadOnly={skipReadOnly} skipWriteOnly={reverseEventsWriteOnlyProps} key="schema" schema={schema} />
|
||||
<Schema skipReadOnly={true} key="schema" schema={schema} />
|
||||
</>
|
||||
);
|
||||
}}
|
||||
|
|
|
@ -1,25 +1,18 @@
|
|||
import { observer } from 'mobx-react';
|
||||
import * as React from 'react';
|
||||
|
||||
import { ResponseModel, ReverseEventsRWOProps } from '../../services/models';
|
||||
import { ResponseModel } from '../../services/models';
|
||||
import { ResponseDetails } from './ResponseDetails';
|
||||
import { ResponseDetailsWrap, StyledResponseTitle } from './styled.elements';
|
||||
|
||||
export interface ResponseViewProps {
|
||||
response: ResponseModel;
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
}
|
||||
|
||||
@observer
|
||||
export class ResponseView extends React.Component<ResponseViewProps> {
|
||||
export class ResponseView extends React.Component<{ response: ResponseModel }> {
|
||||
toggle = () => {
|
||||
this.props.response.toggle();
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
reverseEventsReadWriteOnly, response: { headers, type, summary, description, code, expanded, content }
|
||||
} = this.props;
|
||||
const { headers, type, summary, description, code, expanded, content } = this.props.response;
|
||||
const mimes =
|
||||
content === undefined ? [] : content.mediaTypes.filter(mime => mime.schema !== undefined);
|
||||
|
||||
|
@ -37,10 +30,7 @@ export class ResponseView extends React.Component<ResponseViewProps> {
|
|||
/>
|
||||
{expanded && !empty && (
|
||||
<ResponseDetailsWrap>
|
||||
<ResponseDetails
|
||||
response={this.props.response}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>
|
||||
<ResponseDetails response={this.props.response} />
|
||||
</ResponseDetailsWrap>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import * as React from 'react';
|
||||
|
||||
import { ResponseModel, ReverseEventsRWOProps } from '../../services/models';
|
||||
import { ResponseModel } from '../../services/models';
|
||||
|
||||
import { UnderlinedHeader } from '../../common-elements';
|
||||
import { DropdownOrLabel } from '../DropdownOrLabel/DropdownOrLabel';
|
||||
|
@ -10,22 +10,16 @@ import { Schema } from '../Schema';
|
|||
import { Markdown } from '../Markdown/Markdown';
|
||||
import { ResponseHeaders } from './ResponseHeaders';
|
||||
|
||||
export interface ResponseDetailsProps {
|
||||
response: ResponseModel;
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
}
|
||||
|
||||
export class ResponseDetails extends React.PureComponent<ResponseDetailsProps> {
|
||||
export class ResponseDetails extends React.PureComponent<{ response: ResponseModel }> {
|
||||
render() {
|
||||
const { reverseEventsReadWriteOnly = {}, response: { description, headers, content } } = this.props;
|
||||
const skipWriteOnly = !reverseEventsReadWriteOnly.reverseEventsWriteOnlyProps;
|
||||
const { description, headers, content } = this.props.response;
|
||||
return (
|
||||
<>
|
||||
{description && <Markdown source={description} />}
|
||||
<ResponseHeaders headers={headers} />
|
||||
<MediaTypesSwitch content={content} renderDropdown={this.renderDropdown}>
|
||||
{({ schema }) => {
|
||||
return <Schema skipWriteOnly={skipWriteOnly} key="schema" schema={schema} />;
|
||||
return <Schema skipWriteOnly={true} key="schema" schema={schema} />;
|
||||
}}
|
||||
</MediaTypesSwitch>
|
||||
</>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import * as React from 'react';
|
||||
import { l } from '../../services/Labels';
|
||||
import { ResponseModel, ReverseEventsRWOProps } from '../../services/models';
|
||||
import { ResponseModel } from '../../services/models';
|
||||
import styled from '../../styled-components';
|
||||
import { ResponseView } from './Response';
|
||||
|
||||
|
@ -15,12 +15,11 @@ const ResponsesHeader = styled.h3`
|
|||
export interface ResponseListProps {
|
||||
responses: ResponseModel[];
|
||||
isCallback?: boolean;
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
}
|
||||
|
||||
export class ResponsesList extends React.PureComponent<ResponseListProps> {
|
||||
render() {
|
||||
const { responses, isCallback, reverseEventsReadWriteOnly } = this.props;
|
||||
const { responses, isCallback } = this.props;
|
||||
|
||||
if (!responses || responses.length === 0) {
|
||||
return null;
|
||||
|
@ -29,11 +28,9 @@ export class ResponsesList extends React.PureComponent<ResponseListProps> {
|
|||
return (
|
||||
<div>
|
||||
<ResponsesHeader>{isCallback ? l('callbackResponses') : l('responses')}</ResponsesHeader>
|
||||
{responses.map(response => <ResponseView
|
||||
key={response.code}
|
||||
response={response}
|
||||
reverseEventsReadWriteOnly={reverseEventsReadWriteOnly}
|
||||
/>)}
|
||||
{responses.map(response => {
|
||||
return <ResponseView key={response.code} response={response} />;
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -42,8 +42,6 @@ export interface RedocRawOptions {
|
|||
maxDisplayedEnumValues?: number;
|
||||
ignoreNamedSchemas?: string[] | string;
|
||||
hideSchemaPattern?: boolean;
|
||||
reverseEventsReadOnlyProps?: boolean;
|
||||
reverseEventsWriteOnlyProps?: boolean;
|
||||
}
|
||||
|
||||
export function argValueToBoolean(val?: string | boolean, defaultValue?: boolean): boolean {
|
||||
|
@ -51,7 +49,7 @@ export function argValueToBoolean(val?: string | boolean, defaultValue?: boolean
|
|||
return defaultValue || false;
|
||||
}
|
||||
if (typeof val === 'string') {
|
||||
return val !== 'false';
|
||||
return val === 'false' ? false : true;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
@ -199,9 +197,6 @@ export class RedocNormalizedOptions {
|
|||
ignoreNamedSchemas: Set<string>;
|
||||
hideSchemaPattern: boolean;
|
||||
|
||||
reverseEventsReadOnlyProps: boolean;
|
||||
reverseEventsWriteOnlyProps: boolean;
|
||||
|
||||
constructor(raw: RedocRawOptions, defaults: RedocRawOptions = {}) {
|
||||
raw = { ...defaults, ...raw };
|
||||
const hook = raw.theme && raw.theme.extensionsHook;
|
||||
|
@ -262,7 +257,5 @@ export class RedocNormalizedOptions {
|
|||
: raw.ignoreNamedSchemas?.split(',').map((s) => s.trim());
|
||||
this.ignoreNamedSchemas = new Set(ignoreNamedSchemas);
|
||||
this.hideSchemaPattern = argValueToBoolean(raw.hideSchemaPattern);
|
||||
this.reverseEventsReadOnlyProps = argValueToBoolean(raw.reverseEventsReadOnlyProps);
|
||||
this.reverseEventsWriteOnlyProps = argValueToBoolean(raw.reverseEventsWriteOnlyProps);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import { OpenAPIParser } from '../OpenAPIParser';
|
|||
import { SchemaModel } from './Schema';
|
||||
import { ExampleModel } from './Example';
|
||||
import { mapValues } from '../../utils/helpers';
|
||||
import { ReverseEventsRWOProps } from './Operation';
|
||||
|
||||
const DEFAULT_SERIALIZATION: Record<
|
||||
OpenAPIParameterLocation,
|
||||
|
@ -65,7 +64,6 @@ export class FieldModel {
|
|||
infoOrRef: Referenced<OpenAPIParameter> & { name?: string; kind?: string },
|
||||
pointer: string,
|
||||
options: RedocNormalizedOptions,
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps,
|
||||
) {
|
||||
makeObservable(this);
|
||||
|
||||
|
@ -82,7 +80,7 @@ export class FieldModel {
|
|||
fieldSchema = info.content[serializationMime] && info.content[serializationMime].schema;
|
||||
}
|
||||
|
||||
this.schema = new SchemaModel(parser, fieldSchema || {}, pointer, options, false, reverseEventsReadWriteOnly);
|
||||
this.schema = new SchemaModel(parser, fieldSchema || {}, pointer, options);
|
||||
this.description =
|
||||
info.description === undefined ? this.schema.description || '' : info.description;
|
||||
this.example = info.example || this.schema.example;
|
||||
|
|
|
@ -6,7 +6,6 @@ import { MediaTypeModel } from './MediaType';
|
|||
import { mergeSimilarMediaTypes } from '../../utils';
|
||||
import { OpenAPIParser } from '../OpenAPIParser';
|
||||
import { RedocNormalizedOptions } from '../RedocNormalizedOptions';
|
||||
import { ReverseEventsRWOProps } from './Operation';
|
||||
|
||||
/**
|
||||
* MediaContent model ready to be sued by React components
|
||||
|
@ -26,7 +25,6 @@ export class MediaContentModel {
|
|||
info: Record<string, OpenAPIMediaType>,
|
||||
public isRequestType: boolean,
|
||||
options: RedocNormalizedOptions,
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps,
|
||||
) {
|
||||
makeObservable(this);
|
||||
|
||||
|
@ -37,7 +35,7 @@ export class MediaContentModel {
|
|||
const mime = info[name];
|
||||
// reset deref cache just in case something is left there
|
||||
parser.resetVisited();
|
||||
return new MediaTypeModel(parser, name, isRequestType, mime, options, reverseEventsReadWriteOnly);
|
||||
return new MediaTypeModel(parser, name, isRequestType, mime, options);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ import { SchemaModel } from './Schema';
|
|||
import { isJsonLike, mapValues } from '../../utils';
|
||||
import { OpenAPIParser } from '../OpenAPIParser';
|
||||
import { ExampleModel } from './Example';
|
||||
import { ReverseEventsRWOProps } from './Operation';
|
||||
|
||||
export class MediaTypeModel {
|
||||
examples?: { [name: string]: ExampleModel };
|
||||
|
@ -25,11 +24,10 @@ export class MediaTypeModel {
|
|||
isRequestType: boolean,
|
||||
info: OpenAPIMediaType,
|
||||
options: RedocNormalizedOptions,
|
||||
reverseEventsReadWriteOnly: ReverseEventsRWOProps = {},
|
||||
) {
|
||||
this.name = name;
|
||||
this.isRequestType = isRequestType;
|
||||
this.schema = info.schema && new SchemaModel(parser, info.schema, '', options, false, reverseEventsReadWriteOnly);
|
||||
this.schema = info.schema && new SchemaModel(parser, info.schema, '', options);
|
||||
this.onlyRequiredInSamples = options.onlyRequiredInSamples;
|
||||
if (info.examples !== undefined) {
|
||||
this.examples = mapValues(
|
||||
|
@ -46,16 +44,15 @@ export class MediaTypeModel {
|
|||
),
|
||||
};
|
||||
} else if (isJsonLike(name)) {
|
||||
this.generateExample(parser, info, reverseEventsReadWriteOnly);
|
||||
this.generateExample(parser, info);
|
||||
}
|
||||
}
|
||||
|
||||
generateExample(parser: OpenAPIParser, info: OpenAPIMediaType, reverseEventsReadWriteOnly: ReverseEventsRWOProps) {
|
||||
const { reverseEventsReadOnlyProps, reverseEventsWriteOnlyProps } = reverseEventsReadWriteOnly;
|
||||
generateExample(parser: OpenAPIParser, info: OpenAPIMediaType) {
|
||||
const samplerOptions = {
|
||||
skipReadOnly: reverseEventsReadOnlyProps ? !this.isRequestType : this.isRequestType,
|
||||
skipWriteOnly: reverseEventsWriteOnlyProps ? this.isRequestType : !this.isRequestType,
|
||||
skipReadOnly: this.isRequestType,
|
||||
skipNonRequired: this.isRequestType && this.onlyRequiredInSamples,
|
||||
skipWriteOnly: !this.isRequestType,
|
||||
maxSampleDepth: 10,
|
||||
};
|
||||
if (this.schema && this.schema.oneOf) {
|
||||
|
|
|
@ -33,11 +33,6 @@ export interface XPayloadSample {
|
|||
source: string;
|
||||
}
|
||||
|
||||
export interface ReverseEventsRWOProps {
|
||||
reverseEventsReadOnlyProps?: boolean;
|
||||
reverseEventsWriteOnlyProps?: boolean;
|
||||
}
|
||||
|
||||
export function isPayloadSample(
|
||||
sample: XPayloadSample | OpenAPIXCodeSample,
|
||||
): sample is XPayloadSample {
|
||||
|
@ -81,7 +76,6 @@ export class OperationModel implements IMenuItem {
|
|||
extensions: Record<string, any>;
|
||||
isCallback: boolean;
|
||||
isWebhook: boolean;
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps;
|
||||
|
||||
constructor(
|
||||
private parser: OpenAPIParser,
|
||||
|
@ -106,11 +100,6 @@ export class OperationModel implements IMenuItem {
|
|||
this.isCallback = isCallback;
|
||||
this.isWebhook = !!operationSpec.isWebhook;
|
||||
|
||||
this.reverseEventsReadWriteOnly = (this.isCallback || this.isWebhook) ? {
|
||||
reverseEventsReadOnlyProps: this.options.reverseEventsReadOnlyProps,
|
||||
reverseEventsWriteOnlyProps: this.options.reverseEventsWriteOnlyProps,
|
||||
} : {};
|
||||
|
||||
this.name = getOperationSummary(operationSpec);
|
||||
|
||||
if (this.isCallback) {
|
||||
|
@ -183,11 +172,7 @@ export class OperationModel implements IMenuItem {
|
|||
get requestBody() {
|
||||
return (
|
||||
this.operationSpec.requestBody &&
|
||||
new RequestBodyModel(this.parser,
|
||||
this.operationSpec.requestBody,
|
||||
this.options,
|
||||
this.reverseEventsReadWriteOnly,
|
||||
)
|
||||
new RequestBodyModel(this.parser, this.operationSpec.requestBody, this.options)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -227,13 +212,7 @@ export class OperationModel implements IMenuItem {
|
|||
this.operationSpec.pathParameters,
|
||||
this.operationSpec.parameters,
|
||||
// TODO: fix pointer
|
||||
).map((paramOrRef) => new FieldModel(
|
||||
this.parser,
|
||||
paramOrRef,
|
||||
this.pointer,
|
||||
this.options,
|
||||
this.reverseEventsReadWriteOnly,
|
||||
));
|
||||
).map((paramOrRef) => new FieldModel(this.parser, paramOrRef, this.pointer, this.options));
|
||||
|
||||
if (this.options.sortPropsAlphabetically) {
|
||||
return sortByField(_parameters, 'name');
|
||||
|
@ -267,7 +246,6 @@ export class OperationModel implements IMenuItem {
|
|||
hasSuccessResponses,
|
||||
this.operationSpec.responses[code],
|
||||
this.options,
|
||||
this.reverseEventsReadWriteOnly,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ import { OpenAPIRequestBody, Referenced } from '../../types';
|
|||
import { OpenAPIParser } from '../OpenAPIParser';
|
||||
import { RedocNormalizedOptions } from '../RedocNormalizedOptions';
|
||||
import { MediaContentModel } from './MediaContent';
|
||||
import { ReverseEventsRWOProps } from './Operation';
|
||||
|
||||
export class RequestBodyModel {
|
||||
description: string;
|
||||
|
@ -14,14 +13,13 @@ export class RequestBodyModel {
|
|||
parser: OpenAPIParser,
|
||||
infoOrRef: Referenced<OpenAPIRequestBody>,
|
||||
options: RedocNormalizedOptions,
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps,
|
||||
) {
|
||||
const info = parser.deref(infoOrRef);
|
||||
this.description = info.description || '';
|
||||
this.required = !!info.required;
|
||||
parser.exitRef(infoOrRef);
|
||||
if (info.content !== undefined) {
|
||||
this.content = new MediaContentModel(parser, info.content, true, options, reverseEventsReadWriteOnly);
|
||||
this.content = new MediaContentModel(parser, info.content, true, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ import { OpenAPIParser } from '../OpenAPIParser';
|
|||
import { RedocNormalizedOptions } from '../RedocNormalizedOptions';
|
||||
import { FieldModel } from './Field';
|
||||
import { MediaContentModel } from './MediaContent';
|
||||
import { ReverseEventsRWOProps } from './Operation';
|
||||
|
||||
export class ResponseModel {
|
||||
@observable
|
||||
|
@ -26,7 +25,6 @@ export class ResponseModel {
|
|||
defaultAsError: boolean,
|
||||
infoOrRef: Referenced<OpenAPIResponse>,
|
||||
options: RedocNormalizedOptions,
|
||||
reverseEventsReadWriteOnly?: ReverseEventsRWOProps,
|
||||
) {
|
||||
makeObservable(this);
|
||||
|
||||
|
@ -36,7 +34,7 @@ export class ResponseModel {
|
|||
parser.exitRef(infoOrRef);
|
||||
this.code = code;
|
||||
if (info.content !== undefined) {
|
||||
this.content = new MediaContentModel(parser, info.content, false, options, reverseEventsReadWriteOnly);
|
||||
this.content = new MediaContentModel(parser, info.content, false, options);
|
||||
}
|
||||
|
||||
if (info['x-summary'] !== undefined) {
|
||||
|
@ -53,7 +51,7 @@ export class ResponseModel {
|
|||
if (headers !== undefined) {
|
||||
this.headers = Object.keys(headers).map(name => {
|
||||
const header = headers[name];
|
||||
return new FieldModel(parser, { ...header, name }, '', options, reverseEventsReadWriteOnly);
|
||||
return new FieldModel(parser, { ...header, name }, '', options);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import { OpenAPIParser } from '../OpenAPIParser';
|
|||
import { RedocNormalizedOptions } from '../RedocNormalizedOptions';
|
||||
import { FieldModel } from './Field';
|
||||
|
||||
import { MergedOpenAPISchema, ReverseEventsRWOProps } from '../';
|
||||
import { MergedOpenAPISchema } from '../';
|
||||
import {
|
||||
detectType,
|
||||
extractExtensions,
|
||||
|
@ -74,7 +74,6 @@ export class SchemaModel {
|
|||
pointer: string,
|
||||
private options: RedocNormalizedOptions,
|
||||
isChild: boolean = false,
|
||||
reverseEventsReadWriteOnly: ReverseEventsRWOProps = {},
|
||||
) {
|
||||
makeObservable(this);
|
||||
|
||||
|
@ -82,7 +81,7 @@ export class SchemaModel {
|
|||
this.rawSchema = parser.deref(schemaOrRef, false, true);
|
||||
this.schema = parser.mergeAllOf(this.rawSchema, this.pointer, isChild);
|
||||
|
||||
this.init(parser, isChild, reverseEventsReadWriteOnly);
|
||||
this.init(parser, isChild);
|
||||
|
||||
parser.exitRef(schemaOrRef);
|
||||
parser.exitParents(this.schema);
|
||||
|
@ -105,7 +104,7 @@ export class SchemaModel {
|
|||
return this.type === type || (Array.isArray(this.type) && this.type.includes(type));
|
||||
}
|
||||
|
||||
init(parser: OpenAPIParser, isChild: boolean, reverseEventsReadWriteOnly: ReverseEventsRWOProps) {
|
||||
init(parser: OpenAPIParser, isChild: boolean) {
|
||||
const schema = this.schema;
|
||||
this.isCircular = schema['x-circular-ref'];
|
||||
|
||||
|
@ -147,7 +146,7 @@ export class SchemaModel {
|
|||
}
|
||||
|
||||
if (!isChild && getDiscriminator(schema) !== undefined) {
|
||||
this.initDiscriminator(schema, parser, reverseEventsReadWriteOnly);
|
||||
this.initDiscriminator(schema, parser);
|
||||
return;
|
||||
} else if (
|
||||
isChild &&
|
||||
|
@ -159,7 +158,7 @@ export class SchemaModel {
|
|||
}
|
||||
|
||||
if (schema.oneOf !== undefined) {
|
||||
this.initOneOf(schema.oneOf, parser, reverseEventsReadWriteOnly);
|
||||
this.initOneOf(schema.oneOf, parser);
|
||||
this.oneOfType = 'One of';
|
||||
if (schema.anyOf !== undefined) {
|
||||
console.warn(
|
||||
|
@ -170,17 +169,15 @@ export class SchemaModel {
|
|||
}
|
||||
|
||||
if (schema.anyOf !== undefined) {
|
||||
this.initOneOf(schema.anyOf, parser, reverseEventsReadWriteOnly);
|
||||
this.initOneOf(schema.anyOf, parser);
|
||||
this.oneOfType = 'Any of';
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.hasType('object')) {
|
||||
this.fields = buildFields(parser, schema, this.pointer, this.options, reverseEventsReadWriteOnly);
|
||||
this.fields = buildFields(parser, schema, this.pointer, this.options);
|
||||
} else if (this.hasType('array') && schema.items) {
|
||||
this.items = new SchemaModel(
|
||||
parser, schema.items, this.pointer + '/items', this.options, false, reverseEventsReadWriteOnly
|
||||
);
|
||||
this.items = new SchemaModel(parser, schema.items, this.pointer + '/items', this.options);
|
||||
this.displayType = pluralizeType(this.items.displayType);
|
||||
this.displayFormat = this.items.format;
|
||||
this.typePrefix = this.items.typePrefix + l('arrayOf');
|
||||
|
@ -204,7 +201,7 @@ export class SchemaModel {
|
|||
}
|
||||
}
|
||||
|
||||
private initOneOf(oneOf: OpenAPISchema[], parser: OpenAPIParser, reverseEventsReadWriteOnly: ReverseEventsRWOProps) {
|
||||
private initOneOf(oneOf: OpenAPISchema[], parser: OpenAPIParser) {
|
||||
this.oneOf = oneOf!.map((variant, idx) => {
|
||||
const derefVariant = parser.deref(variant, false, true);
|
||||
|
||||
|
@ -227,8 +224,6 @@ export class SchemaModel {
|
|||
} as OpenAPISchema,
|
||||
this.pointer + '/oneOf/' + idx,
|
||||
this.options,
|
||||
false,
|
||||
reverseEventsReadWriteOnly,
|
||||
);
|
||||
|
||||
parser.exitRef(variant);
|
||||
|
@ -262,7 +257,6 @@ export class SchemaModel {
|
|||
parentRefs?: string[];
|
||||
},
|
||||
parser: OpenAPIParser,
|
||||
reverseEventsReadWriteOnly,
|
||||
) {
|
||||
const discriminator = getDiscriminator(schema)!;
|
||||
this.discriminatorProp = discriminator.propertyName;
|
||||
|
@ -350,7 +344,7 @@ export class SchemaModel {
|
|||
}
|
||||
|
||||
this.oneOf = refs.map(({ $ref, name }) => {
|
||||
const innerSchema = new SchemaModel(parser, parser.byRef($ref)!, $ref, this.options, true, reverseEventsReadWriteOnly);
|
||||
const innerSchema = new SchemaModel(parser, parser.byRef($ref)!, $ref, this.options, true);
|
||||
innerSchema.title = name;
|
||||
return innerSchema;
|
||||
});
|
||||
|
@ -362,7 +356,6 @@ function buildFields(
|
|||
schema: OpenAPISchema,
|
||||
$ref: string,
|
||||
options: RedocNormalizedOptions,
|
||||
reverseEventsReadWriteOnly: ReverseEventsRWOProps,
|
||||
): FieldModel[] {
|
||||
const props = schema.properties || {};
|
||||
const additionalProps = schema.additionalProperties;
|
||||
|
@ -392,7 +385,6 @@ function buildFields(
|
|||
},
|
||||
$ref + '/properties/' + fieldName,
|
||||
options,
|
||||
reverseEventsReadWriteOnly,
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -419,7 +411,6 @@ function buildFields(
|
|||
},
|
||||
$ref + '/additionalProperties',
|
||||
options,
|
||||
reverseEventsReadWriteOnly,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user