@stoplight/elements-core 9.0.25-beta-0.1 → 9.0.25-beta-0.3
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/components/TryIt/Response/Response.d.ts +1 -0
- package/index.esm.js +256 -182
- package/index.js +255 -181
- package/index.mjs +256 -182
- package/package.json +1 -1
- package/utils/exampleGeneration/exampleGeneration.d.ts +1 -0
package/index.esm.js
CHANGED
|
@@ -2,7 +2,7 @@ import { __rest, __awaiter } from 'tslib';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import React__default, { useContext, memo, useMemo, useState, useEffect, useRef, useLayoutEffect } from 'react';
|
|
4
4
|
import { convertToJsonSchema } from '@stoplight/http-spec/oas';
|
|
5
|
-
import { resolveInlineRef, hasRef, isPlainObject as isPlainObject$1,
|
|
5
|
+
import { resolveInlineRef, hasRef, isPlainObject as isPlainObject$1, safeStringify, safeParse } from '@stoplight/json';
|
|
6
6
|
import isArray from 'lodash/isArray.js';
|
|
7
7
|
import isPlainObject from 'lodash/isPlainObject.js';
|
|
8
8
|
import { NodeType, HttpParamStyles } from '@stoplight/types';
|
|
@@ -16,6 +16,7 @@ export { DefaultSMDComponents } from '@stoplight/markdown-viewer';
|
|
|
16
16
|
import cn from 'classnames';
|
|
17
17
|
import { atomWithStorage, useAtomValue } from 'jotai/utils';
|
|
18
18
|
import { atom, useAtom, Provider } from 'jotai';
|
|
19
|
+
import * as Sampler from '@stoplight/json-schema-sampler';
|
|
19
20
|
import URI from 'urijs';
|
|
20
21
|
import isString from 'lodash/isString.js';
|
|
21
22
|
import { CodeViewer } from '@stoplight/mosaic-code-viewer';
|
|
@@ -38,7 +39,6 @@ import map from 'lodash/map.js';
|
|
|
38
39
|
import mapValues from 'lodash/mapValues.js';
|
|
39
40
|
import pickBy from 'lodash/pickBy.js';
|
|
40
41
|
import { CodeEditor } from '@stoplight/mosaic-code-editor';
|
|
41
|
-
import * as Sampler from '@stoplight/json-schema-sampler';
|
|
42
42
|
import compact from 'lodash/compact.js';
|
|
43
43
|
import uniq from 'lodash/uniq.js';
|
|
44
44
|
import orderBy from 'lodash/orderBy.js';
|
|
@@ -652,6 +652,242 @@ function useIsCompact(layoutOptions) {
|
|
|
652
652
|
|
|
653
653
|
const chosenServerAtom = atom(undefined);
|
|
654
654
|
|
|
655
|
+
const mergeOneOfAnyOf = (schema) => {
|
|
656
|
+
if (!isPlainObject$1(schema)) {
|
|
657
|
+
return schema;
|
|
658
|
+
}
|
|
659
|
+
let result = Object.assign({}, schema);
|
|
660
|
+
if (result.oneOf && result.oneOf.length > 0) {
|
|
661
|
+
const firstOption = result.oneOf[0];
|
|
662
|
+
const { oneOf } = result, rest = __rest(result, ["oneOf"]);
|
|
663
|
+
result = Object.assign(Object.assign({}, rest), firstOption);
|
|
664
|
+
}
|
|
665
|
+
else if (result.anyOf && result.anyOf.length > 0) {
|
|
666
|
+
const firstOption = result.anyOf[0];
|
|
667
|
+
const { anyOf } = result, rest = __rest(result, ["anyOf"]);
|
|
668
|
+
result = Object.assign(Object.assign({}, rest), firstOption);
|
|
669
|
+
}
|
|
670
|
+
if (result.properties) {
|
|
671
|
+
result.properties = Object.fromEntries(Object.entries(result.properties).map(([key, value]) => [key, mergeOneOfAnyOf(value)]));
|
|
672
|
+
}
|
|
673
|
+
if (result.items) {
|
|
674
|
+
result.items = mergeOneOfAnyOf(result.items);
|
|
675
|
+
}
|
|
676
|
+
if (result.allOf) {
|
|
677
|
+
result.allOf = result.allOf.map((item) => mergeOneOfAnyOf(item));
|
|
678
|
+
}
|
|
679
|
+
delete result.oneOf;
|
|
680
|
+
delete result.anyOf;
|
|
681
|
+
return result;
|
|
682
|
+
};
|
|
683
|
+
const OAS_FORMAT_RANGES = {
|
|
684
|
+
int32: { minimum: 0 - Math.pow(2, 31), maximum: Math.pow(2, 31) - 1 },
|
|
685
|
+
int64: { minimum: Number.MIN_SAFE_INTEGER, maximum: Number.MAX_SAFE_INTEGER },
|
|
686
|
+
float: { minimum: 0 - Math.pow(2, 128), maximum: Math.pow(2, 128) - 1 },
|
|
687
|
+
double: { minimum: 0 - Number.MAX_VALUE, maximum: Number.MAX_VALUE },
|
|
688
|
+
};
|
|
689
|
+
const stripInferredNumericBounds = (schema) => {
|
|
690
|
+
var _a;
|
|
691
|
+
if (!isPlainObject$1(schema)) {
|
|
692
|
+
return schema;
|
|
693
|
+
}
|
|
694
|
+
const result = Object.assign({}, schema);
|
|
695
|
+
const explicitProperties = Array.isArray((_a = result === null || result === void 0 ? void 0 : result['x-stoplight']) === null || _a === void 0 ? void 0 : _a.explicitProperties)
|
|
696
|
+
? result['x-stoplight'].explicitProperties
|
|
697
|
+
: [];
|
|
698
|
+
const isNumericType = result.type === 'integer' || result.type === 'number';
|
|
699
|
+
const formatRange = OAS_FORMAT_RANGES[result.format];
|
|
700
|
+
const hasExplicitMinimum = explicitProperties.includes('minimum') && result.minimum !== (formatRange === null || formatRange === void 0 ? void 0 : formatRange.minimum);
|
|
701
|
+
const hasExplicitMaximum = explicitProperties.includes('maximum') && result.maximum !== (formatRange === null || formatRange === void 0 ? void 0 : formatRange.maximum);
|
|
702
|
+
if (isNumericType && !hasExplicitMinimum) {
|
|
703
|
+
delete result.minimum;
|
|
704
|
+
}
|
|
705
|
+
if (isNumericType && !hasExplicitMaximum) {
|
|
706
|
+
delete result.maximum;
|
|
707
|
+
}
|
|
708
|
+
if (result.properties && isPlainObject$1(result.properties)) {
|
|
709
|
+
result.properties = Object.fromEntries(Object.entries(result.properties).map(([key, value]) => [key, stripInferredNumericBounds(value)]));
|
|
710
|
+
}
|
|
711
|
+
if (Array.isArray(result.items)) {
|
|
712
|
+
result.items = result.items.map((item) => stripInferredNumericBounds(item));
|
|
713
|
+
}
|
|
714
|
+
else if (result.items) {
|
|
715
|
+
result.items = stripInferredNumericBounds(result.items);
|
|
716
|
+
}
|
|
717
|
+
if (Array.isArray(result.allOf)) {
|
|
718
|
+
result.allOf = result.allOf.map((item) => stripInferredNumericBounds(item));
|
|
719
|
+
}
|
|
720
|
+
if (Array.isArray(result.oneOf)) {
|
|
721
|
+
result.oneOf = result.oneOf.map((item) => stripInferredNumericBounds(item));
|
|
722
|
+
}
|
|
723
|
+
if (Array.isArray(result.anyOf)) {
|
|
724
|
+
result.anyOf = result.anyOf.map((item) => stripInferredNumericBounds(item));
|
|
725
|
+
}
|
|
726
|
+
return result;
|
|
727
|
+
};
|
|
728
|
+
const FLOAT_ZERO_MARKER = '__FLOAT_ZERO__';
|
|
729
|
+
const markFloatZeros = (value, schema) => {
|
|
730
|
+
if (!isPlainObject$1(schema))
|
|
731
|
+
return value;
|
|
732
|
+
if (Array.isArray(schema.allOf)) {
|
|
733
|
+
return schema.allOf.reduce((currentValue, item) => markFloatZeros(currentValue, item), value);
|
|
734
|
+
}
|
|
735
|
+
if (Array.isArray(schema.oneOf) && schema.oneOf.length > 0) {
|
|
736
|
+
return markFloatZeros(value, schema.oneOf[0]);
|
|
737
|
+
}
|
|
738
|
+
if (Array.isArray(schema.anyOf) && schema.anyOf.length > 0) {
|
|
739
|
+
return markFloatZeros(value, schema.anyOf[0]);
|
|
740
|
+
}
|
|
741
|
+
if (schema.type === 'number' && (schema.format === 'float' || schema.format === 'double') && value === 0) {
|
|
742
|
+
return FLOAT_ZERO_MARKER;
|
|
743
|
+
}
|
|
744
|
+
if (isPlainObject$1(value) && isPlainObject$1(schema.properties)) {
|
|
745
|
+
return Object.fromEntries(Object.entries(value).map(([k, v]) => { var _a; return [k, markFloatZeros(v, (_a = schema.properties[k]) !== null && _a !== void 0 ? _a : {})]; }));
|
|
746
|
+
}
|
|
747
|
+
if (Array.isArray(value) && schema.items && !Array.isArray(schema.items)) {
|
|
748
|
+
return value.map((item) => markFloatZeros(item, schema.items));
|
|
749
|
+
}
|
|
750
|
+
return value;
|
|
751
|
+
};
|
|
752
|
+
const stringifyWithFloatZeros = (value) => {
|
|
753
|
+
var _a;
|
|
754
|
+
if (value === FLOAT_ZERO_MARKER)
|
|
755
|
+
return '0.0';
|
|
756
|
+
return ((_a = safeStringify(value, undefined, 2)) !== null && _a !== void 0 ? _a : '').replace(/"__FLOAT_ZERO__"/g, '0.0');
|
|
757
|
+
};
|
|
758
|
+
const normalizeInferredNumericBounds = (value, schema) => {
|
|
759
|
+
var _a;
|
|
760
|
+
if (!isPlainObject$1(schema))
|
|
761
|
+
return value;
|
|
762
|
+
const schemaObject = schema;
|
|
763
|
+
if (Array.isArray(schemaObject.allOf)) {
|
|
764
|
+
return schemaObject.allOf.reduce((currentValue, item) => normalizeInferredNumericBounds(currentValue, item), value);
|
|
765
|
+
}
|
|
766
|
+
if (Array.isArray(schemaObject.oneOf) && schemaObject.oneOf.length > 0) {
|
|
767
|
+
return normalizeInferredNumericBounds(value, schemaObject.oneOf[0]);
|
|
768
|
+
}
|
|
769
|
+
if (Array.isArray(schemaObject.anyOf) && schemaObject.anyOf.length > 0) {
|
|
770
|
+
return normalizeInferredNumericBounds(value, schemaObject.anyOf[0]);
|
|
771
|
+
}
|
|
772
|
+
const explicitProperties = Array.isArray((_a = schemaObject === null || schemaObject === void 0 ? void 0 : schemaObject['x-stoplight']) === null || _a === void 0 ? void 0 : _a.explicitProperties)
|
|
773
|
+
? schemaObject['x-stoplight'].explicitProperties
|
|
774
|
+
: [];
|
|
775
|
+
const isNumericType = schemaObject.type === 'integer' || schemaObject.type === 'number';
|
|
776
|
+
const formatRange = OAS_FORMAT_RANGES[schemaObject.format];
|
|
777
|
+
const hasExplicitMinimum = explicitProperties.includes('minimum') && schemaObject.minimum !== (formatRange === null || formatRange === void 0 ? void 0 : formatRange.minimum);
|
|
778
|
+
const hasExplicitMaximum = explicitProperties.includes('maximum') && schemaObject.maximum !== (formatRange === null || formatRange === void 0 ? void 0 : formatRange.maximum);
|
|
779
|
+
if (isNumericType &&
|
|
780
|
+
formatRange &&
|
|
781
|
+
((!hasExplicitMinimum && value === formatRange.minimum) || (!hasExplicitMaximum && value === formatRange.maximum))) {
|
|
782
|
+
return schemaObject.type === 'number' && (schemaObject.format === 'float' || schemaObject.format === 'double')
|
|
783
|
+
? FLOAT_ZERO_MARKER
|
|
784
|
+
: 0;
|
|
785
|
+
}
|
|
786
|
+
if (isPlainObject$1(value) && isPlainObject$1(schemaObject.properties)) {
|
|
787
|
+
return Object.fromEntries(Object.entries(value).map(([key, nestedValue]) => {
|
|
788
|
+
var _a;
|
|
789
|
+
return [
|
|
790
|
+
key,
|
|
791
|
+
normalizeInferredNumericBounds(nestedValue, (_a = schemaObject.properties[key]) !== null && _a !== void 0 ? _a : {}),
|
|
792
|
+
];
|
|
793
|
+
}));
|
|
794
|
+
}
|
|
795
|
+
if (Array.isArray(value) && schemaObject.items && !Array.isArray(schemaObject.items)) {
|
|
796
|
+
return value.map((item) => normalizeInferredNumericBounds(item, schemaObject.items));
|
|
797
|
+
}
|
|
798
|
+
if (Array.isArray(value) && Array.isArray(schemaObject.items)) {
|
|
799
|
+
return value.map((item, index) => normalizeInferredNumericBounds(item, schemaObject.items[index]));
|
|
800
|
+
}
|
|
801
|
+
return value;
|
|
802
|
+
};
|
|
803
|
+
const stringifyExampleWithResolvedSchema = (value, schema) => {
|
|
804
|
+
const normalizedValue = normalizeInferredNumericBounds(value, schema);
|
|
805
|
+
return stringifyWithFloatZeros(markFloatZeros(normalizedValue, schema));
|
|
806
|
+
};
|
|
807
|
+
const useGenerateExampleFromMediaTypeContent = (mediaTypeContent, chosenExampleIndex, { skipReadOnly, skipWriteOnly, skipNonRequired, ticks } = {}) => {
|
|
808
|
+
const document = useDocument();
|
|
809
|
+
return React__default.useMemo(() => generateExampleFromMediaTypeContent(mediaTypeContent, document, chosenExampleIndex, {
|
|
810
|
+
skipNonRequired,
|
|
811
|
+
skipWriteOnly,
|
|
812
|
+
skipReadOnly,
|
|
813
|
+
ticks: ticks || 6000,
|
|
814
|
+
}), [mediaTypeContent, document, chosenExampleIndex, skipNonRequired, skipWriteOnly, skipReadOnly, ticks]);
|
|
815
|
+
};
|
|
816
|
+
const generateExampleFromMediaTypeContent = (mediaTypeContent, document, chosenExampleIndex = 0, options) => {
|
|
817
|
+
var _a;
|
|
818
|
+
const textRequestBodySchema = mediaTypeContent === null || mediaTypeContent === void 0 ? void 0 : mediaTypeContent.schema;
|
|
819
|
+
const textRequestBodyExamples = mediaTypeContent === null || mediaTypeContent === void 0 ? void 0 : mediaTypeContent.examples;
|
|
820
|
+
try {
|
|
821
|
+
if (textRequestBodyExamples === null || textRequestBodyExamples === void 0 ? void 0 : textRequestBodyExamples.length) {
|
|
822
|
+
return ((_a = safeStringify(textRequestBodyExamples === null || textRequestBodyExamples === void 0 ? void 0 : textRequestBodyExamples[chosenExampleIndex]['value'], undefined, 2)) !== null && _a !== void 0 ? _a : '');
|
|
823
|
+
}
|
|
824
|
+
else if (textRequestBodySchema) {
|
|
825
|
+
let unwrappedSchema = getResolvedObject(textRequestBodySchema);
|
|
826
|
+
unwrappedSchema = stripInferredNumericBounds(unwrappedSchema);
|
|
827
|
+
unwrappedSchema = mergeOneOfAnyOf(unwrappedSchema);
|
|
828
|
+
const generated = Sampler.sample(unwrappedSchema, options, document);
|
|
829
|
+
if (generated === null)
|
|
830
|
+
return '';
|
|
831
|
+
return stringifyExampleWithResolvedSchema(generated, unwrappedSchema);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
catch (e) {
|
|
835
|
+
console.warn(e);
|
|
836
|
+
return `Example cannot be created for this schema\n${e}`;
|
|
837
|
+
}
|
|
838
|
+
return '';
|
|
839
|
+
};
|
|
840
|
+
const generateExamplesFromJsonSchema = (schema) => {
|
|
841
|
+
var _a;
|
|
842
|
+
const examples = [];
|
|
843
|
+
if (Array.isArray(schema === null || schema === void 0 ? void 0 : schema.examples)) {
|
|
844
|
+
schema.examples.forEach((example, index) => {
|
|
845
|
+
var _a;
|
|
846
|
+
examples.push({
|
|
847
|
+
data: (_a = safeStringify(example, undefined, 2)) !== null && _a !== void 0 ? _a : '',
|
|
848
|
+
label: index === 0 ? 'default' : `example-${index}`,
|
|
849
|
+
});
|
|
850
|
+
});
|
|
851
|
+
}
|
|
852
|
+
else if (isPlainObject$1(schema === null || schema === void 0 ? void 0 : schema['x-examples'])) {
|
|
853
|
+
for (const [label, example] of Object.entries(schema['x-examples'])) {
|
|
854
|
+
if (isPlainObject$1(example)) {
|
|
855
|
+
const val = example.hasOwnProperty('value') && Object.keys(example).length === 1 ? example.value : example;
|
|
856
|
+
examples.push({
|
|
857
|
+
label,
|
|
858
|
+
data: (_a = safeStringify(val, undefined, 2)) !== null && _a !== void 0 ? _a : '',
|
|
859
|
+
});
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
if (examples.length) {
|
|
864
|
+
return examples;
|
|
865
|
+
}
|
|
866
|
+
try {
|
|
867
|
+
let resolvedSchema = getResolvedObject(schema);
|
|
868
|
+
resolvedSchema = stripInferredNumericBounds(resolvedSchema);
|
|
869
|
+
resolvedSchema = mergeOneOfAnyOf(resolvedSchema);
|
|
870
|
+
const generated = Sampler.sample(resolvedSchema, {
|
|
871
|
+
maxSampleDepth: 4,
|
|
872
|
+
ticks: 6000,
|
|
873
|
+
});
|
|
874
|
+
return generated !== null
|
|
875
|
+
? [
|
|
876
|
+
{
|
|
877
|
+
label: 'default',
|
|
878
|
+
data: stringifyExampleWithResolvedSchema(generated, resolvedSchema),
|
|
879
|
+
},
|
|
880
|
+
]
|
|
881
|
+
: [{ label: 'default', data: '' }];
|
|
882
|
+
}
|
|
883
|
+
catch (e) {
|
|
884
|
+
return [{ label: '', data: `Example cannot be created for this schema\n${e}` }];
|
|
885
|
+
}
|
|
886
|
+
};
|
|
887
|
+
const exceedsSize = (example, size = 500) => {
|
|
888
|
+
return example.split(/\r\n|\r|\n/).length > size;
|
|
889
|
+
};
|
|
890
|
+
|
|
655
891
|
function isValidServer(server) {
|
|
656
892
|
return server.url !== null;
|
|
657
893
|
}
|
|
@@ -1818,184 +2054,6 @@ function ExampleMenu({ examples, requestBody, onChange }) {
|
|
|
1818
2054
|
return (React.createElement(Menu, { "aria-label": "Examples", items: menuItems, renderTrigger: ({ isOpen }) => (React.createElement(Button, { appearance: "minimal", size: "sm", iconRight: ['fas', 'sort'], active: isOpen }, "Examples")) }));
|
|
1819
2055
|
}
|
|
1820
2056
|
|
|
1821
|
-
const mergeOneOfAnyOf = (schema) => {
|
|
1822
|
-
if (!isPlainObject$1(schema)) {
|
|
1823
|
-
return schema;
|
|
1824
|
-
}
|
|
1825
|
-
let result = Object.assign({}, schema);
|
|
1826
|
-
if (result.oneOf && result.oneOf.length > 0) {
|
|
1827
|
-
const firstOption = result.oneOf[0];
|
|
1828
|
-
const { oneOf } = result, rest = __rest(result, ["oneOf"]);
|
|
1829
|
-
result = Object.assign(Object.assign({}, rest), firstOption);
|
|
1830
|
-
}
|
|
1831
|
-
else if (result.anyOf && result.anyOf.length > 0) {
|
|
1832
|
-
const firstOption = result.anyOf[0];
|
|
1833
|
-
const { anyOf } = result, rest = __rest(result, ["anyOf"]);
|
|
1834
|
-
result = Object.assign(Object.assign({}, rest), firstOption);
|
|
1835
|
-
}
|
|
1836
|
-
if (result.properties) {
|
|
1837
|
-
result.properties = Object.fromEntries(Object.entries(result.properties).map(([key, value]) => [key, mergeOneOfAnyOf(value)]));
|
|
1838
|
-
}
|
|
1839
|
-
if (result.items) {
|
|
1840
|
-
result.items = mergeOneOfAnyOf(result.items);
|
|
1841
|
-
}
|
|
1842
|
-
if (result.allOf) {
|
|
1843
|
-
result.allOf = result.allOf.map((item) => mergeOneOfAnyOf(item));
|
|
1844
|
-
}
|
|
1845
|
-
delete result.oneOf;
|
|
1846
|
-
delete result.anyOf;
|
|
1847
|
-
return result;
|
|
1848
|
-
};
|
|
1849
|
-
const OAS_FORMAT_RANGES = {
|
|
1850
|
-
int32: { minimum: 0 - Math.pow(2, 31), maximum: Math.pow(2, 31) - 1 },
|
|
1851
|
-
int64: { minimum: Number.MIN_SAFE_INTEGER, maximum: Number.MAX_SAFE_INTEGER },
|
|
1852
|
-
float: { minimum: 0 - Math.pow(2, 128), maximum: Math.pow(2, 128) - 1 },
|
|
1853
|
-
double: { minimum: 0 - Number.MAX_VALUE, maximum: Number.MAX_VALUE },
|
|
1854
|
-
};
|
|
1855
|
-
const stripInferredNumericBounds = (schema) => {
|
|
1856
|
-
var _a;
|
|
1857
|
-
if (!isPlainObject$1(schema)) {
|
|
1858
|
-
return schema;
|
|
1859
|
-
}
|
|
1860
|
-
const result = Object.assign({}, schema);
|
|
1861
|
-
const explicitProperties = Array.isArray((_a = result === null || result === void 0 ? void 0 : result['x-stoplight']) === null || _a === void 0 ? void 0 : _a.explicitProperties)
|
|
1862
|
-
? result['x-stoplight'].explicitProperties
|
|
1863
|
-
: [];
|
|
1864
|
-
const isNumericType = result.type === 'integer' || result.type === 'number';
|
|
1865
|
-
const formatRange = OAS_FORMAT_RANGES[result.format];
|
|
1866
|
-
const hasExplicitMinimum = explicitProperties.includes('minimum') && result.minimum !== (formatRange === null || formatRange === void 0 ? void 0 : formatRange.minimum);
|
|
1867
|
-
const hasExplicitMaximum = explicitProperties.includes('maximum') && result.maximum !== (formatRange === null || formatRange === void 0 ? void 0 : formatRange.maximum);
|
|
1868
|
-
if (isNumericType && !hasExplicitMinimum) {
|
|
1869
|
-
delete result.minimum;
|
|
1870
|
-
}
|
|
1871
|
-
if (isNumericType && !hasExplicitMaximum) {
|
|
1872
|
-
delete result.maximum;
|
|
1873
|
-
}
|
|
1874
|
-
if (result.properties && isPlainObject$1(result.properties)) {
|
|
1875
|
-
result.properties = Object.fromEntries(Object.entries(result.properties).map(([key, value]) => [key, stripInferredNumericBounds(value)]));
|
|
1876
|
-
}
|
|
1877
|
-
if (Array.isArray(result.items)) {
|
|
1878
|
-
result.items = result.items.map((item) => stripInferredNumericBounds(item));
|
|
1879
|
-
}
|
|
1880
|
-
else if (result.items) {
|
|
1881
|
-
result.items = stripInferredNumericBounds(result.items);
|
|
1882
|
-
}
|
|
1883
|
-
if (Array.isArray(result.allOf)) {
|
|
1884
|
-
result.allOf = result.allOf.map((item) => stripInferredNumericBounds(item));
|
|
1885
|
-
}
|
|
1886
|
-
if (Array.isArray(result.oneOf)) {
|
|
1887
|
-
result.oneOf = result.oneOf.map((item) => stripInferredNumericBounds(item));
|
|
1888
|
-
}
|
|
1889
|
-
if (Array.isArray(result.anyOf)) {
|
|
1890
|
-
result.anyOf = result.anyOf.map((item) => stripInferredNumericBounds(item));
|
|
1891
|
-
}
|
|
1892
|
-
return result;
|
|
1893
|
-
};
|
|
1894
|
-
const FLOAT_ZERO_MARKER = '__FLOAT_ZERO__';
|
|
1895
|
-
const markFloatZeros = (value, schema) => {
|
|
1896
|
-
if (!isPlainObject$1(schema))
|
|
1897
|
-
return value;
|
|
1898
|
-
if (schema.type === 'number' && (schema.format === 'float' || schema.format === 'double') && value === 0) {
|
|
1899
|
-
return FLOAT_ZERO_MARKER;
|
|
1900
|
-
}
|
|
1901
|
-
if (isPlainObject$1(value) && isPlainObject$1(schema.properties)) {
|
|
1902
|
-
return Object.fromEntries(Object.entries(value).map(([k, v]) => { var _a; return [k, markFloatZeros(v, (_a = schema.properties[k]) !== null && _a !== void 0 ? _a : {})]; }));
|
|
1903
|
-
}
|
|
1904
|
-
if (Array.isArray(value) && schema.items && !Array.isArray(schema.items)) {
|
|
1905
|
-
return value.map((item) => markFloatZeros(item, schema.items));
|
|
1906
|
-
}
|
|
1907
|
-
return value;
|
|
1908
|
-
};
|
|
1909
|
-
const stringifyWithFloatZeros = (value) => {
|
|
1910
|
-
var _a;
|
|
1911
|
-
if (value === FLOAT_ZERO_MARKER)
|
|
1912
|
-
return '0.0';
|
|
1913
|
-
return ((_a = safeStringify(value, undefined, 2)) !== null && _a !== void 0 ? _a : '').replace(/"__FLOAT_ZERO__"/g, '0.0');
|
|
1914
|
-
};
|
|
1915
|
-
const useGenerateExampleFromMediaTypeContent = (mediaTypeContent, chosenExampleIndex, { skipReadOnly, skipWriteOnly, skipNonRequired, ticks } = {}) => {
|
|
1916
|
-
const document = useDocument();
|
|
1917
|
-
return React__default.useMemo(() => generateExampleFromMediaTypeContent(mediaTypeContent, document, chosenExampleIndex, {
|
|
1918
|
-
skipNonRequired,
|
|
1919
|
-
skipWriteOnly,
|
|
1920
|
-
skipReadOnly,
|
|
1921
|
-
ticks: ticks || 6000,
|
|
1922
|
-
}), [mediaTypeContent, document, chosenExampleIndex, skipNonRequired, skipWriteOnly, skipReadOnly, ticks]);
|
|
1923
|
-
};
|
|
1924
|
-
const generateExampleFromMediaTypeContent = (mediaTypeContent, document, chosenExampleIndex = 0, options) => {
|
|
1925
|
-
var _a;
|
|
1926
|
-
const textRequestBodySchema = mediaTypeContent === null || mediaTypeContent === void 0 ? void 0 : mediaTypeContent.schema;
|
|
1927
|
-
const textRequestBodyExamples = mediaTypeContent === null || mediaTypeContent === void 0 ? void 0 : mediaTypeContent.examples;
|
|
1928
|
-
try {
|
|
1929
|
-
if (textRequestBodyExamples === null || textRequestBodyExamples === void 0 ? void 0 : textRequestBodyExamples.length) {
|
|
1930
|
-
return ((_a = safeStringify(textRequestBodyExamples === null || textRequestBodyExamples === void 0 ? void 0 : textRequestBodyExamples[chosenExampleIndex]['value'], undefined, 2)) !== null && _a !== void 0 ? _a : '');
|
|
1931
|
-
}
|
|
1932
|
-
else if (textRequestBodySchema) {
|
|
1933
|
-
let unwrappedSchema = getResolvedObject(textRequestBodySchema);
|
|
1934
|
-
unwrappedSchema = stripInferredNumericBounds(unwrappedSchema);
|
|
1935
|
-
unwrappedSchema = mergeOneOfAnyOf(unwrappedSchema);
|
|
1936
|
-
const generated = Sampler.sample(unwrappedSchema, options, document);
|
|
1937
|
-
if (generated === null)
|
|
1938
|
-
return '';
|
|
1939
|
-
return stringifyWithFloatZeros(markFloatZeros(generated, unwrappedSchema));
|
|
1940
|
-
}
|
|
1941
|
-
}
|
|
1942
|
-
catch (e) {
|
|
1943
|
-
console.warn(e);
|
|
1944
|
-
return `Example cannot be created for this schema\n${e}`;
|
|
1945
|
-
}
|
|
1946
|
-
return '';
|
|
1947
|
-
};
|
|
1948
|
-
const generateExamplesFromJsonSchema = (schema) => {
|
|
1949
|
-
var _a;
|
|
1950
|
-
const examples = [];
|
|
1951
|
-
if (Array.isArray(schema === null || schema === void 0 ? void 0 : schema.examples)) {
|
|
1952
|
-
schema.examples.forEach((example, index) => {
|
|
1953
|
-
var _a;
|
|
1954
|
-
examples.push({
|
|
1955
|
-
data: (_a = safeStringify(example, undefined, 2)) !== null && _a !== void 0 ? _a : '',
|
|
1956
|
-
label: index === 0 ? 'default' : `example-${index}`,
|
|
1957
|
-
});
|
|
1958
|
-
});
|
|
1959
|
-
}
|
|
1960
|
-
else if (isPlainObject$1(schema === null || schema === void 0 ? void 0 : schema['x-examples'])) {
|
|
1961
|
-
for (const [label, example] of Object.entries(schema['x-examples'])) {
|
|
1962
|
-
if (isPlainObject$1(example)) {
|
|
1963
|
-
const val = example.hasOwnProperty('value') && Object.keys(example).length === 1 ? example.value : example;
|
|
1964
|
-
examples.push({
|
|
1965
|
-
label,
|
|
1966
|
-
data: (_a = safeStringify(val, undefined, 2)) !== null && _a !== void 0 ? _a : '',
|
|
1967
|
-
});
|
|
1968
|
-
}
|
|
1969
|
-
}
|
|
1970
|
-
}
|
|
1971
|
-
if (examples.length) {
|
|
1972
|
-
return examples;
|
|
1973
|
-
}
|
|
1974
|
-
try {
|
|
1975
|
-
let resolvedSchema = getResolvedObject(schema);
|
|
1976
|
-
resolvedSchema = stripInferredNumericBounds(resolvedSchema);
|
|
1977
|
-
resolvedSchema = mergeOneOfAnyOf(resolvedSchema);
|
|
1978
|
-
const generated = Sampler.sample(resolvedSchema, {
|
|
1979
|
-
maxSampleDepth: 4,
|
|
1980
|
-
ticks: 6000,
|
|
1981
|
-
});
|
|
1982
|
-
return generated !== null
|
|
1983
|
-
? [
|
|
1984
|
-
{
|
|
1985
|
-
label: 'default',
|
|
1986
|
-
data: stringifyWithFloatZeros(markFloatZeros(generated, resolvedSchema)),
|
|
1987
|
-
},
|
|
1988
|
-
]
|
|
1989
|
-
: [{ label: 'default', data: '' }];
|
|
1990
|
-
}
|
|
1991
|
-
catch (e) {
|
|
1992
|
-
return [{ label: '', data: `Example cannot be created for this schema\n${e}` }];
|
|
1993
|
-
}
|
|
1994
|
-
};
|
|
1995
|
-
const exceedsSize = (example, size = 500) => {
|
|
1996
|
-
return example.split(/\r\n|\r|\n/).length > size;
|
|
1997
|
-
};
|
|
1998
|
-
|
|
1999
2057
|
const useTextRequestBodyState = (mediaTypeContent, skipReadOnly) => {
|
|
2000
2058
|
const initialRequestBody = useGenerateExampleFromMediaTypeContent(mediaTypeContent, undefined, {
|
|
2001
2059
|
skipReadOnly,
|
|
@@ -2480,7 +2538,7 @@ const TryItResponse = ({ response }) => {
|
|
|
2480
2538
|
React.createElement(Panel.Content, null,
|
|
2481
2539
|
React.createElement("div", null,
|
|
2482
2540
|
React.createElement("div", { className: `sl-mb-3 sl-text-${getHttpCodeColor(response.status)}` }, `${response.status} ${(_a = HttpCodeDescriptions[response.status]) !== null && _a !== void 0 ? _a : ''}`),
|
|
2483
|
-
response.bodyText && responseType && ['json', 'xml', 'text'].includes(responseType) ? (React.createElement(ResponseCodeViewer, { language: "json", value: responseType && bodyFormat === 'preview'
|
|
2541
|
+
response.bodyText && responseType && ['json', 'xml', 'text'].includes(responseType) ? (React.createElement(ResponseCodeViewer, { language: "json", value: responseType && bodyFormat === 'preview' && !response.skipBodyParsing
|
|
2484
2542
|
? parseBody(response.bodyText, responseType)
|
|
2485
2543
|
: response.bodyText })) : response.blob && responseType === 'image' ? (React.createElement(Flex, { justifyContent: "center" },
|
|
2486
2544
|
React.createElement(Image, { src: URL.createObjectURL(response.blob), alt: "response image" }))) : !response.bodyText ? null : (React.createElement("p", null,
|
|
@@ -2662,6 +2720,7 @@ const TryIt = ({ httpOperation, mockUrl, onRequestChange, requestBodyIndex, embe
|
|
|
2662
2720
|
embeddedInMd,
|
|
2663
2721
|
]);
|
|
2664
2722
|
const handleSendRequest = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
2723
|
+
var _g, _h, _j;
|
|
2665
2724
|
setValidateParameters(true);
|
|
2666
2725
|
if (hasRequiredButEmptyParameters || !isHttpOperation(httpOperation))
|
|
2667
2726
|
return;
|
|
@@ -2694,14 +2753,29 @@ const TryIt = ({ httpOperation, mockUrl, onRequestChange, requestBodyIndex, embe
|
|
|
2694
2753
|
if (response) {
|
|
2695
2754
|
const contentType = response.headers.get('Content-Type');
|
|
2696
2755
|
const type = contentType ? getResponseType(contentType) : undefined;
|
|
2697
|
-
|
|
2756
|
+
let bodyText = type !== 'image' ? yield response.text() : undefined;
|
|
2698
2757
|
const blob = type === 'image' ? yield response.blob() : undefined;
|
|
2758
|
+
let skipBodyParsing = false;
|
|
2759
|
+
if (mockData && type === 'json' && bodyText) {
|
|
2760
|
+
const responseMediaType = contentType === null || contentType === void 0 ? void 0 : contentType.split(';')[0];
|
|
2761
|
+
const responseSchema = (_j = (_h = (_g = httpOperation.responses
|
|
2762
|
+
.find(({ code }) => code === String(response === null || response === void 0 ? void 0 : response.status))) === null || _g === void 0 ? void 0 : _g.contents) === null || _h === void 0 ? void 0 : _h.find(({ mediaType }) => mediaType === responseMediaType)) === null || _j === void 0 ? void 0 : _j.schema;
|
|
2763
|
+
if (responseSchema) {
|
|
2764
|
+
try {
|
|
2765
|
+
bodyText = stringifyExampleWithResolvedSchema(JSON.parse(bodyText), responseSchema);
|
|
2766
|
+
skipBodyParsing = true;
|
|
2767
|
+
}
|
|
2768
|
+
catch (_k) {
|
|
2769
|
+
}
|
|
2770
|
+
}
|
|
2771
|
+
}
|
|
2699
2772
|
setResponse(undefined);
|
|
2700
2773
|
setResponse({
|
|
2701
2774
|
status: response.status,
|
|
2702
2775
|
bodyText,
|
|
2703
2776
|
blob,
|
|
2704
2777
|
contentType,
|
|
2778
|
+
skipBodyParsing,
|
|
2705
2779
|
});
|
|
2706
2780
|
}
|
|
2707
2781
|
}
|