diff --git a/README.md b/README.md index 08e80d9cd5..2b866a7bbc 100644 --- a/README.md +++ b/README.md @@ -227,6 +227,7 @@ You can use all of the following options with standalone version on tag * `nativeScrollbars` - use native scrollbar for sidemenu instead of perfect-scroll (scrolling performance optimization for big specs) * `hideDownloadButton` - do not show "Download" spec button. **THIS DOESN'T MAKE YOUR SPEC PRIVATE**, it just hides the button. * `disableSearch` - disable search indexing and search box +* `onlyRequiredInSamples` - shows only required fields in request samples. * `theme` - ReDoc theme. Not documented yet. For details check source code: [theme.ts](https://github.com/Rebilly/ReDoc/blob/master/src/theme.ts) ## Advanced usage of standalone version diff --git a/src/services/RedocNormalizedOptions.ts b/src/services/RedocNormalizedOptions.ts index d472ae5d1f..18623976c8 100644 --- a/src/services/RedocNormalizedOptions.ts +++ b/src/services/RedocNormalizedOptions.ts @@ -18,6 +18,7 @@ export interface RedocRawOptions { hideLoading?: boolean | string; hideDownloadButton?: boolean | string; disableSearch?: boolean | string; + onlyRequiredInSamples?: boolean | string; showExtensions?: boolean | string | string[]; unstable_ignoreMimeParameters?: boolean; @@ -117,6 +118,7 @@ export class RedocNormalizedOptions { untrustedSpec: boolean; hideDownloadButton: boolean; disableSearch: boolean; + onlyRequiredInSamples: boolean; showExtensions: boolean | string[]; /* tslint:disable-next-line */ @@ -144,6 +146,7 @@ export class RedocNormalizedOptions { this.untrustedSpec = argValueToBoolean(raw.untrustedSpec); this.hideDownloadButton = argValueToBoolean(raw.hideDownloadButton); this.disableSearch = argValueToBoolean(raw.disableSearch); + this.onlyRequiredInSamples = argValueToBoolean(raw.onlyRequiredInSamples); this.showExtensions = RedocNormalizedOptions.normalizeShowExtensions(raw.showExtensions); this.unstable_ignoreMimeParameters = argValueToBoolean(raw.unstable_ignoreMimeParameters); diff --git a/src/services/models/MediaType.ts b/src/services/models/MediaType.ts index ff471e2715..941a35fbe7 100644 --- a/src/services/models/MediaType.ts +++ b/src/services/models/MediaType.ts @@ -13,6 +13,7 @@ export class MediaTypeModel { schema?: SchemaModel; name: string; isRequestType: boolean; + onlyRequiredInSamples: boolean; /** * @param isRequestType needed to know if skipe RO/RW fields in objects @@ -27,6 +28,7 @@ export class MediaTypeModel { this.name = name; this.isRequestType = isRequestType; this.schema = info.schema && new SchemaModel(parser, info.schema, '', options); + this.onlyRequiredInSamples = options.onlyRequiredInSamples; if (info.examples !== undefined) { this.examples = mapValues(info.examples, example => new ExampleModel(parser, example)); } else if (info.example !== undefined) { @@ -39,12 +41,17 @@ export class MediaTypeModel { } generateExample(parser: OpenAPIParser, info: OpenAPIMediaType) { + const samplerOptions = { + skipReadOnly: this.isRequestType, + skipNonRequired: this.isRequestType && this.onlyRequiredInSamples, + skipWriteOnly: !this.isRequestType, + }; if (this.schema && this.schema.oneOf) { this.examples = {}; for (const subSchema of this.schema.oneOf) { const sample = Sampler.sample( subSchema.rawSchema, - { skipReadOnly: this.isRequestType, skipWriteOnly: !this.isRequestType }, + samplerOptions, parser.spec, ); @@ -61,7 +68,7 @@ export class MediaTypeModel { default: new ExampleModel(parser, { value: Sampler.sample( info.schema, - { skipReadOnly: this.isRequestType, skipWriteOnly: !this.isRequestType }, + samplerOptions, parser.spec, ), }),