mirror of
https://github.com/SonarSource/sonarqube.git
synced 2024-08-08 03:05:57 +02:00
SONAR-12945 Display latest release's information for scanners in documentation
This commit is contained in:
parent
56466eff29
commit
334d4b7065
@ -301,20 +301,35 @@ Note that an iframe is **not** a self-closing tag. This means that the following
|
||||
|
||||
```
|
||||
|
||||
#### Dynamic Plugin Version Info
|
||||
#### Dynamic Plugin/Scanner Version Info
|
||||
|
||||
_Note: at this time, this is only supported for the static documentation, and will be stripped from the embedded documentation._
|
||||
You can dynamically include a plugin/scanner version block to any page, using the following special tag:
|
||||
|
||||
You can dynamically include a plugin version block to any page, using the following special tag:
|
||||
For static documentation, use:
|
||||
|
||||
```html
|
||||
<!-- update_center:PLUGIN_KEY -->
|
||||
<!-- update_center:{PLUGIN/SCANNER}_KEY -->
|
||||
```
|
||||
|
||||
For embedded documentation, use:
|
||||
```html
|
||||
<update-center updatecenterkey="{PLUGIN/SCANNER}_KEY"></update-center>
|
||||
```
|
||||
|
||||
For example, for Sonar Java, use:
|
||||
|
||||
```html
|
||||
<!-- update_center:java -->
|
||||
or
|
||||
<update-center updatecenterkey="java"></update-center>
|
||||
```
|
||||
|
||||
For gradle's scanner, use:
|
||||
|
||||
```html
|
||||
<!-- update_center:sonargradle -->
|
||||
or
|
||||
<update-center updatecenterkey="sonargradle"></update-center>
|
||||
```
|
||||
|
||||
You can include multiple boxes per page, if needed.
|
||||
|
25
server/sonar-docs/src/@types/types.d.ts
vendored
25
server/sonar-docs/src/@types/types.d.ts
vendored
@ -37,31 +37,6 @@ export interface DocsNavigationExternalLink {
|
||||
url: string;
|
||||
}
|
||||
|
||||
export type PluginMetaDataInfo = {
|
||||
category?: string;
|
||||
isSonarSourceCommercial: boolean;
|
||||
issueTrackerURL?: string;
|
||||
key?: string;
|
||||
license?: string;
|
||||
name: string;
|
||||
organization?: {
|
||||
name: string;
|
||||
url?: string;
|
||||
};
|
||||
sourcesURL?: string;
|
||||
versions?: PluginVersionInfo[];
|
||||
};
|
||||
|
||||
export type PluginVersionInfo = {
|
||||
archived?: boolean;
|
||||
changeLogUrl?: string;
|
||||
compatibility?: string;
|
||||
date?: string;
|
||||
description?: string;
|
||||
downloadURL?: string;
|
||||
version: string;
|
||||
};
|
||||
|
||||
export interface SearchResult {
|
||||
exactMatch?: boolean;
|
||||
highlights: { [field: string]: [number, number][] };
|
||||
|
@ -1,175 +0,0 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
import * as React from 'react';
|
||||
import { createPortal } from 'react-dom';
|
||||
import { Dict, PluginMetaDataInfo } from '../@types/types';
|
||||
import PluginVersionMetaData from './PluginVersionMetaData';
|
||||
import { getPluginMetaData } from './utils';
|
||||
|
||||
interface Props {
|
||||
location: Pick<Location, 'pathname'>;
|
||||
}
|
||||
|
||||
interface State {
|
||||
data: Dict<PluginMetaDataInfo>;
|
||||
wrappers: Dict<HTMLDivElement>;
|
||||
}
|
||||
|
||||
export default class PluginMetaData extends React.Component<Props, State> {
|
||||
state: State = {
|
||||
data: {},
|
||||
wrappers: {}
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.searchForCommentNodes();
|
||||
}
|
||||
|
||||
componentDidUpdate({ location }: Props) {
|
||||
if (location.pathname !== this.props.location.pathname) {
|
||||
this.clearWrapperNodes();
|
||||
this.searchForCommentNodes();
|
||||
}
|
||||
}
|
||||
|
||||
clearWrapperNodes = () => {
|
||||
const { wrappers } = this.state;
|
||||
|
||||
Object.keys(wrappers).forEach(key => {
|
||||
const node = wrappers[key];
|
||||
const { parentNode } = node;
|
||||
if (parentNode) {
|
||||
parentNode.removeChild(node);
|
||||
}
|
||||
|
||||
delete wrappers[key];
|
||||
});
|
||||
|
||||
this.setState({ data: {}, wrappers: {} });
|
||||
};
|
||||
|
||||
fetchAndRender = () => {
|
||||
const { wrappers } = this.state;
|
||||
|
||||
Object.keys(wrappers).forEach(key => {
|
||||
getPluginMetaData(key).then(
|
||||
(payload: PluginMetaDataInfo) => {
|
||||
this.setState(({ data }) => ({ data: { ...data, [key]: payload } }));
|
||||
},
|
||||
() => {}
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
searchForCommentNodes = () => {
|
||||
const pageContainer = document.querySelector('.page-container');
|
||||
|
||||
if (pageContainer) {
|
||||
// The following uses an older syntax for createNodeIterator() in order
|
||||
// to support IE11
|
||||
// - IE doesn't support the new { acceptNode: (node: Node) => number }
|
||||
// format for the 3rd parameter, and instead expects to get it passed
|
||||
// the function directly. Modern browsers support both paradigms as a
|
||||
// fallback, so we fallback to the old one.
|
||||
// - IE11 requires the 4th argument.
|
||||
// @ts-ignore: tsc requires an additional comment at the function call.
|
||||
const iterator = document.createNodeIterator(
|
||||
pageContainer,
|
||||
NodeFilter.SHOW_COMMENT,
|
||||
// @ts-ignore: IE11 doesn't support the { acceptNode: () => number } format.
|
||||
(_: Node) => NodeFilter.FILTER_ACCEPT,
|
||||
// @ts-ignore: IE11 requires the 4th argument.
|
||||
false
|
||||
);
|
||||
|
||||
let node;
|
||||
const wrappers: Dict<HTMLDivElement> = {};
|
||||
while ((node = iterator.nextNode())) {
|
||||
if (node.nodeValue && /update_center\s*:/.test(node.nodeValue)) {
|
||||
let [, key] = node.nodeValue.split(':');
|
||||
key = key.trim();
|
||||
|
||||
const wrapper = document.createElement('div');
|
||||
wrapper.className = 'plugin-meta-data-wrapper';
|
||||
wrappers[key] = wrapper;
|
||||
|
||||
node.parentNode!.insertBefore(wrapper, node);
|
||||
}
|
||||
}
|
||||
this.setState({ wrappers }, this.fetchAndRender);
|
||||
}
|
||||
};
|
||||
|
||||
renderMetaData = ({
|
||||
isSonarSourceCommercial,
|
||||
issueTrackerURL,
|
||||
license,
|
||||
organization,
|
||||
versions
|
||||
}: PluginMetaDataInfo) => {
|
||||
let vendor;
|
||||
if (organization) {
|
||||
vendor = organization.name;
|
||||
if (organization.url) {
|
||||
vendor = (
|
||||
<a href={organization.url} rel="noopener noreferrer" target="_blank">
|
||||
{vendor}
|
||||
</a>
|
||||
);
|
||||
}
|
||||
}
|
||||
return (
|
||||
<div className="plugin-meta-data">
|
||||
<div className="plugin-meta-data-header">
|
||||
{vendor && <span className="plugin-meta-data-vendor">By {vendor}</span>}
|
||||
{license && <span className="plugin-meta-data-license">{license}</span>}
|
||||
{issueTrackerURL && (
|
||||
<span className="plugin-meta-data-issue-tracker">
|
||||
<a href={issueTrackerURL} rel="noopener noreferrer" target="_blank">
|
||||
Issue Tracker
|
||||
</a>
|
||||
</span>
|
||||
)}
|
||||
{isSonarSourceCommercial && (
|
||||
<span className="plugin-meta-data-supported">Supported by SonarSource</span>
|
||||
)}
|
||||
</div>
|
||||
{versions && versions.length > 0 && <PluginVersionMetaData versions={versions} />}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { data, wrappers } = this.state;
|
||||
const keys = Object.keys(data);
|
||||
|
||||
if (keys.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return keys.map(key => {
|
||||
if (wrappers[key] !== undefined && data[key] !== undefined) {
|
||||
return createPortal(this.renderMetaData(data[key]), wrappers[key]);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -1,118 +0,0 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
import classNames from 'classnames';
|
||||
import * as React from 'react';
|
||||
import { PluginVersionInfo } from '../@types/types';
|
||||
|
||||
interface Props {
|
||||
versions: PluginVersionInfo[];
|
||||
}
|
||||
|
||||
interface State {
|
||||
collapsed: boolean;
|
||||
}
|
||||
|
||||
export default class PluginVersionMetaData extends React.Component<Props, State> {
|
||||
state: State = {
|
||||
collapsed: true
|
||||
};
|
||||
|
||||
handleClick = (event: React.SyntheticEvent<HTMLButtonElement>) => {
|
||||
event.preventDefault();
|
||||
event.currentTarget.blur();
|
||||
this.setState(({ collapsed }) => ({ collapsed: !collapsed }));
|
||||
};
|
||||
|
||||
renderVersion = ({
|
||||
archived,
|
||||
changeLogUrl,
|
||||
compatibility,
|
||||
date,
|
||||
description,
|
||||
downloadURL,
|
||||
version
|
||||
}: PluginVersionInfo) => {
|
||||
return (
|
||||
<div
|
||||
className={classNames('plugin-meta-data-version', {
|
||||
'plugin-meta-data-version-archived': archived
|
||||
})}
|
||||
key={version}>
|
||||
<div className="plugin-meta-data-version-version">{version}</div>
|
||||
|
||||
<div className="plugin-meta-data-version-release-info">
|
||||
{date && <time className="plugin-meta-data-version-release-date">{date}</time>}
|
||||
|
||||
{compatibility && (
|
||||
<span className="plugin-meta-data-version-compatibility">{compatibility}</span>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{description && (
|
||||
<div className="plugin-meta-data-version-release-description">{description}</div>
|
||||
)}
|
||||
|
||||
{(downloadURL || changeLogUrl) && (
|
||||
<div className="plugin-meta-data-version-release-links">
|
||||
{downloadURL && (
|
||||
<span className="plugin-meta-data-version-download">
|
||||
<a href={downloadURL} rel="noopener noreferrer" target="_blank">
|
||||
Download
|
||||
</a>
|
||||
</span>
|
||||
)}
|
||||
|
||||
{changeLogUrl && (
|
||||
<span className="plugin-meta-data-version-release-notes">
|
||||
<a href={changeLogUrl} rel="noopener noreferrer" target="_blank">
|
||||
Release notes
|
||||
</a>
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { versions } = this.props;
|
||||
const { collapsed } = this.state;
|
||||
|
||||
const archivedVersions = versions.filter(version => version.archived);
|
||||
const currentVersions = versions.filter(version => !version.archived);
|
||||
return (
|
||||
<div className="plugin-meta-data-versions">
|
||||
{archivedVersions.length > 0 && (
|
||||
<button
|
||||
className="plugin-meta-data-versions-show-more"
|
||||
onClick={this.handleClick}
|
||||
type="button">
|
||||
{collapsed ? 'Show more versions' : 'Show fewer version'}
|
||||
</button>
|
||||
)}
|
||||
|
||||
{currentVersions.map(version => this.renderVersion(version))}
|
||||
|
||||
{!collapsed && archivedVersions.map(version => this.renderVersion(version))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,132 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
import * as React from 'react';
|
||||
import { createPortal } from 'react-dom';
|
||||
import MetaData from 'sonar-ui-common/components/ui/update-center/MetaData';
|
||||
import { Dict } from '../@types/types';
|
||||
|
||||
interface Props {
|
||||
location: Pick<Location, 'pathname'>;
|
||||
}
|
||||
|
||||
interface State {
|
||||
wrappers: Dict<HTMLDivElement>;
|
||||
}
|
||||
|
||||
export default class UpdateCenterMetaDataInjector extends React.Component<Props, State> {
|
||||
state: State = {
|
||||
wrappers: {}
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.searchForMetaData();
|
||||
}
|
||||
|
||||
componentDidUpdate({ location }: Props) {
|
||||
if (location.pathname !== this.props.location.pathname) {
|
||||
this.clearMetaData();
|
||||
this.searchForMetaData();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.clearMetaData();
|
||||
}
|
||||
|
||||
clearMetaData = () => {
|
||||
const { wrappers } = this.state;
|
||||
|
||||
Object.keys(wrappers).forEach(key => {
|
||||
const node = wrappers[key];
|
||||
const { parentNode } = node;
|
||||
if (parentNode) {
|
||||
parentNode.removeChild(node);
|
||||
}
|
||||
|
||||
delete wrappers[key];
|
||||
});
|
||||
|
||||
this.setState({ wrappers: {} });
|
||||
};
|
||||
|
||||
searchForMetaData = () => {
|
||||
const pageContainer = document.querySelector('.page-container');
|
||||
|
||||
if (!pageContainer) {
|
||||
return;
|
||||
}
|
||||
|
||||
// The following uses an older syntax for createNodeIterator() in order
|
||||
// to support IE11
|
||||
// - IE doesn't support the new { acceptNode: (node: Node) => number }
|
||||
// format for the 3rd parameter, and instead expects to get it passed
|
||||
// the function directly. Modern browsers support both paradigms as a
|
||||
// fallback, so we fallback to the old one.
|
||||
// - IE11 requires the 4th argument.
|
||||
// @ts-ignore: tsc requires an additional comment at the function call.
|
||||
const iterator = document.createNodeIterator(
|
||||
pageContainer,
|
||||
NodeFilter.SHOW_COMMENT,
|
||||
// @ts-ignore: IE11 doesn't support the { acceptNode: () => number } format.
|
||||
(_: Node) => NodeFilter.FILTER_ACCEPT,
|
||||
// @ts-ignore: IE11 requires the 4th argument.
|
||||
false
|
||||
);
|
||||
|
||||
const wrappers: Dict<HTMLDivElement> = {};
|
||||
let node = iterator.nextNode();
|
||||
|
||||
while (node) {
|
||||
if (node.nodeValue && node.parentNode && /update_center\s*:/.test(node.nodeValue)) {
|
||||
let [, key] = node.nodeValue.split(':');
|
||||
key = key.trim();
|
||||
|
||||
const wrapper = document.createElement('div');
|
||||
wrappers[key] = wrapper;
|
||||
node.parentNode.insertBefore(wrapper, node);
|
||||
}
|
||||
|
||||
node = iterator.nextNode();
|
||||
}
|
||||
|
||||
this.setState({ wrappers });
|
||||
};
|
||||
|
||||
render() {
|
||||
const { wrappers } = this.state;
|
||||
const keys = Object.keys(wrappers);
|
||||
|
||||
if (keys.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
{keys.map(key => {
|
||||
if (wrappers[key]) {
|
||||
return createPortal(<MetaData updateCenterKey={key} />, wrappers[key]);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
import { mount } from 'enzyme';
|
||||
import * as React from 'react';
|
||||
import PluginMetaData from '../PluginMetaData';
|
||||
import { getPluginMetaData } from '../utils';
|
||||
|
||||
jest.mock('../utils', () => ({
|
||||
getPluginMetaData: jest.fn().mockResolvedValue({
|
||||
name: 'SonarJava',
|
||||
key: 'java',
|
||||
isSonarSourceCommercial: true,
|
||||
organization: {
|
||||
name: 'SonarSource',
|
||||
url: 'http://www.sonarsource.com/'
|
||||
},
|
||||
category: 'Languages',
|
||||
license: 'SonarSource',
|
||||
issueTrackerURL: 'https://jira.sonarsource.com/browse/SONARJAVA',
|
||||
sourcesURL: 'https://github.com/SonarSource/sonar-java',
|
||||
versions: [
|
||||
{
|
||||
version: '4.2',
|
||||
compatibilityRange: { minimum: '6.0', maximum: '6.6' },
|
||||
archived: false,
|
||||
downloadURL: 'https://example.com/sonar-java-plugin-5.13.0.18197.jar'
|
||||
},
|
||||
{
|
||||
version: '3.2',
|
||||
date: '2015-04-30',
|
||||
compatibilityRange: { maximum: '6.0' },
|
||||
archived: true,
|
||||
changeLogUrl: 'https://example.com/sonar-java-plugin/release',
|
||||
downloadURL: 'https://example.com/sonar-java-plugin-3.2.jar'
|
||||
}
|
||||
]
|
||||
})
|
||||
}));
|
||||
|
||||
beforeAll(() => {
|
||||
(global as any).document.body.innerHTML = `
|
||||
<div class="page-container">
|
||||
<p>Lorem ipsum</p>
|
||||
<!-- update_center:java -->
|
||||
<p>Dolor sit amet</p>
|
||||
<!-- update_center : python -->
|
||||
<p>Foo Bar</p>
|
||||
<!--update_center : abap-->
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
it('should render correctly', async () => {
|
||||
const wrapper = shallowRender();
|
||||
await new Promise(setImmediate);
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
expect(getPluginMetaData).toBeCalledWith('java');
|
||||
expect(getPluginMetaData).toBeCalledWith('python');
|
||||
expect(getPluginMetaData).toBeCalledWith('abap');
|
||||
});
|
||||
|
||||
function shallowRender(props: Partial<PluginMetaData['props']> = {}) {
|
||||
return mount(<PluginMetaData location={{ pathname: 'foo' }} {...props} />);
|
||||
}
|
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
import { shallow } from 'enzyme';
|
||||
import * as React from 'react';
|
||||
import PluginVersionMetaData from '../PluginVersionMetaData';
|
||||
|
||||
it('should render correctly', () => {
|
||||
const wrapper = shallowRender();
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('should correctly show all versions', () => {
|
||||
const wrapper = shallowRender();
|
||||
expect(wrapper.find('.plugin-meta-data-version').length).toBe(2);
|
||||
wrapper.instance().setState({ collapsed: false });
|
||||
expect(wrapper.find('.plugin-meta-data-version').length).toBe(5);
|
||||
});
|
||||
|
||||
function shallowRender(props: Partial<PluginVersionMetaData['props']> = {}) {
|
||||
return shallow(
|
||||
<PluginVersionMetaData
|
||||
versions={[
|
||||
{
|
||||
version: '5.13',
|
||||
date: '2019-05-31',
|
||||
compatibility: '6.7',
|
||||
archived: false,
|
||||
downloadURL: 'https://example.com/sonar-java-plugin-5.13.0.18197.jar',
|
||||
changeLogUrl: 'https://example.com/sonar-java-plugin/release'
|
||||
},
|
||||
{
|
||||
version: '4.2',
|
||||
archived: false,
|
||||
downloadURL: 'https://example.com/sonar-java-plugin-5.13.0.18197.jar'
|
||||
},
|
||||
{
|
||||
version: '3.2',
|
||||
date: '2015-04-30',
|
||||
compatibility: '6.0 to 7.1',
|
||||
archived: true,
|
||||
changeLogUrl: 'https://example.com/sonar-java-plugin/release',
|
||||
downloadURL: 'https://example.com/sonar-java-plugin-3.2.jar'
|
||||
},
|
||||
{
|
||||
version: '3.1',
|
||||
description: 'Lorem ipsum dolor sit amet',
|
||||
archived: true,
|
||||
changeLogUrl: 'https://example.com/sonar-java-plugin/release',
|
||||
downloadURL: 'https://example.com/sonar-java-plugin-3.1.jar'
|
||||
},
|
||||
{
|
||||
version: '2.1',
|
||||
archived: true,
|
||||
downloadURL: 'https://example.com/sonar-java-plugin-2.1.jar'
|
||||
}
|
||||
]}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
import { shallow } from 'enzyme';
|
||||
import * as React from 'react';
|
||||
import UpdateCenterMetaDataInjector from '../UpdateCenterMetaDataInjector';
|
||||
|
||||
it('should render correctly', () => {
|
||||
(global as any).document.body.innerHTML = `
|
||||
<div class="page-container">
|
||||
<p>Lorem ipsum</p>
|
||||
<!-- update_center:java -->
|
||||
<p>Dolor sit amet</p>
|
||||
<!-- update_center : python -->
|
||||
<p>Foo Bar</p>
|
||||
<!--update_center : abap-->
|
||||
</div>
|
||||
`;
|
||||
|
||||
const wrapper = shallowRender();
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
|
||||
(global as any).document.body.innerHTML = `
|
||||
<div class="page-container">
|
||||
<p>Lorem ipsum</p>
|
||||
<!-- update_center:csharp -->
|
||||
<p>Foo Bar</p>
|
||||
</div>
|
||||
`;
|
||||
|
||||
wrapper.setProps({ location: { pathname: 'foo2' } });
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
});
|
||||
|
||||
function shallowRender(props: Partial<UpdateCenterMetaDataInjector['props']> = {}) {
|
||||
return shallow<UpdateCenterMetaDataInjector>(
|
||||
<UpdateCenterMetaDataInjector location={{ pathname: 'foo' }} {...props} />
|
||||
);
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`should render correctly 1`] = `
|
||||
<PluginMetaData
|
||||
location={
|
||||
Object {
|
||||
"pathname": "foo",
|
||||
}
|
||||
}
|
||||
/>
|
||||
`;
|
@ -1,93 +0,0 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`should render correctly 1`] = `
|
||||
<div
|
||||
className="plugin-meta-data-versions"
|
||||
>
|
||||
<button
|
||||
className="plugin-meta-data-versions-show-more"
|
||||
onClick={[Function]}
|
||||
type="button"
|
||||
>
|
||||
Show more versions
|
||||
</button>
|
||||
<div
|
||||
className="plugin-meta-data-version"
|
||||
key="5.13"
|
||||
>
|
||||
<div
|
||||
className="plugin-meta-data-version-version"
|
||||
>
|
||||
5.13
|
||||
</div>
|
||||
<div
|
||||
className="plugin-meta-data-version-release-info"
|
||||
>
|
||||
<time
|
||||
className="plugin-meta-data-version-release-date"
|
||||
>
|
||||
2019-05-31
|
||||
</time>
|
||||
<span
|
||||
className="plugin-meta-data-version-compatibility"
|
||||
>
|
||||
6.7
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
className="plugin-meta-data-version-release-links"
|
||||
>
|
||||
<span
|
||||
className="plugin-meta-data-version-download"
|
||||
>
|
||||
<a
|
||||
href="https://example.com/sonar-java-plugin-5.13.0.18197.jar"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
Download
|
||||
</a>
|
||||
</span>
|
||||
<span
|
||||
className="plugin-meta-data-version-release-notes"
|
||||
>
|
||||
<a
|
||||
href="https://example.com/sonar-java-plugin/release"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
Release notes
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className="plugin-meta-data-version"
|
||||
key="4.2"
|
||||
>
|
||||
<div
|
||||
className="plugin-meta-data-version-version"
|
||||
>
|
||||
4.2
|
||||
</div>
|
||||
<div
|
||||
className="plugin-meta-data-version-release-info"
|
||||
/>
|
||||
<div
|
||||
className="plugin-meta-data-version-release-links"
|
||||
>
|
||||
<span
|
||||
className="plugin-meta-data-version-download"
|
||||
>
|
||||
<a
|
||||
href="https://example.com/sonar-java-plugin-5.13.0.18197.jar"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
Download
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
@ -0,0 +1,39 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`should render correctly 1`] = `
|
||||
<div>
|
||||
<Portal
|
||||
containerInfo={<div />}
|
||||
>
|
||||
<MetaData
|
||||
updateCenterKey="java"
|
||||
/>
|
||||
</Portal>
|
||||
<Portal
|
||||
containerInfo={<div />}
|
||||
>
|
||||
<MetaData
|
||||
updateCenterKey="python"
|
||||
/>
|
||||
</Portal>
|
||||
<Portal
|
||||
containerInfo={<div />}
|
||||
>
|
||||
<MetaData
|
||||
updateCenterKey="abap"
|
||||
/>
|
||||
</Portal>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`should render correctly 2`] = `
|
||||
<div>
|
||||
<Portal
|
||||
containerInfo={<div />}
|
||||
>
|
||||
<MetaData
|
||||
updateCenterKey="csharp"
|
||||
/>
|
||||
</Portal>
|
||||
</div>
|
||||
`;
|
@ -19,7 +19,6 @@
|
||||
*/
|
||||
import { sortBy } from 'lodash';
|
||||
import { MarkdownRemark } from '../@types/graphql-types';
|
||||
import { PluginMetaDataInfo } from '../@types/types';
|
||||
|
||||
const WORDS = 6;
|
||||
|
||||
@ -127,18 +126,3 @@ export function highlightMarks(str: string, marks: Array<{ from: number; to: num
|
||||
export function isDefined<T>(x: T | undefined | null): x is T {
|
||||
return x !== undefined && x !== null;
|
||||
}
|
||||
|
||||
export function getPluginMetaData(key: string): Promise<PluginMetaDataInfo> {
|
||||
return (
|
||||
window
|
||||
.fetch(`https://update.sonarsource.org/${key}.json`)
|
||||
.then((response: Response) => {
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return response.json();
|
||||
}
|
||||
return Promise.reject(response);
|
||||
})
|
||||
/* eslint-disable no-console */
|
||||
.catch(console.error)
|
||||
);
|
||||
}
|
||||
|
@ -23,8 +23,8 @@ import { MarkdownRemark, MarkdownRemarkConnection } from '../@types/graphql-type
|
||||
import Footer from '../components/Footer';
|
||||
import HeaderListProvider from '../components/HeaderListProvider';
|
||||
import HeadingsLink from '../components/HeadingsLink';
|
||||
import PluginMetaData from '../components/PluginMetaData';
|
||||
import Sidebar from '../components/Sidebar';
|
||||
import UpdateCenterMetaDataInjector from '../components/UpdateCenterMetaDataInjector';
|
||||
import './layout.css';
|
||||
|
||||
const version = process.env.GATSBY_DOCS_VERSION || '1.0';
|
||||
@ -95,7 +95,7 @@ export default function Layout({ children, location }: Props) {
|
||||
<div className="markdown-container">{children}</div>
|
||||
</div>
|
||||
<Footer />
|
||||
<PluginMetaData location={location} />
|
||||
<UpdateCenterMetaDataInjector location={location} />
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
@ -718,86 +718,3 @@ img[src$='/images/info.svg'] {
|
||||
margin-bottom: 0;
|
||||
top: 0 !important;
|
||||
}
|
||||
|
||||
.plugin-meta-data {
|
||||
margin: 16px 0;
|
||||
padding: 16px 16px 8px 16px;
|
||||
background: #f9f9fb;
|
||||
border: 1px solid #e6e6e6;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.plugin-meta-data a svg {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.plugin-meta-data-header {
|
||||
border-bottom: 1px solid #cfd3d7;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
|
||||
.plugin-meta-data-header,
|
||||
.plugin-meta-data-version-release-info,
|
||||
.plugin-meta-data-version-links {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.plugin-meta-data-header > * + *,
|
||||
.plugin-meta-data-version-release-info > * + *,
|
||||
.plugin-meta-data-version-release-links > * + * {
|
||||
margin-left: 16px;
|
||||
}
|
||||
|
||||
.plugin-meta-data-header > * + * {
|
||||
padding-left: 16px;
|
||||
border-left: 1px solid #cfd3d7;
|
||||
}
|
||||
|
||||
.plugin-meta-data-versions {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.plugin-meta-data-versions-show-more {
|
||||
font-size: 14px;
|
||||
float: right;
|
||||
color: #51575a;
|
||||
border-color: #7b8184;
|
||||
border-width: 0 0 1px 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.plugin-meta-data-versions-show-more:hover {
|
||||
color: #2d3032;
|
||||
border-color: #2d3032;
|
||||
}
|
||||
|
||||
.plugin-meta-data-version {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.plugin-meta-data-version + .plugin-meta-data-version {
|
||||
padding-top: 8px;
|
||||
padding-top: 8px;
|
||||
border-top: 1px dashed #cfd3d7;
|
||||
}
|
||||
|
||||
.plugin-meta-data-version-version {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.plugin-meta-data-version-release-info {
|
||||
margin-top: 8px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.plugin-meta-data-version-release-description {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.plugin-meta-data-version-release-links {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
@ -3,11 +3,10 @@ title: SonarScanner for Ant
|
||||
url: /analysis/scan/sonarscanner-for-ant/
|
||||
---
|
||||
|
||||
[[info]]
|
||||
| **Download SonarScanner for Ant 2.7** - Compatible with SonarQube 6.7+ (LTS)
|
||||
| By [SonarSource](https://www.sonarsource.com/) – GNU LGPL 3 – [Issue Tracker](https://jira.sonarsource.com/browse/ANTTASK) – [Source](https://github.com/SonarSource/sonar-scanner-ant)
|
||||
|
|
||||
| [Download](https://binaries.sonarsource.com/Distribution/sonarqube-ant-task/sonarqube-ant-task-2.7.0.1612.jar)
|
||||
<!-- static -->
|
||||
<!-- update_center:scannerant -->
|
||||
<!-- /static -->
|
||||
<update-center updatecenterkey="scannerant"></update-center>
|
||||
|
||||
The SonarScanner for Ant provides a `task` to allow integration of SonarQube analysis into an Apache Ant build script.
|
||||
|
||||
|
@ -3,10 +3,10 @@ title: SonarScanner for Azure DevOps
|
||||
url: /analysis/scan/sonarscanner-for-azure-devops/
|
||||
---
|
||||
|
||||
|
||||
[[info]]
|
||||
| By [SonarSource](https://www.sonarsource.com/) - GNU LGPL 3 - [Issue Tracker](https://jira.sonarsource.com/browse/VSTS) - [Source](https://github.com/SonarSource/sonar-scanner-vsts)
|
||||
| Click [here](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube) for the latest version.
|
||||
<!-- static -->
|
||||
<!-- update_center:scannerazure -->
|
||||
<!-- /static -->
|
||||
<update-center updatecenterkey="scannerazure"></update-center>
|
||||
|
||||
The <!-- sonarqube -->[SonarQube](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube)<!-- /sonarqube --> <!-- sonarcloud -->[SonarCloud](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarcloud)<!-- /sonarcloud --> extension for Azure DevOps <!-- sonarqube -->Server<!-- /sonarqube --> makes it easy to integrate analysis into your build pipeline. The extension allows the analysis of all languages supported by {instance}.
|
||||
|
||||
|
@ -3,11 +3,10 @@ title: SonarScanner for Gradle
|
||||
url: /analysis/scan/sonarscanner-for-gradle/
|
||||
---
|
||||
|
||||
[[info]]
|
||||
| By [SonarSource](https://www.sonarsource.com/) – GNU LGPL 3 – [Issue Tracker](https://jira.sonarsource.com/browse/SONARGRADL) – [Source](https://github.com/SonarSource/sonar-scanner-gradle)
|
||||
| Click [here](https://plugins.gradle.org/plugin/org.sonarqube) for the latest version.
|
||||
|
||||
|
||||
<!-- static -->
|
||||
<!-- update_center:scannergradle -->
|
||||
<!-- /static -->
|
||||
<update-center updatecenterkey="scannergradle"></update-center>
|
||||
|
||||
The SonarScanner for Gradle provides an easy way to start SonarQube analysis of a Gradle project.
|
||||
|
||||
|
@ -3,9 +3,10 @@ title: SonarScanner for Jenkins
|
||||
url: /analysis/scan/sonarscanner-for-jenkins/
|
||||
---
|
||||
|
||||
[[info]]
|
||||
| By [SonarSource](https://www.sonarsource.com/) – GNU LGPL 3 – [Issue Tracker](https://jira.sonarsource.com/browse/SONARJNKNS) – [Source](https://github.com/SonarSource/sonar-scanner-jenkins)
|
||||
| Click [here](https://plugins.jenkins.io/sonar) for the latest version.
|
||||
<!-- static -->
|
||||
<!-- update_center:scannerjenkins -->
|
||||
<!-- /static -->
|
||||
<update-center updatecenterkey="scannerjenkins"></update-center>
|
||||
|
||||
This plugin lets you centralize the configuration of SonarQube server connection details in Jenkins global configuration.
|
||||
|
||||
|
@ -3,10 +3,10 @@ title: SonarScanner for Maven
|
||||
url: /analysis/scan/sonarscanner-for-maven/
|
||||
---
|
||||
|
||||
[[info]]
|
||||
| By [SonarSource](https://www.sonarsource.com/) – GNU LGPL 3 – [Issue Tracker](https://jira.sonarsource.com/browse/MSONAR) – [Source](https://github.com/SonarSource/sonar-scanner-maven)
|
||||
| Click [here](https://mvnrepository.com/artifact/org.sonarsource.scanner.maven/sonar-maven-plugin) for the latest version.
|
||||
|
||||
<!-- static -->
|
||||
<!-- update_center:scannermaven -->
|
||||
<!-- /static -->
|
||||
<update-center updatecenterkey="scannermaven"></update-center>
|
||||
|
||||
The SonarScanner is recommended as the default analyzer for Maven projects.
|
||||
|
||||
|
@ -3,15 +3,10 @@ title: SonarScanner for MSBuild
|
||||
url: /analysis/scan/sonarscanner-for-msbuild/
|
||||
---
|
||||
|
||||
[[info]]
|
||||
| **Download SonarScanner for MSBuild 4.8.0.12008** - Compatible with [SonarQube 7.9+ (LTS)](https://www.sonarqube.org/sonarqube-7-9-lts/)
|
||||
| By [SonarSource](https://www.sonarsource.com/) – GNU LGPL 3 – [Issue Tracker](https://github.com/SonarSource/sonar-scanner-msbuild/issues) – [Source](https://github.com/SonarSource/sonar-scanner-msbuild)
|
||||
|
|
||||
| [.NET Framework 4.6+](https://github.com/SonarSource/sonar-scanner-msbuild/releases/download/4.8.0.12008/sonar-scanner-msbuild-4.8.0.12008-net46.zip) |
|
||||
| [.NET Core 2.0+](https://github.com/SonarSource/sonar-scanner-msbuild/releases/download/4.8.0.12008/sonar-scanner-msbuild-4.8.0.12008-netcoreapp2.0.zip) |
|
||||
| [.NET Core 3.0+](https://github.com/SonarSource/sonar-scanner-msbuild/releases/download/4.8.0.12008/sonar-scanner-msbuild-4.8.0.12008-netcoreapp3.0.zip) |
|
||||
| [.NET Core Global Tool](https://www.nuget.org/packages/dotnet-sonarscanner)
|
||||
|
||||
<!-- static -->
|
||||
<!-- update_center:scannermsbuild -->
|
||||
<!-- /static -->
|
||||
<update-center updatecenterkey="scannermsbuild"></update-center>
|
||||
|
||||
The SonarScanner for MSBuild is the recommended way to launch an analysis for projects/solutions using MSBuild or dotnet command as a build tool. It is the result of a [collaboration between SonarSource and Microsoft](http://www.sonarqube.org/announcing-sonarqube-integration-with-msbuild-and-team-build/).
|
||||
|
||||
|
@ -3,16 +3,10 @@ title: SonarScanner
|
||||
url: /analysis/scan/sonarscanner/
|
||||
---
|
||||
|
||||
[[info]]
|
||||
| **Download SonarScanner 4.2** - Compatible with SonarQube 6.7+ (LTS)
|
||||
| By [SonarSource](https://www.sonarsource.com/) – GNU LGPL 3 – [Issue Tracker](https://jira.sonarsource.com/browse/SQSCANNER) – [Source](https://github.com/Sonarsource/sonar-scanner-cli)
|
||||
|
|
||||
| [Linux 64-bit](https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip) |
|
||||
| [Windowx 64-bit](https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-windows.zip) |
|
||||
| [Mac OS X 64-bit](https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-macosx.zip) |
|
||||
| [Any*](https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873.zip) |
|
||||
| [Docker](https://hub.docker.com/r/sonarsource/sonar-scanner-cli)
|
||||
| *Requires a pre-installed JVM - with the same requirements as the SonarQube server.
|
||||
<!-- static -->
|
||||
<!-- update_center:scannercli -->
|
||||
<!-- /static -->
|
||||
<update-center updatecenterkey="scannercli"></update-center>
|
||||
|
||||
The SonarScanner is the scanner to use when there is no specific scanner for your build system.
|
||||
|
||||
|
@ -33,7 +33,10 @@
|
||||
"redux": "4.0.5",
|
||||
"redux-thunk": "2.3.0",
|
||||
"regenerator-runtime": "0.13.5",
|
||||
"rehype-raw": "4.0.2",
|
||||
"rehype-react": "5.0.0",
|
||||
"remark-custom-blocks": "2.5.0",
|
||||
"remark-rehype": "6.0.0",
|
||||
"remark-slug": "5.1.2",
|
||||
"sonar-ui-common": "0.0.57",
|
||||
"unist-util-visit": "2.0.2",
|
||||
|
23
server/sonar-web/src/main/js/@types/rehype-raw.d.ts
vendored
Normal file
23
server/sonar-web/src/main/js/@types/rehype-raw.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
declare module 'rehype-raw' {
|
||||
export default function rehypeRaw(): any;
|
||||
}
|
23
server/sonar-web/src/main/js/@types/rehype-react.d.ts
vendored
Normal file
23
server/sonar-web/src/main/js/@types/rehype-react.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
declare module 'rehype-react' {
|
||||
export default function rehypeReact(): any;
|
||||
}
|
23
server/sonar-web/src/main/js/@types/remark-rehype.d.ts
vendored
Normal file
23
server/sonar-web/src/main/js/@types/remark-rehype.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* SonarQube
|
||||
* Copyright (C) 2009-2020 SonarSource SA
|
||||
* mailto:info AT sonarsource DOT com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
declare module 'remark-rehype' {
|
||||
export default function remarkRehype(): any;
|
||||
}
|
@ -19,10 +19,13 @@
|
||||
*/
|
||||
import * as classNames from 'classnames';
|
||||
import * as React from 'react';
|
||||
import rehypeRaw from 'rehype-raw';
|
||||
import rehypeReact from 'rehype-react';
|
||||
import remark from 'remark';
|
||||
import remarkCustomBlocks from 'remark-custom-blocks';
|
||||
import reactRenderer from 'remark-react';
|
||||
import remarkRehype from 'remark-rehype';
|
||||
import slug from 'remark-slug';
|
||||
import MetaData from 'sonar-ui-common/components/ui/update-center/MetaData';
|
||||
import { scrollToElement } from 'sonar-ui-common/helpers/scrolling';
|
||||
import DocCollapsibleBlock from './DocCollapsibleBlock';
|
||||
import DocImg from './DocImg';
|
||||
@ -69,18 +72,22 @@ export default class DocMarkdownBlock extends React.PureComponent<Props> {
|
||||
success: { classes: 'alert alert-success' },
|
||||
collapse: { classes: 'collapse' }
|
||||
})
|
||||
.use(reactRenderer, {
|
||||
remarkReactComponents: {
|
||||
.use(remarkRehype, { allowDangerousHTML: true })
|
||||
.use(rehypeRaw)
|
||||
.use(rehypeReact, {
|
||||
createElement: React.createElement,
|
||||
components: {
|
||||
div: Block,
|
||||
// use custom link to render documentation anchors
|
||||
a: isTooltip
|
||||
? withChildProps(DocTooltipLink, childProps)
|
||||
: withChildProps(DocLink, { onAnchorClick: this.handleAnchorClick }),
|
||||
// use custom img tag to render documentation images
|
||||
img: DocImg
|
||||
},
|
||||
toHast: {},
|
||||
sanitize: false
|
||||
img: DocImg,
|
||||
'update-center': ({ updatecenterkey }: { updatecenterkey: string }) => (
|
||||
<MetaData updateCenterKey={updatecenterkey} />
|
||||
)
|
||||
}
|
||||
})
|
||||
.use(slug);
|
||||
|
||||
|
@ -17,8 +17,9 @@
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
import { shallow } from 'enzyme';
|
||||
import { mount, shallow } from 'enzyme';
|
||||
import * as React from 'react';
|
||||
import MetaData from 'sonar-ui-common/components/ui/update-center/MetaData';
|
||||
import DocMarkdownBlock from '../DocMarkdownBlock';
|
||||
|
||||
const CONTENT = `
|
||||
@ -42,20 +43,11 @@ Risus placerat, efficitur enim ut, pellentesque sem. Mauris non lorem auctor, co
|
||||
`;
|
||||
|
||||
// mock `remark` & co to work around the issue with cjs imports
|
||||
jest.mock('remark', () => {
|
||||
const remark = require.requireActual('remark');
|
||||
return { default: remark };
|
||||
});
|
||||
|
||||
jest.mock('remark-react', () => {
|
||||
const remarkReact = require.requireActual('remark-react');
|
||||
return { default: remarkReact };
|
||||
});
|
||||
|
||||
jest.mock('remark-slug', () => {
|
||||
const remarkSlug = require.requireActual('remark-slug');
|
||||
return { default: remarkSlug };
|
||||
});
|
||||
jest.mock('remark', () => ({ default: jest.requireActual('remark') }));
|
||||
jest.mock('remark-rehype', () => ({ default: jest.requireActual('remark-rehype') }));
|
||||
jest.mock('rehype-raw', () => ({ default: jest.requireActual('rehype-raw') }));
|
||||
jest.mock('rehype-react', () => ({ default: jest.requireActual('rehype-react') }));
|
||||
jest.mock('remark-slug', () => ({ default: jest.requireActual('remark-slug') }));
|
||||
|
||||
jest.mock('../../../helpers/system', () => ({
|
||||
getInstance: jest.fn(),
|
||||
@ -88,6 +80,13 @@ it('should render a sticky TOC if available', () => {
|
||||
expect(wrapper.find('DocToc').exists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should correctly render update-center tags', () => {
|
||||
const wrapper = mount(
|
||||
<DocMarkdownBlock content='<update-center updatecenterkey="abap"></update-center>' />
|
||||
);
|
||||
expect(wrapper.find(MetaData).length).toBe(1);
|
||||
});
|
||||
|
||||
function shallowRender(props: Partial<DocMarkdownBlock['props']> = {}) {
|
||||
return shallow(<DocMarkdownBlock content="" {...props} />);
|
||||
}
|
||||
|
@ -7,76 +7,73 @@ exports[`should render a sticky TOC if available 1`] = `
|
||||
<div
|
||||
className="markdown-content"
|
||||
>
|
||||
<Block
|
||||
key="h-1"
|
||||
>
|
||||
<h2
|
||||
id="lorem-ipsum"
|
||||
key="h-2"
|
||||
<div>
|
||||
<Block
|
||||
key="h-1"
|
||||
>
|
||||
Lorem ipsum
|
||||
</h2>
|
||||
|
||||
<h2
|
||||
key="h-2"
|
||||
>
|
||||
Lorem ipsum
|
||||
</h2>
|
||||
|
||||
|
||||
<p
|
||||
key="h-3"
|
||||
>
|
||||
Quisque vitae tincidunt felis. Nam blandit risus placerat, efficitur enim ut, pellentesque sem. Mauris non lorem auctor, consequat neque eget, dignissim augue.
|
||||
</p>
|
||||
|
||||
<p
|
||||
key="h-3"
|
||||
>
|
||||
Quisque vitae tincidunt felis. Nam blandit risus placerat, efficitur enim ut, pellentesque sem. Mauris non lorem auctor, consequat neque eget, dignissim augue.
|
||||
</p>
|
||||
|
||||
|
||||
<h2
|
||||
id="sit-amet"
|
||||
key="h-4"
|
||||
>
|
||||
Sit amet
|
||||
</h2>
|
||||
|
||||
<h2
|
||||
key="h-4"
|
||||
>
|
||||
Sit amet
|
||||
</h2>
|
||||
|
||||
|
||||
<h3
|
||||
id="maecenas-diam"
|
||||
key="h-5"
|
||||
>
|
||||
Maecenas diam
|
||||
</h3>
|
||||
|
||||
<h3
|
||||
key="h-5"
|
||||
>
|
||||
Maecenas diam
|
||||
</h3>
|
||||
|
||||
|
||||
<p
|
||||
key="h-6"
|
||||
>
|
||||
Velit, vestibulum nec ultrices id, mollis eget arcu. Sed dapibus, sapien ut auctor consectetur, mi tortor vestibulum ante, eget dapibus lacus risus.
|
||||
</p>
|
||||
|
||||
<p
|
||||
key="h-6"
|
||||
>
|
||||
Velit, vestibulum nec ultrices id, mollis eget arcu. Sed dapibus, sapien ut auctor consectetur, mi tortor vestibulum ante, eget dapibus lacus risus.
|
||||
</p>
|
||||
|
||||
|
||||
<h3
|
||||
id="integer"
|
||||
key="h-7"
|
||||
>
|
||||
Integer
|
||||
</h3>
|
||||
|
||||
<h3
|
||||
key="h-7"
|
||||
>
|
||||
Integer
|
||||
</h3>
|
||||
|
||||
|
||||
<p
|
||||
key="h-8"
|
||||
>
|
||||
At cursus turpis. Aenean at elit fringilla, porttitor mi eget, dapibus nisi. Donec quis congue odio.
|
||||
</p>
|
||||
|
||||
<p
|
||||
key="h-8"
|
||||
>
|
||||
At cursus turpis. Aenean at elit fringilla, porttitor mi eget, dapibus nisi. Donec quis congue odio.
|
||||
</p>
|
||||
|
||||
|
||||
<h2
|
||||
id="nam-blandit"
|
||||
key="h-9"
|
||||
>
|
||||
Nam blandit
|
||||
</h2>
|
||||
|
||||
<h2
|
||||
key="h-9"
|
||||
>
|
||||
Nam blandit
|
||||
</h2>
|
||||
|
||||
|
||||
<p
|
||||
key="h-10"
|
||||
>
|
||||
Risus placerat, efficitur enim ut, pellentesque sem. Mauris non lorem auctor, consequat neque eget, dignissim augue.
|
||||
</p>
|
||||
</Block>
|
||||
<p
|
||||
key="h-10"
|
||||
>
|
||||
Risus placerat, efficitur enim ut, pellentesque sem. Mauris non lorem auctor, consequat neque eget, dignissim augue.
|
||||
</p>
|
||||
</Block>
|
||||
</div>
|
||||
</div>
|
||||
<DocToc
|
||||
content="
|
||||
@ -110,17 +107,19 @@ exports[`should render simple markdown 1`] = `
|
||||
<div
|
||||
className="markdown-content"
|
||||
>
|
||||
<p
|
||||
key="h-1"
|
||||
>
|
||||
this is
|
||||
<em
|
||||
key="h-2"
|
||||
<div>
|
||||
<p
|
||||
key="h-1"
|
||||
>
|
||||
bold
|
||||
</em>
|
||||
text
|
||||
</p>
|
||||
this is
|
||||
<em
|
||||
key="h-2"
|
||||
>
|
||||
bold
|
||||
</em>
|
||||
text
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
@ -2389,9 +2389,9 @@ babel-runtime@^6.26.0:
|
||||
regenerator-runtime "^0.11.0"
|
||||
|
||||
bail@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b"
|
||||
integrity sha1-cYG2bVCKowVdP2wT8KDHIGQd3ps=
|
||||
version "1.0.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
|
||||
integrity sha1-tvoTNASjksvB+MS/Y/WVM1Hnp3Y=
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
@ -2779,10 +2779,10 @@ caseless@~0.12.0:
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
||||
|
||||
ccount@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386"
|
||||
integrity sha1-nPLeSUyoQGCiqNKFTt1t+wRF84Y=
|
||||
ccount@^1.0.0, ccount@^1.0.3:
|
||||
version "1.0.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17"
|
||||
integrity sha1-rIKpRJBaZc4gTrAwIxV+3ylCXBc=
|
||||
|
||||
chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.3:
|
||||
version "1.1.3"
|
||||
@ -2813,24 +2813,24 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4
|
||||
supports-color "^5.3.0"
|
||||
|
||||
character-entities-html4@^1.0.0:
|
||||
version "1.1.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef"
|
||||
integrity sha1-XObgFhjkcEisIvNPfznbXG/Wee8=
|
||||
version "1.1.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
|
||||
integrity sha1-DmSwo3U92/H9wETF/QHQGZoC4SU=
|
||||
|
||||
character-entities-legacy@^1.0.0:
|
||||
version "1.1.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4"
|
||||
integrity sha1-PHKZkdkpPaDt5t3crx8s4QCe6LQ=
|
||||
version "1.1.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
|
||||
integrity sha1-lLwYRdznClu50uzHSHJWYSk9j8E=
|
||||
|
||||
character-entities@^1.0.0:
|
||||
version "1.2.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6"
|
||||
integrity sha1-u+1KUv5++YzHE8bYDZ+qJpFtVOY=
|
||||
version "1.2.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
|
||||
integrity sha1-4Sw5Obfq9OWxXnrUxeKOHUjFsWs=
|
||||
|
||||
character-reference-invalid@^1.0.0:
|
||||
version "1.1.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85"
|
||||
integrity sha1-Fkf09yZjjT6kp1DPXRl1wceRmoU=
|
||||
version "1.1.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
|
||||
integrity sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA=
|
||||
|
||||
chardet@^0.4.0:
|
||||
version "0.4.2"
|
||||
@ -3029,11 +3029,16 @@ code-point-at@^1.0.0:
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
|
||||
|
||||
collapse-white-space@^1.0.0, collapse-white-space@^1.0.2:
|
||||
collapse-white-space@^1.0.0:
|
||||
version "1.0.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a"
|
||||
integrity sha1-wklbaZqx7TgNKaEJHgEGPnXbvjo=
|
||||
|
||||
collapse-white-space@^1.0.2:
|
||||
version "1.0.6"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287"
|
||||
integrity sha1-5jYpwAFmZXkgYNu+t5xCI50sUoc=
|
||||
|
||||
collect-v8-coverage@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1"
|
||||
@ -5462,6 +5467,48 @@ hast-to-hyperscript@^7.0.0:
|
||||
unist-util-is "^3.0.0"
|
||||
web-namespaces "^1.1.2"
|
||||
|
||||
hast-to-hyperscript@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/hast-to-hyperscript/-/hast-to-hyperscript-8.0.0.tgz#ad1182144366ed8d4f65f1a771c7f1da6f812648"
|
||||
integrity sha1-rRGCFENm7Y1PZfGnccfx2m+BJkg=
|
||||
dependencies:
|
||||
comma-separated-tokens "^1.0.0"
|
||||
property-information "^5.0.0"
|
||||
space-separated-tokens "^1.0.0"
|
||||
style-to-object "^0.3.0"
|
||||
unist-util-is "^4.0.0"
|
||||
web-namespaces "^1.0.0"
|
||||
|
||||
hast-util-from-parse5@^5.0.0:
|
||||
version "5.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c"
|
||||
integrity sha1-MIncDuLM9uyLxBaRm1GlSlieCXw=
|
||||
dependencies:
|
||||
ccount "^1.0.3"
|
||||
hastscript "^5.0.0"
|
||||
property-information "^5.0.0"
|
||||
web-namespaces "^1.1.2"
|
||||
xtend "^4.0.1"
|
||||
|
||||
hast-util-parse-selector@^2.0.0:
|
||||
version "2.2.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974"
|
||||
integrity sha1-YMmdC1GeEqtO0y5Y8VDsP2HtGXQ=
|
||||
|
||||
hast-util-raw@^5.0.0:
|
||||
version "5.0.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/hast-util-raw/-/hast-util-raw-5.0.2.tgz#62288f311ec2f35e066a30d5e0277f963ad43a67"
|
||||
integrity sha1-YiiPMR7C814GajDV4Cd/ljrUOmc=
|
||||
dependencies:
|
||||
hast-util-from-parse5 "^5.0.0"
|
||||
hast-util-to-parse5 "^5.0.0"
|
||||
html-void-elements "^1.0.0"
|
||||
parse5 "^5.0.0"
|
||||
unist-util-position "^3.0.0"
|
||||
web-namespaces "^1.0.0"
|
||||
xtend "^4.0.0"
|
||||
zwitch "^1.0.0"
|
||||
|
||||
hast-util-sanitize@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/hast-util-sanitize/-/hast-util-sanitize-2.0.2.tgz#8a4299bccba6cc8836284466d446060d2ecb2f5c"
|
||||
@ -5469,6 +5516,27 @@ hast-util-sanitize@^2.0.0:
|
||||
dependencies:
|
||||
xtend "^4.0.0"
|
||||
|
||||
hast-util-to-parse5@^5.0.0:
|
||||
version "5.1.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/hast-util-to-parse5/-/hast-util-to-parse5-5.1.2.tgz#09d27bee9ba9348ea05a6cfcc44e02f9083969b6"
|
||||
integrity sha1-CdJ77pupNI6gWmz8xE4C+Qg5abY=
|
||||
dependencies:
|
||||
hast-to-hyperscript "^7.0.0"
|
||||
property-information "^5.0.0"
|
||||
web-namespaces "^1.0.0"
|
||||
xtend "^4.0.0"
|
||||
zwitch "^1.0.0"
|
||||
|
||||
hastscript@^5.0.0:
|
||||
version "5.1.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a"
|
||||
integrity sha1-veLC5W0Exi3SToxd8ojQUKNV+4o=
|
||||
dependencies:
|
||||
comma-separated-tokens "^1.0.0"
|
||||
hast-util-parse-selector "^2.0.0"
|
||||
property-information "^5.0.0"
|
||||
space-separated-tokens "^1.0.0"
|
||||
|
||||
he@1.2.x:
|
||||
version "1.2.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||
@ -5596,6 +5664,11 @@ html-minifier@^3.2.3:
|
||||
relateurl "0.2.x"
|
||||
uglify-js "3.4.x"
|
||||
|
||||
html-void-elements@^1.0.0:
|
||||
version "1.0.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483"
|
||||
integrity sha1-zpFZSU6G2V5FeVsWbCAhws/KRIM=
|
||||
|
||||
html-webpack-plugin@3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b"
|
||||
@ -5816,7 +5889,7 @@ inflight@^1.0.4:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
|
||||
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
|
||||
@ -5998,9 +6071,9 @@ is-accessor-descriptor@^1.0.0:
|
||||
kind-of "^6.0.0"
|
||||
|
||||
is-alphabetical@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8"
|
||||
integrity sha1-6wTMRyGaiJXYRQrORxWr/yJYofg=
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
|
||||
integrity sha1-nn1rlJFr4iFTdF0YTCmMv5hqaG0=
|
||||
|
||||
is-alphanumeric@^1.0.0:
|
||||
version "1.0.0"
|
||||
@ -6008,9 +6081,9 @@ is-alphanumeric@^1.0.0:
|
||||
integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
|
||||
|
||||
is-alphanumerical@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c"
|
||||
integrity sha1-V64hw3Qnez3v4CdMZApXBLj2ZXw=
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
|
||||
integrity sha1-frmiQx+FX2se8aeOMm31FWlsTb8=
|
||||
dependencies:
|
||||
is-alphabetical "^1.0.0"
|
||||
is-decimal "^1.0.0"
|
||||
@ -6095,12 +6168,7 @@ is-date-object@^1.0.1:
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
|
||||
integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
|
||||
|
||||
is-decimal@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7"
|
||||
integrity sha1-OBBodZudyAfYwNwL+64raOHaSLc=
|
||||
|
||||
is-decimal@^1.0.2:
|
||||
is-decimal@^1.0.0, is-decimal@^1.0.2:
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
|
||||
integrity sha1-ZaOllYocW2OnBuGzM9fNn2MNP6U=
|
||||
@ -6182,9 +6250,9 @@ is-glob@^4.0.0, is-glob@^4.0.1:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-hexadecimal@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee"
|
||||
integrity sha1-6KQmppttMUcNOjOke7glzaAlBu4=
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
|
||||
integrity sha1-zDXJdYjaS9Saju3WvECC1E3LI6c=
|
||||
|
||||
is-number-object@^1.0.4:
|
||||
version "1.0.4"
|
||||
@ -6332,9 +6400,9 @@ is-url-superb@^3.0.0:
|
||||
url-regex "^5.0.0"
|
||||
|
||||
is-whitespace-character@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac"
|
||||
integrity sha1-s62VRtkW19P/p4IEvKDCa1Ylf6w=
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"
|
||||
integrity sha1-CFjt2UqVWUx8ndC1wXTsbkXuSqc=
|
||||
|
||||
is-windows@^1.0.1, is-windows@^1.0.2:
|
||||
version "1.0.2"
|
||||
@ -6342,9 +6410,9 @@ is-windows@^1.0.1, is-windows@^1.0.2:
|
||||
integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=
|
||||
|
||||
is-word-character@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa"
|
||||
integrity sha1-Jk0VVBy60LqDPTmSw05rQIc7CKo=
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230"
|
||||
integrity sha1-zg5zIW+YWZBgWS9i/zE1TdvrAjA=
|
||||
|
||||
is-wsl@^1.1.0:
|
||||
version "1.1.0"
|
||||
@ -7223,9 +7291,9 @@ lolex@^5.0.0:
|
||||
"@sinonjs/commons" "^1.7.0"
|
||||
|
||||
longest-streak@^2.0.1:
|
||||
version "2.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105"
|
||||
integrity sha1-Peej9H7hjpB03thXW1wJH10KQQU=
|
||||
version "2.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
|
||||
integrity sha1-uFmZV9pbXatk3uP+MW+ndFl9kOQ=
|
||||
|
||||
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
@ -7311,9 +7379,9 @@ map-visit@^1.0.0:
|
||||
object-visit "^1.0.0"
|
||||
|
||||
markdown-escapes@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5"
|
||||
integrity sha1-YVXhBBbvqvq2ZdRmzlmCFjdRlfU=
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
|
||||
integrity sha1-yVQV70UUmddgK5EJXzyOiXX3hTU=
|
||||
|
||||
markdown-table@^1.1.0:
|
||||
version "1.1.3"
|
||||
@ -7330,19 +7398,26 @@ md5.js@^1.3.4:
|
||||
safe-buffer "^5.1.2"
|
||||
|
||||
mdast-util-compact@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz#98a25cc8a7865761a41477b3a87d1dcef0b1e79d"
|
||||
integrity sha1-mKJcyKeGV2GkFHezqH0dzvCx550=
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593"
|
||||
integrity sha1-1TG7dme1Ejq/IIWb4IbE0GyJRZM=
|
||||
dependencies:
|
||||
unist-util-visit "^1.1.0"
|
||||
|
||||
mdast-util-definitions@^1.2.0:
|
||||
version "1.2.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdast-util-definitions/-/mdast-util-definitions-1.2.4.tgz#2b54ad4eecaff9d9fcb6bf6f9f6b68b232d77ca7"
|
||||
integrity sha1-K1StTuyv+dn8tr9vn2tosjLXfKc=
|
||||
version "1.2.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz#3fe622a4171c774ebd06f11e9f8af7ec53ea5c74"
|
||||
integrity sha1-P+YipBccd069BvEen4r37FPqXHQ=
|
||||
dependencies:
|
||||
unist-util-visit "^1.0.0"
|
||||
|
||||
mdast-util-definitions@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdast-util-definitions/-/mdast-util-definitions-2.0.1.tgz#2c931d8665a96670639f17f98e32c3afcfee25f3"
|
||||
integrity sha1-LJMdhmWpZnBjnxf5jjLDr8/uJfM=
|
||||
dependencies:
|
||||
unist-util-visit "^2.0.0"
|
||||
|
||||
mdast-util-to-hast@^6.0.0:
|
||||
version "6.0.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdast-util-to-hast/-/mdast-util-to-hast-6.0.2.tgz#24a8791b7c624118637d70f03a9d29116e4311cf"
|
||||
@ -7360,6 +7435,21 @@ mdast-util-to-hast@^6.0.0:
|
||||
unist-util-visit "^1.1.0"
|
||||
xtend "^4.0.1"
|
||||
|
||||
mdast-util-to-hast@^8.0.0:
|
||||
version "8.1.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdast-util-to-hast/-/mdast-util-to-hast-8.1.0.tgz#80998dada58ad4544336a328849ed01d96777011"
|
||||
integrity sha1-gJmNraWK1FRDNqMohJ7QHZZ3cBE=
|
||||
dependencies:
|
||||
collapse-white-space "^1.0.0"
|
||||
detab "^2.0.0"
|
||||
mdast-util-definitions "^2.0.0"
|
||||
mdurl "^1.0.0"
|
||||
trim-lines "^1.0.0"
|
||||
unist-builder "^2.0.0"
|
||||
unist-util-generated "^1.0.0"
|
||||
unist-util-position "^3.0.0"
|
||||
unist-util-visit "^2.0.0"
|
||||
|
||||
mdast-util-to-string@^1.0.0:
|
||||
version "1.0.6"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdast-util-to-string/-/mdast-util-to-string-1.0.6.tgz#7d85421021343b33de1552fc71cb8e5b4ae7536d"
|
||||
@ -7388,7 +7478,7 @@ mdn-data@~1.1.0:
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
|
||||
integrity sha1-ULXU/8RXUnZXPE7tuHgIEqhBnwE=
|
||||
|
||||
mdurl@^1.0.1:
|
||||
mdurl@^1.0.0, mdurl@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
|
||||
integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
|
||||
@ -8355,6 +8445,11 @@ parse5@^3.0.1:
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
parse5@^5.0.0:
|
||||
version "5.1.1"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
|
||||
integrity sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=
|
||||
|
||||
parseurl@~1.3.2, parseurl@~1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
||||
@ -9012,7 +9107,7 @@ prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.8,
|
||||
object-assign "^4.1.1"
|
||||
react-is "^16.8.1"
|
||||
|
||||
property-information@^5.3.0:
|
||||
property-information@^5.0.0, property-information@^5.3.0:
|
||||
version "5.4.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/property-information/-/property-information-5.4.0.tgz#16e08f13f4e5c4a7be2e4ec431c01c4f8dba869a"
|
||||
integrity sha1-FuCPE/TlxKe+Lk7EMcAcT426hpo=
|
||||
@ -9639,6 +9734,21 @@ regjsparser@^0.6.4:
|
||||
dependencies:
|
||||
jsesc "~0.5.0"
|
||||
|
||||
rehype-raw@4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/rehype-raw/-/rehype-raw-4.0.2.tgz#5d3191689df96c8c651ce5f51a6c668d2c07b9c8"
|
||||
integrity sha1-XTGRaJ35bIxlHOX1GmxmjSwHucg=
|
||||
dependencies:
|
||||
hast-util-raw "^5.0.0"
|
||||
|
||||
rehype-react@5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/rehype-react/-/rehype-react-5.0.0.tgz#7c08017b125d86839a13577851512cb4e23a2be4"
|
||||
integrity sha1-fAgBexJdhoOaE1d4UVEstOI6K+Q=
|
||||
dependencies:
|
||||
"@mapbox/hast-util-table-cell-style" "^0.1.3"
|
||||
hast-to-hyperscript "^8.0.0"
|
||||
|
||||
relateurl@0.2.x:
|
||||
version "0.2.7"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
|
||||
@ -9682,6 +9792,13 @@ remark-react@6:
|
||||
hast-util-sanitize "^2.0.0"
|
||||
mdast-util-to-hast "^6.0.0"
|
||||
|
||||
remark-rehype@6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/remark-rehype/-/remark-rehype-6.0.0.tgz#dcd340ebee412709a81b15a69f4ae474a38aa72a"
|
||||
integrity sha1-3NNA6+5BJwmoGxWmn0rkdKOKpyo=
|
||||
dependencies:
|
||||
mdast-util-to-hast "^8.0.0"
|
||||
|
||||
remark-slug@5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/remark-slug/-/remark-slug-5.1.2.tgz#715ecdef8df1226786204b1887d31ab16aa24609"
|
||||
@ -10569,9 +10686,9 @@ staged-git-files@1.1.1:
|
||||
integrity sha1-N8IhjvDW0mF4sTEHGTCaFqWfj3s=
|
||||
|
||||
state-toggle@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc"
|
||||
integrity sha1-dek6YZRBFrSVnWZcjbLSQ2Mdbdw=
|
||||
version "1.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"
|
||||
integrity sha1-4SOxaojhQxObCcaFIiG8mBWRff4=
|
||||
|
||||
static-extend@^0.1.1:
|
||||
version "0.1.2"
|
||||
@ -10820,6 +10937,13 @@ style-to-object@^0.2.1:
|
||||
dependencies:
|
||||
inline-style-parser "0.1.1"
|
||||
|
||||
style-to-object@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46"
|
||||
integrity sha1-sbeQ0gWZHMeDgBlnIUl57hmnbkY=
|
||||
dependencies:
|
||||
inline-style-parser "0.1.1"
|
||||
|
||||
stylehacks@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
|
||||
@ -11111,9 +11235,9 @@ trim-right@^1.0.1:
|
||||
integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
|
||||
|
||||
trim-trailing-lines@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a"
|
||||
integrity sha1-0vHhUxYRUunwL6vGcPtAvsLqLjo=
|
||||
version "1.1.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94"
|
||||
integrity sha1-fwc5iB/3Zle3d24Qh0EoAEtiWpQ=
|
||||
|
||||
trim@0.0.1:
|
||||
version "0.0.1"
|
||||
@ -11121,9 +11245,9 @@ trim@0.0.1:
|
||||
integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
|
||||
|
||||
trough@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e"
|
||||
integrity sha1-O1Kx8Tkk9GDD+/0N9ptYfby8di4=
|
||||
version "1.0.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
|
||||
integrity sha1-uLY5zvrX0LsqvTfUM/+Ck++l9AY=
|
||||
|
||||
tryer@^1.0.1:
|
||||
version "1.0.1"
|
||||
@ -11252,12 +11376,12 @@ uglify-js@3.4.x:
|
||||
source-map "~0.6.1"
|
||||
|
||||
unherit@^1.0.4:
|
||||
version "1.1.2"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449"
|
||||
integrity sha1-FPHzlyU+5OyVzsFndi5334NnhEk=
|
||||
version "1.1.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
|
||||
integrity sha1-bJtQPytBsmIzDIDpHIYUq9qmnCI=
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
xtend "^4.0.1"
|
||||
inherits "^2.0.0"
|
||||
xtend "^4.0.0"
|
||||
|
||||
unicode-canonical-property-names-ecmascript@^1.0.4:
|
||||
version "1.0.4"
|
||||
@ -11334,10 +11458,15 @@ unist-builder@^1.0.1:
|
||||
dependencies:
|
||||
object-assign "^4.1.0"
|
||||
|
||||
unist-util-generated@^1.1.0:
|
||||
version "1.1.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/unist-util-generated/-/unist-util-generated-1.1.4.tgz#2261c033d9fc23fae41872cdb7663746e972c1a7"
|
||||
integrity sha1-ImHAM9n8I/rkGHLNt2Y3Rulywac=
|
||||
unist-builder@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436"
|
||||
integrity sha1-d2SHEbXYavCULzNDl6M8XpFRZDY=
|
||||
|
||||
unist-util-generated@^1.0.0, unist-util-generated@^1.1.0:
|
||||
version "1.1.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42"
|
||||
integrity sha1-HpA+aEZ5Mev66jhtrp6iU2KKzUI=
|
||||
|
||||
unist-util-is@^3.0.0:
|
||||
version "3.0.0"
|
||||
@ -11355,9 +11484,9 @@ unist-util-position@^3.0.0:
|
||||
integrity sha1-//lCuHlTiyQglsFIFTgmZksco3M=
|
||||
|
||||
unist-util-remove-position@^1.0.0:
|
||||
version "1.1.3"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972"
|
||||
integrity sha1-2RqouJswyzi60pJNoRBy+qZP2XI=
|
||||
version "1.1.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020"
|
||||
integrity sha1-7ANzSLYQLIl3A+7m0ClMpHVaICA=
|
||||
dependencies:
|
||||
unist-util-visit "^1.1.0"
|
||||
|
||||
@ -11557,9 +11686,9 @@ verror@1.10.0:
|
||||
extsprintf "^1.2.0"
|
||||
|
||||
vfile-location@^2.0.0:
|
||||
version "2.0.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2"
|
||||
integrity sha1-yD6wL4BAIoqNKz8Q5IW+PjQz4KI=
|
||||
version "2.0.6"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"
|
||||
integrity sha1-iidPOUEbhxnqVyiALhDZ4N/xUZ4=
|
||||
|
||||
vfile-message@^2.0.0:
|
||||
version "2.0.3"
|
||||
@ -11638,7 +11767,7 @@ wbuf@^1.1.0, wbuf@^1.7.3:
|
||||
dependencies:
|
||||
minimalistic-assert "^1.0.0"
|
||||
|
||||
web-namespaces@^1.1.2:
|
||||
web-namespaces@^1.0.0, web-namespaces@^1.1.2:
|
||||
version "1.1.4"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
|
||||
integrity sha1-vJij3mDa3X+u/EA9EHbVKfXgMOw=
|
||||
@ -12007,3 +12136,8 @@ yargs@^15.0.0:
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^18.1.1"
|
||||
|
||||
zwitch@^1.0.0:
|
||||
version "1.0.5"
|
||||
resolved "https://repox.jfrog.io/repox/api/npm/npm/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
|
||||
integrity sha1-0R1zgf/tFrdC9q97PyI9XNn+mSA=
|
||||
|
Loading…
Reference in New Issue
Block a user