Revert "feat: Webhooks option to reverse readOnly/writeOnly properties #1720"

This reverts commit 7486e70039.
This commit is contained in:
Andriy Zaleskyy 2021-08-27 12:22:57 +03:00
parent c04e4035d5
commit 1487b24776
19 changed files with 61 additions and 178 deletions

View File

@ -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'));

View File

@ -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>
);
}

View File

@ -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} />}
</>
);
}

View File

@ -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} />
);
});
})}

View File

@ -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} />}

View File

@ -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} />
</>
);
}}

View File

@ -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>

View File

@ -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>
</>

View File

@ -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>
);
}

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);
});
}

View File

@ -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) {

View File

@ -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,
);
});
}

View File

@ -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);
}
}
}

View File

@ -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);
});
}
}

View File

@ -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,
),
);
}