-
-
- . @turborepo is the coolest javascript
- thing i've seen probably since an early prototype of
- Next.js
-
-
- javascript fatigue is over
- >
- }
- />
-
- . @turborepo cache hit in CI is the most
- satisfying thing ever, why hasn't anyone thought of this
- before lol
- >
- }
- />
-
- Experimented with @turborepo on my
- Flow-based 4-package monorepo where each package contains
- lint, test and build commands:
-
-
- - lint, test, build all files in series: ~75s
-
- - lerna --parallel: ~62s
-
- - turbo: ~35s (791ms on cache hit)
-
-
- 🤯 Impressive results! FULL TURBO!
- >
- }
- />
+
+
+
+ Loved by badass engineers
+
+
+
+
+ . @turborepo is the coolest javascript
+ thing i've seen probably since an early prototype of
+ Next.js
+
+
+ javascript fatigue is over
+ >
+ }
+ />
+
+ . @turborepo cache hit in CI is the most
+ satisfying thing ever, why hasn't anyone thought of
+ this before lol
+ >
+ }
+ />
+
+ Experimented with @turborepo on my
+ Flow-based 4-package monorepo where each package contains
+ lint, test and build commands:
+
+
+ - lint, test, build all files in series: ~75s
+
+ - lerna --parallel: ~62s
+
+ - turbo: ~35s (791ms on cache hit)
+
+
+ 🤯 Impressive results! FULL TURBO!
+ >
+ }
+ />
+
-
-
- Just saw @turborepo in action and gotta
- say: it looks amazing!
- >
- }
- />
+
+
+ Just saw @turborepo in action and gotta
+ say: it looks amazing!
+ >
+ }
+ />
-
- 10 runtime-diverse apps, 7 IAC stacks, 6 custom JSII CDK
- constructs, 5 third-party client wrappers, 2 auto-generated
- internal api sdks, a handful of utility/misc packages under
- management, & growing, in 1 monorepo--all in a day's
- work for @turborepo
- --no pain, all gain. 😻
- >
- }
- />
-
- Turborepo is really good at what it does: Ridiculously fast
- builds.
- >
- }
- />
-
- Finally! @astrodotbuild is now using
- @turborepo. ♥️⚡️
-
- So glad it's open source now—congrats to{" "}
- @jaredpalmer and @vercel{" "}
- on the release!
- >
- }
- />
-
-
-
- It's been a joy to use @turborepo.{" "}
- @jaredpalmer is building something truly
- wonderful for the JS community
- >
- }
- />
-
- If you build for web, leave everything and go see what{" "}
- @jaredpalmer is doing with{" "}
- @turborepo. One of the most exciting pieces
- of tech lately! The hype is real
- >
- }
- />
+
+ 10 runtime-diverse apps, 7 IAC stacks, 6 custom JSII CDK
+ constructs, 5 third-party client wrappers, 2 auto-generated
+ internal api sdks, a handful of utility/misc packages under
+ management, & growing, in 1 monorepo--all in a
+ day's work for @turborepo
+ --no pain, all gain. 😻
+ >
+ }
+ />
+
+ Turborepo is really good at what it does: Ridiculously fast
+ builds.
+ >
+ }
+ />
+
+ Finally! @astrodotbuild is now using
+ @turborepo. ♥️⚡️
+
+ So glad it's open source now—congrats to{" "}
+ @jaredpalmer and{" "}
+ @vercel on the release!
+ >
+ }
+ />
+
+
+
+ It's been a joy to use @turborepo.{" "}
+ @jaredpalmer is building something truly
+ wonderful for the JS community
+ >
+ }
+ />
+
+ If you build for web, leave everything and go see what{" "}
+ @jaredpalmer is doing with{" "}
+ @turborepo. One of the most exciting
+ pieces of tech lately! The hype is real
+ >
+ }
+ />
-
- Holy wow, I just rewrote my entire Lerna monorepo to use
- Turborepo and SWC, and it took me like maybe 20 minutes. This
- is insane. Literally, everything Vercel has
- backed/acquired/created makes development a little easier. But
- wow, it just blew my mind how easy this all is to use.
- >
- }
- />
-
- Living that @turborepo life{" "}
-
- 😎
-
- >
- }
- />
-
-
-
-
-
-
-
- Start Building →
-
-
+
+ Holy wow, I just rewrote my entire Lerna monorepo to use
+ Turborepo and SWC, and it took me like maybe 20 minutes.
+ This is insane. Literally, everything Vercel has
+ backed/acquired/created makes development a little easier.
+ But wow, it just blew my mind how easy this all is to use.
+ >
+ }
+ />
+
+ Living that @turborepo life{" "}
+
+ 😎
+
+ >
+ }
+ />
-
+
+
+
+
+
-
-
>
);
}
diff --git a/docs/next.config.js b/docs/next.config.js
index 542cf2443c1ee..a6c7dff920be8 100644
--- a/docs/next.config.js
+++ b/docs/next.config.js
@@ -1,7 +1,7 @@
const withNextra = require("nextra")({
- theme: "./nextra-theme-docs",
+ theme: "nextra-theme-docs",
themeConfig: "./theme.config.js",
- unstable_contentDump: true,
+ unstable_flexsearch: true,
unstable_staticImage: true,
});
diff --git a/docs/nextra-theme-docs/bleed.js b/docs/nextra-theme-docs/bleed.js
deleted file mode 100644
index 5c6b6da9d6eaf..0000000000000
--- a/docs/nextra-theme-docs/bleed.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from 'react'
-import cn from 'classnames'
-
-export default ({
- full,
- children,
-}) => {
- return (
-
- {children}
-
- )
-}
diff --git a/docs/nextra-theme-docs/callout.js b/docs/nextra-theme-docs/callout.js
deleted file mode 100644
index 6e6fb4233e6ea..0000000000000
--- a/docs/nextra-theme-docs/callout.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react'
-
-const themes = {
- default:
- 'bg-orange-100 text-orange-800 dark:text-orange-300 dark:bg-orange-200 dark:bg-opacity-10',
- error:
- 'bg-red-200 text-red-900 dark:text-red-200 dark:bg-red-600 dark:bg-opacity-30',
- warning:
- 'bg-yellow-200 text-yellow-900 dark:text-yellow-200 dark:bg-yellow-700 dark:bg-opacity-30'
-}
-
-export default ({ children, type = 'default', emoji = '💡' }) => {
- return (
-
-
- {emoji}
-
-
{children}
-
- )
-}
diff --git a/docs/nextra-theme-docs/config.tsx b/docs/nextra-theme-docs/config.tsx
deleted file mode 100644
index 9c6ef3afa5716..0000000000000
--- a/docs/nextra-theme-docs/config.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import React from "react";
-import { DocsThemeConfig } from "./types";
-
-export const ThemeConfigContext = React.createContext({});
-export const useConfig = () => React.useContext(ThemeConfigContext);
diff --git a/docs/nextra-theme-docs/flexsearch.js b/docs/nextra-theme-docs/flexsearch.js
deleted file mode 100644
index 2a13225610e0a..0000000000000
--- a/docs/nextra-theme-docs/flexsearch.js
+++ /dev/null
@@ -1,370 +0,0 @@
-import React, {
- memo,
- useCallback,
- useRef,
- useState,
- useEffect,
- Fragment,
-} from "react";
-import Router, { useRouter } from "next/router";
-import cn from "classnames";
-import Link from "next/link";
-import FlexSearch from "flexsearch";
-import { Transition } from "@headlessui/react";
-
-import { useConfig } from "./config";
-import renderComponent from "./utils/render-component";
-
-const Item = ({ page, first, title, active, href, onHover, excerpt }) => {
- return (
- <>
- {first ? (
-
- {page}
-
- ) : null}
-
-
-
-
- {title}
-
- {excerpt ? (
-
- {excerpt}
-
- ) : null}
-
-
-
- >
- );
-};
-
-const MemoedStringWithMatchHighlights = memo(
- function StringWithMatchHighlights({ content, search }) {
- const splittedText = content.split("");
- const escapedSearch = search.trim().replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
- const regexp = RegExp(
- "(" + escapedSearch.split(" ").join("|") + ")",
- "ig"
- );
- let match;
- let id = 0;
- let index = 0;
- const res = [];
-
- while ((match = regexp.exec(content)) !== null) {
- res.push(
-
- {splittedText.splice(0, match.index - index).join("")}
-
- );
- res.push(
-
- {splittedText.splice(0, regexp.lastIndex - match.index).join("")}
-
- );
- index = regexp.lastIndex;
- }
-
- res.push({splittedText.join("")});
-
- return res;
- }
-);
-
-// This can be global for better caching.
-const indexes = {};
-
-export default function Search() {
- const config = useConfig();
- const router = useRouter();
- const [loading, setLoading] = useState(false);
- const [show, setShow] = useState(false);
- const [search, setSearch] = useState("");
- const [active, setActive] = useState(0);
- const [results, setResults] = useState([]);
- const input = useRef(null);
-
- const doSearch = () => {
- if (!search) return;
-
- const localeCode = Router.locale || "default";
- const index = indexes[localeCode];
-
- if (!index) return;
-
- const pages = {};
- const results = []
- .concat(
- ...index
- .search(search, { enrich: true, limit: 10, suggest: true })
- .map((r) => r.result)
- )
- .map((r, i) => ({
- ...r,
- index: i,
- matchTitle:
- r.doc.content.indexOf(search) > r.doc.content.indexOf(" _NEXTRA_ "),
- }))
- .sort((a, b) => {
- if (a.matchTitle !== b.matchTitle) return a.matchTitle ? -1 : 1;
- if (a.doc.page !== b.doc.page) return a.doc.page > b.doc.page ? 1 : -1;
- return a.index - b.index;
- })
- .map((item) => {
- const firstItemOfPage = !pages[item.doc.page];
- pages[item.doc.page] = true;
-
- return {
- first: firstItemOfPage,
- route: item.doc.url,
- page: item.doc.page,
- title: (
-
- ),
- excerpt:
- item.doc.title !== item.doc.content ? (
-
- ) : null,
- };
- });
-
- setResults(results);
- };
- useEffect(doSearch, [search]);
-
- const handleKeyDown = useCallback(
- (e) => {
- switch (e.key) {
- case "ArrowDown": {
- e.preventDefault();
- if (active + 1 < results.length) {
- setActive(active + 1);
- const activeElement = document.querySelector(
- `.nextra-flexsearch ul > a:nth-of-type(${active + 2})`
- );
- if (activeElement && activeElement.scrollIntoView) {
- activeElement.scrollIntoView({
- behavior: "smooth",
- block: "nearest",
- });
- }
- }
- break;
- }
- case "ArrowUp": {
- e.preventDefault();
- if (active - 1 >= 0) {
- setActive(active - 1);
- const activeElement = document.querySelector(
- `.nextra-flexsearch ul > a:nth-of-type(${active})`
- );
- if (activeElement && activeElement.scrollIntoView) {
- activeElement.scrollIntoView({
- behavior: "smooth",
- block: "nearest",
- });
- }
- }
- break;
- }
- case "Enter": {
- router.push(results[active].route);
- break;
- }
- }
- },
- [active, results, router]
- );
-
- const load = async () => {
- const localeCode = Router.locale || "default";
- if (!indexes[localeCode] && !loading) {
- setLoading(true);
- const data = await (
- await fetch(`/_next/static/chunks/nextra-data-${localeCode}.json`)
- ).json();
-
- const index = new FlexSearch.Document({
- cache: 100,
- tokenize: "full",
- document: {
- id: "id",
- index: "content",
- store: ["title", "content", "url", "page"],
- },
- context: {
- resolution: 9,
- depth: 1,
- bidirectional: true,
- },
- filter: ["_NEXTRA_"],
- });
-
- for (let route in data) {
- for (let heading in data[route].data) {
- const [hash, text] = heading.split("#");
- const title = text || data[route].title;
- const url = route + (hash ? "#" + hash : "");
-
- const paragraphs = (data[route].data[heading] || "")
- .split("\n")
- .filter(Boolean);
-
- if (!paragraphs.length) {
- index.add({
- id: url,
- url: url,
- title,
- content: title,
- page: data[route].title,
- });
- }
-
- for (let i = 0; i < paragraphs.length; i++) {
- index.add({
- id: url + "_" + i,
- url: url,
- title: title,
- content: paragraphs[i] + (i === 0 ? " _NEXTRA_ " + title : ""),
- page: data[route].title,
- });
- }
- }
- }
-
- indexes[localeCode] = index;
- setLoading(false);
- setSearch((s) => (s ? s + " " : s)); // Trigger the effect
- }
- };
-
- useEffect(() => {
- setActive(0);
- }, [search]);
-
- useEffect(() => {
- const inputs = ["input", "select", "button", "textarea"];
-
- const down = (e) => {
- if (
- document.activeElement &&
- inputs.indexOf(document.activeElement.tagName.toLowerCase()) === -1
- ) {
- if (e.key === "/") {
- e.preventDefault();
- input.current.focus();
- } else if (e.key === "Escape") {
- setShow(false);
- }
- }
- };
-
- window.addEventListener("keydown", down);
- return () => window.removeEventListener("keydown", down);
- }, []);
-
- const renderList = show && !!search;
-
- return (
-
- {renderList && (
-
setShow(false)} />
- )}
-
-
{
- setSearch(e.target.value);
- setShow(true);
- }}
- className="block w-full px-3 py-2 leading-tight transition-colors rounded-lg appearance-none focus:outline-none focus:ring-1 focus:ring-gray-200 focus:bg-white hover:bg-opacity-5 dark:focus:bg-dark dark:focus:ring-gray-100 dark:focus:ring-opacity-20"
- type="search"
- placeholder={renderComponent(
- config.searchPlaceholder,
- {
- locale: router.locale,
- },
- true
- )}
- onKeyDown={handleKeyDown}
- onFocus={() => {
- load();
- setShow(true);
- }}
- onBlur={() => setShow(false)}
- ref={input}
- spellCheck={false}
- />
- {renderList ? null : (
-
-
- /
-
-
- )}
-
-
-
- {loading ? (
-
-
- Loading...
-
- ) : results.length === 0 ? (
- renderComponent(config.unstable_searchResultEmpty, {
- locale: router.locale,
- })
- ) : (
- results.map((res, i) => {
- return (
- - setActive(i)}
- />
- );
- })
- )}
-
-
-
- );
-}
diff --git a/docs/nextra-theme-docs/footer.js b/docs/nextra-theme-docs/footer.js
deleted file mode 100644
index 24be675d8916e..0000000000000
--- a/docs/nextra-theme-docs/footer.js
+++ /dev/null
@@ -1,135 +0,0 @@
-import React from 'react'
-import cn from 'classnames'
-import Link from 'next/link'
-import { useRouter } from 'next/router'
-import parseGitUrl from 'parse-git-url'
-
-import ArrowRight from './icons/arrow-right'
-import renderComponent from './utils/render-component'
-import { useConfig } from './config'
-
-const NextLink = ({ route, title, isRTL }) => {
- return (
-
-
- {title}
-
-
-
- )
-}
-
-const PrevLink = ({ route, title, isRTL }) => {
- return (
-
-
-
- {title}
-
-
- )
-}
-
-const createEditUrl = (repository, filepath) => {
- const repo = parseGitUrl(repository)
- if (!repo) throw new Error('Invalid `docsRepositoryBase` URL!')
-
- switch (repo.type) {
- case 'github':
- return `https://github.com/${repo.owner}/${repo.name}/blob/${
- repo.branch || 'main'
- }/${repo.subdir || 'pages'}${filepath}`
- case 'gitlab':
- return `https://gitlab.com/${repo.owner}/${repo.name}/-/blob/${
- repo.branch || 'master'
- }/${repo.subdir || 'pages'}${filepath}`
- }
-
- return '#'
-}
-
-const EditPageLink = ({ repository, text, filepath }) => {
- const url = createEditUrl(repository, filepath)
- const { locale } = useRouter()
- return (
-
- {text
- ? renderComponent(text, {
- locale
- })
- : 'Edit this page'}
-
- )
-}
-
-export const NavLinks = ({ flatDirectories, currentIndex, isRTL }) => {
- const config = useConfig()
- let prev = flatDirectories[currentIndex - 1]
- let next = flatDirectories[currentIndex + 1]
-
- return (
-
-
- {prev && config.prevLinks ? (
-
- ) : null}
-
-
- {config.nextLinks && next ? (
-
- ) : null}
-
-
- )
-}
-
-const Footer = ({ filepathWithName, children }) => {
- const { locale } = useRouter()
- const config = useConfig()
-
- return (
-
- )
-}
-
-export default Footer
diff --git a/docs/nextra-theme-docs/head.js b/docs/nextra-theme-docs/head.js
deleted file mode 100644
index 4a2b80645c661..0000000000000
--- a/docs/nextra-theme-docs/head.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import React from "react";
-import NextHead from "next/head";
-
-import renderComponent from "./utils/render-component";
-import { useConfig } from "./config";
-import { useRouter } from "next/router";
-
-export default function Head({ title, locale, meta }) {
- const config = useConfig();
- const router = useRouter();
- return (
-
- {config.font ? (
-
- ) : null}
-
- {title}
- {renderComponent(config.titleSuffix, { locale, config, title, meta })}
-
- {config.font ? (
-
- ) : null}
- {renderComponent(config.head, { locale, config, title, meta, router })}
- {config.unstable_faviconGlyph ? (
- ${config.unstable_faviconGlyph}`}
- />
- ) : null}
-
- );
-}
diff --git a/docs/nextra-theme-docs/icons/arrow-right.js b/docs/nextra-theme-docs/icons/arrow-right.js
deleted file mode 100644
index 528d30d163385..0000000000000
--- a/docs/nextra-theme-docs/icons/arrow-right.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react'
-
-export default ({ height = 24, ...props }) => {
- return (
-
- )
-}
diff --git a/docs/nextra-theme-docs/icons/discord.js b/docs/nextra-theme-docs/icons/discord.js
deleted file mode 100644
index 349fefd97938c..0000000000000
--- a/docs/nextra-theme-docs/icons/discord.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react'
-
-const DiscordIcon = ({ height = 40 }) => {
- return (
-
- )
-}
-
-export default DiscordIcon
diff --git a/docs/nextra-theme-docs/icons/github.js b/docs/nextra-theme-docs/icons/github.js
deleted file mode 100644
index 1ffaf77f13281..0000000000000
--- a/docs/nextra-theme-docs/icons/github.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react'
-
-export default ({ height = 40 }) => {
- return (
-
- )
-}
diff --git a/docs/nextra-theme-docs/index.js b/docs/nextra-theme-docs/index.js
deleted file mode 100644
index 7955182ba1892..0000000000000
--- a/docs/nextra-theme-docs/index.js
+++ /dev/null
@@ -1,381 +0,0 @@
-import React, { useMemo, useState } from "react";
-import format from "date-fns/format";
-import { useRouter } from "next/router";
-import "focus-visible";
-import { SkipNavContent } from "@reach/skip-nav";
-import { ThemeProvider } from "next-themes";
-import cn from "classnames";
-import Head from "./head";
-import Navbar from "./navbar";
-import Footer, { NavLinks } from "./footer";
-import { MDXTheme } from "./misc/theme";
-import Sidebar from "./sidebar";
-import ToC from "./toc";
-import { ThemeConfigContext, useConfig } from "./config";
-import { ActiveAnchor } from "./misc/active-anchor";
-import defaultConfig from "./misc/default.config";
-import { getFSRoute } from "./utils/get-fs-route";
-import { MenuContext } from "./utils/menu-context";
-import normalizePages from "./utils/normalize-pages";
-import traverse from "./utils/traverse";
-import sortDate from "./utils/sort-date";
-import Link from "next/link";
-import { Footer as FooterMain } from "../components/Footer";
-import { Avatar } from "../components/Avatar";
-import { formatDistanceToNow } from "date-fns";
-import renderComponent from "./utils/render-component";
-function useDirectoryInfo(pageMap) {
- const { locale, defaultLocale, asPath } = useRouter();
-
- return useMemo(() => {
- const fsPath = getFSRoute(asPath, locale).split("#")[0];
- return normalizePages({
- list: pageMap,
- locale,
- defaultLocale,
- route: fsPath,
- });
- }, [pageMap, locale, defaultLocale, asPath]);
-}
-
-function Body({ meta, toc, filepathWithName, navLinks, children, postList }) {
- const config = useConfig();
- return (
-
-
- {meta.headeronly ? (
- meta.container ? (
-
- ) : (
- {children}
- )
- ) : postList ? (
-
-
-
-
- Blog
-
-
- The latest updates and releases from the Turborepo team at
- Vercel.
-
-
-
- {postList}
-
-
-
-
- ) : meta.full ? (
-
- {children}
-
- ) : meta.type === "post" ? (
-
-
-
-
- {meta.title}
-
-
- {format(new Date(meta.date), "MMMM do, yyyy")} (
- {formatDistanceToNow(new Date(meta.date), {
- includeSeconds: false,
- addSuffix: true,
- })}
- )
-
-
- {config.authors
- ? renderComponent(config.authors, { authors: meta.authors })
- : null}
-
-
-
- {children}
-
-
-
-
- ) : (
-
-
- {children}
-
-
- {toc}
-
- )}
-
- );
-}
-
-const Layout = ({
- filename,
- pageMap,
- meta,
- route: _route,
- children,
- headings,
- titleText,
-}) => {
- const { route, locale } = useRouter();
- const config = useConfig();
-
- const {
- activeType,
- activeIndex,
- // pageDirectories,
- flatPageDirectories,
- docsDirectories,
- flatDirectories,
- flatDocsDirectories,
- directories,
- } = useDirectoryInfo(pageMap);
-
- const filepath = route.slice(0, route.lastIndexOf("/") + 1);
- const filepathWithName = filepath + filename;
- const title = meta.title || titleText || "Untitled";
-
- // gather info for tag/posts pages
- let posts = null;
- let navPages = [];
- const type = meta.type || "page";
- // console.log(pageMap);
- // This only renders once per page
- if (type === "posts" || type === "tag" || type === "page") {
- posts = [];
- // let's get all posts
- traverse(pageMap, (page) => {
- if (
- page.frontMatter &&
- ["page", "posts"].includes(page.frontMatter.type)
- ) {
- if (page.route === route) {
- navPages.push({ ...page, active: true });
- } else {
- navPages.push(page);
- }
- }
- if (page.children) return;
- if (page.name.startsWith("_")) return;
- // if (
- // type === "posts" &&
- // !page.route.startsWith(route === "/posts" ? route : route + "/")
- // )
- // return;
- if (page && page.frontMatter && page.frontMatter.type === "post") {
- posts.push(page);
- }
- });
- posts = posts.sort(sortDate);
- navPages = navPages.sort(sortDate);
- }
-
- // back button
- let back = null;
- if (type !== "post") {
- back = null;
- } else {
- const parentPages = [];
- traverse(pageMap, (page) => {
- if (
- route !== page.route &&
- (route + "/").startsWith(page.route === "/" ? "/" : page.route + "/")
- ) {
- parentPages.push(page);
- }
- });
- const parentPage = parentPages
- .reverse()
- .find((page) => page.frontMatter && page.frontMatter.type === "posts");
- if (parentPage) {
- back = parentPage.route;
- }
- }
-
- const postList = posts ? (
-
- {posts.map((post) => {
- const postTitle =
- (post.frontMatter ? post.frontMatter.title : null) || post.name;
- const postDate = post.frontMatter ? (
-
- ) : null;
- const postDescription =
- post.frontMatter && post.frontMatter.description ? (
-
- {post.frontMatter.description}
- {config.readMore ? (
-
- {config.readMore}
-
- ) : null}
-
- ) : null;
-
- return (
-
-
- {postDescription}
- {postDate}
-
- );
- })}
-
- ) : null;
-
- const isRTL = useMemo(() => {
- if (!config.i18n) return config.direction === "rtl" || null;
- const localeConfig = config.i18n.find((l) => l.locale === locale);
- return localeConfig && localeConfig.direction === "rtl";
- }, [config.i18n, locale]);
-
- const [menu, setMenu] = useState(false);
-
- if (
- activeType === "nav" ||
- meta.headeronly ||
- meta.type === "post" ||
- meta.type === "posts"
- ) {
- return (
-
-
-
-
-
-
-
-
-
- ) : null
- }
- postList={postList}
- >
- {children}
-
-
-
-
-
-
- );
- }
-
- // Docs layout
- return (
-
-
-
-
-
-
-
-
-
- }
- navLinks={
-
- }
- >
- {children}
-
-
-
-
-
-
- );
-};
-
-export default function NextraThemeLayout(opts, config) {
- const extendedConfig = Object.assign({}, defaultConfig, config);
-
- return function NextraLayout(props) {
- return (
-
-
-
-
-
- );
- };
-}
diff --git a/docs/nextra-theme-docs/locale-switch.js b/docs/nextra-theme-docs/locale-switch.js
deleted file mode 100644
index 1d12d3a1d06d6..0000000000000
--- a/docs/nextra-theme-docs/locale-switch.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import React from 'react'
-import { useRouter } from 'next/router'
-import Link from 'next/link'
-import cn from 'classnames'
-
-import useMounted from './utils/use-mounted'
-
-export default function LocaleSwitch({ options, isRTL }) {
- const { locale, asPath } = useRouter()
- const mounted = useMounted()
-
- return (
-
-
-
- Languages
-
- {mounted ? (
-
- ) : null}
-
- )
-}
diff --git a/docs/nextra-theme-docs/misc/active-anchor.js b/docs/nextra-theme-docs/misc/active-anchor.js
deleted file mode 100644
index dcb58056447b5..0000000000000
--- a/docs/nextra-theme-docs/misc/active-anchor.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React, { createContext, useContext, useState } from 'react'
-
-const ActiveAnchorContext = createContext()
-const ActiveAnchorSetterContext = createContext()
-
-// Separate the state as 2 contexts here to avoid
-// re-renders of the content triggered by the state update.
-export const useActiveAnchor = () => useContext(ActiveAnchorContext)
-export const useActiveAnchorSet = () => useContext(ActiveAnchorSetterContext)
-export const ActiveAnchor = ({ children }) => {
- const state = useState({})
- return
-
- {children}
-
-
-}
diff --git a/docs/nextra-theme-docs/misc/default.config.js b/docs/nextra-theme-docs/misc/default.config.js
deleted file mode 100644
index 14c1b8a14f78f..0000000000000
--- a/docs/nextra-theme-docs/misc/default.config.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import React from "react";
-
-export default {
- docsRepositoryBase: "https://github.com/shuding/nextra",
- titleSuffix: " – Nextra",
- nextLinks: true,
- prevLinks: true,
- search: true,
- darkMode: true,
- defaultMenuCollapsed: false,
- font: true,
- footer: true,
- footerText: `MIT ${new Date().getFullYear()} © Nextra.`,
- footerEditLink: "Edit this page",
- logo: (
-
- Nextra
-
- The Next Docs Builder
-
-
- ),
- head: (
-
-
-
-
-
-
-
-
-
-
-
-
- ),
- searchPlaceholder: () => {
- return "Search documentation...";
- },
- unstable_searchResultEmpty: () => (
-
- No results found.
-
- ),
- // direction: 'ltr',
- // i18n: [{ locale: 'en-US', text: 'English', direction: 'ltr' }],
-};
diff --git a/docs/nextra-theme-docs/misc/theme.js b/docs/nextra-theme-docs/misc/theme.js
deleted file mode 100644
index cf09adc65cbfe..0000000000000
--- a/docs/nextra-theme-docs/misc/theme.js
+++ /dev/null
@@ -1,232 +0,0 @@
-import Slugger from "github-slugger";
-import Link from "next/link";
-import React, { useEffect, useRef, useState } from "react";
-import innerText from "react-innertext";
-import "intersection-observer";
-import { MDXProvider } from "@mdx-js/react";
-
-import { useActiveAnchorSet } from "./active-anchor";
-
-const ob = {};
-const obCallback = {};
-const createOrGetObserver = (rootMargin) => {
- // Only create 1 instance for performance reasons
- if (!ob[rootMargin]) {
- obCallback[rootMargin] = [];
- ob[rootMargin] = new IntersectionObserver(
- (e) => {
- obCallback[rootMargin].forEach((cb) => cb(e));
- },
- {
- rootMargin,
- threshold: [0, 1],
- }
- );
- }
- return ob[rootMargin];
-};
-
-function useIntersect(margin, ref, cb) {
- useEffect(() => {
- const callback = (entries) => {
- let e;
- for (let i = 0; i < entries.length; i++) {
- if (entries[i].target === ref.current) {
- e = entries[i];
- break;
- }
- }
- if (e) cb(e);
- };
-
- const observer = createOrGetObserver(margin);
- obCallback[margin].push(callback);
- if (ref.current) observer.observe(ref.current);
-
- return () => {
- const idx = obCallback[margin].indexOf(callback);
- if (idx >= 0) obCallback[margin].splice(idx, 1);
- if (ref.current) observer.unobserve(ref.current);
- };
- }, []);
-}
-
-const log = [];
-
-// Anchor links
-const HeaderLink = ({
- tag: Tag,
- children,
- slugger,
- withObserver = true,
- ...props
-}) => {
- const setActiveAnchor = useActiveAnchorSet();
- const obRef = useRef();
-
- // We are pretty sure that this header link component will not be rerendered
- // separately, so we attach a mutable index property to slugger.
- const slug = useState(() => slugger.slug(innerText(children) || ""))[0];
- const index = useState(() => slugger.index++)[0];
-
- const anchor =
;
-
- useIntersect("0px 0px -50%", obRef, (e) => {
- const aboveHalfViewport =
- e.boundingClientRect.y + e.boundingClientRect.height <=
- e.rootBounds.y + e.rootBounds.height;
- const insideHalfViewport = e.intersectionRatio > 0;
-
- setActiveAnchor((f) => {
- const ret = {
- ...f,
- [slug]: {
- index,
- aboveHalfViewport,
- insideHalfViewport,
- },
- };
-
- let activeSlug;
- let smallestIndexInViewport = Infinity;
- let largestIndexAboveViewport = -1;
- for (let s in f) {
- ret[s].isActive = false;
- if (
- ret[s].insideHalfViewport &&
- ret[s].index < smallestIndexInViewport
- ) {
- smallestIndexInViewport = ret[s].index;
- activeSlug = s;
- }
- if (
- smallestIndexInViewport === Infinity &&
- ret[s].aboveHalfViewport &&
- ret[s].index > largestIndexAboveViewport
- ) {
- largestIndexAboveViewport = ret[s].index;
- activeSlug = s;
- }
- }
-
- if (ret[activeSlug]) ret[activeSlug].isActive = true;
- return ret;
- });
- });
-
- return (
-
- {anchor}
-
- {children}
-
- #
-
-
-
- );
-};
-
-const H2 =
- ({ slugger }) =>
- ({ children, ...props }) => {
- return (
-
- {children}
-
- );
- };
-
-const H3 =
- ({ slugger }) =>
- ({ children, ...props }) => {
- return (
-
- {children}
-
- );
- };
-
-const H4 =
- ({ slugger }) =>
- ({ children, ...props }) => {
- return (
-
- {children}
-
- );
- };
-
-const H5 =
- ({ slugger }) =>
- ({ children, ...props }) => {
- return (
-
- {children}
-
- );
- };
-
-const H6 =
- ({ slugger }) =>
- ({ children, ...props }) => {
- return (
-
- {children}
-
- );
- };
-
-const A = ({ children, ...props }) => {
- const isExternal = props.href && props.href.startsWith("https://");
- if (isExternal) {
- return (
-
- {children}
-
- );
- }
- return (
-
-
{children}
-
- );
-};
-
-const PreContext = React.createContext({});
-const Pre = ({ children, ...props }) => {
- return (
-
- {children}
-
- );
-};
-
-const Table = ({ children }) => {
- return (
-
- );
-};
-
-const getComponents = (args) => ({
- h2: H2(args),
- h3: H3(args),
- h4: H4(args),
- h5: H5(args),
- h6: H6(args),
- a: A,
- pre: Pre,
- table: Table,
-});
-
-export const MDXTheme = ({ children }) => {
- const slugger = new Slugger();
- slugger.index = 0;
- return (
-
- {children}
-
- );
-};
diff --git a/docs/nextra-theme-docs/navbar.js b/docs/nextra-theme-docs/navbar.js
deleted file mode 100644
index 68c6236bccc85..0000000000000
--- a/docs/nextra-theme-docs/navbar.js
+++ /dev/null
@@ -1,148 +0,0 @@
-import React from "react";
-import cn from "classnames";
-import Link from "next/link";
-import { useRouter } from "next/router";
-
-import renderComponent from "./utils/render-component";
-import { getFSRoute } from "./utils/get-fs-route";
-import useMenuContext from "./utils/menu-context";
-
-import { useConfig } from "./config";
-import Search from "./flexsearch";
-import GitHubIcon from "./icons/github";
-import DiscordIcon from "./icons/discord";
-import ThemeSwitch from "./theme-switch";
-import LocaleSwitch from "./locale-switch";
-
-export default function Navbar({
- isRTL,
- flatDirectories,
- flatPageDirectories,
-}) {
- const config = useConfig();
- const { locale, asPath } = useRouter();
- const activeRoute = getFSRoute(asPath, locale).split("#")[0];
- const { menu, setMenu } = useMenuContext();
-
- return (
- <>
- {config.banner ? renderComponent(config.banner, { locale }) : null}
-
- >
- );
-}
diff --git a/docs/nextra-theme-docs/sidebar.js b/docs/nextra-theme-docs/sidebar.js
deleted file mode 100644
index 772738a4863bc..0000000000000
--- a/docs/nextra-theme-docs/sidebar.js
+++ /dev/null
@@ -1,244 +0,0 @@
-import React, { useState, useEffect, useMemo, useCallback } from "react";
-import cn from "classnames";
-import Slugger from "github-slugger";
-import { useRouter } from "next/router";
-import Link from "next/link";
-import innerText from "react-innertext";
-
-import { useActiveAnchor } from "./misc/active-anchor";
-import { getFSRoute } from "./utils/get-fs-route";
-import useMenuContext from "./utils/menu-context";
-import ArrowRight from "./icons/arrow-right";
-import Search from "./flexsearch";
-import { useConfig } from "./config";
-
-const TreeState = new Map();
-function Folder({ item, anchors }) {
- const { asPath, locale } = useRouter();
- const routeOriginal = getFSRoute(asPath, locale);
- const route = routeOriginal.split("#")[0];
- const active = route === item.route + "/" || route + "/" === item.route + "/";
- const { defaultMenuCollapsed } = useMenuContext();
- const open = TreeState[item.route] ?? !defaultMenuCollapsed;
- const [_, render] = useState(false);
-
- useEffect(() => {
- if (active) {
- TreeState[item.route] = true;
- }
- }, [active]);
-
- return (
-
-
-
- {Array.isArray(item.children) && (
-
- )}
-
-
- );
-}
-
-function File({ item, anchors }) {
- const { setMenu } = useMenuContext();
- const { asPath, locale } = useRouter();
- const route = getFSRoute(asPath, locale);
- const active = route === item.route + "/" || route + "/" === item.route + "/";
- const slugger = new Slugger();
- const activeAnchor = useActiveAnchor();
-
- const title = item.title;
- // if (item.title.startsWith('> ')) {
- // title = title.substr(2)
- if (anchors && anchors.length) {
- if (active) {
- let activeIndex = 0;
- const anchorInfo = anchors.map((anchor, i) => {
- const text = innerText(anchor) || "";
- const slug = slugger.slug(text);
- if (activeAnchor[slug] && activeAnchor[slug].isActive) {
- activeIndex = i;
- }
- return { text, slug };
- });
-
- return (
-
-
- {title}
-
-
-
- );
- }
- }
-
- return (
-
-
- setMenu(false)}>{title}
-
-
- );
-}
-
-function Menu({ directories, anchors }) {
- const config = useConfig();
- return (
-
- {directories.map((item) => {
- if (item.name === "blog") {
- return ;
- }
- if (item.name === "confirm") {
- return null;
- }
- if (item.name === "terms") {
- return null;
- }
- if (item.name === "privacy") {
- return null;
- }
- if (item.children) {
- return ;
- }
- return ;
- })}
-
- );
-}
-
-export default function Sidebar({
- directories,
- flatDirectories,
- fullDirectories,
- mdShow = true,
- headings = [],
-}) {
- const config = useConfig();
- const anchors = useMemo(
- () =>
- headings
- .filter((v) => v.children && v.depth === 2 && v.type === "heading")
- .map((v) => v.value || "")
- .filter(Boolean),
- [headings]
- );
- const [hasScrolled, setHasScrolled] = useState(false);
-
- const onScroll = useCallback(() => {
- setHasScrolled(window.pageYOffset > 1);
- }, []);
-
- useEffect(() => {
- if (typeof window !== "undefined") {
- requestIdleCallback(onScroll);
- window.addEventListener("scroll", onScroll);
- }
- return () => {
- if (typeof window !== "undefined") {
- window.removeEventListener("scroll", onScroll);
- }
- };
- }, [onScroll]);
-
- const { menu } = useMenuContext();
- useEffect(() => {
- if (menu) {
- document.body.classList.add("overflow-hidden");
- } else {
- document.body.classList.remove("overflow-hidden");
- }
- }, [menu]);
-
- return (
-
- );
-}
diff --git a/docs/nextra-theme-docs/stork-search.js b/docs/nextra-theme-docs/stork-search.js
deleted file mode 100644
index f664b1a1f31ed..0000000000000
--- a/docs/nextra-theme-docs/stork-search.js
+++ /dev/null
@@ -1,229 +0,0 @@
-import React, {
- useMemo,
- useCallback,
- useRef,
- useState,
- useEffect,
- Fragment,
-} from "react";
-import Router, { useRouter } from "next/router";
-import cn from "classnames";
-import Link from "next/link";
-import GraphemeSplitter from "grapheme-splitter";
-
-const splitter = new GraphemeSplitter();
-
-const TextWithHighlights = React.memo(function TextWithHighlights({
- content,
- ranges,
-}) {
- const splittedText = content ? splitter.splitGraphemes(content) : [];
- const res = [];
-
- let id = 0,
- index = 0;
- for (const range of ranges) {
- res.push(
-
- {splittedText.splice(0, range.beginning - index).join("")}
-
- );
- res.push(
-
- {splittedText.splice(0, range.end - range.beginning).join("")}
-
- );
- index = range.end;
- }
- res.push(
{splittedText.join("")});
-
- return res;
-});
-
-const Item = ({ title, active, href, onMouseOver, excerpt }) => {
- return (
-
-
-
- {title}
- {excerpt ? (
-
-
-
- ) : null}
-
-
-
- );
-};
-
-// This can be global for better caching.
-const stork = {};
-
-export default function Search() {
- const router = useRouter();
- const [show, setShow] = useState(false);
- const [search, setSearch] = useState("");
- const [active, setActive] = useState(0);
- const setStork = useState({})[1];
- const input = useRef(null);
-
- const results = useMemo(() => {
- if (!search) return [];
-
- const localeCode = Router.locale || "default";
- if (!stork[localeCode]) return [];
-
- try {
- const json = stork[localeCode].wasm_search(`index-${localeCode}`, search);
- const obj = JSON.parse(json);
-
- if (!obj.results) return [];
- return obj.results.slice(0, 20).map((result) => {
- return {
- title: result.entry.title,
- route: result.entry.url,
- excerpt: result.excerpts[0],
- };
- });
- } catch (err) {
- console.error(err);
- return [];
- }
- }, [search]);
-
- const handleKeyDown = useCallback(
- (e) => {
- switch (e.key) {
- case "ArrowDown": {
- e.preventDefault();
- if (active + 1 < results.length) {
- setActive(active + 1);
- const activeElement = document.querySelector(
- `.nextra-stork ul > :nth-child(${active + 2})`
- );
- if (activeElement && activeElement.scrollIntoViewIfNeeded) {
- activeElement.scrollIntoViewIfNeeded();
- }
- }
- break;
- }
- case "ArrowUp": {
- e.preventDefault();
- if (active - 1 >= 0) {
- setActive(active - 1);
- const activeElement = document.querySelector(
- `.nextra-stork ul > :nth-child(${active})`
- );
- if (activeElement && activeElement.scrollIntoViewIfNeeded) {
- activeElement.scrollIntoViewIfNeeded();
- }
- }
- break;
- }
- case "Enter": {
- router.push(results[active].route);
- break;
- }
- }
- },
- [active, results, router]
- );
-
- const load = async () => {
- const localeCode = Router.locale || "default";
- if (!stork[localeCode]) {
- stork[localeCode] = await import("./wasm-loader");
- setStork({});
-
- const init = stork[localeCode].init("/stork.wasm");
- const res = await fetch(`/index-${localeCode}.st`);
- const buf = await res.arrayBuffer();
- await init;
- stork[localeCode].wasm_register_index(
- `index-${localeCode}`,
- new Uint8Array(buf)
- );
- }
- };
-
- useEffect(() => {
- setActive(0);
- }, [search]);
-
- useEffect(() => {
- const inputs = ["input", "select", "button", "textarea"];
-
- const down = (e) => {
- if (
- document.activeElement &&
- inputs.indexOf(document.activeElement.tagName.toLowerCase()) === -1
- ) {
- if (e.key === "/") {
- e.preventDefault();
- input.current.focus();
- } else if (e.key === "Escape") {
- setShow(false);
- }
- }
- };
-
- window.addEventListener("keydown", down);
- return () => window.removeEventListener("keydown", down);
- }, []);
-
- const renderList = show && results.length > 0;
-
- return (
-
- {renderList && (
-
setShow(false)} />
- )}
-
-
{
- setSearch(e.target.value);
- setShow(true);
- }}
- className="block w-full px-3 py-2 leading-tight border rounded appearance-none focus:outline-none focus:ring"
- type="search"
- placeholder="Search documentation..."
- onKeyDown={handleKeyDown}
- onFocus={() => {
- load();
- setShow(true);
- }}
- onBlur={() => setShow(false)}
- ref={input}
- spellCheck={false}
- />
- {show ? null : (
-
-
- /
-
-
- )}
-
- {renderList && (
-
- {results.map((res, i) => {
- return (
- - setActive(i)}
- />
- );
- })}
-
- )}
-
- );
-}
diff --git a/docs/nextra-theme-docs/styles.css b/docs/nextra-theme-docs/styles.css
deleted file mode 100644
index 5148e129c0286..0000000000000
--- a/docs/nextra-theme-docs/styles.css
+++ /dev/null
@@ -1,387 +0,0 @@
-@tailwind base;
-
-html {
- @apply subpixel-antialiased;
- font-size: 16px;
- font-feature-settings: "rlig" 1, "calt" 1, "ss01" 1;
- /* scroll-behavior: smooth; */
-}
-body {
- @apply bg-white;
-}
-.dark body {
- @apply text-gray-100 bg-dark;
-}
-
-article h1 {
- @apply mt-2 text-4xl font-bold tracking-tight;
-}
-article h2 {
- @apply mt-10 text-3xl font-semibold tracking-tight;
- @apply pb-1;
-}
-/* .dark article h2 {
- @apply border-gray-900;
-} */
-article h3 {
- @apply mt-8 text-2xl font-semibold tracking-tight;
-}
-article h4 {
- @apply mt-8 text-xl font-semibold tracking-tight;
-}
-article h5 {
- @apply mt-8 text-lg font-semibold tracking-tight;
-}
-article h6 {
- @apply mt-8 text-base font-semibold tracking-tight;
-}
-a {
- @apply text-blue-500 underline;
- text-underline-position: under;
-}
-article p {
- @apply leading-7;
-}
-article p:not(:first-child),
-article blockquote:not(:first-child),
-article .table-container:not(:first-child) {
- @apply mt-6;
-}
-article hr {
- @apply my-8;
-}
-.dark article hr {
- @apply border-gray-900;
-}
-article code {
- @apply text-gray-600 bg-gray-300 bg-opacity-25 rounded;
- box-decoration-break: clone;
-}
-.dark article code {
- @apply text-gray-300 bg-gray-800;
-}
-article pre {
- @apply p-4 mt-6 mb-4 overflow-x-auto bg-gray-100 rounded-lg;
- @apply dark:bg-gray-800;
-}
-article pre code {
- @apply inline-block min-w-full p-0 text-sm text-black bg-transparent rounded-none;
-}
-article a code {
- @apply text-current no-underline;
-}
-
-@tailwind components;
-@tailwind utilities;
-
-.main-container {
- min-height: 100vh;
-}
-
-.sidebar {
- @apply select-none md:border-r;
-}
-.sidebar ul ul {
- @apply relative ml-5;
-}
-.sidebar a:focus-visible,
-.sidebar button:focus-visible {
- @apply ring;
-}
-.sidebar .active-anchor {
- @apply font-semibold text-gray-900 dark:text-white;
-}
-.sidebar li.active > a {
- @apply font-semibold text-black bg-gray-100;
-}
-.dark .sidebar li.active > a {
- @apply text-white bg-gray-800;
-}
-.sidebar button,
-.sidebar a {
- @apply block w-full p-2 mt-1 text-sm text-left text-gray-600 no-underline rounded outline-none select-none;
- -webkit-tap-highlight-color: transparent;
- -webkit-touch-callout: none;
-}
-.dark .sidebar button,
-.dark .sidebar a {
- @apply text-gray-400;
-}
-.sidebar a:hover,
-.sidebar button:hover {
- @apply text-gray-900 bg-gray-100;
-}
-.dark .sidebar a:hover,
-.dark .sidebar button:hover {
- @apply text-white bg-gray-900;
-}
-article ul {
- @apply mt-6 ml-6 list-disc;
-}
-article li {
- @apply mt-2;
-}
-article ol {
- @apply mt-6 ml-6 list-decimal;
-}
-article blockquote {
- @apply pl-6 italic text-gray-700 border-l-2 border-gray-300;
- @apply dark:border-gray-700 dark:text-gray-400;
-}
-
-article .subheading-anchor {
- margin-top: -84px;
- display: inline-block;
- position: absolute;
- width: 1px;
-}
-
-article .subheading-anchor + a:hover .anchor-icon {
- opacity: 1;
-}
-article .anchor-icon {
- opacity: 0;
- @apply ml-2 text-gray-500 select-none;
-}
-.dark article .anchor-icon {
- @apply text-gray-700;
-}
-
-article h2 a {
- @apply no-underline;
-}
-
-/* Navbar */
-.nextra-container nav {
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02);
-}
-.nextra-container nav a:focus,
-.nextra-container nav summary:focus {
- @apply outline-none select-none;
-}
-.nextra-container nav a:focus-visible,
-.nextra-container nav summary:focus-visible {
- @apply outline-none select-none ring;
-}
-
-/* Search */
-.nextra-search {
- input {
- @apply text-gray-900 bg-black bg-opacity-[.03];
- @apply dark:text-gray-300 dark:bg-gray-50 dark:bg-opacity-10;
- @apply dark:border-gray-800;
- }
- input::placeholder {
- @apply text-gray-400;
- @apply dark:text-gray-500;
- }
- &.nextra-flexsearch ul {
- @apply left-0 overflow-auto md:-left-80 md:right-0;
- min-height: 100px;
- max-height: min(calc(100vh - 12.5rem), 600px);
- max-width: min(calc(100vw - 2rem), calc(100% + 20rem));
- transition: max-height 0.2s ease;
- width: 100vw;
- }
- ul {
- @apply rounded-xl backdrop-blur-lg bg-white bg-opacity-[.7] text-gray-100 ring-1 ring-black ring-opacity-5 overflow-hidden overscroll-contain shadow-xl list-none;
- li {
- @apply text-gray-800 break-words mx-2.5 px-2.5 py-2 rounded-md;
- .highlight {
- @apply text-blue-500 underline decoration-blue-400;
- }
- }
- li.active,
- a:focus li {
- @apply text-blue-500 bg-blue-400 bg-opacity-[.1];
- }
- }
- .dark & {
- ul {
- @apply text-gray-100 bg-neutral-800 backdrop-blur-xl bg-opacity-60 ring-white ring-opacity-10 divide-gray-200/10;
- li {
- @apply text-gray-300;
- .highlight {
- @apply text-blue-500 underline decoration-blue-400;
- }
- }
- li.active,
- a:focus li {
- @apply text-blue-500 bg-blue-500 bg-opacity-[.1];
- }
- }
- }
-}
-
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-results-button,
-input[type="search"]::-webkit-search-results-decoration {
- -webkit-appearance: none;
-}
-.nextra-search.nextra-stork ul {
- @apply left-0 overflow-auto md:-left-80 md:right-0;
- max-height: min(calc(100vh - 80px), 400px);
- max-width: min(calc(100vw - 2rem), calc(100% + 20rem));
- width: 100vw;
-}
-
-article code {
- font-size: 0.85em;
- padding: 0.2em 0.3em;
- @apply border;
-}
-
-.dark article code {
- @apply border-gray-700;
-}
-
-article pre code {
- @apply border-0;
-}
-
-/* Locale */
-.locale-switch summary::-webkit-details-marker {
- content: "";
- display: none;
-}
-.locale-switch summary::marker {
- content: "";
- display: none;
-}
-.locale-switch[open] summary:before {
- content: " ";
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 10;
- display: block;
- cursor: default;
- background: transparent;
-}
-article .locale-switch .locale-dropdown {
- position: absolute;
- z-index: 11;
-}
-
-/* Table */
-article table {
- @apply p-0;
-}
-article table tr {
- @apply p-0 m-0 border-t border-gray-300;
- @apply dark:border-gray-700;
-}
-article table tr:nth-child(2n) {
- @apply bg-gray-100;
- @apply dark:bg-gray-900;
-}
-article table tr th {
- @apply font-semibold;
-}
-article table tr th[align="center"],
-article table tr td[align="center"] {
- @apply text-center;
-}
-article table tr th[align="right"],
-article table tr td[align="right"] {
- @apply text-right;
-}
-article table tr th,
-article table tr td {
- @apply text-left;
- @apply px-4 py-2 m-0 border border-gray-300;
- @apply dark:border-gray-700;
-}
-article .table-container {
- overflow: auto;
-}
-
-article .contains-task-list {
- @apply ml-0 list-none;
-}
-
-article .contains-task-list input[type="checkbox"] {
- @apply mr-1;
-}
-
-:root {
- --shiki-color-text: #24292f;
- --shiki-color-background: #ffffff;
- --shiki-token-constant: #0550ae;
- --shiki-token-string: #24292f;
- --shiki-token-comment: #6e7781;
- --shiki-token-keyword: #cf222e;
- --shiki-token-parameter: #24292f;
- --shiki-token-function: #8250df;
- --shiki-token-string-expression: #0a3069;
- --shiki-token-punctuation: #24292f;
- --nextra-shiki-deleted: #f00;
- --nextra-shiki-inserted: #f00;
-}
-
-.dark {
- --shiki-color-text: #c9d1d9;
- --shiki-color-background: #0d1117;
- --shiki-token-constant: #79c0ff;
- --shiki-token-string: #a5d6ff;
- --shiki-token-comment: #8b949e;
- --shiki-token-keyword: #ff7b72;
- --shiki-token-parameter: #c9d1d9;
- --shiki-token-function: #d2a8ff;
- --shiki-token-string-expression: #a5d6ff;
- --shiki-token-punctuation: #c9d1d9;
-}
-
-.post-item .post-item-date {
- @apply text-sm text-gray-300;
-}
-.post-item .post-item-more {
- @apply ml-1 text-gray-600;
-}
-.post-item .post-item-desc {
- margin-bottom: 0.5em;
- @apply text-gray-400;
-}
-.post-item .post-item-title {
- @apply text-2xl no-underline;
- color: unset;
-}
-.post-item .post-item-title:hover {
- @apply underline;
-}
-
-.meta-line {
- @apply flex items-center justify-end mb-8;
-}
-.meta {
- @apply flex-1 mr-8 text-gray-400;
-}
-.meta .tag {
- @apply inline-block px-1 mr-1 text-sm leading-5 text-gray-400 no-underline bg-gray-200 rounded-md select-none;
-}
-.dark .meta .tag {
- @apply text-gray-100 bg-gray-400;
-}
-
-.meta .tag:hover {
- @apply text-gray-800;
-}
-.meta .tag:active {
- @apply bg-gray-400;
-}
-.meta-line .meta-back {
- @apply text-gray-600;
-}
-
-.nav-line {
- @apply flex flex-row items-center justify-end mb-8 text-right;
-}
-.nav-line .nav-link {
- @apply ml-3 text-gray-600;
-}
-.nav-line span.nav-link {
- @apply ml-3 text-gray-400 cursor-default;
-}
diff --git a/docs/nextra-theme-docs/theme-switch.js b/docs/nextra-theme-docs/theme-switch.js
deleted file mode 100644
index 6749f13af3790..0000000000000
--- a/docs/nextra-theme-docs/theme-switch.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import React from "react";
-import { useTheme } from "next-themes";
-
-import useMounted from "./utils/use-mounted";
-
-export default function ThemeSwitch() {
- const { theme, setTheme } = useTheme();
- const mounted = useMounted();
-
- // @TODO: system theme
- const toggleTheme = () => {
- setTheme(theme === "dark" ? "light" : "dark");
- };
-
- return (
-
- );
-}
diff --git a/docs/nextra-theme-docs/toc.tsx b/docs/nextra-theme-docs/toc.tsx
deleted file mode 100644
index 92060182bfc60..0000000000000
--- a/docs/nextra-theme-docs/toc.tsx
+++ /dev/null
@@ -1,203 +0,0 @@
-import React from "react";
-import cn from "classnames";
-import Slugger from "github-slugger";
-import { Heading } from "nextra";
-import parseGitUrl from "parse-git-url";
-import { useRouter } from "next/router";
-
-import renderComponent from "./utils/render-component";
-import getHeadingText from "./utils/get-heading-text";
-import { useActiveAnchor } from "./misc/active-anchor";
-import { useConfig } from "./config";
-import useMounted from "./utils/use-mounted";
-
-const createEditUrl = (repository?: string, filepath?: string) => {
- const repo = parseGitUrl(repository || "");
- if (!repo) throw new Error("Invalid `docsRepositoryBase` URL!");
-
- switch (repo.type) {
- case "github":
- return `https://github.com/${repo.owner}/${repo.name}/blob/${
- repo.branch || "main"
- }/${repo.subdir || "pages"}${filepath}`;
- case "gitlab":
- return `https://gitlab.com/${repo.owner}/${repo.name}/-/blob/${
- repo.branch || "master"
- }/${repo.subdir || "pages"}${filepath}`;
- }
-
- return "#";
-};
-
-const useCreateFeedbackUrl = (
- repository?: string,
- filepath?: string,
- labels?: string
-) => {
- const mounted = useMounted();
- if (!mounted) return "#";
-
- const repo = parseGitUrl(repository || "");
- if (!repo) throw new Error("Invalid `docsRepositoryBase` URL!");
-
- const pageTitle = document.title;
-
- switch (repo.type) {
- case "github":
- return `https://github.com/${repo.owner}/${
- repo.name
- }/issues/new?title=${encodeURIComponent(
- `Feedback for “${pageTitle}”`
- )}&labels=${labels || ""}`;
- case "gitlab":
- return `https://gitlab.com/${repo.owner}/${repo.name}/-/blob/${
- repo.branch || "master"
- }/${repo.subdir || "pages"}${filepath}`;
- }
-
- return "#";
-};
-
-const EditPageLink = ({
- repository,
- text,
- filepath,
-}: {
- repository?: string;
- text: string;
- filepath: string;
-}) => {
- const url = createEditUrl(repository, filepath);
- const { locale } = useRouter();
- return (
-
- {text
- ? renderComponent(text, {
- locale,
- })
- : "Edit this page"}
-
- );
-};
-
-const FeedbackLink = ({
- repository,
- text,
- filepath,
- labels,
-}: {
- repository?: string;
- text: string;
- filepath: string;
- labels?: string;
-}) => {
- const url = useCreateFeedbackUrl(repository, filepath, labels);
- const { locale } = useRouter();
- return (
-
- {text
- ? renderComponent(text, {
- locale,
- })
- : "Feedback"}
-
- );
-};
-
-const indent = (level: number) => {
- switch (level) {
- case 3:
- return { marginLeft: "1rem " };
- case 4:
- return { marginLeft: "2rem " };
- case 5:
- return { marginLeft: "3rem " };
- case 6:
- return { marginLeft: "4rem " };
- }
- return {};
-};
-
-const emptyHeader: any[] = [];
-
-export default function ToC({
- headings = emptyHeader,
- filepathWithName,
-}: {
- headings: Heading[] | null;
- filepathWithName: string;
-}) {
- const slugger = new Slugger();
- const activeAnchor = useActiveAnchor();
- const config = useConfig();
- const hasMetaInfo = config.feedbackLink || config.footerEditLink;
-
- return (
-
-
- {headings ? (
-
- On This Page
- {headings
- .filter(
- (heading) => heading.type === "heading" && heading.depth > 1
- )
- .map((heading) => {
- const text = getHeadingText(heading);
- const slug = slugger.slug(text);
- const state = activeAnchor[slug];
- return (
- -
-
- {text}
-
-
- );
- })}
-
- ) : null}
-
- {hasMetaInfo ? (
-
- ) : null}
-
- {config.feedbackLink ? (
-
- ) : null}
-
- {config.footerEditLink ? (
-
- ) : null}
-
-
- );
-}
diff --git a/docs/nextra-theme-docs/types.ts b/docs/nextra-theme-docs/types.ts
deleted file mode 100644
index 3aad532f5a0c1..0000000000000
--- a/docs/nextra-theme-docs/types.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-export interface DocsThemeConfig {
- docsRepositoryBase?: string;
- titleSuffix?:
- | string
- | React.FC<{
- locale: string;
- config: DocsThemeConfig;
- title: string;
- meta: Record
;
- }>;
- nextLinks?: boolean;
- prevLinks?: boolean;
- search?: boolean;
- darkMode?: boolean;
- defaultMenuCollapsed?: boolean;
- font?: boolean;
- footer?: boolean;
- footerText?: string;
- footerEditLink?: string;
- feedbackLink?: string;
- feedbackLabels?: string;
- head?:
- | React.ReactNode
- | React.FC<{
- locale: string;
- config: DocsThemeConfig;
- title: string;
- meta: Record;
- }>;
- logo?: React.ReactNode;
- banner?: React.ReactNode;
- direction?: string;
- i18n?: { locale: string; text: string; direction: string }[];
- customSearch?: boolean;
- searchPlaceholder?: string | ((props: { locale?: string }) => string);
- projectLink?: string;
- github?: string;
- projectLinkIcon?: React.FC<{ locale: string }>;
- projectChatLink?: string;
- enterpriseLink?: string;
- projectChatLinkIcon?: React.FC<{ locale: string }>;
- floatTOC?: boolean;
- unstable_faviconGlyph?: string;
- unstable_flexsearch?: boolean;
- unstable_searchResultEmpty?:
- | React.ReactNode
- | React.FC<{
- locale: string;
- config: DocsThemeConfig;
- title: string;
- meta: Record;
- }>;
-}
diff --git a/docs/nextra-theme-docs/utils/flatten.js b/docs/nextra-theme-docs/utils/flatten.js
deleted file mode 100644
index c4fc41faea9f2..0000000000000
--- a/docs/nextra-theme-docs/utils/flatten.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default function flatten(list) {
- return list.reduce((flat, toFlatten) => {
- return flat.concat(
- toFlatten.children ? flatten(toFlatten.children) : toFlatten
- )
- }, [])
-}
diff --git a/docs/nextra-theme-docs/utils/get-fs-route.js b/docs/nextra-theme-docs/utils/get-fs-route.js
deleted file mode 100644
index 333b542643d8a..0000000000000
--- a/docs/nextra-theme-docs/utils/get-fs-route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export const getFSRoute = (asPath, locale) => {
- if (!locale) return asPath.replace(new RegExp('/index(/|$)'), '$1')
-
- return asPath
- .replace(new RegExp(`\.${locale}(\/|$)`), '$1')
- .replace(new RegExp('/index(/|$)'), '$1')
-}
diff --git a/docs/nextra-theme-docs/utils/get-heading-text.ts b/docs/nextra-theme-docs/utils/get-heading-text.ts
deleted file mode 100644
index 7e81628ea545b..0000000000000
--- a/docs/nextra-theme-docs/utils/get-heading-text.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Heading } from "nextra";
-
-export default function getHeadingText(heading: Heading) {
- return heading.value || "";
-}
diff --git a/docs/nextra-theme-docs/utils/menu-context.js b/docs/nextra-theme-docs/utils/menu-context.js
deleted file mode 100644
index 8988d176b4d9b..0000000000000
--- a/docs/nextra-theme-docs/utils/menu-context.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { useContext, createContext } from 'react'
-
-export const MenuContext = createContext(false)
-export default function useMenuContext() {
- return useContext(MenuContext)
-}
diff --git a/docs/nextra-theme-docs/utils/normalize-pages.js b/docs/nextra-theme-docs/utils/normalize-pages.js
deleted file mode 100644
index 06899fe072abd..0000000000000
--- a/docs/nextra-theme-docs/utils/normalize-pages.js
+++ /dev/null
@@ -1,224 +0,0 @@
-import getTitle from 'title'
-
-function getMetaTitle(meta) {
- if (typeof meta === 'string') return meta
- if (typeof meta === 'object') return meta.title
- return ''
-}
-
-function getMetaItemType(meta) {
- if (typeof meta === 'object') return meta.type
- return 'docs'
-}
-
-function getMetaHidden(meta) {
- if (typeof meta === 'object') return meta.hidden || false
- return false
-}
-
-export default function normalizePages({
- list,
- locale,
- defaultLocale,
- route,
- docsRoot = ''
-}) {
- let meta
- for (let item of list) {
- if (item.name === 'meta.json') {
- if (locale === item.locale) {
- meta = item.meta
- break
- }
- // fallback
- if (!meta) {
- meta = item.meta
- }
- }
- }
- if (!meta) {
- meta = {}
- }
-
- const metaKeys = Object.keys(meta)
- const hasLocale = new Map()
- if (locale) {
- list.forEach(a =>
- a.locale === locale ? hasLocale.set(a.name, true) : null
- )
- }
-
- // All directories
- const directories = []
- const flatDirectories = []
-
- // Docs directories
- const docsDirectories = []
- const flatDocsDirectories = []
-
- // Page directories
- const pageDirectories = []
- const flatPageDirectories = []
-
- let activeType
- let activeIndex
-
- list
- .filter(
- a =>
- // not meta
- a.name !== 'meta.json' &&
- // not hidden routes
- !a.name.startsWith('_') &&
- // locale matches, or fallback to default locale
- (a.locale === locale ||
- ((a.locale === defaultLocale || !a.locale) && !hasLocale.get(a.name)))
- )
- .sort((a, b) => {
- const indexA = metaKeys.indexOf(a.name)
- const indexB = metaKeys.indexOf(b.name)
- if (indexA === -1 && indexB === -1) return a.name < b.name ? -1 : 1
- if (indexA === -1) return 1
- if (indexB === -1) return -1
- return indexA - indexB
- })
- .forEach(a => {
- const title = getMetaTitle(meta[a.name]) || getTitle(a.name)
- const type = getMetaItemType(meta[a.name]) || 'docs'
- const hidden = getMetaHidden(meta[a.name])
-
- // If the doc is under the active page root.
- const isCurrentDocsTree = type === 'docs' && route.startsWith(docsRoot)
-
- if (a.route === route) {
- activeType = type
- switch (type) {
- case 'nav':
- activeIndex = flatPageDirectories.length
- break
- case 'docs':
- default:
- if (isCurrentDocsTree) {
- activeIndex = flatDocsDirectories.length
- }
- }
- }
-
- const normalizedChildren = a.children
- ? normalizePages({
- list: a.children,
- locale,
- defaultLocale,
- route,
- docsRoot: type === 'nav' ? a.route : docsRoot
- })
- : undefined
-
- if (normalizedChildren) {
- if (
- normalizedChildren.activeIndex !== undefined &&
- normalizedChildren.activeType !== undefined
- ) {
- activeType = normalizedChildren.activeType
- switch (activeType) {
- case 'nav':
- activeIndex =
- flatPageDirectories.length + normalizedChildren.activeIndex
- break
- case 'docs':
- activeIndex =
- flatDocsDirectories.length + normalizedChildren.activeIndex
- break
- }
- }
- }
-
- const item = {
- ...a,
- title,
- type,
- children: normalizedChildren ? [] : undefined
- }
- const docsItem = {
- ...a,
- title,
- type,
- children: normalizedChildren ? [] : undefined
- }
- const pageItem = {
- ...a,
- title,
- type,
- hidden,
- children: normalizedChildren ? [] : undefined
- }
-
- if (normalizedChildren) {
- switch (type) {
- case 'nav':
- pageItem.children.push(...normalizedChildren.pageDirectories)
- docsDirectories.push(...normalizedChildren.docsDirectories)
-
- // If it's a page with non-page children, we inject itself as a page too.
- if (
- !normalizedChildren.flatPageDirectories.length &&
- normalizedChildren.flatDirectories.length
- ) {
- pageItem.firstChildRoute =
- normalizedChildren.flatDirectories[0].route
- flatPageDirectories.push(pageItem)
- }
-
- break
- case 'docs':
- default:
- if (isCurrentDocsTree) {
- docsItem.children.push(...normalizedChildren.docsDirectories)
- pageDirectories.push(...normalizedChildren.pageDirectories)
- }
- }
-
- flatDirectories.push(...normalizedChildren.flatDirectories)
- flatPageDirectories.push(...normalizedChildren.flatPageDirectories)
-
- flatDocsDirectories.push(...normalizedChildren.flatDocsDirectories)
-
- item.children.push(...normalizedChildren.directories)
- } else {
- flatDirectories.push(item)
- switch (type) {
- case 'nav':
- flatPageDirectories.push(pageItem)
- break
- case 'docs':
- default:
- if (isCurrentDocsTree) {
- flatDocsDirectories.push(docsItem)
- }
- }
- }
-
- directories.push(item)
- switch (type) {
- case 'nav':
- pageDirectories.push(pageItem)
- break
- case 'docs':
- default:
- if (isCurrentDocsTree) {
- docsDirectories.push(docsItem)
- }
- }
- })
-
- return {
- activeType,
- activeIndex,
- directories,
- flatDirectories,
- docsDirectories,
- flatDocsDirectories,
- pageDirectories,
- flatPageDirectories
- }
-}
diff --git a/docs/nextra-theme-docs/utils/render-component.js b/docs/nextra-theme-docs/utils/render-component.js
deleted file mode 100644
index 495e2aaa1ea0b..0000000000000
--- a/docs/nextra-theme-docs/utils/render-component.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import React from "react";
-
-const renderComponent = (ComponentOrNode, props, functionOnly) => {
- if (!ComponentOrNode) return null;
- if (typeof ComponentOrNode === "function") {
- if (functionOnly) return ComponentOrNode(props);
- return ;
- }
- return ComponentOrNode;
-};
-
-export default renderComponent;
diff --git a/docs/nextra-theme-docs/utils/sort-date.js b/docs/nextra-theme-docs/utils/sort-date.js
deleted file mode 100644
index 25799b3601fbd..0000000000000
--- a/docs/nextra-theme-docs/utils/sort-date.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default function sortDate(a, b) {
- if (!a.frontMatter || !a.frontMatter.date) return -1;
- if (!b.frontMatter || !b.frontMatter.date) return -1;
- return new Date(a.frontMatter.date) > new Date(b.frontMatter.date) ? -1 : 1;
-}
diff --git a/docs/nextra-theme-docs/utils/traverse.js b/docs/nextra-theme-docs/utils/traverse.js
deleted file mode 100644
index d43214e94b45c..0000000000000
--- a/docs/nextra-theme-docs/utils/traverse.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// BFS traverse the page map tree
-export default function traverse(pageMap, matcher) {
- for (let i = 0; i < pageMap.length; i++) {
- if (matcher(pageMap[i])) {
- return pageMap[i];
- }
- }
- for (let i = 0; i < pageMap.length; i++) {
- if (pageMap[i].children) {
- const matched = traverse(pageMap[i].children, matcher);
- if (matched) {
- return matched;
- }
- }
- }
- return null;
-}
diff --git a/docs/nextra-theme-docs/utils/use-mounted.js b/docs/nextra-theme-docs/utils/use-mounted.js
deleted file mode 100644
index c42d93f33a408..0000000000000
--- a/docs/nextra-theme-docs/utils/use-mounted.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { useEffect, useState } from "react";
-
-export default function useMounted() {
- const [mounted, setMounted] = useState(false);
-
- useEffect(() => {
- setMounted(true);
- }, []);
-
- return mounted;
-}
diff --git a/docs/nextra-theme-docs/wasm-loader.js b/docs/nextra-theme-docs/wasm-loader.js
deleted file mode 100644
index b65fea4e7a369..0000000000000
--- a/docs/nextra-theme-docs/wasm-loader.js
+++ /dev/null
@@ -1,254 +0,0 @@
-
-let wasm;
-
-const heap = new Array(32).fill(undefined);
-
-heap.push(undefined, null, true, false);
-
-function getObject(idx) { return heap[idx]; }
-
-let heap_next = heap.length;
-
-function dropObject(idx) {
- if (idx < 36) return;
- heap[idx] = heap_next;
- heap_next = idx;
-}
-
-function takeObject(idx) {
- const ret = getObject(idx);
- dropObject(idx);
- return ret;
-}
-
-let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
-
-cachedTextDecoder.decode();
-
-let cachegetUint8Memory0 = null;
-function getUint8Memory0() {
- if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
- cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
- }
- return cachegetUint8Memory0;
-}
-
-function getStringFromWasm0(ptr, len) {
- return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
-}
-
-let WASM_VECTOR_LEN = 0;
-
-let cachedTextEncoder = new TextEncoder('utf-8');
-
-const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
- ? function (arg, view) {
- return cachedTextEncoder.encodeInto(arg, view);
-}
- : function (arg, view) {
- const buf = cachedTextEncoder.encode(arg);
- view.set(buf);
- return {
- read: arg.length,
- written: buf.length
- };
-});
-
-function passStringToWasm0(arg, malloc, realloc) {
-
- if (typeof(arg) !== 'string') throw new Error('expected a string argument');
-
- if (realloc === undefined) {
- const buf = cachedTextEncoder.encode(arg);
- const ptr = malloc(buf.length);
- getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
- WASM_VECTOR_LEN = buf.length;
- return ptr;
- }
-
- let len = arg.length;
- let ptr = malloc(len);
-
- const mem = getUint8Memory0();
-
- let offset = 0;
-
- for (; offset < len; offset++) {
- const code = arg.charCodeAt(offset);
- if (code > 0x7F) break;
- mem[ptr + offset] = code;
- }
-
- if (offset !== len) {
- if (offset !== 0) {
- arg = arg.slice(offset);
- }
- ptr = realloc(ptr, len, len = offset + arg.length * 3);
- const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
- const ret = encodeString(arg, view);
- if (ret.read !== arg.length) throw new Error('failed to pass whole string');
- offset += ret.written;
- }
-
- WASM_VECTOR_LEN = offset;
- return ptr;
-}
-
-function passArray8ToWasm0(arg, malloc) {
- const ptr = malloc(arg.length * 1);
- getUint8Memory0().set(arg, ptr / 1);
- WASM_VECTOR_LEN = arg.length;
- return ptr;
-}
-
-let cachegetInt32Memory0 = null;
-function getInt32Memory0() {
- if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
- cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
- }
- return cachegetInt32Memory0;
-}
-/**
-* @param {string} name
-* @param {Uint8Array} data
-* @returns {string}
-*/
-export function wasm_register_index(name, data) {
- try {
- const retptr = wasm.__wbindgen_export_0.value - 16;
- wasm.__wbindgen_export_0.value = retptr;
- var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- var ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc);
- var len1 = WASM_VECTOR_LEN;
- wasm.wasm_register_index(retptr, ptr0, len0, ptr1, len1);
- var r0 = getInt32Memory0()[retptr / 4 + 0];
- var r1 = getInt32Memory0()[retptr / 4 + 1];
- return getStringFromWasm0(r0, r1);
- } finally {
- wasm.__wbindgen_export_0.value += 16;
- wasm.__wbindgen_free(r0, r1);
- }
-}
-
-/**
-* @param {string} name
-* @param {string} query
-* @returns {string}
-*/
-export function wasm_search(name, query) {
- try {
- const retptr = wasm.__wbindgen_export_0.value - 16;
- wasm.__wbindgen_export_0.value = retptr;
- var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- var ptr1 = passStringToWasm0(query, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len1 = WASM_VECTOR_LEN;
- wasm.wasm_search(retptr, ptr0, len0, ptr1, len1);
- var r0 = getInt32Memory0()[retptr / 4 + 0];
- var r1 = getInt32Memory0()[retptr / 4 + 1];
- return getStringFromWasm0(r0, r1);
- } finally {
- wasm.__wbindgen_export_0.value += 16;
- wasm.__wbindgen_free(r0, r1);
- }
-}
-
-function logError(f) {
- return function () {
- try {
- return f.apply(this, arguments);
-
- } catch (e) {
- let error = (function () {
- try {
- return e instanceof Error ? `${e.message}\n\nStack:\n${e.stack}` : e.toString();
- } catch(_) {
- return "";
- }
- }());
- console.error("wasm-bindgen: imported JS function that was not marked as `catch` threw an error:", error);
- throw e;
- }
- };
-}
-
-function addHeapObject(obj) {
- if (heap_next === heap.length) heap.push(heap.length + 1);
- const idx = heap_next;
- heap_next = heap[idx];
-
- if (typeof(heap_next) !== 'number') throw new Error('corrupt heap');
-
- heap[idx] = obj;
- return idx;
-}
-
-async function load(module, imports) {
- if (typeof Response === 'function' && module instanceof Response) {
-
- if (typeof WebAssembly.instantiateStreaming === 'function') {
- try {
- return await WebAssembly.instantiateStreaming(module, imports);
-
- } catch (e) {
- if (module.headers.get('Content-Type') != 'application/wasm') {
- console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
-
- } else {
- throw e;
- }
- }
- }
-
- const bytes = await module.arrayBuffer();
- return await WebAssembly.instantiate(bytes, imports);
-
- } else {
-
- const instance = await WebAssembly.instantiate(module, imports);
-
- if (instance instanceof WebAssembly.Instance) {
- return { instance, module };
-
- } else {
- return instance;
- }
- }
-}
-
-export async function init(input) {
- const imports = {};
- imports.wbg = {};
- imports.wbg.__wbg_error_4bb6c2a97407129a = logError(function(arg0, arg1) {
- try {
- console.error(getStringFromWasm0(arg0, arg1));
- } finally {
- wasm.__wbindgen_free(arg0, arg1);
- }
- });
- imports.wbg.__wbg_new_59cb74e423758ede = logError(function() {
- var ret = new Error();
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_stack_558ba5917b466edd = logError(function(arg0, arg1) {
- var ret = getObject(arg1).stack;
- var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- });
- imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
- takeObject(arg0);
- };
- imports.wbg.__wbindgen_throw = function(arg0, arg1) {
- throw new Error(getStringFromWasm0(arg0, arg1));
- };
-
- const { instance, module } = await load(await fetch(input), imports);
-
- wasm = instance.exports;
- init.__wbindgen_wasm_module = module;
-
- return wasm;
-}
diff --git a/docs/package.json b/docs/package.json
index 4c5a719d187bb..00328a0878f41 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -13,43 +13,23 @@
"author": "Jared Palmer",
"license": "MPL-2.0",
"dependencies": {
- "@headlessui/react": "1.4.3",
"@heroicons/react": "1.0.5",
- "@mdx-js/react": "2.0.0-rc.2",
- "@reach/skip-nav": "0.16.0",
- "@react-aria/button": "3.3.1",
"@react-aria/focus": "3.2.2",
- "@react-aria/i18n": "3.3.0",
- "@react-aria/interactions": "3.3.3",
"@react-aria/radio": "3.1.8",
"@react-aria/ssr": "3.1.2",
- "@react-aria/utils": "3.6.0",
"@react-stately/radio": "3.3.4",
"@react-types/radio": "3.1.4",
"axios": "0.24.0",
"classnames": "2.3.1",
"copy-to-clipboard": "3.3.1",
- "date-fns": "2.28.0",
- "flexsearch": "0.7.21",
- "focus-visible": "5.1.0",
- "github-slugger": "1.4.0",
- "grapheme-splitter": "1.0.4",
- "intersection-observer": "0.10.0",
"js-cookie": "3.0.1",
- "markdown-to-jsx": "6.11.4",
- "match-sorter": "6.3.1",
"next": "12.1.0",
- "next-themes": "0.0.15",
- "nextra": "2.0.0-alpha.26",
- "parse-git-url": "1.0.1",
+ "nextra": "2.0.0-alpha.46",
+ "nextra-theme-docs": "^2.0.0-alpha.46",
"react": "17.0.2",
"react-dom": "17.0.2",
"react-hot-toast": "2.1.1",
- "react-innertext": "1.1.5",
- "react-intersection-observer": "8.26.2",
- "react-keyframes": "1.0.0-canary.3",
- "swr": "1.0.1",
- "title": "3.4.3"
+ "swr": "1.0.1"
},
"devDependencies": {
"@babel/core": "7.16.7",
diff --git a/docs/pages/_app.js b/docs/pages/_app.js
index 98b229ed44232..7e1df5581534c 100644
--- a/docs/pages/_app.js
+++ b/docs/pages/_app.js
@@ -1,5 +1,6 @@
import "../styles.css";
-import "../nextra-theme-docs/styles.css";
+import "nextra-theme-docs/style.css";
+
import { SSRProvider } from "@react-aria/ssr";
// Shim requestIdleCallback in Safari
@@ -9,7 +10,9 @@ if (typeof window !== "undefined" && !("requestIdleCallback" in window)) {
}
export default function Nextra({ Component, pageProps }) {
- return (
+ const getLayout = Component.getLayout || ((page) => page);
+
+ return getLayout(
<>
diff --git a/docs/pages/blog.mdx b/docs/pages/blog.mdx
new file mode 100644
index 0000000000000..03d2bf6995294
--- /dev/null
+++ b/docs/pages/blog.mdx
@@ -0,0 +1,38 @@
+---
+title: Blog
+description: The latest updates and releases from the Turborepo team at Vercel.
+type: posts
+---
+
+import { getPagesUnderRoute } from "nextra/context";
+import Link from "next/link";
+
+export function BlogIndex({ more = "Read more" }) {
+ return getPagesUnderRoute("/blog").map((page) => {
+ // Alias `` to avoid it being replaced by MDX components.
+ const A = "a";
+ return (
+
+ );
+ });
+}
+
+
+
Blog
+
The latest updates and releases from the Turborepo team at Vercel.
+
+
+
diff --git a/docs/pages/blog/index.mdx b/docs/pages/blog/index.mdx
deleted file mode 100644
index 31864910aa1e9..0000000000000
--- a/docs/pages/blog/index.mdx
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Blog
-description: The latest updates and releases from the Turborepo team at Vercel.
-type: posts
----
diff --git a/docs/pages/blog/joining-vercel.mdx b/docs/pages/blog/joining-vercel.mdx
index 4bc6045c809de..380478088b0c3 100644
--- a/docs/pages/blog/joining-vercel.mdx
+++ b/docs/pages/blog/joining-vercel.mdx
@@ -3,11 +3,14 @@ title: Turborepo is joining Vercel
date: 2021/12/09
description: Turborepo is joining Vercel to make the web even faster.
tag: web development
-authors:
- - jaredpalmer
-type: post
---
+# Turborepo is joining Vercel
+
+import { Authors } from '../../components/Authors'
+
+
+
Turborepo has been acquired by Vercel and the Turborepo CLI is now open-source! Also, Turborepo now provides zero-config remote caching through [Vercel](https://vercel.com/?utm_source=turborepo.org&utm_medium=referral&utm_campaign=docs-link)!
[beta.turborepo.com](http://beta.turborepo.com/) and its remote caching service will be shut down on January 15th, 2022 and older versions of the `turbo` CLI will not be installable. Learn more about how to upgrade your CLI and migrate to Vercel [here](https://turborepo.org/docs/upgrading-to-v1).
diff --git a/docs/pages/blog/meta.json b/docs/pages/blog/meta.json
index ae44aad019b1c..f545a023da91c 100644
--- a/docs/pages/blog/meta.json
+++ b/docs/pages/blog/meta.json
@@ -1,8 +1,15 @@
{
- "index": "All Posts",
+ "*": {
+ "//": "Hide all the links from the sidebar or navbar, and disable ToC and Sidebar for these pages.",
+ "hidden": true,
+ "theme": {
+ "toc": false,
+ "sidebar": false
+ }
+ },
+ "turbo-1-1-0": "Turborepo 1.1",
"joining-vercel": "Joining Vercel",
"saml-sso-now-available": "SAML SSO now available",
"you-might-not-need-typescript-project-references": "You might not need TypeScript project references",
- "turbo-0-4-0": "Turborepo 0.4.0",
- "turbo-0-1-0": "Turborepo 0.1.0"
+ "turbo-0-4-0": "Turborepo 0.4.0"
}
diff --git a/docs/pages/blog/saml-sso-now-available.mdx b/docs/pages/blog/saml-sso-now-available.mdx
index c4367a5afb146..d51d752dbba3b 100644
--- a/docs/pages/blog/saml-sso-now-available.mdx
+++ b/docs/pages/blog/saml-sso-now-available.mdx
@@ -3,12 +3,15 @@ title: SAML SSO is now available
date: 2021/08/03
description: SAML Single Sign-on (SSO) is now available to Enterprise customers thanks to our friends over at WorkOS.
tag: web development
-authors:
- - jaredpalmer
ogImage: /images/blog/og-saml.png
-type: post
---
+# SAML SSO is now available
+
+import { Authors } from '../../components/Authors'
+
+
+
Thanks to our friends over at [WorkOS](https://workos.com), in addition to GitHub, Gitlab, and Passwordless auth, Turborepo.com now supports Single Sign-on (SSO) from the following SAML providers for enterprise customers:
- AD FS SAML
diff --git a/docs/pages/blog/turbo-0-4-0.mdx b/docs/pages/blog/turbo-0-4-0.mdx
index 5a81ddddabc1c..182ec376b8873 100644
--- a/docs/pages/blog/turbo-0-4-0.mdx
+++ b/docs/pages/blog/turbo-0-4-0.mdx
@@ -3,11 +3,14 @@ title: Turborepo 0.4.0
date: 2021/04/02
description: Turborepo 0.4.0 introduces 10x faster hashing, pruned workspaces with sparse installs, a new pipeline configuration API, and improved cache control.
tag: web development
-authors:
- - jaredpalmer
-type: post
---
+# Turborepo 0.4.0
+
+import { Authors } from '../../components/Authors'
+
+
+
I'm excited to announce the release of Turborepo v0.4.0!
- **10x faster**: `turbo` has been rewritten from the ground up in Go to make it even more blazing fast
diff --git a/docs/pages/blog/turbo-1-1-0.mdx b/docs/pages/blog/turbo-1-1-0.mdx
index 7e8aceb38e74d..dc771bc5dde3f 100644
--- a/docs/pages/blog/turbo-1-1-0.mdx
+++ b/docs/pages/blog/turbo-1-1-0.mdx
@@ -4,14 +4,14 @@ date: 2022/01/31
description: Turborepo 1.1 introduces automatic migrations, turbo.json configuration, environment variable dependencies, partial Yarn v2 support, and more!
tag: web development
ogImage: /images/blog/turbo-1-1-0/twitter-card.png
-type: post
-authors:
- - jaredpalmer
- - becca__z
- - gaspargarcia_
- - gsoltis
---
+# Turborepo 1.1
+
+import { Authors } from '../../components/Authors'
+
+
+
Since releasing Turborepo v1.0 in mid-December, we've seen incredible adoption:
- 5.5k+ GitHub Stars
diff --git a/docs/pages/blog/you-might-not-need-typescript-project-references.mdx b/docs/pages/blog/you-might-not-need-typescript-project-references.mdx
index acb4f62e30c94..4fdf4fb2e4251 100644
--- a/docs/pages/blog/you-might-not-need-typescript-project-references.mdx
+++ b/docs/pages/blog/you-might-not-need-typescript-project-references.mdx
@@ -4,11 +4,14 @@ date: 2021/04/23
description: As it turns out, you might not even references or even an interim TypeScript build step with a pattern I am about to show you, which I dub "internal packages."
tag: web development
ogImage: /images/blog/og-project-references.png
-type: post
-authors:
- - jaredpalmer
---
+# You might not need TypeScript project references
+
+import { Authors } from '../../components/Authors'
+
+
+
If you've worked in a larger TypeScript codebase or monorepo, you are likely familiar with [project references](https://www.typescriptlang.org/docs/handbook/project-references.html "TypeScript Project References Documentation"). They are indeed fairly powerful.
When you reference a project in your `tsconfig.json`, new things happen:
diff --git a/docs/pages/docs/acknowledgments.mdx b/docs/pages/docs/acknowledgements.mdx
similarity index 100%
rename from docs/pages/docs/acknowledgments.mdx
rename to docs/pages/docs/acknowledgements.mdx
diff --git a/docs/pages/docs/changelog.mdx b/docs/pages/docs/changelog.mdx
deleted file mode 100644
index 4d0ee751fa06c..0000000000000
--- a/docs/pages/docs/changelog.mdx
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Changelog
-description: Hear about new feature additions and changes to Turborepo.
----
-
-This page is not used. It is just redirected to https://github.com/vercel/turborepo/releases
diff --git a/docs/pages/docs/meta.json b/docs/pages/docs/meta.json
index 384be25376438..534e1bc6a0366 100644
--- a/docs/pages/docs/meta.json
+++ b/docs/pages/docs/meta.json
@@ -4,7 +4,11 @@
"features": "Features",
"guides": "Guides",
"reference": "API Reference",
- "changelog": "Changelog",
+ "changelog": {
+ "title": "Changelog",
+ "href": "https://github.com/vercel/turborepo/releases",
+ "newWindow": true
+ },
"upgrading-to-v1": "Upgrading to v1",
"troubleshooting": "Troubleshooting",
"glossary": "Glossary",
diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx
index a4360cd822e5e..6f1419d591b7f 100644
--- a/docs/pages/index.mdx
+++ b/docs/pages/index.mdx
@@ -1,6 +1,5 @@
---
title: Turborepo
-headeronly: true
---
import Home from "../components/pages/home";
diff --git a/docs/pages/meta.json b/docs/pages/meta.json
index 7b2898025b5d4..baf52840673ec 100644
--- a/docs/pages/meta.json
+++ b/docs/pages/meta.json
@@ -1,20 +1,23 @@
{
+ "*": {
+ "type": "page"
+ },
"index": {
"title": "Home",
- "type": "nav",
- "hidden": true
+ "hidden": true,
+ "theme": {
+ "layout": "raw"
+ }
},
- "docs": {
- "title": "Docs",
- "type": "nav"
- },
- "blog": {
- "title": "Blog",
- "type": "nav"
+ "docs": "Docs",
+ "blog": "Blog",
+ "enterprise": {
+ "title": "Enterprise",
+ "href": "https://vercel.com/contact/turborepo?utm_source=turborepo.org&utm_medium=referral&utm_campaign=header-enterpriseLink",
+ "newWindow": true
},
"confirm": {
"title": "Confirm",
- "type": "nav",
"hidden": true
},
"terms": {
@@ -22,7 +25,7 @@
"hidden": true
},
"privacy": {
- "title": "Terms of Use",
+ "title": "Privacy Policy",
"hidden": true
}
}
diff --git a/docs/styles.css b/docs/styles.css
index d102084aed48b..c4f5029f469d0 100644
--- a/docs/styles.css
+++ b/docs/styles.css
@@ -1,49 +1,25 @@
@tailwind utilities;
-.docs-search > span {
- width: 100%;
-}
-
-.algolia-autocomplete .algolia-docsearch-suggestion--category-header span {
- display: inline-block;
-}
-.algolia-autocomplete .ds-dropdown-menu {
- width: 500px;
- min-width: 300px;
- max-width: calc(100vw - 50px);
-}
-
-[data-reach-skip-link] {
- @apply sr-only;
-}
-
-[data-reach-skip-link]:focus {
- @apply fixed top-0 z-50 px-6 py-2 mt-2 ml-6 text-lg bg-white outline-none not-sr-only focus:ring;
-}
-
code {
@apply text-sm;
}
-.prism-code.language-diff .inserted.prefix,
-.prism-code.language-diff .deleted.prefix {
- user-select: none;
- @apply opacity-30;
-}
-
-.prism-code.language-diff .inserted.line {
- @apply text-green-600;
-}
-.prism-code.language-diff .deleted.line {
- @apply text-red-600;
+.dark .invert-on-dark {
+ filter: invert(1) brightness(1.8);
}
-/* Hack to make the TOC links look better by adjusting kerning */
-article > main + div a.font-semibold {
- font-weight: 500;
- letter-spacing: -0.01rem;
+body {
+ background: linear-gradient(
+ to bottom,
+ rgba(255, 255, 255, 0) 0%,
+ rgba(255, 255, 255, 1) 300px
+ ),
+ fixed 0 0 / 20px 20px radial-gradient(#d1d1d1 1px, transparent 0),
+ fixed 10px 10px / 20px 20px radial-gradient(#d1d1d1 1px, transparent 0);
}
-.dark .invert-on-dark {
- filter: invert(1) brightness(1.8);
+.dark body {
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, #111 300px),
+ fixed 0 0 / 20px 20px radial-gradient(#313131 1px, transparent 0),
+ fixed 10px 10px / 20px 20px radial-gradient(#313131 1px, transparent 0);
}
diff --git a/docs/theme.config.js b/docs/theme.config.js
index 8fb9a6ad309f8..fca44a22149e6 100644
--- a/docs/theme.config.js
+++ b/docs/theme.config.js
@@ -1,5 +1,6 @@
import { useRouter } from "next/router";
-import { Avatar } from "./components/Avatar";
+import { Footer } from "./components/Footer";
+
const Logo = ({ height, ...props }) => (
);
-const Vercel = ({ height = 20 }) => (
-
-);
-
-const team = {
- jaredpalmer: {
- name: "Jared Palmer",
- twitterUsername: "jaredpalmer",
- picture: "/images/people/jaredpalmer_headshot.jpeg",
- },
- gaspargarcia_: {
- name: "Gaspar Garcia",
- twitterUsername: "gaspargarcia_",
- picture: "/images/people/gaspargarcia_.jpeg",
- },
- becca__z: {
- name: "Becca Z.",
- twitterUsername: "becca__z",
- picture: "/images/people/becca__z.jpeg",
- },
- gsoltis: {
- name: "Greg Soltis",
- twitterUsername: "gsoltis",
- picture: "/images/people/gsoltis.jpeg",
- },
-};
-
const theme = {
github: "https://github.com/vercel/turborepo",
docsRepositoryBase:
"https://github.com/vercel/turborepo/blob/main/docs/pages",
titleSuffix: " | Turborepo",
search: true,
- unstable_stork: false,
+ unstable_flexsearch: true,
unstable_staticImage: true,
floatTOC: true,
font: false,
- enterpriseLink:
- "https://vercel.com/contact/turborepo?utm_source=turborepo.org&utm_medium=referral&utm_campaign=header-enterpriseLink", // @TODO
projectChatLink: "https://turborepo.org/discord",
feedbackLink: "Question? Give us feedback →",
- authors: function Authors({ authors }) {
- return (
-
- {authors.map((username) =>
- !!team[username] ? (
-
- ) : (
- console.warning("no author found for", username) || null
- )
- )}
-
- );
- },
banner: function Banner() {
+ // TODO
return (
);
},
- head: function Head({ title, meta, router }) {
+ head: function Head({ title, meta }) {
+ const router = useRouter();
return (
<>
@@ -248,23 +204,14 @@ const theme = {
>
);
},
- footerEditLink: ({ locale }) => {
+ footerEditLink: () => {
return "Edit this page on GitHub";
},
- footerText: ({ locale }) => {
- return (
-
- Powered by
-
-
-
-
- );
+ footerText: () => {
+ return
;
+ },
+ nextThemes: {
+ defaultTheme: "dark",
},
};
export default theme;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a6d89100c923b..f997ec3b12125 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -61,17 +61,10 @@ importers:
docs:
specifiers:
'@babel/core': 7.16.7
- '@headlessui/react': 1.4.3
'@heroicons/react': 1.0.5
- '@mdx-js/react': 2.0.0-rc.2
- '@reach/skip-nav': 0.16.0
- '@react-aria/button': 3.3.1
'@react-aria/focus': 3.2.2
- '@react-aria/i18n': 3.3.0
- '@react-aria/interactions': 3.3.3
'@react-aria/radio': 3.1.8
'@react-aria/ssr': 3.1.2
- '@react-aria/utils': 3.6.0
'@react-stately/radio': 3.3.4
'@react-types/radio': 3.1.4
'@types/react': 17.0.37
@@ -80,73 +73,40 @@ importers:
classnames: 2.3.1
copy-to-clipboard: 3.3.1
csstype: 2.6.2
- date-fns: 2.28.0
eslint: 8.10.0
eslint-config-next: 12.1.0
eslint-config-prettier: 8.4.0
- flexsearch: 0.7.21
- focus-visible: 5.1.0
- github-slugger: 1.4.0
- grapheme-splitter: 1.0.4
- intersection-observer: 0.10.0
js-cookie: 3.0.1
- markdown-to-jsx: 6.11.4
- match-sorter: 6.3.1
next: 12.1.0
- next-themes: 0.0.15
- nextra: 2.0.0-alpha.26
- parse-git-url: 1.0.1
+ nextra: 2.0.0-alpha.46
+ nextra-theme-docs: ^2.0.0-alpha.46
postcss: 8.3.5
react: 17.0.2
react-dom: 17.0.2
react-hot-toast: 2.1.1
- react-innertext: 1.1.5
- react-intersection-observer: 8.26.2
- react-keyframes: 1.0.0-canary.3
swr: 1.0.1
tailwindcss: 3.0.15
- title: 3.4.3
ts-json-schema-generator: 0.98.0-next.0
typescript: 4.5.5
webpack: 5.65.0
dependencies:
- '@headlessui/react': 1.4.3_react-dom@17.0.2+react@17.0.2
'@heroicons/react': 1.0.5_react@17.0.2
- '@mdx-js/react': 2.0.0-rc.2_react@17.0.2
- '@reach/skip-nav': 0.16.0_react-dom@17.0.2+react@17.0.2
- '@react-aria/button': 3.3.1_react@17.0.2
'@react-aria/focus': 3.2.2_react@17.0.2
- '@react-aria/i18n': 3.3.0_react@17.0.2
- '@react-aria/interactions': 3.3.3_react@17.0.2
'@react-aria/radio': 3.1.8_react@17.0.2
'@react-aria/ssr': 3.1.2_react@17.0.2
- '@react-aria/utils': 3.6.0_react@17.0.2
'@react-stately/radio': 3.3.4_react@17.0.2
'@react-types/radio': 3.1.4_react@17.0.2
axios: 0.24.0
classnames: 2.3.1
copy-to-clipboard: 3.3.1
- date-fns: 2.28.0
- flexsearch: 0.7.21
- focus-visible: 5.1.0
- github-slugger: 1.4.0
- grapheme-splitter: 1.0.4
- intersection-observer: 0.10.0
js-cookie: 3.0.1
- markdown-to-jsx: 6.11.4_react@17.0.2
- match-sorter: 6.3.1
next: 12.1.0_dfc0b93d99fba272c9564d3139a2581a
- next-themes: 0.0.15_caa633a00319350dbda42996613fe26c
- nextra: 2.0.0-alpha.26_react@17.0.2
- parse-git-url: 1.0.1
+ nextra: 2.0.0-alpha.46_react@17.0.2
+ nextra-theme-docs: 2.0.0-alpha.46_caa633a00319350dbda42996613fe26c
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
react-hot-toast: 2.1.1_83aecc314a46186883faa129c0399856
- react-innertext: 1.1.5_cfedea9b3ed0faf0dded75c187406c5e
- react-intersection-observer: 8.26.2_react@17.0.2
- react-keyframes: 1.0.0-canary.3
swr: 1.0.1_react@17.0.2
- title: 3.4.3
devDependencies:
'@babel/core': 7.16.7
'@types/react': 17.0.37
@@ -722,8 +682,8 @@ packages:
tslib: 2.3.1
dev: false
- /@headlessui/react/1.4.3_react-dom@17.0.2+react@17.0.2:
- resolution: {integrity: sha512-n2IQkaaw0aAAlQS5MEXsM4uRK+w18CrM72EqnGRl/UBOQeQajad8oiKXR9Nk15jOzTFQjpxzrZMf1NxHidFBiw==}
+ /@headlessui/react/1.5.0_react-dom@17.0.2+react@17.0.2:
+ resolution: {integrity: sha512-aaRnYxBb3MU2FNJf3Ut9RMTUqqU3as0aI1lQhgo2n9Fa67wRu14iOGqx93xB+uMNVfNwZ5B3y/Ndm7qZGuFeMQ==}
engines: {node: '>=10'}
peerDependencies:
react: ^16 || ^17 || ^18
@@ -773,13 +733,6 @@ packages:
'@babel/runtime': 7.17.2
dev: false
- /@internationalized/message/3.0.0-alpha.0:
- resolution: {integrity: sha512-NT2eiVq5f5z7Yi9Hmchb8GAGYjEpYbYcD4u/Oxo5XG9XFbrnz7zNvrJJlzuQ+2jPozabq6pFKurqaFmM49DYUg==}
- dependencies:
- '@babel/runtime': 7.17.2
- intl-messageformat: 2.2.0
- dev: false
-
/@internationalized/message/3.0.5:
resolution: {integrity: sha512-DMQ9nQHr9XlP8Z0gCCaQ1j8ReuVGW5YrV+ZEMQLoGlHAg+mVILlZPIAgwB/5l3hi6xUIGQovMqpnGT3AypX1ig==}
dependencies:
@@ -787,12 +740,6 @@ packages:
intl-messageformat: 9.11.4
dev: false
- /@internationalized/number/3.0.0-alpha.0:
- resolution: {integrity: sha512-8aOD2I3HmEscIZO/cm1jkcrYMSmRPhoW9G1OsuQb4Ge/Y9HsJVGB9otTylUEXJUmoXi/eD8Mr1gx3+0FLCM4eA==}
- dependencies:
- '@babel/runtime': 7.17.2
- dev: false
-
/@internationalized/number/3.0.5:
resolution: {integrity: sha512-NDplomyqMnwEWaD/53yYNTbksLaEGc1tvVLEy/RnLKsJW2aMrDCMNjX84FnPU9i6+CoiTKmv89J9ihKihxuVUg==}
dependencies:
@@ -1057,8 +1004,8 @@ packages:
- supports-color
dev: false
- /@mdx-js/react/2.0.0-rc.2_react@17.0.2:
- resolution: {integrity: sha512-WHksgPnvKyDDNq0RQvTnKboe+wxUcq5A7xD12Ob+ASfUR3NRFo/h//k8fjv3t8dgzWX5M0UeU5jsccjykosDEQ==}
+ /@mdx-js/react/2.0.0_react@17.0.2:
+ resolution: {integrity: sha512-icpMd43xqORnHSVRwALZv3ELN3IS7VS3BL+FyH2FFergQPSQ21FX0lN+OMIs0X+3dGY1L0DLhBCkMfPO+yDG7Q==}
peerDependencies:
react: '>=16'
dependencies:
@@ -1218,21 +1165,6 @@ packages:
tslib: 2.3.1
dev: false
- /@react-aria/button/3.3.1_react@17.0.2:
- resolution: {integrity: sha512-LXNuo0L79AhYqnxV+Y3J3xt7hPcmCVCEpZaC/dBzovR1MLunrdpk3QAXsRt3tqza1XvoqdvNhNHQm1Z1kyBTUg==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0-rc.1
- dependencies:
- '@babel/runtime': 7.17.2
- '@react-aria/focus': 3.5.2_react@17.0.2
- '@react-aria/i18n': 3.3.6_react@17.0.2
- '@react-aria/interactions': 3.8.1_react@17.0.2
- '@react-aria/utils': 3.11.2_react@17.0.2
- '@react-stately/toggle': 3.2.5_react@17.0.2
- '@react-types/button': 3.4.3_react@17.0.2
- react: 17.0.2
- dev: false
-
/@react-aria/focus/3.2.2_react@17.0.2:
resolution: {integrity: sha512-/E1KZWjC8sUiLwf5RoJHydPY0e6bT1o9+GRtyexj+GtY77kEZpES4Pcdmd+b5ZhefAhk26AOSHnnMcDMrGxBxg==}
peerDependencies:
@@ -1259,20 +1191,6 @@ packages:
react: 17.0.2
dev: false
- /@react-aria/i18n/3.3.0_react@17.0.2:
- resolution: {integrity: sha512-8KYk0tQiEf9Kd9xdF4cKliP1169WSIryKFnZgnm9dvZl96TyfDK1xJpZQy58XjRdbS/H45CKydFmMcZEElu3BQ==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0-rc.1
- dependencies:
- '@babel/runtime': 7.17.2
- '@internationalized/message': 3.0.0-alpha.0
- '@internationalized/number': 3.0.0-alpha.0
- '@react-aria/ssr': 3.1.2_react@17.0.2
- '@react-aria/utils': 3.11.2_react@17.0.2
- '@react-types/shared': 3.11.1_react@17.0.2
- react: 17.0.2
- dev: false
-
/@react-aria/i18n/3.3.6_react@17.0.2:
resolution: {integrity: sha512-GOogCx5UR3RpkJSceQwwenLctaK7tbDP0DKzmaWQv1ZNUg9nr35w65VMq46WIGz2dIQhqydTagZP1Exci1KhkQ==}
peerDependencies:
@@ -1288,17 +1206,6 @@ packages:
react: 17.0.2
dev: false
- /@react-aria/interactions/3.3.3_react@17.0.2:
- resolution: {integrity: sha512-wq6YwVFMzT7jdpVGqGoqXPCANHl6BvOOL1Lrg3vb+df5pvoCFNWBytqv/yQVpT4PKOSUbxSBdOTubvtZlu0l+g==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0-rc.1
- dependencies:
- '@babel/runtime': 7.17.2
- '@react-aria/utils': 3.11.2_react@17.0.2
- '@react-types/shared': 3.11.1_react@17.0.2
- react: 17.0.2
- dev: false
-
/@react-aria/interactions/3.8.1_react@17.0.2:
resolution: {integrity: sha512-oE6Yo5BTiqInQCTnERMOALwULJy6TbBv+XXEAmifKWBvjbKSb6jN91lhWOruuYZpWAV+eAawHAk/u/KMzwVVEQ==}
peerDependencies:
@@ -1360,19 +1267,6 @@ packages:
react: 17.0.2
dev: false
- /@react-aria/utils/3.6.0_react@17.0.2:
- resolution: {integrity: sha512-DO5F00T5NQ7j3GGWvruV8HrEd3YcN7KfbbvKvNZ3JWHETHNJxIc2xBz4Af6FSQzAjHkOrapd++SNoNLutRSz9Q==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0-rc.1
- dependencies:
- '@babel/runtime': 7.17.2
- '@react-aria/ssr': 3.1.2_react@17.0.2
- '@react-stately/utils': 3.4.1_react@17.0.2
- '@react-types/shared': 3.11.1_react@17.0.2
- clsx: 1.1.1
- react: 17.0.2
- dev: false
-
/@react-stately/radio/3.3.4_react@17.0.2:
resolution: {integrity: sha512-0MgOibZdeXHuvrdgXiNMzr6J+3qD/Jf17uyBT8DGOX732MVp3PA55QhLhexDZu6qxM2XgdTwMBT2vxar5URsZQ==}
peerDependencies:
@@ -1384,18 +1278,6 @@ packages:
react: 17.0.2
dev: false
- /@react-stately/toggle/3.2.5_react@17.0.2:
- resolution: {integrity: sha512-xvruQcjVn/3J+8Y2o8uR7KDbFX8WPB+uMtyURbvuQ7WSWzW48iK0UQgPBaV0gbAKyV/mJCl2QdJ9CoxoQ1CKag==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0-rc.1
- dependencies:
- '@babel/runtime': 7.17.2
- '@react-stately/utils': 3.4.1_react@17.0.2
- '@react-types/checkbox': 3.2.5_react@17.0.2
- '@react-types/shared': 3.11.1_react@17.0.2
- react: 17.0.2
- dev: false
-
/@react-stately/utils/3.4.1_react@17.0.2:
resolution: {integrity: sha512-mjFbKklj/W8KRw1CQSpUJxHd7lhUge4i00NwJTwGxbzmiJgsTWlKKS/1rBf48ey9hUBopXT5x5vG/AxQfWTQug==}
peerDependencies:
@@ -1405,24 +1287,6 @@ packages:
react: 17.0.2
dev: false
- /@react-types/button/3.4.3_react@17.0.2:
- resolution: {integrity: sha512-3rP3Nha16g/PUkSA5R22kHNXOdxPLSdegLss9P4anrt8W8lVjrniQErJVFGf/fqYcucBIg2QVPOTnZHhsz8y4g==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0-rc.1
- dependencies:
- '@react-types/shared': 3.11.1_react@17.0.2
- react: 17.0.2
- dev: false
-
- /@react-types/checkbox/3.2.5_react@17.0.2:
- resolution: {integrity: sha512-QP1+g/Fu3EageMGI7doWT6t4J/pFKOHoWoQIj3AXrFx6pljX8pA9eRhgTznF4uT+4e34TK/xDoEssPAWq24s2A==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0-rc.1
- dependencies:
- '@react-types/shared': 3.11.1_react@17.0.2
- react: 17.0.2
- dev: false
-
/@react-types/label/3.5.2_react@17.0.2:
resolution: {integrity: sha512-8S2dbbVgCf7S76/CXabPYh2W4ddnmtZ97nhS+iZPA2eVYUNTsEDY9WG7Gt8b+M3uyt4pUb17y8Zlnvi3sOzkzg==}
peerDependencies:
@@ -2830,11 +2694,6 @@ packages:
whatwg-url: 8.7.0
dev: true
- /date-fns/2.28.0:
- resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==}
- engines: {node: '>=0.11'}
- dev: false
-
/debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
dependencies:
@@ -4196,10 +4055,6 @@ packages:
tinygradient: 1.1.5
dev: false
- /grapheme-splitter/1.0.4:
- resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
- dev: false
-
/gray-matter/4.0.3:
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
engines: {node: '>=6.0'}
@@ -4442,19 +4297,8 @@ packages:
engines: {node: '>= 0.10'}
dev: true
- /intersection-observer/0.10.0:
- resolution: {integrity: sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==}
- dev: false
-
- /intl-messageformat-parser/1.4.0:
- resolution: {integrity: sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=}
- deprecated: We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser
- dev: false
-
- /intl-messageformat/2.2.0:
- resolution: {integrity: sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=}
- dependencies:
- intl-messageformat-parser: 1.4.0
+ /intersection-observer/0.12.0:
+ resolution: {integrity: sha512-2Vkz8z46Dv401zTWudDGwO7KiGHNDkMv417T5ItcNYfmvHR/1qCTVBO9vwH8zZmQ0WkA/1ARwpysR9bsnop4NQ==}
dev: false
/intl-messageformat/9.11.4:
@@ -5707,19 +5551,8 @@ packages:
resolution: {integrity: sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==}
dev: false
- /markdown-to-jsx/6.11.4_react@17.0.2:
- resolution: {integrity: sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==}
- engines: {node: '>= 4'}
- peerDependencies:
- react: '>= 0.14.0'
- dependencies:
- prop-types: 15.8.1
- react: 17.0.2
- unquote: 1.1.1
- dev: false
-
- /match-sorter/6.3.1:
- resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==}
+ /match-sorter/4.2.1:
+ resolution: {integrity: sha512-s+3h9TiZU9U1pWhIERHf8/f4LmBN6IXaRgo2CI17+XGByGS1GvG5VvXK9pcGyCjGe3WM3mSYRC3ipGrd5UEVgw==}
dependencies:
'@babel/runtime': 7.17.2
remove-accents: 0.4.2
@@ -6405,10 +6238,10 @@ packages:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
dev: true
- /next-themes/0.0.15_caa633a00319350dbda42996613fe26c:
- resolution: {integrity: sha512-LTmtqYi03c4gMTJmWwVK9XkHL7h0/+XrtR970Ujvtu3s0kZNeJN24aJsi4rkZOI8i19+qq6f8j+8Duwy5jqcrQ==}
+ /next-themes/0.2.0-beta.0_caa633a00319350dbda42996613fe26c:
+ resolution: {integrity: sha512-vzF6V1cWo6LVuMZkTpsP3+7roc14X8VTRgyiZT/6TWzcd7sLdE+y/6F1WiXEvKg+IqwdUb8g3KwC20Fo1yUYqw==}
peerDependencies:
- next: '*'
+ next: '>=11.1.1'
react: '*'
react-dom: '*'
dependencies:
@@ -6459,8 +6292,32 @@ packages:
- babel-plugin-macros
dev: false
- /nextra/2.0.0-alpha.26_react@17.0.2:
- resolution: {integrity: sha512-ZZSBc2R34Bt3RGMfxZHmxpVxW8+zU2ljgOa+FWzdjGm3nd/Uf26cV9W937fEPuEnYBMoFIhPRdy6UScHJSBKKg==}
+ /nextra-theme-docs/2.0.0-alpha.46_caa633a00319350dbda42996613fe26c:
+ resolution: {integrity: sha512-I7JK/YggII841z2X//qLrrqZ+ji2I23xOg++2+lkKjb0T+ib9QIVYYdaSwGqEOcU0epNK/qev0VwA8sVCLqVYg==}
+ peerDependencies:
+ next: '>=9.5.3'
+ react: '>=16.13.1'
+ react-dom: '>=16.13.1'
+ dependencies:
+ '@headlessui/react': 1.5.0_react-dom@17.0.2+react@17.0.2
+ '@mdx-js/react': 2.0.0_react@17.0.2
+ '@reach/skip-nav': 0.16.0_react-dom@17.0.2+react@17.0.2
+ classnames: 2.3.1
+ flexsearch: 0.7.21
+ focus-visible: 5.1.0
+ github-slugger: 1.4.0
+ intersection-observer: 0.12.0
+ match-sorter: 4.2.1
+ next: 12.1.0_dfc0b93d99fba272c9564d3139a2581a
+ next-themes: 0.2.0-beta.0_caa633a00319350dbda42996613fe26c
+ parse-git-url: 1.0.1
+ react: 17.0.2
+ react-dom: 17.0.2_react@17.0.2
+ title: 3.4.3
+ dev: false
+
+ /nextra/2.0.0-alpha.46_react@17.0.2:
+ resolution: {integrity: sha512-hmTejOqNhNWJWw/lsC4nytgxTYfuCmVo8fm4slN9FVYJY49SdwlqqBOZvy/6yUmpaN1DsNAyyZwtWZatbdx07Q==}
peerDependencies:
react: '>=16.13.1'
dependencies:
@@ -6469,9 +6326,9 @@ packages:
graceful-fs: 4.2.9
gray-matter: 4.0.3
react: 17.0.2
- rehype-pretty-code: 0.1.0_shiki@0.10.0
+ rehype-pretty-code: 0.1.0_shiki@0.10.1
remark-gfm: 3.0.1
- shiki: 0.10.0
+ shiki: 0.10.1
slash: 3.0.0
transitivePeerDependencies:
- supports-color
@@ -7005,6 +6862,7 @@ packages:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
+ dev: true
/property-information/6.1.1:
resolution: {integrity: sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==}
@@ -7084,36 +6942,14 @@ packages:
- csstype
dev: false
- /react-innertext/1.1.5_cfedea9b3ed0faf0dded75c187406c5e:
- resolution: {integrity: sha512-PWAqdqhxhHIv80dT9znP2KvS+hfkbRovFp4zFYHFFlOoQLRiawIic81gKb3U1wEyJZgMwgs3JoLtwryASRWP3Q==}
- peerDependencies:
- '@types/react': '>=0.0.0 <=99'
- react: '>=0.0.0 <=99'
- dependencies:
- '@types/react': 17.0.37
- react: 17.0.2
- dev: false
-
- /react-intersection-observer/8.26.2_react@17.0.2:
- resolution: {integrity: sha512-GmSjLNK+oV7kS+BHfrJSaA4wF61ELA33gizKHmN+tk59UT6/aW8kkqvlrFGPwxGoaIzLKS2evfG5fgkw5MIIsg==}
- peerDependencies:
- react: ^15.0.0 || ^16.0.0 || ^17.0.0
- dependencies:
- react: 17.0.2
- tiny-invariant: 1.2.0
- dev: false
-
/react-is/16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ dev: true
/react-is/17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
dev: true
- /react-keyframes/1.0.0-canary.3:
- resolution: {integrity: sha512-2HE+uahWUcHF1gVyVaUVTLid4H5/RPtAAVLZ31mM0Xa2ltCQ711FyWm3561kFm1AnVOduc4h6LOJLtxs1AOdSw==}
- dev: false
-
/react/17.0.2:
resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==}
engines: {node: '>=0.10.0'}
@@ -7231,14 +7067,14 @@ packages:
rc: 1.2.8
dev: false
- /rehype-pretty-code/0.1.0_shiki@0.10.0:
+ /rehype-pretty-code/0.1.0_shiki@0.10.1:
resolution: {integrity: sha512-7SaedCOn5VcDGdllQeu3kBWC+/zbkD6ZE7iOALJzK79+v0K0qQpa1WqBwoxetTbCLwBTY9wC4CabEsDS3qj55g==}
engines: {node: ^12.16.0 || >=13.2.0}
peerDependencies:
shiki: '*'
dependencies:
parse-numeric-range: 1.3.0
- shiki: 0.10.0
+ shiki: 0.10.1
dev: false
/remark-gfm/3.0.1:
@@ -7523,8 +7359,8 @@ packages:
rechoir: 0.6.2
dev: true
- /shiki/0.10.0:
- resolution: {integrity: sha512-iczxaIYeBFHTFrQPb9DVy2SKgYxC4Wo7Iucm7C17cCh2Ge/refnvHscUOxM85u57MfLoNOtjoEFUWt9gBexblA==}
+ /shiki/0.10.1:
+ resolution: {integrity: sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==}
dependencies:
jsonc-parser: 3.0.0
vscode-oniguruma: 1.6.2
@@ -8088,10 +7924,6 @@ packages:
xtend: 4.0.2
dev: true
- /tiny-invariant/1.2.0:
- resolution: {integrity: sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==}
- dev: false
-
/tiny-warning/1.0.3:
resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
dev: false
@@ -8489,10 +8321,6 @@ packages:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
- /unquote/1.1.1:
- resolution: {integrity: sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=}
- dev: false
-
/unset-value/1.0.0:
resolution: {integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=}
engines: {node: '>=0.10.0'}