@stoplight/elements-core 7.3.11 → 7.4.0
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/HttpOperation/Badges.d.ts +0 -6
- package/components/Docs/HttpService/SecuritySchemes.d.ts +2 -2
- package/components/Docs/Sections.d.ts +4 -3
- package/components/MarkdownViewer/CustomComponents/CodeComponent.d.ts +2 -1
- package/components/MarkdownViewer/CustomComponents/Provider.d.ts +2 -2
- package/components/NonIdealState.d.ts +2 -2
- package/components/TryIt/Mocking/useMockingOptions.d.ts +1 -1
- package/index.d.ts +2 -1
- package/index.esm.js +199 -172
- package/index.js +260 -209
- package/index.mjs +199 -172
- package/package.json +3 -7
- package/styles.min.css +1 -1
- package/types.d.ts +1 -0
- package/utils/securitySchemes.d.ts +2 -0
package/index.js
CHANGED
|
@@ -5,7 +5,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var tslib = require('tslib');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var json = require('@stoplight/json');
|
|
8
|
-
var
|
|
8
|
+
var isArray = require('lodash/isArray.js');
|
|
9
|
+
var isObject = require('lodash/isObject.js');
|
|
10
|
+
var isPlainObject = require('lodash/isPlainObject.js');
|
|
9
11
|
var markdown = require('@stoplight/markdown');
|
|
10
12
|
var types = require('@stoplight/types');
|
|
11
13
|
var yaml = require('@stoplight/yaml');
|
|
@@ -13,23 +15,45 @@ var mosaic = require('@stoplight/mosaic');
|
|
|
13
15
|
var reactErrorBoundary = require('@stoplight/react-error-boundary');
|
|
14
16
|
var markdownViewer = require('@stoplight/markdown-viewer');
|
|
15
17
|
var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
|
|
16
|
-
var
|
|
18
|
+
var throttle = require('lodash/throttle.js');
|
|
17
19
|
var unistUtilSelect = require('unist-util-select');
|
|
18
20
|
var cn = require('classnames');
|
|
19
21
|
var jotai = require('jotai');
|
|
20
22
|
var URI = require('urijs');
|
|
21
23
|
var mosaicCodeViewer = require('@stoplight/mosaic-code-viewer');
|
|
22
24
|
var HTTPSnippet = require('httpsnippet');
|
|
25
|
+
var flatten = require('lodash/flatten.js');
|
|
26
|
+
var capitalize = require('lodash/capitalize.js');
|
|
27
|
+
var filter = require('lodash/filter.js');
|
|
23
28
|
var nanoid = require('nanoid');
|
|
29
|
+
var curry = require('lodash/curry.js');
|
|
30
|
+
var omit = require('lodash/omit.js');
|
|
31
|
+
var keyBy = require('lodash/keyBy.js');
|
|
32
|
+
var map = require('lodash/map.js');
|
|
33
|
+
var mapValues = require('lodash/mapValues.js');
|
|
34
|
+
var isString = require('lodash/isString.js');
|
|
35
|
+
var pickBy = require('lodash/pickBy.js');
|
|
24
36
|
var mosaicCodeEditor = require('@stoplight/mosaic-code-editor');
|
|
25
37
|
var Sampler = require('@stoplight/json-schema-sampler');
|
|
38
|
+
var compact = require('lodash/compact.js');
|
|
39
|
+
var uniq = require('lodash/uniq.js');
|
|
40
|
+
var orderBy = require('lodash/orderBy.js');
|
|
41
|
+
var uniqBy = require('lodash/uniqBy.js');
|
|
26
42
|
var formatXml = require('xml-formatter');
|
|
27
|
-
var
|
|
43
|
+
var utils = require('jotai/utils');
|
|
44
|
+
var entries = require('lodash/entries.js');
|
|
45
|
+
var keys = require('lodash/keys.js');
|
|
28
46
|
var jsonSchemaViewer = require('@stoplight/json-schema-viewer');
|
|
47
|
+
var get = require('lodash/get.js');
|
|
48
|
+
var isEmpty = require('lodash/isEmpty.js');
|
|
49
|
+
var omitBy = require('lodash/omitBy.js');
|
|
50
|
+
var sortBy = require('lodash/sortBy.js');
|
|
51
|
+
var reactRouterDom = require('react-router-dom');
|
|
29
52
|
var reactRouterHashLink = require('react-router-hash-link');
|
|
30
53
|
var reactQuery = require('react-query');
|
|
31
54
|
var $RefParser = require('@stoplight/json-schema-ref-parser');
|
|
32
55
|
var PropTypes = require('prop-types');
|
|
56
|
+
var isEqual = require('lodash/isEqual.js');
|
|
33
57
|
var ReactDOM = require('react-dom');
|
|
34
58
|
|
|
35
59
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -54,14 +78,38 @@ function _interopNamespace(e) {
|
|
|
54
78
|
|
|
55
79
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
56
80
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
57
|
-
var
|
|
81
|
+
var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
|
|
82
|
+
var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
|
|
83
|
+
var isPlainObject__default = /*#__PURE__*/_interopDefaultLegacy(isPlainObject);
|
|
84
|
+
var throttle__default = /*#__PURE__*/_interopDefaultLegacy(throttle);
|
|
58
85
|
var cn__default = /*#__PURE__*/_interopDefaultLegacy(cn);
|
|
59
86
|
var URI__default = /*#__PURE__*/_interopDefaultLegacy(URI);
|
|
60
87
|
var HTTPSnippet__default = /*#__PURE__*/_interopDefaultLegacy(HTTPSnippet);
|
|
88
|
+
var flatten__default = /*#__PURE__*/_interopDefaultLegacy(flatten);
|
|
89
|
+
var capitalize__default = /*#__PURE__*/_interopDefaultLegacy(capitalize);
|
|
90
|
+
var filter__default = /*#__PURE__*/_interopDefaultLegacy(filter);
|
|
91
|
+
var curry__default = /*#__PURE__*/_interopDefaultLegacy(curry);
|
|
92
|
+
var omit__default = /*#__PURE__*/_interopDefaultLegacy(omit);
|
|
93
|
+
var keyBy__default = /*#__PURE__*/_interopDefaultLegacy(keyBy);
|
|
94
|
+
var map__default = /*#__PURE__*/_interopDefaultLegacy(map);
|
|
95
|
+
var mapValues__default = /*#__PURE__*/_interopDefaultLegacy(mapValues);
|
|
96
|
+
var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
|
|
97
|
+
var pickBy__default = /*#__PURE__*/_interopDefaultLegacy(pickBy);
|
|
61
98
|
var Sampler__namespace = /*#__PURE__*/_interopNamespace(Sampler);
|
|
99
|
+
var compact__default = /*#__PURE__*/_interopDefaultLegacy(compact);
|
|
100
|
+
var uniq__default = /*#__PURE__*/_interopDefaultLegacy(uniq);
|
|
101
|
+
var orderBy__default = /*#__PURE__*/_interopDefaultLegacy(orderBy);
|
|
102
|
+
var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
|
|
62
103
|
var formatXml__default = /*#__PURE__*/_interopDefaultLegacy(formatXml);
|
|
104
|
+
var entries__default = /*#__PURE__*/_interopDefaultLegacy(entries);
|
|
105
|
+
var keys__default = /*#__PURE__*/_interopDefaultLegacy(keys);
|
|
106
|
+
var get__default = /*#__PURE__*/_interopDefaultLegacy(get);
|
|
107
|
+
var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
|
|
108
|
+
var omitBy__default = /*#__PURE__*/_interopDefaultLegacy(omitBy);
|
|
109
|
+
var sortBy__default = /*#__PURE__*/_interopDefaultLegacy(sortBy);
|
|
63
110
|
var $RefParser__default = /*#__PURE__*/_interopDefaultLegacy($RefParser);
|
|
64
111
|
var PropTypes__namespace = /*#__PURE__*/_interopNamespace(PropTypes);
|
|
112
|
+
var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
|
|
65
113
|
var ReactDOM__namespace = /*#__PURE__*/_interopNamespace(ReactDOM);
|
|
66
114
|
|
|
67
115
|
const defaultResolver = (contextObject) => ({ pointer }, _, currentObject) => {
|
|
@@ -107,7 +155,7 @@ const recursivelyCreateResolvedObject = (currentObject, rootCurrentObject, prope
|
|
|
107
155
|
else {
|
|
108
156
|
resolvedValue = value;
|
|
109
157
|
}
|
|
110
|
-
if (
|
|
158
|
+
if (isPlainObject__default["default"](resolvedValue) || isArray__default["default"](resolvedValue)) {
|
|
111
159
|
return recursivelyCreateResolvedObject(resolvedValue, rootCurrentObject, newPropertyPath, objectToProxiedObjectCache, mergedOptions);
|
|
112
160
|
}
|
|
113
161
|
return resolvedValue;
|
|
@@ -122,7 +170,7 @@ const isResolvedObjectProxy = (someObject) => {
|
|
|
122
170
|
const getOriginalObject = (resolvedObject) => {
|
|
123
171
|
return resolvedObject[originalObjectSymbol] || resolvedObject;
|
|
124
172
|
};
|
|
125
|
-
const isReference = (value) =>
|
|
173
|
+
const isReference = (value) => isObject__default["default"](value) && typeof value['$ref'] === 'string';
|
|
126
174
|
|
|
127
175
|
const InlineRefResolverContext = React__namespace.createContext(undefined);
|
|
128
176
|
InlineRefResolverContext.displayName = 'InlineRefResolverContext';
|
|
@@ -143,13 +191,13 @@ const useResolvedObject = (currentObject) => {
|
|
|
143
191
|
};
|
|
144
192
|
|
|
145
193
|
function isSMDASTRoot(maybeAst) {
|
|
146
|
-
return
|
|
194
|
+
return isObject__default["default"](maybeAst) && maybeAst['type'] === 'root' && mosaic.isArray(maybeAst['children']);
|
|
147
195
|
}
|
|
148
196
|
function isJSONSchema(maybeSchema) {
|
|
149
|
-
return
|
|
197
|
+
return isPlainObject__default["default"](maybeSchema);
|
|
150
198
|
}
|
|
151
199
|
function isStoplightNode(maybeNode) {
|
|
152
|
-
return
|
|
200
|
+
return isObject__default["default"](maybeNode) && 'id' in maybeNode;
|
|
153
201
|
}
|
|
154
202
|
function isHttpService(maybeHttpService) {
|
|
155
203
|
return isStoplightNode(maybeHttpService) && 'name' in maybeHttpService && 'version' in maybeHttpService;
|
|
@@ -247,7 +295,7 @@ function useComponentSize(container) {
|
|
|
247
295
|
if (!container) {
|
|
248
296
|
return;
|
|
249
297
|
}
|
|
250
|
-
const updateComponentSize =
|
|
298
|
+
const updateComponentSize = throttle__default["default"](() => (container ? setComponentSize(container.getBoundingClientRect()) : { width: 0, height: 0 }), 1000, {
|
|
251
299
|
trailing: true,
|
|
252
300
|
});
|
|
253
301
|
updateComponentSize();
|
|
@@ -296,15 +344,15 @@ const ArticleHeadings = ({ tree, container }) => {
|
|
|
296
344
|
const { width } = useComponentSize(container);
|
|
297
345
|
const showHeadings = width >= 768;
|
|
298
346
|
const headings = useComputeMarkdownHeadings(tree);
|
|
299
|
-
return React__namespace.createElement(Headings, { className: "ArticleHeadings", headings: headings, minimal: !showHeadings });
|
|
347
|
+
return React__namespace.createElement(Headings, { className: "ArticleHeadings", headings: headings, minimal: !showHeadings, maxWidth: 300 });
|
|
300
348
|
};
|
|
301
|
-
const Headings = ({ headings, className, title = 'On This Page', minimal }) => {
|
|
349
|
+
const Headings = ({ headings, className, title = 'On This Page', minimal, maxWidth }) => {
|
|
302
350
|
const locationHash = useLocationHash();
|
|
303
351
|
if (!headings || !headings.length)
|
|
304
352
|
return null;
|
|
305
|
-
const component = (React__namespace.createElement("
|
|
353
|
+
const component = (React__namespace.createElement(mosaic.Box, { overflowY: "auto", style: { maxHeight: '85vh', maxWidth } },
|
|
306
354
|
title && (React__namespace.createElement(mosaic.Flex, { py: 2, alignItems: "center", fontSize: "sm", fontWeight: "medium", color: "muted", style: { paddingLeft: 18 } },
|
|
307
|
-
React__namespace.createElement(
|
|
355
|
+
React__namespace.createElement(mosaic.Box, { as: mosaic.Icon, icon: freeSolidSvgIcons.faStream, mr: 2 }),
|
|
308
356
|
title)),
|
|
309
357
|
headings.map((heading, i) => (React__namespace.createElement(Heading, { key: i, item: heading, isSelected: locationHash === `#${heading.id}` })))));
|
|
310
358
|
if (minimal) {
|
|
@@ -324,7 +372,7 @@ const ArticleComponent = React__namespace.memo(({ data }) => {
|
|
|
324
372
|
const tree = React__namespace.useMemo(() => (typeof data === 'object' ? data : markdown.parse(data)), [data]);
|
|
325
373
|
if (tree === null)
|
|
326
374
|
return null;
|
|
327
|
-
return (React__namespace.createElement(mosaic.Flex, { className: "sl-elements-article", w: "full", pos: "relative", ref: setContainer },
|
|
375
|
+
return (React__namespace.createElement(mosaic.Flex, { className: "sl-elements-article", justifyContent: "evenly", w: "full", pos: "relative", ref: setContainer },
|
|
328
376
|
React__namespace.createElement(mosaic.Box, { className: "sl-elements-article-content", style: { width: 0 }, flex: 1 },
|
|
329
377
|
React__namespace.createElement(MarkdownViewer, { markdown: tree })),
|
|
330
378
|
React__namespace.createElement(ArticleHeadings, { tree: tree, container: container })));
|
|
@@ -345,38 +393,6 @@ function createNamedContext(name, defaultValue) {
|
|
|
345
393
|
return context;
|
|
346
394
|
}
|
|
347
395
|
|
|
348
|
-
function getReadableSecurityName(securityScheme, includeKey = false) {
|
|
349
|
-
let name = '';
|
|
350
|
-
switch (securityScheme.type) {
|
|
351
|
-
case 'apiKey':
|
|
352
|
-
name = 'API Key';
|
|
353
|
-
break;
|
|
354
|
-
case 'http':
|
|
355
|
-
name = `${_.capitalize(securityScheme.scheme)} Auth`;
|
|
356
|
-
break;
|
|
357
|
-
case 'oauth2':
|
|
358
|
-
name = 'OAuth 2.0';
|
|
359
|
-
break;
|
|
360
|
-
case 'openIdConnect':
|
|
361
|
-
name = 'OpenID Connect';
|
|
362
|
-
break;
|
|
363
|
-
case 'mutualTLS':
|
|
364
|
-
name = 'Mutual TLS';
|
|
365
|
-
break;
|
|
366
|
-
}
|
|
367
|
-
return includeKey ? `${name} (${securityScheme.key})` : name;
|
|
368
|
-
}
|
|
369
|
-
function getServiceUriFromOperation(uri) {
|
|
370
|
-
const match = uri === null || uri === void 0 ? void 0 : uri.match(/(.*)\/(paths|operations)/);
|
|
371
|
-
return match && match.length > 1 ? match[1] || '/' : undefined;
|
|
372
|
-
}
|
|
373
|
-
const isOAuth2ImplicitFlow = (maybeFlow) => _.isObject(maybeFlow) && 'authorizationUrl' in maybeFlow && !('tokenUrl' in maybeFlow);
|
|
374
|
-
const isOauth2AuthorizationCodeFlow = (maybeFlow) => _.isObject(maybeFlow) && 'authorizationUrl' in maybeFlow && 'tokenUrl' in maybeFlow;
|
|
375
|
-
const isOauth2ClientCredentialsOrPasswordFlow = (maybeFlow) => _.isObject(maybeFlow) && !('authorizationUrl' in maybeFlow) && 'tokenUrl' in maybeFlow;
|
|
376
|
-
function shouldIncludeKey(schemes, type) {
|
|
377
|
-
return _.filter(schemes, { type }).length > 1;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
396
|
const NodeTypeColors = {
|
|
381
397
|
http_operation: '#6a6acb',
|
|
382
398
|
http_service: '#e056fd',
|
|
@@ -765,6 +781,34 @@ const RequestSamples = React__default["default"].memo(({ request, embeddedInMd =
|
|
|
765
781
|
React__default["default"].createElement(mosaicCodeViewer.CodeViewer, { "aria-label": requestSample !== null && requestSample !== void 0 ? requestSample : fallbackText, noCopyButton: true, maxHeight: "400px", language: mosaicCodeViewerLanguage, value: requestSample || fallbackText }))));
|
|
766
782
|
});
|
|
767
783
|
|
|
784
|
+
function getReadableSecurityName(securityScheme, includeKey = false) {
|
|
785
|
+
let name = '';
|
|
786
|
+
switch (securityScheme.type) {
|
|
787
|
+
case 'apiKey':
|
|
788
|
+
name = 'API Key';
|
|
789
|
+
break;
|
|
790
|
+
case 'http':
|
|
791
|
+
name = `${capitalize__default["default"](securityScheme.scheme)} Auth`;
|
|
792
|
+
break;
|
|
793
|
+
case 'oauth2':
|
|
794
|
+
name = 'OAuth 2.0';
|
|
795
|
+
break;
|
|
796
|
+
case 'openIdConnect':
|
|
797
|
+
name = 'OpenID Connect';
|
|
798
|
+
break;
|
|
799
|
+
case 'mutualTLS':
|
|
800
|
+
name = 'Mutual TLS';
|
|
801
|
+
break;
|
|
802
|
+
}
|
|
803
|
+
return includeKey ? `${name} (${securityScheme.key})` : name;
|
|
804
|
+
}
|
|
805
|
+
const isOAuth2ImplicitFlow = (maybeFlow) => isObject__default["default"](maybeFlow) && 'authorizationUrl' in maybeFlow && !('tokenUrl' in maybeFlow);
|
|
806
|
+
const isOauth2AuthorizationCodeFlow = (maybeFlow) => isObject__default["default"](maybeFlow) && 'authorizationUrl' in maybeFlow && 'tokenUrl' in maybeFlow;
|
|
807
|
+
const isOauth2ClientCredentialsOrPasswordFlow = (maybeFlow) => isObject__default["default"](maybeFlow) && !('authorizationUrl' in maybeFlow) && 'tokenUrl' in maybeFlow;
|
|
808
|
+
function shouldIncludeKey(schemes, type) {
|
|
809
|
+
return filter__default["default"](schemes, { type }).length > 1;
|
|
810
|
+
}
|
|
811
|
+
|
|
768
812
|
const useUniqueId = (prefix = 'id_') => React__namespace.useRef(`${prefix}${nanoid.nanoid(8)}`).current;
|
|
769
813
|
|
|
770
814
|
const AuthTokenInput = ({ type, name, value, onChange }) => {
|
|
@@ -837,7 +881,7 @@ const OAuth2Auth = ({ value, onChange }) => {
|
|
|
837
881
|
|
|
838
882
|
const TryItAuth = ({ operationSecurityScheme: operationAuth, onChange, value }) => {
|
|
839
883
|
var _a;
|
|
840
|
-
const operationSecurityArray =
|
|
884
|
+
const operationSecurityArray = flatten__default["default"](operationAuth);
|
|
841
885
|
const filteredSecurityItems = operationSecurityArray.filter(scheme => securitySchemeKeys.includes(scheme === null || scheme === void 0 ? void 0 : scheme.type));
|
|
842
886
|
const securityScheme = value ? value.scheme : filteredSecurityItems[0];
|
|
843
887
|
const menuName = securityScheme ? getReadableSecurityName(securityScheme) : 'Security Scheme';
|
|
@@ -899,15 +943,15 @@ const SecuritySchemeComponent = (_a) => {
|
|
|
899
943
|
};
|
|
900
944
|
const securitySchemeKeys = ['apiKey', 'http', 'oauth2', 'openIdConnect'];
|
|
901
945
|
|
|
902
|
-
const caseInsensitivelyEquals =
|
|
946
|
+
const caseInsensitivelyEquals = curry__default["default"]((a, b) => a.toUpperCase() === b.toUpperCase());
|
|
903
947
|
|
|
904
|
-
const isApiKeySecurityScheme = (maybeIApiKey) =>
|
|
905
|
-
const isOAuth2SecurityScheme = (maybeIOAuth2) =>
|
|
906
|
-
const isBasicSecurityScheme = (maybeIBasic) =>
|
|
907
|
-
const isBearerSecurityScheme = (maybeIBearer) =>
|
|
908
|
-
const isDigestSecurityScheme = (maybeIBearer) =>
|
|
948
|
+
const isApiKeySecurityScheme = (maybeIApiKey) => isObject__default["default"](maybeIApiKey) && maybeIApiKey.type === 'apiKey';
|
|
949
|
+
const isOAuth2SecurityScheme = (maybeIOAuth2) => isObject__default["default"](maybeIOAuth2) && maybeIOAuth2.type === 'oauth2';
|
|
950
|
+
const isBasicSecurityScheme = (maybeIBasic) => isObject__default["default"](maybeIBasic) && maybeIBasic.type === 'http' && maybeIBasic.scheme === 'basic';
|
|
951
|
+
const isBearerSecurityScheme = (maybeIBearer) => isObject__default["default"](maybeIBearer) && maybeIBearer.type === 'http' && maybeIBearer.scheme === 'bearer';
|
|
952
|
+
const isDigestSecurityScheme = (maybeIBearer) => isObject__default["default"](maybeIBearer) && maybeIBearer.type === 'http' && maybeIBearer.scheme === 'digest';
|
|
909
953
|
function filterOutAuthorizationParams(queryParams, securitySchemes = []) {
|
|
910
|
-
const flattenedSecuritySchemes =
|
|
954
|
+
const flattenedSecuritySchemes = flatten__default["default"](securitySchemes);
|
|
911
955
|
const securitySchemeNames = getSecuritySchemeNames(flattenedSecuritySchemes);
|
|
912
956
|
return queryParams.filter(queryParam => !securitySchemeNames.some(caseInsensitivelyEquals(queryParam.name)));
|
|
913
957
|
}
|
|
@@ -978,7 +1022,7 @@ const booleanOptions = [
|
|
|
978
1022
|
{ label: 'True', value: 'true' },
|
|
979
1023
|
];
|
|
980
1024
|
function enumOptions(enumValues, required) {
|
|
981
|
-
const options =
|
|
1025
|
+
const options = map__default["default"](enumValues, v => ({ value: Number.isNaN(Number(v)) ? String(v) : Number(v) }));
|
|
982
1026
|
return required ? options : [{ label: 'Not Set', value: '' }, ...options];
|
|
983
1027
|
}
|
|
984
1028
|
function parameterOptions(parameter) {
|
|
@@ -1018,7 +1062,7 @@ function getPlaceholderForParameter(parameter) {
|
|
|
1018
1062
|
function retrieveDefaultFromSchema(parameter) {
|
|
1019
1063
|
var _a;
|
|
1020
1064
|
const defaultValue = (_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.default;
|
|
1021
|
-
return
|
|
1065
|
+
return isObject__default["default"](defaultValue) ? json.safeStringify(defaultValue) : defaultValue;
|
|
1022
1066
|
}
|
|
1023
1067
|
const getValueForParameter = (parameter) => {
|
|
1024
1068
|
var _a, _b, _c;
|
|
@@ -1040,10 +1084,8 @@ const getInitialValueForParameter = (parameter) => {
|
|
|
1040
1084
|
return getValueForParameter(parameter);
|
|
1041
1085
|
};
|
|
1042
1086
|
const initialParameterValues = params => {
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
.mapValues(param => getInitialValueForParameter(param))
|
|
1046
|
-
.value();
|
|
1087
|
+
const paramsByName = keyBy__default["default"](params, (param) => param.name);
|
|
1088
|
+
return mapValues__default["default"](paramsByName, param => getInitialValueForParameter(param));
|
|
1047
1089
|
};
|
|
1048
1090
|
function mapSchemaPropertiesToParameters(properties, required) {
|
|
1049
1091
|
return Object.entries(properties).map(([name, schema]) => (Object.assign({ name, schema: typeof schema !== 'boolean' ? schema : undefined, examples: typeof schema !== 'boolean' && schema.examples ? [{ key: 'example', value: schema.examples }] : undefined }, ((required === null || required === void 0 ? void 0 : required.includes(name)) && { required: true }))));
|
|
@@ -1085,7 +1127,7 @@ const FormDataBody = ({ specification, values, onChangeValues }) => {
|
|
|
1085
1127
|
if (supportsFileUpload) {
|
|
1086
1128
|
return (React__namespace.createElement(FileUploadParameterEditor, { key: parameter.name, parameter: parameter, value: value instanceof File ? value : undefined, onChange: newValue => newValue
|
|
1087
1129
|
? onChangeValues(Object.assign(Object.assign({}, values), { [parameter.name]: newValue }))
|
|
1088
|
-
: onChangeValues(
|
|
1130
|
+
: onChangeValues(omit__default["default"](values, parameter.name)) }));
|
|
1089
1131
|
}
|
|
1090
1132
|
return (React__namespace.createElement(ParameterEditor, { key: parameter.name, parameter: parameter, value: typeof value === 'string' ? value : undefined, onChange: (value) => onChangeValues(Object.assign(Object.assign({}, values), { [parameter.name]: typeof value === 'number' ? String(value) : value })) }));
|
|
1091
1133
|
}))));
|
|
@@ -1119,7 +1161,7 @@ function createRequestBody(mediaTypeContent, bodyParameterValues) {
|
|
|
1119
1161
|
});
|
|
1120
1162
|
}
|
|
1121
1163
|
const createUrlEncodedRequestBody = ({ bodyParameterValues = {} }) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
1122
|
-
const filteredValues =
|
|
1164
|
+
const filteredValues = pickBy__default["default"](bodyParameterValues, isString__default["default"]);
|
|
1123
1165
|
return new URLSearchParams(filteredValues);
|
|
1124
1166
|
});
|
|
1125
1167
|
const createMultipartRequestBody = ({ mediaTypeContent, bodyParameterValues = {} }) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -1269,7 +1311,6 @@ const generateExamplesFromJsonSchema = (schema) => {
|
|
|
1269
1311
|
: [{ label: 'default', data: '' }];
|
|
1270
1312
|
}
|
|
1271
1313
|
catch (e) {
|
|
1272
|
-
console.error(e);
|
|
1273
1314
|
return [{ label: '', data: `Example cannot be created for this schema\n${e}` }];
|
|
1274
1315
|
}
|
|
1275
1316
|
};
|
|
@@ -1452,7 +1493,7 @@ function buildPreferHeader({ code, example, dynamic }, httpOperation) {
|
|
|
1452
1493
|
}
|
|
1453
1494
|
const isCodeSupported = supportsResponseCode(httpOperation, code);
|
|
1454
1495
|
const isExampleSupported = isCodeSupported && supportsExample(httpOperation, code, example);
|
|
1455
|
-
const args =
|
|
1496
|
+
const args = compact__default["default"]([
|
|
1456
1497
|
code && isCodeSupported ? ['code', code] : undefined,
|
|
1457
1498
|
dynamic ? ['dynamic', String(dynamic)] : undefined,
|
|
1458
1499
|
example && isExampleSupported ? ['example', example] : undefined,
|
|
@@ -1473,7 +1514,7 @@ function supportsExample(httpOperation, code, exampleKey) {
|
|
|
1473
1514
|
const response = (_a = httpOperation.responses) === null || _a === void 0 ? void 0 : _a.find(response => response.code === code);
|
|
1474
1515
|
if (!response)
|
|
1475
1516
|
return false;
|
|
1476
|
-
const exampleKeys =
|
|
1517
|
+
const exampleKeys = uniq__default["default"]((_b = response.contents) === null || _b === void 0 ? void 0 : _b.flatMap(c => c.examples || []).map(example => example.key));
|
|
1477
1518
|
return exampleKeys.includes(exampleKey);
|
|
1478
1519
|
}
|
|
1479
1520
|
|
|
@@ -1498,7 +1539,7 @@ const MockingButton = ({ operation, options: { isEnabled, code, example, dynamic
|
|
|
1498
1539
|
var _a;
|
|
1499
1540
|
const menuId = `response-${operationResponse.code}`;
|
|
1500
1541
|
const isActive = operationResponse.code === code;
|
|
1501
|
-
const exampleKeys =
|
|
1542
|
+
const exampleKeys = uniq__default["default"]((_a = operationResponse.contents) === null || _a === void 0 ? void 0 : _a.flatMap(c => c.examples || []).map(example => example.key));
|
|
1502
1543
|
const exampleChildren = exampleKeys === null || exampleKeys === void 0 ? void 0 : exampleKeys.map(exampleKey => ({
|
|
1503
1544
|
id: `${menuId}-example-${exampleKey}`,
|
|
1504
1545
|
title: exampleKey,
|
|
@@ -1586,10 +1627,10 @@ const useRequestParameters = (httpOperation) => {
|
|
|
1586
1627
|
function extractAllParameters(httpOperation) {
|
|
1587
1628
|
var _a, _b, _c, _d, _e, _f;
|
|
1588
1629
|
const getRequired = (obj) => { var _a; return (_a = obj.required) !== null && _a !== void 0 ? _a : false; };
|
|
1589
|
-
const pathParameters =
|
|
1590
|
-
const queryParameters = filterOutAuthorizationParams(
|
|
1591
|
-
const headerParameters = filterOutAuthorizationParams(
|
|
1592
|
-
return
|
|
1630
|
+
const pathParameters = orderBy__default["default"]((_b = (_a = httpOperation.request) === null || _a === void 0 ? void 0 : _a.path) !== null && _b !== void 0 ? _b : [], [getRequired, 'name'], ['desc', 'asc']);
|
|
1631
|
+
const queryParameters = filterOutAuthorizationParams(orderBy__default["default"]((_d = (_c = httpOperation.request) === null || _c === void 0 ? void 0 : _c.query) !== null && _d !== void 0 ? _d : [], [getRequired, 'name'], ['desc', 'asc']), httpOperation.security);
|
|
1632
|
+
const headerParameters = filterOutAuthorizationParams(orderBy__default["default"]((_f = (_e = httpOperation.request) === null || _e === void 0 ? void 0 : _e.headers) !== null && _f !== void 0 ? _f : [], [getRequired, 'name'], ['desc', 'asc']), httpOperation.security);
|
|
1633
|
+
return uniqBy__default["default"]([...pathParameters, ...queryParameters, ...headerParameters], p => p.name);
|
|
1593
1634
|
}
|
|
1594
1635
|
|
|
1595
1636
|
function getHttpCodeColor(code) {
|
|
@@ -1645,19 +1686,19 @@ const TryItResponse = ({ response }) => {
|
|
|
1645
1686
|
? parseBody(response.bodyText, responseType)
|
|
1646
1687
|
: response.bodyText })) : response.blob && responseType === 'image' ? (React__namespace.createElement(mosaic.Flex, { justifyContent: "center" },
|
|
1647
1688
|
React__namespace.createElement(mosaic.Image, { src: URL.createObjectURL(response.blob), alt: "response image" }))) : (React__namespace.createElement("p", null,
|
|
1648
|
-
React__namespace.createElement(
|
|
1689
|
+
React__namespace.createElement(mosaic.Box, { as: mosaic.Icon, icon: freeSolidSvgIcons.faExclamationCircle, mr: 2 }),
|
|
1649
1690
|
"No supported response body returned"))))));
|
|
1650
1691
|
};
|
|
1651
1692
|
const ResponseMenu = ({ types, type, onChange }) => {
|
|
1652
1693
|
const menuItems = React__namespace.useMemo(() => {
|
|
1653
1694
|
const items = types.map(type => ({
|
|
1654
1695
|
id: type,
|
|
1655
|
-
title:
|
|
1696
|
+
title: capitalize__default["default"](type),
|
|
1656
1697
|
onPress: () => onChange(type),
|
|
1657
1698
|
}));
|
|
1658
1699
|
return items;
|
|
1659
1700
|
}, [types, onChange]);
|
|
1660
|
-
return (React__namespace.createElement(mosaic.Menu, { "aria-label": "Body Format", items: menuItems, renderTrigger: ({ isOpen }) => (React__namespace.createElement(mosaic.Button, { appearance: "minimal", size: "sm", iconRight: ['fas', 'sort'], active: isOpen },
|
|
1701
|
+
return (React__namespace.createElement(mosaic.Menu, { "aria-label": "Body Format", items: menuItems, renderTrigger: ({ isOpen }) => (React__namespace.createElement(mosaic.Button, { appearance: "minimal", size: "sm", iconRight: ['fas', 'sort'], active: isOpen }, capitalize__default["default"](type))) }));
|
|
1661
1702
|
};
|
|
1662
1703
|
const ResponseError = ({ state: { error } }) => (React__namespace.createElement(mosaic.Panel, { defaultIsOpen: true },
|
|
1663
1704
|
React__namespace.createElement(mosaic.Panel.Titlebar, null, "Error"),
|
|
@@ -1699,18 +1740,22 @@ const TryIt = ({ httpOperation, mockUrl, onRequestChange, requestBodyIndex, embe
|
|
|
1699
1740
|
}
|
|
1700
1741
|
}, []);
|
|
1701
1742
|
React__namespace.useEffect(() => {
|
|
1702
|
-
let
|
|
1743
|
+
let isMounted = true;
|
|
1703
1744
|
if (onRequestChange || embeddedInMd) {
|
|
1704
1745
|
buildHarRequest(Object.assign(Object.assign({ mediaTypeContent, parameterValues: parameterValuesWithDefaults, httpOperation, bodyInput: formDataState.isFormDataBody ? bodyParameterValues : textRequestBody, auth: operationAuthValue }, (mockingOptions.isEnabled && { mockData: getMockData(mockUrl, httpOperation, mockingOptions) })), { chosenServer,
|
|
1705
1746
|
corsProxy })).then(request => {
|
|
1706
|
-
if (
|
|
1707
|
-
onRequestChange
|
|
1708
|
-
|
|
1709
|
-
|
|
1747
|
+
if (isMounted) {
|
|
1748
|
+
if (onRequestChange) {
|
|
1749
|
+
onRequestChange(request);
|
|
1750
|
+
}
|
|
1751
|
+
if (embeddedInMd) {
|
|
1752
|
+
setRequestData(request);
|
|
1753
|
+
}
|
|
1754
|
+
}
|
|
1710
1755
|
});
|
|
1711
1756
|
}
|
|
1712
1757
|
return () => {
|
|
1713
|
-
|
|
1758
|
+
isMounted = false;
|
|
1714
1759
|
};
|
|
1715
1760
|
}, [
|
|
1716
1761
|
httpOperation,
|
|
@@ -1843,18 +1888,13 @@ const TryItWithRequestSamples = (_a) => {
|
|
|
1843
1888
|
const TwoColumnLayout = ({ header, right, left, className }) => (React__default["default"].createElement(mosaic.Box, { w: "full", className: className },
|
|
1844
1889
|
header,
|
|
1845
1890
|
React__default["default"].createElement(mosaic.Flex, { mt: header ? 12 : undefined },
|
|
1846
|
-
React__default["default"].createElement(mosaic.Box, {
|
|
1891
|
+
React__default["default"].createElement(mosaic.Box, { w: 0, flex: 1 }, left),
|
|
1847
1892
|
right && (React__default["default"].createElement(mosaic.Box, { ml: 16, pos: "relative", w: "2/5", style: { maxWidth: 500 } }, right)))));
|
|
1848
1893
|
|
|
1849
1894
|
const DeprecatedBadge = () => (React__default["default"].createElement(mosaic.Tooltip, { renderTrigger: React__default["default"].createElement(mosaic.Badge, { intent: "warning", icon: freeSolidSvgIcons.faExclamationCircle, "data-testid": "badge-deprecated" }, "Deprecated") }, "This operation has been marked as deprecated, which means it could be removed at some point in the future."));
|
|
1850
|
-
const InternalBadge = ({ isHttpService }) => (React__default["default"].createElement(mosaic.Tooltip, { renderTrigger: React__default["default"].createElement(mosaic.Badge, { icon: freeSolidSvgIcons.faEye, "data-testid": "badge-internal",
|
|
1851
|
-
const
|
|
1852
|
-
const badge = (React__default["default"].createElement(mosaic.Badge, { icon: freeSolidSvgIcons.faLock, "data-testid": "badge-security", className: "sl-truncate", style: { backgroundColor: badgeDefaultBackgroundColor, color: badgeDefaultColor } }, getReadableSecurityName(scheme, includeKey)));
|
|
1853
|
-
return httpServiceUri ? (React__default["default"].createElement(reactRouterDom.Link, { to: `${httpServiceUri}?security=${scheme.key}`, className: "sl-no-underline sl-block" }, badge)) : (badge);
|
|
1854
|
-
};
|
|
1855
|
-
const VersionBadge = ({ value, backgroundColor }) => (React__default["default"].createElement(mosaic.Badge, { appearance: "solid", size: "sm", style: {
|
|
1895
|
+
const InternalBadge = ({ isHttpService }) => (React__default["default"].createElement(mosaic.Tooltip, { renderTrigger: React__default["default"].createElement(mosaic.Badge, { icon: freeSolidSvgIcons.faEye, "data-testid": "badge-internal", bg: "danger", ml: 0 }, "Internal") }, `This ${isHttpService ? 'operation' : 'model'} is marked as internal and won't be visible in public docs.`));
|
|
1896
|
+
const VersionBadge = ({ value, backgroundColor }) => (React__default["default"].createElement(mosaic.Badge, { appearance: "solid", size: "sm", border: 0, style: {
|
|
1856
1897
|
backgroundColor: backgroundColor || badgeDefaultBackgroundColor,
|
|
1857
|
-
border: 'none',
|
|
1858
1898
|
color: badgeDefaultColor,
|
|
1859
1899
|
} }, enhanceVersionString(value)));
|
|
1860
1900
|
const enhanceVersionString = (version) => {
|
|
@@ -1863,16 +1903,85 @@ const enhanceVersionString = (version) => {
|
|
|
1863
1903
|
return `v${version}`;
|
|
1864
1904
|
};
|
|
1865
1905
|
|
|
1906
|
+
const oauthFlowNames = {
|
|
1907
|
+
implicit: 'Implicit',
|
|
1908
|
+
authorizationCode: 'Authorization Code',
|
|
1909
|
+
clientCredentials: 'Client Credentials',
|
|
1910
|
+
password: 'Password',
|
|
1911
|
+
};
|
|
1912
|
+
function getDefaultDescription(scheme) {
|
|
1913
|
+
switch (scheme.type) {
|
|
1914
|
+
case 'apiKey':
|
|
1915
|
+
return getApiKeyDescription(scheme.in, scheme.name);
|
|
1916
|
+
case 'http':
|
|
1917
|
+
switch (scheme.scheme) {
|
|
1918
|
+
case 'basic':
|
|
1919
|
+
return getBasicAuthDescription();
|
|
1920
|
+
case 'bearer':
|
|
1921
|
+
return getBearerAuthDescription();
|
|
1922
|
+
case 'digest':
|
|
1923
|
+
return getDigestAuthDescription();
|
|
1924
|
+
}
|
|
1925
|
+
case 'oauth2':
|
|
1926
|
+
return getOAuthDescription(scheme);
|
|
1927
|
+
}
|
|
1928
|
+
return '';
|
|
1929
|
+
}
|
|
1930
|
+
function getApiKeyDescription(inProperty, name) {
|
|
1931
|
+
return `An API key is a token that you provide when making API calls. Include the token in a ${inProperty} parameter called \`${name}\`.
|
|
1932
|
+
|
|
1933
|
+
Example: ${inProperty === 'query' ? `\`?${name}=123\`` : `\`${name}: 123\``}`;
|
|
1934
|
+
}
|
|
1935
|
+
function getBasicAuthDescription() {
|
|
1936
|
+
return `Basic authentication is a simple authentication scheme built into the HTTP protocol.
|
|
1937
|
+
To use it, send your HTTP requests with an Authorization header that contains the word Basic
|
|
1938
|
+
followed by a space and a base64-encoded string \`username:password\`.
|
|
1939
|
+
|
|
1940
|
+
Example: \`Authorization: Basic ZGVtbzpwQDU1dzByZA==\``;
|
|
1941
|
+
}
|
|
1942
|
+
function getBearerAuthDescription() {
|
|
1943
|
+
return `Provide your bearer token in the Authorization header when making requests to protected resources.
|
|
1944
|
+
|
|
1945
|
+
Example: \`Authorization: Bearer 123\``;
|
|
1946
|
+
}
|
|
1947
|
+
function getDigestAuthDescription() {
|
|
1948
|
+
return `Provide your encrypted digest scheme data in the Authorization header when making requests to protected resources.
|
|
1949
|
+
|
|
1950
|
+
Example: \`Authorization: Digest username=guest, realm="test", nonce="2", uri="/uri", response="123"\``;
|
|
1951
|
+
}
|
|
1952
|
+
function getOAuthDescription(scheme) {
|
|
1953
|
+
const flows = keys__default["default"](scheme.flows);
|
|
1954
|
+
return flows.map(flow => getOAuthFlowDescription(oauthFlowNames[flow], scheme.flows[flow])).join('\n\n');
|
|
1955
|
+
}
|
|
1956
|
+
function getOAuthFlowDescription(title, flow) {
|
|
1957
|
+
let description = `**${title} OAuth Flow**`;
|
|
1958
|
+
description +=
|
|
1959
|
+
isOAuth2ImplicitFlow(flow) || isOauth2AuthorizationCodeFlow(flow)
|
|
1960
|
+
? `\n\nAuthorize URL: ${flow.authorizationUrl}`
|
|
1961
|
+
: '';
|
|
1962
|
+
description +=
|
|
1963
|
+
isOauth2AuthorizationCodeFlow(flow) || isOauth2ClientCredentialsOrPasswordFlow(flow)
|
|
1964
|
+
? `\n\nToken URL: ${flow.tokenUrl}`
|
|
1965
|
+
: '';
|
|
1966
|
+
description += flow.refreshUrl ? `\n\nRefresh URL: ${flow.refreshUrl}` : '';
|
|
1967
|
+
const scopes = entries__default["default"](flow.scopes);
|
|
1968
|
+
if (scopes.length) {
|
|
1969
|
+
description += `\n\nScopes:
|
|
1970
|
+
${scopes.map(([key, value]) => `- \`${key}\` - ${value}`).join('\n')}`;
|
|
1971
|
+
}
|
|
1972
|
+
return description;
|
|
1973
|
+
}
|
|
1974
|
+
|
|
1866
1975
|
const SectionTitle = ({ title, children }) => {
|
|
1867
1976
|
return (React__namespace.createElement(mosaic.Flex, { role: "heading", borderB: true, mb: 3, pb: 3, "aria-label": title, align: "baseline" },
|
|
1868
1977
|
React__namespace.createElement(mosaic.Text, { size: "xl", fontWeight: "semibold", mr: 5 }, title),
|
|
1869
1978
|
children));
|
|
1870
1979
|
};
|
|
1871
|
-
const SubSectionPanel = ({ title, children, hasContent, rightComponent }) => {
|
|
1872
|
-
return (React__namespace.createElement(mosaic.Panel, { appearance: "minimal", isCollapsible: hasContent, defaultIsOpen:
|
|
1980
|
+
const SubSectionPanel = ({ title, children, hasContent, rightComponent, defaultIsOpen = true, onChange, }) => {
|
|
1981
|
+
return (React__namespace.createElement(mosaic.Panel, { appearance: "minimal", isCollapsible: hasContent, defaultIsOpen: defaultIsOpen, onChange: onChange },
|
|
1873
1982
|
React__namespace.createElement(mosaic.Panel.Titlebar, { fontWeight: "medium", rightComponent: rightComponent },
|
|
1874
1983
|
React__namespace.createElement("div", { role: "heading" }, title)),
|
|
1875
|
-
hasContent !== false && (React__namespace.createElement(mosaic.Panel.Content, { pr: 3,
|
|
1984
|
+
hasContent !== false && (React__namespace.createElement(mosaic.Panel.Content, { pr: 3, pl: 6, p: 0 }, children))));
|
|
1876
1985
|
};
|
|
1877
1986
|
|
|
1878
1987
|
const Body = ({ body: { contents = [], description }, onChange }) => {
|
|
@@ -1914,7 +2023,7 @@ const defaultStyle = {
|
|
|
1914
2023
|
const Parameters = ({ parameters, parameterType }) => {
|
|
1915
2024
|
if (!parameters || !parameters.length)
|
|
1916
2025
|
return null;
|
|
1917
|
-
return (React__namespace.createElement(mosaic.VStack, { spacing: 2,
|
|
2026
|
+
return (React__namespace.createElement(mosaic.VStack, { spacing: 2, divider: React__namespace.createElement(mosaic.Box, { borderT: true, borderColor: "light", w: "full" }) }, sortBy__default["default"](parameters, ['required', 'name']).map(parameter => {
|
|
1918
2027
|
return React__namespace.createElement(Parameter, { key: parameter.name, parameter: parameter, parameterType: parameterType });
|
|
1919
2028
|
})));
|
|
1920
2029
|
};
|
|
@@ -1923,11 +2032,11 @@ const Parameter = ({ parameter, parameterType }) => {
|
|
|
1923
2032
|
var _a, _b, _c, _d, _e;
|
|
1924
2033
|
if (!parameter)
|
|
1925
2034
|
return null;
|
|
1926
|
-
const description =
|
|
1927
|
-
const rootType =
|
|
2035
|
+
const description = get__default["default"](parameter, 'description') || get__default["default"](parameter, 'schema.description');
|
|
2036
|
+
const rootType = get__default["default"](parameter, 'schema.type', 'unknown');
|
|
1928
2037
|
const type = ((_b = (_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b['type']) && rootType === 'array' ? `array[${parameter.schema.items['type']}]` : rootType;
|
|
1929
2038
|
const format = (_c = parameter.schema) === null || _c === void 0 ? void 0 : _c.format;
|
|
1930
|
-
const deprecated =
|
|
2039
|
+
const deprecated = get__default["default"](parameter, 'deprecated') || get__default["default"](parameter, 'schema.deprecated', false);
|
|
1931
2040
|
const parameterExamples = ((_d = parameter.examples) === null || _d === void 0 ? void 0 : _d.map(example => {
|
|
1932
2041
|
if (isNodeExample(example)) {
|
|
1933
2042
|
return example.value;
|
|
@@ -1936,33 +2045,35 @@ const Parameter = ({ parameter, parameterType }) => {
|
|
|
1936
2045
|
})) || [];
|
|
1937
2046
|
const schemaExamples = (_e = parameter.schema) === null || _e === void 0 ? void 0 : _e.examples;
|
|
1938
2047
|
const schemaExamplesArray = Array.isArray(schemaExamples) ? schemaExamples : [];
|
|
1939
|
-
const validations =
|
|
1940
|
-
return (React__namespace.createElement(
|
|
1941
|
-
React__namespace.createElement(
|
|
1942
|
-
React__namespace.createElement(
|
|
1943
|
-
React__namespace.createElement(
|
|
1944
|
-
React__namespace.createElement(
|
|
1945
|
-
React__namespace.createElement(
|
|
1946
|
-
deprecated && React__namespace.createElement(
|
|
1947
|
-
parameter.required && React__namespace.createElement(
|
|
1948
|
-
description && (React__namespace.createElement(
|
|
2048
|
+
const validations = omitBy__default["default"](Object.assign(Object.assign(Object.assign(Object.assign({}, omit__default["default"](parameter, ['name', 'required', 'deprecated', 'description', 'schema', 'style', 'examples'])), omit__default["default"](get__default["default"](parameter, 'schema'), ['description', 'type', 'deprecated'])), omit__default["default"](get__default["default"](parameter, 'schema.items'), ['description', 'type', 'deprecated'])), { examples: [...parameterExamples, ...schemaExamplesArray] }), value => (typeof value === 'object' && isEmpty__default["default"](value)) || typeof value === 'undefined');
|
|
2049
|
+
return (React__namespace.createElement(mosaic.Box, { className: "HttpOperation__Parameters" },
|
|
2050
|
+
React__namespace.createElement(mosaic.Flex, { alignItems: "center", my: 2 },
|
|
2051
|
+
React__namespace.createElement(mosaic.Flex, { alignItems: "baseline", fontSize: "base", flex: 1 },
|
|
2052
|
+
React__namespace.createElement(mosaic.Box, { fontFamily: "mono", fontWeight: "bold" }, parameter.name),
|
|
2053
|
+
React__namespace.createElement(mosaic.Box, { ml: 2, color: "muted" }, format ? `${type}<${format}>` : type)),
|
|
2054
|
+
React__namespace.createElement(mosaic.Box, { fontSize: "sm", color: "warning" },
|
|
2055
|
+
deprecated && (React__namespace.createElement(mosaic.Box, { as: "span", ml: 2 }, "deprecated")),
|
|
2056
|
+
parameter.required && (React__namespace.createElement(mosaic.Box, { as: "span", ml: 2 }, "required")))),
|
|
2057
|
+
description && (React__namespace.createElement(mosaic.Box, { w: "full", color: "muted", fontSize: "sm", my: 2 },
|
|
1949
2058
|
React__namespace.createElement(markdownViewer.MarkdownViewer, { markdown: description }))),
|
|
1950
|
-
React__namespace.createElement(
|
|
2059
|
+
React__namespace.createElement(mosaic.Box, { fontSize: "sm" },
|
|
1951
2060
|
React__namespace.createElement(jsonSchemaViewer.Validations, { validations: validations })),
|
|
1952
|
-
parameter.style && defaultStyle[parameterType] !== parameter.style && (React__namespace.createElement(
|
|
1953
|
-
React__namespace.createElement(
|
|
2061
|
+
parameter.style && defaultStyle[parameterType] !== parameter.style && (React__namespace.createElement(mosaic.Flex, { my: 2 },
|
|
2062
|
+
React__namespace.createElement(mosaic.Box, { as: "span", px: 1, color: "muted", fontFamily: "mono", rounded: "lg", fontSize: "sm", textTransform: "capitalize", style: { backgroundColor: '#EDF2F7' } }, readableStyles[parameter.style] || parameter.style)))));
|
|
1954
2063
|
};
|
|
1955
2064
|
Parameter.displayName = 'HttpOperation.Parameter';
|
|
1956
2065
|
|
|
1957
2066
|
const Request = ({ operation: { path, method, request, request: { path: pathParams = [], headers: headerParams = [], cookie: cookieParams = [], body, query: queryParams = [], } = {}, security, }, onChange, }) => {
|
|
1958
2067
|
if (!request || typeof request !== 'object')
|
|
1959
2068
|
return null;
|
|
1960
|
-
const
|
|
2069
|
+
const securitySchemes = flatten__default["default"](security);
|
|
2070
|
+
const pathParamBlock = (React__namespace.createElement(mosaic.Box, null,
|
|
1961
2071
|
React__namespace.createElement(mosaic.Text, { textTransform: "uppercase", mr: 1, color: HttpMethodColors[method] }, method),
|
|
1962
2072
|
' ',
|
|
1963
2073
|
path));
|
|
1964
|
-
return (React__namespace.createElement(mosaic.Box,
|
|
2074
|
+
return (React__namespace.createElement(mosaic.Box, null,
|
|
1965
2075
|
React__namespace.createElement(SectionTitle, { title: "Request" }),
|
|
2076
|
+
securitySchemes.map((scheme, i) => (React__namespace.createElement(SecurityPanel, { key: i, scheme: scheme, includeKey: shouldIncludeKey(securitySchemes, scheme.type) }))),
|
|
1966
2077
|
React__namespace.createElement(SubSectionPanel, { title: pathParamBlock, hasContent: pathParams.length > 0 },
|
|
1967
2078
|
React__namespace.createElement(Parameters, { parameterType: "path", parameters: pathParams })),
|
|
1968
2079
|
queryParams.length > 0 && (React__namespace.createElement(SubSectionPanel, { title: "Query" },
|
|
@@ -1973,11 +2084,17 @@ const Request = ({ operation: { path, method, request, request: { path: pathPara
|
|
|
1973
2084
|
React__namespace.createElement(Parameters, { parameterType: "cookie", parameters: cookieParams }))),
|
|
1974
2085
|
body && React__namespace.createElement(Body, { onChange: onChange, body: body })));
|
|
1975
2086
|
};
|
|
1976
|
-
Request.displayName = 'HttpOperation.Request';
|
|
2087
|
+
Request.displayName = 'HttpOperation.Request';
|
|
2088
|
+
const schemeExpandedState = utils.atomWithStorage('HttpOperation_security_expanded', {});
|
|
2089
|
+
const SecurityPanel = ({ scheme, includeKey }) => {
|
|
2090
|
+
const [expandedState, setExpanded] = jotai.useAtom(schemeExpandedState);
|
|
2091
|
+
return (React__namespace.createElement(SubSectionPanel, { title: `Security: ${getReadableSecurityName(scheme, includeKey)}`, defaultIsOpen: !!expandedState[scheme.key], onChange: isOpen => setExpanded(Object.assign(Object.assign({}, expandedState), { [scheme.key]: isOpen })) },
|
|
2092
|
+
React__namespace.createElement(MarkdownViewer, { style: { fontSize: 12 }, markdown: `${scheme.description || ''}\n\n` + getDefaultDescription(scheme) })));
|
|
2093
|
+
};
|
|
1977
2094
|
|
|
1978
2095
|
const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange }) => {
|
|
1979
2096
|
var _a, _b;
|
|
1980
|
-
const responses =
|
|
2097
|
+
const responses = sortBy__default["default"](uniqBy__default["default"](unsortedResponses, r => r.code), r => r.code);
|
|
1981
2098
|
const [activeResponseId, setActiveResponseId] = React__namespace.useState((_b = (_a = responses[0]) === null || _a === void 0 ? void 0 : _a.code) !== null && _b !== void 0 ? _b : '');
|
|
1982
2099
|
React__namespace.useEffect(() => {
|
|
1983
2100
|
onStatusCodeChange(activeResponseId);
|
|
@@ -2009,7 +2126,7 @@ const Response = ({ response: { contents = [], headers = [], description }, onMe
|
|
|
2009
2126
|
};
|
|
2010
2127
|
Response.displayName = 'HttpOperation.Response';
|
|
2011
2128
|
|
|
2012
|
-
const HttpOperationComponent = React__namespace.memo(({ className, data: unresolvedData,
|
|
2129
|
+
const HttpOperationComponent = React__namespace.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy }) => {
|
|
2013
2130
|
const data = useResolvedObject(unresolvedData);
|
|
2014
2131
|
const mocking = React__namespace.useContext(MockingContext);
|
|
2015
2132
|
const isDeprecated = !!data.deprecated;
|
|
@@ -2017,21 +2134,17 @@ const HttpOperationComponent = React__namespace.memo(({ className, data: unresol
|
|
|
2017
2134
|
const [responseMediaType, setResponseMediaType] = React__namespace.useState('');
|
|
2018
2135
|
const [responseStatusCode, setResponseStatusCode] = React__namespace.useState('');
|
|
2019
2136
|
const [requestBodyIndex, setTextRequestBodyIndex] = React__namespace.useState(0);
|
|
2020
|
-
const
|
|
2021
|
-
const securitySchemes = _.flatten(data.security);
|
|
2022
|
-
const hasBadges = isDeprecated || securitySchemes.length > 0 || isInternal;
|
|
2137
|
+
const hasBadges = isDeprecated || isInternal;
|
|
2023
2138
|
const header = (!(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.noHeading) || hasBadges) && (React__namespace.createElement(React__namespace.Fragment, null,
|
|
2024
2139
|
!(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.noHeading) && (React__namespace.createElement(mosaic.Heading, { size: 1, mb: 4, fontWeight: "semibold" }, data.summary || data.iid || `${data.method} ${data.path}`)),
|
|
2025
2140
|
hasBadges && (React__namespace.createElement(mosaic.HStack, { spacing: 2 },
|
|
2026
2141
|
isDeprecated && React__namespace.createElement(DeprecatedBadge, null),
|
|
2027
|
-
_.sortBy(securitySchemes, 'type').map((scheme, i) => (React__namespace.createElement(SecurityBadge, { key: i, scheme: scheme, httpServiceUri: allowRouting ? httpServiceUri : undefined, includeKey: shouldIncludeKey(securitySchemes, scheme.type) }))),
|
|
2028
2142
|
isInternal && React__namespace.createElement(InternalBadge, { isHttpService: true })))));
|
|
2029
|
-
const description = (React__namespace.createElement(
|
|
2030
|
-
data.description &&
|
|
2143
|
+
const description = (React__namespace.createElement(mosaic.VStack, { spacing: 6 },
|
|
2144
|
+
data.description && React__namespace.createElement(MarkdownViewer, { className: "HttpOperation__Description", markdown: data.description }),
|
|
2031
2145
|
React__namespace.createElement(Request, { onChange: setTextRequestBodyIndex, operation: data }),
|
|
2032
2146
|
data.responses && (React__namespace.createElement(Responses, { responses: data.responses, onMediaTypeChange: setResponseMediaType, onStatusCodeChange: setResponseStatusCode }))));
|
|
2033
|
-
const tryItPanel = !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideTryItPanel) && (React__namespace.createElement(
|
|
2034
|
-
React__namespace.createElement(TryItWithRequestSamples, { httpOperation: data, responseMediaType: responseMediaType, responseStatusCode: responseStatusCode, requestBodyIndex: requestBodyIndex, hideTryIt: layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideTryIt, tryItCredentialsPolicy: tryItCredentialsPolicy, mockUrl: mocking.hideMocking ? undefined : mocking.mockUrl, corsProxy: tryItCorsProxy })));
|
|
2147
|
+
const tryItPanel = !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideTryItPanel) && (React__namespace.createElement(TryItWithRequestSamples, { httpOperation: data, responseMediaType: responseMediaType, responseStatusCode: responseStatusCode, requestBodyIndex: requestBodyIndex, hideTryIt: layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideTryIt, tryItCredentialsPolicy: tryItCredentialsPolicy, mockUrl: mocking.hideMocking ? undefined : mocking.mockUrl, corsProxy: tryItCorsProxy }));
|
|
2035
2148
|
return (React__namespace.createElement(TwoColumnLayout, { className: cn__default["default"]('HttpOperation', className), header: header, left: description, right: tryItPanel }));
|
|
2036
2149
|
});
|
|
2037
2150
|
HttpOperationComponent.displayName = 'HttpOperation.Component';
|
|
@@ -2041,8 +2154,8 @@ const HttpOperation = reactErrorBoundary.withErrorBoundary(HttpOperationComponen
|
|
|
2041
2154
|
|
|
2042
2155
|
const PoweredByLink = ({ source, pathname, packageType, layout = 'sidebar' }) => {
|
|
2043
2156
|
return (React__namespace.createElement(mosaic.Flex, { as: "a", align: "center", borderT: layout === 'stacked' ? undefined : true, px: layout === 'stacked' ? 1 : 4, py: 3, justify: layout === 'stacked' ? 'end' : undefined, href: `https://stoplight.io/?utm_source=${packageType}&utm_medium=${source}&utm_campaign=powered_by&utm_content=${pathname}`, target: "_blank", rel: "noopener noreferrer" },
|
|
2044
|
-
React__namespace.createElement(
|
|
2045
|
-
React__namespace.createElement(
|
|
2157
|
+
React__namespace.createElement(mosaic.Box, { as: mosaic.Icon, icon: freeSolidSvgIcons.faBolt, mr: 1, className: "fa-fw", style: { color: 'rgba(144, 97, 249, 1)' } }),
|
|
2158
|
+
React__namespace.createElement(mosaic.Box, null,
|
|
2046
2159
|
"powered by\u00A0",
|
|
2047
2160
|
React__namespace.createElement("strong", null, "Stoplight"))));
|
|
2048
2161
|
};
|
|
@@ -2076,83 +2189,19 @@ const ExportButton = ({ original, bundled }) => {
|
|
|
2076
2189
|
React__namespace.createElement(mosaic.Menu, { "aria-label": "Export", items: menuItems, renderTrigger: ({ isOpen }) => (React__namespace.createElement(mosaic.Button, { iconRight: "chevron-down", appearance: "default", ml: 2, active: isOpen, size: "sm" }, "Export")) })));
|
|
2077
2190
|
};
|
|
2078
2191
|
|
|
2079
|
-
const
|
|
2080
|
-
|
|
2081
|
-
authorizationCode: 'Authorization Code',
|
|
2082
|
-
clientCredentials: 'Client Credentials',
|
|
2083
|
-
password: 'Password',
|
|
2084
|
-
};
|
|
2085
|
-
const SecuritySchemes = ({ schemes, defaultScheme }) => {
|
|
2086
|
-
return (React__default["default"].createElement(mosaic.Panel, { rounded: true, isCollapsible: false },
|
|
2192
|
+
const SecuritySchemes = ({ schemes, defaultScheme, defaultCollapsed = false, }) => {
|
|
2193
|
+
return (React__default["default"].createElement(mosaic.Panel, { rounded: true, isCollapsible: defaultCollapsed },
|
|
2087
2194
|
React__default["default"].createElement(mosaic.Panel.Titlebar, { bg: "canvas-300" },
|
|
2088
|
-
React__default["default"].createElement("span",
|
|
2089
|
-
React__default["default"].createElement(mosaic.Panel.Content, { p: 0 },
|
|
2090
|
-
React__default["default"].createElement(mosaic.Panel.Titlebar, null,
|
|
2091
|
-
React__default["default"].createElement("span", { role: "heading" }, getReadableSecurityName(scheme, shouldIncludeKey(schemes, scheme.type)))),
|
|
2092
|
-
React__default["default"].createElement(mosaic.Panel.Content, null,
|
|
2093
|
-
React__default["default"].createElement(MarkdownViewer, { style: { fontSize: 12 }, markdown: `${scheme.description || ''}\n\n` + getDefaultDescription(scheme) }))))))));
|
|
2195
|
+
React__default["default"].createElement(mosaic.Box, { as: "span", role: "heading" }, "Security")),
|
|
2196
|
+
React__default["default"].createElement(mosaic.Panel.Content, { p: 0 }, sortBy__default["default"](schemes, 'type').map((scheme, i) => (React__default["default"].createElement(SecurityScheme, { key: i, scheme: scheme, defaultIsOpen: defaultScheme ? scheme.key === defaultScheme : i === 0, isCollapsible: schemes.length > 1, showSchemeKey: shouldIncludeKey(schemes, scheme.type) }))))));
|
|
2094
2197
|
};
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
return getBasicAuthDescription();
|
|
2103
|
-
case 'bearer':
|
|
2104
|
-
return getBearerAuthDescription();
|
|
2105
|
-
case 'digest':
|
|
2106
|
-
return getDigestAuthDescription();
|
|
2107
|
-
}
|
|
2108
|
-
case 'oauth2':
|
|
2109
|
-
return getOAuthDescription(scheme);
|
|
2110
|
-
}
|
|
2111
|
-
return '';
|
|
2112
|
-
}
|
|
2113
|
-
function getApiKeyDescription(inProperty, name) {
|
|
2114
|
-
return `An API key is a token that you provide when making API calls. Include the token in a ${inProperty} parameter called \`${name}\`.
|
|
2115
|
-
|
|
2116
|
-
Example: ${inProperty === 'query' ? `\`?${name}=123\`` : `\`${name}: 123\``}`;
|
|
2117
|
-
}
|
|
2118
|
-
function getBasicAuthDescription() {
|
|
2119
|
-
return `Basic authentication is a simple authentication scheme built into the HTTP protocol.
|
|
2120
|
-
To use it, send your HTTP requests with an Authorization header that contains the word Basic
|
|
2121
|
-
followed by a space and a base64-encoded string \`username:password\`.
|
|
2122
|
-
|
|
2123
|
-
Example: \`Authorization: Basic ZGVtbzpwQDU1dzByZA==\``;
|
|
2124
|
-
}
|
|
2125
|
-
function getBearerAuthDescription() {
|
|
2126
|
-
return `Provide your bearer token in the Authorization header when making requests to protected resources.
|
|
2127
|
-
|
|
2128
|
-
Example: \`Authorization: Bearer 123\``;
|
|
2129
|
-
}
|
|
2130
|
-
function getDigestAuthDescription() {
|
|
2131
|
-
return `Provide your encrypted digest scheme data in the Authorization header when making requests to protected resources.
|
|
2132
|
-
|
|
2133
|
-
Example: \`Authorization: Digest username=guest, realm="test", nonce="2", uri="/uri", response="123"\``;
|
|
2134
|
-
}
|
|
2135
|
-
function getOAuthDescription(scheme) {
|
|
2136
|
-
const flows = _.keys(scheme.flows);
|
|
2137
|
-
return flows.map(flow => getOAuthFlowDescription(oauthFlowNames[flow], scheme.flows[flow])).join('\n\n');
|
|
2138
|
-
}
|
|
2139
|
-
function getOAuthFlowDescription(title, flow) {
|
|
2140
|
-
let description = `**${title} OAuth Flow**`;
|
|
2141
|
-
description +=
|
|
2142
|
-
isOAuth2ImplicitFlow(flow) || isOauth2AuthorizationCodeFlow(flow)
|
|
2143
|
-
? `\n\nAuthorize URL: ${flow.authorizationUrl}`
|
|
2144
|
-
: '';
|
|
2145
|
-
description +=
|
|
2146
|
-
isOauth2AuthorizationCodeFlow(flow) || isOauth2ClientCredentialsOrPasswordFlow(flow)
|
|
2147
|
-
? `\n\nToken URL: ${flow.tokenUrl}`
|
|
2148
|
-
: '';
|
|
2149
|
-
description += flow.refreshUrl ? `\n\nRefresh URL: ${flow.refreshUrl}` : '';
|
|
2150
|
-
description += `\n\nScopes:
|
|
2151
|
-
${_.entries(flow.scopes)
|
|
2152
|
-
.map(([key, value]) => `- \`${key}\` - ${value}`)
|
|
2153
|
-
.join('\n')}`;
|
|
2154
|
-
return description;
|
|
2155
|
-
}
|
|
2198
|
+
const SecurityScheme = ({ scheme, defaultIsOpen, isCollapsible, showSchemeKey }) => {
|
|
2199
|
+
return (React__default["default"].createElement(mosaic.Panel, { defaultIsOpen: defaultIsOpen, isCollapsible: isCollapsible },
|
|
2200
|
+
React__default["default"].createElement(mosaic.Panel.Titlebar, null,
|
|
2201
|
+
React__default["default"].createElement(mosaic.Box, { as: "span", role: "heading" }, getReadableSecurityName(scheme, showSchemeKey))),
|
|
2202
|
+
React__default["default"].createElement(mosaic.Panel.Content, null,
|
|
2203
|
+
React__default["default"].createElement(MarkdownViewer, { style: { fontSize: 12 }, markdown: `${scheme.description || ''}\n\n` + getDefaultDescription(scheme) }))));
|
|
2204
|
+
};
|
|
2156
2205
|
|
|
2157
2206
|
const ServerInfo = ({ servers, mockUrl }) => {
|
|
2158
2207
|
const mocking = React__namespace.useContext(MockingContext);
|
|
@@ -2307,7 +2356,7 @@ function useParsedValue(value) {
|
|
|
2307
2356
|
}
|
|
2308
2357
|
|
|
2309
2358
|
function isPartialHttpRequest(maybeHttpRequest) {
|
|
2310
|
-
return (
|
|
2359
|
+
return (isObject__default["default"](maybeHttpRequest) &&
|
|
2311
2360
|
'method' in maybeHttpRequest &&
|
|
2312
2361
|
typeof maybeHttpRequest['method'] === 'string' &&
|
|
2313
2362
|
'url' in maybeHttpRequest &&
|
|
@@ -2318,7 +2367,7 @@ const SchemaAndDescription = ({ title: titleProp, schema }) => {
|
|
|
2318
2367
|
const title = titleProp !== null && titleProp !== void 0 ? titleProp : schema.title;
|
|
2319
2368
|
return (React__default["default"].createElement(mosaic.Box, { py: 2 },
|
|
2320
2369
|
title && (React__default["default"].createElement(mosaic.Flex, { alignItems: "center", p: 2 },
|
|
2321
|
-
React__default["default"].createElement(
|
|
2370
|
+
React__default["default"].createElement(mosaic.Icon, { icon: NodeTypeIconDefs[types.NodeType.Model], color: NodeTypeColors[types.NodeType.Model] }),
|
|
2322
2371
|
React__default["default"].createElement(mosaic.Box, { color: "muted", px: 2 }, title))),
|
|
2323
2372
|
React__default["default"].createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: resolveRef, schema: getOriginalObject(schema) })));
|
|
2324
2373
|
};
|
|
@@ -2333,7 +2382,7 @@ const CodeComponent = props => {
|
|
|
2333
2382
|
return React__default["default"].createElement(SchemaAndDescription, { title: title, schema: parsedValue });
|
|
2334
2383
|
}
|
|
2335
2384
|
if (http) {
|
|
2336
|
-
if (!
|
|
2385
|
+
if (!isObject__default["default"](parsedValue) || (!isPartialHttpRequest(parsedValue) && !isHttpOperation(parsedValue))) {
|
|
2337
2386
|
return null;
|
|
2338
2387
|
}
|
|
2339
2388
|
return (React__default["default"].createElement(TryIt, { httpOperation: isHttpOperation(parsedValue) ? parsedValue : parseHttpRequest(parsedValue), embeddedInMd: true }));
|
|
@@ -2642,28 +2691,30 @@ function useBundleRefsIntoDocument(document, options) {
|
|
|
2642
2691
|
const [bundledData, setBundledData] = React__namespace.useState(document);
|
|
2643
2692
|
const baseUrl = options === null || options === void 0 ? void 0 : options.baseUrl;
|
|
2644
2693
|
React__namespace.useEffect(() => {
|
|
2645
|
-
if (!
|
|
2694
|
+
if (!isObject__default["default"](document)) {
|
|
2646
2695
|
setBundledData(document);
|
|
2647
2696
|
return;
|
|
2648
2697
|
}
|
|
2649
|
-
let
|
|
2698
|
+
let isMounted = true;
|
|
2650
2699
|
doBundle(document, baseUrl)
|
|
2651
2700
|
.then(res => {
|
|
2652
|
-
if (
|
|
2701
|
+
if (isMounted) {
|
|
2653
2702
|
setBundledData(Object.assign({}, res));
|
|
2654
2703
|
}
|
|
2655
2704
|
})
|
|
2656
2705
|
.catch(reason => {
|
|
2657
2706
|
var _a;
|
|
2658
2707
|
if (typeof reason === 'object' && reason !== null && 'files' in reason) {
|
|
2659
|
-
|
|
2708
|
+
if (isMounted) {
|
|
2709
|
+
setBundledData(Object.assign({}, reason.files.schema));
|
|
2710
|
+
}
|
|
2660
2711
|
}
|
|
2661
2712
|
else {
|
|
2662
2713
|
console.warn(`Could bundle: ${(_a = reason === null || reason === void 0 ? void 0 : reason.message) !== null && _a !== void 0 ? _a : 'Unknown error'}`);
|
|
2663
2714
|
}
|
|
2664
2715
|
});
|
|
2665
2716
|
return () => {
|
|
2666
|
-
|
|
2717
|
+
isMounted = false;
|
|
2667
2718
|
};
|
|
2668
2719
|
}, [document, baseUrl]);
|
|
2669
2720
|
return bundledData;
|
|
@@ -2706,7 +2757,7 @@ const createElementClass = (Component, propDescriptors) => {
|
|
|
2706
2757
|
constructor() {
|
|
2707
2758
|
super();
|
|
2708
2759
|
this._props = {};
|
|
2709
|
-
Object.defineProperties(this,
|
|
2760
|
+
Object.defineProperties(this, mapValues__default["default"](propDescriptors, (_, key) => ({
|
|
2710
2761
|
get: () => {
|
|
2711
2762
|
return this._props[key];
|
|
2712
2763
|
},
|
|
@@ -2727,7 +2778,7 @@ const createElementClass = (Component, propDescriptors) => {
|
|
|
2727
2778
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
2728
2779
|
if (propDescriptors[name]) {
|
|
2729
2780
|
const newPropValue = this._safeReadAttribute(name);
|
|
2730
|
-
if (!
|
|
2781
|
+
if (!isEqual__default["default"](this._props[name], newPropValue)) {
|
|
2731
2782
|
this._props[name] = newPropValue;
|
|
2732
2783
|
this._renderComponent();
|
|
2733
2784
|
}
|
|
@@ -2793,7 +2844,7 @@ const createElementClass = (Component, propDescriptors) => {
|
|
|
2793
2844
|
}
|
|
2794
2845
|
_renderComponent() {
|
|
2795
2846
|
if (this._mountPoint) {
|
|
2796
|
-
const props =
|
|
2847
|
+
const props = mapValues__default["default"](propDescriptors, (descriptor, key) => { var _a; return (_a = this._props[key]) !== null && _a !== void 0 ? _a : descriptor.defaultValue; });
|
|
2797
2848
|
ReactDOM__namespace.render(React__namespace.createElement(Component, props), this._mountPoint);
|
|
2798
2849
|
}
|
|
2799
2850
|
}
|