@stoplight/elements-core 9.0.8 → 9.0.10
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/Docs/Docs.d.ts +14 -1
- package/components/Docs/HttpOperation/Body.d.ts +9 -1
- package/components/Docs/HttpOperation/HttpOperation.d.ts +6 -2
- package/components/Docs/HttpOperation/LazySchemaTreePreviewer.d.ts +34 -0
- package/components/Docs/HttpOperation/Request.d.ts +6 -0
- package/components/Docs/HttpOperation/Responses.d.ts +12 -1
- package/index.d.ts +2 -2
- package/index.esm.js +459 -23
- package/index.js +459 -23
- package/index.mjs +459 -23
- package/package.json +4 -4
- package/styles.min.css +1 -1
package/index.js
CHANGED
|
@@ -136,6 +136,8 @@ const isResolvedObjectProxy = (someObject) => {
|
|
|
136
136
|
return !!someObject[originalObjectSymbol];
|
|
137
137
|
};
|
|
138
138
|
const getOriginalObject = (resolvedObject) => {
|
|
139
|
+
if (!resolvedObject)
|
|
140
|
+
return resolvedObject;
|
|
139
141
|
const originalObject = resolvedObject[originalObjectSymbol] || resolvedObject;
|
|
140
142
|
if (!originalObject) {
|
|
141
143
|
return resolvedObject;
|
|
@@ -728,7 +730,12 @@ const convertRequestToSample = (language, library, request) => tslib.__awaiter(v
|
|
|
728
730
|
converted = converted || null;
|
|
729
731
|
}
|
|
730
732
|
if (typeof converted === 'string') {
|
|
731
|
-
|
|
733
|
+
const urlRegex = /(https?:\/\/[^\s'"]+)/g;
|
|
734
|
+
converted = converted.replace(urlRegex, url => {
|
|
735
|
+
const [pathPart, queryPart] = url.split('?', 2);
|
|
736
|
+
const decodedPath = pathPart.replace(/%7B/g, '{').replace(/%7D/g, '}');
|
|
737
|
+
return queryPart ? `${decodedPath}?${queryPart}` : decodedPath;
|
|
738
|
+
});
|
|
732
739
|
if (language === 'shell' && library === 'curl') {
|
|
733
740
|
const isUrlEncoded = (_a = request === null || request === void 0 ? void 0 : request.headers) === null || _a === void 0 ? void 0 : _a.some(header => header.name.toLowerCase() === 'content-type' && header.value === 'application/x-www-form-urlencoded');
|
|
734
741
|
if (isUrlEncoded) {
|
|
@@ -2756,13 +2763,358 @@ const PanelContent = ({ schemes }) => {
|
|
|
2756
2763
|
})));
|
|
2757
2764
|
};
|
|
2758
2765
|
|
|
2766
|
+
const TYPES = ['string', 'integer', 'boolean', 'any', 'number'];
|
|
2767
|
+
function resolvePointer(obj, pointer) {
|
|
2768
|
+
const parts = pointer.replace(/^#\//, '').split('/');
|
|
2769
|
+
return parts.reduce((acc, key) => acc && acc[key], obj);
|
|
2770
|
+
}
|
|
2771
|
+
function detectCircularPath(path) {
|
|
2772
|
+
const ignored = ['properties', 'items'];
|
|
2773
|
+
const parts = path.split('/').filter(part => !ignored.includes(part));
|
|
2774
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
2775
|
+
const current = parts[i];
|
|
2776
|
+
const rest = parts.slice(i + 1);
|
|
2777
|
+
if (rest.includes(current)) {
|
|
2778
|
+
return true;
|
|
2779
|
+
}
|
|
2780
|
+
}
|
|
2781
|
+
return false;
|
|
2782
|
+
}
|
|
2783
|
+
function dereference(node, root, visited = new WeakSet(), depth = 0, maxDepth = 10) {
|
|
2784
|
+
if (!node || typeof node !== 'object')
|
|
2785
|
+
return node;
|
|
2786
|
+
if (depth > maxDepth)
|
|
2787
|
+
return node;
|
|
2788
|
+
if (node.$ref || node['x-iata-$ref']) {
|
|
2789
|
+
let refPath = node.$ref || node['x-iata-$ref'];
|
|
2790
|
+
if (refPath.includes('#/%24defs')) {
|
|
2791
|
+
refPath = refPath.replace('#/%24defs', '$defs');
|
|
2792
|
+
}
|
|
2793
|
+
else {
|
|
2794
|
+
refPath = refPath.replace('__bundled__', 'definitions');
|
|
2795
|
+
}
|
|
2796
|
+
if (visited.has(node))
|
|
2797
|
+
return { circular: true, $ref: refPath, title: node.title, type: 'any', description: node.description };
|
|
2798
|
+
visited.add(node);
|
|
2799
|
+
const target = resolvePointer(root, refPath);
|
|
2800
|
+
if (!target)
|
|
2801
|
+
return node;
|
|
2802
|
+
const result = Object.assign({}, target);
|
|
2803
|
+
if ('description' in node)
|
|
2804
|
+
result.description = node.description;
|
|
2805
|
+
if ('title' in node)
|
|
2806
|
+
result.title = node.title;
|
|
2807
|
+
return dereference(result, root, visited, depth + 1, maxDepth);
|
|
2808
|
+
}
|
|
2809
|
+
if (Array.isArray(node)) {
|
|
2810
|
+
return node.map(item => dereference(item, root, visited, depth + 1, maxDepth));
|
|
2811
|
+
}
|
|
2812
|
+
const result = {};
|
|
2813
|
+
for (const key in node) {
|
|
2814
|
+
result[key] = dereference(node[key], root, visited, depth + 1, maxDepth);
|
|
2815
|
+
}
|
|
2816
|
+
return result;
|
|
2817
|
+
}
|
|
2818
|
+
const trimSlashes = (str) => {
|
|
2819
|
+
return str.replace(/^\/|\/$/g, '');
|
|
2820
|
+
};
|
|
2821
|
+
function isPropertiesAllHidden(path, hideData) {
|
|
2822
|
+
const current = trimSlashes(path);
|
|
2823
|
+
const parts = current.split('/');
|
|
2824
|
+
for (let i = parts.length; i >= 2; i--) {
|
|
2825
|
+
if (parts[i - 1] === 'properties') {
|
|
2826
|
+
const ancestorPropPath = parts.slice(0, i).join('/');
|
|
2827
|
+
const block = hideData.find(h => trimSlashes(h.path) === ancestorPropPath && ancestorPropPath.endsWith('/properties'));
|
|
2828
|
+
if (block && block.required === undefined) {
|
|
2829
|
+
return true;
|
|
2830
|
+
}
|
|
2831
|
+
}
|
|
2832
|
+
}
|
|
2833
|
+
return false;
|
|
2834
|
+
}
|
|
2835
|
+
function isRequiredOverride(path, hideData) {
|
|
2836
|
+
const entry = hideData.find(h => trimSlashes(h.path) === trimSlashes(path));
|
|
2837
|
+
return entry && typeof entry.required === 'boolean' ? entry.required : undefined;
|
|
2838
|
+
}
|
|
2839
|
+
function isPathHidden(path, hideData, complexData) {
|
|
2840
|
+
const isComplex = checkIfIsComplex(path, complexData);
|
|
2841
|
+
if (isComplex === null) {
|
|
2842
|
+
return false;
|
|
2843
|
+
}
|
|
2844
|
+
else if (isComplex) {
|
|
2845
|
+
const normalizedPath = trimSlashes(path);
|
|
2846
|
+
const direct = hideData.find(h => trimSlashes(h.path) === normalizedPath);
|
|
2847
|
+
if (direct && direct.required === undefined)
|
|
2848
|
+
return true;
|
|
2849
|
+
if (isPropertiesAllHidden(path, hideData))
|
|
2850
|
+
return true;
|
|
2851
|
+
for (const h of hideData) {
|
|
2852
|
+
const hPath = trimSlashes(h.path);
|
|
2853
|
+
if (h.required !== undefined)
|
|
2854
|
+
continue;
|
|
2855
|
+
if (normalizedPath.length > hPath.length &&
|
|
2856
|
+
normalizedPath.startsWith(hPath) &&
|
|
2857
|
+
(hPath.endsWith('/items') || (hPath.match(/\/items\/[^\/]+$/) && normalizedPath.startsWith(hPath + '/')))) {
|
|
2858
|
+
return true;
|
|
2859
|
+
}
|
|
2860
|
+
}
|
|
2861
|
+
return false;
|
|
2862
|
+
}
|
|
2863
|
+
else {
|
|
2864
|
+
return !hideData.some(h => h.path === path || h.path.startsWith(path + '/'));
|
|
2865
|
+
}
|
|
2866
|
+
}
|
|
2867
|
+
const checkIfIsComplex = (path, complexData) => {
|
|
2868
|
+
let isComplex = null;
|
|
2869
|
+
for (const complex of complexData) {
|
|
2870
|
+
if (path.startsWith(complex.location)) {
|
|
2871
|
+
isComplex = complex === null || complex === void 0 ? void 0 : complex.isComplex;
|
|
2872
|
+
break;
|
|
2873
|
+
}
|
|
2874
|
+
}
|
|
2875
|
+
return isComplex;
|
|
2876
|
+
};
|
|
2877
|
+
const LazySchemaTreePreviewer = ({ schema, root = schema, title, level = 1, path = '', hideData = [], complexData = [], parentRequired, propertyKey, _subType, }) => {
|
|
2878
|
+
var _a, _b, _c, _d;
|
|
2879
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
2880
|
+
const [selectedSchemaIndex, setSelectedSchemaIndex] = React.useState(0);
|
|
2881
|
+
const [showSchemaDropdown, setShowSchemaDropdown] = React.useState(false);
|
|
2882
|
+
const [isHoveringSelector, setIsHoveringSelector] = React.useState(false);
|
|
2883
|
+
const isRoot = level === 1 && (title === undefined || path === '');
|
|
2884
|
+
React.useEffect(() => {
|
|
2885
|
+
setSelectedSchemaIndex(0);
|
|
2886
|
+
}, [schema === null || schema === void 0 ? void 0 : schema.anyOf, schema === null || schema === void 0 ? void 0 : schema.oneOf]);
|
|
2887
|
+
const thisNodeRequiredOverride = isRequiredOverride(path, hideData);
|
|
2888
|
+
const shouldHideAllChildren = (isRoot && hideData.some(h => trimSlashes(h.path) === 'properties' && h.required === undefined)) ||
|
|
2889
|
+
(!isRoot && isPropertiesAllHidden(path, hideData));
|
|
2890
|
+
const shouldHideNode = React.useMemo(() => {
|
|
2891
|
+
if (isRoot)
|
|
2892
|
+
return false;
|
|
2893
|
+
if (isPathHidden(path, hideData, complexData) && thisNodeRequiredOverride === undefined)
|
|
2894
|
+
return true;
|
|
2895
|
+
return false;
|
|
2896
|
+
}, [path, hideData, isRoot, thisNodeRequiredOverride, complexData]);
|
|
2897
|
+
if (!schema || shouldHideNode) {
|
|
2898
|
+
return null;
|
|
2899
|
+
}
|
|
2900
|
+
const displayTitle = level === 1 && (title === undefined || path === '') ? '' : (_a = title !== null && title !== void 0 ? title : schema === null || schema === void 0 ? void 0 : schema.title) !== null && _a !== void 0 ? _a : 'Node';
|
|
2901
|
+
const handleToggle = () => {
|
|
2902
|
+
const circular = detectCircularPath(path);
|
|
2903
|
+
if (!circular) {
|
|
2904
|
+
setExpanded(prev => !prev);
|
|
2905
|
+
}
|
|
2906
|
+
};
|
|
2907
|
+
const renderChildren = () => {
|
|
2908
|
+
var _a, _b, _c, _d;
|
|
2909
|
+
if (shouldHideAllChildren)
|
|
2910
|
+
return null;
|
|
2911
|
+
if (!expanded && !isRoot)
|
|
2912
|
+
return null;
|
|
2913
|
+
const children = [];
|
|
2914
|
+
if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'object' && ((schema === null || schema === void 0 ? void 0 : schema.properties) || (schema === null || schema === void 0 ? void 0 : schema.allOf) || (schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf))) {
|
|
2915
|
+
let props = schema === null || schema === void 0 ? void 0 : schema.properties;
|
|
2916
|
+
if (schema === null || schema === void 0 ? void 0 : schema.allOf) {
|
|
2917
|
+
schema === null || schema === void 0 ? void 0 : schema.allOf.forEach((item) => {
|
|
2918
|
+
props = Object.assign(Object.assign({}, props), item.properties);
|
|
2919
|
+
});
|
|
2920
|
+
}
|
|
2921
|
+
if ((schema === null || schema === void 0 ? void 0 : schema.anyOf) && (schema === null || schema === void 0 ? void 0 : schema.anyOf.length) > 0) {
|
|
2922
|
+
const selectedSchema = (schema === null || schema === void 0 ? void 0 : schema.anyOf[selectedSchemaIndex]) || (schema === null || schema === void 0 ? void 0 : schema.anyOf[0]);
|
|
2923
|
+
props = Object.assign(Object.assign({}, props), selectedSchema.properties);
|
|
2924
|
+
}
|
|
2925
|
+
if ((schema === null || schema === void 0 ? void 0 : schema.oneOf) && (schema === null || schema === void 0 ? void 0 : schema.oneOf.length) > 0) {
|
|
2926
|
+
const selectedSchema = (schema === null || schema === void 0 ? void 0 : schema.oneOf[selectedSchemaIndex]) || (schema === null || schema === void 0 ? void 0 : schema.oneOf[0]);
|
|
2927
|
+
props = Object.assign(Object.assign({}, props), selectedSchema.properties);
|
|
2928
|
+
}
|
|
2929
|
+
for (const [key, child] of Object.entries(props || {})) {
|
|
2930
|
+
const childPath = `${path}/properties/${key}`;
|
|
2931
|
+
const childRequiredOverride = isRequiredOverride(childPath, hideData);
|
|
2932
|
+
const shouldHideChild = isPathHidden(childPath, hideData, complexData) && childRequiredOverride === undefined;
|
|
2933
|
+
const resolved = dereference(child, root);
|
|
2934
|
+
if (!shouldHideChild) {
|
|
2935
|
+
children.push(React.createElement("li", { key: key },
|
|
2936
|
+
React.createElement(LazySchemaTreePreviewer, { schema: resolved, root: root, title: key, level: level + 1, path: childPath, hideData: hideData, complexData: complexData, parentRequired: schema === null || schema === void 0 ? void 0 : schema.required, propertyKey: key, _subType: (_a = resolved === null || resolved === void 0 ? void 0 : resolved.items) === null || _a === void 0 ? void 0 : _a.type })));
|
|
2937
|
+
}
|
|
2938
|
+
}
|
|
2939
|
+
}
|
|
2940
|
+
else if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'array' &&
|
|
2941
|
+
(schema === null || schema === void 0 ? void 0 : schema.items) &&
|
|
2942
|
+
Object.keys(schema === null || schema === void 0 ? void 0 : schema.items).length > 0 &&
|
|
2943
|
+
!((_b = schema === null || schema === void 0 ? void 0 : schema.items) === null || _b === void 0 ? void 0 : _b.circular)) {
|
|
2944
|
+
const resolvedItems = dereference(schema === null || schema === void 0 ? void 0 : schema.items, root);
|
|
2945
|
+
const itemsPath = `${path}/items`;
|
|
2946
|
+
if (resolvedItems && resolvedItems.type === 'object' && resolvedItems.properties) {
|
|
2947
|
+
for (const [key, child] of Object.entries(resolvedItems.properties)) {
|
|
2948
|
+
const childPath = `${itemsPath}/properties/${key}`;
|
|
2949
|
+
const childRequiredOverride = isRequiredOverride(childPath, hideData);
|
|
2950
|
+
const shouldHideChild = isPathHidden(childPath, hideData, complexData) && childRequiredOverride === undefined;
|
|
2951
|
+
const resolved = dereference(child, root);
|
|
2952
|
+
if (!shouldHideChild) {
|
|
2953
|
+
children.push(React.createElement("li", { key: key },
|
|
2954
|
+
React.createElement(LazySchemaTreePreviewer, { schema: resolved, root: root, title: key, level: level + 2, path: childPath, hideData: hideData, complexData: complexData, parentRequired: resolvedItems.required, propertyKey: key, _subType: (_c = resolvedItems === null || resolvedItems === void 0 ? void 0 : resolvedItems.items) === null || _c === void 0 ? void 0 : _c.type })));
|
|
2955
|
+
}
|
|
2956
|
+
}
|
|
2957
|
+
}
|
|
2958
|
+
else if (resolvedItems && resolvedItems.type === 'array' && resolvedItems.items.length > 0) {
|
|
2959
|
+
const childPath = `${path}/items`;
|
|
2960
|
+
const childRequiredOverride = isRequiredOverride(childPath, hideData);
|
|
2961
|
+
const shouldHideChild = isPathHidden(childPath, hideData, complexData) && childRequiredOverride === undefined;
|
|
2962
|
+
if (!shouldHideChild) {
|
|
2963
|
+
children.push(React.createElement("li", { key: "items" },
|
|
2964
|
+
React.createElement(LazySchemaTreePreviewer, { schema: resolvedItems, root: root, title: "items", level: level + 1, path: childPath, hideData: hideData, complexData: complexData, parentRequired: schema === null || schema === void 0 ? void 0 : schema.required, propertyKey: "items", _subType: (_d = resolvedItems === null || resolvedItems === void 0 ? void 0 : resolvedItems.items) === null || _d === void 0 ? void 0 : _d.type })));
|
|
2965
|
+
}
|
|
2966
|
+
}
|
|
2967
|
+
}
|
|
2968
|
+
return children.length > 0 ? React.createElement("ul", { className: "ml-6 border-l border-gray-200 pl-2" }, children) : null;
|
|
2969
|
+
};
|
|
2970
|
+
const combinedSchemaSelector = () => {
|
|
2971
|
+
var _a;
|
|
2972
|
+
return (React.createElement(React.Fragment, null,
|
|
2973
|
+
React.createElement(mosaic.Box, { pos: "fixed", top: 0, left: 0, right: 0, bottom: 0, bg: "transparent", style: { zIndex: 999 }, onClick: () => setShowSchemaDropdown(false) }),
|
|
2974
|
+
React.createElement(mosaic.Box, { pos: "absolute", bg: "canvas", rounded: true, boxShadow: "md", style: {
|
|
2975
|
+
zIndex: 1000,
|
|
2976
|
+
top: '100%',
|
|
2977
|
+
left: 0,
|
|
2978
|
+
minWidth: '150px',
|
|
2979
|
+
maxWidth: '200px',
|
|
2980
|
+
marginTop: '2px',
|
|
2981
|
+
border: '1px solid rgba(0, 0, 0, 0.1)',
|
|
2982
|
+
}, fontSize: "sm", onClick: (e) => e.stopPropagation() }, (_a = ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf))) === null || _a === void 0 ? void 0 : _a.map((schemaOption, index) => (React.createElement(mosaic.Box, { key: index, px: 3, py: 2, cursor: "pointer", bg: selectedSchemaIndex === index ? 'primary-tint' : 'canvas', fontSize: "xs", display: "flex", alignItems: "center", style: {
|
|
2983
|
+
borderBottom: index < ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)).length - 1 ? '1px solid rgba(0, 0, 0, 0.1)' : 'none',
|
|
2984
|
+
gap: '8px',
|
|
2985
|
+
}, onMouseEnter: (e) => {
|
|
2986
|
+
if (selectedSchemaIndex !== index) {
|
|
2987
|
+
e.currentTarget.style.backgroundColor = 'var(--sl-color-canvas-tint)';
|
|
2988
|
+
}
|
|
2989
|
+
}, onMouseLeave: (e) => {
|
|
2990
|
+
if (selectedSchemaIndex !== index) {
|
|
2991
|
+
e.currentTarget.style.backgroundColor = 'var(--sl-color-canvas)';
|
|
2992
|
+
}
|
|
2993
|
+
}, onClick: () => {
|
|
2994
|
+
setSelectedSchemaIndex(index);
|
|
2995
|
+
setShowSchemaDropdown(false);
|
|
2996
|
+
} },
|
|
2997
|
+
React.createElement(mosaic.Box, { flex: 1, color: "body" }, schemaOption.type || 'object'),
|
|
2998
|
+
selectedSchemaIndex === index && (React.createElement(mosaic.Box, { color: "primary", fontSize: "xs" }, "\u2713"))))))));
|
|
2999
|
+
};
|
|
3000
|
+
const renderMinEnums = (schema) => {
|
|
3001
|
+
if (!schema || typeof schema !== 'object')
|
|
3002
|
+
return null;
|
|
3003
|
+
const boxStyle = {
|
|
3004
|
+
background: 'rgba(245, 247, 250, 0.5)',
|
|
3005
|
+
border: '1px solid #a0aec0',
|
|
3006
|
+
borderRadius: '4px',
|
|
3007
|
+
padding: '0px 2px',
|
|
3008
|
+
display: 'inline-block',
|
|
3009
|
+
overflowWrap: 'break-word',
|
|
3010
|
+
textAlign: 'left',
|
|
3011
|
+
maxWidth: 'fit-content',
|
|
3012
|
+
maxHeight: 'fit-content',
|
|
3013
|
+
};
|
|
3014
|
+
if ('minItems' in schema) {
|
|
3015
|
+
const schemaWithMinItems = schema;
|
|
3016
|
+
if (typeof schemaWithMinItems.minItems === 'number') {
|
|
3017
|
+
return (React.createElement(mosaic.Box, { className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: boxStyle }, `>=${schemaWithMinItems.minItems} items`));
|
|
3018
|
+
}
|
|
3019
|
+
}
|
|
3020
|
+
if ('enum' in schema && Array.isArray(schema.enum)) {
|
|
3021
|
+
return (React.createElement("div", null,
|
|
3022
|
+
"Allowed values:",
|
|
3023
|
+
' ',
|
|
3024
|
+
schema.enum.map((val, idx) => (React.createElement(mosaic.Box, { key: idx, className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: boxStyle }, val)))));
|
|
3025
|
+
}
|
|
3026
|
+
return null;
|
|
3027
|
+
};
|
|
3028
|
+
const isRequired = parentRequired && propertyKey && parentRequired.includes(propertyKey);
|
|
3029
|
+
let showRequiredLabel = false;
|
|
3030
|
+
const hideDataEntry = hideData.find(hideEntry => trimSlashes(hideEntry.path) === trimSlashes(path));
|
|
3031
|
+
if ((hideDataEntry === null || hideDataEntry === void 0 ? void 0 : hideDataEntry.required) === true || ((hideDataEntry === null || hideDataEntry === void 0 ? void 0 : hideDataEntry.required) === undefined && isRequired)) {
|
|
3032
|
+
showRequiredLabel = true;
|
|
3033
|
+
}
|
|
3034
|
+
if (schema === null || schema === void 0 ? void 0 : schema.$ref) {
|
|
3035
|
+
schema = dereference(schema, root);
|
|
3036
|
+
}
|
|
3037
|
+
return (React.createElement("div", { className: "mb-1" },
|
|
3038
|
+
React.createElement(mosaic.Flex, { maxW: "full", pl: 3, py: 2, "data-test": "schema-row", pos: "relative" },
|
|
3039
|
+
React.createElement(mosaic.VStack, { spacing: 1, maxW: "full", className: "w-full" },
|
|
3040
|
+
React.createElement(mosaic.Flex, { onClick: !isRoot ? handleToggle : undefined, className: `w-full ${isRoot ? '' : 'cursor-pointer'}` },
|
|
3041
|
+
!isRoot ? (React.createElement(mosaic.Box, { mr: 2, className: "sl-font-mono sl-font-semibold sl-mr-2" },
|
|
3042
|
+
!TYPES.includes(schema === null || schema === void 0 ? void 0 : schema.type) &&
|
|
3043
|
+
!detectCircularPath(path) &&
|
|
3044
|
+
!((_b = schema === null || schema === void 0 ? void 0 : schema.items) === null || _b === void 0 ? void 0 : _b.circular) &&
|
|
3045
|
+
!(schema === null || schema === void 0 ? void 0 : schema.circular) ? (React.createElement("i", { role: "img", "aria-hidden": "true", className: `sl-icon fal ${expanded ? 'fa-chevron-down' : 'fa-chevron-right'} fa-fw fa-sm` })) : (React.createElement("span", { className: "sl-icon fal fa-fw fa-sm", "aria-hidden": "true" })),
|
|
3046
|
+
' ' + displayTitle)) : null,
|
|
3047
|
+
!isRoot ? (React.createElement(mosaic.Box, { mr: 2, pos: "relative" },
|
|
3048
|
+
React.createElement(mosaic.Box, { display: "inline-flex", alignItems: "center", onMouseEnter: () => {
|
|
3049
|
+
if ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)) {
|
|
3050
|
+
setIsHoveringSelector(true);
|
|
3051
|
+
}
|
|
3052
|
+
}, onMouseLeave: () => {
|
|
3053
|
+
if (!showSchemaDropdown) {
|
|
3054
|
+
setIsHoveringSelector(false);
|
|
3055
|
+
}
|
|
3056
|
+
}, onClick: (e) => {
|
|
3057
|
+
if ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)) {
|
|
3058
|
+
e.stopPropagation();
|
|
3059
|
+
setShowSchemaDropdown(prev => !prev);
|
|
3060
|
+
}
|
|
3061
|
+
}, style: {
|
|
3062
|
+
cursor: (schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf) ? 'pointer' : 'default',
|
|
3063
|
+
} },
|
|
3064
|
+
React.createElement("span", { className: "sl-truncate sl-text-muted" },
|
|
3065
|
+
(() => {
|
|
3066
|
+
let typeDisplay = (schema === null || schema === void 0 ? void 0 : schema.type) === 'object' && (schema === null || schema === void 0 ? void 0 : schema.title) ? schema === null || schema === void 0 ? void 0 : schema.title : (schema === null || schema === void 0 ? void 0 : schema.type) || (root === null || root === void 0 ? void 0 : root.title);
|
|
3067
|
+
if ((schema === null || schema === void 0 ? void 0 : schema.anyOf) && (schema === null || schema === void 0 ? void 0 : schema.anyOf.length) > 0) {
|
|
3068
|
+
return `any of ${typeDisplay}`;
|
|
3069
|
+
}
|
|
3070
|
+
else if ((schema === null || schema === void 0 ? void 0 : schema.oneOf) && (schema === null || schema === void 0 ? void 0 : schema.oneOf.length) > 0) {
|
|
3071
|
+
return `one of ${typeDisplay}`;
|
|
3072
|
+
}
|
|
3073
|
+
return typeDisplay;
|
|
3074
|
+
})(),
|
|
3075
|
+
(schema === null || schema === void 0 ? void 0 : schema.items) && ((_c = schema === null || schema === void 0 ? void 0 : schema.items) === null || _c === void 0 ? void 0 : _c.title) !== undefined ? ` [${(_d = schema === null || schema === void 0 ? void 0 : schema.items) === null || _d === void 0 ? void 0 : _d.title}] ` : null),
|
|
3076
|
+
((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)) && (React.createElement(mosaic.Box, { display: "inline-flex", alignItems: "center", ml: 1, style: {
|
|
3077
|
+
opacity: isHoveringSelector ? 1 : 0.6,
|
|
3078
|
+
transition: 'opacity 0.2s',
|
|
3079
|
+
} },
|
|
3080
|
+
React.createElement("i", { className: "sl-icon fas fa-chevron-down", style: {
|
|
3081
|
+
fontSize: '10px',
|
|
3082
|
+
opacity: 0.6,
|
|
3083
|
+
} })))),
|
|
3084
|
+
React.createElement("span", { className: "text-gray-500" }, (schema === null || schema === void 0 ? void 0 : schema.format) !== undefined ? `<${schema === null || schema === void 0 ? void 0 : schema.format}>` : null),
|
|
3085
|
+
((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)) && showSchemaDropdown && combinedSchemaSelector())) : null),
|
|
3086
|
+
React.createElement(mosaic.Flex, { pl: 1, w: "full", align: "start", direction: "col", style: { overflow: 'visible', paddingLeft: '20px' } },
|
|
3087
|
+
(schema === null || schema === void 0 ? void 0 : schema.description) && (React.createElement(mosaic.Box, { fontFamily: "ui", fontWeight: "light" },
|
|
3088
|
+
React.createElement("span", { className: "sl-prose sl-markdown-viewer", style: { fontSize: '12px' } }, schema === null || schema === void 0 ? void 0 : schema.description))),
|
|
3089
|
+
!isRoot && (schema === null || schema === void 0 ? void 0 : schema.examples) !== undefined && (React.createElement(mosaic.Flex, { align: "center", mb: 1, style: { flexWrap: 'wrap' } },
|
|
3090
|
+
React.createElement("span", { className: "text-gray-500", style: { marginRight: 8, flexShrink: 0 } }, "Example"),
|
|
3091
|
+
React.createElement(mosaic.Box, { className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: {
|
|
3092
|
+
background: 'rgba(245, 247, 250, 0.5)',
|
|
3093
|
+
border: '1px solid #a0aec0',
|
|
3094
|
+
borderRadius: '4px',
|
|
3095
|
+
padding: '4px 8px',
|
|
3096
|
+
display: 'inline-block',
|
|
3097
|
+
overflowWrap: 'break-word',
|
|
3098
|
+
textAlign: 'left',
|
|
3099
|
+
maxWidth: '530px',
|
|
3100
|
+
} }, JSON.stringify(schema === null || schema === void 0 ? void 0 : schema.examples))))),
|
|
3101
|
+
React.createElement(mosaic.Flex, { pl: 1, w: "full", align: "start", direction: "col", style: { overflow: 'visible', paddingLeft: '20px' } }, schema &&
|
|
3102
|
+
typeof schema === 'object' &&
|
|
3103
|
+
('minItems' in schema || 'enum' in schema) &&
|
|
3104
|
+
renderMinEnums(schema))),
|
|
3105
|
+
!isRoot && (React.createElement("label", { className: "inline-flex items-top ml-2" },
|
|
3106
|
+
React.createElement(mosaic.Box, { mr: 2, fontFamily: "ui", fontWeight: "normal" }, showRequiredLabel && (React.createElement("div", { className: "sl-ml-2 sl-text-warning" },
|
|
3107
|
+
React.createElement("span", { style: { marginLeft: '10px' } }, "required"))))))),
|
|
3108
|
+
renderChildren()));
|
|
3109
|
+
};
|
|
3110
|
+
|
|
2759
3111
|
const isBodyEmpty = (body) => {
|
|
2760
3112
|
if (!body)
|
|
2761
3113
|
return true;
|
|
2762
3114
|
const { contents = [], description } = body;
|
|
2763
3115
|
return contents.length === 0 && !(description === null || description === void 0 ? void 0 : description.trim());
|
|
2764
3116
|
};
|
|
2765
|
-
const Body = ({ body, onChange, isHttpWebhookOperation = false }) => {
|
|
3117
|
+
const Body = ({ body, onChange, isHttpWebhookOperation = false, disableProps }) => {
|
|
2766
3118
|
var _a;
|
|
2767
3119
|
const [refResolver, maxRefDepth] = useSchemaInlineRefResolver();
|
|
2768
3120
|
const [chosenContent, setChosenContent] = React__namespace.useState(0);
|
|
@@ -2775,13 +3127,36 @@ const Body = ({ body, onChange, isHttpWebhookOperation = false }) => {
|
|
|
2775
3127
|
const { contents = [], description } = body;
|
|
2776
3128
|
const schema = (_a = contents[chosenContent]) === null || _a === void 0 ? void 0 : _a.schema;
|
|
2777
3129
|
const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId: body.id, attr: 'description' });
|
|
3130
|
+
const getMaskProperties = () => {
|
|
3131
|
+
const disablePropsConfig = disableProps || [];
|
|
3132
|
+
const absolutePathsToHide = [];
|
|
3133
|
+
disablePropsConfig.forEach(configEntry => {
|
|
3134
|
+
const { location, paths, isComplex } = configEntry;
|
|
3135
|
+
if (paths.length === 0 && !isComplex) {
|
|
3136
|
+
absolutePathsToHide.push({ path: location });
|
|
3137
|
+
}
|
|
3138
|
+
else {
|
|
3139
|
+
paths.forEach((item) => {
|
|
3140
|
+
const fullPath = location === '#' ? item === null || item === void 0 ? void 0 : item.path : `${location}/${item.path}`;
|
|
3141
|
+
let object = { path: fullPath };
|
|
3142
|
+
if (item.hasOwnProperty('required')) {
|
|
3143
|
+
object = Object.assign(Object.assign({}, object), { required: item === null || item === void 0 ? void 0 : item.required });
|
|
3144
|
+
}
|
|
3145
|
+
absolutePathsToHide.push(object);
|
|
3146
|
+
});
|
|
3147
|
+
}
|
|
3148
|
+
});
|
|
3149
|
+
return absolutePathsToHide;
|
|
3150
|
+
};
|
|
3151
|
+
const shouldUseLazySchema = disableProps === null || disableProps === void 0 ? void 0 : disableProps.some(entry => entry.isComplex === true);
|
|
3152
|
+
console.log('!!!!! shouldUseLazySchema body!!!!', shouldUseLazySchema);
|
|
2778
3153
|
return (React__namespace.createElement(mosaic.VStack, { spacing: 6 },
|
|
2779
3154
|
React__namespace.createElement(SectionSubtitle, { title: "Body", id: "request-body" }, contents.length > 0 && (React__namespace.createElement(mosaic.Flex, { flex: 1, justify: "end" },
|
|
2780
3155
|
React__namespace.createElement(mosaic.Select, { "aria-label": "Request Body Content Type", value: String(chosenContent), onChange: value => setChosenContent(parseInt(String(value), 10)), options: contents.map((content, index) => ({ label: content.mediaType, value: index })), size: "sm" })))),
|
|
2781
3156
|
description && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
|
|
2782
3157
|
React__namespace.createElement(MarkdownViewer, { markdown: description }),
|
|
2783
3158
|
React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
|
|
2784
|
-
isJSONSchema(schema) && (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: refResolver, maxRefDepth: maxRefDepth, schema: getOriginalObject(schema), viewMode: isHttpWebhookOperation ? 'standalone' : 'write', renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))));
|
|
3159
|
+
schema && shouldUseLazySchema ? (React__namespace.createElement(LazySchemaTreePreviewer, { schema: schema, hideData: getMaskProperties(), complexData: disableProps })) : (isJSONSchema(schema) && (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: refResolver, maxRefDepth: maxRefDepth, schema: getOriginalObject(schema), viewMode: isHttpWebhookOperation ? 'standalone' : 'write', renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon })))));
|
|
2785
3160
|
};
|
|
2786
3161
|
Body.displayName = 'HttpOperation.Body';
|
|
2787
3162
|
|
|
@@ -2848,7 +3223,7 @@ const httpOperationParamsToSchema = ({ parameters, parameterType }) => {
|
|
|
2848
3223
|
return schema;
|
|
2849
3224
|
};
|
|
2850
3225
|
|
|
2851
|
-
const Request = ({ operation: { request, request: { path: pathParams = [], headers: headerParams = [], cookie: cookieParams = [], body, query: queryParams = [], } = {}, security, }, hideSecurityInfo, onChange, isHttpWebhookOperation = false, }) => {
|
|
3226
|
+
const Request = ({ operation: { request, request: { path: pathParams = [], headers: headerParams = [], cookie: cookieParams = [], body, query: queryParams = [], } = {}, security, }, hideSecurityInfo, onChange, isHttpWebhookOperation = false, disableProps, }) => {
|
|
2852
3227
|
if (!request || typeof request !== 'object')
|
|
2853
3228
|
return null;
|
|
2854
3229
|
const bodyIsEmpty = isBodyEmpty(body);
|
|
@@ -2876,7 +3251,7 @@ const Request = ({ operation: { request, request: { path: pathParams = [], heade
|
|
|
2876
3251
|
cookieParams.length > 0 && (React__namespace.createElement(mosaic.VStack, { spacing: 5 },
|
|
2877
3252
|
React__namespace.createElement(SectionSubtitle, { title: "Cookies", id: "request-cookies" }),
|
|
2878
3253
|
React__namespace.createElement(Parameters, { parameterType: "cookie", parameters: cookieParams }))),
|
|
2879
|
-
body && React__namespace.createElement(Body, { onChange: onChange, body: body, isHttpWebhookOperation: isHttpWebhookOperation })));
|
|
3254
|
+
body && (React__namespace.createElement(Body, { onChange: onChange, body: body, isHttpWebhookOperation: isHttpWebhookOperation, disableProps: disableProps }))));
|
|
2880
3255
|
};
|
|
2881
3256
|
Request.displayName = 'HttpOperation.Request';
|
|
2882
3257
|
const schemeExpandedState = utils.atomWithStorage('HttpOperation_security_expanded', {});
|
|
@@ -2907,7 +3282,7 @@ const OptionalMessage$1 = () => {
|
|
|
2907
3282
|
return React__namespace.createElement(mosaic.Callout, { appearance: "outline" }, OptionalSecurityMessage);
|
|
2908
3283
|
};
|
|
2909
3284
|
|
|
2910
|
-
const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, }) => {
|
|
3285
|
+
const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, disableProps, }) => {
|
|
2911
3286
|
var _a, _b;
|
|
2912
3287
|
const responses = sortBy(uniqBy(unsortedResponses, r => r.code), r => r.code);
|
|
2913
3288
|
const [activeResponseId, setActiveResponseId] = React__namespace.useState((_b = (_a = responses[0]) === null || _a === void 0 ? void 0 : _a.code) !== null && _b !== void 0 ? _b : '');
|
|
@@ -2940,11 +3315,12 @@ const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTy
|
|
|
2940
3315
|
const tabResponses = (React__namespace.createElement(mosaic.TabList, { density: "compact" }, responses.map(({ code }) => (React__namespace.createElement(mosaic.Tab, { key: code, id: code, intent: codeToIntentVal(code) }, code)))));
|
|
2941
3316
|
return (React__namespace.createElement(mosaic.VStack, { spacing: 8, as: mosaic.Tabs, selectedId: activeResponseId, onChange: setActiveResponseId, appearance: "pill" },
|
|
2942
3317
|
React__namespace.createElement(SectionTitle, { title: "Responses", isCompact: isCompact }, isCompact ? compactResponses : tabResponses),
|
|
2943
|
-
isCompact ? (React__namespace.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange })) : (React__namespace.createElement(mosaic.TabPanels, { p: 0 }, responses.map(response => (React__namespace.createElement(mosaic.TabPanel, { key: response.code, id: response.code },
|
|
2944
|
-
React__namespace.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange }))))))));
|
|
3318
|
+
isCompact ? (React__namespace.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange, disableProps: disableProps, statusCode: activeResponseId })) : (React__namespace.createElement(mosaic.TabPanels, { p: 0 }, responses.map(response => (React__namespace.createElement(mosaic.TabPanel, { key: response.code, id: response.code },
|
|
3319
|
+
React__namespace.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange, disableProps: disableProps, statusCode: response.code }))))))));
|
|
2945
3320
|
};
|
|
2946
3321
|
Responses.displayName = 'HttpOperation.Responses';
|
|
2947
|
-
const Response = ({ response, onMediaTypeChange }) => {
|
|
3322
|
+
const Response = ({ response, onMediaTypeChange, disableProps, statusCode }) => {
|
|
3323
|
+
var _a, _b;
|
|
2948
3324
|
const { contents = [], headers = [], description } = response;
|
|
2949
3325
|
const [chosenContent, setChosenContent] = React__namespace.useState(0);
|
|
2950
3326
|
const [refResolver, maxRefDepth] = useSchemaInlineRefResolver();
|
|
@@ -2955,6 +3331,29 @@ const Response = ({ response, onMediaTypeChange }) => {
|
|
|
2955
3331
|
responseContent && (onMediaTypeChange === null || onMediaTypeChange === void 0 ? void 0 : onMediaTypeChange(responseContent.mediaType));
|
|
2956
3332
|
}, [responseContent]);
|
|
2957
3333
|
const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId: response.id, attr: 'description' });
|
|
3334
|
+
const getMaskProperties = () => {
|
|
3335
|
+
if (!disableProps || !statusCode)
|
|
3336
|
+
return [];
|
|
3337
|
+
const configEntries = disableProps[statusCode] || [];
|
|
3338
|
+
const absolutePathsToHide = [];
|
|
3339
|
+
configEntries.forEach(({ location, paths, isComplex }) => {
|
|
3340
|
+
if (paths.length === 0 && !isComplex) {
|
|
3341
|
+
absolutePathsToHide.push({ path: location });
|
|
3342
|
+
}
|
|
3343
|
+
else {
|
|
3344
|
+
paths.forEach((item) => {
|
|
3345
|
+
const fullPath = location === '#' ? item === null || item === void 0 ? void 0 : item.path : `${location}/${item.path}`;
|
|
3346
|
+
let object = { path: fullPath };
|
|
3347
|
+
if (item.hasOwnProperty('required')) {
|
|
3348
|
+
object = Object.assign(Object.assign({}, object), { required: item === null || item === void 0 ? void 0 : item.required });
|
|
3349
|
+
}
|
|
3350
|
+
absolutePathsToHide.push(object);
|
|
3351
|
+
});
|
|
3352
|
+
}
|
|
3353
|
+
});
|
|
3354
|
+
return absolutePathsToHide;
|
|
3355
|
+
};
|
|
3356
|
+
const shouldUseLazySchema = (_b = (statusCode && ((_a = disableProps === null || disableProps === void 0 ? void 0 : disableProps[statusCode]) === null || _a === void 0 ? void 0 : _a.some(entry => entry.isComplex)))) !== null && _b !== void 0 ? _b : false;
|
|
2958
3357
|
return (React__namespace.createElement(mosaic.VStack, { spacing: 8, pt: 8 },
|
|
2959
3358
|
description && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
|
|
2960
3359
|
React__namespace.createElement(MarkdownViewer, { markdown: description }),
|
|
@@ -2966,7 +3365,7 @@ const Response = ({ response, onMediaTypeChange }) => {
|
|
|
2966
3365
|
React__namespace.createElement(SectionSubtitle, { title: "Body", id: "response-body" },
|
|
2967
3366
|
React__namespace.createElement(mosaic.Flex, { flex: 1, justify: "end" },
|
|
2968
3367
|
React__namespace.createElement(mosaic.Select, { "aria-label": "Response Body Content Type", value: String(chosenContent), onChange: value => setChosenContent(parseInt(String(value), 10)), options: contents.map((content, index) => ({ label: content.mediaType, value: index })), size: "sm" }))),
|
|
2969
|
-
schema && (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { schema: getOriginalObject(schema), resolveRef: refResolver, maxRefDepth: maxRefDepth, viewMode: "read", parentCrumbs: ['responses', response.code], renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))))));
|
|
3368
|
+
schema && shouldUseLazySchema ? (React__namespace.createElement(LazySchemaTreePreviewer, { schema: schema, path: "", hideData: getMaskProperties(), complexData: disableProps && statusCode ? disableProps[statusCode] : [] })) : (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { schema: getOriginalObject(schema), resolveRef: refResolver, maxRefDepth: maxRefDepth, viewMode: "read", parentCrumbs: ['responses', response.code], renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))))));
|
|
2970
3369
|
};
|
|
2971
3370
|
Response.displayName = 'HttpOperation.Response';
|
|
2972
3371
|
const codeToIntentVal = (code) => {
|
|
@@ -3015,7 +3414,7 @@ const Callback = ({ data, isCompact }) => {
|
|
|
3015
3414
|
};
|
|
3016
3415
|
Callbacks.displayName = 'HttpOperation.Callback';
|
|
3017
3416
|
|
|
3018
|
-
const HttpOperationComponent = React__namespace.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy }) => {
|
|
3417
|
+
const HttpOperationComponent = React__namespace.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy, disableProps }) => {
|
|
3019
3418
|
var _a;
|
|
3020
3419
|
const { nodeHasChanged } = useOptionsCtx();
|
|
3021
3420
|
const data = useResolvedObject(unresolvedData);
|
|
@@ -3046,11 +3445,11 @@ const HttpOperationComponent = React__namespace.memo(({ className, data: unresol
|
|
|
3046
3445
|
React__namespace.createElement(MarkdownViewer, { className: "HttpOperation__Description", markdown: data.description }),
|
|
3047
3446
|
React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
|
|
3048
3447
|
React__namespace.createElement(NodeVendorExtensions, { data: data }),
|
|
3049
|
-
React__namespace.createElement(Request, { onChange: setTextRequestBodyIndex, operation: data, hideSecurityInfo: layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideSecurityInfo, isHttpWebhookOperation: isHttpWebhookOperation(data) }),
|
|
3050
|
-
data.responses && (React__namespace.createElement(Responses, { responses: data.responses, onMediaTypeChange: setResponseMediaType, onStatusCodeChange: setResponseStatusCode, isCompact: isCompact })),
|
|
3448
|
+
React__namespace.createElement(Request, { onChange: setTextRequestBodyIndex, operation: data, hideSecurityInfo: layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideSecurityInfo, isHttpWebhookOperation: isHttpWebhookOperation(data), disableProps: disableProps === null || disableProps === void 0 ? void 0 : disableProps.request }),
|
|
3449
|
+
data.responses && (React__namespace.createElement(Responses, { responses: data.responses, onMediaTypeChange: setResponseMediaType, onStatusCodeChange: setResponseStatusCode, isCompact: isCompact, disableProps: disableProps === null || disableProps === void 0 ? void 0 : disableProps.response })),
|
|
3051
3450
|
((_a = data.callbacks) === null || _a === void 0 ? void 0 : _a.length) ? React__namespace.createElement(Callbacks, { callbacks: data.callbacks, isCompact: isCompact }) : null,
|
|
3052
3451
|
isCompact && tryItPanel));
|
|
3053
|
-
return (React__namespace.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('HttpOperation', className), header: header, left: description, right: !isCompact && tryItPanel }));
|
|
3452
|
+
return (React__namespace.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('HttpOperation', className), header: header, left: description, right: !(disableProps === null || disableProps === void 0 ? void 0 : disableProps.hideOperationTryIt) && !isCompact && tryItPanel }));
|
|
3054
3453
|
});
|
|
3055
3454
|
HttpOperationComponent.displayName = 'HttpOperation.Component';
|
|
3056
3455
|
const HttpOperation = reactErrorBoundary.withErrorBoundary(HttpOperationComponent, {
|
|
@@ -3301,7 +3700,7 @@ const HttpServiceComponent = React__namespace.memo(({ data: unresolvedData, loca
|
|
|
3301
3700
|
HttpServiceComponent.displayName = 'HttpService.Component';
|
|
3302
3701
|
const HttpService = reactErrorBoundary.withErrorBoundary(HttpServiceComponent, { recoverableProps: ['data'] });
|
|
3303
3702
|
|
|
3304
|
-
const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOptions, exportProps, }) => {
|
|
3703
|
+
const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOptions, exportProps, disableProps, }) => {
|
|
3305
3704
|
var _a, _b;
|
|
3306
3705
|
const [resolveRef, maxRefDepth] = useSchemaInlineRefResolver();
|
|
3307
3706
|
const data = useResolvedObject(unresolvedData);
|
|
@@ -3324,14 +3723,40 @@ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOpti
|
|
|
3324
3723
|
exportProps && !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideExport) && !isCompact && React__namespace.createElement(ExportButton, Object.assign({}, exportProps))));
|
|
3325
3724
|
const modelExamples = !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideModelExamples) && React__namespace.createElement(ModelExamples, { data: data, isCollapsible: isCompact });
|
|
3326
3725
|
const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId, attr: 'description' });
|
|
3726
|
+
const getMaskProperties = () => {
|
|
3727
|
+
const disablePropsConfig = disableProps === null || disableProps === void 0 ? void 0 : disableProps.models;
|
|
3728
|
+
const absolutePathsToHide = [];
|
|
3729
|
+
if (disableProps === null || disableProps === void 0 ? void 0 : disableProps.models) {
|
|
3730
|
+
disablePropsConfig.forEach((configEntry) => {
|
|
3731
|
+
const { location, paths, isComplex } = configEntry;
|
|
3732
|
+
if (paths.length === 0 && !isComplex) {
|
|
3733
|
+
absolutePathsToHide.push({ path: location });
|
|
3734
|
+
}
|
|
3735
|
+
else {
|
|
3736
|
+
paths.forEach((item) => {
|
|
3737
|
+
const fullPath = location === '#' ? item === null || item === void 0 ? void 0 : item.path : `${location}/${item.path}`;
|
|
3738
|
+
let object = { path: fullPath };
|
|
3739
|
+
if (item.hasOwnProperty('required')) {
|
|
3740
|
+
object = Object.assign(Object.assign({}, object), { required: item === null || item === void 0 ? void 0 : item.required });
|
|
3741
|
+
}
|
|
3742
|
+
absolutePathsToHide.push(object);
|
|
3743
|
+
});
|
|
3744
|
+
}
|
|
3745
|
+
});
|
|
3746
|
+
}
|
|
3747
|
+
return absolutePathsToHide;
|
|
3748
|
+
};
|
|
3749
|
+
const shouldUseLazySchema = disableProps && (disableProps === null || disableProps === void 0 ? void 0 : disableProps.models)
|
|
3750
|
+
? disableProps.models.some((entry) => entry.isComplex === true)
|
|
3751
|
+
: false;
|
|
3327
3752
|
const description = (React__namespace.createElement(mosaic.VStack, { spacing: 10 },
|
|
3328
3753
|
data.description && data.type === 'object' && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
|
|
3329
3754
|
React__namespace.createElement(MarkdownViewer, { role: "textbox", markdown: data.description }),
|
|
3330
3755
|
React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
|
|
3331
3756
|
React__namespace.createElement(NodeVendorExtensions, { data: data }),
|
|
3332
|
-
isCompact && modelExamples,
|
|
3333
|
-
React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: resolveRef, maxRefDepth: maxRefDepth, schema: getOriginalObject(data), nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon, skipTopLevelDescription: true })));
|
|
3334
|
-
return (React__namespace.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('Model', className), header: header, left: description, right: !isCompact && modelExamples }));
|
|
3757
|
+
!(disableProps === null || disableProps === void 0 ? void 0 : disableProps.hideModelTryIt) && isCompact && modelExamples,
|
|
3758
|
+
data && shouldUseLazySchema ? (React__namespace.createElement(LazySchemaTreePreviewer, { schema: data, hideData: getMaskProperties(), complexData: disableProps === null || disableProps === void 0 ? void 0 : disableProps.models })) : (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: resolveRef, maxRefDepth: maxRefDepth, schema: getOriginalObject(data), nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon, skipTopLevelDescription: true }))));
|
|
3759
|
+
return (React__namespace.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('Model', className), header: header, left: description, right: !(disableProps === null || disableProps === void 0 ? void 0 : disableProps.hideModelTryIt) && !isCompact && modelExamples }));
|
|
3335
3760
|
};
|
|
3336
3761
|
const ModelExamples = React__namespace.memo(({ data, isCollapsible = false }) => {
|
|
3337
3762
|
var _a;
|
|
@@ -3353,30 +3778,41 @@ const Model = reactErrorBoundary.withErrorBoundary(ModelComponent, { recoverable
|
|
|
3353
3778
|
|
|
3354
3779
|
const Docs = React__namespace.memo((_a) => {
|
|
3355
3780
|
var _b;
|
|
3356
|
-
var { nodeType, nodeData, useNodeForRefResolving = false, refResolver, maxRefDepth, nodeHasChanged, renderExtensionAddon } = _a, commonProps = tslib.__rest(_a, ["nodeType", "nodeData", "useNodeForRefResolving", "refResolver", "maxRefDepth", "nodeHasChanged", "renderExtensionAddon"]);
|
|
3781
|
+
var { nodeType, nodeData, disableProps, useNodeForRefResolving = false, refResolver, maxRefDepth, nodeHasChanged, renderExtensionAddon } = _a, commonProps = tslib.__rest(_a, ["nodeType", "nodeData", "disableProps", "useNodeForRefResolving", "refResolver", "maxRefDepth", "nodeHasChanged", "renderExtensionAddon"]);
|
|
3357
3782
|
const parsedNode = useParsedData(nodeType, nodeData);
|
|
3358
3783
|
if (!parsedNode) {
|
|
3359
3784
|
(_b = commonProps.nodeUnsupported) === null || _b === void 0 ? void 0 : _b.call(commonProps, 'dataEmpty');
|
|
3360
3785
|
return null;
|
|
3361
3786
|
}
|
|
3362
|
-
let elem = React__namespace.createElement(ParsedDocs, Object.assign({ node: parsedNode }, commonProps));
|
|
3787
|
+
let elem = React__namespace.createElement(ParsedDocs, Object.assign({ node: parsedNode, disableProps: disableProps }, commonProps));
|
|
3363
3788
|
if (useNodeForRefResolving) {
|
|
3364
3789
|
elem = (React__namespace.createElement(InlineRefResolverProvider, { document: parsedNode.data, resolver: refResolver, maxRefDepth: maxRefDepth }, elem));
|
|
3365
3790
|
}
|
|
3366
3791
|
return (React__namespace.createElement(ElementsOptionsProvider, { nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }, elem));
|
|
3367
3792
|
});
|
|
3793
|
+
const getTryItVisibility = (disableProps) => {
|
|
3794
|
+
var _a, _b, _c, _d;
|
|
3795
|
+
if (!disableProps)
|
|
3796
|
+
return { hideOperationTryIt: false, hideModelTryIt: false };
|
|
3797
|
+
const requestHasComplex = (_b = (_a = disableProps.request) === null || _a === void 0 ? void 0 : _a.some(item => item.isComplex)) !== null && _b !== void 0 ? _b : false;
|
|
3798
|
+
const responseHasComplex = Object.values(disableProps.response || {}).some(arr => arr.some(item => item.isComplex));
|
|
3799
|
+
const hideOperationTryIt = requestHasComplex || responseHasComplex;
|
|
3800
|
+
const hideModelTryIt = (_d = (_c = disableProps.models) === null || _c === void 0 ? void 0 : _c.some(item => item.isComplex)) !== null && _d !== void 0 ? _d : false;
|
|
3801
|
+
return { hideOperationTryIt, hideModelTryIt };
|
|
3802
|
+
};
|
|
3368
3803
|
const ParsedDocs = (_a) => {
|
|
3369
|
-
var { node, nodeUnsupported } = _a, commonProps = tslib.__rest(_a, ["node", "nodeUnsupported"]);
|
|
3804
|
+
var { node, nodeUnsupported, disableProps } = _a, commonProps = tslib.__rest(_a, ["node", "nodeUnsupported", "disableProps"]);
|
|
3805
|
+
const { hideOperationTryIt, hideModelTryIt } = getTryItVisibility(disableProps);
|
|
3370
3806
|
switch (node.type) {
|
|
3371
3807
|
case 'article':
|
|
3372
3808
|
return React__namespace.createElement(Article, Object.assign({ data: node.data }, commonProps));
|
|
3373
3809
|
case 'http_operation':
|
|
3374
3810
|
case 'http_webhook':
|
|
3375
|
-
return React__namespace.createElement(HttpOperation, Object.assign({ data: node.data }, commonProps));
|
|
3811
|
+
return React__namespace.createElement(HttpOperation, Object.assign({ data: node.data, disableProps: Object.assign(Object.assign({}, disableProps), { hideOperationTryIt }) }, commonProps));
|
|
3376
3812
|
case 'http_service':
|
|
3377
3813
|
return React__namespace.createElement(HttpService, Object.assign({ data: node.data }, commonProps));
|
|
3378
3814
|
case 'model':
|
|
3379
|
-
return React__namespace.createElement(Model, Object.assign({ data: node.data }, commonProps));
|
|
3815
|
+
return React__namespace.createElement(Model, Object.assign({ data: node.data, disableProps: Object.assign(Object.assign({}, disableProps), { hideModelTryIt }) }, commonProps));
|
|
3380
3816
|
default:
|
|
3381
3817
|
nodeUnsupported === null || nodeUnsupported === void 0 ? void 0 : nodeUnsupported('invalidType');
|
|
3382
3818
|
return null;
|