diff --git a/docusaurus.config.js b/docusaurus.config.js index 3ec2c4291e..08c2eeac96 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -178,6 +178,18 @@ module.exports = { }; }, "docusaurus-tailwindcss-loader", + [ + "docusaurus-plugin-llms", + { + docsDir: "versioned_docs/version-4.0.0", + ignoreFiles: ["**/shared/**"], + generateLLMsTxt: true, + generateLLMsFullTxt: true, + generateMarkdownFiles: true, + preserveDirectoryStructure: false, + excludeImports: true, + }, + ], ], themeConfig: { tableOfContents: { diff --git a/package.json b/package.json index 5f282af13b..8195171bab 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "write-translations": "docusaurus write-translations", "wnrite-heading-ids": "docusaurus write-heading-ids", "format": "prettier --write .", - "prepare": "husky install" + "prepare": "husky install", + "postinstall": "patch-package" }, "lint-staged": { "**/*": "prettier --write --ignore-unknown" @@ -58,14 +59,17 @@ "@tailwindcss/typography": "^0.5.0", "autoprefixer": "^10.4.0", "docusaurus": "^1.14.7", + "docusaurus-plugin-llms": "0.4.0", "docusaurus-tailwindcss-loader": "file:plugins/docusaurus-tailwindcss-loader", "eslint": "^7.32.0", "eslint-plugin-react": "^7.23.2", "husky": "^6.0.0", "lint-staged": "^11.1.2", + "patch-package": "^8.0.1", "postcss": "^8.4.4", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.4.1", + "postinstall-postinstall": "^2.1.0", "prettier": "^2.5.1", "prettier-plugin-tailwindcss": "^0.1.4", "rimraf": "^6.0.1", diff --git a/patches/docusaurus-plugin-llms+0.4.0.patch b/patches/docusaurus-plugin-llms+0.4.0.patch new file mode 100644 index 0000000000..6e90ec6464 --- /dev/null +++ b/patches/docusaurus-plugin-llms+0.4.0.patch @@ -0,0 +1,89 @@ +diff --git a/node_modules/docusaurus-plugin-llms/lib/utils.js b/node_modules/docusaurus-plugin-llms/lib/utils.js +index ed9850cf..a714772e 100644 +--- a/node_modules/docusaurus-plugin-llms/lib/utils.js ++++ b/node_modules/docusaurus-plugin-llms/lib/utils.js +@@ -466,7 +466,7 @@ async function resolvePartialImports(content, filePath, importChain = new Set()) + // Pattern 1: import PartialName from './_partial.mdx' + // Pattern 2: import { PartialName } from './_partial.mdx' + // Create a fresh regex for each invocation to avoid lastIndex state leakage +- const createImportRegex = () => /^\s*import\s+(?:(\w+)|{\s*(\w+)\s*})\s+from\s+['"]([^'"]+_[^'"]+\.mdx?)['"];?\s*$/gm; ++ const createImportRegex = () => /^\s*import\s+(?:(\w+)|{\s*(\w+)\s*})\s+from\s+['"]([^'"]+\.mdx?)['"];?\s*$/gm; + const imports = new Map(); + // First pass: collect all imports + let match; +@@ -474,10 +474,7 @@ async function resolvePartialImports(content, filePath, importChain = new Set()) + while ((match = importRegex.exec(content)) !== null) { + const componentName = match[1] || match[2]; + const importPath = match[3]; +- // Only process imports for partial files (containing underscore) +- if (importPath.includes('_')) { +- imports.set(componentName, importPath); +- } ++ imports.set(componentName, importPath); + } + // Resolve each partial import + for (const [componentName, importPath] of imports) { +@@ -555,10 +552,63 @@ function cleanMarkdownContent(content, excludeImports = false, removeDuplicateHe + // - import "..."; (side-effect imports) + cleaned = cleaned.replace(/^\s*import\s+.*?;?\s*$/gm, ''); + } ++ // Fenced code blocks (```lang ... ```) often contain '<...>' text that looks ++ // exactly like a tag to the regexes below but isn't one -- a placeholder like ++ // `wsl --install -d `, or a literal XML sample response ++ // like `...`. None of the tag-stripping rules know about code ++ // fences, so mask every whole fenced block out first and restore it verbatim ++ // once stripping is done, the same way quoted prop strings are masked below. ++ // Fences nested inside list items are indented (e.g. " ```shell"), so the ++ // leading whitespace before the backticks is optional and not part of the ++ // backreference -- only the backtick run itself has to match on both ends. ++ const codeBlocks = []; ++ cleaned = cleaned.replace(/^[ \t]*(`{3,})[^\n]*\n[\s\S]*?^[ \t]*\1[ \t]*$/gm, (block) => { ++ codeBlocks.push(block); ++ return `@@KEPLOY_CODEBLOCK_${codeBlocks.length - 1}@@`; ++ }); + // Remove HTML tags, but preserve XML content in code blocks + // We need to be selective to avoid removing XML content from code blocks + // This regex targets common HTML tags while being more conservative about XML + cleaned = cleaned.replace(/<\/?(?:div|span|p|br|hr|img|a|strong|em|b|i|u|h[1-6]|ul|ol|li|table|tr|td|th|thead|tbody)\b[^>]*>/gi, ''); ++ // Remove leftover custom (PascalCase) React component tags that MDX imports ++ // resolve at real build time but that this plugin doesn't render. Self-closing ++ // tags carry no readable child text, so they're dropped entirely; paired tags ++ // often wrap real content (e.g. ...), so only the tag ++ // markers are stripped and their inner text is preserved. Order matters: the ++ // self-closing pass must run first, or the second regex would partially match it. ++ // ++ // Docs also use -style ALL_CAPS placeholders for readers to ++ // fill in their own values — these also start with a capital letter, so a real ++ // component name is only treated as such when it contains a lowercase letter ++ // and no underscore (true of every actual component in this codebase, never ++ // true of these placeholders). ++ const isRealComponentName = (name) => /[a-z]/.test(name) && !name.includes('_'); ++ // Prop values can legitimately contain '<' or '>' inside quoted strings (e.g. ++ // tools={["Linux kernel >= 5.10"]}), which would otherwise be mistaken for the ++ // tag's own boundary. Mask '<'/'>' found inside quoted spans first (escape-aware, ++ // so a backslash-escaped quote like \" doesn't fool it into ending the string ++ // early), run the simple original tag regex, then restore what remains. ++ // The quote-matching alternatives are mutually exclusive at every position ++ // (backslash-led vs not), so there's no ambiguity for the engine to backtrack ++ // over -- this avoids the catastrophic-backtracking trap a naive version of ++ // this fix hit earlier on ordinary prose full of apostrophes (don't, it's). ++ const LT_MASK = '@@KEPLOY_LT@@'; ++ const GT_MASK = '@@KEPLOY_GT@@'; ++ // Only double-quoted strings need masking: every real prop value in this ++ // codebase that contains '<' or '>' uses double quotes (verified against the ++ // actual docs content). Single quotes are deliberately NOT masked here -- ++ // they appear constantly as English contractions (it's, don't, Let's), and ++ // masking them paired each stray apostrophe with whichever one came next in ++ // the document, sometimes many paragraphs later, incorrectly treating ++ // everything in between (including real tags) as "inside a string". ++ const masked = cleaned.replace(/"(?:[^"\\]|\\.)*"/g, (q) => q.split('<').join(LT_MASK).split('>').join(GT_MASK)); ++ const stripped = masked ++ .replace(/<([A-Z]\w*)(?:\s+[^<>]*?)?\/>/g, (match, tagName) => isRealComponentName(tagName) ? '' : match) ++ .replace(/<\/?([A-Z]\w*)(?:\s+[^<>]*?)?>/g, (match, tagName) => isRealComponentName(tagName) ? '' : match); ++ cleaned = stripped.split(LT_MASK).join('<').split(GT_MASK).join('>'); ++ // Restore fenced code blocks now that tag-stripping is done, so their ++ // original content (placeholders, XML samples, etc.) is left untouched. ++ cleaned = cleaned.replace(/@@KEPLOY_CODEBLOCK_(\d+)@@/g, (_match, index) => codeBlocks[Number(index)]); + // Remove redundant content that just repeats the heading (if requested) + if (removeDuplicateHeadings) { + // Split content into lines and process line by line diff --git a/src/components/MarkdownPageActions.js b/src/components/MarkdownPageActions.js new file mode 100644 index 0000000000..4805346eef --- /dev/null +++ b/src/components/MarkdownPageActions.js @@ -0,0 +1,82 @@ +import React, {useEffect, useRef, useState} from "react"; +import {Copy, Check, FileText, AlertCircle} from "lucide-react"; + +/** + * MarkdownPageActions - "Copy page" / "View as Markdown" links, rendered + * directly under the page title (mirrors the docs.sarvam.ai / Mintlify + * pattern: title, then a thin actions row, then a divider, then body). + * Point at the .md twin generated by docusaurus-plugin-llms at build time. + */ +export default function MarkdownPageActions({mdUrl}) { + const [copyState, setCopyState] = useState("idle"); + const resetTimeoutRef = useRef(null); + + useEffect(() => { + return () => clearTimeout(resetTimeoutRef.current); + }, []); + + if (!mdUrl) return null; + + const handleCopy = async () => { + clearTimeout(resetTimeoutRef.current); + setCopyState("copying"); + try { + const res = await fetch(mdUrl); + if (!res.ok) throw new Error(`Request failed: ${res.status}`); + const text = await res.text(); + await navigator.clipboard.writeText(text); + setCopyState("copied"); + } catch (e) { + setCopyState("error"); + } finally { + resetTimeoutRef.current = setTimeout(() => setCopyState("idle"), 2000); + } + }; + + const copyLabel = + copyState === "copying" + ? "Copying…" + : copyState === "copied" + ? "Copied" + : copyState === "error" + ? "Copy failed" + : "Copy as Markdown"; + + const CopyIcon = + copyState === "copied" ? Check : copyState === "error" ? AlertCircle : Copy; + + const copyColorClasses = + copyState === "copied" + ? "text-green-600 dark:text-green-500" + : copyState === "error" + ? "text-red-600 dark:text-red-500" + : "text-gray-500 dark:text-gray-400"; + + const linkBase = + "inline-flex items-center gap-1 text-[12px] leading-[1.2] py-[0.2rem] px-2 m-0 " + + "no-underline transition-colors duration-150 hover:text-[#ff914d] " + + "[&>svg]:shrink-0 [&>svg]:opacity-75"; + + return ( +
+ + + +
+ ); +} diff --git a/src/theme/DocItem/index.js b/src/theme/DocItem/index.js index 72cc5de8ea..b20148dc34 100644 --- a/src/theme/DocItem/index.js +++ b/src/theme/DocItem/index.js @@ -23,6 +23,7 @@ import useBaseUrl from "@docusaurus/useBaseUrl"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; import {useDocsVersion} from "@docusaurus/plugin-content-docs/client"; import {KeployCloud} from "@site/src/components/KeployCloud"; +import MarkdownPageActions from "@site/src/components/MarkdownPageActions"; export default function DocItem(props) { const {content: DocContent} = props; @@ -126,10 +127,10 @@ export default function DocItem(props) { const schemaType = schemaTypeFromFrontMatter ? schemaTypeFromFrontMatter : isApi - ? "APIReference" - : isBlog - ? "BlogPosting" - : "Article"; + ? "APIReference" + : isBlog + ? "BlogPosting" + : "Article"; const authorList = toPersonList(frontMatter?.author || frontMatter?.authors); const maintainerList = toPersonList(frontMatter?.maintainer); const contributorList = toPersonList(frontMatter?.contributor); @@ -171,6 +172,18 @@ export default function DocItem(props) { const isCategoryIndex = frontMatter?.slug === "index" || /\/category\/|\/index\/?$/.test(permalink); const suppressArticleSchema = isDocsRoot || isCategoryIndex; + // .md twins are only generated for the current (4.0.0) version's docs + // (docusaurus-plugin-llms docsDir points at versioned_docs/version-4.0.0), + // and only for real doc pages, not root/category-index pages. + const showMarkdownActions = isLatestVersion && !suppressArticleSchema; + // Folder-style permalinks (section landing pages, ending in "/") are + // written by docusaurus-plugin-llms as index.md inside that folder, + // not as .md -- so the two cases need different URL shapes. + const markdownUrl = showMarkdownActions + ? permalink.endsWith("/") + ? `${permalink}index.md` + : `${permalink}.md` + : null; const articleSchema = pageUrl && title && !suppressArticleSchema @@ -306,6 +319,7 @@ export default function DocItem(props) { {title} )} + {markdownUrl && } diff --git a/yarn.lock b/yarn.lock index b3462ef6fb..dec11c011a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3317,6 +3317,11 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + abab@^2.0.5, abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" @@ -4164,6 +4169,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.2.tgz#0bba2271feb7d458b0d31ad13625aaa4754431e2" + integrity sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA== + dependencies: + balanced-match "^1.0.0" + brace-expansion@^5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb" @@ -4610,7 +4622,7 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== -ci-info@^3.2.0: +ci-info@^3.2.0, ci-info@^3.7.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== @@ -5841,6 +5853,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +docusaurus-plugin-llms@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/docusaurus-plugin-llms/-/docusaurus-plugin-llms-0.4.0.tgz#020f00d83459c7feb71c7b6e61774d864336d8ae" + integrity sha512-jYlj2HJ5+gu7oJZuJ83Hk8KlB65YlZZ/7UpHXiL7Qr+qpNBkVocmt2Molc6F3HNr5RqcfhWD/98CvgyNztg/ow== + dependencies: + gray-matter "^4.0.3" + minimatch "^9.0.3" + yaml "^2.8.1" + "docusaurus-tailwindcss-loader@file:plugins/docusaurus-tailwindcss-loader": version "1.0.0" @@ -7150,6 +7171,13 @@ find-versions@^3.0.0: dependencies: semver-regex "^2.0.0" +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -7274,6 +7302,15 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg== +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^11.1.1, fs-extra@^11.2.0: version "11.3.4" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" @@ -7699,7 +7736,7 @@ graceful-fs@4.2.10: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -9246,6 +9283,17 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stable-stringify@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz#8903cfac42ea1a0f97f35d63a4ce0518f0cc6a70" + integrity sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -9265,6 +9313,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + jsprim@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" @@ -9318,6 +9371,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -10621,6 +10681,13 @@ minimatch@^10.2.2: dependencies: brace-expansion "^5.0.5" +minimatch@^9.0.3: + version "9.0.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" + integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== + dependencies: + brace-expansion "^2.0.2" + minimatch@~3.0.2: version "3.0.8" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" @@ -11057,7 +11124,7 @@ open@^10.0.3: is-inside-container "^1.0.0" wsl-utils "^0.1.0" -open@^7.0.2: +open@^7.0.2, open@^7.4.2: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== @@ -11392,6 +11459,26 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== +patch-package@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.1.tgz#79d02f953f711e06d1f8949c8a13e5d3d7ba1a60" + integrity sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^4.1.2" + ci-info "^3.7.0" + cross-spawn "^7.0.3" + find-yarn-workspace-root "^2.0.0" + fs-extra "^10.0.0" + json-stable-stringify "^1.0.2" + klaw-sync "^6.0.0" + minimist "^1.2.6" + open "^7.4.2" + semver "^7.5.3" + slash "^2.0.0" + tmp "^0.2.4" + yaml "^2.2.2" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -12705,6 +12792,11 @@ postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.4.4, postcss@^8.4. picocolors "^1.1.1" source-map-js "^1.2.1" +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -13959,6 +14051,11 @@ semver@^7.2.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== +semver@^7.5.3: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== + send@~0.19.0, send@~0.19.1: version "0.19.2" resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" @@ -14248,6 +14345,11 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -15088,6 +15190,11 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@^0.2.4: + version "0.2.7" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.7.tgz#26f4db11d1601ce8012dcb8a798ece1c06a99059" + integrity sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw== + to-buffer@^1.1.1: version "1.2.2" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" @@ -16237,6 +16344,11 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.3.tgz#76e407ed95c42684fb8e14641e5de62fe65bbcb3" integrity sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA== +yaml@^2.2.2, yaml@^2.8.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.9.0.tgz#78274afd93598a1dfdd6130df6a566defcbf9aa4" + integrity sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA== + yamljs@^0.2.1: version "0.2.10" resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.2.10.tgz#481cc7c25ca73af59f591f0c96e3ce56c757a40f"