render rst in markdown component (#513)

* render rst in markdown component

* add types

* include @tea/ui/types/* in the tsconfig.json of desktop module

---------

Co-authored-by: neil molina <neil@neils-MacBook-Pro.local>
This commit is contained in:
Neil 2023-04-27 15:23:34 +08:00 committed by GitHub
parent 8e443f1a66
commit 7088fec009
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 432 additions and 25 deletions

View file

@ -1,7 +1,6 @@
import axios from "axios";
import type { Contributor, Package } from "@tea/ui/types";
import yaml from "js-yaml";
export async function getPackageYaml(pkgYamlUrl: string) {
const url = pkgYamlUrl.replace("/github.com", "/raw.githubusercontent.com").replace("/blob", "");
@ -12,14 +11,20 @@ export async function getPackageYaml(pkgYamlUrl: string) {
return data;
}
export async function getReadme(owner: string, repo: string): Promise<string> {
let readme = "";
export async function getReadme(
owner: string,
repo: string
): Promise<{ data: string; type: "md" | "rst" }> {
let type: "md" | "rst" = "md";
let data = "";
const req = await axios.get(`https://api.github.com/repos/${owner}/${repo}/readme`);
if (req.data?.download_url) {
type = req.data.name.endsWith(".rst") ? "rst" : "md";
const reqDl = await axios.get(req.data.download_url);
readme = reqDl.data;
data = reqDl.data;
}
return readme;
return { data, type };
}
export async function getContributors(owner: string, repo: string): Promise<Contributor[]> {

View file

@ -107,7 +107,10 @@ To read more about this package go to [${guiPkg.homepage}](${guiPkg.homepage}).
const updatedPackage: Partial<GUIPackage> = {
...pkg,
readme_md: readmeMd,
readme: {
data: readmeMd,
type: "md"
},
synced: true,
github: pkg.github
? trimGithubSlug(pkg.github)
@ -123,7 +126,7 @@ To read more about this package go to [${guiPkg.homepage}](${guiPkg.homepage}).
getRepoAsPackage(owner, repo)
]);
if (readme) {
updatedPackage.readme_md = readme;
updatedPackage.readme = readme;
}
updatedPackage.contributors = contributors;
updatedPackage.license = repoData.license;

View file

@ -28,10 +28,10 @@
// let reviews: Review[];
$: bottles = pkg?.bottles || [];
$: versions = [...new Set(bottles.map((b) => b.version))];
$: readme = pkg?.readme_md || "";
$: readme = pkg?.readme || { data: "", type: "md" };
$: tabs = [
readme !== "" && {
readme?.data !== "" && {
label: $t("common.details"),
component: Markdown,
props: { pkg, source: readme }

View file

@ -1,6 +1,7 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
@ -18,7 +19,8 @@
"$components/*": ["src/components/*"],
"@tea/ui/*": ["../ui/src/*"]
}
}
},
"include": ["../ui/types/*.d.ts"]
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
//
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes

View file

@ -58,6 +58,7 @@
"@types/prismjs": "^1.26.0",
"prismjs": "^1.29.0",
"svelte-markdown": "^0.2.3",
"svelte-watch-resize": "^1.0.3"
"svelte-watch-resize": "^1.0.3",
"restructured": "0.0.11"
}
}

View file

@ -1,16 +1,23 @@
<script lang="ts">
import SvelteMarkdown from "svelte-markdown";
import Link from "./link.svelte";
import rst2html from "./rst2html";
import "./styles.css";
export let source: string;
export let source: { data: string; type: "md" | "rst" };
const renderers = {
link: Link
};
$: html = source.type === "rst" ? rst2html(source.data) : "";
</script>
<section class="markdown-body py-4">
<SvelteMarkdown {source} {renderers} />
{#if source.type === "md"}
<SvelteMarkdown source={source.data} {renderers} />
{:else if source.type === "rst"}
{@html html}
{/if}
</section>

View file

@ -0,0 +1,198 @@
// this was directly taken from https://github.com/thoward/rst2html
// sorry no time to make a pr to the module there
// added a render_directive fn
import restructured from "restructured";
type Element = {
type: string;
role?: string;
depth?: number;
directive?: string;
children: Element[];
value?: string;
};
const rst2html = (rstSource: string): string => {
const parsedRST = restructured.parse(rstSource);
const html = render_any(parsedRST, 0, 2);
return html;
};
export default rst2html;
const render_any = (element: Element, level = 0, indent = 2): string => {
switch (element.type) {
case "document":
return render_document(element, level, indent);
case "section":
return render_section(element, level, indent);
case "transition":
return render_transition(element, level, indent);
case "paragraph":
return render_paragraph(element, level, indent);
case "bullet_list":
return render_bullet_list(element, level, indent);
case "enumerated_list":
return render_enumerated_list(element, level, indent);
case "definition_list":
return render_definition_list(element, level, indent);
case "list_item":
return render_list_item(element, level, indent);
case "line":
return render_line(element, level, indent);
case "line_block":
return render_line_block(element, level, indent);
case "literal_block":
return render_literal_block(element, level, indent);
case "block_quote":
return render_block_quote(element, level, indent);
case "interpreted_text":
return render_interpreted_text(element, level, indent);
case "text":
return render_text(element);
case "emphasis":
return render_emphasis(element, level, indent);
case "strong":
return render_strong(element, level, indent);
case "literal":
return render_literal(element, level, indent);
case "directive":
return render_directive(element, level, indent);
default:
return render_unknown(element, level, indent);
}
};
const render_unknown = (element: Element, level = 0, indent = 2): string => {
if (element.children) {
return render_block_element("div", `rst-unknown rst-${element.type}`, element, level, indent);
} else {
return render_leaf_element("div", `rst-unknown rst-${element.type}`, element);
}
};
const render_document = (element: Element, level = 0, indent = 2): string => {
return render_block_element("div", "rst-document", element, level, indent);
};
const render_section = (element: Element, level = 0, indent = 2): string => {
const indentString = " ".repeat(level * indent);
const title = render_title(element.depth, element.children[0], level + 1, indent);
const children = element.children
.slice(1)
.map((e) => render_any(e, level + 1, indent))
.join("\n");
return `${indentString}<div class="rst-section">\n${title}${children}${indentString}</div>\n`;
};
const render_title = (depth = 0, element: Element, level = 0, indent = 2): string => {
const titleTag = `h${depth}`;
const titleClassName = `rst-title-${depth}`;
return render_block_element(titleTag, titleClassName, element, level, indent);
};
const render_transition = (element: Element, level = 0, indent = 2): string => {
// TODO: implement transitions
return render_unknown(element, level, indent);
};
const render_paragraph = (element: Element, level = 0, indent = 2): string => {
return render_block_element("p", "rst-paragraph", element, level, indent);
};
const render_bullet_list = (element: Element, level = 0, indent = 2): string => {
return render_block_element("ul", "rst-bullet-list", element, level, indent);
};
const render_enumerated_list = (element: Element, level = 0, indent = 2): string => {
return render_block_element("ol", "rst-enumerated-list", element, level, indent);
};
const render_definition_list = (element: Element, level = 0, indent = 2): string => {
// TODO: implement definition lists
return render_unknown(element, level, indent);
};
const render_list_item = (element: Element, level = 0, indent = 2): string => {
return render_block_element("li", "rst-list-item", element, level, indent);
};
const render_line = (element: Element, level = 0, indent = 2): string => {
return render_block_element("div", "rst-line", element, level, indent);
};
const render_line_block = (element: Element, level = 0, indent = 2): string => {
return render_block_element("div", "rst-line-block", element, level, indent);
};
const render_literal_block = (element: Element, level = 0, indent = 2): string => {
return render_block_element("pre", "rst-literal-block", element, level, indent);
};
const render_block_quote = (element: Element, level = 0, indent = 2): string => {
return render_block_element("blockquote", "rst-block-quote", element, level, indent);
};
const render_text = (element: Element): string => {
return render_leaf_element("span", "rst-text", element);
};
const render_interpreted_text = (element: Element, level = 0, indent = 2): string => {
const className = "rst-interpreted_text" + (element.role ? ` rst-role-${element.role}` : "");
return render_inline_element("span", className, element, level, indent);
};
const render_emphasis = (element: Element, level = 0, indent = 2): string => {
return render_inline_element("em", "rst-emphasis", element, level, indent);
};
const render_strong = (element: Element, level = 0, indent = 2): string => {
return render_inline_element("strong", "rst-strong", element, level, indent);
};
const render_literal = (element: Element, level = 0, indent = 2): string => {
return render_inline_element("tt", "rst-literal", element, level, indent);
};
const render_leaf_element = (tag: string, className: string, element: Element): string => {
return `<${tag} class="${className}">${element?.value?.replace(/\n$/, "")}</${tag}>`;
};
const render_inline_element = (
tag: string,
className: string,
element: Element,
level = 0,
indent = 2
): string => {
const children = element.children.map((e) => render_any(e, level + 1, indent)).join("");
return `<${tag} class="${className}">${children}</${tag}>`;
};
const render_block_element = (
tag: string,
className: string,
element: Element,
level = 0,
indent = 2
): string => {
const indentString = " ".repeat(level * indent);
const children = element.children.map((e) => render_any(e, level + 1, indent)).join("");
return `${indentString}<${tag} class="${className}">\n${children}\n${indentString}</${tag}>\n`;
};
const render_directive = (element: Element, level = 0, indent = 2): string => {
const indentString = " ".repeat(level * indent);
const src = element.children[0].value;
const alt = element.children[1].value;
return element.directive === "image"
? `
${indentString}<img src="${src}" alt="${alt}" />\n
`
: "";
};

View file

@ -31,7 +31,10 @@ export interface Package {
documentation_url?: string;
github?: string;
contributors?: Contributor[];
readme_md?: string;
readme?: {
data: string;
type: "md" | "rst";
};
manual_sorting: number;
card_layout: "bottom" | "right" | "left";
}

View file

@ -1,6 +1,7 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"baseUrl": "..",
"paths": {
"$lib": ["src/lib"],
@ -21,7 +22,8 @@
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true
"strict": true,
"typeRoots": ["./node_modules/@types", "./types"]
},
"include": [
"ambient.d.ts",

8
modules/ui/types/restructured.d.ts vendored Normal file
View file

@ -0,0 +1,8 @@
declare module "restructured" {
interface RestructuredElement {
children: RestructuredElement[];
stringify(): string;
}
export function parse(rst: string): RestructuredElement;
}

View file

@ -196,6 +196,7 @@ importers:
prettier-plugin-svelte: ^2.7.0
prettier-plugin-tailwindcss: ^0.2.0
prismjs: ^1.29.0
restructured: 0.0.11
storybook: ^7.0.0-alpha.51
svelte: ^3.44.0
svelte-check: ^2.7.1
@ -211,6 +212,7 @@ importers:
'@tailwindcss/line-clamp': 0.4.2_tailwindcss@3.2.4
'@types/prismjs': 1.26.0
prismjs: 1.29.0
restructured: 0.0.11
svelte-markdown: 0.2.3_svelte@3.55.0
svelte-watch-resize: 1.0.3
devDependencies:
@ -2757,7 +2759,7 @@ packages:
'@storybook/components': 7.0.0-alpha.51
'@storybook/csf-plugin': 7.0.0-alpha.51
'@storybook/csf-tools': 7.0.0-alpha.51
'@storybook/mdx2-csf': 1.0.0-next.8
'@storybook/mdx2-csf': 1.1.0-next.0
'@storybook/node-logger': 7.0.0-alpha.51
'@storybook/postinstall': 7.0.0-alpha.51
'@storybook/preview-web': 7.0.0-alpha.51
@ -3171,7 +3173,7 @@ packages:
'@storybook/client-api': 7.0.0-alpha.51
'@storybook/client-logger': 7.0.0-alpha.51
'@storybook/core-common': 7.0.0-alpha.51_typescript@4.9.3
'@storybook/mdx2-csf': 1.0.0-next.8
'@storybook/mdx2-csf': 1.1.0-next.0
'@storybook/node-logger': 7.0.0-alpha.51
'@storybook/preview-web': 7.0.0-alpha.51
'@storybook/source-loader': 7.0.0-alpha.51
@ -3698,8 +3700,8 @@ packages:
resolution: {integrity: sha512-SgjcpweoAWnKvbZ1uINCGcSU1BtNJP2xR0x9obNw+qp6pi0OsOo1iA1DTgB0gJM0vc3BgrKgCMlJ76v/wlRB+Q==}
dev: true
/@storybook/mdx2-csf/1.0.0-next.8:
resolution: {integrity: sha512-t2O5s/HHTH5evZVHgVtCWTZgMZ/CaqDu3xVGgjVbKeTvpPAbi0Waab5SSX8T9PG5jNDei/x+jpAVCcNMOHoWzg==}
/@storybook/mdx2-csf/1.1.0-next.0:
resolution: {integrity: sha512-DeXEULA683XaoNJpAwqJU4lKnpCAACdIiSDqCuAfKzhHYAv11snQ8VjPrtR1I0WcWG4ATi+TawT1dWFnsYhhAQ==}
dev: true
/@storybook/node-logger/7.0.0-alpha.51:
@ -4039,7 +4041,7 @@ packages:
peerDependencies:
'@sveltejs/kit': ^1.0.0
dependencies:
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.1.1
'@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.1.1
import-meta-resolve: 2.2.0
dev: true
@ -4882,6 +4884,10 @@ packages:
negotiator: 0.6.3
dev: true
/acorn-es7-plugin/1.1.7:
resolution: {integrity: sha512-7D+8kscFMf6F2t+8ZRYmv82CncDZETsaZ4dEl5lh3qQez7FVABk2Vz616SAbnIq1PbNsLVaZjl2oSkk5BWAKng==}
dev: false
/acorn-globals/7.0.1:
resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
dependencies:
@ -4911,6 +4917,12 @@ packages:
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
engines: {node: '>=0.4.0'}
/acorn/5.7.4:
resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: false
/acorn/7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
engines: {node: '>=0.4.0'}
@ -5099,6 +5111,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/array-filter/1.0.0:
resolution: {integrity: sha512-Ene1hbrinPZ1qPoZp7NSx4jQnh4nr7MtY78pHNb+yr8yHbxmTS7ChGW0a55JKA7TkRDeoQxK4GcJaCvBYplSKA==}
dev: false
/array-flatten/1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
dev: true
@ -5638,6 +5654,11 @@ packages:
get-intrinsic: 1.1.3
dev: true
/call-signature/0.0.2:
resolution: {integrity: sha512-qvYvkAVcoae0obt8OsZn0VEBHeEpvYIZDy1gGYtZDJG0fHawew+Mi0dBjieFz8F8dzQ2Kr19+nsDm+T5XFVs+Q==}
engines: {node: '>=0.10.0'}
dev: false
/callsites/3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@ -5890,7 +5911,6 @@ packages:
engines: {node: '>= 0.6.x'}
dependencies:
graceful-readlink: 1.0.1
dev: true
/commander/5.1.0:
resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
@ -6069,6 +6089,12 @@ packages:
browserslist: 4.21.4
dev: true
/core-js/2.6.12:
resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
requiresBuild: true
dev: false
/core-js/3.26.1:
resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==}
requiresBuild: true
@ -6385,6 +6411,10 @@ packages:
/didyoumean/1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
/diff-match-patch/1.0.5:
resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
dev: false
/diff-sequences/29.3.1:
resolution: {integrity: sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@ -6542,7 +6572,6 @@ packages:
/eastasianwidth/0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true
/ee-first/1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@ -6730,6 +6759,20 @@ packages:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
dev: true
/empower-core/1.2.0:
resolution: {integrity: sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ==}
dependencies:
call-signature: 0.0.2
core-js: 2.6.12
dev: false
/empower/1.3.1:
resolution: {integrity: sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA==}
dependencies:
core-js: 2.6.12
empower-core: 1.2.0
dev: false
/encodeurl/1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
@ -7515,6 +7558,12 @@ packages:
engines: {node: '>=4'}
hasBin: true
/espurify/1.8.1:
resolution: {integrity: sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==}
dependencies:
core-js: 2.6.12
dev: false
/esquery/1.4.0:
resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
engines: {node: '>=0.10'}
@ -7532,7 +7581,6 @@ packages:
/estraverse/4.3.0:
resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
engines: {node: '>=4.0'}
dev: true
/estraverse/5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
@ -8277,7 +8325,6 @@ packages:
/graceful-readlink/1.0.1:
resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==}
dev: true
/grapheme-splitter/1.0.4:
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
@ -8558,6 +8605,10 @@ packages:
engines: {node: '>=8'}
dev: true
/indexof/0.0.1:
resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==}
dev: false
/inflight/1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
@ -10332,7 +10383,6 @@ packages:
/object-assign/4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
dev: true
/object-copy/0.1.0:
resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
@ -10771,6 +10821,94 @@ packages:
picocolors: 1.0.0
source-map-js: 1.0.2
/power-assert-context-formatter/1.2.0:
resolution: {integrity: sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg==}
dependencies:
core-js: 2.6.12
power-assert-context-traversal: 1.2.0
dev: false
/power-assert-context-reducer-ast/1.2.0:
resolution: {integrity: sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw==}
dependencies:
acorn: 5.7.4
acorn-es7-plugin: 1.1.7
core-js: 2.6.12
espurify: 1.8.1
estraverse: 4.3.0
dev: false
/power-assert-context-traversal/1.2.0:
resolution: {integrity: sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ==}
dependencies:
core-js: 2.6.12
estraverse: 4.3.0
dev: false
/power-assert-formatter/1.4.1:
resolution: {integrity: sha512-c2QzTk1a6BUumuzjffFUrsMlx2gqLEoeEMrx6gVaHzQ/zTBTibQGblaQslbv72eq9RJNFQXRryjTHoffIEz+ww==}
dependencies:
core-js: 2.6.12
power-assert-context-formatter: 1.2.0
power-assert-context-reducer-ast: 1.2.0
power-assert-renderer-assertion: 1.2.0
power-assert-renderer-comparison: 1.2.0
power-assert-renderer-diagram: 1.2.0
power-assert-renderer-file: 1.2.0
dev: false
/power-assert-renderer-assertion/1.2.0:
resolution: {integrity: sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg==}
dependencies:
power-assert-renderer-base: 1.1.1
power-assert-util-string-width: 1.2.0
dev: false
/power-assert-renderer-base/1.1.1:
resolution: {integrity: sha512-aGCUi0NuNd/fVS6KKMLTjRP58cdlHlQKgXV4WKl3YlUhnN0d9QBEYOyvmiumdjk+5GuZmozvEmBIcTAcxEZqnw==}
dev: false
/power-assert-renderer-comparison/1.2.0:
resolution: {integrity: sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g==}
dependencies:
core-js: 2.6.12
diff-match-patch: 1.0.5
power-assert-renderer-base: 1.1.1
stringifier: 1.4.0
type-name: 2.0.2
dev: false
/power-assert-renderer-diagram/1.2.0:
resolution: {integrity: sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg==}
dependencies:
core-js: 2.6.12
power-assert-renderer-base: 1.1.1
power-assert-util-string-width: 1.2.0
stringifier: 1.4.0
dev: false
/power-assert-renderer-file/1.2.0:
resolution: {integrity: sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg==}
dependencies:
power-assert-renderer-base: 1.1.1
dev: false
/power-assert-util-string-width/1.2.0:
resolution: {integrity: sha512-lX90G0igAW0iyORTILZ/QjZWsa1MZ6VVY3L0K86e2eKun3S4LKPH4xZIl8fdeMYLfOjkaszbNSzf1uugLeAm2A==}
dependencies:
eastasianwidth: 0.2.0
dev: false
/power-assert/1.6.1:
resolution: {integrity: sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ==}
dependencies:
define-properties: 1.1.4
empower: 1.3.1
power-assert-formatter: 1.4.1
universal-deep-strict-equal: 1.2.2
xtend: 4.0.2
dev: false
/prelude-ls/1.1.2:
resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
engines: {node: '>= 0.8.0'}
@ -11351,6 +11489,16 @@ packages:
lowercase-keys: 3.0.0
dev: true
/restructured/0.0.11:
resolution: {integrity: sha512-KqEuVvRfyDcU6bsueovH4QQFiSj72SHRa01Rn1AwEgpYTshVt26Q8aLQUeAg376phU0jkhDxvUeKiQxY2DNYXw==}
hasBin: true
dependencies:
commander: 2.9.0
lodash: 4.17.21
power-assert: 1.6.1
unist-util-map: 1.0.5
dev: false
/ret/0.1.15:
resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
engines: {node: '>=0.12'}
@ -11938,6 +12086,14 @@ packages:
dependencies:
safe-buffer: 5.2.1
/stringifier/1.4.0:
resolution: {integrity: sha512-cNsMOqqrcbLcHTXEVmkw9y0fwDwkdgtZwlfyolzpQDoAE1xdNGhQhxBUfiDvvZIKl1hnUEgMv66nHwtMz3OjPw==}
dependencies:
core-js: 2.6.12
traverse: 0.6.7
type-name: 2.0.2
dev: false
/stringify-entities/4.0.3:
resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
dependencies:
@ -12526,6 +12682,10 @@ packages:
dependencies:
punycode: 2.1.1
/traverse/0.6.7:
resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==}
dev: false
/tree-kill/1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
@ -12630,6 +12790,10 @@ packages:
mime-types: 2.1.35
dev: true
/type-name/2.0.2:
resolution: {integrity: sha512-kkgkuqR/jKdKO5oh/I2SMu2dGbLXoJq0zkdgbxaqYK+hr9S9edwVVGf+tMUFTx2gH9TN2+Zu9JZ/Njonb3cjhA==}
dev: false
/typed-emitter/2.1.0:
resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==}
optionalDependencies:
@ -12742,6 +12906,12 @@ packages:
resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==}
dev: true
/unist-util-map/1.0.5:
resolution: {integrity: sha512-dFil/AN6vqhnQWNCZk0GF/G3+Q5YwsB+PqjnzvpO2wzdRtUJ1E8PN+XRE/PRr/G3FzKjRTJU0haqE0Ekl+O3Ag==}
dependencies:
object-assign: 4.1.1
dev: false
/unist-util-position-from-estree/1.1.1:
resolution: {integrity: sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==}
dependencies:
@ -12797,6 +12967,14 @@ packages:
unist-util-visit-parents: 5.1.1
dev: true
/universal-deep-strict-equal/1.2.2:
resolution: {integrity: sha512-UpnFi3/IF3jZHIHTdQXTHLCqpBP3805OFFRPHgvCS7k0oob2YVXxMTjS0U0g9qJTzqFRMwEnFFSlFLqt6zwjTQ==}
dependencies:
array-filter: 1.0.0
indexof: 0.0.1
object-keys: 1.1.1
dev: false
/universalify/0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}