@stoplight/elements-core 7.5.4 → 7.5.8

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.
@@ -0,0 +1,3 @@
1
+ import { IHttpOperation } from '@stoplight/types';
2
+ export declare const httpOperation: IHttpOperation;
3
+ export default httpOperation;
@@ -2,6 +2,7 @@ import { NodeType } from '@stoplight/types';
2
2
  import { Location } from 'history';
3
3
  import * as React from 'react';
4
4
  import { ParsedNode } from '../../types';
5
+ import { ReferenceResolver } from '../../utils/ref-resolving/ReferenceResolver';
5
6
  import { ExportButtonProps } from './HttpService/ExportButton';
6
7
  interface BaseDocsProps {
7
8
  className?: string;
@@ -27,6 +28,7 @@ export interface DocsProps extends BaseDocsProps {
27
28
  nodeType: NodeType;
28
29
  nodeData: unknown;
29
30
  useNodeForRefResolving?: boolean;
31
+ refResolver?: ReferenceResolver;
30
32
  }
31
33
  export interface DocsComponentProps<T = unknown> extends BaseDocsProps {
32
34
  data: T;
@@ -1,2 +1,3 @@
1
- import { CustomComponentMapping } from '@stoplight/markdown-viewer';
2
- export declare const ReactRouterMarkdownLink: CustomComponentMapping['link'];
1
+ export declare const ReactRouterMarkdownLink: ({ title, to, href: _href, children, }: import("react").ClassAttributes<HTMLAnchorElement> & import("react").AnchorHTMLAttributes<HTMLAnchorElement> & {
2
+ to?: string | undefined;
3
+ }) => JSX.Element;
package/index.esm.js CHANGED
@@ -987,7 +987,7 @@ const booleanOptions = [
987
987
  { label: 'True', value: 'true' },
988
988
  ];
989
989
  function enumOptions(enumValues, required) {
990
- const options = map(enumValues, v => ({ value: Number.isNaN(Number(v)) ? String(v) : Number(v) }));
990
+ const options = map(enumValues, v => ({ value: typeof v === 'number' ? v : String(v) }));
991
991
  return required ? options : [{ label: 'Not Set', value: '' }, ...options];
992
992
  }
993
993
  function parameterOptions(parameter) {
@@ -1015,7 +1015,11 @@ function parameterSupportsFileUpload(parameter) {
1015
1015
  ((_c = parameter.schema) === null || _c === void 0 ? void 0 : _c.contentMediaType) === 'application/octet-stream'));
1016
1016
  }
1017
1017
  function exampleValue(example) {
1018
- return 'value' in example ? String(example.value) : String(example.externalValue);
1018
+ const value = 'value' in example ? example.value : example.externalValue;
1019
+ return escapeQuotes(String(value));
1020
+ }
1021
+ function escapeQuotes(value) {
1022
+ return value.replace(/"/g, '\\"');
1019
1023
  }
1020
1024
  function getPlaceholderForParameter(parameter) {
1021
1025
  var _a, _b;
@@ -1316,7 +1320,9 @@ function buildFetchRequest({ httpOperation, mediaTypeContent, bodyInput, paramet
1316
1320
  const serverUrl = getServerUrl({ httpOperation, mockData, chosenServer, corsProxy });
1317
1321
  const shouldIncludeBody = ['PUT', 'POST', 'PATCH'].includes(httpOperation.method.toUpperCase());
1318
1322
  const queryParams = (_c = (_b = (_a = httpOperation.request) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.map(param => { var _a; return ({ name: param.name, value: (_a = parameterValues[param.name]) !== null && _a !== void 0 ? _a : '' }); }).filter(({ value }) => value.length > 0)) !== null && _c !== void 0 ? _c : [];
1319
- const rawHeaders = filterOutAuthorizationParams((_e = (_d = httpOperation.request) === null || _d === void 0 ? void 0 : _d.headers) !== null && _e !== void 0 ? _e : [], httpOperation.security).map(header => { var _a; return ({ name: header.name, value: (_a = parameterValues[header.name]) !== null && _a !== void 0 ? _a : '' }); });
1323
+ const rawHeaders = filterOutAuthorizationParams((_e = (_d = httpOperation.request) === null || _d === void 0 ? void 0 : _d.headers) !== null && _e !== void 0 ? _e : [], httpOperation.security)
1324
+ .map(header => { var _a; return ({ name: header.name, value: (_a = parameterValues[header.name]) !== null && _a !== void 0 ? _a : '' }); })
1325
+ .filter(({ value }) => value.length > 0);
1320
1326
  const [queryParamsWithAuth, headersWithAuth] = runAuthRequestEhancements(auth, queryParams, rawHeaders);
1321
1327
  const expandedPath = uriExpand(httpOperation.path, parameterValues);
1322
1328
  const url = new URL(URI(serverUrl).segment(expandedPath).toString());
@@ -1604,9 +1610,9 @@ const bodyFormatMap = {
1604
1610
  text: ['raw'],
1605
1611
  };
1606
1612
  const regex = {
1607
- image: /image\/(.+)*(jpeg|gif|png|svg)/,
1608
- json: /application\/(.+)*json/,
1609
- xml: /(text|application)\/(.+)*(xml|html)/,
1613
+ image: /image\/(.?)*(jpeg|gif|png|svg)/,
1614
+ json: /application\/(.?)*json/,
1615
+ xml: /(text|application)\/(.?)*(xml|html)/,
1610
1616
  text: /text\/.*/,
1611
1617
  };
1612
1618
  function getResponseType(contentType) {
@@ -2341,14 +2347,14 @@ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOpti
2341
2347
  const Model = withErrorBoundary(ModelComponent, { recoverableProps: ['data'] });
2342
2348
 
2343
2349
  const Docs = React.memo((_a) => {
2344
- var { nodeType, nodeData, useNodeForRefResolving = false } = _a, commonProps = __rest(_a, ["nodeType", "nodeData", "useNodeForRefResolving"]);
2350
+ var { nodeType, nodeData, useNodeForRefResolving = false, refResolver } = _a, commonProps = __rest(_a, ["nodeType", "nodeData", "useNodeForRefResolving", "refResolver"]);
2345
2351
  const parsedNode = useParsedData(nodeType, nodeData);
2346
2352
  if (!parsedNode) {
2347
2353
  return null;
2348
2354
  }
2349
2355
  const parsedDocs = React.createElement(ParsedDocs, Object.assign({ node: parsedNode }, commonProps));
2350
2356
  if (useNodeForRefResolving) {
2351
- return React.createElement(InlineRefResolverProvider, { document: parsedNode.data }, parsedDocs);
2357
+ return (React.createElement(InlineRefResolverProvider, { document: parsedNode.data, resolver: refResolver }, parsedDocs));
2352
2358
  }
2353
2359
  return parsedDocs;
2354
2360
  });
@@ -2506,7 +2512,8 @@ const MarkdownComponentsProvider = ({ value, children }) => {
2506
2512
  };
2507
2513
 
2508
2514
  const externalRegex = new RegExp('^(?:[a-z]+:)?//', 'i');
2509
- const ReactRouterMarkdownLink = ({ title, href, children }) => {
2515
+ const ReactRouterMarkdownLink = ({ title, to, href: _href, children, }) => {
2516
+ const href = to || _href;
2510
2517
  const isExternal = href !== undefined && externalRegex.test(href);
2511
2518
  if (isExternal) {
2512
2519
  return (React__default.createElement("a", { target: "_blank", rel: "noreferrer noopener", href: href, title: title }, children));
@@ -2752,7 +2759,7 @@ function withRouter(WrappedComponent) {
2752
2759
  const { Router, routerProps } = useRouter((_c = props.router) !== null && _c !== void 0 ? _c : 'history', basePath, staticRouterPath);
2753
2760
  return (React.createElement(Router, Object.assign({}, routerProps, { key: basePath }),
2754
2761
  React.createElement(Route, { path: "/" },
2755
- React.createElement(MarkdownComponentsProvider, { value: { link: ReactRouterMarkdownLink } },
2762
+ React.createElement(MarkdownComponentsProvider, { value: { a: ReactRouterMarkdownLink } },
2756
2763
  React.createElement(WrappedComponent, Object.assign({}, props))))));
2757
2764
  };
2758
2765
  WithRouter.displayName = `WithRouter(${getDisplayName(WrappedComponent)})`;
package/index.js CHANGED
@@ -1042,7 +1042,7 @@ const booleanOptions = [
1042
1042
  { label: 'True', value: 'true' },
1043
1043
  ];
1044
1044
  function enumOptions(enumValues, required) {
1045
- const options = map__default["default"](enumValues, v => ({ value: Number.isNaN(Number(v)) ? String(v) : Number(v) }));
1045
+ const options = map__default["default"](enumValues, v => ({ value: typeof v === 'number' ? v : String(v) }));
1046
1046
  return required ? options : [{ label: 'Not Set', value: '' }, ...options];
1047
1047
  }
1048
1048
  function parameterOptions(parameter) {
@@ -1070,7 +1070,11 @@ function parameterSupportsFileUpload(parameter) {
1070
1070
  ((_c = parameter.schema) === null || _c === void 0 ? void 0 : _c.contentMediaType) === 'application/octet-stream'));
1071
1071
  }
1072
1072
  function exampleValue(example) {
1073
- return 'value' in example ? String(example.value) : String(example.externalValue);
1073
+ const value = 'value' in example ? example.value : example.externalValue;
1074
+ return escapeQuotes(String(value));
1075
+ }
1076
+ function escapeQuotes(value) {
1077
+ return value.replace(/"/g, '\\"');
1074
1078
  }
1075
1079
  function getPlaceholderForParameter(parameter) {
1076
1080
  var _a, _b;
@@ -1371,7 +1375,9 @@ function buildFetchRequest({ httpOperation, mediaTypeContent, bodyInput, paramet
1371
1375
  const serverUrl = getServerUrl({ httpOperation, mockData, chosenServer, corsProxy });
1372
1376
  const shouldIncludeBody = ['PUT', 'POST', 'PATCH'].includes(httpOperation.method.toUpperCase());
1373
1377
  const queryParams = (_c = (_b = (_a = httpOperation.request) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.map(param => { var _a; return ({ name: param.name, value: (_a = parameterValues[param.name]) !== null && _a !== void 0 ? _a : '' }); }).filter(({ value }) => value.length > 0)) !== null && _c !== void 0 ? _c : [];
1374
- const rawHeaders = filterOutAuthorizationParams((_e = (_d = httpOperation.request) === null || _d === void 0 ? void 0 : _d.headers) !== null && _e !== void 0 ? _e : [], httpOperation.security).map(header => { var _a; return ({ name: header.name, value: (_a = parameterValues[header.name]) !== null && _a !== void 0 ? _a : '' }); });
1378
+ const rawHeaders = filterOutAuthorizationParams((_e = (_d = httpOperation.request) === null || _d === void 0 ? void 0 : _d.headers) !== null && _e !== void 0 ? _e : [], httpOperation.security)
1379
+ .map(header => { var _a; return ({ name: header.name, value: (_a = parameterValues[header.name]) !== null && _a !== void 0 ? _a : '' }); })
1380
+ .filter(({ value }) => value.length > 0);
1375
1381
  const [queryParamsWithAuth, headersWithAuth] = runAuthRequestEhancements(auth, queryParams, rawHeaders);
1376
1382
  const expandedPath = uriExpand(httpOperation.path, parameterValues);
1377
1383
  const url = new URL(URI__default["default"](serverUrl).segment(expandedPath).toString());
@@ -1659,9 +1665,9 @@ const bodyFormatMap = {
1659
1665
  text: ['raw'],
1660
1666
  };
1661
1667
  const regex = {
1662
- image: /image\/(.+)*(jpeg|gif|png|svg)/,
1663
- json: /application\/(.+)*json/,
1664
- xml: /(text|application)\/(.+)*(xml|html)/,
1668
+ image: /image\/(.?)*(jpeg|gif|png|svg)/,
1669
+ json: /application\/(.?)*json/,
1670
+ xml: /(text|application)\/(.?)*(xml|html)/,
1665
1671
  text: /text\/.*/,
1666
1672
  };
1667
1673
  function getResponseType(contentType) {
@@ -2396,14 +2402,14 @@ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOpti
2396
2402
  const Model = reactErrorBoundary.withErrorBoundary(ModelComponent, { recoverableProps: ['data'] });
2397
2403
 
2398
2404
  const Docs = React__namespace.memo((_a) => {
2399
- var { nodeType, nodeData, useNodeForRefResolving = false } = _a, commonProps = tslib.__rest(_a, ["nodeType", "nodeData", "useNodeForRefResolving"]);
2405
+ var { nodeType, nodeData, useNodeForRefResolving = false, refResolver } = _a, commonProps = tslib.__rest(_a, ["nodeType", "nodeData", "useNodeForRefResolving", "refResolver"]);
2400
2406
  const parsedNode = useParsedData(nodeType, nodeData);
2401
2407
  if (!parsedNode) {
2402
2408
  return null;
2403
2409
  }
2404
2410
  const parsedDocs = React__namespace.createElement(ParsedDocs, Object.assign({ node: parsedNode }, commonProps));
2405
2411
  if (useNodeForRefResolving) {
2406
- return React__namespace.createElement(InlineRefResolverProvider, { document: parsedNode.data }, parsedDocs);
2412
+ return (React__namespace.createElement(InlineRefResolverProvider, { document: parsedNode.data, resolver: refResolver }, parsedDocs));
2407
2413
  }
2408
2414
  return parsedDocs;
2409
2415
  });
@@ -2561,7 +2567,8 @@ const MarkdownComponentsProvider = ({ value, children }) => {
2561
2567
  };
2562
2568
 
2563
2569
  const externalRegex = new RegExp('^(?:[a-z]+:)?//', 'i');
2564
- const ReactRouterMarkdownLink = ({ title, href, children }) => {
2570
+ const ReactRouterMarkdownLink = ({ title, to, href: _href, children, }) => {
2571
+ const href = to || _href;
2565
2572
  const isExternal = href !== undefined && externalRegex.test(href);
2566
2573
  if (isExternal) {
2567
2574
  return (React__default["default"].createElement("a", { target: "_blank", rel: "noreferrer noopener", href: href, title: title }, children));
@@ -2807,7 +2814,7 @@ function withRouter(WrappedComponent) {
2807
2814
  const { Router, routerProps } = useRouter((_c = props.router) !== null && _c !== void 0 ? _c : 'history', basePath, staticRouterPath);
2808
2815
  return (React__namespace.createElement(Router, Object.assign({}, routerProps, { key: basePath }),
2809
2816
  React__namespace.createElement(reactRouterDom.Route, { path: "/" },
2810
- React__namespace.createElement(MarkdownComponentsProvider, { value: { link: ReactRouterMarkdownLink } },
2817
+ React__namespace.createElement(MarkdownComponentsProvider, { value: { a: ReactRouterMarkdownLink } },
2811
2818
  React__namespace.createElement(WrappedComponent, Object.assign({}, props))))));
2812
2819
  };
2813
2820
  WithRouter.displayName = `WithRouter(${getDisplayName(WrappedComponent)})`;
package/index.mjs CHANGED
@@ -987,7 +987,7 @@ const booleanOptions = [
987
987
  { label: 'True', value: 'true' },
988
988
  ];
989
989
  function enumOptions(enumValues, required) {
990
- const options = map(enumValues, v => ({ value: Number.isNaN(Number(v)) ? String(v) : Number(v) }));
990
+ const options = map(enumValues, v => ({ value: typeof v === 'number' ? v : String(v) }));
991
991
  return required ? options : [{ label: 'Not Set', value: '' }, ...options];
992
992
  }
993
993
  function parameterOptions(parameter) {
@@ -1015,7 +1015,11 @@ function parameterSupportsFileUpload(parameter) {
1015
1015
  ((_c = parameter.schema) === null || _c === void 0 ? void 0 : _c.contentMediaType) === 'application/octet-stream'));
1016
1016
  }
1017
1017
  function exampleValue(example) {
1018
- return 'value' in example ? String(example.value) : String(example.externalValue);
1018
+ const value = 'value' in example ? example.value : example.externalValue;
1019
+ return escapeQuotes(String(value));
1020
+ }
1021
+ function escapeQuotes(value) {
1022
+ return value.replace(/"/g, '\\"');
1019
1023
  }
1020
1024
  function getPlaceholderForParameter(parameter) {
1021
1025
  var _a, _b;
@@ -1316,7 +1320,9 @@ function buildFetchRequest({ httpOperation, mediaTypeContent, bodyInput, paramet
1316
1320
  const serverUrl = getServerUrl({ httpOperation, mockData, chosenServer, corsProxy });
1317
1321
  const shouldIncludeBody = ['PUT', 'POST', 'PATCH'].includes(httpOperation.method.toUpperCase());
1318
1322
  const queryParams = (_c = (_b = (_a = httpOperation.request) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.map(param => { var _a; return ({ name: param.name, value: (_a = parameterValues[param.name]) !== null && _a !== void 0 ? _a : '' }); }).filter(({ value }) => value.length > 0)) !== null && _c !== void 0 ? _c : [];
1319
- const rawHeaders = filterOutAuthorizationParams((_e = (_d = httpOperation.request) === null || _d === void 0 ? void 0 : _d.headers) !== null && _e !== void 0 ? _e : [], httpOperation.security).map(header => { var _a; return ({ name: header.name, value: (_a = parameterValues[header.name]) !== null && _a !== void 0 ? _a : '' }); });
1323
+ const rawHeaders = filterOutAuthorizationParams((_e = (_d = httpOperation.request) === null || _d === void 0 ? void 0 : _d.headers) !== null && _e !== void 0 ? _e : [], httpOperation.security)
1324
+ .map(header => { var _a; return ({ name: header.name, value: (_a = parameterValues[header.name]) !== null && _a !== void 0 ? _a : '' }); })
1325
+ .filter(({ value }) => value.length > 0);
1320
1326
  const [queryParamsWithAuth, headersWithAuth] = runAuthRequestEhancements(auth, queryParams, rawHeaders);
1321
1327
  const expandedPath = uriExpand(httpOperation.path, parameterValues);
1322
1328
  const url = new URL(URI(serverUrl).segment(expandedPath).toString());
@@ -1604,9 +1610,9 @@ const bodyFormatMap = {
1604
1610
  text: ['raw'],
1605
1611
  };
1606
1612
  const regex = {
1607
- image: /image\/(.+)*(jpeg|gif|png|svg)/,
1608
- json: /application\/(.+)*json/,
1609
- xml: /(text|application)\/(.+)*(xml|html)/,
1613
+ image: /image\/(.?)*(jpeg|gif|png|svg)/,
1614
+ json: /application\/(.?)*json/,
1615
+ xml: /(text|application)\/(.?)*(xml|html)/,
1610
1616
  text: /text\/.*/,
1611
1617
  };
1612
1618
  function getResponseType(contentType) {
@@ -2341,14 +2347,14 @@ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOpti
2341
2347
  const Model = withErrorBoundary(ModelComponent, { recoverableProps: ['data'] });
2342
2348
 
2343
2349
  const Docs = React.memo((_a) => {
2344
- var { nodeType, nodeData, useNodeForRefResolving = false } = _a, commonProps = __rest(_a, ["nodeType", "nodeData", "useNodeForRefResolving"]);
2350
+ var { nodeType, nodeData, useNodeForRefResolving = false, refResolver } = _a, commonProps = __rest(_a, ["nodeType", "nodeData", "useNodeForRefResolving", "refResolver"]);
2345
2351
  const parsedNode = useParsedData(nodeType, nodeData);
2346
2352
  if (!parsedNode) {
2347
2353
  return null;
2348
2354
  }
2349
2355
  const parsedDocs = React.createElement(ParsedDocs, Object.assign({ node: parsedNode }, commonProps));
2350
2356
  if (useNodeForRefResolving) {
2351
- return React.createElement(InlineRefResolverProvider, { document: parsedNode.data }, parsedDocs);
2357
+ return (React.createElement(InlineRefResolverProvider, { document: parsedNode.data, resolver: refResolver }, parsedDocs));
2352
2358
  }
2353
2359
  return parsedDocs;
2354
2360
  });
@@ -2506,7 +2512,8 @@ const MarkdownComponentsProvider = ({ value, children }) => {
2506
2512
  };
2507
2513
 
2508
2514
  const externalRegex = new RegExp('^(?:[a-z]+:)?//', 'i');
2509
- const ReactRouterMarkdownLink = ({ title, href, children }) => {
2515
+ const ReactRouterMarkdownLink = ({ title, to, href: _href, children, }) => {
2516
+ const href = to || _href;
2510
2517
  const isExternal = href !== undefined && externalRegex.test(href);
2511
2518
  if (isExternal) {
2512
2519
  return (React__default.createElement("a", { target: "_blank", rel: "noreferrer noopener", href: href, title: title }, children));
@@ -2752,7 +2759,7 @@ function withRouter(WrappedComponent) {
2752
2759
  const { Router, routerProps } = useRouter((_c = props.router) !== null && _c !== void 0 ? _c : 'history', basePath, staticRouterPath);
2753
2760
  return (React.createElement(Router, Object.assign({}, routerProps, { key: basePath }),
2754
2761
  React.createElement(Route, { path: "/" },
2755
- React.createElement(MarkdownComponentsProvider, { value: { link: ReactRouterMarkdownLink } },
2762
+ React.createElement(MarkdownComponentsProvider, { value: { a: ReactRouterMarkdownLink } },
2756
2763
  React.createElement(WrappedComponent, Object.assign({}, props))))));
2757
2764
  };
2758
2765
  WithRouter.displayName = `WithRouter(${getDisplayName(WrappedComponent)})`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stoplight/elements-core",
3
- "version": "7.5.4",
3
+ "version": "7.5.8",
4
4
  "main": "./index.js",
5
5
  "sideEffects": [
6
6
  "web-components.min.js",
@@ -28,7 +28,7 @@
28
28
  "@stoplight/json": "^3.10.0",
29
29
  "@stoplight/json-schema-ref-parser": "^9.0.5",
30
30
  "@stoplight/json-schema-sampler": "0.2.2",
31
- "@stoplight/json-schema-viewer": "^4.4.2",
31
+ "@stoplight/json-schema-viewer": "^4.5.0",
32
32
  "@stoplight/markdown": "^3.1.1",
33
33
  "@stoplight/markdown-viewer": "^5.3.2",
34
34
  "@stoplight/mosaic": "^1.15.2",