diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 000000000..d7e3e29ac --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,114 @@ +name: Build and deploy Astro to GitHub Pages + +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: pages-${{ github.event_name == 'pull_request' && github.event.pull_request.number || 'deployment' }} + cancel-in-progress: false + +env: + ASTRO_TELEMETRY_DISABLED: '1' + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + pages: read + steps: + - name: Checkout repository and article history + uses: actions/checkout@v7 + with: + fetch-depth: 0 + persist-credentials: false + + - name: Set up pnpm + uses: pnpm/action-setup@v6 + + - name: Set up Node.js + uses: actions/setup-node@v7 + with: + node-version: '22.22.3' + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Read GitHub Pages configuration + id: pages + if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master') + uses: actions/configure-pages@v6 + + - name: Resolve site origin and base path + env: + CONFIGURED_SITE_URL: ${{ vars.SITE_URL }} + CONFIGURED_BASE_PATH: ${{ vars.BASE_PATH }} + PAGES_ORIGIN: ${{ steps.pages.outputs.origin }} + PAGES_BASE_PATH: ${{ steps.pages.outputs.base_path }} + PAGES_CONFIGURED: ${{ steps.pages.outcome == 'success' }} + run: | + node --input-type=module <<'NODE' + import { appendFileSync } from 'node:fs'; + const [owner, repository] = process.env.GITHUB_REPOSITORY.split('/'); + const site = new URL( + process.env.CONFIGURED_SITE_URL || + process.env.PAGES_ORIGIN || + `https://${owner.toLowerCase()}.github.io` + ).origin; + const repositoryBase = repository.toLowerCase() === `${owner.toLowerCase()}.github.io` + ? '/' + : `/${repository}/`; + const configuredBase = process.env.CONFIGURED_BASE_PATH || ( + process.env.PAGES_CONFIGURED === 'true' + ? process.env.PAGES_BASE_PATH || '/' + : repositoryBase + ); + if (!configuredBase.startsWith('/') || /[\r\n?#]/.test(configuredBase)) { + throw new Error('BASE_PATH must be an absolute path, such as /MyBlogDoc/ or /.'); + } + const path = configuredBase.replace(/^\/+|\/+$/g, ''); + const base = path ? `/${path}/` : '/'; + appendFileSync(process.env.GITHUB_ENV, `SITE_URL=${site}\nBASE_PATH=${base}\n`); + console.log(`Building ${site}${base}`); + NODE + + - name: Check Astro and TypeScript + run: pnpm check + + - name: Test Markdown compatibility and routing + run: pnpm test + + - name: Build static site + run: pnpm build + + - name: Verify published pages, assets, SEO and RSS + run: pnpm test:build + + - name: Upload GitHub Pages artifact + if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master') + uses: actions/upload-pages-artifact@v5 + with: + path: dist + + deploy: + if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master') + needs: build + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 diff --git a/.gitignore b/.gitignore index 547989417..614e69f56 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,13 @@ node_modules/ +.node_modules-vuepress-backup/ +.astro/ +dist/ src/.vuepress/.cache/ src/.vuepress/.temp/ src/.vuepress/dist/ -/.env -# 可以在这里添加测试文件 -.idea -/dist/ -/test.** +.idea/ +.DS_Store +.env +.env.* +!.env.example diff --git a/.idea/MyBlogDoc.iml b/.idea/MyBlogDoc.iml deleted file mode 100644 index ab4bb239d..000000000 --- a/.idea/MyBlogDoc.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 7d5eb856e..000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index dcb6b8c4c..000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/README.en.md b/README.en.md index c8652f0ec..e056e9d58 100644 --- a/README.en.md +++ b/README.en.md @@ -1,62 +1,111 @@ -# [MyBlogDoc](https://yihuiblog.top/) +# MyBlogDoc -### 这是什么? +[中文](README.md) · [Personal blog](https://yihuiblog.top/) · [Chronicle design reference](https://chronicle-83v.pages.dev/) -这个是我的[个人博客](https://yihuiblog.top/),使用了社区比较新的技术实现,并且重新整理了过去在社区和文档库的文章放到这里。有别于旧版本文档库,旧的文档库已经不进行更新了,现在主要维护这个仓库。 +A personal frontend knowledge base and blog, statically generated with Astro from the original Markdown articles. The interface follows Chronicle's editorial layout, with article lists, category filters, search, and reading pages. Chinese and English interface translations share the same article content; switching languages does not translate the articles. -因为最近大部分时间都在准备秋招,所以工作相关的多一点,你可以访问[这里](https://yihuiblog.top/campusRec/needToKnown.html) 快速浏览我准备的知识大纲。 +## Local development -如果对你有帮助,期待您的:star:! +Use Node.js 22.18 or newer. CI runs Node.js 22.22.3; `package.json` pins pnpm 10.34.6. -### 为什么要写?| 为什么要开源? +```sh +corepack enable +pnpm install +pnpm dev +``` -我觉得个人的记忆能力还是有限的,而前端的知识点又杂而广,并且社区有很多优秀的实践和观点都可以吸纳总结,所以我通过将这个站点作为我的第二大脑,搜罗总结各种知识点和最佳实践。 +If Corepack is unavailable, install pnpm with `npm install --global pnpm@10.34.6`. -同时,将笔记(文章)开源,则是希望能帮助比如你这样素不相识的“路人”,同时能够接收到你们的指正和建议。 +| Command | Purpose | +| --- | --- | +| `pnpm dev` | Start the development server | +| `pnpm check` | Check Astro and TypeScript | +| `pnpm test` | Check Markdown metadata, article links, and deployment paths | +| `pnpm build` | Generate the static website in `dist/` | +| `pnpm preview` | Preview the generated website | +| `pnpm commit` | Commit staged changes with the existing git-cz configuration | +## Writing articles -### 写了点啥? +Continue editing `.md` files in their original locations under `src/`. New articles also belong under `src/`; Chinese filenames and nested directories are supported. Hidden folders such as `.vuepress` and `.obsidian` are excluded from article discovery. -- 个人心得,总结和思考 -- 前端知识大仓库 +YAML frontmatter is optional. Existing `date`, `category`, `tag`, and `star` fields are supported, as are `categories` and `tags`. Titles come from `title`, the first H1, or the filename. Dates use `date` first, followed by the file's latest Git commit date; new uncommitted files use their filesystem date. Set `star: true` to feature an article. -- 我的大厂面经 -- 一堆八股文(bushi) -- codeTop刷题记录 -- [优秀社区文章集合](https://yihuiblog.top/skills/article.html) +```md +--- +title: My new article +date: 2026-10-06 +category: + - Frontend +tag: + - Astro +description: A short introduction to the article. +star: true +--- -### 功能支持 +# My new article -- SEO +Write your article here. +``` -- 评论 +Standard Markdown, tables, syntax highlighting, native HTML, images, and videos are preserved. Legacy Vue code fences use HTML highlighting. Relative `.md` and `.html` article links resolve to the new article routes; legacy VuePress article `.html` URLs have compatibility entry points. Existing article bodies do not need a bulk rewrite. VuePress-specific Vue components are not executed as Astro components. -- MD 语法增强 +The default Chinese interface is at `/`; the English interface is at `/en/`. Both use the same articles. -- 博客主题 +## Covers, typography and social profiles -- 站点地图 +An explicit `cover` takes priority. Otherwise, only an image-only first body paragraph supplies a fallback. Articles beginning with text or containing no image use text cards; later illustrations are not covers. The interface uses `"PingFang SC", HarmonyOS_Regular, "Helvetica Neue", "Microsoft YaHei", sans-serif`, with system monospace for code and no external font requests. -- 监控埋点 +Edit `src/config/site.ts` to configure the author and GitHub, Bilibili, and email profiles. The same links appear on the homepage, About page, footer, and mobile menu. Interface translations live in `src/i18n.ts`. - ...... +The About page uses `src/个人简介.md`, migrated from the [GitHub profile README](https://github.com/MoMeak9/MoMeak9/blob/91250d88177a33aa6da667942a7e4f7c448c0580/README.md). Its English content is preserved, with the source and revision recorded in frontmatter. Local SVG assets in `public/content-assets/github-profile/` follow the site's light/dark theme. Update the Markdown, SVG files, and contact details in `src/config/site.ts` together when refreshing the profile. -### 建设和部署 +Pages use native browser scrolling. GSAP observes scroll position to animate reversible entrances, staggered cards, expanding rules, and counters. A Canvas renders the rotating wireframe icosahedron and particles, with a static SVG fallback. Drawing is capped at 30 FPS and pauses offscreen or in hidden tabs. The system's reduced motion preference keeps content and values static. -- VuePress 2 + Vite + TS (VitePress) -- [vuepress-theme-hope 主题](https://vuepress-theme-hope.github.io/v2/zh/) +## Deploying to GitHub Pages -**部署:** +1. Open **Settings → Pages → Build and deployment → Source** and select **GitHub Actions**. +2. Push changes to `main` or `master`. The workflow installs locked dependencies, runs checks and tests, builds the website, and deploys it with the official GitHub Pages Actions. +3. You can also choose **Actions → Build and deploy Astro to GitHub Pages → Run workflow**. Only `main` and `master` deploy; Pull Requests run checks and builds. -- Github Action 自动构建并部署 Github Page (见deploy分支),国内源已挂载CDN,请放心访问。 +The workflow reads the origin and base path from `actions/configure-pages`, supporting project sites, user sites, and configured custom domains. A normal `MyBlogDoc` project repository uses `/MyBlogDoc/`. Pull Request builds derive the path from `GITHUB_REPOSITORY`. Full Git history is checked out so article date fallbacks remain consistent. No PAT or manually maintained `gh-pages` branch is required. -### Git 提交 +To override deployment settings, add repository variables under **Settings → Secrets and variables → Actions → Variables**: -commitizen+git-cz 实现的有趣而规范的commits信息 +| Variable | Example | Meaning | +| --- | --- | --- | +| `SITE_URL` | `https://momeak9.github.io` | Website origin without the project subpath | +| `BASE_PATH` | `/MyBlogDoc/` | Project subpath; use `/` for root-domain deployment | -### ❓ 问题与交流 | Issue +Local development defaults to `/`. To verify the same project path used in CI: -- 如果您想参与贡献,非常抱歉目前这是我的个人笔记库,可能暂时没法儿接受其他人的笔记合入。 -- 如果您有相关问题,或希望我加速填坑,请直接在文章下方留言或提 issues。我看到会尽快回复。 +```sh +SITE_URL=https://momeak9.github.io BASE_PATH=/MyBlogDoc/ pnpm build +BASE_PATH=/MyBlogDoc/ pnpm preview +``` -**欢迎提 issues 或者 联系 [shi_yihui@qq.com](mailto:shi_yihui@qq.com)** +`.idea/`, `node_modules/`, `.astro/`, `dist/`, `.DS_Store`, and local environment files are ignored. Previously tracked `.idea` files have been removed from Git tracking while remaining available locally. + +## Content migration and discovery + +`scripts/migrate-blog.mjs` consumes a reviewed manifest. It defaults to dry-run; `--apply` writes the approved articles while keeping the source directory read-only. The review report is in `reports/content-migration.json`, and date provenance is in `src/data/migration-metadata.json`. The requested Douyin and legal directories, private correspondence, and credential-bearing work notes are excluded. Confirmed updates and document aliases are preserved; unresolved references remain readable plain text. + +Archives statically render 12 articles per page, with search indexes loaded on demand. Phone layouts include horizontal category filters, a collapsible contents panel, 44px controls, and safe-area spacing. Mermaid diagrams load near the reader, keeping their original source available as a fallback. + +## Local full-text and offline search + +[Pagefind](https://pagefind.app/) builds a static, segmented Chinese index for public articles after the Astro build. Queries, relevance ranking, and highlighted excerpts run locally. Both interface languages share the original corpus and preserve their own article links. Keyword searches load only the required index chunks and visible excerpts; category-only filtering uses metadata. No search server, API key, or external search service is required. + +Offline search prepares its full index and local assets automatically after the page loads and becomes idle. There is no download button. Background requests run at low priority and defer to search input, hidden tabs, Data Saver and slow connections. Completed data supports new offline queries, filtering, pagination and previously visited articles. Failed background updates preserve the prior complete cache and stay within the blog path. See the [implementation and validation notes](docs/offline-search.md). + +## SEO and GEO + +The site provides Blog, Person, BlogPosting, and visible breadcrumb JSON-LD, OG/Twitter sharing images, trustworthy publication/modification dates, explicit attribution, and sitemap lastmod. Unknown publication dates are never replaced with build timestamps. Article language follows the original content even when the interface is English. + +`content-index.json` exposes public metadata, while `llms.txt` is an optional canonical navigation index. It is a community proposal rather than a Google ranking signal or an AI citation guarantee. [Google's AI optimization guide](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide) recommends accessible text, structured data, and trustworthy content. + +A project Pages file at `/MyBlogDoc/robots.txt` does not control the entire host: crawlers look for `/robots.txt` at the domain root. Root-domain hosting can use the existing output directly. Search and training crawler permissions have not been changed. After publication, Search Console and Bing Webmaster Tools can verify indexing, crawling, and citations. + +## Contact + +This repository primarily contains personal notes. Report article or website problems in an [Issue](https://github.com/MoMeak9/MyBlogDoc/issues), or contact [minntaki@foxmail.com](mailto:minntaki@foxmail.com). diff --git a/README.md b/README.md index 2cdf854e2..30244c2ad 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,111 @@ -# [MyBlogDoc](https://yihuiblog.top/) +# MyBlogDoc -### 这是什么? +[English](README.en.md) · [个人博客](https://yihuiblog.top/) · [设计参考 Chronicle](https://chronicle-83v.pages.dev/) -这个是我的[个人博客](https://yihuiblog.top/),使用了社区比较新的技术实现,并且重新整理了过去在社区和文档库的文章放到这里。有别于旧版本文档库,旧的文档库已经不进行更新了,现在主要维护这个仓库。 +个人前端知识库与博客,使用 Astro 静态生成,继续以原来的 Markdown 文章为内容源。界面参照 Chronicle 的编辑部式排版,包含文章列表、分类筛选、搜索和文章阅读页;提供中文、英文界面,切换语言不会翻译文章正文。 -因为最近大部分时间都在准备秋招,所以工作相关的多一点,你可以访问[这里](https://yihuiblog.top/campusRec/needToKnown.html) 快速浏览我准备的知识大纲。 +## 本地开发 -如果对你有帮助,期待您的:star:! +使用 Node.js 22.18 以上版本,CI 固定为 22.22.3;包管理器使用 `package.json` 固定的 pnpm 10.34.6。 -### 为什么要写?| 为什么要开源? +```sh +corepack enable +pnpm install +pnpm dev +``` -我觉得个人的记忆能力还是有限的,而前端的知识点又杂而广,并且社区有很多优秀的实践和观点都可以吸纳总结,所以我通过将这个站点作为我的第二大脑,搜罗总结各种知识点和最佳实践。 +如果本地没有 Corepack,可以用 `npm install --global pnpm@10.34.6` 安装 pnpm。 -同时,将笔记(文章)开源,则是希望能帮助比如你这样素不相识的“路人”,同时能够接收到你们的指正和建议。 +| 命令 | 用途 | +| --- | --- | +| `pnpm dev` | 启动开发服务器 | +| `pnpm check` | 检查 Astro 与 TypeScript | +| `pnpm test` | 检查 Markdown 元数据、文章链接和部署路径兼容性 | +| `pnpm build` | 静态生成到 `dist/` | +| `pnpm preview` | 预览生成的网站 | +| `pnpm commit` | 使用保留的 git-cz 配置提交已暂存的修改 | +## 写文章 -### 写了点啥? +继续编辑 `src/` 中原路径下的 `.md` 文件,无需把旧笔记搬到新目录。新增文章也放在 `src/` 中,可保留中文文件名与多层目录。`.vuepress`、`.obsidian` 等隐藏目录不会作为文章读取。 -- 个人心得,总结和思考 -- 前端知识大仓库 +YAML frontmatter 为可选,原有 `date`、`category`、`tag`、`star` 字段继续支持,也支持 `categories`、`tags`。标题优先读取 `title`,否则从第一个一级标题或文件名提取;日期优先使用 `date`,否则使用 Git 最后提交时间。首次添加尚未提交的文章会使用文件时间。`star: true` 标记精选文章。 -- 我的大厂面经 -- 一堆八股文(bushi) -- codeTop刷题记录 -- [优秀社区文章集合](https://yihuiblog.top/skills/article.html) +```md +--- +title: 我的新文章 +date: 2026-10-06 +category: + - 前端 +tag: + - Astro +description: 文章的简短介绍。 +star: true +--- -### 功能支持 - -- SEO +# 我的新文章 -- 评论 +这里开始写正文。 +``` -- MD 语法增强 +保留标准 Markdown、表格、代码高亮、原生 HTML、图片和视频内容;旧 Vue 代码围栏作为 HTML 高亮。已有相对 `.md`、`.html` 文章链接会解析到新文章路由。旧 VuePress 的文章 `.html` 地址提供兼容入口。迁移不需要批量改写文章正文;VuePress 专属 Vue 组件不作为 Astro 组件运行。 -- 博客主题 +中文界面为默认入口 `/`,英文界面为 `/en/`。两种界面共享同一份文章内容。 -- 站点地图 +## 封面、字体与社交媒体 -- 监控埋点 +文章显式 `cover` 优先;没有设置时,仅当标题后的第一个正文段落为图片,才使用该图作为封面。文字开头或没有图片的文章呈现文字卡片,正文后续插图不作为封面。字体使用 `"PingFang SC", HarmonyOS_Regular, "Helvetica Neue", "Microsoft YaHei", sans-serif`,代码保留系统等宽字体,不加载外部字体。 - ...... +在 `src/config/site.ts` 修改作者信息和 GitHub、Bilibili、邮箱入口;这些入口统一用于首页、关于页、页脚和手机菜单。界面翻译位于 `src/i18n.ts`。 -### 建设和部署 +关于页正文位于 `src/个人简介.md`,迁自 [GitHub 个人主页 README](https://github.com/MoMeak9/MoMeak9/blob/91250d88177a33aa6da667942a7e4f7c448c0580/README.md)。保留原始英文内容,frontmatter 记录来源和版本;配套 SVG 位于 `public/content-assets/github-profile/`,跟随站点浅色/深色主题。更新个人资料时,同时更新正文、SVG 和 `src/config/site.ts` 中的联系方式。 -- VuePress 2 + Vite + TS (VitePress) -- [vuepress-theme-hope 主题](https://vuepress-theme-hope.github.io/v2/zh/) +页面使用浏览器原生滚动。GSAP 观察滚动位置,驱动淡入与反向播放、卡片错峰、线条展开和数字计数。首屏使用 Canvas 绘制旋转线框二十面体及粒子,提供静态 SVG 后备;帧率最多 30 FPS,离屏或标签页隐藏时暂停。系统开启“减少动画”后,页面保留静态内容和数字。 -**部署:** +## 部署到 GitHub Pages -### Git 提交 +1. 在仓库 **Settings → Pages → Build and deployment → Source** 中选择 **GitHub Actions**。 +2. 将修改提交到 `main` 或 `master`。工作流依次安装锁定依赖、执行检查与测试、构建静态站点,再使用 GitHub 官方 Pages Actions 部署。 +3. 也可以在 **Actions → Build and deploy Astro to GitHub Pages → Run workflow** 手动运行。只有 `main`、`master` 会部署;Pull Request 会检查和构建。 -commitizen+git-cz 实现的有趣而规范的commits信息 +工作流读取 `actions/configure-pages` 输出的站点域名与路径,支持项目站点、用户站点和已配置的自定义域名。对于普通 `MyBlogDoc` 项目仓库,路径为 `/MyBlogDoc/`。Pull Request 构建根据 `GITHUB_REPOSITORY` 推导对应路径。Git 历史完整检出,以保持无日期文章的时间一致。部署不需要 PAT 或手工维护 `gh-pages` 分支。 -### ❓ 问题与交流 | Issue +需要覆盖地址时,在 **Settings → Secrets and variables → Actions → Variables** 中设置: -- 如果您想参与贡献,非常抱歉目前这是我的个人笔记库,可能暂时没法儿接受其他人的笔记合入。 -- 如果您有相关问题,或希望我加速填坑,请直接在文章下方留言或提 issues。我看到会尽快回复。 +| 变量 | 示例 | 说明 | +| --- | --- | --- | +| `SITE_URL` | `https://momeak9.github.io` | 站点域名,不含项目子路径 | +| `BASE_PATH` | `/MyBlogDoc/` | 项目部署路径;根域名部署设置为 `/` | -**欢迎提 issues 或者 联系 [shi_yihui@qq.com](mailto:shi_yihui@qq.com)** +本地开发默认路径为 `/`。可用与 CI 相同的变量验证项目路径: + +```sh +SITE_URL=https://momeak9.github.io BASE_PATH=/MyBlogDoc/ pnpm build +BASE_PATH=/MyBlogDoc/ pnpm preview +``` + +`.idea/`、`node_modules/`、`.astro/`、`dist/`、`.DS_Store` 和本地环境文件均已忽略。原来跟踪的 `.idea` 文件已移出 Git 跟踪,本地 IDE 文件可继续使用。 + +## 内容迁移与发现 + +`scripts/migrate-blog.mjs` 以审查清单为输入,默认 dry-run,`--apply` 才写入博客;源目录始终只读。迁移结果保存在 `reports/content-migration.json`,文章日期来源保存在 `src/data/migration-metadata.json`。已按请求排除抖音、法律目录,并排除私人通信与含认证信息的工作笔记。保留明确更新稿、统一旧文件别名和已确认的文档链接,无法确定目标的旧链接按普通文本保留。 + +归档每页静态生成 12 篇文章,搜索索引在使用筛选或搜索时加载;手机提供横滑分类、折叠目录、44px 触控目标和安全区留白。Mermaid 图示按需绘制,原始源码可展开阅读,无法绘制时保留代码内容。 + +## 本地全文与离线搜索 + +使用 [Pagefind](https://pagefind.app/) 在构建后为公开文章生成静态中文分片索引,检索、相关性排序和摘要高亮在浏览器本地完成。中英文界面共享原文索引,结果保留当前界面的链接;关键词搜索按需加载索引及当前页摘要,分类单独筛选仍使用轻量元数据。不需要搜索服务器、API Key 或外部搜索服务。 + +离线搜索在页面加载后利用空闲时间自动准备完整索引与所需静态资源,不显示下载按钮。后台任务使用低优先级请求,搜索输入、隐藏标签页、节省流量和慢速网络会让任务延后。准备完成后,可以断网搜索新关键词、筛选和分页;已访问的文章可离线阅读。后台更新失败保留原完整缓存,缓存只属于当前博客路径。[方案比较、构建与验收说明](docs/offline-search.md)。 + +## SEO 与 GEO + +站点输出 Blog、Person、BlogPosting 和可见面包屑对应的 JSON-LD,补齐 OG/Twitter 分享图、可信发布时间与更新时间、原文作者与来源信息,以及 sitemap 的 lastmod。未知的发布时间不会用构建时间补造。英文界面共享原文,因此文章语言标注遵循正文语言。 + +`content-index.json` 提供公开文章元数据,`llms.txt` 提供可选的 canonical 内容导航;它是社区索引协议,不是 Google 排名因素,也不保证 AI 引用。[Google 的 AI 优化指南](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide)强调可访问正文、结构化数据与可信内容。 + +GitHub 项目 Pages 的 `/MyBlogDoc/robots.txt` 不能控制整个主机,爬虫读取的是域名根路径 `/robots.txt`;自定义根域部署才能直接使用当前输出。未擅自改变训练爬虫与搜索爬虫的权限。上线后可在 Search Console 与 Bing Webmaster Tools 检查索引、抓取及引用情况。 + +## 交流 + +这个仓库主要维护个人笔记。发现文章或网站问题,欢迎提交 [Issue](https://github.com/MoMeak9/MyBlogDoc/issues),也可以联系 [minntaki@foxmail.com](mailto:minntaki@foxmail.com)。 diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 000000000..3bf6600d3 --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,85 @@ +import { defineConfig } from "astro/config"; +import { readFileSync } from "node:fs"; +import sitemap from "@astrojs/sitemap"; +import { unified } from "@astrojs/markdown-remark"; +import { + remarkLegacyMarkdown, + rehypeLegacyMedia, +} from "./src/lib/markdown.mjs"; +import { normalizeBase } from "./src/lib/paths.mjs"; +import { literalPercentRoutes } from "./src/lib/literal-percent-routes.mjs"; + +let articleIndex; +function indexedArticles() { + if (!articleIndex) { + // serialize runs after static routes, so this shares the exact published dates. + const { articles } = JSON.parse( + readFileSync( + new URL("./dist/content-index.json", import.meta.url), + "utf8", + ), + ); + articleIndex = new Map( + articles.flatMap((article) => [ + [article.url, article], + [article.alternates.en, article], + ]), + ); + } + return articleIndex; +} + +export default defineConfig({ + site: process.env.SITE_URL || "https://momeak9.github.io", + base: normalizeBase(process.env.BASE_PATH || "/"), + output: "static", + trailingSlash: "always", + integrations: [ + literalPercentRoutes(), + sitemap({ + filter: (page) => !page.endsWith(".html") && !/\/404\/?$/.test(page), + serialize(item) { + // Use the same component encoding as canonical links, including literal =. + const url = new URL(item.url); + url.pathname = url.pathname + .split("/") + .map((segment) => + encodeURIComponent( + decodeURIComponent(segment.replace(/%(?![0-9a-f]{2})/gi, "%25")), + ), + ) + .join("/"); + const relativePath = url.pathname.slice( + normalizeBase(process.env.BASE_PATH || "/").length, + ); + if (/^(?:en\/)?posts\//.test(relativePath)) { + const article = indexedArticles().get(url.href); + if (!article) return undefined; + const lastmod = article.modifiedDate || article.publishedDate; + return { ...item, url: url.href, ...(lastmod ? { lastmod } : {}) }; + } + return { ...item, url: url.href }; + }, + }), + ], + i18n: { + defaultLocale: "zh", + locales: ["zh", "en"], + routing: { prefixDefaultLocale: false }, + }, + markdown: { + processor: unified({ + remarkPlugins: [ + [ + remarkLegacyMarkdown, + { base: normalizeBase(process.env.BASE_PATH || "/") }, + ], + ], + rehypePlugins: [rehypeLegacyMedia], + }), + shikiConfig: { + themes: { light: "github-light", dark: "github-dark" }, + wrap: false, + }, + }, +}); diff --git a/docs/offline-search.md b/docs/offline-search.md new file mode 100644 index 000000000..9998c13a1 --- /dev/null +++ b/docs/offline-search.md @@ -0,0 +1,47 @@ +# 本地全文与离线搜索 + +## 方案选择 + +本博客使用 Astro 静态输出、Markdown 内容及 GitHub Pages,选择 Pagefind 1.5.2 在构建时生成搜索资源。搜索运行在读者设备上,索引与博客一起发布。 + +| 方案 | 适用方式 | 本项目的选择理由 | +| ------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------------- | +| [Pagefind](https://pagefind.app/docs/) | 从静态 HTML 自动建索引,浏览器按需加载分片 | 原生适配静态站点,支持中文分词、相关性排序、过滤和摘要,直接使用发布后的文章正文 | +| [MiniSearch](https://github.com/lucaong/minisearch) | 应用准备记录并维护内存索引,支持模糊/前缀匹配和字段加权 | 适合记录集型应用;博客还需要自行维护 HTML 提取、分词、分片与结果摘要 | +| [FlexSearch](https://github.com/nextapps-de/flexsearch) | 应用管理索引,可使用 Worker 和 IndexedDB | 适合更定制的索引存储;当前博客使用 Pagefind 的静态发布流程 | + +参考:[Pagefind 中文与多语言](https://pagefind.app/docs/multilingual/)、[Node 索引 API](https://pagefind.app/docs/node-api/)、[浏览器 API](https://pagefind.app/docs/api/)、[浏览器缓存配置](https://pagefind.app/docs/search-config/)。 + +## 内容与检索 + +- `pnpm build` 先构建 Astro,再由 `scripts/build-search.mjs` 按 `content-index.json` 索引公开且非空的文章。每篇只索引一份正文,不包含英文界面镜像、作者简介、目录、导航及相关文章。 +- 标题加权、正文、代码、摘要和标签可检索,分类用于过滤。摘要与标签以低权重加入索引,保留原有查询能力;元数据 JSON 本身不参与检索。原有隐私/草稿规则及抖音、法律目录排除继续生效。 +- 中英文界面共享单一中文索引。中文查询根据索引实际词表切分,避免浏览器与索引器词典不同造成漏检;英文名称、标点与引号保留。只接受实际词表的正向前缀,防止未匹配长词被降级为无关短词。 +- 关键词检索按相关性展示,仅读取当前页 12 条结果的详情。分类单独筛选继续使用公开元数据并按原顺序显示。 +- 页面使用 Pagefind 的命中摘要;插入到 DOM 的内容仅保留文字与 `mark` 高亮,文章标题和其它元数据使用文本节点。 +- 结果根据原文 id 通过 `postPath()` 生成当前界面链接,中文路径、字面 `%` 和 GitHub Pages 子路径沿用现有编码策略。 + +## 断网使用 + +浏览器在文章归档完成加载并进入空闲后,后台自动保存完整搜索包,不显示下载按钮。调度至少延迟 5 秒并利用空闲回调,优先让前台检索完成;隐藏页、节省流量或慢速网络不会启动自动下载。初次访问只加载当前页面及小型版本信息,首次查询再加载相关分片。下载包含 Pagefind 的 JS、Worker、WASM、索引、分类和所有文章摘要,以及中英文搜索页面、必要 JS/CSS、文章元数据及搜索页实际使用的本地封面。 + +Service Worker 仅控制博客自身路径,例如 `/MyBlogDoc/`。每个包使用内容版本号,在全部文件成功保存、大小及版本核对通过后才发布“就绪”标记。失败或中断的临时包不取代完整包;更新期间仍可使用原下载。`search-version.json` 与 `search-manifest.json` 由构建自动输出,稳定版本用于 Pagefind 元数据的缓存查询参数。 + +离线包下载完成后,**此前没有输入过的关键词**也可搜索,分类和结果分页不依赖网络。中英文归档可以重新打开并从 URL 恢复查询。离线阅读保留下载启用后访问的最近 20 篇文章;未访问页面显示返回离线搜索的入口。整个文章库的 HTML、远程媒体及外部字体不在离线搜索包中,字体使用 CSS 的本地回退。 + +缓存由浏览器管理,后台更新只操作本博客的缓存。离线保存需要支持 Service Worker 与 Cache Storage 的浏览器,以及 HTTPS 或 localhost;不支持时保留联网检索。缓存被用户或浏览器清理后,会在下次满足空闲条件时重新准备。 + +## 构建与验证 + +```sh +pnpm install --frozen-lockfile +BASE_PATH=/MyBlogDoc/ SITE_URL=https://momeak9.github.io pnpm check +pnpm test +BASE_PATH=/MyBlogDoc/ SITE_URL=https://momeak9.github.io pnpm build +BASE_PATH=/MyBlogDoc/ SITE_URL=https://momeak9.github.io pnpm test:build +BASE_PATH=/MyBlogDoc/ pnpm preview +``` + +Pagefind 资源在构建后产生,检索验收应使用 `pnpm build` 后的 `pnpm preview`;开发服务器可用于界面开发。CI 使用同一构建与产物验收命令。 + +浏览器验收覆盖中文长句、中英混合关键词、代码关键词、分类和分页、输入法组合事件、快速输入竞态、重试、字面 `%` 地址、两个界面的同一查询、下载失败/更新/清理,以及下载完成后的新查询、重新打开搜索页和已访问文章离线阅读。 diff --git a/package.json b/package.json index 0f78aef83..cd54eac21 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,22 @@ { "name": "my-blog-doc", "version": "2.0.0", - "description": "A project of vuepress-theme-hope", + "description": "A Markdown-first personal blog built with Astro", + "private": true, "license": "MIT", + "packageManager": "pnpm@10.34.6", + "engines": { + "node": ">=22.18.0", + "pnpm": ">=10 <11" + }, "scripts": { - "build": "vuepress build src", - "clean-dev": "vuepress dev src --clean-cache", - "dev": "vuepress dev src", - "deploy": "serverless deploy", - "commit": "git add . && git-cz && git push" + "dev": "astro dev", + "build": "astro build && node scripts/build-search.mjs", + "preview": "astro preview", + "check": "astro check", + "test": "node --test tests/content.test.mjs tests/paths.test.mjs tests/seo.test.mjs tests/search-query.test.mjs tests/offline-search.test.mjs tests/search-dictionary.test.mjs tests/cover.test.mjs", + "test:build": "node --test tests/build.test.mjs tests/search-build.test.mjs", + "commit": "git-cz" }, "config": { "commitizen": { @@ -16,15 +24,27 @@ } }, "devDependencies": { + "@astrojs/check": "^0.9.10", "@commitlint/cli": "^17.0.3", - "@vuepress/client": "2.0.0-beta.53", + "@commitlint/config-conventional": "^17.0.3", + "@types/node": "^22.20.5", + "cbor-x": "1.6.6", "commitizen": "^4.2.4", - "cz-conventional-changelog": "^3.3.0", "git-cz": "^4.9.0", - "husky": "^8.0.1", - "vue": "^3.2.45", - "vuepress": "^2.0.0-beta.53", - "vuepress-plugin-search-pro": "2.0.0-beta.219", - "vuepress-theme-hope": "^2.0.0-beta.219" + "pagefind": "1.5.2", + "typescript": "~6.0.3" + }, + "dependencies": { + "@astrojs/markdown-remark": "^7.3.1", + "@astrojs/sitemap": "^3.7.4", + "astro": "^7.3.5", + "gsap": "^3.15.0", + "mermaid": "^11.17.2" + }, + "pnpm": { + "onlyBuiltDependencies": [ + "esbuild", + "sharp" + ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4eaaf88e6..3c28b295e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,8644 +1,7729 @@ -lockfileVersion: 5.4 - -specifiers: - '@commitlint/cli': ^17.0.3 - '@vuepress/client': 2.0.0-beta.53 - commitizen: ^4.2.4 - cz-conventional-changelog: ^3.3.0 - git-cz: ^4.9.0 - husky: ^8.0.1 - nodemailer: ^6.9.1 - vue: ^3.2.45 - vuepress: ^2.0.0-beta.53 - vuepress-plugin-search-pro: 2.0.0-beta.124 - vuepress-theme-hope: ^2.0.0-beta.121 - -devDependencies: - '@commitlint/cli': 17.0.3 - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - commitizen: 4.2.4 - cz-conventional-changelog: 3.3.0 - git-cz: 4.9.0 - husky: 8.0.1 - nodemailer: registry.npmmirror.com/nodemailer/6.9.1 - vue: registry.npmmirror.com/vue/3.2.45 - vuepress: registry.npmmirror.com/vuepress/2.0.0-beta.53_54nmke4n2vj3tdp5cd33kvtiom - vuepress-plugin-search-pro: registry.npmmirror.com/vuepress-plugin-search-pro/2.0.0-beta.124 - vuepress-theme-hope: registry.npmmirror.com/vuepress-theme-hope/2.0.0-beta.124 +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@astrojs/markdown-remark': + specifier: ^7.3.1 + version: 7.3.1 + '@astrojs/sitemap': + specifier: ^3.7.4 + version: 3.7.4 + astro: + specifier: ^7.3.5 + version: 7.3.5(@astrojs/markdown-remark@7.3.1)(@types/node@22.20.5)(jiti@2.6.1)(yaml@2.9.1) + gsap: + specifier: ^3.15.0 + version: 3.15.0 + mermaid: + specifier: ^11.17.2 + version: 11.17.2 + devDependencies: + '@astrojs/check': + specifier: ^0.9.10 + version: 0.9.10(@emnapi/runtime@1.11.3)(prettier@3.9.9)(typescript@6.0.3) + '@commitlint/cli': + specifier: ^17.0.3 + version: 17.8.1 + '@commitlint/config-conventional': + specifier: ^17.0.3 + version: 17.8.1 + '@types/node': + specifier: ^22.20.5 + version: 22.20.5 + cbor-x: + specifier: 1.6.6 + version: 1.6.6 + commitizen: + specifier: ^4.2.4 + version: 4.3.2(@types/node@22.20.5)(typescript@6.0.3) + git-cz: + specifier: ^4.9.0 + version: 4.9.0 + pagefind: + specifier: 1.5.2 + version: 1.5.2 + typescript: + specifier: ~6.0.3 + version: 6.0.3 packages: - /@commitlint/cli/17.0.3: - resolution: {integrity: sha512-oAo2vi5d8QZnAbtU5+0cR2j+A7PO8zuccux65R/EycwvsZrDVyW518FFrnJK2UQxbRtHFFIG+NjQ6vOiJV0Q8A==} + '@antfu/install-pkg@2.1.0': + resolution: {integrity: sha512-sdg9NxU3zR4Mnawfbc/x6GB5Wf17WYud5qOuEuxXjaKpYpMkISSJEjItGebXJ2bQ4DIcly4NYH23mtkGJjvKUw==} + + '@astrojs/astro2tsx@0.1.2': + resolution: {integrity: sha512-Uj/M9zbrhu5cIZEvWAGTbQJRKSxXWJ/E59BZwt7F+chrKhbfttW+9rkS/l+1QxoJP1KU3UnpM62M7yszfAI0WA==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@astrojs/check@0.9.10': + resolution: {integrity: sha512-zgx/UQMozdjOa3bOxjgeCFdtpE3c9rRX6xHwa+2QXvy8z8Akifu2AtubHyv/zzC2znO8dl8fFWL4K+Ba9kS8HQ==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 || ^6.0.0 + + '@astrojs/compiler-binding-android-arm64@0.5.1': + resolution: {integrity: sha512-nMb2nMIJtcWLNH+fV75Enmi+jp4tIOYOfsv4XtpgdOWkqc9P4uSSdK5u1xb340AzrXo5V18SxLl/nc3vcqtamQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@astrojs/compiler-binding-darwin-arm64@0.5.1': + resolution: {integrity: sha512-5k4+nZ/WRt+dcVow4z7rBuI7iv9A58h/uQ91YJe1PrTivbcCkq3u2Ynx/AZJwII4CsZawBCeGpojkFjutZBhBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@astrojs/compiler-binding-darwin-x64@0.5.1': + resolution: {integrity: sha512-0Buw+YST9Ff2EqQyhRMQujuFq/dijLw3zXWhsvI0dJ2pGrT38iVoxTEca2eBX/PfhlwkVWSRJEKO5gMqKHyeHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@astrojs/compiler-binding-linux-arm64-gnu@0.5.1': + resolution: {integrity: sha512-x5LRpyCoMKuu3INr18cn42YhwSOaRpp9b5Ny3eJJ/sWVeejC16Zeshu1JlvlSmEZACLeWxU5JM0RX6T6nI+YyA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@astrojs/compiler-binding-linux-arm64-musl@0.5.1': + resolution: {integrity: sha512-mL7tQEuDk3rGfaKmrO63nw6WBy1TPVioQGmVyjcAr+C+a/k3SVMYBytNSMqH9mZPT/Swj30JaZ2N842Z1NnOEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@astrojs/compiler-binding-linux-x64-gnu@0.5.1': + resolution: {integrity: sha512-uLGc9jtxwiDe4cQyhNPQim4ECiB/YzbWlXssfLAv8r374kArfTwBHjwR2+j+XVyF71yCx5mF9YNRclRqdNBgeg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@astrojs/compiler-binding-linux-x64-musl@0.5.1': + resolution: {integrity: sha512-G0cywinaQUc8v1MrytvYKUX7svTDMmYtOCZfxjwKPbJi59zIqM+Ll0rWgO0GQWLZH3XoPYo19ZwlP3Xt9ep9YA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@astrojs/compiler-binding-wasm32-wasi@0.5.1': + resolution: {integrity: sha512-yMhLL8asmLydoAdnEZxAw6eLfNDs3YJl6jqn0pjPt6zrb2U5qIDLnii4/twThpIFODKkQ6YDpBRTOz/vSfZCxw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@astrojs/compiler-binding-win32-arm64-msvc@0.5.1': + resolution: {integrity: sha512-aClIG6poFt3Wf/bZykrEAX2nAnKvBHW6RXiKUa69QjBtWH0/FOlOAjnFcxRNlhej2AMWNYFx0o+LGjwMcH8P7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@astrojs/compiler-binding-win32-x64-msvc@0.5.1': + resolution: {integrity: sha512-/E6uBCagY70YpWqssBC+/FuniNSloeQPRgj7l3LDWiqjxIyTLnIgX1sTt18FU7jrigetpSnC9cHAM6b6IxSgPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@astrojs/compiler-binding@0.5.1': + resolution: {integrity: sha512-oczyolLUl9mNrtuBuNjuvn5thpHrFLXAHAWGTRg0JDHQ8cGVsVeFekOu2uSoQGgainJIi+A3/9m0DyYwz3Nlnw==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@astrojs/compiler-rs@0.5.1': + resolution: {integrity: sha512-1k1acnX7DepIiea9U9/Y+d1hdAFfylu1ZQQkkYgRSwBOBAsXInolyZuh/2tax+83vu/A+hOYP6P3+265RvMTvw==} + engines: {node: '>=22.12.0'} + + '@astrojs/internal-helpers@0.11.0': + resolution: {integrity: sha512-3rzxJ+xbo0+8YyqOzLziIN32wmsHdCjEVz2sGOpRxJ+Ben/KiLph4ItxBy1abEL+E8fkRzqjg0rfXmaHJGw9JA==} + + '@astrojs/language-server@2.17.1': + resolution: {integrity: sha512-gG7bvMVNIXgoSe1pM9dI1HsSDLU1EIc/dSAYQ0DuReLyLkOBjsiqvaRYgQltWaldLxh0bNEqjgreLfjd9OnUxQ==} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + prettier-plugin-astro: '>=0.11.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-astro: + optional: true + + '@astrojs/markdown-remark@7.3.1': + resolution: {integrity: sha512-QCjsjZQl0+Cgb91+T3Ip9hyUe1r5aLm4udi584rML9YO3syupbAYE+jWpAxYg+z4lFLNUugPrylFxZ+8qFTClg==} + + '@astrojs/markdown-satteri@0.4.2': + resolution: {integrity: sha512-g4QehXnB/MzxQWnSf17NciFInMqEJy9948p8cc7zGg/r7995m0Ln5PMr3Xlnj24iey1LchaoZ3SzTOa3D4P/3w==} + + '@astrojs/prism@4.0.2': + resolution: {integrity: sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==} + engines: {node: '>=22.12.0'} + + '@astrojs/sitemap@3.7.4': + resolution: {integrity: sha512-LbKNC24bdUWcQf/pThB6qLlSqHojxGjZDURIzFocY8rlWnAn2t74nnhnK6S5x0NHriHoAduLEpVjRykmeGiVvA==} + + '@astrojs/telemetry@3.3.3': + resolution: {integrity: sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@astrojs/yaml2ts@0.2.4': + resolution: {integrity: sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.9': + resolution: {integrity: sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + + '@braintree/sanitize-url@7.1.2': + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + + '@bruits/satteri-darwin-arm64@0.10.5': + resolution: {integrity: sha512-27KTVl4TJkVahMy/ohyA7qd4938G5UNneFUz/PsScYfpIhj0IVAS23mpcJXdPF44sa6nva198lmV/cKIb2YPyA==} + cpu: [arm64] + os: [darwin] + + '@bruits/satteri-darwin-x64@0.10.5': + resolution: {integrity: sha512-IjnLe3nKspq6qaeqGgjT7MT8VrTV74yWRlaag7ZdNsI8TDAYZ0iPxMCo+9KQZHUk5EyVB+reBI/PFWL5KuFw9Q==} + cpu: [x64] + os: [darwin] + + '@bruits/satteri-linux-arm64-gnu@0.10.5': + resolution: {integrity: sha512-glkYXZCJywjP13v67eAyAMSJdF+ncvEbYvgi/wOtffL9tQ27lr/zsyzUfgs+ovjJ9d8JNQKiXeiArJcX8PJL9w==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@bruits/satteri-linux-arm64-musl@0.10.5': + resolution: {integrity: sha512-yWdgG1g17Nh2QyGVlFUxGRa3FEFwiMcpZEyMNWkbM3deC94cmVc+/i9OuyFpdKuWo3GkgoCtYVOoxk1uCnCZIA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@bruits/satteri-linux-x64-gnu@0.10.5': + resolution: {integrity: sha512-FVaLoPT1fBgGl0J+AYebyyXJYBachGl8Oyyrf1lye4RTqCB4S0Gwkj1uM9RJyThUOvx5VUmAT1CnNh1SFHA+kw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@bruits/satteri-linux-x64-musl@0.10.5': + resolution: {integrity: sha512-EHpVAx2bqW3GINHTKkljtxVfQmVDGWIuwOYOP5YghTj+0PkBa2o8oKPRtQ9Kbsr1Fye8jtUcDjhwj2jMNugZKg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@bruits/satteri-wasm32-wasi@0.10.5': + resolution: {integrity: sha512-ypz8c/Zmipxp4IoeDa228Gstv6TLzVmNs3yC6wKCoNSOjx1iwpgzu87Y3hTkXFdwChVGU85qeUDuOIarGUZQLw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@bruits/satteri-win32-arm64-msvc@0.10.5': + resolution: {integrity: sha512-siTV88nb0LRqNpkL2gXboqCwVdq95sLtzMHS1/3eONV2gLbB3NAK46wmSMvCO/yquBvI2lvaFIfd8P12ecsxBw==} + cpu: [arm64] + os: [win32] + + '@bruits/satteri-win32-x64-msvc@0.10.5': + resolution: {integrity: sha512-C3IfPvfvMXmlzBxaMPKFS1XiuV9pu2mC7YqkPk7PSvTgPZ8gbdASIpHpztDLvTTQjqZ0z1Ol8tK5X+V6XXC0wQ==} + cpu: [x64] + os: [win32] + + '@capsizecss/unpack@4.0.1': + resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==} + engines: {node: '>=18'} + + '@cbor-extract/cbor-extract-darwin-arm64@2.2.2': + resolution: {integrity: sha512-ZKZ/F8US7JR92J4DMct6cLW/Y66o2K576+zjlEN/MevH70bFIsB10wkZEQPLzl2oNh2SMGy55xpJ9JoBRl5DOA==} + cpu: [arm64] + os: [darwin] + + '@cbor-extract/cbor-extract-darwin-x64@2.2.2': + resolution: {integrity: sha512-32b1mgc+P61Js+KW9VZv/c+xRw5EfmOcPx990JbCBSkYJFY0l25VinvyyWfl+3KjibQmAcYwmyzKF9J4DyKP/Q==} + cpu: [x64] + os: [darwin] + + '@cbor-extract/cbor-extract-linux-arm64@2.2.2': + resolution: {integrity: sha512-wfqgzqCAy/Vn8i6WVIh7qZd0DdBFaWBjPdB6ma+Wihcjv0gHqD/mw3ouVv7kbbUNrab6dKEx/w3xQZEdeXIlzg==} + cpu: [arm64] + os: [linux] + + '@cbor-extract/cbor-extract-linux-arm@2.2.2': + resolution: {integrity: sha512-tNg0za41TpQfkhWjptD+0gSD2fggMiDCSacuIeELyb2xZhr7PrhPe5h66Jc67B/5dmpIhI2QOUtv4SBsricyYQ==} + cpu: [arm] + os: [linux] + + '@cbor-extract/cbor-extract-linux-x64@2.2.2': + resolution: {integrity: sha512-rpiLnVEsqtPJ+mXTdx1rfz4RtUGYIUg2rUAZgd1KjiC1SehYUSkJN7Yh+aVfSjvCGtVP0/bfkQkXpPXKbmSUaA==} + cpu: [x64] + os: [linux] + + '@cbor-extract/cbor-extract-win32-x64@2.2.2': + resolution: {integrity: sha512-dI+9P7cfWxkTQ+oE+7Aa6onEn92PHgfWXZivjNheCRmTBDBf2fx6RyTi0cmgpYLnD1KLZK9ZYrMxaPZ4oiXhGA==} + cpu: [x64] + os: [win32] + + '@chevrotain/types@11.1.2': + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + + '@clack/core@1.5.1': + resolution: {integrity: sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ==} + engines: {node: '>= 20.12.0'} + + '@clack/prompts@1.8.1': + resolution: {integrity: sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==} + engines: {node: '>= 20.12.0'} + + '@commitlint/cli@17.8.1': + resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==} engines: {node: '>=v14'} hasBin: true + + '@commitlint/config-conventional@17.8.1': + resolution: {integrity: sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==} + engines: {node: '>=v14'} + + '@commitlint/config-validator@17.8.1': + resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} + engines: {node: '>=v14'} + + '@commitlint/config-validator@21.2.3': + resolution: {integrity: sha512-JQ13v0GafSM4fBYX8UowSy++07Was20auq0NcTdnzSEq6/05Cq5GBUMIfKkqjzyBwC9sJFmPpKWgLLhH7cygkw==} + engines: {node: '>=22.12.0'} + + '@commitlint/ensure@17.8.1': + resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} + engines: {node: '>=v14'} + + '@commitlint/execute-rule@17.8.1': + resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} + engines: {node: '>=v14'} + + '@commitlint/execute-rule@21.0.1': + resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} + engines: {node: '>=22.12.0'} + + '@commitlint/format@17.8.1': + resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} + engines: {node: '>=v14'} + + '@commitlint/is-ignored@17.8.1': + resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} + engines: {node: '>=v14'} + + '@commitlint/lint@17.8.1': + resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} + engines: {node: '>=v14'} + + '@commitlint/load@17.8.1': + resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} + engines: {node: '>=v14'} + + '@commitlint/load@21.2.3': + resolution: {integrity: sha512-cDrL8lOo23Lk7knGzQdjbFcq7z2JgvjwV6PhbESVvEc+Fe21MeLjPKBJi8nKjg7j+jh79CVbVSUbZc104thXRw==} + engines: {node: '>=22.12.0'} + + '@commitlint/message@17.8.1': + resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} + engines: {node: '>=v14'} + + '@commitlint/parse@17.8.1': + resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} + engines: {node: '>=v14'} + + '@commitlint/read@17.8.1': + resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} + engines: {node: '>=v14'} + + '@commitlint/resolve-extends@17.8.1': + resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} + engines: {node: '>=v14'} + + '@commitlint/resolve-extends@21.2.3': + resolution: {integrity: sha512-bqJdmAtXgAQel+l02uIsF7rHgKgx1AGZdGBjam7uK4XW54ZAQtB6XAIUXezYprQiCcRMpBh4fHs5JodXK4mVZA==} + engines: {node: '>=22.12.0'} + + '@commitlint/rules@17.8.1': + resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} + engines: {node: '>=v14'} + + '@commitlint/to-lines@17.8.1': + resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} + engines: {node: '>=v14'} + + '@commitlint/top-level@17.8.1': + resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} + engines: {node: '>=v14'} + + '@commitlint/types@17.8.1': + resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} + engines: {node: '>=v14'} + + '@commitlint/types@21.2.3': + resolution: {integrity: sha512-sGEA473TlCvhCGNoTBY9OXZVWdscIXdGt0dm8EpB+2MRfmt8LNh/X56P/T3nCtEB+eH5qGEa3odphSAoUxSfSQ==} + engines: {node: '>=22.12.0'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emmetio/abbreviation@2.3.3': + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + + '@emmetio/css-abbreviation@2.1.8': + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + + '@emmetio/css-parser@0.4.1': + resolution: {integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==} + + '@emmetio/html-matcher@1.3.0': + resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} + + '@emmetio/scanner@1.0.4': + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + + '@emmetio/stream-reader-utils@0.1.0': + resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} + + '@emmetio/stream-reader@2.2.0': + resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/core@1.11.3': + resolution: {integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@emnapi/wasi-threads@1.2.3': + resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==} + + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.7': + resolution: {integrity: sha512-JZHlwdID+dy+lTgbYC8NEC4zeugqeYsc6jewvzb4c58kHauJn+X7rNwQjxz5p2qSjqaEeQoLkCIQ9v/H4PK0/w==} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.35.5': + resolution: {integrity: sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.35.5': + resolution: {integrity: sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-freebsd-wasm32@0.35.5': + resolution: {integrity: sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.4': + resolution: {integrity: sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.3.4': + resolution: {integrity: sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.3.4': + resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.3.4': + resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.3.4': + resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.3.4': + resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.3.4': + resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.3.4': + resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': + resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.3.4': + resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.35.5': + resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.35.5': + resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==} + engines: {node: '>=20.9.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.35.5': + resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.35.5': + resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.35.5': + resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==} + engines: {node: '>=20.9.0'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.35.5': + resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.35.5': + resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.35.5': + resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.35.5': + resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.5': + resolution: {integrity: sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.35.5': + resolution: {integrity: sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.35.5': + resolution: {integrity: sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.35.5': + resolution: {integrity: sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [win32] + + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@mermaid-js/parser@1.2.1': + resolution: {integrity: sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw==} + + '@napi-rs/wasm-runtime@1.2.4': + resolution: {integrity: sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + + '@napi-rs/wasm-runtime@1.2.5': + resolution: {integrity: sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + '@oxc-project/types@0.152.0': + resolution: {integrity: sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==} + + '@pagefind/darwin-arm64@1.5.2': + resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} + cpu: [arm64] + os: [darwin] + + '@pagefind/darwin-x64@1.5.2': + resolution: {integrity: sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==} + cpu: [x64] + os: [darwin] + + '@pagefind/freebsd-x64@1.5.2': + resolution: {integrity: sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==} + cpu: [x64] + os: [freebsd] + + '@pagefind/linux-arm64@1.5.2': + resolution: {integrity: sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==} + cpu: [arm64] + os: [linux] + + '@pagefind/linux-x64@1.5.2': + resolution: {integrity: sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==} + cpu: [x64] + os: [linux] + + '@pagefind/windows-arm64@1.5.2': + resolution: {integrity: sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==} + cpu: [arm64] + os: [win32] + + '@pagefind/windows-x64@1.5.2': + resolution: {integrity: sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==} + cpu: [x64] + os: [win32] + + '@rolldown/binding-android-arm-eabi@1.2.12': + resolution: {integrity: sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.12': + resolution: {integrity: sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.2.12': + resolution: {integrity: sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.12': + resolution: {integrity: sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.2.12': + resolution: {integrity: sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.12': + resolution: {integrity: sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.2.12': + resolution: {integrity: sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.2.12': + resolution: {integrity: sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.2.12': + resolution: {integrity: sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.12': + resolution: {integrity: sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.2.12': + resolution: {integrity: sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.2.12': + resolution: {integrity: sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.2.12': + resolution: {integrity: sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-win32-arm64-msvc@1.2.12': + resolution: {integrity: sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.12': + resolution: {integrity: sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@shikijs/core@4.5.0': + resolution: {integrity: sha512-6CIgwq+bt2JZ3OSjb/nBkkwEf/CfpHcbam+Mg5Pllco7HAGRQ2/EFhZrrJtbyNTgKwknfVS+llsXGygiDGwJWw==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.5.0': + resolution: {integrity: sha512-Ed6UdEj84LyYkwnxM5CvSMWAD+id9ExTYri0/+x41U9zrgNifPSS9lZm0JqBP0VfYI8yr8tY5nbNq9+p9R0kFA==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.5.0': + resolution: {integrity: sha512-dKVmbJecVdB9recl8a/CU4jdpNXyjJQrIcesIkpS70s5HS02ohpnCSpMUbotPnEUzbAcLQ+S4hwZYbkBBiTcJw==} + engines: {node: '>=20'} + + '@shikijs/langs@4.5.0': + resolution: {integrity: sha512-wwBTqwduXSz0X4v9Qa2EWeFaYJEw1clCncWjoRNQRbVDu3SPRTRWucnouYapKj3b8Q+sk/41Vbc4B5c8nuYzLA==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.5.0': + resolution: {integrity: sha512-UM7ShlA8oz0OWxLLO8BmO9Ip6fVqdkt8yF0EH7nOCqHfrx1eEAzF0ZUVK7L+I8NEgeu1PEWSRlxaiPPeCb4iDg==} + engines: {node: '>=20'} + + '@shikijs/themes@4.5.0': + resolution: {integrity: sha512-zGb87H3UBbpuI4yoh5UguB1XbU+2BDU3kflM7UfZ+Cy2hWo9lBtqjSVK20gmLY6ukYl040hAypGXMgud9vul8Q==} + engines: {node: '>=20'} + + '@shikijs/types@4.5.0': + resolution: {integrity: sha512-drtPrtD8N0DENyD2cyt6Ajy+IWsiCLgMxODwLTpvH1UsN6a9jf90tNTPjqwHvA+0Lzu9e0txk8DjfqH1p9UJRw==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@simple-libs/stream-utils@2.0.0': + resolution: {integrity: sha512-fCTuZK4QBa+39Oz9l4OGfJfz+GpwCp3AqO7Zch3to99xHPgstVsRFpeQ8LNd2o1Gv8raL2mCFwiaHh7bFSp5DQ==} + engines: {node: '>=22'} + + '@tsconfig/node10@1.0.13': + resolution: {integrity: sha512-gcLdvR9HO1ZJBypsOGqaP6TFEzb6vIta0KSTLt9NAQ6pXQO3cRgSVyCN6pzYqI9DlJgY71XKO0dpDhCf08b3pg==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tybys/wasm-util@0.10.4': + resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==} + + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.1': + resolution: {integrity: sha512-65Emv9fQiQQqphLlRkuQ5ypPsOmWPhtBGCMv61JDPEPMvsx+gzhGf74yw1a78xFKPj6zw4AgQICJoQv0vK9M2w==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.4': + resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.12': + resolution: {integrity: sha512-Qe/KWYhEiIIxGs7HrAAjMfShxKldx19SJtr5zu53f3afPsdZNz7HHtdTLXo/kqeiWNXVycI24kSnfzBYkTzpgw==} + + '@types/d3-shape@3.2.0': + resolution: {integrity: sha512-kVd74ta9eof3eJOvbNd1vGKS/XERRyQbT26Og63hIsvDO84cjD5gEOhsXf26w3FSoNlPVz84DOFcKv/oou+fMw==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.9': + resolution: {integrity: sha512-0sE1406XBYJGiqD3AusTl9ZqC//2mIXix51tbom25gDCA8ri4xnSZg28CaSE8Srl6FClqABUKfsn0qghgdepMA==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + + '@types/node@20.5.1': + resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} + + '@types/node@22.20.5': + resolution: {integrity: sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==} + + '@types/node@24.19.1': + resolution: {integrity: sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@ungap/structured-clone@1.4.0': + resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} + + '@upsetjs/venn.js@2.0.0': + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} + + '@volar/kit@2.4.28': + resolution: {integrity: sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==} + peerDependencies: + typescript: '*' + + '@volar/language-core@2.4.28': + resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} + + '@volar/language-server@2.4.28': + resolution: {integrity: sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==} + + '@volar/language-service@2.4.28': + resolution: {integrity: sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==} + + '@volar/source-map@2.4.28': + resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + + '@vscode/emmet-helper@2.11.0': + resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} + + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + + acorn@8.19.0: + resolution: {integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-i18n@4.2.0: + resolution: {integrity: sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg==} + peerDependencies: + ajv: ^8.0.0-beta.0 + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + am-i-vibing@0.4.0: + resolution: {integrity: sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==} + hasBin: true + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.4.0: + resolution: {integrity: sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + argue-cli@3.2.0: + resolution: {integrity: sha512-VipTB0gXgGIFO2Rg9yEVN5wLt2AurJcZqDbgmYSwPwsykhLrQhs240/bfceev4w68lI8JshoOJIk9uW7tFzROw==} + engines: {node: '>=22'} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + astro@7.3.5: + resolution: {integrity: sha512-1p/ernaq/RuESbM5NMjWzbO6SiebMGrGcYlGjMfBhzzgM+n/X7AUmVyw8BqW2QYCdivpsHwJBcD1fqmlTZjZHg==} + engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + peerDependencies: + '@astrojs/markdown-remark': ^7.3.0 + peerDependenciesMeta: + '@astrojs/markdown-remark': + optional: true + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.21: + resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + cachedir@2.4.0: + resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} + engines: {node: '>=6'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + cbor-extract@2.2.2: + resolution: {integrity: sha512-hlSxxI9XO2yQfe9g6msd3g4xCfDqK5T5P0fRMLuaLHhxn4ViPrm+a+MUfhrvH2W962RGxcBwEGzLQyjbDG1gng==} + hasBin: true + + cbor-x@1.6.6: + resolution: {integrity: sha512-8QiD9PGOxyQHo7s2pzwTBH6lTjqekxPdl9Aq6fXvZgCuCJHOht1puDEA/fTr6mciB76c+M+Gi0qT2i1a4pm4Wg==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + commitizen@4.3.2: + resolution: {integrity: sha512-1Zs37z9JPvAcuTSSricZZwBhOPVNNxJouuY4yDEt+eD70EoxT2TU9kViG8CuB/PmVg2G4XsAGQiK4YCst97aDQ==} + engines: {node: '>= 18'} + hasBin: true + + common-ancestor-path@2.0.0: + resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} + engines: {node: '>= 18'} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + conventional-changelog-angular@6.0.0: + resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} + engines: {node: '>=14'} + + conventional-changelog-conventionalcommits@6.1.0: + resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} + engines: {node: '>=14'} + + conventional-commit-types@3.0.0: + resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} + + conventional-commits-parser@4.0.0: + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} + hasBin: true + + conventional-commits-parser@7.1.3: + resolution: {integrity: sha512-Q9oWm1o9uy/oEsZQIraoFMZ4RuPD+79KgwWj6mJVP356tazolCB0piRLZ5Kz9te9p027uSEcUW+Gu44Eh+X79g==} + engines: {node: '>=22'} + hasBin: true + + cookie-es@1.2.3: + resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} + + cookie@2.0.1: + resolution: {integrity: sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==} + engines: {node: '>=22'} + + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + + cosmiconfig-typescript-loader@4.4.0: + resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} + engines: {node: '>=v14.21.3'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=7' + ts-node: '>=10' + typescript: '>=4' + + cosmiconfig-typescript-loader@6.3.0: + resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cosmiconfig@9.0.2: + resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-select@6.0.0: + resolution: {integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@7.0.0: + resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} + engines: {node: '>= 6'} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.34.3: + resolution: {integrity: sha512-yfYGhRcGAntq6YBD583j4n0Eg3jIxvWmZtz/5uz9UYkeIStSlMxuUja+ec5j3iBD8nv1rwaOAYMW09tBdkSeaQ==} + engines: {node: '>=0.10'} + + cz-conventional-changelog@3.3.0: + resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} + engines: {node: '>= 10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.14: + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} + + dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + + dayjs@1.11.23: + resolution: {integrity: sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-file@1.0.0: + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} + engines: {node: '>=0.10.0'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + devalue@5.9.4: + resolution: {integrity: sha512-sPAT4pztbu6586/hrhOnMKS17IJrvg12mXiSPSS3W5qDeN2RGgvZ0diZCm31dBbnevfVmujNO3IM2wrS4Y2Rhg==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diff@4.0.4: + resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} + engines: {node: '>=0.3.1'} + + diff@9.0.0: + resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==} + engines: {node: '>=0.3.1'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + dompurify@3.4.16: + resolution: {integrity: sha512-sqo+pNp3qRhCIpbgRi1y8Tgk27Bo2Ry7w0dC1NBeNTdZChWjz9Xb/KOoZbRP/R6pQZ80Qw8YhXw13hWWBbMRnQ==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + + emmet@2.4.11: + resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} + + es-toolkit@1.52.0: + resolution: {integrity: sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.1: + resolution: {integrity: sha512-B0np3dcdxqILX5e9nEi5/Fr4K7gL4oYFVPV1zRa2e9wRCbQoZZNWOZFYyoInvXUPJXBXjss+QXlWLJChDEHDkA==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + + fast-uri@3.1.8: + resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==} + + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + + fastdom@1.0.12: + resolution: {integrity: sha512-LB+xjSTEbjHE1cWsxu+tN2Xqr1kpi+V9aADI7sVM5ZMaXyYGPHULQMzpJMYqOTULK/73pUkWVzzObFRBkPr+hg==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-node-modules@2.1.3: + resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} + + find-proc@0.2.0: + resolution: {integrity: sha512-a6h2nTrgB3g5Wrn4au9Ux4kMk7IJtyF6oA8uGn+mk3weLZssUtc1cp6meHIzzuW2o1srrBAxzkmXLbqjRkgB6w==} + engines: {node: ^20.19.0 || >=22.12.0} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + findup-sync@4.0.0: + resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} + engines: {node: '>= 8'} + + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + fontace@0.4.1: + resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} + + fontkitten@1.0.3: + resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} + engines: {node: '>=20'} + + fs-extra@11.4.1: + resolution: {integrity: sha512-KYAb4c9BJQI6QqGKthV68OHe0badztdXJWKo0WtBA9IuCFPTKvE5ZdUBglP833aMjhaSPNO4A5j/EkzZtGlKjA==} + engines: {node: '>=14.14'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.7.0: + resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==} + engines: {node: '>=18'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-tsconfig@5.0.0-beta.4: + resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} + engines: {node: '>=20.20.0'} + + git-cz@4.9.0: + resolution: {integrity: sha512-cSRL8IIOXU7UFLdbziCYqg8f8InwLwqHezkiRHNSph7oZqGv0togId1kMTfKil6gzK0VaSXeVBb4oDl0fQCHiw==} + hasBin: true + + git-raw-commits@2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@5.0.0: + resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} + engines: {node: '>=20'} + + global-dirs@0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + + global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + + global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gsap@3.15.0: + resolution: {integrity: sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==} + + h3@1.15.11: + resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} + + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + http-cache-semantics@4.3.0: + resolution: {integrity: sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + inquirer@8.2.7: + resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} + engines: {node: '>=12.0.0'} + + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-core-module@2.17.0: + resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} + engines: {node: '>= 0.4'} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@4.0.0: + resolution: {integrity: sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==} + engines: {node: '>=20'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-text-path@1.0.1: + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-utf8@0.2.1: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + katex@0.16.47: + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} + hasBin: true + + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.isfunction@3.0.9: + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.map@4.6.0: + resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + longest@2.0.1: + resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} + engines: {node: '>=0.10.0'} + + lru-cache@11.5.3: + resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==} + engines: {node: 20 || >=22} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@1.4.3: + resolution: {integrity: sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==} + + magicast@0.5.5: + resolution: {integrity: sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-find-and-replace@3.0.3: + resolution: {integrity: sha512-xPgpDNl0/OXHsI7TlaIs22lWnH3KlpvZdXG1ET/m/YT2Hhdkx8lJV4kLphE6l9simyM4KPDFBwas08BgEob6Jw==} + + mdast-util-from-markdown@2.1.0: + resolution: {integrity: sha512-KRLgmPaP2H1ul2bpoJkOS+9pAcDAAj9Nu1mqLnh8NLeJG5tlvj42TH80PIGBpROWlRXLk0lDrWNuZCFy/tsB4A==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.1: + resolution: {integrity: sha512-OuJHqvr455pwu2OaOrir7dbzqs4jlWKOtlu9L6GjcIjjQwNyw02VntQsr/Ek6/A13vgnXfUhBekWRUP1OkNivw==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.2.0: + resolution: {integrity: sha512-2Jn/ADrHFFyyniBMi0bncTbJqU78K3/TEYvzvwrWWzD9MYPUa/Gm4r3nOeKFQg/PDM5BsbDYdc8ackW4NTY6NA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + + meow@8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge@2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + + mermaid@11.17.2: + resolution: {integrity: sha512-V6K3C8EBdEsPFZXSKMJe6ppQOENxuHARr9GvHX4hh47lAbhMRD9qf4oEK7LoaRQxULMa80/qt5gHO73aCleBBg==} + + micromark-core-commonmark@2.0.4: + resolution: {integrity: sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.2: + resolution: {integrity: sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.1.0: + resolution: {integrity: sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-edit-map@1.0.0: + resolution: {integrity: sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.3: + resolution: {integrity: sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==} + + micromark@4.0.3: + resolution: {integrity: sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + nanoid@3.3.20: + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + neotraverse@1.0.1: + resolution: {integrity: sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==} + engines: {node: '>= 10'} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-gyp-build-optional-packages@5.1.1: + resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} + hasBin: true + + node-mock-http@1.0.5: + resolution: {integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + obug@3.0.0: + resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==} + engines: {node: '>=12.20.0'} + + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + ohash@2.0.12: + resolution: {integrity: sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@7.3.3: + resolution: {integrity: sha512-SKgVvDU5TNIxQ4r30U75BNLC6a+6GOEjngrk/ysM5+Zu3oJuk1SC5ApzIzY/7PjCEjoVPMWJ0zho/4QUiEB7TQ==} + engines: {node: '>=20'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-queue@9.3.3: + resolution: {integrity: sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==} + engines: {node: '>=20'} + + p-timeout@7.0.2: + resolution: {integrity: sha512-prbX4Z3YszrFNgH+MW5Zoeq3baXrMtP/MQnFeET90UB/GtGcGDQ5Usg9OCy6ETjTTntOw1SL2z9fMPUppN3Guw==} + engines: {node: '>=20'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@1.9.0: + resolution: {integrity: sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA==} + + pagefind@1.5.2: + resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} + hasBin: true + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + + postcss@8.5.29: + resolution: {integrity: sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.9.9: + resolution: {integrity: sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==} + engines: {node: '>=14'} + hasBin: true + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + process-ancestry@0.1.0: + resolution: {integrity: sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==} + engines: {node: '>=18.0.0'} + + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + readdirp@5.1.1: + resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} + engines: {node: '>= 20.19.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-smartypants@3.0.3: + resolution: {integrity: sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==} + engines: {node: '>=16.0.0'} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + request-light@0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + + request-light@0.7.0: + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-global@1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + + rolldown@1.2.12: + resolution: {integrity: sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + satteri@0.10.5: + resolution: {integrity: sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ==} + + sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + sharp@0.35.5: + resolution: {integrity: sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@4.5.0: + resolution: {integrity: sha512-OcRW72ngQvc+MSVWBRIovC/BTW589iUE/Vxav7VeM4RcY9MUjqB+IR6ILG1k9nuW6LiG/nct9uma4/MBtnZbmQ==} + engines: {node: '>=20'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + sitemap@9.0.1: + resolution: {integrity: sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==} + engines: {node: '>=20.19.5', npm: '>=10.8.2'} + hasBin: true + + smol-toml@1.9.0: + resolution: {integrity: sha512-hpd+HLON7HdZXqYchMM/+LaTTbdK0AU3NngIJ4KVyWbY9bfQqdL9cD+4yf6dUoU2Ap4VsU0JkQi6FxAI1B2mXQ==} + engines: {node: '>= 18'} + + source-map-js@1.2.2: + resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.24: + resolution: {integrity: sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ==} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + strictdom@1.0.1: + resolution: {integrity: sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.3.0: + resolution: {integrity: sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==} + engines: {node: '>=20'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + stylis@4.4.0: + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svgo@4.1.0: + resolution: {integrity: sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==} + engines: {node: '>=16'} + hasBin: true + + text-extensions@1.9.0: + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + tinyclip@1.0.3: + resolution: {integrity: sha512-nTv2raKFMzGG6JJp0lpNDsRPdfFE6UHlu2rVEjXo8vkx1ZS3LW2CVXqIaLu8xZlu+6tbFs9V58Qc/Jmk/Ii7wA==} + engines: {node: ^16.14.0 || >= 17.3.0} + + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + engines: {node: '>=6.10'} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + typesafe-path@0.2.2: + resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} + + typescript-auto-import-cache@0.3.6: + resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + ultrahtml@1.7.0: + resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + + undici@8.11.2: + resolution: {integrity: sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==} + engines: {node: '>=22.19.0'} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unifont@0.7.5: + resolution: {integrity: sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unstorage@1.17.5: + resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6 || ^7 || ^8 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1 || ^2 || ^3 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@14.0.2: + resolution: {integrity: sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + verkit@0.4.1: + resolution: {integrity: sha512-mMVzj0TXExtVdlDEq+Mzp0eyOuyznNpFobNM3uAqe3HVm/Ps2c+u17BligMkZjZCA6EiXpoon8iRTer3iu40SQ==} + engines: {node: '>=18.12.0'} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@8.3.2: + resolution: {integrity: sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.7.1 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + volar-service-css@0.0.71: + resolution: {integrity: sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-emmet@0.0.71: + resolution: {integrity: sha512-zqjzt6bN95e3CUstBm0PBFAJnrfz0ZAARka87fart46/gNCLLuP3Vujy8V/J8HEziTFLnfkgIASLFYPUhonJcA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-html@0.0.71: + resolution: {integrity: sha512-e8tHPhgQ7ooLfudAEIku+kgd9pWkq3SSz8RbnQDI1+Eb8wbenkLGHqoirLqz5ORLV6wIMr2Iv08RWBG5eOcgpw==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-prettier@0.0.71: + resolution: {integrity: sha512-Rz7JVH3qD108UCdmIEiZvOBNljMt2nLFdbN8AXcDfn7xD9F5I2aCIsDVqBbXw21PsnxG0b7MfwtNF+zPS/NKUg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + prettier: ^2.2 || ^3.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + prettier: + optional: true + + volar-service-typescript-twoslash-queries@0.0.71: + resolution: {integrity: sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-typescript@0.0.71: + resolution: {integrity: sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-yaml@0.0.71: + resolution: {integrity: sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + vscode-css-languageservice@6.3.10: + resolution: {integrity: sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==} + + vscode-html-languageservice@5.6.2: + resolution: {integrity: sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==} + + vscode-json-languageservice@4.1.8: + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-jsonrpc@9.0.3: + resolution: {integrity: sha512-qETYf9PCl1lVfwR+oBmMfc4vP2nqLNA35ABxorw3j06+xlKRgDVxbLgKm4Y/xPL0YWdeDjLoI4ImICIT3nB0zQ==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-protocol@3.18.4: + resolution: {integrity: sha512-CCXbyr99dafRJzJH/0Ryk7ly5T8XPmSR0//OuF2w4m+9JiOin7zcAT5iET8GRE7Z9taFBejb3GbM0a0mbjdbrg==} + + vscode-languageserver-textdocument@1.0.15: + resolution: {integrity: sha512-Gsfr9S8LU3S6885cS+NaleasJ0n3V5y/SOTqHCifQiXWFw3G9w9/YItDfwHrlCz+dSZWWZ8ilYVMcJe7Sz7Sxw==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver-types@3.18.4: + resolution: {integrity: sha512-nQsacoiijvl0fRf2q28uFDrAVwRhdCa3QveiF7/CX0r18mLR5FU/1WskSsCKOjmEbtteKUnY8x8Yzxop+k0zwg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + + vscode-uri@3.2.0: + resolution: {integrity: sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-language-server@1.23.0: + resolution: {integrity: sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A==} + hasBin: true + + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} + hasBin: true + + yaml@2.9.1: + resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} + engines: {node: '>=12'} + + yargs@18.2.0: + resolution: {integrity: sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + zod@4.6.5: + resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@antfu/install-pkg@2.1.0': + dependencies: + package-manager-detector: 1.9.0 + tinyexec: 1.3.1 + + '@astrojs/astro2tsx@0.1.2(@emnapi/runtime@1.11.3)': + dependencies: + '@emnapi/core': 1.11.3 + '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + transitivePeerDependencies: + - '@emnapi/runtime' + + '@astrojs/check@0.9.10(@emnapi/runtime@1.11.3)(prettier@3.9.9)(typescript@6.0.3)': + dependencies: + '@astrojs/language-server': 2.17.1(@emnapi/runtime@1.11.3)(prettier@3.9.9)(typescript@6.0.3) + chokidar: 4.0.3 + kleur: 4.1.5 + typescript: 6.0.3 + yargs: 18.2.0 + transitivePeerDependencies: + - '@emnapi/runtime' + - prettier + - prettier-plugin-astro + + '@astrojs/compiler-binding-android-arm64@0.5.1': + optional: true + + '@astrojs/compiler-binding-darwin-arm64@0.5.1': + optional: true + + '@astrojs/compiler-binding-darwin-x64@0.5.1': + optional: true + + '@astrojs/compiler-binding-linux-arm64-gnu@0.5.1': + optional: true + + '@astrojs/compiler-binding-linux-arm64-musl@0.5.1': + optional: true + + '@astrojs/compiler-binding-linux-x64-gnu@0.5.1': + optional: true + + '@astrojs/compiler-binding-linux-x64-musl@0.5.1': + optional: true + + '@astrojs/compiler-binding-wasm32-wasi@0.5.1': + dependencies: + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@napi-rs/wasm-runtime': 1.2.5(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + optional: true + + '@astrojs/compiler-binding-win32-arm64-msvc@0.5.1': + optional: true + + '@astrojs/compiler-binding-win32-x64-msvc@0.5.1': + optional: true + + '@astrojs/compiler-binding@0.5.1': + optionalDependencies: + '@astrojs/compiler-binding-android-arm64': 0.5.1 + '@astrojs/compiler-binding-darwin-arm64': 0.5.1 + '@astrojs/compiler-binding-darwin-x64': 0.5.1 + '@astrojs/compiler-binding-linux-arm64-gnu': 0.5.1 + '@astrojs/compiler-binding-linux-arm64-musl': 0.5.1 + '@astrojs/compiler-binding-linux-x64-gnu': 0.5.1 + '@astrojs/compiler-binding-linux-x64-musl': 0.5.1 + '@astrojs/compiler-binding-wasm32-wasi': 0.5.1 + '@astrojs/compiler-binding-win32-arm64-msvc': 0.5.1 + '@astrojs/compiler-binding-win32-x64-msvc': 0.5.1 + + '@astrojs/compiler-rs@0.5.1': + dependencies: + '@astrojs/compiler-binding': 0.5.1 + + '@astrojs/internal-helpers@0.11.0': + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + js-yaml: 4.3.2 + picomatch: 4.0.7 + retext-smartypants: 6.2.0 + shiki: 4.5.0 + smol-toml: 1.9.0 + unified: 11.0.5 + + '@astrojs/language-server@2.17.1(@emnapi/runtime@1.11.3)(prettier@3.9.9)(typescript@6.0.3)': + dependencies: + '@astrojs/astro2tsx': 0.1.2(@emnapi/runtime@1.11.3) + '@astrojs/yaml2ts': 0.2.4 + '@volar/kit': 2.4.28(typescript@6.0.3) + '@volar/language-core': 2.4.28 + '@volar/language-server': 2.4.28 + '@volar/language-service': 2.4.28 + muggle-string: 0.4.1 + tinyglobby: 0.2.17 + volar-service-css: 0.0.71(@volar/language-service@2.4.28) + volar-service-emmet: 0.0.71(@volar/language-service@2.4.28) + volar-service-html: 0.0.71(@volar/language-service@2.4.28) + volar-service-prettier: 0.0.71(@volar/language-service@2.4.28)(prettier@3.9.9) + volar-service-typescript: 0.0.71(@volar/language-service@2.4.28) + volar-service-typescript-twoslash-queries: 0.0.71(@volar/language-service@2.4.28) + volar-service-yaml: 0.0.71(@volar/language-service@2.4.28) + vscode-html-languageservice: 5.6.2 + vscode-uri: 3.2.0 + optionalDependencies: + prettier: 3.9.9 + transitivePeerDependencies: + - '@emnapi/runtime' + - typescript + + '@astrojs/markdown-remark@7.3.1': + dependencies: + '@astrojs/internal-helpers': 0.11.0 + '@astrojs/prism': 4.0.2 + '@mdx-js/mdx': 3.1.1 + acorn: 8.19.0 + estree-util-visit: 2.0.0 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.3 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/markdown-satteri@0.4.2': + dependencies: + '@astrojs/internal-helpers': 0.11.0 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + satteri: 0.10.5 + + '@astrojs/prism@4.0.2': + dependencies: + prismjs: 1.30.0 + + '@astrojs/sitemap@3.7.4': + dependencies: + sitemap: 9.0.1 + zod: 4.6.5 + + '@astrojs/telemetry@3.3.3': + dependencies: + ci-info: 4.4.0 + dset: 3.1.4 + is-docker: 4.0.0 + package-manager-detector: 1.9.0 + + '@astrojs/yaml2ts@0.2.4': + dependencies: + yaml: 2.9.1 + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/parser@7.29.9': + dependencies: + '@babel/types': 7.29.8 + + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@braintree/sanitize-url@7.1.2': {} + + '@bruits/satteri-darwin-arm64@0.10.5': + optional: true + + '@bruits/satteri-darwin-x64@0.10.5': + optional: true + + '@bruits/satteri-linux-arm64-gnu@0.10.5': + optional: true + + '@bruits/satteri-linux-arm64-musl@0.10.5': + optional: true + + '@bruits/satteri-linux-x64-gnu@0.10.5': + optional: true + + '@bruits/satteri-linux-x64-musl@0.10.5': + optional: true + + '@bruits/satteri-wasm32-wasi@0.10.5': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.2.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@bruits/satteri-win32-arm64-msvc@0.10.5': + optional: true + + '@bruits/satteri-win32-x64-msvc@0.10.5': + optional: true + + '@capsizecss/unpack@4.0.1': + dependencies: + fontkitten: 1.0.3 + + '@cbor-extract/cbor-extract-darwin-arm64@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-darwin-x64@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-linux-arm64@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-linux-arm@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-linux-x64@2.2.2': + optional: true + + '@cbor-extract/cbor-extract-win32-x64@2.2.2': + optional: true + + '@chevrotain/types@11.1.2': {} + + '@clack/core@1.5.1': + dependencies: + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@clack/prompts@1.8.1': dependencies: - '@commitlint/format': 17.0.0 - '@commitlint/lint': 17.0.3 - '@commitlint/load': 17.0.3 - '@commitlint/read': 17.0.0 - '@commitlint/types': 17.0.0 + '@clack/core': 1.5.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@commitlint/cli@17.8.1': + dependencies: + '@commitlint/format': 17.8.1 + '@commitlint/lint': 17.8.1 + '@commitlint/load': 17.8.1 + '@commitlint/read': 17.8.1 + '@commitlint/types': 17.8.1 execa: 5.1.1 - lodash: 4.17.21 + lodash.isfunction: 3.0.9 resolve-from: 5.0.0 resolve-global: 1.0.0 - yargs: 17.5.1 + yargs: 17.7.3 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + '@commitlint/config-conventional@17.8.1': + dependencies: + conventional-changelog-conventionalcommits: 6.1.0 + + '@commitlint/config-validator@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + ajv: 8.20.0 + + '@commitlint/config-validator@21.2.3': + dependencies: + '@commitlint/types': 21.2.3 + ajv: 8.20.0 + optional: true + + '@commitlint/ensure@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@17.8.1': {} + + '@commitlint/execute-rule@21.0.1': + optional: true + + '@commitlint/format@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + chalk: 4.1.2 + + '@commitlint/is-ignored@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + semver: 7.5.4 + + '@commitlint/lint@17.8.1': + dependencies: + '@commitlint/is-ignored': 17.8.1 + '@commitlint/parse': 17.8.1 + '@commitlint/rules': 17.8.1 + '@commitlint/types': 17.8.1 + + '@commitlint/load@17.8.1': + dependencies: + '@commitlint/config-validator': 17.8.1 + '@commitlint/execute-rule': 17.8.1 + '@commitlint/resolve-extends': 17.8.1 + '@commitlint/types': 17.8.1 + '@types/node': 20.5.1 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@22.20.5)(typescript@6.0.3))(typescript@5.9.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + resolve-from: 5.0.0 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - dev: true - /@commitlint/config-validator/17.0.3: - resolution: {integrity: sha512-3tLRPQJKapksGE7Kee9axv+9z5I2GDHitDH4q63q7NmNA0wkB+DAorJ0RHz2/K00Zb1/MVdHzhCga34FJvDihQ==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - ajv: 8.11.0 - dev: true + '@commitlint/load@21.2.3(@types/node@22.20.5)(typescript@6.0.3)': + dependencies: + '@commitlint/config-validator': 21.2.3 + '@commitlint/execute-rule': 21.0.1 + '@commitlint/resolve-extends': 21.2.3 + '@commitlint/types': 21.2.3 + cosmiconfig: 9.0.2(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@22.20.5)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3) + es-toolkit: 1.52.0 + is-plain-obj: 4.1.0 + picocolors: 1.1.1 + transitivePeerDependencies: + - '@types/node' + - typescript + optional: true + + '@commitlint/message@17.8.1': {} + + '@commitlint/parse@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + conventional-changelog-angular: 6.0.0 + conventional-commits-parser: 4.0.0 + + '@commitlint/read@17.8.1': + dependencies: + '@commitlint/top-level': 17.8.1 + '@commitlint/types': 17.8.1 + fs-extra: 11.4.1 + git-raw-commits: 2.0.11 + minimist: 1.2.8 + + '@commitlint/resolve-extends@17.8.1': + dependencies: + '@commitlint/config-validator': 17.8.1 + '@commitlint/types': 17.8.1 + import-fresh: 3.3.1 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + + '@commitlint/resolve-extends@21.2.3': + dependencies: + '@commitlint/config-validator': 21.2.3 + '@commitlint/types': 21.2.3 + es-toolkit: 1.52.0 + global-directory: 5.0.0 + resolve-from: 5.0.0 + optional: true + + '@commitlint/rules@17.8.1': + dependencies: + '@commitlint/ensure': 17.8.1 + '@commitlint/message': 17.8.1 + '@commitlint/to-lines': 17.8.1 + '@commitlint/types': 17.8.1 + execa: 5.1.1 + + '@commitlint/to-lines@17.8.1': {} + + '@commitlint/top-level@17.8.1': + dependencies: + find-up: 5.0.0 + + '@commitlint/types@17.8.1': + dependencies: + chalk: 4.1.2 + + '@commitlint/types@21.2.3': + dependencies: + conventional-commits-parser: 7.1.3 + picocolors: 1.1.1 + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emmetio/abbreviation@2.3.3': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-abbreviation@2.1.8': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-parser@0.4.1': + dependencies: + '@emmetio/stream-reader': 2.2.0 + '@emmetio/stream-reader-utils': 0.1.0 + + '@emmetio/html-matcher@1.3.0': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/scanner@1.0.4': {} + + '@emmetio/stream-reader-utils@0.1.0': {} + + '@emmetio/stream-reader@2.2.0': {} + + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.3': + dependencies: + '@emnapi/wasi-threads': 1.2.3 + tslib: 2.8.1 + + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.3': + dependencies: + tslib: 2.8.1 + + '@esbuild/aix-ppc64@0.28.2': + optional: true + + '@esbuild/android-arm64@0.28.2': + optional: true + + '@esbuild/android-arm@0.28.2': + optional: true + + '@esbuild/android-x64@0.28.2': + optional: true + + '@esbuild/darwin-arm64@0.28.2': + optional: true + + '@esbuild/darwin-x64@0.28.2': + optional: true + + '@esbuild/freebsd-arm64@0.28.2': + optional: true + + '@esbuild/freebsd-x64@0.28.2': + optional: true + + '@esbuild/linux-arm64@0.28.2': + optional: true + + '@esbuild/linux-arm@0.28.2': + optional: true + + '@esbuild/linux-ia32@0.28.2': + optional: true + + '@esbuild/linux-loong64@0.28.2': + optional: true + + '@esbuild/linux-mips64el@0.28.2': + optional: true + + '@esbuild/linux-ppc64@0.28.2': + optional: true + + '@esbuild/linux-riscv64@0.28.2': + optional: true + + '@esbuild/linux-s390x@0.28.2': + optional: true + + '@esbuild/linux-x64@0.28.2': + optional: true + + '@esbuild/netbsd-arm64@0.28.2': + optional: true + + '@esbuild/netbsd-x64@0.28.2': + optional: true + + '@esbuild/openbsd-arm64@0.28.2': + optional: true + + '@esbuild/openbsd-x64@0.28.2': + optional: true + + '@esbuild/openharmony-arm64@0.28.2': + optional: true + + '@esbuild/sunos-x64@0.28.2': + optional: true + + '@esbuild/win32-arm64@0.28.2': + optional: true + + '@esbuild/win32-ia32@0.28.2': + optional: true + + '@esbuild/win32-x64@0.28.2': + optional: true + + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.7': + dependencies: + '@antfu/install-pkg': 2.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.4 + optional: true + + '@img/sharp-darwin-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.4 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.5': + dependencies: + '@img/sharp-wasm32': 0.35.5 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.3.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.3.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.3.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.3.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.3.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.3.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.3.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.3.4': + optional: true + + '@img/sharp-linux-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.4 + optional: true - /@commitlint/ensure/17.0.0: - resolution: {integrity: sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - lodash: registry.npmmirror.com/lodash/4.17.21 - dev: true + '@img/sharp-linux-arm@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.4 + optional: true - /@commitlint/execute-rule/17.0.0: - resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} - engines: {node: '>=v14'} - dev: true + '@img/sharp-linux-ppc64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.4 + optional: true - /@commitlint/format/17.0.0: - resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - chalk: 4.1.2 - dev: true + '@img/sharp-linux-riscv64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.4 + optional: true - /@commitlint/is-ignored/17.0.3: - resolution: {integrity: sha512-/wgCXAvPtFTQZxsVxj7owLeRf5wwzcXLaYmrZPR4a87iD4sCvUIRl1/ogYrtOyUmHwWfQsvjqIB4mWE/SqWSnA==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - semver: 7.3.7 - dev: true + '@img/sharp-linux-s390x@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.4 + optional: true - /@commitlint/lint/17.0.3: - resolution: {integrity: sha512-2o1fk7JUdxBUgszyt41sHC/8Nd5PXNpkmuOo9jvGIjDHzOwXyV0PSdbEVTH3xGz9NEmjohFHr5l+N+T9fcxong==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/is-ignored': 17.0.3 - '@commitlint/parse': 17.0.0 - '@commitlint/rules': 17.0.0 - '@commitlint/types': 17.0.0 - dev: true + '@img/sharp-linux-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.4 + optional: true - /@commitlint/load/17.0.3: - resolution: {integrity: sha512-3Dhvr7GcKbKa/ey4QJ5MZH3+J7QFlARohUow6hftQyNjzoXXROm+RwpBes4dDFrXG1xDw9QPXA7uzrOShCd4bw==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/config-validator': 17.0.3 - '@commitlint/execute-rule': 17.0.0 - '@commitlint/resolve-extends': 17.0.3 - '@commitlint/types': 17.0.0 - '@types/node': 17.0.32 - chalk: 4.1.2 - cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 2.0.2_wkok7lthibal5qjhsdd5yq2cfe - lodash: 4.17.21 - resolve-from: 5.0.0 - typescript: 4.7.4 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true + '@img/sharp-linuxmusl-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 + optional: true - /@commitlint/message/17.0.0: - resolution: {integrity: sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==} - engines: {node: '>=v14'} - dev: true + '@img/sharp-linuxmusl-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 + optional: true - /@commitlint/parse/17.0.0: - resolution: {integrity: sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==} - engines: {node: '>=v14'} + '@img/sharp-wasm32@0.35.5': dependencies: - '@commitlint/types': 17.0.0 - conventional-changelog-angular: 5.0.13 - conventional-commits-parser: 3.2.4 - dev: true + '@emnapi/runtime': 1.11.3 + optional: true - /@commitlint/read/17.0.0: - resolution: {integrity: sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==} - engines: {node: '>=v14'} + '@img/sharp-webcontainers-wasm32@0.35.5': dependencies: - '@commitlint/top-level': 17.0.0 - '@commitlint/types': 17.0.0 - fs-extra: 10.1.0 - git-raw-commits: 2.0.11 - dev: true + '@img/sharp-wasm32': 0.35.5 + optional: true - /@commitlint/resolve-extends/17.0.3: - resolution: {integrity: sha512-H/RFMvrcBeJCMdnVC4i8I94108UDccIHrTke2tyQEg9nXQnR5/Hd6MhyNWkREvcrxh9Y+33JLb+PiPiaBxCtBA==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/config-validator': 17.0.3 - '@commitlint/types': 17.0.0 - import-fresh: 3.3.0 - lodash: 4.17.21 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - dev: true + '@img/sharp-win32-arm64@0.35.5': + optional: true - /@commitlint/rules/17.0.0: - resolution: {integrity: sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==} - engines: {node: '>=v14'} + '@img/sharp-win32-ia32@0.35.5': + optional: true + + '@img/sharp-win32-x64@0.35.5': + optional: true + + '@inquirer/external-editor@1.0.3(@types/node@22.20.5)': dependencies: - '@commitlint/ensure': 17.0.0 - '@commitlint/message': 17.0.0 - '@commitlint/to-lines': 17.0.0 - '@commitlint/types': 17.0.0 - execa: registry.npmmirror.com/execa/5.1.1 - dev: true + chardet: 2.2.0 + iconv-lite: 0.7.3 + optionalDependencies: + '@types/node': 22.20.5 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.6.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.6.0 + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdx': 2.0.14 + acorn: 8.19.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.1 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.19.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color - /@commitlint/to-lines/17.0.0: - resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} - engines: {node: '>=v14'} - dev: true + '@mermaid-js/parser@1.2.1': + dependencies: + '@chevrotain/types': 11.1.2 - /@commitlint/top-level/17.0.0: - resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} - engines: {node: '>=v14'} + '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: - find-up: 5.0.0 - dev: true + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@tybys/wasm-util': 0.10.4 - /@commitlint/types/17.0.0: - resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} - engines: {node: '>=v14'} + '@napi-rs/wasm-runtime@1.2.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - chalk: 4.1.2 - dev: true + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.4 + optional: true - /@cspotcode/source-map-support/0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@napi-rs/wasm-runtime@1.2.5(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.9 - dev: true + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@tybys/wasm-util': 0.10.4 + optional: true - /@tsconfig/node10/1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true + '@oslojs/encoding@1.1.0': {} - /@tsconfig/node12/1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@oxc-project/types@0.152.0': {} - /@tsconfig/node14/1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@pagefind/darwin-arm64@1.5.2': + optional: true - /@tsconfig/node16/1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true + '@pagefind/darwin-x64@1.5.2': + optional: true - /@types/minimist/1.2.2: - resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - dev: true + '@pagefind/freebsd-x64@1.5.2': + optional: true - /@types/node/17.0.32: - resolution: {integrity: sha512-eAIcfAvhf/BkHcf4pkLJ7ECpBAhh9kcxRBpip9cTiO+hf+aJrsxYxBeS6OXvOd9WqNAJmavXVpZvY1rBjNsXmw==} - dev: true + '@pagefind/linux-arm64@1.5.2': + optional: true - /@types/normalize-package-data/2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - dev: true + '@pagefind/linux-x64@1.5.2': + optional: true - /@types/parse-json/4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: true + '@pagefind/windows-arm64@1.5.2': + optional: true - /JSONStream/1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true + '@pagefind/windows-x64@1.5.2': + optional: true - /acorn-walk/8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true + '@rolldown/binding-android-arm-eabi@1.2.12': + optional: true - /ajv/8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - dependencies: - fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true + '@rolldown/binding-android-arm64@1.2.12': + optional: true - /ansi-escapes/3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} - engines: {node: '>=4'} - dev: true + '@rolldown/binding-darwin-arm64@1.2.12': + optional: true - /ansi-regex/4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} - dev: true + '@rolldown/binding-darwin-x64@1.2.12': + optional: true - /ansi-styles/3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true + '@rolldown/binding-freebsd-x64@1.2.12': + optional: true - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: registry.npmmirror.com/color-convert/2.0.1 - dev: true + '@rolldown/binding-linux-arm-gnueabihf@1.2.12': + optional: true - /array-ify/1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - dev: true + '@rolldown/binding-linux-arm64-gnu@1.2.12': + optional: true - /arrify/1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + '@rolldown/binding-linux-arm64-musl@1.2.12': + optional: true - /balanced-match/1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + '@rolldown/binding-linux-ppc64-gnu@1.2.12': + optional: true - /brace-expansion/1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true + '@rolldown/binding-linux-s390x-gnu@1.2.12': + optional: true - /cachedir/2.2.0: - resolution: {integrity: sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==} - engines: {node: '>=6'} - dev: true + '@rolldown/binding-linux-x64-gnu@1.2.12': + optional: true - /camelcase-keys/6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - dev: true + '@rolldown/binding-linux-x64-musl@1.2.12': + optional: true - /camelcase/5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + '@rolldown/binding-openharmony-arm64@1.2.12': + optional: true - /chalk/2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true + '@rolldown/binding-win32-arm64-msvc@1.2.12': + optional: true - /chalk/4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true + '@rolldown/binding-win32-x64-msvc@1.2.12': + optional: true - /chardet/0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + '@rolldown/pluginutils@1.0.1': {} - /cli-cursor/2.1.0: - resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} - engines: {node: '>=4'} + '@shikijs/core@4.5.0': dependencies: - restore-cursor: 2.0.0 - dev: true + '@shikijs/primitive': 4.5.0 + '@shikijs/types': 4.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 - /cli-width/2.2.1: - resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} - dev: true + '@shikijs/engine-javascript@4.5.0': + dependencies: + '@shikijs/types': 4.5.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + '@shikijs/engine-oniguruma@4.5.0': dependencies: - string-width: 4.2.3 - strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 - wrap-ansi: 7.0.0 - dev: true + '@shikijs/types': 4.5.0 + '@shikijs/vscode-textmate': 10.0.2 - /color-convert/1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + '@shikijs/langs@4.5.0': dependencies: - color-name: registry.npmmirror.com/color-name/1.1.3 - dev: true + '@shikijs/types': 4.5.0 - /commitizen/4.2.4: - resolution: {integrity: sha512-LlZChbDzg3Ir3O2S7jSo/cgWp5/QwylQVr59K4xayVq8S4/RdKzSyJkghAiZZHfhh5t4pxunUoyeg0ml1q/7aw==} - engines: {node: '>= 10'} - hasBin: true + '@shikijs/primitive@4.5.0': dependencies: - cachedir: 2.2.0 - cz-conventional-changelog: 3.2.0 - dedent: 0.7.0 - detect-indent: 6.0.0 - find-node-modules: 2.1.3 - find-root: 1.1.0 - fs-extra: 8.1.0 - glob: 7.1.4 - inquirer: 6.5.2 - is-utf8: 0.2.1 - lodash: 4.17.21 - minimist: 1.2.5 - strip-bom: 4.0.0 - strip-json-comments: 3.0.1 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true + '@shikijs/types': 4.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 - /compare-func/2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + '@shikijs/themes@4.5.0': dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - dev: true + '@shikijs/types': 4.5.0 + + '@shikijs/types@4.5.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 - /concat-map/0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - dev: true + '@shikijs/vscode-textmate@10.0.2': {} - /conventional-changelog-angular/5.0.13: - resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} - engines: {node: '>=10'} + '@simple-libs/stream-utils@2.0.0': + optional: true + + '@tsconfig/node10@1.0.13': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@tybys/wasm-util@0.10.4': dependencies: - compare-func: 2.0.0 - q: 1.5.1 - dev: true + tslib: 2.8.1 - /conventional-commit-types/3.0.0: - resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} - dev: true + '@types/d3-array@3.2.2': {} - /conventional-commits-parser/3.2.4: - resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} - engines: {node: '>=10'} - hasBin: true + '@types/d3-axis@3.0.6': dependencies: - JSONStream: 1.3.5 - is-text-path: 1.0.1 - lodash: registry.npmmirror.com/lodash/4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - dev: true + '@types/d3-selection': 3.0.12 - /cosmiconfig-typescript-loader/2.0.2_wkok7lthibal5qjhsdd5yq2cfe: - resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@types/node': '*' - typescript: '>=3' + '@types/d3-brush@3.0.6': dependencies: - '@types/node': 17.0.32 - cosmiconfig: 7.0.1 - ts-node: 10.8.2_wkok7lthibal5qjhsdd5yq2cfe - typescript: 4.7.4 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true + '@types/d3-selection': 3.0.12 - /cosmiconfig/7.0.1: - resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} - engines: {node: '>=10'} + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': dependencies: - '@types/parse-json': 4.0.0 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: true + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 - /create-require/1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + '@types/d3-delaunay@6.0.4': {} - /cross-spawn/7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true + '@types/d3-selection': 3.0.12 - /cz-conventional-changelog/3.2.0: - resolution: {integrity: sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==} - engines: {node: '>= 10'} + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': dependencies: - chalk: 2.4.2 - commitizen: 4.2.4 - conventional-commit-types: 3.0.0 - lodash.map: 4.6.0 - longest: 2.0.1 - word-wrap: 1.2.3 - optionalDependencies: - '@commitlint/load': registry.npmmirror.com/@commitlint/load/17.0.3 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true + '@types/d3-dsv': 3.0.7 - /cz-conventional-changelog/3.3.0: - resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} - engines: {node: '>= 10'} + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.1': dependencies: - chalk: 2.4.2 - commitizen: 4.2.4 - conventional-commit-types: 3.0.0 - lodash.map: 4.6.0 - longest: 2.0.1 - word-wrap: 1.2.3 - optionalDependencies: - '@commitlint/load': registry.npmmirror.com/@commitlint/load/17.0.3 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true + '@types/geojson': 7946.0.16 - /dargs/7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - dev: true + '@types/d3-hierarchy@3.1.7': {} - /decamelize-keys/1.1.0: - resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} - engines: {node: '>=0.10.0'} + '@types/d3-interpolate@3.0.4': dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true + '@types/d3-color': 3.1.3 - /decamelize/1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + '@types/d3-path@3.1.1': {} - /dedent/0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: true + '@types/d3-polygon@3.0.2': {} - /detect-file/1.0.0: - resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} - engines: {node: '>=0.10.0'} - dev: true + '@types/d3-quadtree@3.0.6': {} - /detect-indent/6.0.0: - resolution: {integrity: sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==} - engines: {node: '>=8'} - dev: true + '@types/d3-random@3.0.4': {} - /diff/4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + '@types/d3-scale-chromatic@3.1.0': {} - /dot-prop/5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} + '@types/d3-scale@4.0.9': dependencies: - is-obj: registry.npmmirror.com/is-obj/2.0.0 - dev: true + '@types/d3-time': 3.0.4 - /emoji-regex/8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + '@types/d3-selection@3.0.12': {} - /error-ex/1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + '@types/d3-shape@3.2.0': dependencies: - is-arrayish: registry.npmmirror.com/is-arrayish/0.2.1 - dev: true + '@types/d3-path': 3.1.1 - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true + '@types/d3-time-format@4.0.3': {} - /escape-string-regexp/1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + '@types/d3-time@3.0.4': {} - /execa/5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true + '@types/d3-selection': 3.0.12 - /expand-tilde/2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} + '@types/d3-zoom@3.0.9': dependencies: - homedir-polyfill: 1.0.3 - dev: true + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.12 - /external-editor/3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + '@types/d3@7.4.3': dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.1 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.12 + '@types/d3-shape': 3.2.0 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.9 - /figures/2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} + '@types/debug@4.1.13': dependencies: - escape-string-regexp: 1.0.5 - dev: true + '@types/ms': 2.1.0 - /find-node-modules/2.1.3: - resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} + '@types/estree-jsx@1.0.5': dependencies: - findup-sync: 4.0.0 - merge: 2.1.1 - dev: true + '@types/estree': 1.0.9 - /find-root/1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: true + '@types/estree@1.0.9': {} - /find-up/4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + '@types/geojson@7946.0.16': {} + + '@types/hast@3.0.5': dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true + '@types/unist': 3.0.3 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.14': {} + + '@types/minimist@1.2.5': {} - /find-up/5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + '@types/ms@2.1.0': {} + + '@types/nlcst@2.0.3': dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true + '@types/unist': 3.0.3 - /findup-sync/4.0.0: - resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} - engines: {node: '>= 8'} + '@types/node@20.5.1': {} + + '@types/node@22.20.5': dependencies: - detect-file: 1.0.0 - is-glob: 4.0.3 - micromatch: 4.0.5 - resolve-dir: 1.0.1 - dev: true + undici-types: 6.21.0 - /fs-extra/10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + '@types/node@24.19.1': dependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 - jsonfile: registry.npmmirror.com/jsonfile/6.1.0 - universalify: registry.npmmirror.com/universalify/2.0.0 - dev: true + undici-types: 7.24.6 - /fs-extra/8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + '@types/normalize-package-data@2.4.4': {} + + '@types/sax@1.2.7': dependencies: - graceful-fs: 4.2.10 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true + '@types/node': 22.20.5 - /fs.realpath/1.0.0: - resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} - dev: true + '@types/trusted-types@2.0.7': + optional: true - /get-caller-file/2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + '@types/unist@2.0.11': {} - /get-stream/6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + '@types/unist@3.0.3': {} - /git-cz/4.9.0: - resolution: {integrity: sha512-cSRL8IIOXU7UFLdbziCYqg8f8InwLwqHezkiRHNSph7oZqGv0togId1kMTfKil6gzK0VaSXeVBb4oDl0fQCHiw==} - hasBin: true - dev: true + '@ungap/structured-clone@1.4.0': {} - /git-raw-commits/2.0.11: - resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} - engines: {node: '>=10'} - hasBin: true - dependencies: - dargs: 7.0.0 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - dev: true + '@upsetjs/venn.js@2.0.0': + optionalDependencies: + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) - /glob/7.1.4: - resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==} + '@volar/kit@2.4.28(typescript@6.0.3)': dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true + '@volar/language-service': 2.4.28 + '@volar/typescript': 2.4.28 + typesafe-path: 0.2.2 + typescript: 6.0.3 + vscode-languageserver-textdocument: 1.0.15 + vscode-uri: 3.2.0 - /global-dirs/0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} + '@volar/language-core@2.4.28': dependencies: - ini: 1.3.8 - dev: true + '@volar/source-map': 2.4.28 - /global-modules/1.0.0: - resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} - engines: {node: '>=0.10.0'} + '@volar/language-server@2.4.28': dependencies: - global-prefix: 1.0.2 - is-windows: 1.0.2 - resolve-dir: 1.0.1 - dev: true + '@volar/language-core': 2.4.28 + '@volar/language-service': 2.4.28 + '@volar/typescript': 2.4.28 + path-browserify: 1.0.1 + request-light: 0.7.0 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.18.4 + vscode-languageserver-textdocument: 1.0.15 + vscode-uri: 3.2.0 - /global-prefix/1.0.2: - resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} - engines: {node: '>=0.10.0'} + '@volar/language-service@2.4.28': dependencies: - expand-tilde: 2.0.2 - homedir-polyfill: 1.0.3 - ini: 1.3.8 - is-windows: 1.0.2 - which: registry.npmmirror.com/which/1.3.1 - dev: true + '@volar/language-core': 2.4.28 + vscode-languageserver-protocol: 3.18.4 + vscode-languageserver-textdocument: 1.0.15 + vscode-uri: 3.2.0 - /graceful-fs/4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true + '@volar/source-map@2.4.28': {} - /hard-rejection/2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.2.0 - /has-flag/3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + '@vscode/emmet-helper@2.11.0': + dependencies: + emmet: 2.4.11 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.15 + vscode-languageserver-types: 3.18.4 + vscode-uri: 3.2.0 - /homedir-polyfill/1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} + '@vscode/l10n@0.0.18': {} + + JSONStream@1.3.5: dependencies: - parse-passwd: 1.0.0 - dev: true + jsonparse: 1.3.1 + through: 2.3.8 - /hosted-git-info/2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + acorn-jsx@5.3.2(acorn@8.19.0): + dependencies: + acorn: 8.19.0 - /hosted-git-info/4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} + acorn-walk@8.3.5: dependencies: - lru-cache: registry.npmmirror.com/lru-cache/6.0.0 - dev: true + acorn: 8.19.0 - /human-signals/2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + acorn@8.19.0: {} - /husky/8.0.1: - resolution: {integrity: sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==} - engines: {node: '>=14'} - hasBin: true - dev: true + ajv-draft-04@1.0.0(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 - /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + ajv-i18n@4.2.0(ajv@8.20.0): dependencies: - safer-buffer: 2.1.2 - dev: true + ajv: 8.20.0 - /import-fresh/3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + ajv@8.20.0: dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true + fast-deep-equal: 3.1.3 + fast-uri: 3.1.8 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 - /indent-string/4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + am-i-vibing@0.4.0: + dependencies: + process-ancestry: 0.1.0 - /inflight/1.0.6: - resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + ansi-escapes@4.3.2: dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true + type-fest: 0.21.3 - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + ansi-regex@5.0.1: {} - /ini/1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ansi-regex@6.4.0: {} - /inquirer/6.5.2: - resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} - engines: {node: '>=6.0.0'} + ansi-styles@3.2.1: dependencies: - ansi-escapes: 3.2.0 - chalk: 2.4.2 - cli-cursor: 2.1.0 - cli-width: 2.2.1 - external-editor: 3.1.0 - figures: 2.0.0 - lodash: 4.17.21 - mute-stream: 0.0.7 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 2.1.1 - strip-ansi: 5.2.0 - through: 2.3.8 - dev: true - - /is-fullwidth-code-point/2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - dev: true - - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + color-convert: 1.9.3 - /is-glob/4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + ansi-styles@4.3.0: dependencies: - is-extglob: registry.npmmirror.com/is-extglob/2.1.1 - dev: true + color-convert: 2.0.1 - /is-stream/2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + ansi-styles@6.2.3: {} - /is-text-path/1.0.1: - resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} - engines: {node: '>=0.10.0'} + anymatch@3.1.3: dependencies: - text-extensions: 1.9.0 - dev: true + normalize-path: 3.0.0 + picomatch: 2.3.2 - /is-utf8/0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - dev: true + arg@4.1.3: {} - /is-windows/1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + arg@5.0.2: {} - /isexe/2.0.0: - resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} - dev: true + argparse@2.0.1: {} - /json-schema-traverse/1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + argue-cli@3.2.0: + optional: true - /jsonfile/4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + aria-query@5.3.2: {} + + array-ify@1.0.0: {} + + array-iterate@2.0.1: {} + + arrify@1.0.1: {} + + astring@1.9.0: {} + + astro@7.3.5(@astrojs/markdown-remark@7.3.1)(@types/node@22.20.5)(jiti@2.6.1)(yaml@2.9.1): + dependencies: + '@astrojs/compiler-rs': 0.5.1 + '@astrojs/internal-helpers': 0.11.0 + '@astrojs/markdown-satteri': 0.4.2 + '@astrojs/telemetry': 3.3.3 + '@capsizecss/unpack': 4.0.1 + '@clack/prompts': 1.8.1 + '@oslojs/encoding': 1.1.0 + am-i-vibing: 0.4.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + ci-info: 4.4.0 + clsx: 2.1.1 + common-ancestor-path: 2.0.0 + cookie: 2.0.1 + devalue: 5.9.4 + diff: 9.0.0 + dset: 3.1.4 + es-module-lexer: 2.3.2 + esbuild: 0.28.2 + find-proc: 0.2.0 + flattie: 1.1.1 + fontace: 0.4.1 + get-tsconfig: 5.0.0-beta.4 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.3.0 + js-yaml: 4.3.2 + jsonc-parser: 3.3.1 + magic-string: 1.4.3 + magicast: 0.5.5 + mrmime: 2.0.1 + neotraverse: 1.0.1 + obug: 3.0.0 + p-limit: 7.3.3 + p-queue: 9.3.3 + package-manager-detector: 1.9.0 + piccolore: 0.1.3 + picomatch: 4.0.7 + shiki: 4.5.0 + smol-toml: 1.9.0 + svgo: 4.1.0 + tinyclip: 1.0.3 + tinyexec: 1.3.1 + tinyglobby: 0.2.17 + ultrahtml: 1.7.0 + unifont: 0.7.5 + unstorage: 1.17.5 + verkit: 0.4.1 + vite: 8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.1) + vitefu: 1.1.3(vite@8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.1)) + xxhash-wasm: 1.1.0 + yargs-parser: 22.0.0 + zod: 4.6.5 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 - dev: true + '@astrojs/markdown-remark': 7.3.1 + sharp: 0.35.5(@types/node@22.20.5) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - uploadthing + - yaml - /jsonparse/1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + at-least-node@1.0.0: {} - /lines-and-columns/1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + axobject-query@4.1.0: {} - /locate-path/5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true + bail@2.0.2: {} - /locate-path/6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + bl@4.1.0: dependencies: - p-locate: 5.0.0 - dev: true + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 - /lodash.map/4.6.0: - resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} - dev: true + boolbase@1.0.0: {} - /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + brace-expansion@1.1.21: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 - /longest/2.0.1: - resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} - engines: {node: '>=0.10.0'} - dev: true + braces@3.0.3: + dependencies: + fill-range: 7.1.1 - /make-error/1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 - /map-obj/1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + cachedir@2.4.0: {} - /map-obj/4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + callsites@3.1.0: {} - /meow/8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} + camelcase-keys@6.2.2: dependencies: - '@types/minimist': 1.2.2 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.0 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: registry.npmmirror.com/type-fest/0.18.1 - yargs-parser: 20.2.9 - dev: true - - /merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 - /merge/2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} - dev: true + camelcase@5.3.1: {} - /micromatch/4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + cbor-extract@2.2.2: dependencies: - braces: registry.npmmirror.com/braces/3.0.2 - picomatch: registry.npmmirror.com/picomatch/2.3.1 - dev: true + node-gyp-build-optional-packages: 5.1.1 + optionalDependencies: + '@cbor-extract/cbor-extract-darwin-arm64': 2.2.2 + '@cbor-extract/cbor-extract-darwin-x64': 2.2.2 + '@cbor-extract/cbor-extract-linux-arm': 2.2.2 + '@cbor-extract/cbor-extract-linux-arm64': 2.2.2 + '@cbor-extract/cbor-extract-linux-x64': 2.2.2 + '@cbor-extract/cbor-extract-win32-x64': 2.2.2 + optional: true - /mimic-fn/2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + cbor-x@1.6.6: + optionalDependencies: + cbor-extract: 2.2.2 - /min-indent/1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + ccount@2.0.1: {} - /minimatch/3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + chalk@2.4.2: dependencies: - brace-expansion: 1.1.11 - dev: true + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 - /minimist-options/4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + chalk@4.1.2: dependencies: - arrify: 1.0.1 - is-plain-obj: registry.npmmirror.com/is-plain-obj/1.1.0 - kind-of: registry.npmmirror.com/kind-of/6.0.3 - dev: true + ansi-styles: 4.3.0 + supports-color: 7.2.0 - /minimist/1.2.5: - resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} - dev: true + character-entities-html4@2.1.0: {} - /mute-stream/0.0.7: - resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} - dev: true + character-entities-legacy@3.0.0: {} - /normalize-package-data/2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: registry.npmmirror.com/resolve/1.22.1 - semver: registry.npmmirror.com/semver/5.7.1 - validate-npm-package-license: 3.0.4 - dev: true + character-entities@2.0.2: {} - /normalize-package-data/3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - dependencies: - hosted-git-info: 4.1.0 - is-core-module: registry.npmmirror.com/is-core-module/2.9.0 - semver: registry.npmmirror.com/semver/7.3.8 - validate-npm-package-license: 3.0.4 - dev: true + character-reference-invalid@2.0.1: {} - /npm-run-path/4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true + chardet@2.2.0: {} - /once/1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + chokidar@4.0.3: dependencies: - wrappy: 1.0.2 - dev: true + readdirp: 4.1.2 - /onetime/5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + chokidar@5.0.0: dependencies: - mimic-fn: 2.1.0 - dev: true + readdirp: 5.1.1 - /os-tmpdir/1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + ci-info@4.4.0: {} - /p-limit/2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + cli-cursor@3.1.0: dependencies: - p-try: 2.2.0 - dev: true + restore-cursor: 3.1.0 - /p-limit/3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true + cli-spinners@2.9.2: {} - /p-locate/4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + cli-width@3.0.0: {} + + cliui@8.0.1: dependencies: - p-limit: 2.3.0 - dev: true + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 - /p-locate/5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + cliui@9.0.1: dependencies: - p-limit: 3.1.0 - dev: true + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 - /p-try/2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + clone@1.0.4: {} - /parent-module/1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + clsx@2.1.1: {} + + collapse-white-space@2.1.0: {} + + color-convert@1.9.3: dependencies: - callsites: registry.npmmirror.com/callsites/3.1.0 - dev: true + color-name: 1.1.3 - /parse-json/5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + color-convert@2.0.1: dependencies: - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 - error-ex: 1.3.2 - json-parse-even-better-errors: registry.npmmirror.com/json-parse-even-better-errors/2.3.1 - lines-and-columns: 1.2.4 - dev: true + color-name: 1.1.4 - /parse-passwd/1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - dev: true + color-name@1.1.3: {} - /path-exists/4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + color-name@1.1.4: {} - /path-is-absolute/1.0.1: - resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} - engines: {node: '>=0.10.0'} - dev: true + comma-separated-tokens@2.0.3: {} - /path-key/3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + commander@11.1.0: {} - /path-type/4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + commander@7.2.0: {} - /q/1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - dev: true + commander@8.3.0: {} - /quick-lru/4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + commitizen@4.3.2(@types/node@22.20.5)(typescript@6.0.3): + dependencies: + cachedir: 2.4.0 + cz-conventional-changelog: 3.3.0(@types/node@22.20.5)(typescript@6.0.3) + dedent: 0.7.0 + detect-indent: 6.1.0 + find-node-modules: 2.1.3 + find-root: 1.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + inquirer: 8.2.7(@types/node@22.20.5) + is-utf8: 0.2.1 + lodash: 4.18.1 + minimist: 1.2.8 + strip-bom: 4.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - '@types/node' + - typescript - /read-pkg-up/7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + common-ancestor-path@2.0.0: {} + + compare-func@2.0.0: dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: registry.npmmirror.com/type-fest/0.8.1 - dev: true + array-ify: 1.0.0 + dot-prop: 5.3.0 - /read-pkg/5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + concat-map@0.0.1: {} + + conventional-changelog-angular@6.0.0: dependencies: - '@types/normalize-package-data': 2.4.1 - normalize-package-data: 2.5.0 - parse-json: registry.npmmirror.com/parse-json/5.2.0 - type-fest: registry.npmmirror.com/type-fest/0.6.0 - dev: true + compare-func: 2.0.0 - /redent/3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + conventional-changelog-conventionalcommits@6.1.0: dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true + compare-func: 2.0.0 + + conventional-commit-types@3.0.0: {} + + conventional-commits-parser@4.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 1.0.1 + meow: 8.1.2 + split2: 3.2.2 + + conventional-commits-parser@7.1.3: + dependencies: + '@simple-libs/stream-utils': 2.0.0 + argue-cli: 3.2.0 + optional: true - /require-directory/2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + cookie-es@1.2.3: {} - /require-from-string/2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + cookie@2.0.1: {} - /resolve-dir/1.0.1: - resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} - engines: {node: '>=0.10.0'} + cose-base@1.0.3: dependencies: - expand-tilde: 2.0.2 - global-modules: 1.0.0 - dev: true + layout-base: 1.0.2 - /resolve-from/4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 - /resolve-from/5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.3))(ts-node@10.9.2(@types/node@22.20.5)(typescript@6.0.3))(typescript@5.9.3): + dependencies: + '@types/node': 20.5.1 + cosmiconfig: 8.3.6(typescript@5.9.3) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.3) + typescript: 5.9.3 - /resolve-global/1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} + cosmiconfig-typescript-loader@6.3.0(@types/node@22.20.5)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3): dependencies: - global-dirs: 0.1.1 - dev: true + '@types/node': 22.20.5 + cosmiconfig: 9.0.2(typescript@6.0.3) + jiti: 2.6.1 + typescript: 6.0.3 + optional: true - /restore-cursor/2.0.0: - resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} - engines: {node: '>=4'} + cosmiconfig@8.3.6(typescript@5.9.3): dependencies: - onetime: registry.npmmirror.com/onetime/2.0.1 - signal-exit: registry.npmmirror.com/signal-exit/3.0.7 - dev: true + import-fresh: 3.3.1 + js-yaml: 4.3.2 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.3 - /run-async/2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + cosmiconfig@9.0.2(typescript@6.0.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.3.2 + parse-json: 5.2.0 + optionalDependencies: + typescript: 6.0.3 + optional: true - /rxjs/6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} + create-require@1.1.1: {} + + cross-spawn@7.0.6: dependencies: - tslib: 1.14.1 - dev: true + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 - /semver/7.3.7: - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} - engines: {node: '>=10'} - hasBin: true + css-select@6.0.0: dependencies: - lru-cache: registry.npmmirror.com/lru-cache/6.0.0 - dev: true + boolbase: 1.0.0 + css-what: 7.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 - /shebang-command/2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + css-tree@2.2.1: dependencies: - shebang-regex: 3.0.0 - dev: true + mdn-data: 2.0.28 + source-map-js: 1.2.2 - /shebang-regex/3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.2 - /signal-exit/3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + css-what@7.0.0: {} - /spdx-correct/3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + csso@5.0.5: dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.11 - dev: true + css-tree: 2.2.1 - /spdx-exceptions/2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.3): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.34.3 - /spdx-expression-parse/3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + cytoscape-fcose@2.2.0(cytoscape@3.34.3): dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.11 - dev: true + cose-base: 2.2.0 + cytoscape: 3.34.3 - /spdx-license-ids/3.0.11: - resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} - dev: true + cytoscape@3.34.3: {} - /split2/3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + cz-conventional-changelog@3.3.0(@types/node@22.20.5)(typescript@6.0.3): dependencies: - readable-stream: registry.npmmirror.com/readable-stream/3.6.0 - dev: true + chalk: 2.4.2 + commitizen: 4.3.2(@types/node@22.20.5)(typescript@6.0.3) + conventional-commit-types: 3.0.0 + lodash.map: 4.6.0 + longest: 2.0.1 + word-wrap: 1.2.5 + optionalDependencies: + '@commitlint/load': 21.2.3(@types/node@22.20.5)(typescript@6.0.3) + transitivePeerDependencies: + - '@types/node' + - typescript - /string-width/2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} + d3-array@2.12.1: dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: true + internmap: 1.0.1 - /string-width/4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + d3-array@3.2.4: dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 - dev: true + internmap: 2.0.3 - /strip-ansi/4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} + d3-axis@3.0.0: {} + + d3-brush@3.0.0: dependencies: - ansi-regex: registry.npmmirror.com/ansi-regex/3.0.1 - dev: true + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) - /strip-ansi/5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} + d3-chord@3.0.1: dependencies: - ansi-regex: 4.1.1 - dev: true + d3-path: 3.1.0 - /strip-bom/4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true + d3-color@3.1.0: {} - /strip-final-newline/2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 - /strip-indent/3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + d3-delaunay@6.0.4: dependencies: - min-indent: 1.0.1 - dev: true + delaunator: 5.1.0 - /strip-json-comments/3.0.1: - resolution: {integrity: sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==} - engines: {node: '>=8'} - dev: true + d3-dispatch@3.0.1: {} - /supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + d3-drag@3.0.0: dependencies: - has-flag: 3.0.0 - dev: true + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 - /supports-color/7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + d3-dsv@3.0.1: dependencies: - has-flag: registry.npmmirror.com/has-flag/4.0.0 - dev: true + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 - /text-extensions/1.9.0: - resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} - engines: {node: '>=0.10'} - dev: true + d3-ease@3.0.1: {} - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 - /through2/4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + d3-force@3.0.0: dependencies: - readable-stream: registry.npmmirror.com/readable-stream/3.6.0 - dev: true + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 - /tmp/0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + d3-format@3.1.2: {} + + d3-geo@3.1.1: dependencies: - os-tmpdir: 1.0.2 - dev: true + d3-array: 3.2.4 - /trim-newlines/3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true + d3-hierarchy@3.1.2: {} - /ts-node/10.8.2_wkok7lthibal5qjhsdd5yq2cfe: - resolution: {integrity: sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + d3-interpolate@3.0.1: dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 17.0.32 - acorn: registry.npmmirror.com/acorn/8.7.1 - acorn-walk: 8.2.0 - arg: registry.npmmirror.com/arg/4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.7.4 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true + d3-color: 3.1.0 - /tslib/1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + d3-path@1.0.9: {} - /typescript/4.7.4: - resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + d3-path@3.1.0: {} - /universalify/0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} - /uri-js/4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + d3-random@3.0.1: {} + + d3-sankey@0.12.3: dependencies: - punycode: registry.npmmirror.com/punycode/2.1.1 - dev: true + d3-array: 2.12.1 + d3-shape: 1.3.7 - /v8-compile-cache-lib/3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 - /validate-npm-package-license/3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + d3-scale@4.0.2: dependencies: - spdx-correct: 3.1.1 - spdx-expression-parse: 3.0.1 - dev: true + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 - /which/2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + d3-selection@3.0.0: {} + + d3-shape@1.3.7: dependencies: - isexe: 2.0.0 - dev: true + d3-path: 1.0.9 - /word-wrap/1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 - /wrap-ansi/7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + d3-time-format@4.1.0: dependencies: - ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 - string-width: 4.2.3 - strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 - dev: true + d3-time: 3.1.0 - /wrappy/1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: true + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 - /y18n/5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + d3-timer@3.0.1: {} - /yaml/1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 - /yargs-parser/20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) - /yargs-parser/21.0.1: - resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} - engines: {node: '>=12'} - dev: true + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 - /yargs/17.5.1: - resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} - engines: {node: '>=12'} + dagre-d3-es@7.0.14: dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.0.1 - dev: true + d3: 7.9.0 + lodash-es: 4.18.1 - /yn/3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + dargs@7.0.0: {} - /yocto-queue/0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + dayjs@1.11.23: {} - registry.npmmirror.com/@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz} - name: '@ampproject/remapping' - version: 2.2.0 - engines: {node: '>=6.0.0'} + debug@4.4.3: dependencies: - '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17 - dev: true + ms: 2.1.3 - registry.npmmirror.com/@apideck/better-ajv-errors/0.3.3_ajv@8.11.0: - resolution: {integrity: sha512-9o+HO2MbJhJHjDYZaDxJmSDckvDpiuItEsrIShV0DXeCshXWRHhqYyU/PKHMkuClOmFnZhRd6wzv4vpDu/dRKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.3.tgz} - id: registry.npmmirror.com/@apideck/better-ajv-errors/0.3.3 - name: '@apideck/better-ajv-errors' - version: 0.3.3 - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - dependencies: - ajv: registry.npmmirror.com/ajv/8.11.0 - json-schema: registry.npmmirror.com/json-schema/0.4.0 - jsonpointer: registry.npmmirror.com/jsonpointer/5.0.0 - leven: registry.npmmirror.com/leven/3.1.0 - dev: true - - registry.npmmirror.com/@babel/code-frame/7.16.7: - resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz} - name: '@babel/code-frame' - version: 7.16.7 - engines: {node: '>=6.9.0'} + decamelize-keys@1.1.1: dependencies: - '@babel/highlight': registry.npmmirror.com/@babel/highlight/7.17.9 - dev: true + decamelize: 1.2.0 + map-obj: 1.0.1 - registry.npmmirror.com/@babel/compat-data/7.17.10: - resolution: {integrity: sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.17.10.tgz} - name: '@babel/compat-data' - version: 7.17.10 - engines: {node: '>=6.9.0'} - dev: true + decamelize@1.2.0: {} - registry.npmmirror.com/@babel/core/7.17.10: - resolution: {integrity: sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.17.10.tgz} - name: '@babel/core' - version: 7.17.10 - engines: {node: '>=6.9.0'} + decode-named-character-reference@1.3.0: dependencies: - '@ampproject/remapping': registry.npmmirror.com/@ampproject/remapping/2.2.0 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 - '@babel/generator': registry.npmmirror.com/@babel/generator/7.17.10 - '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10 - '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.17.7 - '@babel/helpers': registry.npmmirror.com/@babel/helpers/7.17.9 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.10 - '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - convert-source-map: registry.npmmirror.com/convert-source-map/1.8.0 - debug: registry.npmmirror.com/debug/4.3.4 - gensync: registry.npmmirror.com/gensync/1.0.0-beta.2 - json5: registry.npmmirror.com/json5/2.2.1 - semver: registry.npmmirror.com/semver/6.3.0 - transitivePeerDependencies: - - supports-color - dev: true + character-entities: 2.0.2 - registry.npmmirror.com/@babel/generator/7.17.10: - resolution: {integrity: sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.17.10.tgz} - name: '@babel/generator' - version: 7.17.10 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1 - jsesc: registry.npmmirror.com/jsesc/2.5.2 - dev: true + dedent@0.7.0: {} - registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7: - resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz} - name: '@babel/helper-annotate-as-pure' - version: 7.16.7 - engines: {node: '>=6.9.0'} + defaults@1.0.4: dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + clone: 1.0.4 - registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/7.16.7: - resolution: {integrity: sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz} - name: '@babel/helper-builder-binary-assignment-operator-visitor' - version: 7.16.7 - engines: {node: '>=6.9.0'} + defu@6.1.7: {} + + delaunator@5.1.0: dependencies: - '@babel/helper-explode-assignable-expression': registry.npmmirror.com/@babel/helper-explode-assignable-expression/7.16.7 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + robust-predicates: 3.0.3 - registry.npmmirror.com/@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10: - resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz} - id: registry.npmmirror.com/@babel/helper-compilation-targets/7.17.10 - name: '@babel/helper-compilation-targets' - version: 7.17.10 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.17.10 - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.16.7 - browserslist: registry.npmmirror.com/browserslist/4.21.4 - semver: registry.npmmirror.com/semver/6.3.0 - dev: true - - registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.17.9_@babel+core@7.17.10: - resolution: {integrity: sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz} - id: registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.17.9 - name: '@babel/helper-create-class-features-plugin' - version: 7.17.9 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.17.9 - '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.17.7 - '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.16.7 - '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.16.7 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7 - transitivePeerDependencies: - - supports-color - dev: true + dequal@2.0.3: {} - registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.17.0_@babel+core@7.17.10: - resolution: {integrity: sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz} - id: registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.17.0 - name: '@babel/helper-create-regexp-features-plugin' - version: 7.17.0 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 - regexpu-core: registry.npmmirror.com/regexpu-core/5.0.1 - dev: true - - registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.1_@babel+core@7.17.10: - resolution: {integrity: sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz} - id: registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.1 - name: '@babel/helper-define-polyfill-provider' - version: 0.3.1 - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10 - '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.17.10 - debug: registry.npmmirror.com/debug/4.3.4 - lodash.debounce: registry.npmmirror.com/lodash.debounce/4.0.8 - resolve: registry.npmmirror.com/resolve/1.22.1 - semver: registry.npmmirror.com/semver/6.3.0 - transitivePeerDependencies: - - supports-color - dev: true + destr@2.0.5: {} - registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7: - resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz} - name: '@babel/helper-environment-visitor' - version: 7.16.7 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + detect-file@1.0.0: {} - registry.npmmirror.com/@babel/helper-explode-assignable-expression/7.16.7: - resolution: {integrity: sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz} - name: '@babel/helper-explode-assignable-expression' - version: 7.16.7 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + detect-indent@6.1.0: {} - registry.npmmirror.com/@babel/helper-function-name/7.17.9: - resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz} - name: '@babel/helper-function-name' - version: 7.17.9 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + detect-libc@2.1.2: {} - registry.npmmirror.com/@babel/helper-hoist-variables/7.16.7: - resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz} - name: '@babel/helper-hoist-variables' - version: 7.16.7 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + devalue@5.9.4: {} - registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.17.7: - resolution: {integrity: sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz} - name: '@babel/helper-member-expression-to-functions' - version: 7.17.7 - engines: {node: '>=6.9.0'} + devlop@1.1.0: dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + dequal: 2.0.3 - registry.npmmirror.com/@babel/helper-module-imports/7.16.7: - resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz} - name: '@babel/helper-module-imports' - version: 7.16.7 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + diff@4.0.4: {} - registry.npmmirror.com/@babel/helper-module-transforms/7.17.7: - resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz} - name: '@babel/helper-module-transforms' - version: 7.17.7 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 - '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 - '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.17.7 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7 - '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - transitivePeerDependencies: - - supports-color - dev: true + diff@9.0.0: {} - registry.npmmirror.com/@babel/helper-optimise-call-expression/7.16.7: - resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz} - name: '@babel/helper-optimise-call-expression' - version: 7.16.7 - engines: {node: '>=6.9.0'} + dom-serializer@2.0.0: dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 - registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7: - resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz} - name: '@babel/helper-plugin-utils' - version: 7.16.7 - engines: {node: '>=6.9.0'} - dev: true + domelementtype@2.3.0: {} - registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.16.8: - resolution: {integrity: sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz} - name: '@babel/helper-remap-async-to-generator' - version: 7.16.8 - engines: {node: '>=6.9.0'} + domhandler@5.0.3: dependencies: - '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 - '@babel/helper-wrap-function': registry.npmmirror.com/@babel/helper-wrap-function/7.16.8 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - transitivePeerDependencies: - - supports-color - dev: true + domelementtype: 2.3.0 - registry.npmmirror.com/@babel/helper-replace-supers/7.16.7: - resolution: {integrity: sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz} - name: '@babel/helper-replace-supers' - version: 7.16.7 - engines: {node: '>=6.9.0'} + dompurify@3.4.16: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + domutils@3.2.2: dependencies: - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 - '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.17.7 - '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.16.7 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - transitivePeerDependencies: - - supports-color - dev: true + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 - registry.npmmirror.com/@babel/helper-simple-access/7.17.7: - resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz} - name: '@babel/helper-simple-access' - version: 7.17.7 - engines: {node: '>=6.9.0'} + dot-prop@5.3.0: dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + is-obj: 2.0.0 - registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.16.0: - resolution: {integrity: sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz} - name: '@babel/helper-skip-transparent-expression-wrappers' - version: 7.16.0 - engines: {node: '>=6.9.0'} + dset@3.1.4: {} + + emmet@2.4.11: dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 - registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7: - resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz} - name: '@babel/helper-split-export-declaration' - version: 7.16.7 - engines: {node: '>=6.9.0'} + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + + entities@4.5.0: {} + + entities@6.0.1: {} + + env-paths@2.2.1: + optional: true + + error-ex@1.3.4: dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + is-arrayish: 0.2.1 - registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7: - resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz} - name: '@babel/helper-validator-identifier' - version: 7.16.7 - engines: {node: '>=6.9.0'} - dev: true + es-errors@1.3.0: {} - registry.npmmirror.com/@babel/helper-validator-option/7.16.7: - resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz} - name: '@babel/helper-validator-option' - version: 7.16.7 - engines: {node: '>=6.9.0'} - dev: true + es-module-lexer@2.3.2: {} - registry.npmmirror.com/@babel/helper-wrap-function/7.16.8: - resolution: {integrity: sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz} - name: '@babel/helper-wrap-function' - version: 7.16.8 - engines: {node: '>=6.9.0'} + es-toolkit@1.52.0: {} + + esast-util-from-estree@2.0.0: dependencies: - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.17.9 - '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - transitivePeerDependencies: - - supports-color - dev: true + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 - registry.npmmirror.com/@babel/helpers/7.17.9: - resolution: {integrity: sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helpers/-/helpers-7.17.9.tgz} - name: '@babel/helpers' - version: 7.17.9 - engines: {node: '>=6.9.0'} + esast-util-from-js@2.0.1: dependencies: - '@babel/template': registry.npmmirror.com/@babel/template/7.16.7 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - transitivePeerDependencies: - - supports-color - dev: true + '@types/estree-jsx': 1.0.5 + acorn: 8.19.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 - registry.npmmirror.com/@babel/highlight/7.17.9: - resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/highlight/-/highlight-7.17.9.tgz} - name: '@babel/highlight' - version: 7.17.9 - engines: {node: '>=6.9.0'} + esbuild@0.28.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@5.0.0: {} + + estree-util-attach-comments@3.0.0: dependencies: - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7 - chalk: registry.npmmirror.com/chalk/2.4.2 - js-tokens: registry.npmmirror.com/js-tokens/4.0.0 - dev: true + '@types/estree': 1.0.9 - registry.npmmirror.com/@babel/parser/7.17.10: - resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.17.10.tgz} - name: '@babel/parser' - version: 7.17.10 - engines: {node: '>=6.0.0'} - hasBin: true + estree-util-build-jsx@3.0.1: dependencies: - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 - registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7 - name: '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + '@types/estree': 1.0.9 + devlop: 1.1.0 - registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7 - name: '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.16.0 - '@babel/plugin-proposal-optional-chaining': registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.17.10: - resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.16.8 - name: '@babel/plugin-proposal-async-generator-functions' - version: 7.16.8 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + estree-util-to-js@2.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-remap-async-to-generator': registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.16.8 - '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color - dev: true + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 - registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.16.7 - name: '@babel/plugin-proposal-class-properties' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + estree-util-visit@2.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.17.9_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - transitivePeerDependencies: - - supports-color - dev: true + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 - registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.17.10: - resolution: {integrity: sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.17.6 - name: '@babel/plugin-proposal-class-static-block' - version: 7.17.6 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 + estree-walker@3.0.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.17.9_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-class-static-block': registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color - dev: true + '@types/estree': 1.0.9 - registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.16.7 - name: '@babel/plugin-proposal-dynamic-import' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.16.7 - name: '@babel/plugin-proposal-export-namespace-from' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-export-namespace-from': registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.16.7 - name: '@babel/plugin-proposal-json-strings' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.16.7 - name: '@babel/plugin-proposal-logical-assignment-operators' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.16.7 - name: '@babel/plugin-proposal-nullish-coalescing-operator' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.16.7 - name: '@babel/plugin-proposal-numeric-separator' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.17.10: - resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.17.3 - name: '@babel/plugin-proposal-object-rest-spread' - version: 7.17.3 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.17.10 - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.10 - '@babel/plugin-transform-parameters': registry.npmmirror.com/@babel/plugin-transform-parameters/7.16.7_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.16.7 - name: '@babel/plugin-proposal-optional-catch-binding' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.16.7 - name: '@babel/plugin-proposal-optional-chaining' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.16.0 - '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.10 - dev: true - - registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.17.10: - resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.16.11 - name: '@babel/plugin-proposal-private-methods' - version: 7.16.11 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + eventemitter3@5.0.4: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + expand-tilde@2.0.2: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.17.9_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - transitivePeerDependencies: - - supports-color - dev: true + homedir-polyfill: 1.0.3 - registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.16.7 - name: '@babel/plugin-proposal-private-property-in-object' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + extend@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 - '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.17.9_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-syntax-private-property-in-object': registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color - dev: true + fast-string-truncated-width: 3.0.3 - registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.16.7 - name: '@babel/plugin-proposal-unicode-property-regex' - version: 7.16.7 - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.17.0_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true - - registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.10: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4 - name: '@babel/plugin-syntax-async-generators' - version: 7.8.4 - peerDependencies: - '@babel/core': ^7.0.0-0 + fast-uri@3.1.8: {} + + fast-wrap-ansi@0.2.2: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + fast-string-width: 3.0.2 - registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.10: - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13 - name: '@babel/plugin-syntax-class-properties' - version: 7.12.13 - peerDependencies: - '@babel/core': ^7.0.0-0 + fastdom@1.0.12: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + strictdom: 1.0.1 - registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.17.10: - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5 - name: '@babel/plugin-syntax-class-static-block' - version: 7.14.5 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + figures@3.2.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + escape-string-regexp: 1.0.5 - registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3 - name: '@babel/plugin-syntax-dynamic-import' - version: 7.8.3 - peerDependencies: - '@babel/core': ^7.0.0-0 + fill-range@7.1.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + to-regex-range: 5.0.1 - registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3 - name: '@babel/plugin-syntax-export-namespace-from' - version: 7.8.3 - peerDependencies: - '@babel/core': ^7.0.0-0 + find-node-modules@2.1.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + findup-sync: 4.0.0 + merge: 2.1.1 - registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3 - name: '@babel/plugin-syntax-json-strings' - version: 7.8.3 - peerDependencies: - '@babel/core': ^7.0.0-0 + find-proc@0.2.0: {} + + find-root@1.1.0: {} + + find-up@4.1.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + locate-path: 5.0.0 + path-exists: 4.0.0 - registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.10: - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4 - name: '@babel/plugin-syntax-logical-assignment-operators' - version: 7.10.4 - peerDependencies: - '@babel/core': ^7.0.0-0 + find-up@5.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + locate-path: 6.0.0 + path-exists: 4.0.0 - registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3 - name: '@babel/plugin-syntax-nullish-coalescing-operator' - version: 7.8.3 - peerDependencies: - '@babel/core': ^7.0.0-0 + findup-sync@4.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 4.0.8 + resolve-dir: 1.0.1 - registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.10: - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4 - name: '@babel/plugin-syntax-numeric-separator' - version: 7.10.4 - peerDependencies: - '@babel/core': ^7.0.0-0 + flattie@1.1.1: {} + + fontace@0.4.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + fontkitten: 1.0.3 - registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3 - name: '@babel/plugin-syntax-object-rest-spread' - version: 7.8.3 - peerDependencies: - '@babel/core': ^7.0.0-0 + fontkitten@1.0.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + tiny-inflate: 1.0.3 - registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3 - name: '@babel/plugin-syntax-optional-catch-binding' - version: 7.8.3 - peerDependencies: - '@babel/core': ^7.0.0-0 + fs-extra@11.4.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 - registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3 - name: '@babel/plugin-syntax-optional-chaining' - version: 7.8.3 - peerDependencies: - '@babel/core': ^7.0.0-0 + fs-extra@9.1.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 - registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.17.10: - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5 - name: '@babel/plugin-syntax-private-property-in-object' - version: 7.14.5 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.7.0: {} + + get-stream@6.0.1: {} + + get-tsconfig@5.0.0-beta.4: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + resolve-pkg-maps: 1.0.0 - registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.10: - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz} - id: registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5 - name: '@babel/plugin-syntax-top-level-await' - version: 7.14.5 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + git-cz@4.9.0: {} + + git-raw-commits@2.0.11: + dependencies: + dargs: 7.0.0 + lodash: 4.18.1 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + + github-slugger@2.0.0: {} + + glob@7.2.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.5 + once: 1.4.0 + path-is-absolute: 1.0.1 - registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.16.7 - name: '@babel/plugin-transform-arrow-functions' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + global-directory@5.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + ini: 6.0.0 + optional: true - registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.17.10: - resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.16.8 - name: '@babel/plugin-transform-async-to-generator' - version: 7.16.8 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + global-dirs@0.1.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-remap-async-to-generator': registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.16.8 - transitivePeerDependencies: - - supports-color - dev: true + ini: 1.3.8 - registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.16.7 - name: '@babel/plugin-transform-block-scoped-functions' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + global-modules@1.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 - registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.16.7 - name: '@babel/plugin-transform-block-scoping' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + global-prefix@1.0.2: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + + graceful-fs@4.2.11: {} + + gsap@3.15.0: {} + + h3@1.15.11: + dependencies: + cookie-es: 1.2.3 + crossws: 0.3.5 + defu: 6.1.7 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.5 + radix3: 1.1.2 + ufo: 1.6.4 + uncrypto: 0.1.3 + + hachure-fill@0.5.2: {} + + hard-rejection@2.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.5 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.2.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.4.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color - registry.npmmirror.com/@babel/plugin-transform-classes/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-classes/7.16.7 - name: '@babel/plugin-transform-classes' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.16.7 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.17.9 - '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.16.7 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.16.7 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7 - globals: registry.npmmirror.com/globals/11.12.0 + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color - dev: true - registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.16.7 - name: '@babel/plugin-transform-computed-properties' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + hast-util-to-parse5@8.0.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 - registry.npmmirror.com/@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.17.10: - resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-destructuring/7.17.7 - name: '@babel/plugin-transform-destructuring' - version: 7.17.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + hast-util-to-text@4.0.2: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 - registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.16.7 - name: '@babel/plugin-transform-dotall-regex' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.17.0_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true - - registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.16.7 - name: '@babel/plugin-transform-duplicate-keys' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + hast-util-whitespace@3.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + '@types/hast': 3.0.5 - registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.16.7 - name: '@babel/plugin-transform-exponentiation-operator' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-builder-binary-assignment-operator-visitor': registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/7.16.7 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true - - registry.npmmirror.com/@babel/plugin-transform-for-of/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-for-of/7.16.7 - name: '@babel/plugin-transform-for-of' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + hastscript@9.0.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 - registry.npmmirror.com/@babel/plugin-transform-function-name/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-function-name/7.16.7 - name: '@babel/plugin-transform-function-name' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.17.9 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true - - registry.npmmirror.com/@babel/plugin-transform-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-literals/7.16.7 - name: '@babel/plugin-transform-literals' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + homedir-polyfill@1.0.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + parse-passwd: 1.0.0 - registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.16.7 - name: '@babel/plugin-transform-member-expression-literals' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + hosted-git-info@2.8.9: {} + + hosted-git-info@4.1.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + lru-cache: 6.0.0 - registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.16.7 - name: '@babel/plugin-transform-modules-amd' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + html-escaper@3.0.3: {} + + html-void-elements@3.0.0: {} + + http-cache-semantics@4.3.0: {} + + human-signals@2.1.0: {} + + iconv-lite@0.6.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.17.7 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3 - transitivePeerDependencies: - - supports-color - dev: true + safer-buffer: 2.1.2 - registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.17.9_@babel+core@7.17.10: - resolution: {integrity: sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.17.9 - name: '@babel/plugin-transform-modules-commonjs' - version: 7.17.9 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + iconv-lite@0.7.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.17.7 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.17.7 - babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3 - transitivePeerDependencies: - - supports-color - dev: true + safer-buffer: 2.1.2 - registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.17.10: - resolution: {integrity: sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.17.8 - name: '@babel/plugin-transform-modules-systemjs' - version: 7.17.8 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.16.7 - '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.17.7 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7 - babel-plugin-dynamic-import-node: registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3 - transitivePeerDependencies: - - supports-color - dev: true + ieee754@1.2.1: {} - registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.16.7 - name: '@babel/plugin-transform-modules-umd' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + import-fresh@3.3.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.17.7 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - transitivePeerDependencies: - - supports-color - dev: true + parent-module: 1.0.1 + resolve-from: 4.0.0 - registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.17.10_@babel+core@7.17.10: - resolution: {integrity: sha512-v54O6yLaJySCs6mGzaVOUw9T967GnH38T6CQSAtnzdNPwu84l2qAjssKzo/WSO8Yi7NF+7ekm5cVbF/5qiIgNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.10.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.17.10 - name: '@babel/plugin-transform-named-capturing-groups-regex' - version: 7.17.10 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.17.0_@babel+core@7.17.10 - dev: true + import-meta-resolve@4.2.0: {} - registry.npmmirror.com/@babel/plugin-transform-new-target/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-new-target/7.16.7 - name: '@babel/plugin-transform-new-target' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + indent-string@4.0.0: {} + + inflight@1.0.6: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + once: 1.4.0 + wrappy: 1.0.2 - registry.npmmirror.com/@babel/plugin-transform-object-super/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-object-super/7.16.7 - name: '@babel/plugin-transform-object-super' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@6.0.0: + optional: true + + inline-style-parser@0.2.7: {} + + inquirer@8.2.7(@types/node@22.20.5): dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.16.7 + '@inquirer/external-editor': 1.0.3(@types/node@22.20.5) + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + figures: 3.2.0 + lodash: 4.18.1 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 transitivePeerDependencies: - - supports-color - dev: true + - '@types/node' - registry.npmmirror.com/@babel/plugin-transform-parameters/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-parameters/7.16.7 - name: '@babel/plugin-transform-parameters' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + internmap@1.0.1: {} + + internmap@2.0.3: {} + + iron-webcrypto@1.2.1: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 - registry.npmmirror.com/@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-property-literals/7.16.7 - name: '@babel/plugin-transform-property-literals' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + is-arrayish@0.2.1: {} + + is-core-module@2.17.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + hasown: 2.0.4 - registry.npmmirror.com/@babel/plugin-transform-regenerator/7.17.9_@babel+core@7.17.10: - resolution: {integrity: sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-regenerator/7.17.9 - name: '@babel/plugin-transform-regenerator' - version: 7.17.9 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + is-decimal@2.0.1: {} + + is-docker@4.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - regenerator-transform: registry.npmmirror.com/regenerator-transform/0.15.0 - dev: true + is-extglob: 2.1.1 - registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.16.7 - name: '@babel/plugin-transform-reserved-words' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + is-hexadecimal@2.0.1: {} + + is-interactive@1.0.0: {} + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-plain-obj@1.1.0: {} + + is-plain-obj@4.1.0: {} + + is-stream@2.0.1: {} + + is-text-path@1.0.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + text-extensions: 1.9.0 - registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.16.7 - name: '@babel/plugin-transform-shorthand-properties' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + is-unicode-supported@0.1.0: {} + + is-utf8@0.2.1: {} + + is-windows@1.0.2: {} + + isexe@2.0.0: {} + + jiti@2.6.1: + optional: true + + js-tokens@4.0.0: {} + + js-yaml@4.3.2: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + argparse: 2.0.1 - registry.npmmirror.com/@babel/plugin-transform-spread/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-spread/7.16.7 - name: '@babel/plugin-transform-spread' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.16.0 - dev: true - - registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.16.7 - name: '@babel/plugin-transform-sticky-regex' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@1.0.0: {} + + jsonc-parser@2.3.1: {} + + jsonc-parser@3.3.1: {} + + jsonfile@6.2.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 - registry.npmmirror.com/@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-template-literals/7.16.7 - name: '@babel/plugin-transform-template-literals' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + jsonparse@1.3.1: {} + + katex@0.16.47: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + commander: 8.3.0 - registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.16.7 - name: '@babel/plugin-transform-typeof-symbol' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + khroma@2.1.0: {} + + kind-of@6.0.3: {} + + kleur@4.1.5: {} + + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + + lines-and-columns@1.2.4: {} + + locate-path@5.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + p-locate: 4.1.0 - registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.16.7 - name: '@babel/plugin-transform-unicode-escapes' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + locate-path@6.0.0: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true + p-locate: 5.0.0 - registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz} - id: registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.16.7 - name: '@babel/plugin-transform-unicode-regex' - version: 7.16.7 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.17.0_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - dev: true - - registry.npmmirror.com/@babel/preset-env/7.17.10_@babel+core@7.17.10: - resolution: {integrity: sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.17.10.tgz} - id: registry.npmmirror.com/@babel/preset-env/7.17.10 - name: '@babel/preset-env' - version: 7.17.10 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.17.10 - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.16.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.17.10 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-async-generator-functions': registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.17.10 - '@babel/plugin-proposal-class-properties': registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-class-static-block': registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.17.10 - '@babel/plugin-proposal-dynamic-import': registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-export-namespace-from': registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-json-strings': registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-numeric-separator': registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-object-rest-spread': registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.17.10 - '@babel/plugin-proposal-optional-catch-binding': registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-optional-chaining': registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-private-methods': registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.17.10 - '@babel/plugin-proposal-private-property-in-object': registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-unicode-property-regex': registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.17.10 - '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.10 - '@babel/plugin-syntax-class-properties': registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.10 - '@babel/plugin-syntax-class-static-block': registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.17.10 - '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-export-namespace-from': registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.10 - '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.10 - '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-private-property-in-object': registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.17.10 - '@babel/plugin-syntax-top-level-await': registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.10 - '@babel/plugin-transform-arrow-functions': registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-async-to-generator': registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.17.10 - '@babel/plugin-transform-block-scoped-functions': registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-block-scoping': registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-classes': registry.npmmirror.com/@babel/plugin-transform-classes/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-computed-properties': registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-destructuring': registry.npmmirror.com/@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.17.10 - '@babel/plugin-transform-dotall-regex': registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-duplicate-keys': registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-exponentiation-operator': registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-for-of': registry.npmmirror.com/@babel/plugin-transform-for-of/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-function-name': registry.npmmirror.com/@babel/plugin-transform-function-name/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-literals': registry.npmmirror.com/@babel/plugin-transform-literals/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-member-expression-literals': registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-modules-amd': registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-modules-commonjs': registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.17.9_@babel+core@7.17.10 - '@babel/plugin-transform-modules-systemjs': registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.17.10 - '@babel/plugin-transform-modules-umd': registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-named-capturing-groups-regex': registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.17.10_@babel+core@7.17.10 - '@babel/plugin-transform-new-target': registry.npmmirror.com/@babel/plugin-transform-new-target/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-object-super': registry.npmmirror.com/@babel/plugin-transform-object-super/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-parameters': registry.npmmirror.com/@babel/plugin-transform-parameters/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-property-literals': registry.npmmirror.com/@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-regenerator': registry.npmmirror.com/@babel/plugin-transform-regenerator/7.17.9_@babel+core@7.17.10 - '@babel/plugin-transform-reserved-words': registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-shorthand-properties': registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-spread': registry.npmmirror.com/@babel/plugin-transform-spread/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-sticky-regex': registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-template-literals': registry.npmmirror.com/@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-typeof-symbol': registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-unicode-escapes': registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-unicode-regex': registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.17.10 - '@babel/preset-modules': registry.npmmirror.com/@babel/preset-modules/0.1.5_@babel+core@7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - babel-plugin-polyfill-corejs2: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.1_@babel+core@7.17.10 - babel-plugin-polyfill-corejs3: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.5.2_@babel+core@7.17.10 - babel-plugin-polyfill-regenerator: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.3.1_@babel+core@7.17.10 - core-js-compat: registry.npmmirror.com/core-js-compat/3.22.5 - semver: registry.npmmirror.com/semver/6.3.0 - transitivePeerDependencies: - - supports-color - dev: true + lodash-es@4.18.1: {} - registry.npmmirror.com/@babel/preset-modules/0.1.5_@babel+core@7.17.10: - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz} - id: registry.npmmirror.com/@babel/preset-modules/0.1.5 - name: '@babel/preset-modules' - version: 0.1.5 - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.16.7 - '@babel/plugin-proposal-unicode-property-regex': registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-dotall-regex': registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - esutils: registry.npmmirror.com/esutils/2.0.3 - dev: true - - registry.npmmirror.com/@babel/runtime/7.17.9: - resolution: {integrity: sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.9.tgz} - name: '@babel/runtime' - version: 7.17.9 - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.9 - dev: true + lodash.camelcase@4.3.0: {} + + lodash.isfunction@3.0.9: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.map@4.6.0: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} - registry.npmmirror.com/@babel/template/7.16.7: - resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.16.7.tgz} - name: '@babel/template' - version: 7.16.7 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - dev: true + lodash.snakecase@4.1.1: {} - registry.npmmirror.com/@babel/traverse/7.17.10: - resolution: {integrity: sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.17.10.tgz} - name: '@babel/traverse' - version: 7.17.10 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 - '@babel/generator': registry.npmmirror.com/@babel/generator/7.17.10 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.16.7 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.17.9 - '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.16.7 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.16.7 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.10 - '@babel/types': registry.npmmirror.com/@babel/types/7.17.10 - debug: registry.npmmirror.com/debug/4.3.4 - globals: registry.npmmirror.com/globals/11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + lodash.startcase@4.4.0: {} - registry.npmmirror.com/@babel/types/7.17.10: - resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.17.10.tgz} - name: '@babel/types' - version: 7.17.10 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7 - to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0 - dev: true + lodash.uniq@4.5.0: {} - registry.npmmirror.com/@braintree/sanitize-url/6.0.0: - resolution: {integrity: sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz} - name: '@braintree/sanitize-url' - version: 6.0.0 - dev: true + lodash.upperfirst@4.3.1: {} - registry.npmmirror.com/@commitlint/load/17.0.3: - resolution: {integrity: sha512-3Dhvr7GcKbKa/ey4QJ5MZH3+J7QFlARohUow6hftQyNjzoXXROm+RwpBes4dDFrXG1xDw9QPXA7uzrOShCd4bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/load/-/load-17.0.3.tgz} - name: '@commitlint/load' - version: 17.0.3 - engines: {node: '>=v14'} + lodash@4.18.1: {} + + log-symbols@4.1.0: dependencies: - '@commitlint/config-validator': 17.0.3 - '@commitlint/execute-rule': 17.0.0 - '@commitlint/resolve-extends': 17.0.3 - '@commitlint/types': 17.0.0 - '@types/node': 17.0.32 chalk: 4.1.2 - cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 2.0.2_wkok7lthibal5qjhsdd5yq2cfe - lodash: 4.17.21 - resolve-from: 5.0.0 - typescript: 4.7.4 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true - optional: true + is-unicode-supported: 0.1.0 - registry.npmmirror.com/@esbuild/android-arm/0.15.14: - resolution: {integrity: sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.14.tgz} - name: '@esbuild/android-arm' - version: 0.15.14 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true + longest-streak@3.1.0: {} - registry.npmmirror.com/@esbuild/linux-loong64/0.15.14: - resolution: {integrity: sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.14 - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true + longest@2.0.1: {} - registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz} - name: '@jridgewell/gen-mapping' - version: 0.1.1 - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.1 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14 - dev: true + lru-cache@11.5.3: {} - registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz} - name: '@jridgewell/gen-mapping' - version: 0.3.2 - engines: {node: '>=6.0.0'} + lru-cache@6.0.0: dependencies: - '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.1 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17 - dev: true + yallist: 4.0.0 - registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz} - name: '@jridgewell/resolve-uri' - version: 3.1.0 - engines: {node: '>=6.0.0'} - dev: true + magic-string@1.4.3: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 - registry.npmmirror.com/@jridgewell/set-array/1.1.1: - resolution: {integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.1.tgz} - name: '@jridgewell/set-array' - version: 1.1.1 - engines: {node: '>=6.0.0'} - dev: true - - registry.npmmirror.com/@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz} - name: '@jridgewell/source-map' - version: 0.3.2 - dependencies: - '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17 - dev: true - - registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz} - name: '@jridgewell/sourcemap-codec' - version: 1.4.14 - dev: true - - registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz} - name: '@jridgewell/trace-mapping' - version: 0.3.17 - dependencies: - '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14 - dev: true - - registry.npmmirror.com/@jridgewell/trace-mapping/0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz} - name: '@jridgewell/trace-mapping' - version: 0.3.9 - dependencies: - '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14 - dev: true - - registry.npmmirror.com/@lit/reactive-element/1.4.2: - resolution: {integrity: sha512-VMOxsWh/QDwrxPsgkSQnuZ+8mfNy1OTjzzUdLBvvZtpahwPTHTeVZ51RZRqO4xfKVrR+btIPA8D01IL3xeG66w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@lit/reactive-element/-/reactive-element-1.4.2.tgz} - name: '@lit/reactive-element' - version: 1.4.2 - dev: true - - registry.npmmirror.com/@mdit-vue/plugin-component/0.11.1: - resolution: {integrity: sha512-fCqyYPwEXFa182/Vz6g8McDi3SCIwm3yHWkWddHx+QNn0gMGFqkhJVcz/wjCIA3oCoWUBWM80aZ09ZuoQiOmvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mdit-vue/plugin-component/-/plugin-component-0.11.1.tgz} - name: '@mdit-vue/plugin-component' - version: 0.11.1 - dependencies: - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - dev: true - - registry.npmmirror.com/@mdit-vue/plugin-frontmatter/0.11.1: - resolution: {integrity: sha512-AdZJInjD1pTJXlfhuoBS5ycuIQ3ewBfY0R/XHM3TRDEaDHQJHxouUCpCyijZmpdljTU45lFetIowaKtAi7GBog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-0.11.1.tgz} - name: '@mdit-vue/plugin-frontmatter' - version: 0.11.1 - dependencies: - '@mdit-vue/types': registry.npmmirror.com/@mdit-vue/types/0.11.0 - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - gray-matter: registry.npmmirror.com/gray-matter/4.0.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - dev: true - - registry.npmmirror.com/@mdit-vue/plugin-headers/0.11.1: - resolution: {integrity: sha512-eBUonsEkXP2Uf2MIXSWZGCcLCIMSA1XfThJwhzSAosoa7fO5aw52LKCweddmn7zLQvgQh7p7382sFAhCc2KXog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mdit-vue/plugin-headers/-/plugin-headers-0.11.1.tgz} - name: '@mdit-vue/plugin-headers' - version: 0.11.1 - dependencies: - '@mdit-vue/shared': registry.npmmirror.com/@mdit-vue/shared/0.11.0 - '@mdit-vue/types': registry.npmmirror.com/@mdit-vue/types/0.11.0 - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - dev: true - - registry.npmmirror.com/@mdit-vue/plugin-sfc/0.11.1: - resolution: {integrity: sha512-3AjQXqExzT9FWGNOeTBqK1pbt1UA5anrZvjo7OO2PJ3lrfZd0rbjionFkmW/VW1912laHUraIP6n74mUNqPuWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mdit-vue/plugin-sfc/-/plugin-sfc-0.11.1.tgz} - name: '@mdit-vue/plugin-sfc' - version: 0.11.1 - dependencies: - '@mdit-vue/types': registry.npmmirror.com/@mdit-vue/types/0.11.0 - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - dev: true - - registry.npmmirror.com/@mdit-vue/plugin-title/0.11.1: - resolution: {integrity: sha512-lvgR1pSgwX5D3tmLGyYBsfd3GbEoscqYsLTE8Vg+rCY8LfSrHdwrOD3Eg+SM2KyS5+gn+Zw4nS0S1yxOIVZBCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mdit-vue/plugin-title/-/plugin-title-0.11.1.tgz} - name: '@mdit-vue/plugin-title' - version: 0.11.1 - dependencies: - '@mdit-vue/shared': registry.npmmirror.com/@mdit-vue/shared/0.11.0 - '@mdit-vue/types': registry.npmmirror.com/@mdit-vue/types/0.11.0 - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - dev: true - - registry.npmmirror.com/@mdit-vue/plugin-toc/0.11.1: - resolution: {integrity: sha512-1tkGb1092ZgLhoSmE5hkC6U0IRGG5bWhUY4p14npV4cwqntciXEoXRqPA1jGEDh5hnofZC0bHbeS3uKxsmAEew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mdit-vue/plugin-toc/-/plugin-toc-0.11.1.tgz} - name: '@mdit-vue/plugin-toc' - version: 0.11.1 - dependencies: - '@mdit-vue/shared': registry.npmmirror.com/@mdit-vue/shared/0.11.0 - '@mdit-vue/types': registry.npmmirror.com/@mdit-vue/types/0.11.0 - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - dev: true - - registry.npmmirror.com/@mdit-vue/shared/0.11.0: - resolution: {integrity: sha512-eiGe42y7UYpjO6/8Lg6OpAtzZrRU9k8dhpX1e/kJMTcL+tn+XkqRMJJ8I2pdrOQMSkgvIva5FNAriykqFzkdGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mdit-vue/shared/-/shared-0.11.0.tgz} - name: '@mdit-vue/shared' - version: 0.11.0 - dependencies: - '@mdit-vue/types': registry.npmmirror.com/@mdit-vue/types/0.11.0 - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - dev: true - - registry.npmmirror.com/@mdit-vue/types/0.11.0: - resolution: {integrity: sha512-ygCGP7vFpqS02hpZwEe1uz8cfImWX06+zRs08J+tCZRKb6k+easIaIHFtY9ZSxt7j9L/gAPLDo/5RmOT6z0DPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mdit-vue/types/-/types-0.11.0.tgz} - name: '@mdit-vue/types' - version: 0.11.0 - dev: true - - registry.npmmirror.com/@mermaid-js/mermaid-mindmap/9.2.2: - resolution: {integrity: sha512-uzUY0PR/itxkQxpDRg95yDPJ++mRDUmGce4EVCKFebUCs0UNI/xi5mhvV6Oq8czM2ImY0W1gJu4MS2Xq3yiQug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@mermaid-js/mermaid-mindmap/-/mermaid-mindmap-9.2.2.tgz} - name: '@mermaid-js/mermaid-mindmap' - version: 9.2.2 - dependencies: - '@braintree/sanitize-url': registry.npmmirror.com/@braintree/sanitize-url/6.0.0 - cytoscape: registry.npmmirror.com/cytoscape/3.23.0 - cytoscape-cose-bilkent: registry.npmmirror.com/cytoscape-cose-bilkent/4.1.0_cytoscape@3.23.0 - cytoscape-fcose: registry.npmmirror.com/cytoscape-fcose/2.1.0_cytoscape@3.23.0 - d3: registry.npmmirror.com/d3/7.4.4 - non-layered-tidy-tree-layout: registry.npmmirror.com/non-layered-tidy-tree-layout/2.0.2 - dev: true - - registry.npmmirror.com/@nodelib/fs.scandir/2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} - name: '@nodelib/fs.scandir' - version: 2.1.5 - engines: {node: '>= 8'} + magicast@0.5.5: dependencies: - '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5 - run-parallel: registry.npmmirror.com/run-parallel/1.2.0 - dev: true + '@babel/parser': 7.29.9 + '@babel/types': 7.29.8 + source-map-js: 1.2.2 - registry.npmmirror.com/@nodelib/fs.stat/2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} - name: '@nodelib/fs.stat' - version: 2.0.5 - engines: {node: '>= 8'} - dev: true + make-error@1.3.6: {} - registry.npmmirror.com/@nodelib/fs.walk/1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} - name: '@nodelib/fs.walk' - version: 1.2.8 - engines: {node: '>= 8'} + map-obj@1.0.1: {} + + map-obj@4.3.0: {} + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + marked@16.4.2: {} + + mdast-util-definitions@6.0.0: dependencies: - '@nodelib/fs.scandir': registry.npmmirror.com/@nodelib/fs.scandir/2.1.5 - fastq: registry.npmmirror.com/fastq/1.13.0 - dev: true + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 - registry.npmmirror.com/@rollup/plugin-babel/5.3.1_rdqchdyh26wleuqzxvwvgxjg6a: - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz} - id: registry.npmmirror.com/@rollup/plugin-babel/5.3.1 - name: '@rollup/plugin-babel' - version: 5.3.1 - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true + mdast-util-find-and-replace@3.0.3: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.16.7 - '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1 - rollup: registry.npmmirror.com/rollup/2.79.1 - dev: true - - registry.npmmirror.com/@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1: - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz} - id: registry.npmmirror.com/@rollup/plugin-node-resolve/11.2.1 - name: '@rollup/plugin-node-resolve' - version: 11.2.1 - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1 - '@types/resolve': registry.npmmirror.com/@types/resolve/1.17.1 - builtin-modules: registry.npmmirror.com/builtin-modules/3.2.0 - deepmerge: registry.npmmirror.com/deepmerge/4.2.2 - is-module: registry.npmmirror.com/is-module/1.0.0 - resolve: registry.npmmirror.com/resolve/1.22.1 - rollup: registry.npmmirror.com/rollup/2.79.1 - dev: true - - registry.npmmirror.com/@rollup/plugin-replace/2.4.2_rollup@2.79.1: - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz} - id: registry.npmmirror.com/@rollup/plugin-replace/2.4.2 - name: '@rollup/plugin-replace' - version: 2.4.2 - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1 - magic-string: registry.npmmirror.com/magic-string/0.25.9 - rollup: registry.npmmirror.com/rollup/2.79.1 - dev: true - - registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1: - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz} - id: registry.npmmirror.com/@rollup/pluginutils/3.1.0 - name: '@rollup/pluginutils' - version: 3.1.0 - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': registry.npmmirror.com/@types/estree/0.0.39 - estree-walker: registry.npmmirror.com/estree-walker/1.0.1 - picomatch: registry.npmmirror.com/picomatch/2.3.1 - rollup: registry.npmmirror.com/rollup/2.79.1 - dev: true - - registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz} - name: '@surma/rollup-plugin-off-main-thread' - version: 2.2.3 - dependencies: - ejs: registry.npmmirror.com/ejs/3.1.7 - json5: registry.npmmirror.com/json5/2.2.1 - magic-string: registry.npmmirror.com/magic-string/0.25.9 - string.prototype.matchall: registry.npmmirror.com/string.prototype.matchall/4.0.7 - dev: true - - registry.npmmirror.com/@types/debug/4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/debug/-/debug-4.1.7.tgz} - name: '@types/debug' - version: 4.1.7 - dependencies: - '@types/ms': registry.npmmirror.com/@types/ms/0.7.31 - dev: true - - registry.npmmirror.com/@types/estree/0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz} - name: '@types/estree' - version: 0.0.39 - dev: true - - registry.npmmirror.com/@types/fs-extra/9.0.13: - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-9.0.13.tgz} - name: '@types/fs-extra' - version: 9.0.13 - dependencies: - '@types/node': registry.npmmirror.com/@types/node/17.0.32 - dev: true - - registry.npmmirror.com/@types/hash-sum/1.0.0: - resolution: {integrity: sha512-FdLBT93h3kcZ586Aee66HPCVJ6qvxVjBlDWNmxSGSbCZe9hTsjRKdSsl4y1T+3zfujxo9auykQMnFsfyHWD7wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/hash-sum/-/hash-sum-1.0.0.tgz} - name: '@types/hash-sum' - version: 1.0.0 - dev: true - - registry.npmmirror.com/@types/katex/0.14.0: - resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/katex/-/katex-0.14.0.tgz} - name: '@types/katex' - version: 0.14.0 - dev: true - - registry.npmmirror.com/@types/linkify-it/3.0.2: - resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-3.0.2.tgz} - name: '@types/linkify-it' - version: 3.0.2 - dev: true - - registry.npmmirror.com/@types/markdown-it-emoji/2.0.2: - resolution: {integrity: sha512-2ln8Wjbcj/0oRi/6VnuMeWEHHuK8uapFttvcLmDIe1GKCsFBLOLBX+D+xhDa9oWOQV0IpvxwrSfKKssAqqroog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz} - name: '@types/markdown-it-emoji' - version: 2.0.2 - dependencies: - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - dev: true - - registry.npmmirror.com/@types/markdown-it/12.2.3: - resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-12.2.3.tgz} - name: '@types/markdown-it' - version: 12.2.3 - dependencies: - '@types/linkify-it': registry.npmmirror.com/@types/linkify-it/3.0.2 - '@types/mdurl': registry.npmmirror.com/@types/mdurl/1.0.2 - dev: true - - registry.npmmirror.com/@types/mdurl/1.0.2: - resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/mdurl/-/mdurl-1.0.2.tgz} - name: '@types/mdurl' - version: 1.0.2 - dev: true - - registry.npmmirror.com/@types/ms/0.7.31: - resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/ms/-/ms-0.7.31.tgz} - name: '@types/ms' - version: 0.7.31 - dev: true - - registry.npmmirror.com/@types/node/17.0.32: - resolution: {integrity: sha512-eAIcfAvhf/BkHcf4pkLJ7ECpBAhh9kcxRBpip9cTiO+hf+aJrsxYxBeS6OXvOd9WqNAJmavXVpZvY1rBjNsXmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-17.0.32.tgz} - name: '@types/node' - version: 17.0.32 - dev: true - - registry.npmmirror.com/@types/resolve/1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/resolve/-/resolve-1.17.1.tgz} - name: '@types/resolve' - version: 1.17.1 - dependencies: - '@types/node': registry.npmmirror.com/@types/node/17.0.32 - dev: true - - registry.npmmirror.com/@types/sax/1.2.4: - resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/sax/-/sax-1.2.4.tgz} - name: '@types/sax' - version: 1.2.4 - dependencies: - '@types/node': registry.npmmirror.com/@types/node/17.0.32 - dev: true - - registry.npmmirror.com/@types/trusted-types/2.0.2: - resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.2.tgz} - name: '@types/trusted-types' - version: 2.0.2 - dev: true - - registry.npmmirror.com/@types/web-bluetooth/0.0.16: - resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz} - name: '@types/web-bluetooth' - version: 0.0.16 - dev: true - - registry.npmmirror.com/@vitejs/plugin-vue/3.2.0_vite@3.1.8+vue@3.2.45: - resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz} - id: registry.npmmirror.com/@vitejs/plugin-vue/3.2.0 - name: '@vitejs/plugin-vue' - version: 3.2.0 - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^3.0.0 - vue: ^3.2.25 - dependencies: - vite: registry.npmmirror.com/vite/3.1.8 - vue: registry.npmmirror.com/vue/3.2.45 - dev: true - - registry.npmmirror.com/@vue/compiler-core/3.2.45: - resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz} - name: '@vue/compiler-core' - version: 3.2.45 - dependencies: - '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.10 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - estree-walker: registry.npmmirror.com/estree-walker/2.0.2 - source-map: registry.npmmirror.com/source-map/0.6.1 - dev: true - - registry.npmmirror.com/@vue/compiler-dom/3.2.45: - resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz} - name: '@vue/compiler-dom' - version: 3.2.45 - dependencies: - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - dev: true - - registry.npmmirror.com/@vue/compiler-sfc/3.2.45: - resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz} - name: '@vue/compiler-sfc' - version: 3.2.45 - dependencies: - '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.10 - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45 - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.45 - '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.45 - '@vue/reactivity-transform': registry.npmmirror.com/@vue/reactivity-transform/3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - estree-walker: registry.npmmirror.com/estree-walker/2.0.2 - magic-string: registry.npmmirror.com/magic-string/0.25.9 - postcss: registry.npmmirror.com/postcss/8.4.13 - source-map: registry.npmmirror.com/source-map/0.6.1 - dev: true - - registry.npmmirror.com/@vue/compiler-ssr/3.2.45: - resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz} - name: '@vue/compiler-ssr' - version: 3.2.45 - dependencies: - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - dev: true - - registry.npmmirror.com/@vue/devtools-api/6.4.5: - resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.4.5.tgz} - name: '@vue/devtools-api' - version: 6.4.5 - dev: true - - registry.npmmirror.com/@vue/reactivity-transform/3.2.45: - resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz} - name: '@vue/reactivity-transform' - version: 3.2.45 - dependencies: - '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.10 - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - estree-walker: registry.npmmirror.com/estree-walker/2.0.2 - magic-string: registry.npmmirror.com/magic-string/0.25.9 - dev: true - - registry.npmmirror.com/@vue/reactivity/3.2.45: - resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz} - name: '@vue/reactivity' - version: 3.2.45 - dependencies: - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - dev: true - - registry.npmmirror.com/@vue/repl/1.3.2_vue@3.2.45: - resolution: {integrity: sha512-5joGOuTFmjaugG3E1h/oP1EXSMcVXRUwLIoo8xvYQnqDrCT6g1SfsH1pfei5PpC5DUxMX1584CekZu6REgGYkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/repl/-/repl-1.3.2.tgz} - id: registry.npmmirror.com/@vue/repl/1.3.2 - name: '@vue/repl' - version: 1.3.2 - peerDependencies: - vue: ^3.2.13 - dependencies: - vue: registry.npmmirror.com/vue/3.2.45 - dev: true - - registry.npmmirror.com/@vue/runtime-core/3.2.45: - resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz} - name: '@vue/runtime-core' - version: 3.2.45 - dependencies: - '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - dev: true - - registry.npmmirror.com/@vue/runtime-dom/3.2.45: - resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz} - name: '@vue/runtime-dom' - version: 3.2.45 - dependencies: - '@vue/runtime-core': registry.npmmirror.com/@vue/runtime-core/3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - csstype: registry.npmmirror.com/csstype/2.6.20 - dev: true - - registry.npmmirror.com/@vue/server-renderer/3.2.45_vue@3.2.45: - resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz} - id: registry.npmmirror.com/@vue/server-renderer/3.2.45 - name: '@vue/server-renderer' - version: 3.2.45 - peerDependencies: - vue: 3.2.45 - dependencies: - '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - vue: registry.npmmirror.com/vue/3.2.45 - dev: true - - registry.npmmirror.com/@vue/shared/3.2.45: - resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz} - name: '@vue/shared' - version: 3.2.45 - dev: true - - registry.npmmirror.com/@vuepress/bundler-vite/2.0.0-beta.53: - resolution: {integrity: sha512-zkqkV+EnoTi7cTRi6xjb0SRg0GzRYwceJu80/6q7Bd+h+VktqhapcHAZ8QaIsq8OxCXbg3sms/A9kg3UxBnRqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/bundler-vite/-/bundler-vite-2.0.0-beta.53.tgz} - name: '@vuepress/bundler-vite' - version: 2.0.0-beta.53 - dependencies: - '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/3.2.0_vite@3.1.8+vue@3.2.45 - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - autoprefixer: registry.npmmirror.com/autoprefixer/10.4.13_postcss@8.4.19 - connect-history-api-fallback: registry.npmmirror.com/connect-history-api-fallback/2.0.0 - postcss: registry.npmmirror.com/postcss/8.4.19 - postcss-load-config: registry.npmmirror.com/postcss-load-config/4.0.1_postcss@8.4.19 - rollup: registry.npmmirror.com/rollup/2.79.1 - vite: registry.npmmirror.com/vite/3.1.8 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - transitivePeerDependencies: - - less - - sass - - stylus - - supports-color - - terser - - ts-node - dev: true + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 - registry.npmmirror.com/@vuepress/cli/2.0.0-beta.53: - resolution: {integrity: sha512-MT2y6syOIP17hq/mWiZXTDEViDb3/k5eIVzlvpw4N8oiAr4hwwdCUzQ5vKVd7trn+83KvG5XYOLtjrj1hexlYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/cli/-/cli-2.0.0-beta.53.tgz} - name: '@vuepress/cli' - version: 2.0.0-beta.53 - hasBin: true + mdast-util-from-markdown@2.1.0: dependencies: - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - cac: registry.npmmirror.com/cac/6.7.14 - chokidar: registry.npmmirror.com/chokidar/3.5.3 - envinfo: registry.npmmirror.com/envinfo/7.8.1 - esbuild: registry.npmmirror.com/esbuild/0.15.14 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmmirror.com/@vuepress/client/2.0.0-beta.53: - resolution: {integrity: sha512-TDKxlrUvwfWu3QAY4SHeu9mVqBkEoKvuoy0WsKy7x9omEy8+HJG1O9y664bP9SotD52skcKL1iW38nQJR2+AkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/client/-/client-2.0.0-beta.53.tgz} - name: '@vuepress/client' - version: 2.0.0-beta.53 - dependencies: - '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.4.5 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - dev: true - - registry.npmmirror.com/@vuepress/core/2.0.0-beta.53: - resolution: {integrity: sha512-s642hM+PpiNphLm/KZvva45OYKX6hWRh2Y+C92TDGzCMxiONI8ZxGLqXRCw5bKw5NGh91s+P4sf3iaY+JxL1Ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/core/-/core-2.0.0-beta.53.tgz} - name: '@vuepress/core' - version: 2.0.0-beta.53 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/markdown': registry.npmmirror.com/@vuepress/markdown/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - vue: registry.npmmirror.com/vue/3.2.45 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmmirror.com/@vuepress/markdown/2.0.0-beta.53: - resolution: {integrity: sha512-ohIujGc0tVSsFTBD5kyB0asxLsDtctzrOOgHvaS2fDWqm0MQisjxnQKNFdbWk9bfddAyty0aKN+m/4l0f5lCDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/markdown/-/markdown-2.0.0-beta.53.tgz} - name: '@vuepress/markdown' - version: 2.0.0-beta.53 - dependencies: - '@mdit-vue/plugin-component': registry.npmmirror.com/@mdit-vue/plugin-component/0.11.1 - '@mdit-vue/plugin-frontmatter': registry.npmmirror.com/@mdit-vue/plugin-frontmatter/0.11.1 - '@mdit-vue/plugin-headers': registry.npmmirror.com/@mdit-vue/plugin-headers/0.11.1 - '@mdit-vue/plugin-sfc': registry.npmmirror.com/@mdit-vue/plugin-sfc/0.11.1 - '@mdit-vue/plugin-title': registry.npmmirror.com/@mdit-vue/plugin-title/0.11.1 - '@mdit-vue/plugin-toc': registry.npmmirror.com/@mdit-vue/plugin-toc/0.11.1 - '@mdit-vue/shared': registry.npmmirror.com/@mdit-vue/shared/0.11.0 - '@mdit-vue/types': registry.npmmirror.com/@mdit-vue/types/0.11.0 - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - '@types/markdown-it-emoji': registry.npmmirror.com/@types/markdown-it-emoji/2.0.2 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - markdown-it-anchor: registry.npmmirror.com/markdown-it-anchor/8.6.5_ea7kj7wzjkld5jo2noyjqxi764 - markdown-it-emoji: registry.npmmirror.com/markdown-it-emoji/2.0.2 - mdurl: registry.npmmirror.com/mdurl/1.0.1 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.3 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color - dev: true - - registry.npmmirror.com/@vuepress/plugin-active-header-links/2.0.0-beta.53: - resolution: {integrity: sha512-rlDQ4CpF/awzHN6l6c5C4/bbiAZisZ2Z9cP2GJJBbxIb6QA6GOrIoHMt6L+9321Q+/jmntjoRJT4yHP/jg8OMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-active-header-links' - version: 2.0.0-beta.53 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - ts-debounce: registry.npmmirror.com/ts-debounce/4.0.0 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.3 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.1.0 + mdast-util-to-markdown: 2.2.0 + micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - - registry.npmmirror.com/@vuepress/plugin-back-to-top/2.0.0-beta.53: - resolution: {integrity: sha512-M7+WIA1e57yHbpUKksVDQdcHceslqeGn0/MldjmZHZ/xosxjM/ZIsw7AiSdmCcISEZBr60IXxDoLqJMNhMNQLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-back-to-top' - version: 2.0.0-beta.53 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - ts-debounce: registry.npmmirror.com/ts-debounce/4.0.0 - vue: registry.npmmirror.com/vue/3.2.45 + + mdast-util-gfm-strikethrough@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.1.0 + mdast-util-to-markdown: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - - registry.npmmirror.com/@vuepress/plugin-container/2.0.0-beta.53: - resolution: {integrity: sha512-kkEee5iGRHfGVFNBsF2b5vCfjC7dcmU2zqICJq8/UZbhWuyAavpmDovQYLCVh/yTfNE1FlRUOAFFI+jf3bvF9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-container/-/plugin-container-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-container' - version: 2.0.0-beta.53 - dependencies: - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/markdown': registry.npmmirror.com/@vuepress/markdown/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - markdown-it-container: registry.npmmirror.com/markdown-it-container/3.0.0 + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.1.0 + mdast-util-to-markdown: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - - registry.npmmirror.com/@vuepress/plugin-external-link-icon/2.0.0-beta.53: - resolution: {integrity: sha512-S+IY1PK96Vbuf90IdZBe36kRpMCXrGr9TPaPm1aAQ9GA0Y5QQkTV876SXsb0n1B6Ae2AsSieulB2o4lyoL1LBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-external-link-icon' - version: 2.0.0-beta.53 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/markdown': registry.npmmirror.com/@vuepress/markdown/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - vue: registry.npmmirror.com/vue/3.2.45 + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.1.0 + mdast-util-to-markdown: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - registry.npmmirror.com/@vuepress/plugin-git/2.0.0-beta.53: - resolution: {integrity: sha512-hefVEUhxTgvDcrsIutVBBfJvixR/L6iTQZ9eDAj2z71fOgnVNdN8PNZ9XRDm3nhZrye9X44AmJI82Wk9SlwgVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-git/-/plugin-git-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-git' - version: 2.0.0-beta.53 + mdast-util-gfm@3.1.0: dependencies: - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - execa: registry.npmmirror.com/execa/6.1.0 + mdast-util-from-markdown: 2.1.0 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.1 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - - registry.npmmirror.com/@vuepress/plugin-medium-zoom/2.0.0-beta.53: - resolution: {integrity: sha512-hvmO40is/JrHDcSFp73qwX90nXUAaBBZHokZ0I3D61u6acFtI4HU/vpJpu+3oiqjXHQaUNqZO5eDr4EpypGjUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-medium-zoom' - version: 2.0.0-beta.53 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - medium-zoom: registry.npmmirror.com/medium-zoom/1.0.6 - vue: registry.npmmirror.com/vue/3.2.45 + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.1.0 + mdast-util-to-markdown: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - - registry.npmmirror.com/@vuepress/plugin-nprogress/2.0.0-beta.53: - resolution: {integrity: sha512-xO8Dqw1yCttY6N+jDpuwE3RG+jQVPE0EieRafTWRO+fGCFobGa/6Zldc4x3+alB2xyXwFAy2495NYgPudNIWeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-nprogress' - version: 2.0.0-beta.53 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.1.0 + mdast-util-to-markdown: 2.2.0 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color - dev: true - registry.npmmirror.com/@vuepress/plugin-palette/2.0.0-beta.53: - resolution: {integrity: sha512-iYCb397nu/WacvXEaTmeex7lxkjHqRPXLAqBccrD4JWPshP2iu1ajM316jI8sUXSPTZZl4GOQ7+fqbr+UGHdEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-palette/-/plugin-palette-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-palette' - version: 2.0.0-beta.53 + mdast-util-mdx@3.0.0: dependencies: - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - chokidar: registry.npmmirror.com/chokidar/3.5.3 + mdast-util-from-markdown: 2.1.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - registry.npmmirror.com/@vuepress/plugin-prismjs/2.0.0-beta.53: - resolution: {integrity: sha512-8zAMHqSPJK8Nw9hP2V12BrAfT88Mmw37Lhi6cbc0S9Ub+wapzZkD9I1SuR1OEssqqMrHL2h1dWx25RqYstn7eA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-prismjs' - version: 2.0.0-beta.53 + mdast-util-mdxjs-esm@2.0.1: dependencies: - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - prismjs: registry.npmmirror.com/prismjs/1.29.0 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.1.0 + mdast-util-to-markdown: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - - registry.npmmirror.com/@vuepress/plugin-theme-data/2.0.0-beta.53: - resolution: {integrity: sha512-fTOWrsO+ql2ZcN1UtF7Xc6+J/XfOAL+4+0Tq6fSky4Gv1HdC2Euey+r+RYgYkTdogdbL2VaUp3s+jhcow5WWAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-beta.53.tgz} - name: '@vuepress/plugin-theme-data' - version: 2.0.0-beta.53 - dependencies: - '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.4.5 - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - vue: registry.npmmirror.com/vue/3.2.45 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53: - resolution: {integrity: sha512-B0qWorGxC3ruSHdZcJW24XtEDEU3L3uPr0xzTeKVfHjOM4b9hN83YzBtW4n/WPnmk1RXVE9266Ulh9ZL5okGOw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/shared/-/shared-2.0.0-beta.53.tgz} - name: '@vuepress/shared' - version: 2.0.0-beta.53 + mdast-util-phrasing@4.1.0: dependencies: - '@mdit-vue/types': registry.npmmirror.com/@mdit-vue/types/0.11.0 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - dev: true + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 - registry.npmmirror.com/@vuepress/theme-default/2.0.0-beta.53: - resolution: {integrity: sha512-FNzEgD2D+ZZRpgF4PfUMCVfKkpzHjmapMlho6Q74d1iqf5cbDeiTyUSWXM2SWHwyZDbdbemjcnfiztb1c215ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/theme-default/-/theme-default-2.0.0-beta.53.tgz} - name: '@vuepress/theme-default' - version: 2.0.0-beta.53 - peerDependencies: - sass-loader: ^13.0.2 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/plugin-active-header-links': registry.npmmirror.com/@vuepress/plugin-active-header-links/2.0.0-beta.53 - '@vuepress/plugin-back-to-top': registry.npmmirror.com/@vuepress/plugin-back-to-top/2.0.0-beta.53 - '@vuepress/plugin-container': registry.npmmirror.com/@vuepress/plugin-container/2.0.0-beta.53 - '@vuepress/plugin-external-link-icon': registry.npmmirror.com/@vuepress/plugin-external-link-icon/2.0.0-beta.53 - '@vuepress/plugin-git': registry.npmmirror.com/@vuepress/plugin-git/2.0.0-beta.53 - '@vuepress/plugin-medium-zoom': registry.npmmirror.com/@vuepress/plugin-medium-zoom/2.0.0-beta.53 - '@vuepress/plugin-nprogress': registry.npmmirror.com/@vuepress/plugin-nprogress/2.0.0-beta.53 - '@vuepress/plugin-palette': registry.npmmirror.com/@vuepress/plugin-palette/2.0.0-beta.53 - '@vuepress/plugin-prismjs': registry.npmmirror.com/@vuepress/plugin-prismjs/2.0.0-beta.53 - '@vuepress/plugin-theme-data': registry.npmmirror.com/@vuepress/plugin-theme-data/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - sass: registry.npmmirror.com/sass/1.56.1 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - transitivePeerDependencies: - - '@vue/composition-api' - - supports-color - dev: true - - registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53: - resolution: {integrity: sha512-cYqAspUJoY1J84kbDbPbrIcfaoID5Wb+BUrcWV7x8EFPXTn/KBLgc4/KBxWkdxk8O9V96/bXBDSLlalqLJCmJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vuepress/utils/-/utils-2.0.0-beta.53.tgz} - name: '@vuepress/utils' - version: 2.0.0-beta.53 - dependencies: - '@types/debug': registry.npmmirror.com/@types/debug/4.1.7 - '@types/fs-extra': registry.npmmirror.com/@types/fs-extra/9.0.13 - '@types/hash-sum': registry.npmmirror.com/@types/hash-sum/1.0.0 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - chalk: registry.npmmirror.com/chalk/5.1.2 - debug: registry.npmmirror.com/debug/4.3.4 - fs-extra: registry.npmmirror.com/fs-extra/10.1.0 - globby: registry.npmmirror.com/globby/13.1.2 - hash-sum: registry.npmmirror.com/hash-sum/2.0.0 - ora: registry.npmmirror.com/ora/6.1.2 - upath: registry.npmmirror.com/upath/2.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45: - resolution: {integrity: sha512-6GsWBsJHEb3sYw15mbLrcbslAVY45pkzjJYTKYKCXv88z7srAF0VEW0q+oXKsl58tCbqooplInahXFg8Yo1m4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/core/-/core-9.5.0.tgz} - id: registry.npmmirror.com/@vueuse/core/9.5.0 - name: '@vueuse/core' - version: 9.5.0 - dependencies: - '@types/web-bluetooth': registry.npmmirror.com/@types/web-bluetooth/0.0.16 - '@vueuse/metadata': registry.npmmirror.com/@vueuse/metadata/9.5.0 - '@vueuse/shared': registry.npmmirror.com/@vueuse/shared/9.5.0_vue@3.2.45 - vue-demi: registry.npmmirror.com/vue-demi/0.12.5_vue@3.2.45 - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: true - - registry.npmmirror.com/@vueuse/metadata/9.5.0: - resolution: {integrity: sha512-4M1AyPZmIv41pym+K5+4wup3bKuYebbH8w8BROY1hmT7rIwcyS4tEL+UsGz0Hiu1FCOxcoBrwtAizc0YmBJjyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.5.0.tgz} - name: '@vueuse/metadata' - version: 9.5.0 - dev: true - - registry.npmmirror.com/@vueuse/shared/9.5.0_vue@3.2.45: - resolution: {integrity: sha512-HnnCWU1Vg9CVWRCcI8ohDKDRB2Sc4bTgT1XAIaoLSfVHHn+TKbrox6pd3klCSw4UDxkhDfOk8cAdcK+Z5KleCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/shared/-/shared-9.5.0.tgz} - id: registry.npmmirror.com/@vueuse/shared/9.5.0 - name: '@vueuse/shared' - version: 9.5.0 - dependencies: - vue-demi: registry.npmmirror.com/vue-demi/0.12.5_vue@3.2.45 - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: true - - registry.npmmirror.com/@waline/client/2.14.1: - resolution: {integrity: sha512-JnZidLAbuv9yf/+6LvLyv0t6dMHniIuFImgt4npctdCtG6cWuwIr8chhnJg4egiO5iVjlYbZeZYYvhwtjtPxwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@waline/client/-/client-2.14.1.tgz} - name: '@waline/client' - version: 2.14.1 - engines: {node: '>=14'} + mdast-util-to-hast@13.2.1: dependencies: - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - autosize: registry.npmmirror.com/autosize/5.0.1 - marked: registry.npmmirror.com/marked/4.2.2 - vue: registry.npmmirror.com/vue/3.2.45 - transitivePeerDependencies: - - '@vue/composition-api' - dev: true + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.4.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 - registry.npmmirror.com/acorn/8.7.1: - resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.7.1.tgz} - name: acorn - version: 8.7.1 - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - registry.npmmirror.com/ajv/8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv/-/ajv-8.11.0.tgz} - name: ajv - version: 8.11.0 - dependencies: - fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3 - json-schema-traverse: registry.npmmirror.com/json-schema-traverse/1.0.0 - require-from-string: registry.npmmirror.com/require-from-string/2.0.2 - uri-js: registry.npmmirror.com/uri-js/4.4.1 - dev: true - - registry.npmmirror.com/ansi-colors/4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz} - name: ansi-colors - version: 4.1.3 - engines: {node: '>=6'} - dev: true + mdast-util-to-markdown@2.2.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-character: 2.1.1 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 - registry.npmmirror.com/ansi-regex/3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz} - name: ansi-regex - version: 3.0.1 - engines: {node: '>=4'} - dev: true + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 - registry.npmmirror.com/ansi-regex/5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz} - name: ansi-regex - version: 5.0.1 - engines: {node: '>=8'} - dev: true + mdn-data@2.0.28: {} - registry.npmmirror.com/ansi-regex/6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz} - name: ansi-regex - version: 6.0.1 - engines: {node: '>=12'} - dev: true + mdn-data@2.27.1: {} - registry.npmmirror.com/ansi-styles/3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz} - name: ansi-styles - version: 3.2.1 - engines: {node: '>=4'} + meow@8.1.2: dependencies: - color-convert: registry.npmmirror.com/color-convert/1.9.3 - dev: true + '@types/minimist': 1.2.5 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 - registry.npmmirror.com/ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz} - name: ansi-styles - version: 4.3.0 - engines: {node: '>=8'} - dependencies: - color-convert: registry.npmmirror.com/color-convert/2.0.1 - dev: true + merge-stream@2.0.0: {} + + merge@2.1.1: {} + + mermaid@11.17.2: + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.7 + '@mermaid-js/parser': 1.2.1 + '@types/d3': 7.4.3 + '@upsetjs/venn.js': 2.0.0 + cytoscape: 3.34.3 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.3) + cytoscape-fcose: 2.2.0(cytoscape@3.34.3) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.14 + dayjs: 1.11.23 + dompurify: 3.4.16 + es-toolkit: 1.52.0 + fastdom: 1.0.12 + katex: 0.16.47 + khroma: 2.1.0 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.4.0 + ts-dedent: 2.3.0 + uuid: 14.0.2 + + micromark-core-commonmark@2.0.4: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.1.0 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-edit-map: 1.0.0 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.4 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-gfm-table@2.1.2: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.3 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.2 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.3 - registry.npmmirror.com/anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz} - name: anymatch - version: 3.1.2 - engines: {node: '>= 8'} + micromark-extension-mdxjs-esm@3.0.0: dependencies: - normalize-path: registry.npmmirror.com/normalize-path/3.0.0 - picomatch: registry.npmmirror.com/picomatch/2.3.1 - dev: true - - registry.npmmirror.com/arg/4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz} - name: arg - version: 4.1.3 - dev: true - - registry.npmmirror.com/arg/5.0.1: - resolution: {integrity: sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arg/-/arg-5.0.1.tgz} - name: arg - version: 5.0.1 - dev: true - - registry.npmmirror.com/argparse/1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz} - name: argparse - version: 1.0.10 - dependencies: - sprintf-js: registry.npmmirror.com/sprintf-js/1.0.3 - dev: true - - registry.npmmirror.com/argparse/2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz} - name: argparse - version: 2.0.1 - dev: true - - registry.npmmirror.com/async/3.2.3: - resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async/-/async-3.2.3.tgz} - name: async - version: 3.2.3 - dev: true - - registry.npmmirror.com/at-least-node/1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz} - name: at-least-node - version: 1.0.0 - engines: {node: '>= 4.0.0'} - dev: true + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.4 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 - registry.npmmirror.com/autoprefixer/10.4.13_postcss@8.4.19: - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.13.tgz} - id: registry.npmmirror.com/autoprefixer/10.4.13 - name: autoprefixer - version: 10.4.13 - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: registry.npmmirror.com/browserslist/4.21.4 - caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001431 - fraction.js: registry.npmmirror.com/fraction.js/4.2.0 - normalize-range: registry.npmmirror.com/normalize-range/0.1.2 - picocolors: registry.npmmirror.com/picocolors/1.0.0 - postcss: registry.npmmirror.com/postcss/8.4.19 - postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0 - dev: true - - registry.npmmirror.com/autosize/5.0.1: - resolution: {integrity: sha512-UIWUlE4TOVPNNj2jjrU39wI4hEYbneUypEqcyRmRFIx5CC2gNdg3rQr+Zh7/3h6egbBvm33TDQjNQKtj9Tk1HA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/autosize/-/autosize-5.0.1.tgz} - name: autosize - version: 5.0.1 - dev: true - - registry.npmmirror.com/babel-plugin-dynamic-import-node/2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz} - name: babel-plugin-dynamic-import-node - version: 2.3.3 - dependencies: - object.assign: registry.npmmirror.com/object.assign/4.1.2 - dev: true - - registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.1_@babel+core@7.17.10: - resolution: {integrity: sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz} - id: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.1 - name: babel-plugin-polyfill-corejs2 - version: 0.3.1 - peerDependencies: - '@babel/core': ^7.0.0-0 + micromark-extension-mdxjs@3.0.0: dependencies: - '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.17.10 - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.1_@babel+core@7.17.10 - semver: registry.npmmirror.com/semver/6.3.0 - transitivePeerDependencies: - - supports-color - dev: true + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.3 - registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.5.2_@babel+core@7.17.10: - resolution: {integrity: sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz} - id: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.5.2 - name: babel-plugin-polyfill-corejs3 - version: 0.5.2 - peerDependencies: - '@babel/core': ^7.0.0-0 + micromark-factory-destination@2.0.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.1_@babel+core@7.17.10 - core-js-compat: registry.npmmirror.com/core-js-compat/3.22.5 - transitivePeerDependencies: - - supports-color - dev: true + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 - registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.3.1_@babel+core@7.17.10: - resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz} - id: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.3.1 - name: babel-plugin-polyfill-regenerator - version: 0.3.1 - peerDependencies: - '@babel/core': ^7.0.0-0 + micromark-factory-label@2.0.1: dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.1_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmmirror.com/balanced-match/1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} - name: balanced-match - version: 1.0.2 - dev: true - - registry.npmmirror.com/balloon-css/1.2.0: - resolution: {integrity: sha512-urXwkHgwp6GsXVF+it01485Z2Cj4pnW02ICnM0TemOlkKmCNnDLmyy+ZZiRXBpwldUXO+aRNr7Hdia4CBvXJ5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balloon-css/-/balloon-css-1.2.0.tgz} - name: balloon-css - version: 1.2.0 - dev: true - - registry.npmmirror.com/base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz} - name: base64-js - version: 1.5.1 - dev: true - - registry.npmmirror.com/bcrypt-ts/3.0.0: - resolution: {integrity: sha512-z4pqdPaAuuvBsHCwb77bisxT9qo5hRSbn78FXNhhTywHabqMzcIosDxjnKUrkPQbMyz2curUT+fJRith57rIvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bcrypt-ts/-/bcrypt-ts-3.0.0.tgz} - name: bcrypt-ts - version: 3.0.0 - dev: true - - registry.npmmirror.com/binary-extensions/2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz} - name: binary-extensions - version: 2.2.0 - engines: {node: '>=8'} - dev: true - - registry.npmmirror.com/bl/5.1.0: - resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bl/-/bl-5.1.0.tgz} - name: bl - version: 5.1.0 - dependencies: - buffer: registry.npmmirror.com/buffer/6.0.3 - inherits: registry.npmmirror.com/inherits/2.0.4 - readable-stream: registry.npmmirror.com/readable-stream/3.6.0 - dev: true - - registry.npmmirror.com/boolbase/1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz} - name: boolbase - version: 1.0.0 - dev: true - - registry.npmmirror.com/brace-expansion/1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz} - name: brace-expansion - version: 1.1.11 - dependencies: - balanced-match: registry.npmmirror.com/balanced-match/1.0.2 - concat-map: registry.npmmirror.com/concat-map/0.0.1 - dev: true - - registry.npmmirror.com/brace-expansion/2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz} - name: brace-expansion - version: 2.0.1 - dependencies: - balanced-match: registry.npmmirror.com/balanced-match/1.0.2 - dev: true - - registry.npmmirror.com/braces/3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz} - name: braces - version: 3.0.2 - engines: {node: '>=8'} + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-factory-mdx-expression@2.0.3: dependencies: - fill-range: registry.npmmirror.com/fill-range/7.0.1 - dev: true + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 - registry.npmmirror.com/browserslist/4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz} - name: browserslist - version: 4.21.4 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + micromark-factory-space@2.1.0: dependencies: - caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001431 - electron-to-chromium: registry.npmmirror.com/electron-to-chromium/1.4.284 - node-releases: registry.npmmirror.com/node-releases/2.0.6 - update-browserslist-db: registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.4 - dev: true - - registry.npmmirror.com/buffer-from/1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz} - name: buffer-from - version: 1.1.2 - dev: true - - registry.npmmirror.com/buffer/6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz} - name: buffer - version: 6.0.3 - dependencies: - base64-js: registry.npmmirror.com/base64-js/1.5.1 - ieee754: registry.npmmirror.com/ieee754/1.2.1 - dev: true - - registry.npmmirror.com/builtin-modules/3.2.0: - resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.2.0.tgz} - name: builtin-modules - version: 3.2.0 - engines: {node: '>=6'} - dev: true + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.3 - registry.npmmirror.com/cac/6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz} - name: cac - version: 6.7.14 - engines: {node: '>=8'} - dev: true + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 - registry.npmmirror.com/call-bind/1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz} - name: call-bind - version: 1.0.2 + micromark-factory-whitespace@2.0.1: dependencies: - function-bind: registry.npmmirror.com/function-bind/1.1.1 - get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 - dev: true + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 - registry.npmmirror.com/callsites/3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz} - name: callsites - version: 3.1.0 - engines: {node: '>=6'} - dev: true - - registry.npmmirror.com/caniuse-lite/1.0.30001431: - resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz} - name: caniuse-lite - version: 1.0.30001431 - dev: true - - registry.npmmirror.com/chalk/2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz} - name: chalk - version: 2.4.2 - engines: {node: '>=4'} + micromark-util-character@2.1.1: dependencies: - ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1 - escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 - supports-color: registry.npmmirror.com/supports-color/5.5.0 - dev: true + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 - registry.npmmirror.com/chalk/4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz} - name: chalk - version: 4.1.2 - engines: {node: '>=10'} + micromark-util-chunked@2.0.1: dependencies: - ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 - supports-color: registry.npmmirror.com/supports-color/7.2.0 - dev: true - - registry.npmmirror.com/chalk/5.1.2: - resolution: {integrity: sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-5.1.2.tgz} - name: chalk - version: 5.1.2 - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - - registry.npmmirror.com/chart.js/4.0.1: - resolution: {integrity: sha512-5/8/9eBivwBZK81mKvmIwTb2Pmw4D/5h1RK9fBWZLLZ8mCJ+kfYNmV9rMrGoa5Hgy2/wVDBMLSUDudul2/9ihA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chart.js/-/chart.js-4.0.1.tgz} - name: chart.js - version: 4.0.1 - engines: {pnpm: ^7.0.0} - dev: true - - registry.npmmirror.com/cheerio-select/1.6.0: - resolution: {integrity: sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cheerio-select/-/cheerio-select-1.6.0.tgz} - name: cheerio-select - version: 1.6.0 - dependencies: - css-select: registry.npmmirror.com/css-select/4.3.0 - css-what: registry.npmmirror.com/css-what/6.1.0 - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/4.3.1 - domutils: registry.npmmirror.com/domutils/2.8.0 - dev: true - - registry.npmmirror.com/cheerio-select/2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz} - name: cheerio-select - version: 2.1.0 - dependencies: - boolbase: registry.npmmirror.com/boolbase/1.0.0 - css-select: registry.npmmirror.com/css-select/5.1.0 - css-what: registry.npmmirror.com/css-what/6.1.0 - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/5.0.3 - domutils: registry.npmmirror.com/domutils/3.0.1 - dev: true - - registry.npmmirror.com/cheerio/1.0.0-rc.10: - resolution: {integrity: sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.10.tgz} - name: cheerio - version: 1.0.0-rc.10 - engines: {node: '>= 6'} + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: dependencies: - cheerio-select: registry.npmmirror.com/cheerio-select/1.6.0 - dom-serializer: registry.npmmirror.com/dom-serializer/1.4.1 - domhandler: registry.npmmirror.com/domhandler/4.3.1 - htmlparser2: registry.npmmirror.com/htmlparser2/6.1.0 - parse5: registry.npmmirror.com/parse5/6.0.1 - parse5-htmlparser2-tree-adapter: registry.npmmirror.com/parse5-htmlparser2-tree-adapter/6.0.1 - tslib: registry.npmmirror.com/tslib/2.3.0 - dev: true - - registry.npmmirror.com/cheerio/1.0.0-rc.12: - resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.12.tgz} - name: cheerio - version: 1.0.0-rc.12 - engines: {node: '>= 6'} + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-util-combine-extensions@2.0.1: dependencies: - cheerio-select: registry.npmmirror.com/cheerio-select/2.1.0 - dom-serializer: registry.npmmirror.com/dom-serializer/2.0.0 - domhandler: registry.npmmirror.com/domhandler/5.0.3 - domutils: registry.npmmirror.com/domutils/3.0.1 - htmlparser2: registry.npmmirror.com/htmlparser2/8.0.1 - parse5: registry.npmmirror.com/parse5/7.1.1 - parse5-htmlparser2-tree-adapter: registry.npmmirror.com/parse5-htmlparser2-tree-adapter/7.0.0 - dev: true - - registry.npmmirror.com/chokidar/3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz} - name: chokidar - version: 3.5.3 - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: registry.npmmirror.com/anymatch/3.1.2 - braces: registry.npmmirror.com/braces/3.0.2 - glob-parent: registry.npmmirror.com/glob-parent/5.1.2 - is-binary-path: registry.npmmirror.com/is-binary-path/2.1.0 - is-glob: registry.npmmirror.com/is-glob/4.0.3 - normalize-path: registry.npmmirror.com/normalize-path/3.0.0 - readdirp: registry.npmmirror.com/readdirp/3.6.0 - optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 - dev: true - - registry.npmmirror.com/cli-cursor/4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz} - name: cli-cursor - version: 4.0.0 - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - restore-cursor: registry.npmmirror.com/restore-cursor/4.0.0 - dev: true - - registry.npmmirror.com/cli-spinners/2.6.1: - resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz} - name: cli-spinners - version: 2.6.1 - engines: {node: '>=6'} - dev: true + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.3 - registry.npmmirror.com/clone/1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz} - name: clone - version: 1.0.4 - engines: {node: '>=0.8'} - dev: true + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 - registry.npmmirror.com/color-convert/1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz} - name: color-convert - version: 1.9.3 + micromark-util-decode-string@2.0.1: dependencies: - color-name: registry.npmmirror.com/color-name/1.1.3 - dev: true + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 - registry.npmmirror.com/color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz} - name: color-convert - version: 2.0.1 - engines: {node: '>=7.0.0'} + micromark-util-edit-map@1.0.0: dependencies: - color-name: registry.npmmirror.com/color-name/1.1.4 - dev: true - - registry.npmmirror.com/color-name/1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz} - name: color-name - version: 1.1.3 - dev: true - - registry.npmmirror.com/color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz} - name: color-name - version: 1.1.4 - dev: true - - registry.npmmirror.com/commander/2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz} - name: commander - version: 2.20.3 - dev: true - - registry.npmmirror.com/commander/6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-6.2.1.tgz} - name: commander - version: 6.2.1 - engines: {node: '>= 6'} - dev: true + micromark-util-types: 2.0.3 - registry.npmmirror.com/commander/7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz} - name: commander - version: 7.2.0 - engines: {node: '>= 10'} - dev: true + micromark-util-encode@2.0.1: {} - registry.npmmirror.com/commander/8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz} - name: commander - version: 8.3.0 - engines: {node: '>= 12'} - dev: true - - registry.npmmirror.com/commander/9.2.0: - resolution: {integrity: sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-9.2.0.tgz} - name: commander - version: 9.2.0 - engines: {node: ^12.20.0 || >=14} - dev: true - - registry.npmmirror.com/common-tags/1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz} - name: common-tags - version: 1.8.2 - engines: {node: '>=4.0.0'} - dev: true - - registry.npmmirror.com/concat-map/0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz} - name: concat-map - version: 0.0.1 - dev: true - - registry.npmmirror.com/connect-history-api-fallback/2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz} - name: connect-history-api-fallback - version: 2.0.0 - engines: {node: '>=0.8'} - dev: true + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} - registry.npmmirror.com/convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz} - name: convert-source-map - version: 1.8.0 + micromark-util-normalize-identifier@2.0.1: dependencies: - safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2 - dev: true + micromark-util-symbol: 2.0.1 - registry.npmmirror.com/core-js-compat/3.22.5: - resolution: {integrity: sha512-rEF75n3QtInrYICvJjrAgV03HwKiYvtKHdPtaba1KucG+cNZ4NJnH9isqt979e67KZlhpbCOTwnsvnIr+CVeOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.22.5.tgz} - name: core-js-compat - version: 3.22.5 + micromark-util-resolve-all@2.0.1: dependencies: - browserslist: registry.npmmirror.com/browserslist/4.21.4 - semver: registry.npmmirror.com/semver/7.0.0 - dev: true + micromark-util-types: 2.0.3 - registry.npmmirror.com/cose-base/1.0.3: - resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cose-base/-/cose-base-1.0.3.tgz} - name: cose-base - version: 1.0.3 + micromark-util-sanitize-uri@2.0.1: dependencies: - layout-base: registry.npmmirror.com/layout-base/1.0.2 - dev: true + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 - registry.npmmirror.com/cose-base/2.1.0: - resolution: {integrity: sha512-HTMm07dhxq1dIPGWwpiVrIk9n+DH7KYmqWA786mLe8jDS+1ZjGtJGIIsJVKoseZXS6/FxiUWCJ2B7XzqUCuhPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cose-base/-/cose-base-2.1.0.tgz} - name: cose-base - version: 2.1.0 + micromark-util-subtokenize@2.1.0: dependencies: - layout-base: registry.npmmirror.com/layout-base/2.0.1 - dev: true + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 - registry.npmmirror.com/cross-spawn/7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz} - name: cross-spawn - version: 7.0.3 - engines: {node: '>= 8'} + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.3: {} + + micromark@4.0.3: dependencies: - path-key: registry.npmmirror.com/path-key/3.1.1 - shebang-command: registry.npmmirror.com/shebang-command/2.0.0 - which: registry.npmmirror.com/which/2.0.2 - dev: true + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.4 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-edit-map: 1.0.0 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + transitivePeerDependencies: + - supports-color - registry.npmmirror.com/crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz} - name: crypto-random-string - version: 2.0.0 - engines: {node: '>=8'} - dev: true - - registry.npmmirror.com/css-select/4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz} - name: css-select - version: 4.3.0 - dependencies: - boolbase: registry.npmmirror.com/boolbase/1.0.0 - css-what: registry.npmmirror.com/css-what/6.1.0 - domhandler: registry.npmmirror.com/domhandler/4.3.1 - domutils: registry.npmmirror.com/domutils/2.8.0 - nth-check: registry.npmmirror.com/nth-check/2.1.1 - dev: true - - registry.npmmirror.com/css-select/5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz} - name: css-select - version: 5.1.0 - dependencies: - boolbase: registry.npmmirror.com/boolbase/1.0.0 - css-what: registry.npmmirror.com/css-what/6.1.0 - domhandler: registry.npmmirror.com/domhandler/5.0.3 - domutils: registry.npmmirror.com/domutils/3.0.1 - nth-check: registry.npmmirror.com/nth-check/2.1.1 - dev: true - - registry.npmmirror.com/css-what/6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz} - name: css-what - version: 6.1.0 - engines: {node: '>= 6'} - dev: true - - registry.npmmirror.com/csstype/2.6.20: - resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz} - name: csstype - version: 2.6.20 - dev: true - - registry.npmmirror.com/cytoscape-cose-bilkent/4.1.0_cytoscape@3.23.0: - resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz} - id: registry.npmmirror.com/cytoscape-cose-bilkent/4.1.0 - name: cytoscape-cose-bilkent - version: 4.1.0 - peerDependencies: - cytoscape: ^3.2.0 + micromatch@4.0.8: dependencies: - cose-base: registry.npmmirror.com/cose-base/1.0.3 - cytoscape: registry.npmmirror.com/cytoscape/3.23.0 - dev: true + braces: 3.0.3 + picomatch: 2.3.2 - registry.npmmirror.com/cytoscape-fcose/2.1.0_cytoscape@3.23.0: - resolution: {integrity: sha512-Q3apPl66jf8/2sMsrCjNP247nbDkyIPjA9g5iPMMWNLZgP3/mn9aryF7EFY/oRPEpv7bKJ4jYmCoU5r5/qAc1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cytoscape-fcose/-/cytoscape-fcose-2.1.0.tgz} - id: registry.npmmirror.com/cytoscape-fcose/2.1.0 - name: cytoscape-fcose - version: 2.1.0 - peerDependencies: - cytoscape: ^3.2.0 + mimic-fn@2.1.0: {} + + min-indent@1.0.1: {} + + minimatch@3.1.5: dependencies: - cose-base: registry.npmmirror.com/cose-base/2.1.0 - cytoscape: registry.npmmirror.com/cytoscape/3.23.0 - dev: true + brace-expansion: 1.1.21 - registry.npmmirror.com/cytoscape/3.23.0: - resolution: {integrity: sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cytoscape/-/cytoscape-3.23.0.tgz} - name: cytoscape - version: 3.23.0 - engines: {node: '>=0.10'} + minimist-options@4.1.0: dependencies: - heap: registry.npmmirror.com/heap/0.2.7 - lodash: registry.npmmirror.com/lodash/4.17.21 - dev: true + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 - registry.npmmirror.com/d3-array/1.2.4: - resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-array/-/d3-array-1.2.4.tgz} - name: d3-array - version: 1.2.4 - dev: true + minimist@1.2.8: {} - registry.npmmirror.com/d3-array/3.1.6: - resolution: {integrity: sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-array/-/d3-array-3.1.6.tgz} - name: d3-array - version: 3.1.6 - engines: {node: '>=12'} - dependencies: - internmap: registry.npmmirror.com/internmap/2.0.3 - dev: true + mrmime@2.0.1: {} - registry.npmmirror.com/d3-axis/1.0.12: - resolution: {integrity: sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-axis/-/d3-axis-1.0.12.tgz} - name: d3-axis - version: 1.0.12 - dev: true + ms@2.1.3: {} - registry.npmmirror.com/d3-axis/3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz} - name: d3-axis - version: 3.0.0 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/d3-brush/1.1.6: - resolution: {integrity: sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-brush/-/d3-brush-1.1.6.tgz} - name: d3-brush - version: 1.1.6 - dependencies: - d3-dispatch: registry.npmmirror.com/d3-dispatch/1.0.6 - d3-drag: registry.npmmirror.com/d3-drag/1.2.5 - d3-interpolate: registry.npmmirror.com/d3-interpolate/1.4.0 - d3-selection: registry.npmmirror.com/d3-selection/1.4.2 - d3-transition: registry.npmmirror.com/d3-transition/1.3.2 - dev: true - - registry.npmmirror.com/d3-brush/3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-brush/-/d3-brush-3.0.0.tgz} - name: d3-brush - version: 3.0.0 - engines: {node: '>=12'} - dependencies: - d3-dispatch: registry.npmmirror.com/d3-dispatch/3.0.1 - d3-drag: registry.npmmirror.com/d3-drag/3.0.0 - d3-interpolate: registry.npmmirror.com/d3-interpolate/3.0.1 - d3-selection: registry.npmmirror.com/d3-selection/3.0.0 - d3-transition: registry.npmmirror.com/d3-transition/3.0.1_d3-selection@3.0.0 - dev: true - - registry.npmmirror.com/d3-chord/1.0.6: - resolution: {integrity: sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-chord/-/d3-chord-1.0.6.tgz} - name: d3-chord - version: 1.0.6 - dependencies: - d3-array: registry.npmmirror.com/d3-array/1.2.4 - d3-path: registry.npmmirror.com/d3-path/1.0.9 - dev: true - - registry.npmmirror.com/d3-chord/3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-chord/-/d3-chord-3.0.1.tgz} - name: d3-chord - version: 3.0.1 - engines: {node: '>=12'} - dependencies: - d3-path: registry.npmmirror.com/d3-path/3.0.1 - dev: true - - registry.npmmirror.com/d3-collection/1.0.7: - resolution: {integrity: sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-collection/-/d3-collection-1.0.7.tgz} - name: d3-collection - version: 1.0.7 - dev: true - - registry.npmmirror.com/d3-color/1.4.1: - resolution: {integrity: sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-color/-/d3-color-1.4.1.tgz} - name: d3-color - version: 1.4.1 - dev: true - - registry.npmmirror.com/d3-color/3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz} - name: d3-color - version: 3.1.0 - engines: {node: '>=12'} - dev: true + muggle-string@0.4.1: {} - registry.npmmirror.com/d3-contour/1.3.2: - resolution: {integrity: sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-contour/-/d3-contour-1.3.2.tgz} - name: d3-contour - version: 1.3.2 - dependencies: - d3-array: registry.npmmirror.com/d3-array/1.2.4 - dev: true + mute-stream@0.0.8: {} - registry.npmmirror.com/d3-contour/3.0.1: - resolution: {integrity: sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-contour/-/d3-contour-3.0.1.tgz} - name: d3-contour - version: 3.0.1 - engines: {node: '>=12'} + nanoid@3.3.20: {} + + neotraverse@1.0.1: {} + + nlcst-to-string@4.0.0: dependencies: - d3-array: registry.npmmirror.com/d3-array/3.1.6 - dev: true + '@types/nlcst': 2.0.3 - registry.npmmirror.com/d3-delaunay/6.0.2: - resolution: {integrity: sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-delaunay/-/d3-delaunay-6.0.2.tgz} - name: d3-delaunay - version: 6.0.2 - engines: {node: '>=12'} + node-fetch-native@1.6.7: {} + + node-gyp-build-optional-packages@5.1.1: dependencies: - delaunator: registry.npmmirror.com/delaunator/5.0.0 - dev: true + detect-libc: 2.1.2 + optional: true - registry.npmmirror.com/d3-dispatch/1.0.6: - resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz} - name: d3-dispatch - version: 1.0.6 - dev: true + node-mock-http@1.0.5: {} - registry.npmmirror.com/d3-dispatch/3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz} - name: d3-dispatch - version: 3.0.1 - engines: {node: '>=12'} - dev: true + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.12 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 - registry.npmmirror.com/d3-drag/1.2.5: - resolution: {integrity: sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-drag/-/d3-drag-1.2.5.tgz} - name: d3-drag - version: 1.2.5 + normalize-package-data@3.0.3: dependencies: - d3-dispatch: registry.npmmirror.com/d3-dispatch/1.0.6 - d3-selection: registry.npmmirror.com/d3-selection/1.4.2 - dev: true + hosted-git-info: 4.1.0 + is-core-module: 2.17.0 + semver: 7.8.5 + validate-npm-package-license: 3.0.4 - registry.npmmirror.com/d3-drag/3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz} - name: d3-drag - version: 3.0.0 - engines: {node: '>=12'} + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: dependencies: - d3-dispatch: registry.npmmirror.com/d3-dispatch/3.0.1 - d3-selection: registry.npmmirror.com/d3-selection/3.0.0 - dev: true + path-key: 3.1.1 - registry.npmmirror.com/d3-dsv/1.2.0: - resolution: {integrity: sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-dsv/-/d3-dsv-1.2.0.tgz} - name: d3-dsv - version: 1.2.0 - hasBin: true + nth-check@2.1.1: dependencies: - commander: registry.npmmirror.com/commander/2.20.3 - iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24 - rw: registry.npmmirror.com/rw/1.3.3 - dev: true + boolbase: 1.0.0 - registry.npmmirror.com/d3-dsv/3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz} - name: d3-dsv - version: 3.0.1 - engines: {node: '>=12'} - hasBin: true + obug@3.0.0: {} + + ofetch@1.5.1: dependencies: - commander: registry.npmmirror.com/commander/7.2.0 - iconv-lite: registry.npmmirror.com/iconv-lite/0.6.3 - rw: registry.npmmirror.com/rw/1.3.3 - dev: true - - registry.npmmirror.com/d3-ease/1.0.7: - resolution: {integrity: sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-ease/-/d3-ease-1.0.7.tgz} - name: d3-ease - version: 1.0.7 - dev: true - - registry.npmmirror.com/d3-ease/3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz} - name: d3-ease - version: 3.0.1 - engines: {node: '>=12'} - dev: true + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.4 - registry.npmmirror.com/d3-fetch/1.2.0: - resolution: {integrity: sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-fetch/-/d3-fetch-1.2.0.tgz} - name: d3-fetch - version: 1.2.0 + ohash@2.0.12: {} + + once@1.4.0: dependencies: - d3-dsv: registry.npmmirror.com/d3-dsv/1.2.0 - dev: true + wrappy: 1.0.2 - registry.npmmirror.com/d3-fetch/3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-fetch/-/d3-fetch-3.0.1.tgz} - name: d3-fetch - version: 3.0.1 - engines: {node: '>=12'} + onetime@5.1.2: dependencies: - d3-dsv: registry.npmmirror.com/d3-dsv/3.0.1 - dev: true + mimic-fn: 2.1.0 - registry.npmmirror.com/d3-force/1.2.1: - resolution: {integrity: sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-force/-/d3-force-1.2.1.tgz} - name: d3-force - version: 1.2.1 + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: dependencies: - d3-collection: registry.npmmirror.com/d3-collection/1.0.7 - d3-dispatch: registry.npmmirror.com/d3-dispatch/1.0.6 - d3-quadtree: registry.npmmirror.com/d3-quadtree/1.0.7 - d3-timer: registry.npmmirror.com/d3-timer/1.0.10 - dev: true + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 - registry.npmmirror.com/d3-force/3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz} - name: d3-force - version: 3.0.0 - engines: {node: '>=12'} + ora@5.4.1: dependencies: - d3-dispatch: registry.npmmirror.com/d3-dispatch/3.0.1 - d3-quadtree: registry.npmmirror.com/d3-quadtree/3.0.1 - d3-timer: registry.npmmirror.com/d3-timer/3.0.1 - dev: true - - registry.npmmirror.com/d3-format/1.4.5: - resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-format/-/d3-format-1.4.5.tgz} - name: d3-format - version: 1.4.5 - dev: true - - registry.npmmirror.com/d3-format/3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-format/-/d3-format-3.1.0.tgz} - name: d3-format - version: 3.1.0 - engines: {node: '>=12'} - dev: true + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 - registry.npmmirror.com/d3-geo/1.12.1: - resolution: {integrity: sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-geo/-/d3-geo-1.12.1.tgz} - name: d3-geo - version: 1.12.1 + p-limit@2.3.0: dependencies: - d3-array: registry.npmmirror.com/d3-array/1.2.4 - dev: true + p-try: 2.2.0 - registry.npmmirror.com/d3-geo/3.0.1: - resolution: {integrity: sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-geo/-/d3-geo-3.0.1.tgz} - name: d3-geo - version: 3.0.1 - engines: {node: '>=12'} + p-limit@3.1.0: dependencies: - d3-array: registry.npmmirror.com/d3-array/3.1.6 - dev: true + yocto-queue: 0.1.0 - registry.npmmirror.com/d3-hierarchy/1.1.9: - resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz} - name: d3-hierarchy - version: 1.1.9 - dev: true + p-limit@7.3.3: + dependencies: + yocto-queue: 1.2.2 - registry.npmmirror.com/d3-hierarchy/3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz} - name: d3-hierarchy - version: 3.1.2 - engines: {node: '>=12'} - dev: true + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 - registry.npmmirror.com/d3-interpolate/1.4.0: - resolution: {integrity: sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz} - name: d3-interpolate - version: 1.4.0 + p-locate@5.0.0: dependencies: - d3-color: registry.npmmirror.com/d3-color/1.4.1 - dev: true + p-limit: 3.1.0 - registry.npmmirror.com/d3-interpolate/3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz} - name: d3-interpolate - version: 3.0.1 - engines: {node: '>=12'} + p-queue@9.3.3: dependencies: - d3-color: registry.npmmirror.com/d3-color/3.1.0 - dev: true + eventemitter3: 5.0.4 + p-timeout: 7.0.2 - registry.npmmirror.com/d3-path/1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-path/-/d3-path-1.0.9.tgz} - name: d3-path - version: 1.0.9 - dev: true + p-timeout@7.0.2: {} - registry.npmmirror.com/d3-path/3.0.1: - resolution: {integrity: sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-path/-/d3-path-3.0.1.tgz} - name: d3-path - version: 3.0.1 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/d3-polygon/1.0.6: - resolution: {integrity: sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-polygon/-/d3-polygon-1.0.6.tgz} - name: d3-polygon - version: 1.0.6 - dev: true - - registry.npmmirror.com/d3-polygon/3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz} - name: d3-polygon - version: 3.0.1 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/d3-quadtree/1.0.7: - resolution: {integrity: sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz} - name: d3-quadtree - version: 1.0.7 - dev: true - - registry.npmmirror.com/d3-quadtree/3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz} - name: d3-quadtree - version: 3.0.1 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/d3-random/1.1.2: - resolution: {integrity: sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-random/-/d3-random-1.1.2.tgz} - name: d3-random - version: 1.1.2 - dev: true - - registry.npmmirror.com/d3-random/3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-random/-/d3-random-3.0.1.tgz} - name: d3-random - version: 3.0.1 - engines: {node: '>=12'} - dev: true + p-try@2.2.0: {} + + package-manager-detector@1.9.0: {} + + pagefind@1.5.2: + optionalDependencies: + '@pagefind/darwin-arm64': 1.5.2 + '@pagefind/darwin-x64': 1.5.2 + '@pagefind/freebsd-x64': 1.5.2 + '@pagefind/linux-arm64': 1.5.2 + '@pagefind/linux-x64': 1.5.2 + '@pagefind/windows-arm64': 1.5.2 + '@pagefind/windows-x64': 1.5.2 - registry.npmmirror.com/d3-scale-chromatic/1.5.0: - resolution: {integrity: sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz} - name: d3-scale-chromatic - version: 1.5.0 + parent-module@1.0.1: dependencies: - d3-color: registry.npmmirror.com/d3-color/1.4.1 - d3-interpolate: registry.npmmirror.com/d3-interpolate/1.4.0 - dev: true + callsites: 3.1.0 - registry.npmmirror.com/d3-scale-chromatic/3.0.0: - resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz} - name: d3-scale-chromatic - version: 3.0.0 - engines: {node: '>=12'} + parse-entities@4.0.2: dependencies: - d3-color: registry.npmmirror.com/d3-color/3.1.0 - d3-interpolate: registry.npmmirror.com/d3-interpolate/3.0.1 - dev: true - - registry.npmmirror.com/d3-scale/2.2.2: - resolution: {integrity: sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-scale/-/d3-scale-2.2.2.tgz} - name: d3-scale - version: 2.2.2 - dependencies: - d3-array: registry.npmmirror.com/d3-array/1.2.4 - d3-collection: registry.npmmirror.com/d3-collection/1.0.7 - d3-format: registry.npmmirror.com/d3-format/1.4.5 - d3-interpolate: registry.npmmirror.com/d3-interpolate/1.4.0 - d3-time: registry.npmmirror.com/d3-time/1.1.0 - d3-time-format: registry.npmmirror.com/d3-time-format/2.3.0 - dev: true - - registry.npmmirror.com/d3-scale/4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz} - name: d3-scale - version: 4.0.2 - engines: {node: '>=12'} + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-json@5.2.0: dependencies: - d3-array: registry.npmmirror.com/d3-array/3.1.6 - d3-format: registry.npmmirror.com/d3-format/3.1.0 - d3-interpolate: registry.npmmirror.com/d3-interpolate/3.0.1 - d3-time: registry.npmmirror.com/d3-time/3.0.0 - d3-time-format: registry.npmmirror.com/d3-time-format/4.1.0 - dev: true - - registry.npmmirror.com/d3-selection/1.4.2: - resolution: {integrity: sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-selection/-/d3-selection-1.4.2.tgz} - name: d3-selection - version: 1.4.2 - dev: true - - registry.npmmirror.com/d3-selection/3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz} - name: d3-selection - version: 3.0.0 - engines: {node: '>=12'} - dev: true + '@babel/code-frame': 7.29.7 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 - registry.npmmirror.com/d3-shape/1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-shape/-/d3-shape-1.3.7.tgz} - name: d3-shape - version: 1.3.7 + parse-latin@7.0.0: dependencies: - d3-path: registry.npmmirror.com/d3-path/1.0.9 - dev: true + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 - registry.npmmirror.com/d3-shape/3.1.0: - resolution: {integrity: sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-shape/-/d3-shape-3.1.0.tgz} - name: d3-shape - version: 3.1.0 - engines: {node: '>=12'} + parse-passwd@1.0.0: {} + + parse5@7.3.0: dependencies: - d3-path: registry.npmmirror.com/d3-path/3.0.1 - dev: true + entities: 6.0.1 + + path-browserify@1.0.1: {} + + path-data-parser@0.1.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} - registry.npmmirror.com/d3-time-format/2.3.0: - resolution: {integrity: sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-time-format/-/d3-time-format-2.3.0.tgz} - name: d3-time-format - version: 2.3.0 + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + piccolore@0.1.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.7: {} + + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: dependencies: - d3-time: registry.npmmirror.com/d3-time/1.1.0 - dev: true + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 - registry.npmmirror.com/d3-time-format/4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz} - name: d3-time-format - version: 4.1.0 - engines: {node: '>=12'} + postcss@8.5.29: dependencies: - d3-time: registry.npmmirror.com/d3-time/3.0.0 - dev: true + nanoid: 3.3.20 + picocolors: 1.1.1 + source-map-js: 1.2.2 - registry.npmmirror.com/d3-time/1.1.0: - resolution: {integrity: sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-time/-/d3-time-1.1.0.tgz} - name: d3-time - version: 1.1.0 - dev: true + prettier@3.9.9: {} - registry.npmmirror.com/d3-time/3.0.0: - resolution: {integrity: sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-time/-/d3-time-3.0.0.tgz} - name: d3-time - version: 3.0.0 - engines: {node: '>=12'} - dependencies: - d3-array: registry.npmmirror.com/d3-array/3.1.6 - dev: true + prismjs@1.30.0: {} - registry.npmmirror.com/d3-timer/1.0.10: - resolution: {integrity: sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-timer/-/d3-timer-1.0.10.tgz} - name: d3-timer - version: 1.0.10 - dev: true + process-ancestry@0.1.0: {} - registry.npmmirror.com/d3-timer/3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz} - name: d3-timer - version: 3.0.1 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/d3-transition/1.3.2: - resolution: {integrity: sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-transition/-/d3-transition-1.3.2.tgz} - name: d3-transition - version: 1.3.2 - dependencies: - d3-color: registry.npmmirror.com/d3-color/1.4.1 - d3-dispatch: registry.npmmirror.com/d3-dispatch/1.0.6 - d3-ease: registry.npmmirror.com/d3-ease/1.0.7 - d3-interpolate: registry.npmmirror.com/d3-interpolate/1.4.0 - d3-selection: registry.npmmirror.com/d3-selection/1.4.2 - d3-timer: registry.npmmirror.com/d3-timer/1.0.10 - dev: true - - registry.npmmirror.com/d3-transition/3.0.1_d3-selection@3.0.0: - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-transition/-/d3-transition-3.0.1.tgz} - id: registry.npmmirror.com/d3-transition/3.0.1 - name: d3-transition - version: 3.0.1 - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - dependencies: - d3-color: registry.npmmirror.com/d3-color/3.1.0 - d3-dispatch: registry.npmmirror.com/d3-dispatch/3.0.1 - d3-ease: registry.npmmirror.com/d3-ease/3.0.1 - d3-interpolate: registry.npmmirror.com/d3-interpolate/3.0.1 - d3-selection: registry.npmmirror.com/d3-selection/3.0.0 - d3-timer: registry.npmmirror.com/d3-timer/3.0.1 - dev: true - - registry.npmmirror.com/d3-voronoi/1.1.4: - resolution: {integrity: sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz} - name: d3-voronoi - version: 1.1.4 - dev: true - - registry.npmmirror.com/d3-zoom/1.8.3: - resolution: {integrity: sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-zoom/-/d3-zoom-1.8.3.tgz} - name: d3-zoom - version: 1.8.3 - dependencies: - d3-dispatch: registry.npmmirror.com/d3-dispatch/1.0.6 - d3-drag: registry.npmmirror.com/d3-drag/1.2.5 - d3-interpolate: registry.npmmirror.com/d3-interpolate/1.4.0 - d3-selection: registry.npmmirror.com/d3-selection/1.4.2 - d3-transition: registry.npmmirror.com/d3-transition/1.3.2 - dev: true - - registry.npmmirror.com/d3-zoom/3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-zoom/-/d3-zoom-3.0.0.tgz} - name: d3-zoom - version: 3.0.0 - engines: {node: '>=12'} + property-information@7.2.0: {} + + quick-lru@4.0.1: {} + + radix3@1.1.2: {} + + read-pkg-up@7.0.1: dependencies: - d3-dispatch: registry.npmmirror.com/d3-dispatch/3.0.1 - d3-drag: registry.npmmirror.com/d3-drag/3.0.0 - d3-interpolate: registry.npmmirror.com/d3-interpolate/3.0.1 - d3-selection: registry.npmmirror.com/d3-selection/3.0.0 - d3-transition: registry.npmmirror.com/d3-transition/3.0.1_d3-selection@3.0.0 - dev: true - - registry.npmmirror.com/d3/5.16.0: - resolution: {integrity: sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3/-/d3-5.16.0.tgz} - name: d3 - version: 5.16.0 - dependencies: - d3-array: registry.npmmirror.com/d3-array/1.2.4 - d3-axis: registry.npmmirror.com/d3-axis/1.0.12 - d3-brush: registry.npmmirror.com/d3-brush/1.1.6 - d3-chord: registry.npmmirror.com/d3-chord/1.0.6 - d3-collection: registry.npmmirror.com/d3-collection/1.0.7 - d3-color: registry.npmmirror.com/d3-color/1.4.1 - d3-contour: registry.npmmirror.com/d3-contour/1.3.2 - d3-dispatch: registry.npmmirror.com/d3-dispatch/1.0.6 - d3-drag: registry.npmmirror.com/d3-drag/1.2.5 - d3-dsv: registry.npmmirror.com/d3-dsv/1.2.0 - d3-ease: registry.npmmirror.com/d3-ease/1.0.7 - d3-fetch: registry.npmmirror.com/d3-fetch/1.2.0 - d3-force: registry.npmmirror.com/d3-force/1.2.1 - d3-format: registry.npmmirror.com/d3-format/1.4.5 - d3-geo: registry.npmmirror.com/d3-geo/1.12.1 - d3-hierarchy: registry.npmmirror.com/d3-hierarchy/1.1.9 - d3-interpolate: registry.npmmirror.com/d3-interpolate/1.4.0 - d3-path: registry.npmmirror.com/d3-path/1.0.9 - d3-polygon: registry.npmmirror.com/d3-polygon/1.0.6 - d3-quadtree: registry.npmmirror.com/d3-quadtree/1.0.7 - d3-random: registry.npmmirror.com/d3-random/1.1.2 - d3-scale: registry.npmmirror.com/d3-scale/2.2.2 - d3-scale-chromatic: registry.npmmirror.com/d3-scale-chromatic/1.5.0 - d3-selection: registry.npmmirror.com/d3-selection/1.4.2 - d3-shape: registry.npmmirror.com/d3-shape/1.3.7 - d3-time: registry.npmmirror.com/d3-time/1.1.0 - d3-time-format: registry.npmmirror.com/d3-time-format/2.3.0 - d3-timer: registry.npmmirror.com/d3-timer/1.0.10 - d3-transition: registry.npmmirror.com/d3-transition/1.3.2 - d3-voronoi: registry.npmmirror.com/d3-voronoi/1.1.4 - d3-zoom: registry.npmmirror.com/d3-zoom/1.8.3 - dev: true - - registry.npmmirror.com/d3/7.4.4: - resolution: {integrity: sha512-97FE+MYdAlV3R9P74+R3Uar7wUKkIFu89UWMjEaDhiJ9VxKvqaMxauImy8PC2DdBkdM2BxJOIoLxPrcZUyrKoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3/-/d3-7.4.4.tgz} - name: d3 - version: 7.4.4 - engines: {node: '>=12'} + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg@5.2.0: dependencies: - d3-array: registry.npmmirror.com/d3-array/3.1.6 - d3-axis: registry.npmmirror.com/d3-axis/3.0.0 - d3-brush: registry.npmmirror.com/d3-brush/3.0.0 - d3-chord: registry.npmmirror.com/d3-chord/3.0.1 - d3-color: registry.npmmirror.com/d3-color/3.1.0 - d3-contour: registry.npmmirror.com/d3-contour/3.0.1 - d3-delaunay: registry.npmmirror.com/d3-delaunay/6.0.2 - d3-dispatch: registry.npmmirror.com/d3-dispatch/3.0.1 - d3-drag: registry.npmmirror.com/d3-drag/3.0.0 - d3-dsv: registry.npmmirror.com/d3-dsv/3.0.1 - d3-ease: registry.npmmirror.com/d3-ease/3.0.1 - d3-fetch: registry.npmmirror.com/d3-fetch/3.0.1 - d3-force: registry.npmmirror.com/d3-force/3.0.0 - d3-format: registry.npmmirror.com/d3-format/3.1.0 - d3-geo: registry.npmmirror.com/d3-geo/3.0.1 - d3-hierarchy: registry.npmmirror.com/d3-hierarchy/3.1.2 - d3-interpolate: registry.npmmirror.com/d3-interpolate/3.0.1 - d3-path: registry.npmmirror.com/d3-path/3.0.1 - d3-polygon: registry.npmmirror.com/d3-polygon/3.0.1 - d3-quadtree: registry.npmmirror.com/d3-quadtree/3.0.1 - d3-random: registry.npmmirror.com/d3-random/3.0.1 - d3-scale: registry.npmmirror.com/d3-scale/4.0.2 - d3-scale-chromatic: registry.npmmirror.com/d3-scale-chromatic/3.0.0 - d3-selection: registry.npmmirror.com/d3-selection/3.0.0 - d3-shape: registry.npmmirror.com/d3-shape/3.1.0 - d3-time: registry.npmmirror.com/d3-time/3.0.0 - d3-time-format: registry.npmmirror.com/d3-time-format/4.1.0 - d3-timer: registry.npmmirror.com/d3-timer/3.0.1 - d3-transition: registry.npmmirror.com/d3-transition/3.0.1_d3-selection@3.0.0 - d3-zoom: registry.npmmirror.com/d3-zoom/3.0.0 - dev: true - - registry.npmmirror.com/dagre-d3/0.6.4: - resolution: {integrity: sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dagre-d3/-/dagre-d3-0.6.4.tgz} - name: dagre-d3 - version: 0.6.4 - dependencies: - d3: registry.npmmirror.com/d3/5.16.0 - dagre: registry.npmmirror.com/dagre/0.8.5 - graphlib: registry.npmmirror.com/graphlib/2.1.8 - lodash: registry.npmmirror.com/lodash/4.17.21 - dev: true - - registry.npmmirror.com/dagre/0.8.5: - resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dagre/-/dagre-0.8.5.tgz} - name: dagre - version: 0.8.5 - dependencies: - graphlib: registry.npmmirror.com/graphlib/2.1.8 - lodash: registry.npmmirror.com/lodash/4.17.21 - dev: true - - registry.npmmirror.com/dayjs/1.11.6: - resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.6.tgz} - name: dayjs - version: 1.11.6 - dev: true - - registry.npmmirror.com/debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz} - name: debug - version: 4.3.4 - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + readable-stream@3.6.2: dependencies: - ms: registry.npmmirror.com/ms/2.1.2 - dev: true + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 - registry.npmmirror.com/deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-4.2.2.tgz} - name: deepmerge - version: 4.2.2 - engines: {node: '>=0.10.0'} - dev: true + readdirp@4.1.2: {} - registry.npmmirror.com/defaults/1.0.3: - resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/defaults/-/defaults-1.0.3.tgz} - name: defaults - version: 1.0.3 - dependencies: - clone: registry.npmmirror.com/clone/1.0.4 - dev: true + readdirp@5.1.1: {} - registry.npmmirror.com/define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz} - name: define-properties - version: 1.1.4 - engines: {node: '>= 0.4'} + recma-build-jsx@1.0.0: dependencies: - has-property-descriptors: registry.npmmirror.com/has-property-descriptors/1.0.0 - object-keys: registry.npmmirror.com/object-keys/1.1.1 - dev: true + '@types/estree': 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 - registry.npmmirror.com/delaunator/5.0.0: - resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delaunator/-/delaunator-5.0.0.tgz} - name: delaunator - version: 5.0.0 + recma-jsx@1.0.1(acorn@8.19.0): dependencies: - robust-predicates: registry.npmmirror.com/robust-predicates/3.0.1 - dev: true + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 - registry.npmmirror.com/dir-glob/3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz} - name: dir-glob - version: 3.0.1 - engines: {node: '>=8'} + recma-parse@1.0.0: dependencies: - path-type: registry.npmmirror.com/path-type/4.0.0 - dev: true - - registry.npmmirror.com/dom-serializer/1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz} - name: dom-serializer - version: 1.4.1 - dependencies: - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/4.3.1 - entities: registry.npmmirror.com/entities/2.2.0 - dev: true - - registry.npmmirror.com/dom-serializer/2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz} - name: dom-serializer - version: 2.0.0 - dependencies: - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/5.0.3 - entities: registry.npmmirror.com/entities/4.4.0 - dev: true - - registry.npmmirror.com/domelementtype/2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz} - name: domelementtype - version: 2.3.0 - dev: true - - registry.npmmirror.com/domhandler/3.3.0: - resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-3.3.0.tgz} - name: domhandler - version: 3.3.0 - engines: {node: '>= 4'} + '@types/estree': 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: dependencies: - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - dev: true + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 - registry.npmmirror.com/domhandler/4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz} - name: domhandler - version: 4.3.1 - engines: {node: '>= 4'} + redent@3.0.0: dependencies: - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - dev: true + indent-string: 4.0.0 + strip-indent: 3.0.0 - registry.npmmirror.com/domhandler/5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz} - name: domhandler - version: 5.0.3 - engines: {node: '>= 4'} + regex-recursion@6.0.2: dependencies: - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - dev: true - - registry.npmmirror.com/dompurify/2.4.0: - resolution: {integrity: sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dompurify/-/dompurify-2.4.0.tgz} - name: dompurify - version: 2.4.0 - dev: true - - registry.npmmirror.com/domutils/2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz} - name: domutils - version: 2.8.0 - dependencies: - dom-serializer: registry.npmmirror.com/dom-serializer/1.4.1 - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/4.3.1 - dev: true - - registry.npmmirror.com/domutils/3.0.1: - resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-3.0.1.tgz} - name: domutils - version: 3.0.1 - dependencies: - dom-serializer: registry.npmmirror.com/dom-serializer/2.0.0 - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/5.0.3 - dev: true - - registry.npmmirror.com/echarts/5.4.0: - resolution: {integrity: sha512-uPsO9VRUIKAdFOoH3B0aNg7NRVdN7aM39/OjovjO9MwmWsAkfGyeXJhK+dbRi51iDrQWliXV60/XwLA7kg3z0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts/-/echarts-5.4.0.tgz} - name: echarts - version: 5.4.0 - dependencies: - tslib: registry.npmmirror.com/tslib/2.3.0 - zrender: registry.npmmirror.com/zrender/5.4.0 - dev: true - - registry.npmmirror.com/ejs/3.1.7: - resolution: {integrity: sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ejs/-/ejs-3.1.7.tgz} - name: ejs - version: 3.1.7 - engines: {node: '>=0.10.0'} - hasBin: true + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: dependencies: - jake: registry.npmmirror.com/jake/10.8.5 - dev: true - - registry.npmmirror.com/electron-to-chromium/1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz} - name: electron-to-chromium - version: 1.4.284 - dev: true - - registry.npmmirror.com/entities/2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz} - name: entities - version: 2.2.0 - dev: true - - registry.npmmirror.com/entities/3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz} - name: entities - version: 3.0.1 - engines: {node: '>=0.12'} - dev: true + regex-utilities: 2.3.0 - registry.npmmirror.com/entities/4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-4.4.0.tgz} - name: entities - version: 4.4.0 - engines: {node: '>=0.12'} - dev: true + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-raw: 9.1.0 + vfile: 6.0.3 - registry.npmmirror.com/envinfo/7.8.1: - resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/envinfo/-/envinfo-7.8.1.tgz} - name: envinfo - version: 7.8.1 - engines: {node: '>=4'} - hasBin: true - dev: true + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color - registry.npmmirror.com/error-ex/1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz} - name: error-ex - version: 1.3.2 + rehype-stringify@10.0.1: dependencies: - is-arrayish: registry.npmmirror.com/is-arrayish/0.2.1 - dev: true + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + unified: 11.0.5 - registry.npmmirror.com/es-abstract/1.20.0: - resolution: {integrity: sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.0.tgz} - name: es-abstract - version: 1.20.0 - engines: {node: '>= 0.4'} + remark-gfm@4.0.1: dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - es-to-primitive: registry.npmmirror.com/es-to-primitive/1.2.1 - function-bind: registry.npmmirror.com/function-bind/1.1.1 - function.prototype.name: registry.npmmirror.com/function.prototype.name/1.1.5 - get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 - get-symbol-description: registry.npmmirror.com/get-symbol-description/1.0.0 - has: registry.npmmirror.com/has/1.0.3 - has-property-descriptors: registry.npmmirror.com/has-property-descriptors/1.0.0 - has-symbols: registry.npmmirror.com/has-symbols/1.0.3 - internal-slot: registry.npmmirror.com/internal-slot/1.0.3 - is-callable: registry.npmmirror.com/is-callable/1.2.4 - is-negative-zero: registry.npmmirror.com/is-negative-zero/2.0.2 - is-regex: registry.npmmirror.com/is-regex/1.1.4 - is-shared-array-buffer: registry.npmmirror.com/is-shared-array-buffer/1.0.2 - is-string: registry.npmmirror.com/is-string/1.0.7 - is-weakref: registry.npmmirror.com/is-weakref/1.0.2 - object-inspect: registry.npmmirror.com/object-inspect/1.12.0 - object-keys: registry.npmmirror.com/object-keys/1.1.1 - object.assign: registry.npmmirror.com/object.assign/4.1.2 - regexp.prototype.flags: registry.npmmirror.com/regexp.prototype.flags/1.4.3 - string.prototype.trimend: registry.npmmirror.com/string.prototype.trimend/1.0.5 - string.prototype.trimstart: registry.npmmirror.com/string.prototype.trimstart/1.0.5 - unbox-primitive: registry.npmmirror.com/unbox-primitive/1.0.2 - dev: true - - registry.npmmirror.com/es-to-primitive/1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz} - name: es-to-primitive - version: 1.2.1 - engines: {node: '>= 0.4'} + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: dependencies: - is-callable: registry.npmmirror.com/is-callable/1.2.4 - is-date-object: registry.npmmirror.com/is-date-object/1.0.5 - is-symbol: registry.npmmirror.com/is-symbol/1.0.4 - dev: true + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color - registry.npmmirror.com/esbuild-android-64/0.15.14: - resolution: {integrity: sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz} - name: esbuild-android-64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.1.0 + micromark-util-types: 2.0.3 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color - registry.npmmirror.com/esbuild-android-arm64/0.15.14: - resolution: {integrity: sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz} - name: esbuild-android-arm64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 - registry.npmmirror.com/esbuild-darwin-64/0.15.14: - resolution: {integrity: sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz} - name: esbuild-darwin-64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + remark-smartypants@3.0.3: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 - registry.npmmirror.com/esbuild-darwin-arm64/0.15.14: - resolution: {integrity: sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz} - name: esbuild-darwin-arm64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.2.0 + unified: 11.0.5 - registry.npmmirror.com/esbuild-freebsd-64/0.15.14: - resolution: {integrity: sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz} - name: esbuild-freebsd-64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + request-light@0.5.8: {} - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.14: - resolution: {integrity: sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + request-light@0.7.0: {} - registry.npmmirror.com/esbuild-linux-32/0.15.14: - resolution: {integrity: sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz} - name: esbuild-linux-32 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true + require-directory@2.1.1: {} - registry.npmmirror.com/esbuild-linux-64/0.15.14: - resolution: {integrity: sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz} - name: esbuild-linux-64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true + require-from-string@2.0.2: {} - registry.npmmirror.com/esbuild-linux-arm/0.15.14: - resolution: {integrity: sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz} - name: esbuild-linux-arm - version: 0.15.14 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true + resolve-dir@1.0.1: + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 - registry.npmmirror.com/esbuild-linux-arm64/0.15.14: - resolution: {integrity: sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz} - name: esbuild-linux-arm64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true + resolve-from@4.0.0: {} - registry.npmmirror.com/esbuild-linux-mips64le/0.15.14: - resolution: {integrity: sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz} - name: esbuild-linux-mips64le - version: 0.15.14 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true + resolve-from@5.0.0: {} - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.14: - resolution: {integrity: sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz} - name: esbuild-linux-ppc64le - version: 0.15.14 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true + resolve-global@1.0.0: + dependencies: + global-dirs: 0.1.1 - registry.npmmirror.com/esbuild-linux-riscv64/0.15.14: - resolution: {integrity: sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz} - name: esbuild-linux-riscv64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + resolve-pkg-maps@1.0.0: {} - registry.npmmirror.com/esbuild-linux-s390x/0.15.14: - resolution: {integrity: sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz} - name: esbuild-linux-s390x - version: 0.15.14 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.17.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 - registry.npmmirror.com/esbuild-netbsd-64/0.15.14: - resolution: {integrity: sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz} - name: esbuild-netbsd-64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 - registry.npmmirror.com/esbuild-openbsd-64/0.15.14: - resolution: {integrity: sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz} - name: esbuild-openbsd-64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 - registry.npmmirror.com/esbuild-sunos-64/0.15.14: - resolution: {integrity: sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz} - name: esbuild-sunos-64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.1.0 - registry.npmmirror.com/esbuild-windows-32/0.15.14: - resolution: {integrity: sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz} - name: esbuild-windows-32 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 - registry.npmmirror.com/esbuild-windows-64/0.15.14: - resolution: {integrity: sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz} - name: esbuild-windows-64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 - registry.npmmirror.com/esbuild-windows-arm64/0.15.14: - resolution: {integrity: sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz} - name: esbuild-windows-arm64 - version: 0.15.14 - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true + robust-predicates@3.0.3: {} - registry.npmmirror.com/esbuild/0.15.14: - resolution: {integrity: sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.15.14.tgz} - name: esbuild - version: 0.15.14 - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + rolldown@1.2.12: + dependencies: + '@oxc-project/types': 0.152.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.14 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.14 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.14 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.14 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.14 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.14 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.14 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.14 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.14 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.14 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.14 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.14 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.14 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.14 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.14 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.14 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.14 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.14 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.14 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.14 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.14 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.14 - dev: true - - registry.npmmirror.com/escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz} - name: escalade - version: 3.1.1 - engines: {node: '>=6'} - dev: true + '@rolldown/binding-android-arm-eabi': 1.2.12 + '@rolldown/binding-android-arm64': 1.2.12 + '@rolldown/binding-darwin-arm64': 1.2.12 + '@rolldown/binding-darwin-x64': 1.2.12 + '@rolldown/binding-freebsd-x64': 1.2.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.12 + '@rolldown/binding-linux-arm64-gnu': 1.2.12 + '@rolldown/binding-linux-arm64-musl': 1.2.12 + '@rolldown/binding-linux-ppc64-gnu': 1.2.12 + '@rolldown/binding-linux-s390x-gnu': 1.2.12 + '@rolldown/binding-linux-x64-gnu': 1.2.12 + '@rolldown/binding-linux-x64-musl': 1.2.12 + '@rolldown/binding-openharmony-arm64': 1.2.12 + '@rolldown/binding-win32-arm64-msvc': 1.2.12 + '@rolldown/binding-win32-x64-msvc': 1.2.12 - registry.npmmirror.com/escape-goat/3.0.0: - resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-goat/-/escape-goat-3.0.0.tgz} - name: escape-goat - version: 3.0.0 - engines: {node: '>=10'} - dev: true + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 - registry.npmmirror.com/escape-string-regexp/1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz} - name: escape-string-regexp - version: 1.0.5 - engines: {node: '>=0.8.0'} - dev: true + run-async@2.4.1: {} - registry.npmmirror.com/esm/3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esm/-/esm-3.2.25.tgz} - name: esm - version: 3.2.25 - engines: {node: '>=6'} - dev: true + rw@1.3.3: {} - registry.npmmirror.com/esprima/4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz} - name: esprima - version: 4.0.1 - engines: {node: '>=4'} - hasBin: true - dev: true - - registry.npmmirror.com/estree-walker/1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz} - name: estree-walker - version: 1.0.1 - dev: true - - registry.npmmirror.com/estree-walker/2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} - name: estree-walker - version: 2.0.2 - dev: true - - registry.npmmirror.com/esutils/2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz} - name: esutils - version: 2.0.3 - engines: {node: '>=0.10.0'} - dev: true - - registry.npmmirror.com/eve-raphael/0.5.0: - resolution: {integrity: sha512-jrxnPsCGqng1UZuEp9DecX/AuSyAszATSjf4oEcRxvfxa1Oux4KkIPKBAAWWnpdwfARtr+Q0o9aPYWjsROD7ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eve-raphael/-/eve-raphael-0.5.0.tgz} - name: eve-raphael - version: 0.5.0 - dev: true - - registry.npmmirror.com/execa/5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz} - name: execa - version: 5.1.1 - engines: {node: '>=10'} - dependencies: - cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3 - get-stream: registry.npmmirror.com/get-stream/6.0.1 - human-signals: registry.npmmirror.com/human-signals/2.1.0 - is-stream: registry.npmmirror.com/is-stream/2.0.1 - merge-stream: registry.npmmirror.com/merge-stream/2.0.0 - npm-run-path: registry.npmmirror.com/npm-run-path/4.0.1 - onetime: registry.npmmirror.com/onetime/5.1.2 - signal-exit: registry.npmmirror.com/signal-exit/3.0.7 - strip-final-newline: registry.npmmirror.com/strip-final-newline/2.0.0 - dev: true - - registry.npmmirror.com/execa/6.1.0: - resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-6.1.0.tgz} - name: execa - version: 6.1.0 - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3 - get-stream: registry.npmmirror.com/get-stream/6.0.1 - human-signals: registry.npmmirror.com/human-signals/3.0.1 - is-stream: registry.npmmirror.com/is-stream/3.0.0 - merge-stream: registry.npmmirror.com/merge-stream/2.0.0 - npm-run-path: registry.npmmirror.com/npm-run-path/5.1.0 - onetime: registry.npmmirror.com/onetime/6.0.0 - signal-exit: registry.npmmirror.com/signal-exit/3.0.7 - strip-final-newline: registry.npmmirror.com/strip-final-newline/3.0.0 - dev: true - - registry.npmmirror.com/extend-shallow/2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz} - name: extend-shallow - version: 2.0.1 - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: registry.npmmirror.com/is-extendable/0.1.1 - dev: true - - registry.npmmirror.com/fast-clone/1.5.13: - resolution: {integrity: sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-clone/-/fast-clone-1.5.13.tgz} - name: fast-clone - version: 1.5.13 - dev: true - - registry.npmmirror.com/fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} - name: fast-deep-equal - version: 3.1.3 - dev: true - - registry.npmmirror.com/fast-glob/3.2.11: - resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz} - name: fast-glob - version: 3.2.11 - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5 - '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk/1.2.8 - glob-parent: registry.npmmirror.com/glob-parent/5.1.2 - merge2: registry.npmmirror.com/merge2/1.4.1 - micromatch: registry.npmmirror.com/micromatch/4.0.5 - dev: true - - registry.npmmirror.com/fast-json-stable-stringify/2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} - name: fast-json-stable-stringify - version: 2.1.0 - dev: true - - registry.npmmirror.com/fastq/1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz} - name: fastq - version: 1.13.0 - dependencies: - reusify: registry.npmmirror.com/reusify/1.0.4 - dev: true - - registry.npmmirror.com/fflate/0.7.4: - resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fflate/-/fflate-0.7.4.tgz} - name: fflate - version: 0.7.4 - dev: true - - registry.npmmirror.com/filelist/1.0.3: - resolution: {integrity: sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/filelist/-/filelist-1.0.3.tgz} - name: filelist - version: 1.0.3 - dependencies: - minimatch: registry.npmmirror.com/minimatch/5.0.1 - dev: true - - registry.npmmirror.com/fill-range/7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz} - name: fill-range - version: 7.0.1 - engines: {node: '>=8'} + rxjs@7.8.2: dependencies: - to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1 - dev: true + tslib: 2.8.1 - registry.npmmirror.com/flowchart.js/1.17.1: - resolution: {integrity: sha512-zphTaxdyqvHHu+8Cdf6HvamhArXpq9SyNe1zQ61maCIfTenaj3cMvjS1e/0gfPj7QTLTx3HroSzVqDXpL8naoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flowchart.js/-/flowchart.js-1.17.1.tgz} - name: flowchart.js - version: 1.17.1 - engines: {node: '>=4.0.0'} - dependencies: - raphael: registry.npmmirror.com/raphael/2.3.0 - dev: true + safe-buffer@5.2.1: {} - registry.npmmirror.com/fraction.js/4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz} - name: fraction.js - version: 4.2.0 - dev: true + safer-buffer@2.1.2: {} - registry.npmmirror.com/fs-extra/10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz} - name: fs-extra - version: 10.1.0 - engines: {node: '>=12'} + satteri@0.10.5: dependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 - jsonfile: registry.npmmirror.com/jsonfile/6.1.0 - universalify: registry.npmmirror.com/universalify/2.0.0 - dev: true + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + optionalDependencies: + '@bruits/satteri-darwin-arm64': 0.10.5 + '@bruits/satteri-darwin-x64': 0.10.5 + '@bruits/satteri-linux-arm64-gnu': 0.10.5 + '@bruits/satteri-linux-arm64-musl': 0.10.5 + '@bruits/satteri-linux-x64-gnu': 0.10.5 + '@bruits/satteri-linux-x64-musl': 0.10.5 + '@bruits/satteri-wasm32-wasi': 0.10.5 + '@bruits/satteri-win32-arm64-msvc': 0.10.5 + '@bruits/satteri-win32-x64-msvc': 0.10.5 - registry.npmmirror.com/fs-extra/9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz} - name: fs-extra - version: 9.1.0 - engines: {node: '>=10'} - dependencies: - at-least-node: registry.npmmirror.com/at-least-node/1.0.0 - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 - jsonfile: registry.npmmirror.com/jsonfile/6.1.0 - universalify: registry.npmmirror.com/universalify/2.0.0 - dev: true - - registry.npmmirror.com/fs.realpath/1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz} - name: fs.realpath - version: 1.0.0 - dev: true - - registry.npmmirror.com/fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} - name: fsevents - version: 2.3.2 - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true + sax@1.6.1: {} - registry.npmmirror.com/function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} - name: function-bind - version: 1.1.1 - dev: true + semver@5.7.2: {} - registry.npmmirror.com/function.prototype.name/1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz} - name: function.prototype.name - version: 1.1.5 - engines: {node: '>= 0.4'} + semver@7.5.4: dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - define-properties: registry.npmmirror.com/define-properties/1.1.4 - es-abstract: registry.npmmirror.com/es-abstract/1.20.0 - functions-have-names: registry.npmmirror.com/functions-have-names/1.2.3 - dev: true - - registry.npmmirror.com/functions-have-names/1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz} - name: functions-have-names - version: 1.2.3 - dev: true - - registry.npmmirror.com/gensync/1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz} - name: gensync - version: 1.0.0-beta.2 - engines: {node: '>=6.9.0'} - dev: true - - registry.npmmirror.com/get-intrinsic/1.1.1: - resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz} - name: get-intrinsic - version: 1.1.1 - dependencies: - function-bind: registry.npmmirror.com/function-bind/1.1.1 - has: registry.npmmirror.com/has/1.0.3 - has-symbols: registry.npmmirror.com/has-symbols/1.0.3 - dev: true - - registry.npmmirror.com/get-own-enumerable-property-symbols/3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz} - name: get-own-enumerable-property-symbols - version: 3.0.2 - dev: true - - registry.npmmirror.com/get-stream/6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz} - name: get-stream - version: 6.0.1 - engines: {node: '>=10'} - dev: true + lru-cache: 6.0.0 - registry.npmmirror.com/get-symbol-description/1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz} - name: get-symbol-description - version: 1.0.0 - engines: {node: '>= 0.4'} - dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 - dev: true + semver@7.8.5: {} - registry.npmmirror.com/giscus/1.2.3: - resolution: {integrity: sha512-1sYu6B3cUzPVZHH93f1DX5PJHf5ak2bPp8N1xZrAPxqccN7C/R6r93usllmCVESJ8cvnyYUaNVyXzOYz9B6OxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/giscus/-/giscus-1.2.3.tgz} - name: giscus - version: 1.2.3 + sharp@0.35.5(@types/node@22.20.5): dependencies: - lit: registry.npmmirror.com/lit/2.4.1 - dev: true + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.5 + '@img/sharp-darwin-x64': 0.35.5 + '@img/sharp-freebsd-wasm32': 0.35.5 + '@img/sharp-libvips-darwin-arm64': 1.3.4 + '@img/sharp-libvips-darwin-x64': 1.3.4 + '@img/sharp-libvips-linux-arm': 1.3.4 + '@img/sharp-libvips-linux-arm64': 1.3.4 + '@img/sharp-libvips-linux-ppc64': 1.3.4 + '@img/sharp-libvips-linux-riscv64': 1.3.4 + '@img/sharp-libvips-linux-s390x': 1.3.4 + '@img/sharp-libvips-linux-x64': 1.3.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 + '@img/sharp-linux-arm': 0.35.5 + '@img/sharp-linux-arm64': 0.35.5 + '@img/sharp-linux-ppc64': 0.35.5 + '@img/sharp-linux-riscv64': 0.35.5 + '@img/sharp-linux-s390x': 0.35.5 + '@img/sharp-linux-x64': 0.35.5 + '@img/sharp-linuxmusl-arm64': 0.35.5 + '@img/sharp-linuxmusl-x64': 0.35.5 + '@img/sharp-webcontainers-wasm32': 0.35.5 + '@img/sharp-win32-arm64': 0.35.5 + '@img/sharp-win32-ia32': 0.35.5 + '@img/sharp-win32-x64': 0.35.5 + '@types/node': 22.20.5 + optional: true - registry.npmmirror.com/glob-parent/5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz} - name: glob-parent - version: 5.1.2 - engines: {node: '>= 6'} - dependencies: - is-glob: registry.npmmirror.com/is-glob/4.0.3 - dev: true - - registry.npmmirror.com/glob/7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz} - name: glob - version: 7.2.0 - dependencies: - fs.realpath: registry.npmmirror.com/fs.realpath/1.0.0 - inflight: registry.npmmirror.com/inflight/1.0.6 - inherits: registry.npmmirror.com/inherits/2.0.4 - minimatch: registry.npmmirror.com/minimatch/3.1.2 - once: registry.npmmirror.com/once/1.4.0 - path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1 - dev: true - - registry.npmmirror.com/globals/11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz} - name: globals - version: 11.12.0 - engines: {node: '>=4'} - dev: true - - registry.npmmirror.com/globby/13.1.2: - resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-13.1.2.tgz} - name: globby - version: 13.1.2 - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: registry.npmmirror.com/dir-glob/3.0.1 - fast-glob: registry.npmmirror.com/fast-glob/3.2.11 - ignore: registry.npmmirror.com/ignore/5.2.0 - merge2: registry.npmmirror.com/merge2/1.4.1 - slash: registry.npmmirror.com/slash/4.0.0 - dev: true - - registry.npmmirror.com/graceful-fs/4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} - name: graceful-fs - version: 4.2.10 - dev: true - - registry.npmmirror.com/graphlib/2.1.8: - resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graphlib/-/graphlib-2.1.8.tgz} - name: graphlib - version: 2.1.8 - dependencies: - lodash: registry.npmmirror.com/lodash/4.17.21 - dev: true - - registry.npmmirror.com/gray-matter/4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gray-matter/-/gray-matter-4.0.3.tgz} - name: gray-matter - version: 4.0.3 - engines: {node: '>=6.0'} + shebang-command@2.0.0: dependencies: - js-yaml: registry.npmmirror.com/js-yaml/3.14.1 - kind-of: registry.npmmirror.com/kind-of/6.0.3 - section-matter: registry.npmmirror.com/section-matter/1.0.0 - strip-bom-string: registry.npmmirror.com/strip-bom-string/1.0.0 - dev: true - - registry.npmmirror.com/has-bigints/1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz} - name: has-bigints - version: 1.0.2 - dev: true - - registry.npmmirror.com/has-flag/3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz} - name: has-flag - version: 3.0.0 - engines: {node: '>=4'} - dev: true + shebang-regex: 3.0.0 - registry.npmmirror.com/has-flag/4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz} - name: has-flag - version: 4.0.0 - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - registry.npmmirror.com/has-property-descriptors/1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz} - name: has-property-descriptors - version: 1.0.0 + shiki@4.5.0: dependencies: - get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 - dev: true + '@shikijs/core': 4.5.0 + '@shikijs/engine-javascript': 4.5.0 + '@shikijs/engine-oniguruma': 4.5.0 + '@shikijs/langs': 4.5.0 + '@shikijs/themes': 4.5.0 + '@shikijs/types': 4.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 - registry.npmmirror.com/has-symbols/1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz} - name: has-symbols - version: 1.0.3 - engines: {node: '>= 0.4'} - dev: true + signal-exit@3.0.7: {} - registry.npmmirror.com/has-tostringtag/1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz} - name: has-tostringtag - version: 1.0.0 - engines: {node: '>= 0.4'} + sisteransi@1.0.5: {} + + sitemap@9.0.1: dependencies: - has-symbols: registry.npmmirror.com/has-symbols/1.0.3 - dev: true - - registry.npmmirror.com/has/1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz} - name: has - version: 1.0.3 - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: registry.npmmirror.com/function-bind/1.1.1 - dev: true - - registry.npmmirror.com/hash-sum/2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz} - name: hash-sum - version: 2.0.0 - dev: true - - registry.npmmirror.com/heap/0.2.7: - resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/heap/-/heap-0.2.7.tgz} - name: heap - version: 0.2.7 - dev: true - - registry.npmmirror.com/htmlparser2/5.0.1: - resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-5.0.1.tgz} - name: htmlparser2 - version: 5.0.1 - dependencies: - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/3.3.0 - domutils: registry.npmmirror.com/domutils/2.8.0 - entities: registry.npmmirror.com/entities/2.2.0 - dev: true - - registry.npmmirror.com/htmlparser2/6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz} - name: htmlparser2 - version: 6.1.0 - dependencies: - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/4.3.1 - domutils: registry.npmmirror.com/domutils/2.8.0 - entities: registry.npmmirror.com/entities/2.2.0 - dev: true - - registry.npmmirror.com/htmlparser2/8.0.1: - resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.1.tgz} - name: htmlparser2 - version: 8.0.1 - dependencies: - domelementtype: registry.npmmirror.com/domelementtype/2.3.0 - domhandler: registry.npmmirror.com/domhandler/5.0.3 - domutils: registry.npmmirror.com/domutils/3.0.1 - entities: registry.npmmirror.com/entities/4.4.0 - dev: true - - registry.npmmirror.com/human-signals/2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz} - name: human-signals - version: 2.1.0 - engines: {node: '>=10.17.0'} - dev: true + '@types/node': 24.19.1 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.6.1 - registry.npmmirror.com/human-signals/3.0.1: - resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-3.0.1.tgz} - name: human-signals - version: 3.0.1 - engines: {node: '>=12.20.0'} - dev: true + smol-toml@1.9.0: {} - registry.npmmirror.com/iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz} - name: iconv-lite - version: 0.4.24 - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2 - dev: true + source-map-js@1.2.2: {} - registry.npmmirror.com/iconv-lite/0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz} - name: iconv-lite - version: 0.6.3 - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2 - dev: true - - registry.npmmirror.com/idb/7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/idb/-/idb-7.1.1.tgz} - name: idb - version: 7.1.1 - dev: true - - registry.npmmirror.com/ieee754/1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz} - name: ieee754 - version: 1.2.1 - dev: true - - registry.npmmirror.com/ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz} - name: ignore - version: 5.2.0 - engines: {node: '>= 4'} - dev: true - - registry.npmmirror.com/immutable/4.0.0: - resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.0.0.tgz} - name: immutable - version: 4.0.0 - dev: true - - registry.npmmirror.com/inflight/1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz} - name: inflight - version: 1.0.6 - dependencies: - once: registry.npmmirror.com/once/1.4.0 - wrappy: registry.npmmirror.com/wrappy/1.0.2 - dev: true - - registry.npmmirror.com/inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz} - name: inherits - version: 2.0.4 - dev: true - - registry.npmmirror.com/internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz} - name: internal-slot - version: 1.0.3 - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 - has: registry.npmmirror.com/has/1.0.3 - side-channel: registry.npmmirror.com/side-channel/1.0.4 - dev: true + source-map@0.7.6: {} - registry.npmmirror.com/internmap/2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz} - name: internmap - version: 2.0.3 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/is-arrayish/0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz} - name: is-arrayish - version: 0.2.1 - dev: true - - registry.npmmirror.com/is-bigint/1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz} - name: is-bigint - version: 1.0.4 - dependencies: - has-bigints: registry.npmmirror.com/has-bigints/1.0.2 - dev: true - - registry.npmmirror.com/is-binary-path/2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz} - name: is-binary-path - version: 2.1.0 - engines: {node: '>=8'} - dependencies: - binary-extensions: registry.npmmirror.com/binary-extensions/2.2.0 - dev: true + space-separated-tokens@2.0.2: {} - registry.npmmirror.com/is-boolean-object/1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz} - name: is-boolean-object - version: 1.1.2 - engines: {node: '>= 0.4'} + spdx-correct@3.2.0: dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 - dev: true + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.24 - registry.npmmirror.com/is-callable/1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz} - name: is-callable - version: 1.2.4 - engines: {node: '>= 0.4'} - dev: true + spdx-exceptions@2.5.0: {} - registry.npmmirror.com/is-core-module/2.9.0: - resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz} - name: is-core-module - version: 2.9.0 + spdx-expression-parse@3.0.1: dependencies: - has: registry.npmmirror.com/has/1.0.3 - dev: true + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.24 - registry.npmmirror.com/is-date-object/1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz} - name: is-date-object - version: 1.0.5 - engines: {node: '>= 0.4'} + spdx-license-ids@3.0.24: {} + + split2@3.2.2: dependencies: - has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 - dev: true + readable-stream: 3.6.2 - registry.npmmirror.com/is-extendable/0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz} - name: is-extendable - version: 0.1.1 - engines: {node: '>=0.10.0'} - dev: true + strictdom@1.0.1: {} - registry.npmmirror.com/is-extglob/2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz} - name: is-extglob - version: 2.1.1 - engines: {node: '>=0.10.0'} - dev: true + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 - registry.npmmirror.com/is-glob/4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz} - name: is-glob - version: 4.0.3 - engines: {node: '>=0.10.0'} + string-width@7.2.0: dependencies: - is-extglob: registry.npmmirror.com/is-extglob/2.1.1 - dev: true + emoji-regex: 10.6.0 + get-east-asian-width: 1.7.0 + strip-ansi: 7.2.0 - registry.npmmirror.com/is-interactive/2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-interactive/-/is-interactive-2.0.0.tgz} - name: is-interactive - version: 2.0.0 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/is-module/1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz} - name: is-module - version: 1.0.0 - dev: true - - registry.npmmirror.com/is-negative-zero/2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz} - name: is-negative-zero - version: 2.0.2 - engines: {node: '>= 0.4'} - dev: true + string-width@8.3.0: + dependencies: + get-east-asian-width: 1.7.0 + strip-ansi: 7.2.0 - registry.npmmirror.com/is-number-object/1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz} - name: is-number-object - version: 1.0.7 - engines: {node: '>= 0.4'} + string_decoder@1.3.0: dependencies: - has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 - dev: true + safe-buffer: 5.2.1 - registry.npmmirror.com/is-number/7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz} - name: is-number - version: 7.0.0 - engines: {node: '>=0.12.0'} - dev: true + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 - registry.npmmirror.com/is-obj/1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz} - name: is-obj - version: 1.0.1 - engines: {node: '>=0.10.0'} - dev: true + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 - registry.npmmirror.com/is-obj/2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz} - name: is-obj - version: 2.0.0 - engines: {node: '>=8'} - dev: true + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.4.0 - registry.npmmirror.com/is-plain-obj/1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz} - name: is-plain-obj - version: 1.1.0 - engines: {node: '>=0.10.0'} - dev: true + strip-bom@4.0.0: {} - registry.npmmirror.com/is-regex/1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz} - name: is-regex - version: 1.1.4 - engines: {node: '>= 0.4'} + strip-final-newline@2.0.0: {} + + strip-indent@3.0.0: dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 - dev: true + min-indent: 1.0.1 - registry.npmmirror.com/is-regexp/1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz} - name: is-regexp - version: 1.0.0 - engines: {node: '>=0.10.0'} - dev: true + strip-json-comments@3.1.1: {} - registry.npmmirror.com/is-shared-array-buffer/1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz} - name: is-shared-array-buffer - version: 1.0.2 + style-to-js@1.1.21: dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - dev: true + style-to-object: 1.0.14 - registry.npmmirror.com/is-stream/2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz} - name: is-stream - version: 2.0.1 - engines: {node: '>=8'} - dev: true - - registry.npmmirror.com/is-stream/3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz} - name: is-stream - version: 3.0.0 - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - registry.npmmirror.com/is-string/1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz} - name: is-string - version: 1.0.7 - engines: {node: '>= 0.4'} + style-to-object@1.0.14: dependencies: - has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0 - dev: true + inline-style-parser: 0.2.7 - registry.npmmirror.com/is-symbol/1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz} - name: is-symbol - version: 1.0.4 - engines: {node: '>= 0.4'} - dependencies: - has-symbols: registry.npmmirror.com/has-symbols/1.0.3 - dev: true + stylis@4.4.0: {} - registry.npmmirror.com/is-unicode-supported/1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz} - name: is-unicode-supported - version: 1.3.0 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/is-weakref/1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz} - name: is-weakref - version: 1.0.2 - dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - dev: true - - registry.npmmirror.com/isexe/2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz} - name: isexe - version: 2.0.0 - dev: true - - registry.npmmirror.com/jake/10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jake/-/jake-10.8.5.tgz} - name: jake - version: 10.8.5 - engines: {node: '>=10'} - hasBin: true - dependencies: - async: registry.npmmirror.com/async/3.2.3 - chalk: registry.npmmirror.com/chalk/4.1.2 - filelist: registry.npmmirror.com/filelist/1.0.3 - minimatch: registry.npmmirror.com/minimatch/3.1.2 - dev: true - - registry.npmmirror.com/jest-worker/26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz} - name: jest-worker - version: 26.6.2 - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': registry.npmmirror.com/@types/node/17.0.32 - merge-stream: registry.npmmirror.com/merge-stream/2.0.0 - supports-color: registry.npmmirror.com/supports-color/7.2.0 - dev: true - - registry.npmmirror.com/js-tokens/4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz} - name: js-tokens - version: 4.0.0 - dev: true - - registry.npmmirror.com/js-yaml/3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz} - name: js-yaml - version: 3.14.1 - hasBin: true + supports-color@5.5.0: dependencies: - argparse: registry.npmmirror.com/argparse/1.0.10 - esprima: registry.npmmirror.com/esprima/4.0.1 - dev: true + has-flag: 3.0.0 - registry.npmmirror.com/jsesc/0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz} - name: jsesc - version: 0.5.0 - hasBin: true - dev: true + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 - registry.npmmirror.com/jsesc/2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz} - name: jsesc - version: 2.5.2 - engines: {node: '>=4'} - hasBin: true - dev: true - - registry.npmmirror.com/json-parse-even-better-errors/2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz} - name: json-parse-even-better-errors - version: 2.3.1 - dev: true - - registry.npmmirror.com/json-schema-traverse/1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz} - name: json-schema-traverse - version: 1.0.0 - dev: true - - registry.npmmirror.com/json-schema/0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz} - name: json-schema - version: 0.4.0 - dev: true - - registry.npmmirror.com/json5/2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz} - name: json5 - version: 2.2.1 - engines: {node: '>=6'} - hasBin: true - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - registry.npmmirror.com/jsonfile/6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz} - name: jsonfile - version: 6.1.0 + svgo@4.1.0: dependencies: - universalify: registry.npmmirror.com/universalify/2.0.0 - optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 - dev: true + commander: 11.1.0 + css-select: 6.0.0 + css-tree: 3.2.1 + css-what: 7.0.0 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.1 - registry.npmmirror.com/jsonpointer/5.0.0: - resolution: {integrity: sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.0.tgz} - name: jsonpointer - version: 5.0.0 - engines: {node: '>=0.10.0'} - dev: true + text-extensions@1.9.0: {} - registry.npmmirror.com/juice/8.1.0: - resolution: {integrity: sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/juice/-/juice-8.1.0.tgz} - name: juice - version: 8.1.0 - engines: {node: '>=10.0.0'} - hasBin: true + through2@4.0.2: dependencies: - cheerio: registry.npmmirror.com/cheerio/1.0.0-rc.10 - commander: registry.npmmirror.com/commander/6.2.1 - mensch: registry.npmmirror.com/mensch/0.3.4 - slick: registry.npmmirror.com/slick/1.12.2 - web-resource-inliner: registry.npmmirror.com/web-resource-inliner/6.0.1 - transitivePeerDependencies: - - encoding - dev: true + readable-stream: 3.6.2 - registry.npmmirror.com/katex/0.16.3: - resolution: {integrity: sha512-3EykQddareoRmbtNiNEDgl3IGjryyrp2eg/25fHDEnlHymIDi33bptkMv6K4EOC2LZCybLW/ZkEo6Le+EM9pmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/katex/-/katex-0.16.3.tgz} - name: katex - version: 0.16.3 - hasBin: true - dependencies: - commander: registry.npmmirror.com/commander/8.3.0 - dev: true + through@2.3.8: {} - registry.npmmirror.com/khroma/2.0.0: - resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/khroma/-/khroma-2.0.0.tgz} - name: khroma - version: 2.0.0 - dev: true + tiny-inflate@1.0.3: {} - registry.npmmirror.com/kind-of/6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz} - name: kind-of - version: 6.0.3 - engines: {node: '>=0.10.0'} - dev: true - - registry.npmmirror.com/layout-base/1.0.2: - resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/layout-base/-/layout-base-1.0.2.tgz} - name: layout-base - version: 1.0.2 - dev: true - - registry.npmmirror.com/layout-base/2.0.1: - resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/layout-base/-/layout-base-2.0.1.tgz} - name: layout-base - version: 2.0.1 - dev: true - - registry.npmmirror.com/leven/3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz} - name: leven - version: 3.1.0 - engines: {node: '>=6'} - dev: true + tinyclip@1.0.3: {} - registry.npmmirror.com/lilconfig/2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.6.tgz} - name: lilconfig - version: 2.0.6 - engines: {node: '>=10'} - dev: true - - registry.npmmirror.com/lines-and-columns/1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz} - name: lines-and-columns - version: 1.2.4 - dev: true - - registry.npmmirror.com/linkify-it/4.0.1: - resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/linkify-it/-/linkify-it-4.0.1.tgz} - name: linkify-it - version: 4.0.1 - dependencies: - uc.micro: registry.npmmirror.com/uc.micro/1.0.6 - dev: true - - registry.npmmirror.com/lit-element/3.2.0: - resolution: {integrity: sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lit-element/-/lit-element-3.2.0.tgz} - name: lit-element - version: 3.2.0 - dependencies: - '@lit/reactive-element': registry.npmmirror.com/@lit/reactive-element/1.4.2 - lit-html: registry.npmmirror.com/lit-html/2.4.0 - dev: true - - registry.npmmirror.com/lit-html/2.4.0: - resolution: {integrity: sha512-G6qXu4JNUpY6aaF2VMfaszhO9hlWw0hOTRFDmuMheg/nDYGB+2RztUSOyrzALAbr8Nh0Y7qjhYkReh3rPnplVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lit-html/-/lit-html-2.4.0.tgz} - name: lit-html - version: 2.4.0 - dependencies: - '@types/trusted-types': registry.npmmirror.com/@types/trusted-types/2.0.2 - dev: true - - registry.npmmirror.com/lit/2.4.1: - resolution: {integrity: sha512-qohSgLiyN1cFnJG26dIiY03S4F49857A0AHQfnS0zYtnUVnD2MFvx+UT52rtXsIuNFQrnUupX+zyGSATlk1f/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lit/-/lit-2.4.1.tgz} - name: lit - version: 2.4.1 - dependencies: - '@lit/reactive-element': registry.npmmirror.com/@lit/reactive-element/1.4.2 - lit-element: registry.npmmirror.com/lit-element/3.2.0 - lit-html: registry.npmmirror.com/lit-html/2.4.0 - dev: true - - registry.npmmirror.com/lodash.debounce/4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz} - name: lodash.debounce - version: 4.0.8 - dev: true - - registry.npmmirror.com/lodash.sortby/4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz} - name: lodash.sortby - version: 4.7.0 - dev: true - - registry.npmmirror.com/lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz} - name: lodash - version: 4.17.21 - dev: true - - registry.npmmirror.com/log-symbols/5.1.0: - resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-5.1.0.tgz} - name: log-symbols - version: 5.1.0 - engines: {node: '>=12'} - dependencies: - chalk: registry.npmmirror.com/chalk/5.1.2 - is-unicode-supported: registry.npmmirror.com/is-unicode-supported/1.3.0 - dev: true + tinyexec@1.3.1: {} - registry.npmmirror.com/lru-cache/6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz} - name: lru-cache - version: 6.0.0 - engines: {node: '>=10'} + tinyglobby@0.2.17: dependencies: - yallist: registry.npmmirror.com/yallist/4.0.0 - dev: true + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 - registry.npmmirror.com/magic-string/0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz} - name: magic-string - version: 0.25.9 + to-regex-range@5.0.1: dependencies: - sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8 - dev: true + is-number: 7.0.0 - registry.npmmirror.com/markdown-it-anchor/8.6.5_ea7kj7wzjkld5jo2noyjqxi764: - resolution: {integrity: sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz} - id: registry.npmmirror.com/markdown-it-anchor/8.6.5 - name: markdown-it-anchor - version: 8.6.5 - peerDependencies: - '@types/markdown-it': '*' - markdown-it: '*' - dependencies: - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - dev: true - - registry.npmmirror.com/markdown-it-container/3.0.0: - resolution: {integrity: sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/markdown-it-container/-/markdown-it-container-3.0.0.tgz} - name: markdown-it-container - version: 3.0.0 - dev: true - - registry.npmmirror.com/markdown-it-emoji/2.0.2: - resolution: {integrity: sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz} - name: markdown-it-emoji - version: 2.0.2 - dev: true - - registry.npmmirror.com/markdown-it/13.0.1: - resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/markdown-it/-/markdown-it-13.0.1.tgz} - name: markdown-it - version: 13.0.1 - hasBin: true - dependencies: - argparse: registry.npmmirror.com/argparse/2.0.1 - entities: registry.npmmirror.com/entities/3.0.1 - linkify-it: registry.npmmirror.com/linkify-it/4.0.1 - mdurl: registry.npmmirror.com/mdurl/1.0.1 - uc.micro: registry.npmmirror.com/uc.micro/1.0.6 - dev: true - - registry.npmmirror.com/marked/4.2.2: - resolution: {integrity: sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/marked/-/marked-4.2.2.tgz} - name: marked - version: 4.2.2 - engines: {node: '>= 12'} - hasBin: true - dev: true - - registry.npmmirror.com/mathjax-full/3.2.2: - resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mathjax-full/-/mathjax-full-3.2.2.tgz} - name: mathjax-full - version: 3.2.2 - dependencies: - esm: registry.npmmirror.com/esm/3.2.25 - mhchemparser: registry.npmmirror.com/mhchemparser/4.1.1 - mj-context-menu: registry.npmmirror.com/mj-context-menu/0.6.1 - speech-rule-engine: registry.npmmirror.com/speech-rule-engine/4.0.7 - dev: true - - registry.npmmirror.com/mdurl/1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz} - name: mdurl - version: 1.0.1 - dev: true - - registry.npmmirror.com/medium-zoom/1.0.6: - resolution: {integrity: sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/medium-zoom/-/medium-zoom-1.0.6.tgz} - name: medium-zoom - version: 1.0.6 - dev: true - - registry.npmmirror.com/mensch/0.3.4: - resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mensch/-/mensch-0.3.4.tgz} - name: mensch - version: 0.3.4 - dev: true - - registry.npmmirror.com/merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz} - name: merge-stream - version: 2.0.0 - dev: true - - registry.npmmirror.com/merge2/1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz} - name: merge2 - version: 1.4.1 - engines: {node: '>= 8'} - dev: true - - registry.npmmirror.com/mermaid/9.2.2: - resolution: {integrity: sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mermaid/-/mermaid-9.2.2.tgz} - name: mermaid - version: 9.2.2 - dependencies: - '@braintree/sanitize-url': registry.npmmirror.com/@braintree/sanitize-url/6.0.0 - d3: registry.npmmirror.com/d3/7.4.4 - dagre: registry.npmmirror.com/dagre/0.8.5 - dagre-d3: registry.npmmirror.com/dagre-d3/0.6.4 - dompurify: registry.npmmirror.com/dompurify/2.4.0 - fast-clone: registry.npmmirror.com/fast-clone/1.5.13 - graphlib: registry.npmmirror.com/graphlib/2.1.8 - khroma: registry.npmmirror.com/khroma/2.0.0 - lodash: registry.npmmirror.com/lodash/4.17.21 - moment-mini: registry.npmmirror.com/moment-mini/2.24.0 - non-layered-tidy-tree-layout: registry.npmmirror.com/non-layered-tidy-tree-layout/2.0.2 - stylis: registry.npmmirror.com/stylis/4.1.3 - uuid: registry.npmmirror.com/uuid/9.0.0 - dev: true - - registry.npmmirror.com/mhchemparser/4.1.1: - resolution: {integrity: sha512-R75CUN6O6e1t8bgailrF1qPq+HhVeFTM3XQ0uzI+mXTybmphy3b6h4NbLOYhemViQ3lUs+6CKRkC3Ws1TlYREA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mhchemparser/-/mhchemparser-4.1.1.tgz} - name: mhchemparser - version: 4.1.1 - dev: true - - registry.npmmirror.com/micromatch/4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz} - name: micromatch - version: 4.0.5 - engines: {node: '>=8.6'} + trim-lines@3.0.1: {} + + trim-newlines@3.0.1: {} + + trough@2.2.0: {} + + ts-dedent@2.3.0: {} + + ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3): dependencies: - braces: registry.npmmirror.com/braces/3.0.2 - picomatch: registry.npmmirror.com/picomatch/2.3.1 - dev: true + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.13 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.5.1 + acorn: 8.19.0 + acorn-walk: 8.3.5 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.4 + make-error: 1.3.6 + typescript: 5.9.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 - registry.npmmirror.com/mime/2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz} - name: mime - version: 2.6.0 - engines: {node: '>=4.0.0'} - hasBin: true - dev: true + tslib@2.8.1: {} - registry.npmmirror.com/mimic-fn/1.2.0: - resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz} - name: mimic-fn - version: 1.2.0 - engines: {node: '>=4'} - dev: true + type-fest@0.18.1: {} - registry.npmmirror.com/mimic-fn/2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz} - name: mimic-fn - version: 2.1.0 - engines: {node: '>=6'} - dev: true + type-fest@0.21.3: {} - registry.npmmirror.com/mimic-fn/4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz} - name: mimic-fn - version: 4.0.0 - engines: {node: '>=12'} - dev: true + type-fest@0.6.0: {} - registry.npmmirror.com/minimatch/3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz} - name: minimatch - version: 3.1.2 - dependencies: - brace-expansion: registry.npmmirror.com/brace-expansion/1.1.11 - dev: true + type-fest@0.8.1: {} - registry.npmmirror.com/minimatch/5.0.1: - resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.0.1.tgz} - name: minimatch - version: 5.0.1 - engines: {node: '>=10'} - dependencies: - brace-expansion: registry.npmmirror.com/brace-expansion/2.0.1 - dev: true - - registry.npmmirror.com/mitt/3.0.0: - resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mitt/-/mitt-3.0.0.tgz} - name: mitt - version: 3.0.0 - dev: true - - registry.npmmirror.com/mj-context-menu/0.6.1: - resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz} - name: mj-context-menu - version: 0.6.1 - dev: true - - registry.npmmirror.com/moment-mini/2.24.0: - resolution: {integrity: sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/moment-mini/-/moment-mini-2.24.0.tgz} - name: moment-mini - version: 2.24.0 - dev: true - - registry.npmmirror.com/ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz} - name: ms - version: 2.1.2 - dev: true - - registry.npmmirror.com/nanoid/3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz} - name: nanoid - version: 3.3.4 - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + typesafe-path@0.2.2: {} - registry.npmmirror.com/node-fetch/2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz} - name: node-fetch - version: 2.6.7 - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + typescript-auto-import-cache@0.3.6: dependencies: - whatwg-url: registry.npmmirror.com/whatwg-url/5.0.0 - dev: true + semver: 7.8.5 - registry.npmmirror.com/node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz} - name: node-releases - version: 2.0.6 - dev: true + typescript@5.9.3: {} - registry.npmmirror.com/nodemailer/6.9.1: - resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nodemailer/-/nodemailer-6.9.1.tgz} - name: nodemailer - version: 6.9.1 - engines: {node: '>=6.0.0'} - dev: true - - registry.npmmirror.com/non-layered-tidy-tree-layout/2.0.2: - resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz} - name: non-layered-tidy-tree-layout - version: 2.0.2 - dev: true - - registry.npmmirror.com/normalize-path/3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz} - name: normalize-path - version: 3.0.0 - engines: {node: '>=0.10.0'} - dev: true + typescript@6.0.3: {} - registry.npmmirror.com/normalize-range/0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz} - name: normalize-range - version: 0.1.2 - engines: {node: '>=0.10.0'} - dev: true + ufo@1.6.4: {} - registry.npmmirror.com/npm-run-path/4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz} - name: npm-run-path - version: 4.0.1 - engines: {node: '>=8'} - dependencies: - path-key: registry.npmmirror.com/path-key/3.1.1 - dev: true + ultrahtml@1.7.0: {} - registry.npmmirror.com/npm-run-path/5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz} - name: npm-run-path - version: 5.1.0 - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: registry.npmmirror.com/path-key/4.0.0 - dev: true + uncrypto@0.1.3: {} - registry.npmmirror.com/nth-check/2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz} - name: nth-check - version: 2.1.1 - dependencies: - boolbase: registry.npmmirror.com/boolbase/1.0.0 - dev: true + undici-types@6.21.0: {} - registry.npmmirror.com/object-inspect/1.12.0: - resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz} - name: object-inspect - version: 1.12.0 - dev: true + undici-types@7.24.6: {} - registry.npmmirror.com/object-keys/1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz} - name: object-keys - version: 1.1.1 - engines: {node: '>= 0.4'} - dev: true + undici@8.11.2: {} - registry.npmmirror.com/object.assign/4.1.2: - resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.assign/-/object.assign-4.1.2.tgz} - name: object.assign - version: 4.1.2 - engines: {node: '>= 0.4'} + unified@11.0.5: dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - define-properties: registry.npmmirror.com/define-properties/1.1.4 - has-symbols: registry.npmmirror.com/has-symbols/1.0.3 - object-keys: registry.npmmirror.com/object-keys/1.1.1 - dev: true + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 - registry.npmmirror.com/once/1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz} - name: once - version: 1.4.0 + unifont@0.7.5: dependencies: - wrappy: registry.npmmirror.com/wrappy/1.0.2 - dev: true + css-tree: 3.2.1 + ohash: 2.0.12 + undici: 8.11.2 - registry.npmmirror.com/onetime/2.0.1: - resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz} - name: onetime - version: 2.0.1 - engines: {node: '>=4'} + unist-util-find-after@5.0.0: dependencies: - mimic-fn: registry.npmmirror.com/mimic-fn/1.2.0 - dev: true + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 - registry.npmmirror.com/onetime/5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz} - name: onetime - version: 5.1.2 - engines: {node: '>=6'} + unist-util-is@6.0.1: dependencies: - mimic-fn: registry.npmmirror.com/mimic-fn/2.1.0 - dev: true + '@types/unist': 3.0.3 - registry.npmmirror.com/onetime/6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz} - name: onetime - version: 6.0.0 - engines: {node: '>=12'} - dependencies: - mimic-fn: registry.npmmirror.com/mimic-fn/4.0.0 - dev: true - - registry.npmmirror.com/ora/6.1.2: - resolution: {integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ora/-/ora-6.1.2.tgz} - name: ora - version: 6.1.2 - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - bl: registry.npmmirror.com/bl/5.1.0 - chalk: registry.npmmirror.com/chalk/5.1.2 - cli-cursor: registry.npmmirror.com/cli-cursor/4.0.0 - cli-spinners: registry.npmmirror.com/cli-spinners/2.6.1 - is-interactive: registry.npmmirror.com/is-interactive/2.0.0 - is-unicode-supported: registry.npmmirror.com/is-unicode-supported/1.3.0 - log-symbols: registry.npmmirror.com/log-symbols/5.1.0 - strip-ansi: registry.npmmirror.com/strip-ansi/7.0.1 - wcwidth: registry.npmmirror.com/wcwidth/1.0.1 - dev: true - - registry.npmmirror.com/parse-json/5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz} - name: parse-json - version: 5.2.0 - engines: {node: '>=8'} + unist-util-modify-children@4.0.0: dependencies: - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 - error-ex: registry.npmmirror.com/error-ex/1.3.2 - json-parse-even-better-errors: registry.npmmirror.com/json-parse-even-better-errors/2.3.1 - lines-and-columns: registry.npmmirror.com/lines-and-columns/1.2.4 - dev: true - - registry.npmmirror.com/parse5-htmlparser2-tree-adapter/6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz} - name: parse5-htmlparser2-tree-adapter - version: 6.0.1 - dependencies: - parse5: registry.npmmirror.com/parse5/6.0.1 - dev: true - - registry.npmmirror.com/parse5-htmlparser2-tree-adapter/7.0.0: - resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz} - name: parse5-htmlparser2-tree-adapter - version: 7.0.0 - dependencies: - domhandler: registry.npmmirror.com/domhandler/5.0.3 - parse5: registry.npmmirror.com/parse5/7.1.1 - dev: true - - registry.npmmirror.com/parse5/6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz} - name: parse5 - version: 6.0.1 - dev: true - - registry.npmmirror.com/parse5/7.1.1: - resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-7.1.1.tgz} - name: parse5 - version: 7.1.1 - dependencies: - entities: registry.npmmirror.com/entities/4.4.0 - dev: true - - registry.npmmirror.com/path-is-absolute/1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz} - name: path-is-absolute - version: 1.0.1 - engines: {node: '>=0.10.0'} - dev: true - - registry.npmmirror.com/path-key/3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz} - name: path-key - version: 3.1.1 - engines: {node: '>=8'} - dev: true + '@types/unist': 3.0.3 + array-iterate: 2.0.1 - registry.npmmirror.com/path-key/4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz} - name: path-key - version: 4.0.0 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz} - name: path-parse - version: 1.0.7 - dev: true - - registry.npmmirror.com/path-type/4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz} - name: path-type - version: 4.0.0 - engines: {node: '>=8'} - dev: true - - registry.npmmirror.com/photoswipe/5.3.3: - resolution: {integrity: sha512-BUuulwZwkYFKADSe5xf0dd+wf6dws34ZvqP8R3oYHepRauOXoQHvw600sw1HlWd8K0S3LRCS4jxyR5fTuI383Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/photoswipe/-/photoswipe-5.3.3.tgz} - name: photoswipe - version: 5.3.3 - engines: {node: '>= 0.12.0'} - dev: true - - registry.npmmirror.com/picocolors/1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz} - name: picocolors - version: 1.0.0 - dev: true - - registry.npmmirror.com/picomatch/2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz} - name: picomatch - version: 2.3.1 - engines: {node: '>=8.6'} - dev: true - - registry.npmmirror.com/postcss-load-config/4.0.1_postcss@8.4.19: - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz} - id: registry.npmmirror.com/postcss-load-config/4.0.1 - name: postcss-load-config - version: 4.0.1 - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: registry.npmmirror.com/lilconfig/2.0.6 - postcss: registry.npmmirror.com/postcss/8.4.19 - yaml: registry.npmmirror.com/yaml/2.1.3 - dev: true - - registry.npmmirror.com/postcss-value-parser/4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz} - name: postcss-value-parser - version: 4.2.0 - dev: true - - registry.npmmirror.com/postcss/8.4.13: - resolution: {integrity: sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.13.tgz} - name: postcss - version: 8.4.13 - engines: {node: ^10 || ^12 || >=14} + unist-util-position-from-estree@2.0.0: dependencies: - nanoid: registry.npmmirror.com/nanoid/3.3.4 - picocolors: registry.npmmirror.com/picocolors/1.0.0 - source-map-js: registry.npmmirror.com/source-map-js/1.0.2 - dev: true + '@types/unist': 3.0.3 - registry.npmmirror.com/postcss/8.4.19: - resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz} - name: postcss - version: 8.4.19 - engines: {node: ^10 || ^12 || >=14} + unist-util-position@5.0.0: dependencies: - nanoid: registry.npmmirror.com/nanoid/3.3.4 - picocolors: registry.npmmirror.com/picocolors/1.0.0 - source-map-js: registry.npmmirror.com/source-map-js/1.0.2 - dev: true - - registry.npmmirror.com/pretty-bytes/5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz} - name: pretty-bytes - version: 5.6.0 - engines: {node: '>=6'} - dev: true - - registry.npmmirror.com/prismjs/1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz} - name: prismjs - version: 1.29.0 - engines: {node: '>=6'} - dev: true + '@types/unist': 3.0.3 - registry.npmmirror.com/punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz} - name: punycode - version: 2.1.1 - engines: {node: '>=6'} - dev: true - - registry.npmmirror.com/queue-microtask/1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz} - name: queue-microtask - version: 1.2.3 - dev: true - - registry.npmmirror.com/randombytes/2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz} - name: randombytes - version: 2.1.0 - dependencies: - safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 - dev: true - - registry.npmmirror.com/raphael/2.3.0: - resolution: {integrity: sha512-w2yIenZAQnp257XUWGni4bLMVxpUpcIl7qgxEgDIXtmSypYtlNxfXWpOBxs7LBTps5sDwhRnrToJrMUrivqNTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/raphael/-/raphael-2.3.0.tgz} - name: raphael - version: 2.3.0 - dependencies: - eve-raphael: registry.npmmirror.com/eve-raphael/0.5.0 - dev: true - - registry.npmmirror.com/readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz} - name: readable-stream - version: 3.6.0 - engines: {node: '>= 6'} + unist-util-remove-position@5.0.0: dependencies: - inherits: registry.npmmirror.com/inherits/2.0.4 - string_decoder: registry.npmmirror.com/string_decoder/1.3.0 - util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2 - dev: true + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 - registry.npmmirror.com/readdirp/3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz} - name: readdirp - version: 3.6.0 - engines: {node: '>=8.10.0'} + unist-util-stringify-position@4.0.0: dependencies: - picomatch: registry.npmmirror.com/picomatch/2.3.1 - dev: true + '@types/unist': 3.0.3 - registry.npmmirror.com/regenerate-unicode-properties/10.0.1: - resolution: {integrity: sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz} - name: regenerate-unicode-properties - version: 10.0.1 - engines: {node: '>=4'} + unist-util-visit-children@3.0.0: dependencies: - regenerate: registry.npmmirror.com/regenerate/1.4.2 - dev: true - - registry.npmmirror.com/regenerate/1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz} - name: regenerate - version: 1.4.2 - dev: true - - registry.npmmirror.com/regenerator-runtime/0.13.9: - resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz} - name: regenerator-runtime - version: 0.13.9 - dev: true - - registry.npmmirror.com/regenerator-transform/0.15.0: - resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz} - name: regenerator-transform - version: 0.15.0 - dependencies: - '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.17.9 - dev: true - - registry.npmmirror.com/regexp.prototype.flags/1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz} - name: regexp.prototype.flags - version: 1.4.3 - engines: {node: '>= 0.4'} - dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - define-properties: registry.npmmirror.com/define-properties/1.1.4 - functions-have-names: registry.npmmirror.com/functions-have-names/1.2.3 - dev: true + '@types/unist': 3.0.3 - registry.npmmirror.com/regexpu-core/5.0.1: - resolution: {integrity: sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.0.1.tgz} - name: regexpu-core - version: 5.0.1 - engines: {node: '>=4'} + unist-util-visit-parents@6.0.2: dependencies: - regenerate: registry.npmmirror.com/regenerate/1.4.2 - regenerate-unicode-properties: registry.npmmirror.com/regenerate-unicode-properties/10.0.1 - regjsgen: registry.npmmirror.com/regjsgen/0.6.0 - regjsparser: registry.npmmirror.com/regjsparser/0.8.4 - unicode-match-property-ecmascript: registry.npmmirror.com/unicode-match-property-ecmascript/2.0.0 - unicode-match-property-value-ecmascript: registry.npmmirror.com/unicode-match-property-value-ecmascript/2.0.0 - dev: true - - registry.npmmirror.com/register-service-worker/1.7.2: - resolution: {integrity: sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/register-service-worker/-/register-service-worker-1.7.2.tgz} - name: register-service-worker - version: 1.7.2 - dev: true - - registry.npmmirror.com/regjsgen/0.6.0: - resolution: {integrity: sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regjsgen/-/regjsgen-0.6.0.tgz} - name: regjsgen - version: 0.6.0 - dev: true - - registry.npmmirror.com/regjsparser/0.8.4: - resolution: {integrity: sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regjsparser/-/regjsparser-0.8.4.tgz} - name: regjsparser - version: 0.8.4 - hasBin: true + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: dependencies: - jsesc: registry.npmmirror.com/jsesc/0.5.0 - dev: true + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 - registry.npmmirror.com/require-from-string/2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz} - name: require-from-string - version: 2.0.2 - engines: {node: '>=0.10.0'} - dev: true + universalify@2.0.1: {} - registry.npmmirror.com/resolve/1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz} - name: resolve - version: 1.22.1 - hasBin: true - dependencies: - is-core-module: registry.npmmirror.com/is-core-module/2.9.0 - path-parse: registry.npmmirror.com/path-parse/1.0.7 - supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0 - dev: true - - registry.npmmirror.com/restore-cursor/4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz} - name: restore-cursor - version: 4.0.0 - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - onetime: registry.npmmirror.com/onetime/5.1.2 - signal-exit: registry.npmmirror.com/signal-exit/3.0.7 - dev: true - - registry.npmmirror.com/reusify/1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz} - name: reusify - version: 1.0.4 - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - registry.npmmirror.com/reveal.js/4.4.0: - resolution: {integrity: sha512-jIV6C9V2NEUjGzU8L6dUFGpk1KJmq7/EzP2fOW67ggc2c0Cp/PdprWxZ9Qgp46F0T2ZWDCjQ1p3Ytzy5jA6a2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reveal.js/-/reveal.js-4.4.0.tgz} - name: reveal.js - version: 4.4.0 - engines: {node: '>=10.0.0'} - dev: true - - registry.npmmirror.com/robust-predicates/3.0.1: - resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.1.tgz} - name: robust-predicates - version: 3.0.1 - dev: true - - registry.npmmirror.com/rollup-plugin-terser/7.0.2_rollup@2.79.1: - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz} - id: registry.npmmirror.com/rollup-plugin-terser/7.0.2 - name: rollup-plugin-terser - version: 7.0.2 - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.16.7 - jest-worker: registry.npmmirror.com/jest-worker/26.6.2 - rollup: registry.npmmirror.com/rollup/2.79.1 - serialize-javascript: registry.npmmirror.com/serialize-javascript/4.0.0 - terser: registry.npmmirror.com/terser/5.15.1 - dev: true - - registry.npmmirror.com/rollup/2.78.1: - resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup/-/rollup-2.78.1.tgz} - name: rollup - version: 2.78.1 - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 - dev: true - - registry.npmmirror.com/rollup/2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz} - name: rollup - version: 2.79.1 - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 - dev: true - - registry.npmmirror.com/run-parallel/1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz} - name: run-parallel - version: 1.2.0 - dependencies: - queue-microtask: registry.npmmirror.com/queue-microtask/1.2.3 - dev: true - - registry.npmmirror.com/rw/1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz} - name: rw - version: 1.3.3 - dev: true - - registry.npmmirror.com/safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz} - name: safe-buffer - version: 5.1.2 - dev: true - - registry.npmmirror.com/safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz} - name: safe-buffer - version: 5.2.1 - dev: true - - registry.npmmirror.com/safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz} - name: safer-buffer - version: 2.1.2 - dev: true - - registry.npmmirror.com/sass/1.56.1: - resolution: {integrity: sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/-/sass-1.56.1.tgz} - name: sass - version: 1.56.1 - engines: {node: '>=12.0.0'} - hasBin: true - dependencies: - chokidar: registry.npmmirror.com/chokidar/3.5.3 - immutable: registry.npmmirror.com/immutable/4.0.0 - source-map-js: registry.npmmirror.com/source-map-js/1.0.2 - dev: true - - registry.npmmirror.com/sax/1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz} - name: sax - version: 1.2.4 - dev: true - - registry.npmmirror.com/section-matter/1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/section-matter/-/section-matter-1.0.0.tgz} - name: section-matter - version: 1.0.0 - engines: {node: '>=4'} + unstorage@1.17.5: dependencies: - extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1 - kind-of: registry.npmmirror.com/kind-of/6.0.3 - dev: true + anymatch: 3.1.3 + chokidar: 5.0.0 + destr: 2.0.5 + h3: 1.15.11 + lru-cache: 11.5.3 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.4 - registry.npmmirror.com/semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz} - name: semver - version: 5.7.1 - hasBin: true - dev: true + util-deprecate@1.0.2: {} - registry.npmmirror.com/semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz} - name: semver - version: 6.3.0 - hasBin: true - dev: true + uuid@14.0.2: {} - registry.npmmirror.com/semver/7.0.0: - resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz} - name: semver - version: 7.0.0 - hasBin: true - dev: true + v8-compile-cache-lib@3.0.1: {} - registry.npmmirror.com/semver/7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz} - name: semver - version: 7.3.8 - engines: {node: '>=10'} - hasBin: true + validate-npm-package-license@3.0.4: dependencies: - lru-cache: registry.npmmirror.com/lru-cache/6.0.0 - dev: true + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 - registry.npmmirror.com/serialize-javascript/4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz} - name: serialize-javascript - version: 4.0.0 - dependencies: - randombytes: registry.npmmirror.com/randombytes/2.1.0 - dev: true + verkit@0.4.1: {} - registry.npmmirror.com/shebang-command/2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz} - name: shebang-command - version: 2.0.0 - engines: {node: '>=8'} + vfile-location@5.0.3: dependencies: - shebang-regex: registry.npmmirror.com/shebang-regex/3.0.0 - dev: true + '@types/unist': 3.0.3 + vfile: 6.0.3 - registry.npmmirror.com/shebang-regex/3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz} - name: shebang-regex - version: 3.0.0 - engines: {node: '>=8'} - dev: true - - registry.npmmirror.com/side-channel/1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz} - name: side-channel - version: 1.0.4 - dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 - object-inspect: registry.npmmirror.com/object-inspect/1.12.0 - dev: true - - registry.npmmirror.com/signal-exit/3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz} - name: signal-exit - version: 3.0.7 - dev: true - - registry.npmmirror.com/sitemap/7.1.1: - resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sitemap/-/sitemap-7.1.1.tgz} - name: sitemap - version: 7.1.1 - engines: {node: '>=12.0.0', npm: '>=5.6.0'} - hasBin: true + vfile-message@4.0.3: dependencies: - '@types/node': registry.npmmirror.com/@types/node/17.0.32 - '@types/sax': registry.npmmirror.com/@types/sax/1.2.4 - arg: registry.npmmirror.com/arg/5.0.1 - sax: registry.npmmirror.com/sax/1.2.4 - dev: true - - registry.npmmirror.com/slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-4.0.0.tgz} - name: slash - version: 4.0.0 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/slick/1.12.2: - resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slick/-/slick-1.12.2.tgz} - name: slick - version: 1.12.2 - dev: true - - registry.npmmirror.com/source-map-js/1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz} - name: source-map-js - version: 1.0.2 - engines: {node: '>=0.10.0'} - dev: true + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 - registry.npmmirror.com/source-map-support/0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz} - name: source-map-support - version: 0.5.21 + vfile@6.0.3: dependencies: - buffer-from: registry.npmmirror.com/buffer-from/1.1.2 - source-map: registry.npmmirror.com/source-map/0.6.1 - dev: true - - registry.npmmirror.com/source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} - name: source-map - version: 0.6.1 - engines: {node: '>=0.10.0'} - dev: true + '@types/unist': 3.0.3 + vfile-message: 4.0.3 - registry.npmmirror.com/source-map/0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.8.0-beta.0.tgz} - name: source-map - version: 0.8.0-beta.0 - engines: {node: '>= 8'} + vite@8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.1): dependencies: - whatwg-url: registry.npmmirror.com/whatwg-url/7.1.0 - dev: true + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.29 + rolldown: 1.2.12 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.20.5 + esbuild: 0.28.2 + fsevents: 2.3.3 + jiti: 2.6.1 + yaml: 2.9.1 - registry.npmmirror.com/sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz} - name: sourcemap-codec - version: 1.4.8 - dev: true + vitefu@1.1.3(vite@8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.1)): + optionalDependencies: + vite: 8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.6.1)(yaml@2.9.1) - registry.npmmirror.com/speech-rule-engine/4.0.7: - resolution: {integrity: sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz} - name: speech-rule-engine - version: 4.0.7 - hasBin: true + volar-service-css@0.0.71(@volar/language-service@2.4.28): dependencies: - commander: registry.npmmirror.com/commander/9.2.0 - wicked-good-xpath: registry.npmmirror.com/wicked-good-xpath/1.3.0 - xmldom-sre: registry.npmmirror.com/xmldom-sre/0.1.31 - dev: true - - registry.npmmirror.com/sprintf-js/1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz} - name: sprintf-js - version: 1.0.3 - dev: true - - registry.npmmirror.com/string.prototype.matchall/4.0.7: - resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz} - name: string.prototype.matchall - version: 4.0.7 - dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - define-properties: registry.npmmirror.com/define-properties/1.1.4 - es-abstract: registry.npmmirror.com/es-abstract/1.20.0 - get-intrinsic: registry.npmmirror.com/get-intrinsic/1.1.1 - has-symbols: registry.npmmirror.com/has-symbols/1.0.3 - internal-slot: registry.npmmirror.com/internal-slot/1.0.3 - regexp.prototype.flags: registry.npmmirror.com/regexp.prototype.flags/1.4.3 - side-channel: registry.npmmirror.com/side-channel/1.0.4 - dev: true - - registry.npmmirror.com/string.prototype.trimend/1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz} - name: string.prototype.trimend - version: 1.0.5 - dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - define-properties: registry.npmmirror.com/define-properties/1.1.4 - es-abstract: registry.npmmirror.com/es-abstract/1.20.0 - dev: true - - registry.npmmirror.com/string.prototype.trimstart/1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz} - name: string.prototype.trimstart - version: 1.0.5 - dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - define-properties: registry.npmmirror.com/define-properties/1.1.4 - es-abstract: registry.npmmirror.com/es-abstract/1.20.0 - dev: true - - registry.npmmirror.com/string_decoder/1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz} - name: string_decoder - version: 1.3.0 - dependencies: - safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1 - dev: true - - registry.npmmirror.com/stringify-object/3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz} - name: stringify-object - version: 3.3.0 - engines: {node: '>=4'} + vscode-css-languageservice: 6.3.10 + vscode-languageserver-textdocument: 1.0.15 + vscode-uri: 3.2.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + + volar-service-emmet@0.0.71(@volar/language-service@2.4.28): dependencies: - get-own-enumerable-property-symbols: registry.npmmirror.com/get-own-enumerable-property-symbols/3.0.2 - is-obj: registry.npmmirror.com/is-obj/1.0.1 - is-regexp: registry.npmmirror.com/is-regexp/1.0.0 - dev: true + '@emmetio/css-parser': 0.4.1 + '@emmetio/html-matcher': 1.3.0 + '@vscode/emmet-helper': 2.11.0 + vscode-uri: 3.2.0 + optionalDependencies: + '@volar/language-service': 2.4.28 - registry.npmmirror.com/strip-ansi/6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz} - name: strip-ansi - version: 6.0.1 - engines: {node: '>=8'} + volar-service-html@0.0.71(@volar/language-service@2.4.28): dependencies: - ansi-regex: registry.npmmirror.com/ansi-regex/5.0.1 - dev: true + vscode-html-languageservice: 5.6.2 + vscode-languageserver-textdocument: 1.0.15 + vscode-uri: 3.2.0 + optionalDependencies: + '@volar/language-service': 2.4.28 - registry.npmmirror.com/strip-ansi/7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz} - name: strip-ansi - version: 7.0.1 - engines: {node: '>=12'} + volar-service-prettier@0.0.71(@volar/language-service@2.4.28)(prettier@3.9.9): dependencies: - ansi-regex: registry.npmmirror.com/ansi-regex/6.0.1 - dev: true + vscode-uri: 3.2.0 + optionalDependencies: + '@volar/language-service': 2.4.28 + prettier: 3.9.9 - registry.npmmirror.com/strip-bom-string/1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz} - name: strip-bom-string - version: 1.0.0 - engines: {node: '>=0.10.0'} - dev: true + volar-service-typescript-twoslash-queries@0.0.71(@volar/language-service@2.4.28): + dependencies: + vscode-uri: 3.2.0 + optionalDependencies: + '@volar/language-service': 2.4.28 - registry.npmmirror.com/strip-comments/2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-comments/-/strip-comments-2.0.1.tgz} - name: strip-comments - version: 2.0.1 - engines: {node: '>=10'} - dev: true + volar-service-typescript@0.0.71(@volar/language-service@2.4.28): + dependencies: + path-browserify: 1.0.1 + semver: 7.8.5 + typescript-auto-import-cache: 0.3.6 + vscode-languageserver-textdocument: 1.0.15 + vscode-nls: 5.2.0 + vscode-uri: 3.2.0 + optionalDependencies: + '@volar/language-service': 2.4.28 - registry.npmmirror.com/strip-final-newline/2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz} - name: strip-final-newline - version: 2.0.0 - engines: {node: '>=6'} - dev: true + volar-service-yaml@0.0.71(@volar/language-service@2.4.28): + dependencies: + vscode-uri: 3.2.0 + yaml-language-server: 1.23.0 + optionalDependencies: + '@volar/language-service': 2.4.28 - registry.npmmirror.com/strip-final-newline/3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz} - name: strip-final-newline - version: 3.0.0 - engines: {node: '>=12'} - dev: true - - registry.npmmirror.com/striptags/3.2.0: - resolution: {integrity: sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/striptags/-/striptags-3.2.0.tgz} - name: striptags - version: 3.2.0 - dev: true - - registry.npmmirror.com/stylis/4.1.3: - resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylis/-/stylis-4.1.3.tgz} - name: stylis - version: 4.1.3 - dev: true - - registry.npmmirror.com/supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz} - name: supports-color - version: 5.5.0 - engines: {node: '>=4'} + vscode-css-languageservice@6.3.10: dependencies: - has-flag: registry.npmmirror.com/has-flag/3.0.0 - dev: true + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.15 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.2.0 - registry.npmmirror.com/supports-color/7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz} - name: supports-color - version: 7.2.0 - engines: {node: '>=8'} + vscode-html-languageservice@5.6.2: dependencies: - has-flag: registry.npmmirror.com/has-flag/4.0.0 - dev: true + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.15 + vscode-languageserver-types: 3.18.4 + vscode-uri: 3.2.0 - registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} - name: supports-preserve-symlinks-flag - version: 1.0.0 - engines: {node: '>= 0.4'} - dev: true + vscode-json-languageservice@4.1.8: + dependencies: + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.15 + vscode-languageserver-types: 3.18.4 + vscode-nls: 5.2.0 + vscode-uri: 3.2.0 - registry.npmmirror.com/temp-dir/2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz} - name: temp-dir - version: 2.0.0 - engines: {node: '>=8'} - dev: true + vscode-jsonrpc@8.2.0: {} - registry.npmmirror.com/tempy/0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tempy/-/tempy-0.6.0.tgz} - name: tempy - version: 0.6.0 - engines: {node: '>=10'} - dependencies: - is-stream: registry.npmmirror.com/is-stream/2.0.1 - temp-dir: registry.npmmirror.com/temp-dir/2.0.0 - type-fest: registry.npmmirror.com/type-fest/0.16.0 - unique-string: registry.npmmirror.com/unique-string/2.0.0 - dev: true + vscode-jsonrpc@9.0.3: {} - registry.npmmirror.com/terser/5.15.1: - resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/terser/-/terser-5.15.1.tgz} - name: terser - version: 5.15.1 - engines: {node: '>=10'} - hasBin: true + vscode-languageserver-protocol@3.17.5: dependencies: - '@jridgewell/source-map': registry.npmmirror.com/@jridgewell/source-map/0.3.2 - acorn: registry.npmmirror.com/acorn/8.7.1 - commander: registry.npmmirror.com/commander/2.20.3 - source-map-support: registry.npmmirror.com/source-map-support/0.5.21 - dev: true - - registry.npmmirror.com/to-fast-properties/2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz} - name: to-fast-properties - version: 2.0.0 - engines: {node: '>=4'} - dev: true + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 - registry.npmmirror.com/to-regex-range/5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz} - name: to-regex-range - version: 5.0.1 - engines: {node: '>=8.0'} + vscode-languageserver-protocol@3.18.4: dependencies: - is-number: registry.npmmirror.com/is-number/7.0.0 - dev: true - - registry.npmmirror.com/tr46/0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz} - name: tr46 - version: 0.0.3 - dev: true - - registry.npmmirror.com/tr46/1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz} - name: tr46 - version: 1.0.1 - dependencies: - punycode: registry.npmmirror.com/punycode/2.1.1 - dev: true - - registry.npmmirror.com/ts-debounce/4.0.0: - resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-debounce/-/ts-debounce-4.0.0.tgz} - name: ts-debounce - version: 4.0.0 - dev: true - - registry.npmmirror.com/tslib/2.3.0: - resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz} - name: tslib - version: 2.3.0 - dev: true - - registry.npmmirror.com/twikoo/1.6.7: - resolution: {integrity: sha512-jFSKkdpwke0kO8XZIXUJrvq+YpyQ5iAP7L6OOz8zeW4TqGYbzJCfHBpBNiKd59rix21InIpDfmk610mmNyOtHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/twikoo/-/twikoo-1.6.7.tgz} - name: twikoo - version: 1.6.7 - dev: true - - registry.npmmirror.com/type-fest/0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.16.0.tgz} - name: type-fest - version: 0.16.0 - engines: {node: '>=10'} - dev: true + vscode-jsonrpc: 9.0.3 + vscode-languageserver-types: 3.18.4 - registry.npmmirror.com/type-fest/0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz} - name: type-fest - version: 0.18.1 - engines: {node: '>=10'} - dev: true + vscode-languageserver-textdocument@1.0.15: {} - registry.npmmirror.com/type-fest/0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz} - name: type-fest - version: 0.6.0 - engines: {node: '>=8'} - dev: true + vscode-languageserver-types@3.17.5: {} - registry.npmmirror.com/type-fest/0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz} - name: type-fest - version: 0.8.1 - engines: {node: '>=8'} - dev: true - - registry.npmmirror.com/uc.micro/1.0.6: - resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz} - name: uc.micro - version: 1.0.6 - dev: true - - registry.npmmirror.com/unbox-primitive/1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz} - name: unbox-primitive - version: 1.0.2 - dependencies: - call-bind: registry.npmmirror.com/call-bind/1.0.2 - has-bigints: registry.npmmirror.com/has-bigints/1.0.2 - has-symbols: registry.npmmirror.com/has-symbols/1.0.3 - which-boxed-primitive: registry.npmmirror.com/which-boxed-primitive/1.0.2 - dev: true - - registry.npmmirror.com/unicode-canonical-property-names-ecmascript/2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz} - name: unicode-canonical-property-names-ecmascript - version: 2.0.0 - engines: {node: '>=4'} - dev: true + vscode-languageserver-types@3.18.4: {} - registry.npmmirror.com/unicode-match-property-ecmascript/2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz} - name: unicode-match-property-ecmascript - version: 2.0.0 - engines: {node: '>=4'} + vscode-languageserver@9.0.1: dependencies: - unicode-canonical-property-names-ecmascript: registry.npmmirror.com/unicode-canonical-property-names-ecmascript/2.0.0 - unicode-property-aliases-ecmascript: registry.npmmirror.com/unicode-property-aliases-ecmascript/2.0.0 - dev: true + vscode-languageserver-protocol: 3.17.5 - registry.npmmirror.com/unicode-match-property-value-ecmascript/2.0.0: - resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz} - name: unicode-match-property-value-ecmascript - version: 2.0.0 - engines: {node: '>=4'} - dev: true + vscode-nls@5.2.0: {} - registry.npmmirror.com/unicode-property-aliases-ecmascript/2.0.0: - resolution: {integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz} - name: unicode-property-aliases-ecmascript - version: 2.0.0 - engines: {node: '>=4'} - dev: true + vscode-uri@3.2.0: {} - registry.npmmirror.com/unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unique-string/-/unique-string-2.0.0.tgz} - name: unique-string - version: 2.0.0 - engines: {node: '>=8'} + wcwidth@1.0.1: dependencies: - crypto-random-string: registry.npmmirror.com/crypto-random-string/2.0.0 - dev: true + defaults: 1.0.4 - registry.npmmirror.com/universalify/2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz} - name: universalify - version: 2.0.0 - engines: {node: '>= 10.0.0'} - dev: true + web-namespaces@2.0.1: {} - registry.npmmirror.com/upath/1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz} - name: upath - version: 1.2.0 - engines: {node: '>=4'} - dev: true + which@1.3.1: + dependencies: + isexe: 2.0.0 - registry.npmmirror.com/upath/2.0.1: - resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upath/-/upath-2.0.1.tgz} - name: upath - version: 2.0.1 - engines: {node: '>=4'} - dev: true + which@2.0.2: + dependencies: + isexe: 2.0.0 - registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.4: - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz} - id: registry.npmmirror.com/update-browserslist-db/1.0.10 - name: update-browserslist-db - version: 1.0.10 - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: registry.npmmirror.com/browserslist/4.21.4 - escalade: registry.npmmirror.com/escalade/3.1.1 - picocolors: registry.npmmirror.com/picocolors/1.0.0 - dev: true - - registry.npmmirror.com/uri-js/4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz} - name: uri-js - version: 4.4.1 - dependencies: - punycode: registry.npmmirror.com/punycode/2.1.1 - dev: true - - registry.npmmirror.com/util-deprecate/1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz} - name: util-deprecate - version: 1.0.2 - dev: true - - registry.npmmirror.com/uuid/9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-9.0.0.tgz} - name: uuid - version: 9.0.0 - hasBin: true - dev: true + word-wrap@1.2.5: {} - registry.npmmirror.com/valid-data-url/3.0.1: - resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/valid-data-url/-/valid-data-url-3.0.1.tgz} - name: valid-data-url - version: 3.0.1 - engines: {node: '>=10'} - dev: true + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - registry.npmmirror.com/vite/3.1.8: - resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-3.1.8.tgz} - name: vite - version: 3.1.8 - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - less: '*' - sass: '*' - stylus: '*' - terser: ^5.4.0 - peerDependenciesMeta: - less: - optional: true - sass: - optional: true - stylus: - optional: true - terser: - optional: true + wrap-ansi@7.0.0: dependencies: - esbuild: registry.npmmirror.com/esbuild/0.15.14 - postcss: registry.npmmirror.com/postcss/8.4.19 - resolve: registry.npmmirror.com/resolve/1.22.1 - rollup: registry.npmmirror.com/rollup/2.78.1 - optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 - dev: true - - registry.npmmirror.com/vue-demi/0.12.5_vue@3.2.45: - resolution: {integrity: sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.5.tgz} - id: registry.npmmirror.com/vue-demi/0.12.5 - name: vue-demi - version: 0.12.5 - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.2: dependencies: - vue: registry.npmmirror.com/vue/3.2.45 - dev: true + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 - registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45: - resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.1.6.tgz} - id: registry.npmmirror.com/vue-router/4.1.6 - name: vue-router - version: 4.1.6 - peerDependencies: - vue: ^3.2.0 - dependencies: - '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.4.5 - vue: registry.npmmirror.com/vue/3.2.45 - dev: true - - registry.npmmirror.com/vue/3.2.45: - resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz} - name: vue - version: 3.2.45 - dependencies: - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.45 - '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.45 - '@vue/runtime-dom': registry.npmmirror.com/@vue/runtime-dom/3.2.45 - '@vue/server-renderer': registry.npmmirror.com/@vue/server-renderer/3.2.45_vue@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 - dev: true - - registry.npmmirror.com/vuepress-plugin-blog2/2.0.0-beta.124: - resolution: {integrity: sha512-GgSf+7TI5Hvswfr5ABneUJZDbjL3bbHw41R6YJ8V0BB8g4rzcNVeLGhkqCSYHOqd+dfsNoy+/4wu7oI1bwSyIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-blog2/-/vuepress-plugin-blog2-2.0.0-beta.124.tgz} - name: vuepress-plugin-blog2 - version: 2.0.0-beta.124 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - chokidar: registry.npmmirror.com/chokidar/3.5.3 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - supports-color - dev: true + wrappy@1.0.2: {} - registry.npmmirror.com/vuepress-plugin-comment2/2.0.0-beta.124: - resolution: {integrity: sha512-PUksKPihPrdqMueMmSXZVTxlrRJ6eXef1Q9nd/NXTVlDC5eO+0JwA8g5mKwJw+/aZvnyKgepKDRdmDaftADR1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-comment2/-/vuepress-plugin-comment2-2.0.0-beta.124.tgz} - name: vuepress-plugin-comment2 - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.0.0 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@waline/client': registry.npmmirror.com/@waline/client/2.14.1 - giscus: registry.npmmirror.com/giscus/1.2.3 - twikoo: registry.npmmirror.com/twikoo/1.6.7 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-plugin-sass-palette: registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - '@vue/composition-api' - - supports-color - dev: true + xxhash-wasm@1.1.0: {} - registry.npmmirror.com/vuepress-plugin-components/2.0.0-beta.124: - resolution: {integrity: sha512-paCk1d3CGQeA3Bhs+yFIlGptmtXezXC9r9bHzgFamd2QDvbixrnh8pMNatKjIjFj8J00M+MRwuYuXTOGTrrGKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-components/-/vuepress-plugin-components-2.0.0-beta.124.tgz} - name: vuepress-plugin-components - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.0.0 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - balloon-css: registry.npmmirror.com/balloon-css/1.2.0 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-plugin-reading-time2: registry.npmmirror.com/vuepress-plugin-reading-time2/2.0.0-beta.124 - vuepress-plugin-sass-palette: registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - '@vue/composition-api' - - supports-color - dev: true + y18n@5.0.8: {} - registry.npmmirror.com/vuepress-plugin-copy-code2/2.0.0-beta.124: - resolution: {integrity: sha512-e8cVPRlpsd9MSiVxO6LROVWBg10gH/wvxJh7que/4tN4tq+pELO/bPqRY7AOm/z13Wul3zS+ipVZfE6C5UCLBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-copy-code2/-/vuepress-plugin-copy-code2-2.0.0-beta.124.tgz} - name: vuepress-plugin-copy-code2 - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.0.0 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - balloon-css: registry.npmmirror.com/balloon-css/1.2.0 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-plugin-sass-palette: registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmmirror.com/vuepress-plugin-copyright2/2.0.0-beta.124: - resolution: {integrity: sha512-8cckN2feN2/qj9eqaqDlng5rJorS6Hxps85c0GvAI40kyH6VzZuj8h6CarBjJ1yfOVk018s2bPat4ciLyEwhQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-copyright2/-/vuepress-plugin-copyright2-2.0.0-beta.124.tgz} - name: vuepress-plugin-copyright2 - version: 2.0.0-beta.124 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - vue: registry.npmmirror.com/vue/3.2.45 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - '@vue/composition-api' - - supports-color - dev: true + yallist@4.0.0: {} - registry.npmmirror.com/vuepress-plugin-feed2/2.0.0-beta.124: - resolution: {integrity: sha512-ZWoxhyYivCWZlGNLEJw+aYq86xJd8FJBWTLtrd/Y2/rfAhzXvL76OOyQeeKjXIIL4m5lzgnvaa7kT9+6i40huQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-feed2/-/vuepress-plugin-feed2-2.0.0-beta.124.tgz} - name: vuepress-plugin-feed2 - version: 2.0.0-beta.124 + yaml-language-server@1.23.0: dependencies: - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - xml-js: registry.npmmirror.com/xml-js/1.6.11 - transitivePeerDependencies: - - supports-color - dev: true + '@vscode/l10n': 0.0.18 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + ajv-i18n: 4.2.0(ajv@8.20.0) + prettier: 3.9.9 + request-light: 0.5.8 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.15 + vscode-languageserver-types: 3.18.4 + vscode-uri: 3.2.0 + yaml: 2.8.3 - registry.npmmirror.com/vuepress-plugin-md-enhance/2.0.0-beta.124: - resolution: {integrity: sha512-VwI8vVE92t+MqRxaGg28R2t6bcd05l9+vqgn4XpuRLPJZyF32UptiGvbD7CRcQBAdW1Pe+ewaDn0mwcWFthN4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-md-enhance/-/vuepress-plugin-md-enhance-2.0.0-beta.124.tgz} - name: vuepress-plugin-md-enhance - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.0.0 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@mermaid-js/mermaid-mindmap': registry.npmmirror.com/@mermaid-js/mermaid-mindmap/9.2.2 - '@types/katex': registry.npmmirror.com/@types/katex/0.14.0 - '@types/markdown-it': registry.npmmirror.com/@types/markdown-it/12.2.3 - '@vue/repl': registry.npmmirror.com/@vue/repl/1.3.2_vue@3.2.45 - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - balloon-css: registry.npmmirror.com/balloon-css/1.2.0 - chart.js: registry.npmmirror.com/chart.js/4.0.1 - echarts: registry.npmmirror.com/echarts/5.4.0 - flowchart.js: registry.npmmirror.com/flowchart.js/1.17.1 - juice: registry.npmmirror.com/juice/8.1.0 - katex: registry.npmmirror.com/katex/0.16.3 - markdown-it: registry.npmmirror.com/markdown-it/13.0.1 - mathjax-full: registry.npmmirror.com/mathjax-full/3.2.2 - mermaid: registry.npmmirror.com/mermaid/9.2.2 - reveal.js: registry.npmmirror.com/reveal.js/4.4.0 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-plugin-sass-palette: registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - '@vue/composition-api' - - encoding - - supports-color - dev: true + yaml@2.8.3: {} - registry.npmmirror.com/vuepress-plugin-photo-swipe/2.0.0-beta.124: - resolution: {integrity: sha512-n90Hotxwk9gOXdhRAPgNQEkNXVD+z3sCpE2IxeLJH2fuq4hTU66UMul9TnvE+LqHlaj+q8ZkKIpAa1yUCEobqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-photo-swipe/-/vuepress-plugin-photo-swipe-2.0.0-beta.124.tgz} - name: vuepress-plugin-photo-swipe - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.0.0 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - photoswipe: registry.npmmirror.com/photoswipe/5.3.3 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-plugin-sass-palette: registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - '@vue/composition-api' - - supports-color - dev: true + yaml@2.9.1: {} - registry.npmmirror.com/vuepress-plugin-pwa2/2.0.0-beta.124: - resolution: {integrity: sha512-Ad6wl+WB0MPsqevlWW3fqmrczPqgFH5iO33o6Kjw0ra2VS8OIEw8Sk8Uf+hehs/1PYB3AizVpi7ZV38V3Tiz5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-pwa2/-/vuepress-plugin-pwa2-2.0.0-beta.124.tgz} - name: vuepress-plugin-pwa2 - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.0.0 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - mitt: registry.npmmirror.com/mitt/3.0.0 - register-service-worker: registry.npmmirror.com/register-service-worker/1.7.2 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-plugin-sass-palette: registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - workbox-build: registry.npmmirror.com/workbox-build/6.5.4 - transitivePeerDependencies: - - '@types/babel__core' - - '@vue/composition-api' - - supports-color - dev: true + yargs-parser@20.2.9: {} - registry.npmmirror.com/vuepress-plugin-reading-time2/2.0.0-beta.124: - resolution: {integrity: sha512-+RF1oCnYFdDYpujjZ5+Ad31W309LOz6c8kCuXHinz+3CiOS684n9zaCFslj4HIYe8EhJRAr+/2U50K20H/+/Zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-reading-time2/-/vuepress-plugin-reading-time2-2.0.0-beta.124.tgz} - name: vuepress-plugin-reading-time2 - version: 2.0.0-beta.124 - dependencies: - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - supports-color - dev: true + yargs-parser@21.1.1: {} - registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124: - resolution: {integrity: sha512-8777qDJ5tj+bBR8jC9uyfEQ8MLcADtSIao2W4drYo+ltxArMfHbFyAgOJzClocAfbN3xOzgiyjYKudayIAvJsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-sass-palette/-/vuepress-plugin-sass-palette-2.0.0-beta.124.tgz} - name: vuepress-plugin-sass-palette - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.0.0 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - chokidar: registry.npmmirror.com/chokidar/3.5.3 - sass: registry.npmmirror.com/sass/1.56.1 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - supports-color - dev: true + yargs-parser@22.0.0: {} - registry.npmmirror.com/vuepress-plugin-search-pro/2.0.0-beta.124: - resolution: {integrity: sha512-NxXNAsft7hCfGDDrvdsyeB7XsS0u6wo3xt/t39iaoS3SInmFzCzbOZ9HfNnQjFWCZSX1X6j6KfqogdGNPMRhpg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-search-pro/-/vuepress-plugin-search-pro-2.0.0-beta.124.tgz} - name: vuepress-plugin-search-pro - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.3d.0 - peerDependenciesMeta: - sass-loader: - optional: true + yargs@17.7.3: dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - cheerio: registry.npmmirror.com/cheerio/1.0.0-rc.12 - chokidar: registry.npmmirror.com/chokidar/3.5.3 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-plugin-sass-palette: registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - '@vue/composition-api' - - supports-color - dev: true + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 - registry.npmmirror.com/vuepress-plugin-seo2/2.0.0-beta.124: - resolution: {integrity: sha512-PTr8VAjtAZ5l4T9HB15UgRGQ2zQVH/FgpI4A9nlZoYSXYhnrdQyTEH+N33UtZX95LkKhSIN9anB2D72ekP+sGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-seo2/-/vuepress-plugin-seo2-2.0.0-beta.124.tgz} - name: vuepress-plugin-seo2 - version: 2.0.0-beta.124 + yargs@18.2.0: dependencies: - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - gray-matter: registry.npmmirror.com/gray-matter/4.0.3 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - supports-color - dev: true + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 8.3.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 - registry.npmmirror.com/vuepress-plugin-sitemap2/2.0.0-beta.124: - resolution: {integrity: sha512-uzJv3ncHp/Iw3UH5TRGP9j4Fa/jgohzY3r0lzsKp0PeaTYu8uCIDi7veTVpxwi+WyZEJxhoA+vypokc5sU8kvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-plugin-sitemap2/-/vuepress-plugin-sitemap2-2.0.0-beta.124.tgz} - name: vuepress-plugin-sitemap2 - version: 2.0.0-beta.124 - dependencies: - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - sitemap: registry.npmmirror.com/sitemap/7.1.1 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmmirror.com/vuepress-shared/2.0.0-beta.124: - resolution: {integrity: sha512-gMXvmKJtq+RqJnC4j/lDZrKimhQp5j087H0UI3iCQLqsZ/HddXIpqQElZr43jfEIpVEV3M/+usbiTF0fwepFlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-shared/-/vuepress-shared-2.0.0-beta.124.tgz} - name: vuepress-shared - version: 2.0.0-beta.124 - dependencies: - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/plugin-git': registry.npmmirror.com/@vuepress/plugin-git/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - dayjs: registry.npmmirror.com/dayjs/1.11.6 - execa: registry.npmmirror.com/execa/6.1.0 - fflate: registry.npmmirror.com/fflate/0.7.4 - ora: registry.npmmirror.com/ora/6.1.2 - striptags: registry.npmmirror.com/striptags/3.2.0 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - transitivePeerDependencies: - - supports-color - dev: true + yn@3.1.1: {} - registry.npmmirror.com/vuepress-theme-hope/2.0.0-beta.124: - resolution: {integrity: sha512-N/RzhOaU4rDWprbKgz807H5diT2gEEO5XKNSzR9L0Gh36TPqDUs7t1EPal1fJrHtn6QbBM1Zf9Unmqw8QBCHPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-theme-hope/-/vuepress-theme-hope-2.0.0-beta.124.tgz} - name: vuepress-theme-hope - version: 2.0.0-beta.124 - peerDependencies: - sass-loader: ^13.0.0 - peerDependenciesMeta: - sass-loader: - optional: true - dependencies: - '@vuepress/cli': registry.npmmirror.com/@vuepress/cli/2.0.0-beta.53 - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/plugin-active-header-links': registry.npmmirror.com/@vuepress/plugin-active-header-links/2.0.0-beta.53 - '@vuepress/plugin-container': registry.npmmirror.com/@vuepress/plugin-container/2.0.0-beta.53 - '@vuepress/plugin-external-link-icon': registry.npmmirror.com/@vuepress/plugin-external-link-icon/2.0.0-beta.53 - '@vuepress/plugin-git': registry.npmmirror.com/@vuepress/plugin-git/2.0.0-beta.53 - '@vuepress/plugin-nprogress': registry.npmmirror.com/@vuepress/plugin-nprogress/2.0.0-beta.53 - '@vuepress/plugin-palette': registry.npmmirror.com/@vuepress/plugin-palette/2.0.0-beta.53 - '@vuepress/plugin-prismjs': registry.npmmirror.com/@vuepress/plugin-prismjs/2.0.0-beta.53 - '@vuepress/plugin-theme-data': registry.npmmirror.com/@vuepress/plugin-theme-data/2.0.0-beta.53 - '@vuepress/shared': registry.npmmirror.com/@vuepress/shared/2.0.0-beta.53 - '@vuepress/utils': registry.npmmirror.com/@vuepress/utils/2.0.0-beta.53 - '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45 - balloon-css: registry.npmmirror.com/balloon-css/1.2.0 - bcrypt-ts: registry.npmmirror.com/bcrypt-ts/3.0.0 - gray-matter: registry.npmmirror.com/gray-matter/4.0.3 - vue: registry.npmmirror.com/vue/3.2.45 - vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45 - vuepress-plugin-blog2: registry.npmmirror.com/vuepress-plugin-blog2/2.0.0-beta.124 - vuepress-plugin-comment2: registry.npmmirror.com/vuepress-plugin-comment2/2.0.0-beta.124 - vuepress-plugin-components: registry.npmmirror.com/vuepress-plugin-components/2.0.0-beta.124 - vuepress-plugin-copy-code2: registry.npmmirror.com/vuepress-plugin-copy-code2/2.0.0-beta.124 - vuepress-plugin-copyright2: registry.npmmirror.com/vuepress-plugin-copyright2/2.0.0-beta.124 - vuepress-plugin-feed2: registry.npmmirror.com/vuepress-plugin-feed2/2.0.0-beta.124 - vuepress-plugin-md-enhance: registry.npmmirror.com/vuepress-plugin-md-enhance/2.0.0-beta.124 - vuepress-plugin-photo-swipe: registry.npmmirror.com/vuepress-plugin-photo-swipe/2.0.0-beta.124 - vuepress-plugin-pwa2: registry.npmmirror.com/vuepress-plugin-pwa2/2.0.0-beta.124 - vuepress-plugin-reading-time2: registry.npmmirror.com/vuepress-plugin-reading-time2/2.0.0-beta.124 - vuepress-plugin-sass-palette: registry.npmmirror.com/vuepress-plugin-sass-palette/2.0.0-beta.124 - vuepress-plugin-seo2: registry.npmmirror.com/vuepress-plugin-seo2/2.0.0-beta.124 - vuepress-plugin-sitemap2: registry.npmmirror.com/vuepress-plugin-sitemap2/2.0.0-beta.124 - vuepress-shared: registry.npmmirror.com/vuepress-shared/2.0.0-beta.124 - transitivePeerDependencies: - - '@types/babel__core' - - '@vue/composition-api' - - encoding - - supports-color - dev: true + yocto-queue@0.1.0: {} - registry.npmmirror.com/vuepress-vite/2.0.0-beta.53_54nmke4n2vj3tdp5cd33kvtiom: - resolution: {integrity: sha512-kITVMM+LcV5mDQXQXAKgK0adAGMm7oyPls6HPTLM9gUvpSs2A19zfwf8zFoxIF9X+ANay4Tg87egtnJOcp8Wcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress-vite/-/vuepress-vite-2.0.0-beta.53.tgz} - id: registry.npmmirror.com/vuepress-vite/2.0.0-beta.53 - name: vuepress-vite - version: 2.0.0-beta.53 - hasBin: true - peerDependencies: - '@vuepress/client': ^2.0.0-beta.50 - vue: ^3.2.37 - dependencies: - '@vuepress/bundler-vite': registry.npmmirror.com/@vuepress/bundler-vite/2.0.0-beta.53 - '@vuepress/cli': registry.npmmirror.com/@vuepress/cli/2.0.0-beta.53 - '@vuepress/client': registry.npmmirror.com/@vuepress/client/2.0.0-beta.53 - '@vuepress/core': registry.npmmirror.com/@vuepress/core/2.0.0-beta.53 - '@vuepress/theme-default': registry.npmmirror.com/@vuepress/theme-default/2.0.0-beta.53 - vue: registry.npmmirror.com/vue/3.2.45 - transitivePeerDependencies: - - '@vue/composition-api' - - less - - sass - - sass-loader - - stylus - - supports-color - - terser - - ts-node - dev: true - - registry.npmmirror.com/vuepress/2.0.0-beta.53_54nmke4n2vj3tdp5cd33kvtiom: - resolution: {integrity: sha512-swnH25oCHAE0ZIXBAp4gaalIsrxLLn+mguekOybwLcTNQUgbcqf8EXwVxOgN663JzPuHcxRAJg3nN/swKsFifQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuepress/-/vuepress-2.0.0-beta.53.tgz} - id: registry.npmmirror.com/vuepress/2.0.0-beta.53 - name: vuepress - version: 2.0.0-beta.53 - hasBin: true - dependencies: - vuepress-vite: registry.npmmirror.com/vuepress-vite/2.0.0-beta.53_54nmke4n2vj3tdp5cd33kvtiom - transitivePeerDependencies: - - '@vue/composition-api' - - '@vuepress/client' - - less - - sass - - sass-loader - - stylus - - supports-color - - terser - - ts-node - - vue - dev: true - - registry.npmmirror.com/wcwidth/1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz} - name: wcwidth - version: 1.0.1 - dependencies: - defaults: registry.npmmirror.com/defaults/1.0.3 - dev: true - - registry.npmmirror.com/web-resource-inliner/6.0.1: - resolution: {integrity: sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz} - name: web-resource-inliner - version: 6.0.1 - engines: {node: '>=10.0.0'} - dependencies: - ansi-colors: registry.npmmirror.com/ansi-colors/4.1.3 - escape-goat: registry.npmmirror.com/escape-goat/3.0.0 - htmlparser2: registry.npmmirror.com/htmlparser2/5.0.1 - mime: registry.npmmirror.com/mime/2.6.0 - node-fetch: registry.npmmirror.com/node-fetch/2.6.7 - valid-data-url: registry.npmmirror.com/valid-data-url/3.0.1 - transitivePeerDependencies: - - encoding - dev: true - - registry.npmmirror.com/webidl-conversions/3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz} - name: webidl-conversions - version: 3.0.1 - dev: true - - registry.npmmirror.com/webidl-conversions/4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz} - name: webidl-conversions - version: 4.0.2 - dev: true - - registry.npmmirror.com/whatwg-url/5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz} - name: whatwg-url - version: 5.0.0 - dependencies: - tr46: registry.npmmirror.com/tr46/0.0.3 - webidl-conversions: registry.npmmirror.com/webidl-conversions/3.0.1 - dev: true - - registry.npmmirror.com/whatwg-url/7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz} - name: whatwg-url - version: 7.1.0 - dependencies: - lodash.sortby: registry.npmmirror.com/lodash.sortby/4.7.0 - tr46: registry.npmmirror.com/tr46/1.0.1 - webidl-conversions: registry.npmmirror.com/webidl-conversions/4.0.2 - dev: true - - registry.npmmirror.com/which-boxed-primitive/1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz} - name: which-boxed-primitive - version: 1.0.2 - dependencies: - is-bigint: registry.npmmirror.com/is-bigint/1.0.4 - is-boolean-object: registry.npmmirror.com/is-boolean-object/1.1.2 - is-number-object: registry.npmmirror.com/is-number-object/1.0.7 - is-string: registry.npmmirror.com/is-string/1.0.7 - is-symbol: registry.npmmirror.com/is-symbol/1.0.4 - dev: true - - registry.npmmirror.com/which/1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-1.3.1.tgz} - name: which - version: 1.3.1 - hasBin: true - dependencies: - isexe: registry.npmmirror.com/isexe/2.0.0 - dev: true + yocto-queue@1.2.2: {} - registry.npmmirror.com/which/2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-2.0.2.tgz} - name: which - version: 2.0.2 - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: registry.npmmirror.com/isexe/2.0.0 - dev: true - - registry.npmmirror.com/wicked-good-xpath/1.3.0: - resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz} - name: wicked-good-xpath - version: 1.3.0 - dev: true - - registry.npmmirror.com/workbox-background-sync/6.5.4: - resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz} - name: workbox-background-sync - version: 6.5.4 - dependencies: - idb: registry.npmmirror.com/idb/7.1.1 - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/workbox-broadcast-update/6.5.4: - resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz} - name: workbox-broadcast-update - version: 6.5.4 - dependencies: - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/workbox-build/6.5.4: - resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-build/-/workbox-build-6.5.4.tgz} - name: workbox-build - version: 6.5.4 - engines: {node: '>=10.0.0'} - dependencies: - '@apideck/better-ajv-errors': registry.npmmirror.com/@apideck/better-ajv-errors/0.3.3_ajv@8.11.0 - '@babel/core': registry.npmmirror.com/@babel/core/7.17.10 - '@babel/preset-env': registry.npmmirror.com/@babel/preset-env/7.17.10_@babel+core@7.17.10 - '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.17.9 - '@rollup/plugin-babel': registry.npmmirror.com/@rollup/plugin-babel/5.3.1_rdqchdyh26wleuqzxvwvgxjg6a - '@rollup/plugin-node-resolve': registry.npmmirror.com/@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1 - '@rollup/plugin-replace': registry.npmmirror.com/@rollup/plugin-replace/2.4.2_rollup@2.79.1 - '@surma/rollup-plugin-off-main-thread': registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/2.2.3 - ajv: registry.npmmirror.com/ajv/8.11.0 - common-tags: registry.npmmirror.com/common-tags/1.8.2 - fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0 - fs-extra: registry.npmmirror.com/fs-extra/9.1.0 - glob: registry.npmmirror.com/glob/7.2.0 - lodash: registry.npmmirror.com/lodash/4.17.21 - pretty-bytes: registry.npmmirror.com/pretty-bytes/5.6.0 - rollup: registry.npmmirror.com/rollup/2.79.1 - rollup-plugin-terser: registry.npmmirror.com/rollup-plugin-terser/7.0.2_rollup@2.79.1 - source-map: registry.npmmirror.com/source-map/0.8.0-beta.0 - stringify-object: registry.npmmirror.com/stringify-object/3.3.0 - strip-comments: registry.npmmirror.com/strip-comments/2.0.1 - tempy: registry.npmmirror.com/tempy/0.6.0 - upath: registry.npmmirror.com/upath/1.2.0 - workbox-background-sync: registry.npmmirror.com/workbox-background-sync/6.5.4 - workbox-broadcast-update: registry.npmmirror.com/workbox-broadcast-update/6.5.4 - workbox-cacheable-response: registry.npmmirror.com/workbox-cacheable-response/6.5.4 - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - workbox-expiration: registry.npmmirror.com/workbox-expiration/6.5.4 - workbox-google-analytics: registry.npmmirror.com/workbox-google-analytics/6.5.4 - workbox-navigation-preload: registry.npmmirror.com/workbox-navigation-preload/6.5.4 - workbox-precaching: registry.npmmirror.com/workbox-precaching/6.5.4 - workbox-range-requests: registry.npmmirror.com/workbox-range-requests/6.5.4 - workbox-recipes: registry.npmmirror.com/workbox-recipes/6.5.4 - workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4 - workbox-strategies: registry.npmmirror.com/workbox-strategies/6.5.4 - workbox-streams: registry.npmmirror.com/workbox-streams/6.5.4 - workbox-sw: registry.npmmirror.com/workbox-sw/6.5.4 - workbox-window: registry.npmmirror.com/workbox-window/6.5.4 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: true - - registry.npmmirror.com/workbox-cacheable-response/6.5.4: - resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz} - name: workbox-cacheable-response - version: 6.5.4 - dependencies: - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/workbox-core/6.5.4: - resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-core/-/workbox-core-6.5.4.tgz} - name: workbox-core - version: 6.5.4 - dev: true - - registry.npmmirror.com/workbox-expiration/6.5.4: - resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz} - name: workbox-expiration - version: 6.5.4 - dependencies: - idb: registry.npmmirror.com/idb/7.1.1 - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/workbox-google-analytics/6.5.4: - resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz} - name: workbox-google-analytics - version: 6.5.4 - dependencies: - workbox-background-sync: registry.npmmirror.com/workbox-background-sync/6.5.4 - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4 - workbox-strategies: registry.npmmirror.com/workbox-strategies/6.5.4 - dev: true - - registry.npmmirror.com/workbox-navigation-preload/6.5.4: - resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz} - name: workbox-navigation-preload - version: 6.5.4 - dependencies: - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/workbox-precaching/6.5.4: - resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz} - name: workbox-precaching - version: 6.5.4 - dependencies: - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4 - workbox-strategies: registry.npmmirror.com/workbox-strategies/6.5.4 - dev: true - - registry.npmmirror.com/workbox-range-requests/6.5.4: - resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz} - name: workbox-range-requests - version: 6.5.4 - dependencies: - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/workbox-recipes/6.5.4: - resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz} - name: workbox-recipes - version: 6.5.4 - dependencies: - workbox-cacheable-response: registry.npmmirror.com/workbox-cacheable-response/6.5.4 - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - workbox-expiration: registry.npmmirror.com/workbox-expiration/6.5.4 - workbox-precaching: registry.npmmirror.com/workbox-precaching/6.5.4 - workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4 - workbox-strategies: registry.npmmirror.com/workbox-strategies/6.5.4 - dev: true - - registry.npmmirror.com/workbox-routing/6.5.4: - resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-routing/-/workbox-routing-6.5.4.tgz} - name: workbox-routing - version: 6.5.4 - dependencies: - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/workbox-strategies/6.5.4: - resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz} - name: workbox-strategies - version: 6.5.4 - dependencies: - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/workbox-streams/6.5.4: - resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-streams/-/workbox-streams-6.5.4.tgz} - name: workbox-streams - version: 6.5.4 - dependencies: - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4 - dev: true - - registry.npmmirror.com/workbox-sw/6.5.4: - resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-sw/-/workbox-sw-6.5.4.tgz} - name: workbox-sw - version: 6.5.4 - dev: true - - registry.npmmirror.com/workbox-window/6.5.4: - resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-window/-/workbox-window-6.5.4.tgz} - name: workbox-window - version: 6.5.4 - dependencies: - '@types/trusted-types': registry.npmmirror.com/@types/trusted-types/2.0.2 - workbox-core: registry.npmmirror.com/workbox-core/6.5.4 - dev: true - - registry.npmmirror.com/wrappy/1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz} - name: wrappy - version: 1.0.2 - dev: true - - registry.npmmirror.com/xml-js/1.6.11: - resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xml-js/-/xml-js-1.6.11.tgz} - name: xml-js - version: 1.6.11 - hasBin: true - dependencies: - sax: registry.npmmirror.com/sax/1.2.4 - dev: true - - registry.npmmirror.com/xmldom-sre/0.1.31: - resolution: {integrity: sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xmldom-sre/-/xmldom-sre-0.1.31.tgz} - name: xmldom-sre - version: 0.1.31 - engines: {node: '>=0.1'} - dev: true - - registry.npmmirror.com/yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz} - name: yallist - version: 4.0.0 - dev: true - - registry.npmmirror.com/yaml/2.1.3: - resolution: {integrity: sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yaml/-/yaml-2.1.3.tgz} - name: yaml - version: 2.1.3 - engines: {node: '>= 14'} - dev: true - - registry.npmmirror.com/zrender/5.4.0: - resolution: {integrity: sha512-rOS09Z2HSVGFs2dn/TuYk5BlCaZcVe8UDLLjj1ySYF828LATKKdxuakSZMvrDz54yiKPDYVfjdKqcX8Jky3BIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/zrender/-/zrender-5.4.0.tgz} - name: zrender - version: 5.4.0 - dependencies: - tslib: registry.npmmirror.com/tslib/2.3.0 - dev: true + zod@4.6.5: {} + + zwitch@2.0.4: {} diff --git a/public/content-assets/github-profile/footer-dark.svg b/public/content-assets/github-profile/footer-dark.svg new file mode 100644 index 000000000..dac26508a --- /dev/null +++ b/public/content-assets/github-profile/footer-dark.svg @@ -0,0 +1,32 @@ + + Aurora footer + Flowing light trails. Decorative motion pauses when reduced motion is preferred. + + + + + + + + + + + + + + + + + Curiosity fuels the next iteration. + + + diff --git a/public/content-assets/github-profile/footer-light.svg b/public/content-assets/github-profile/footer-light.svg new file mode 100644 index 000000000..f8dff67e0 --- /dev/null +++ b/public/content-assets/github-profile/footer-light.svg @@ -0,0 +1,32 @@ + + Aurora footer + Flowing light trails. Decorative motion pauses when reduced motion is preferred. + + + + + + + + + + + + + + + + + Curiosity fuels the next iteration. + + + diff --git a/public/content-assets/github-profile/profile-dark.svg b/public/content-assets/github-profile/profile-dark.svg new file mode 100644 index 000000000..e00bf43b9 --- /dev/null +++ b/public/content-assets/github-profile/profile-dark.svg @@ -0,0 +1,63 @@ + + Engineering with intelligence + An orbital code core framed by blue, cyan, and violet aurora light. Decorative motion pauses when reduced motion is preferred. + + + + + + + + + + + + + + + + + + + + + + MoMeak9 / AI Native Engineer + Engineering + with intelligence. + From thoughtful interfaces to connected systems. + + Frontend craft + + Full-stack depth + + AI workflows + + + + + + + + + + + + + + + + + + + + diff --git a/public/content-assets/github-profile/profile-light.svg b/public/content-assets/github-profile/profile-light.svg new file mode 100644 index 000000000..cfd719be5 --- /dev/null +++ b/public/content-assets/github-profile/profile-light.svg @@ -0,0 +1,63 @@ + + Engineering with intelligence + An orbital code core framed by blue, cyan, and violet aurora light. Decorative motion pauses when reduced motion is preferred. + + + + + + + + + + + + + + + + + + + + + + MoMeak9 / AI Native Engineer + Engineering + with intelligence. + From thoughtful interfaces to connected systems. + + Frontend craft + + Full-stack depth + + AI workflows + + + + + + + + + + + + + + + + + + + + diff --git a/public/content-assets/github-profile/typing.svg b/public/content-assets/github-profile/typing.svg new file mode 100644 index 000000000..29c72fed5 --- /dev/null +++ b/public/content-assets/github-profile/typing.svg @@ -0,0 +1 @@ +AI Native Engineer · Full-Stack Developer · Building with AIAI Native EngineerFull-Stack DeveloperBuilding with AI diff --git a/public/content-assets/multihop-evidence-chain.svg b/public/content-assets/multihop-evidence-chain.svg new file mode 100644 index 000000000..42b0397e4 --- /dev/null +++ b/public/content-assets/multihop-evidence-chain.svg @@ -0,0 +1,33 @@ + + 多跳问答证据链示意图 + 从项目负责人记录找到张敏,再通过员工 ID 对齐人员部门记录,合并两条来源生成带引用的答案。 + + + + + + + 问题:项目 A 的负责人属于哪个部门? + + + 证据 1 · 项目记录 + 项目 A → 负责人:张敏 + 来源:DOC-01 + + + 实体对齐 + 张敏 → 员工 ID 028 + + + 证据 2 · 人员记录 + ID 028 → 搜索平台组 + 来源:DOC-02 + + + + + + + + 答案:搜索平台组 · 引用 DOC-01 + DOC-02 + diff --git a/src/.vuepress/public/favicon.ico b/public/favicon.ico similarity index 100% rename from src/.vuepress/public/favicon.ico rename to public/favicon.ico diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 000000000..226390571 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ +Y diff --git a/public/images/editorial-design.jpg b/public/images/editorial-design.jpg new file mode 100644 index 000000000..c1615814f Binary files /dev/null and b/public/images/editorial-design.jpg differ diff --git a/public/images/editorial-engineering.jpg b/public/images/editorial-engineering.jpg new file mode 100644 index 000000000..5f01906ee Binary files /dev/null and b/public/images/editorial-engineering.jpg differ diff --git a/public/images/editorial-writing.jpg b/public/images/editorial-writing.jpg new file mode 100644 index 000000000..1a0931d8e Binary files /dev/null and b/public/images/editorial-writing.jpg differ diff --git a/public/search-sw.js b/public/search-sw.js new file mode 100644 index 000000000..5a38d4f67 --- /dev/null +++ b/public/search-sw.js @@ -0,0 +1,595 @@ +/* Versioned offline search. Automatic preparation yields to visible-page activity. */ +const SCOPE = new URL(self.registration.scope); +const BASE = SCOPE.pathname; +const PREFIX = `myblogdoc-search-v1:${encodeURIComponent(BASE)}:`; +const MARKER = new URL(".offline-search-complete.json", SCOPE).href; +const VISITED_STATE = new URL(".offline-search-visited.json", SCOPE).href; +const VISITED_CACHE = `${PREFIX}visited`; +const MAX_VISITED = 20; +const MAX_VISITED_ASSETS = 256; +let snapshotsPromise; +let warmJob; +let epoch = 0; +let visitedQueue = Promise.resolve(); +const automaticClients = new Map(); +let automaticQuotaBlocked = false; + +const scoped = (url) => + url.origin === SCOPE.origin && url.pathname.startsWith(BASE); +const validVersion = (value) => + typeof value === "string" && /^[\w.-]{1,128}$/.test(value); +const jsonResponse = (value) => + new Response(JSON.stringify(value), { + headers: { "Content-Type": "application/json" }, + }); +const stateFor = (snapshot) => + snapshot + ? { + phase: "ready", + hasDownload: true, + version: snapshot.version, + completed: snapshot.files.length, + total: snapshot.files.length, + totalBytes: snapshot.totalBytes, + } + : { phase: "available", hasDownload: false }; + +async function networkFetch(resource, options = {}, timeout = 45000) { + const controller = new AbortController(); + const parent = options.signal; + const abort = () => controller.abort(); + if (parent?.aborted) controller.abort(); + else parent?.addEventListener("abort", abort, { once: true }); + const timer = setTimeout(abort, timeout); + try { + return await fetch(resource, { ...options, signal: controller.signal }); + } finally { + clearTimeout(timer); + parent?.removeEventListener("abort", abort); + } +} + +function manifestData(value) { + if ( + !value || + !validVersion(value.version) || + value.base !== BASE || + !Array.isArray(value.files) || + !Number.isSafeInteger(value.totalBytes) || + value.totalBytes < 0 + ) + throw new Error("Invalid offline search manifest."); + const seen = new Set(); + const files = value.files.map((file) => { + if ( + typeof file.url !== "string" || + !Number.isSafeInteger(file.bytes) || + file.bytes < 0 + ) + throw new Error("Invalid search asset."); + const url = new URL(file.url, SCOPE); + if ( + !scoped(url) || + url.username || + url.password || + url.search || + url.hash || + /%(?:2f|5c)/i.test(url.pathname) || + [MARKER, VISITED_STATE].includes(url.href) || + seen.has(url.href) + ) + throw new Error("Search asset leaves its project scope."); + seen.add(url.href); + return { url: url.href, bytes: file.bytes }; + }); + if ( + !files.length || + files.reduce((sum, file) => sum + file.bytes, 0) !== value.totalBytes + ) + throw new Error("Search asset sizes do not match the manifest."); + for (const required of [ + "search-version.json", + "search-dictionary.json", + "content-index.json", + "blog/", + "en/blog/", + "pagefind/pagefind.js", + ]) { + if (!seen.has(new URL(required, SCOPE).href)) + throw new Error("Offline search manifest is missing a required asset."); + } + return { + version: value.version, + base: BASE, + articleCount: value.articleCount, + totalBytes: value.totalBytes, + files, + }; +} + +async function snapshots() { + if (!snapshotsPromise) + snapshotsPromise = (async () => { + const complete = []; + for (const name of await caches.keys()) { + if (!name.startsWith(`${PREFIX}pack:`)) continue; + const cache = await caches.open(name); + const response = await cache.match(MARKER); + if (!response) continue; + try { + const marker = await response.json(); + const manifest = manifestData(marker); + const keys = new Set( + (await cache.keys()).map((request) => request.url), + ); + if (!manifest.files.every((file) => keys.has(file.url))) continue; + complete.push({ + ...manifest, + name, + cache, + completedAt: marker.completedAt || 0, + urls: new Set(manifest.files.map((file) => file.url)), + }); + } catch { + /* An interrupted or malformed pack is never published. */ + } + } + return complete.sort((a, b) => b.completedAt - a.completedAt); + })().catch((error) => { + snapshotsPromise = undefined; + throw error; + }); + return snapshotsPromise; +} + +async function broadcast(state) { + for (const client of await self.clients.matchAll({ + type: "window", + includeUncontrolled: true, + })) { + if (scoped(new URL(client.url))) + client.postMessage({ type: "OFFLINE_SEARCH_STATE", state }); + } +} +function progress(job) { + for (const port of job.ports) { + try { + port.postMessage({ type: "OFFLINE_SEARCH_PROGRESS", state: job.state }); + } catch { + job.ports.delete(port); + } + } + void broadcast(job.state); +} +async function offlineCacheStatus() { + return warmJob ? warmJob.state : stateFor((await snapshots())[0]); +} + +async function automaticPermission(job) { + if (!job.automatic) return; + while (true) { + job.controller.signal.throwIfAborted(); + let permitted = false; + let foregroundBusy = false; + for (const [id, policy] of automaticClients) { + const client = await self.clients.get(id); + if (!client || !scoped(new URL(client.url))) { + automaticClients.delete(id); + continue; + } + if (client.visibilityState === "visible") { + if (policy.busy) foregroundBusy = true; + if (policy.allowed) permitted = true; + } + } + permitted = permitted && !foregroundBusy; + if (job.state.paused === permitted) { + job.state.paused = !permitted; + progress(job); + } + if (permitted) return; + progress(job); // A paused sender still gets a heartbeat without fetching any assets. + await new Promise((resolve, reject) => { + const finish = () => { + clearTimeout(timer); + job.wake.delete(finish); + job.controller.signal.removeEventListener("abort", abort); + resolve(); + }; + const abort = () => { + finish(); + reject(job.controller.signal.reason); + }; + const timer = setTimeout(finish, 15000); + job.wake.add(finish); + job.controller.signal.addEventListener("abort", abort, { once: true }); + if (job.controller.signal.aborted) abort(); + }); + } +} + +async function resumableCache(manifest, complete) { + const preserved = complete[0]?.name; + let resumed; + for (const name of await caches.keys()) { + if (!name.startsWith(`${PREFIX}pack:`) || name === preserved) continue; + const cache = await caches.open(name); + if ( + !resumed && + name.startsWith(`${PREFIX}pack:${manifest.version}:`) && + !(await cache.match(MARKER)) + ) { + try { + const saved = manifestData( + await ( + await cache.match(new URL("search-manifest.json", SCOPE).href) + ).json(), + ); + if (JSON.stringify(saved.files) === JSON.stringify(manifest.files)) + resumed = { name, cache }; + } catch { + /* A partial pack is reusable only with the exact same reviewed manifest. */ + } + } + if (resumed?.name !== name) await caches.delete(name); + } + return resumed; +} + +async function downloadPack(job, expectedVersion) { + const controller = job.controller; + const manifestUrl = new URL("search-manifest.json", SCOPE).href; + let cacheName; + let committed = false; + let quotaFailure = false; + try { + await automaticPermission(job); + const response = await networkFetch(manifestUrl, { + cache: "no-store", + signal: controller.signal, + ...(job.automatic ? { priority: "low" } : {}), + }); + if (!response.ok) + throw new Error("Offline search manifest could not be loaded."); + const rawManifest = await response.json(); + const manifest = manifestData(rawManifest); + if (expectedVersion && manifest.version !== expectedVersion) + throw new Error("Search content changed. Try the download again."); + const complete = await snapshots(); + const existing = complete.find((item) => item.version === manifest.version); + if (existing) return stateFor(existing); + // Same-version partial downloads can resume after a tab closes or a worker stops. + const resumed = await resumableCache(manifest, complete); + snapshotsPromise = undefined; + cacheName = + resumed?.name || + `${PREFIX}pack:${manifest.version}:${Date.now()}-${Math.random().toString(36).slice(2)}`; + const cache = resumed?.cache || (await caches.open(cacheName)); + await cache.put(manifestUrl, jsonResponse(rawManifest)); + job.state = { + phase: "downloading", + hasDownload: complete.length > 0, + version: manifest.version, + completed: 0, + total: manifest.files.length, + totalBytes: manifest.totalBytes, + ...(job.automatic ? { paused: false } : {}), + }; + progress(job); + let position = 0; + const workers = Array.from( + { length: Math.min(job.automatic ? 1 : 4, manifest.files.length) }, + async () => { + try { + while (position < manifest.files.length) { + await automaticPermission(job); + controller.signal.throwIfAborted(); + if (position >= manifest.files.length) break; + const file = manifest.files[position++]; + const prior = await cache.match(file.url); + const reusable = + prior?.ok && + (await prior.clone().arrayBuffer()).byteLength === file.bytes; + const asset = reusable + ? prior + : await networkFetch(file.url, { + cache: "no-store", + signal: controller.signal, + ...(job.automatic ? { priority: "low" } : {}), + }); + if ( + !asset.ok || + !scoped(new URL(asset.url || file.url)) || + (await asset.clone().arrayBuffer()).byteLength !== file.bytes + ) + throw new Error("A search asset changed or could not be saved."); + controller.signal.throwIfAborted(); + if (!reusable) await cache.put(file.url, asset); + job.state.completed++; + progress(job); + } + } catch (error) { + controller.abort(); + throw error; + } + }, + ); + const results = await Promise.allSettled(workers); + const failure = results.find((result) => result.status === "rejected"); + if (failure) throw failure.reason; + await automaticPermission(job); + controller.signal.throwIfAborted(); + const versionResponse = await networkFetch( + new URL("search-version.json", SCOPE), + { + cache: "no-store", + signal: controller.signal, + ...(job.automatic ? { priority: "low" } : {}), + }, + ); + if ( + !versionResponse.ok || + (await versionResponse.json()).version !== manifest.version + ) + throw new Error("Search content changed during the download."); + controller.signal.throwIfAborted(); + await cache.put(manifestUrl, jsonResponse(rawManifest)); + controller.signal.throwIfAborted(); + // This is the only publication point: every listed asset is already present. + await cache.put( + MARKER, + jsonResponse({ ...manifest, completedAt: Date.now() }), + ); + committed = true; + snapshotsPromise = undefined; + return stateFor({ ...manifest }); + } catch (error) { + quotaFailure = + error?.name === "QuotaExceededError" || + /quota/i.test(error?.message || ""); + throw error; + } finally { + if (cacheName && !committed && (!job.automatic || quotaFailure)) + await caches.delete(cacheName); + snapshotsPromise = undefined; + } +} + +self.addEventListener("install", (event) => + event.waitUntil(self.skipWaiting()), +); +self.addEventListener("activate", (event) => + event.waitUntil(self.clients.claim()), +); +self.addEventListener("message", (event) => { + const port = event.ports?.[0]; + if (!event.source?.url || !scoped(new URL(event.source.url))) return; + if (!port && event.data?.type !== "OFFLINE_SEARCH_ACTIVITY") return; + event.waitUntil( + (async () => { + try { + let state; + if (event.data?.type === "OFFLINE_SEARCH_ACTIVITY") { + if (event.source.id) + automaticClients.set(event.source.id, { + allowed: event.data.allowed === true, + busy: event.data.busy === true, + }); + if (warmJob?.automatic) for (const wake of [...warmJob.wake]) wake(); + state = await offlineCacheStatus(); + } else if (event.data?.type === "OFFLINE_SEARCH_STATUS") + state = await offlineCacheStatus(); + else if (event.data?.type === "OFFLINE_SEARCH_CLAIM") { + await self.clients.claim(); + state = await offlineCacheStatus(); + } else if (event.data?.type === "OFFLINE_SEARCH_DOWNLOAD") { + if (event.data.automatic === true && automaticQuotaBlocked) + throw Object.assign( + new Error("Offline storage quota is unavailable."), + { name: "QuotaExceededError" }, + ); + if (!warmJob) { + const complete = await snapshots(); + if (!warmJob) { + const job = { + controller: new AbortController(), + ports: new Set(), + wake: new Set(), + automatic: event.data.automatic === true, + state: { + phase: "downloading", + hasDownload: complete.length > 0, + completed: 0, + version: event.data.expectedVersion, + ...(event.data.automatic === true ? { paused: false } : {}), + }, + }; + warmJob = job; + job.promise = downloadPack(job, event.data.expectedVersion) + .then(async (result) => { + await broadcast(result); + return result; + }) + .catch(async (error) => { + const quota = + error?.name === "QuotaExceededError" || + /quota/i.test(error?.message || ""); + if (quota && job.automatic) automaticQuotaBlocked = true; + const complete = await snapshots().catch(() => []); + await broadcast({ + ...job.state, + phase: "error", + hasDownload: complete.length > 0, + errorKind: quota ? "quota" : "network", + }); + throw error; + }) + .finally(() => { + if (warmJob === job) warmJob = undefined; + }); + } + } + const job = warmJob; + job.ports.add(port); + port.postMessage({ + type: "OFFLINE_SEARCH_PROGRESS", + state: job.state, + }); + try { + state = await job.promise; + } finally { + job.ports.delete(port); + } + } else if (event.data?.type === "OFFLINE_SEARCH_REMOVE") { + epoch++; + automaticQuotaBlocked = false; + if (warmJob) { + warmJob.controller.abort(); + await warmJob.promise.catch(() => {}); + } + await visitedQueue.catch(() => {}); + for (const name of await caches.keys()) + if (name.startsWith(PREFIX)) await caches.delete(name); + snapshotsPromise = undefined; + state = { phase: "available", hasDownload: false }; + await broadcast(state); + } else return; + port?.postMessage({ type: "OFFLINE_SEARCH_REPLY", ok: true, state }); + } catch (error) { + port?.postMessage({ + type: "OFFLINE_SEARCH_REPLY", + ok: false, + error: error?.message || "Offline search operation failed.", + code: error?.name, + }); + } + })(), + ); +}); + +function safeQueryPath(url) { + const path = url.pathname.slice(BASE.length); + return /^(?:pagefind\/|_astro\/|(?:images|content-assets)\/.+\.(?:svg|png|jpe?g|avif|webp)$|(?:content-index|search-version|search-manifest)\.json$|(?:en\/)?blog\/$)/i.test( + path, + ); +} +async function cachedResponse(url) { + const complete = await snapshots(); + if (!complete.length) return undefined; + const canonical = new URL(url.href); + canonical.hash = ""; + const relativePath = url.pathname.slice(BASE.length); + if (safeQueryPath(url)) canonical.search = ""; + const tag = relativePath.startsWith("pagefind/") + ? url.searchParams.get("v") || + url.searchParams.get("ts") || + url.searchParams.get("metaCacheTag") + : null; + const eligible = tag + ? complete.filter((snapshot) => snapshot.version === tag) + : complete; + for (const snapshot of eligible) { + if ( + !snapshot.urls.has(canonical.href) && + relativePath !== "search-manifest.json" + ) + continue; + const response = await snapshot.cache.match(canonical.href); + if (response) return response; + } + if (tag && !eligible.length) return undefined; + const visited = await caches.open(VISITED_CACHE); + return visited.match(url.href); +} + +function visitable(url, request) { + const path = url.pathname.slice(BASE.length); + if (request.mode === "navigate") return /^(?:en\/)?posts\/.+\/$/.test(path); + return /^(?:_astro\/.+\.(?:js|css)|images\/.+\.(?:avif|webp|png|jpe?g|svg)|content-assets\/.+\.(?:svg|png|jpe?g|webp|avif|mp4|webm|woff2?))$/i.test( + path, + ); +} +function rememberVisit(url, request, response, requestEpoch) { + if (!response.ok || !visitable(url, request)) return Promise.resolve(); + const task = visitedQueue + .catch(() => {}) + .then(async () => { + if (epoch !== requestEpoch || !(await snapshots()).length) return; + const cache = await caches.open(VISITED_CACHE); + await cache.put(url.href, response); + const prior = await cache.match(VISITED_STATE); + const record = prior ? await prior.json() : { urls: [], assets: [] }; + const key = request.mode === "navigate" ? "urls" : "assets"; + record[key] = [ + ...(record[key] || []).filter((value) => value !== url.href), + url.href, + ]; + const limit = key === "urls" ? MAX_VISITED : MAX_VISITED_ASSETS; + while (record[key].length > limit) + await cache.delete(record[key].shift()); + await cache.put(VISITED_STATE, jsonResponse(record)); + }) + .catch(() => {}); // Quota exhaustion for optional reading must not break live pages. + visitedQueue = task; + return task; +} +function filteredArchiveRedirect(url) { + const match = url.pathname + .slice(BASE.length) + .match(/^(en\/)?blog\/[1-9]\d*\/$/); + if ( + !match || + (!url.searchParams.has("q") && !url.searchParams.has("category")) + ) + return undefined; + const archive = new URL(match[1] ? "en/blog/" : "blog/", SCOPE); + archive.search = url.search; + archive.hash = url.hash; + return Response.redirect(archive.href, 302); +} +function offlinePage(url) { + const english = url.pathname.slice(BASE.length).startsWith("en/"); + const archive = new URL(english ? "en/blog/" : "blog/", SCOPE).pathname; + const title = english + ? "This page is not saved offline." + : "此页面尚未保存到离线缓存。"; + const description = english + ? "Downloaded search is available. Articles can be read offline after you visit them." + : "已下载的文章搜索仍可使用。访问过的文章可供离线阅读。"; + return new Response( + `${title}

${title}

${description}

${english ? "Open offline search" : "打开离线搜索"}`, + { + status: 503, + headers: { + "Content-Type": "text/html; charset=utf-8", + "Cache-Control": "no-store", + }, + }, + ); +} +self.addEventListener("fetch", (event) => { + const request = event.request; + const url = new URL(request.url); + if (request.method !== "GET" || !scoped(url)) return; + const requestEpoch = epoch; + event.respondWith( + (async () => { + try { + const response = await networkFetch(request, {}, 15000); + if (response.ok) { + event.waitUntil( + rememberVisit(url, request, response.clone(), requestEpoch), + ); + return response; + } + return (await cachedResponse(url)) || response; + } catch { + const saved = await cachedResponse(url); + if (saved) return saved; + if (request.mode === "navigate" && (await snapshots()).length) + return filteredArchiveRedirect(url) || offlinePage(url); + return Response.error(); + } + })(), + ); +}); diff --git a/public/social-card.jpg b/public/social-card.jpg new file mode 100644 index 000000000..af613271a Binary files /dev/null and b/public/social-card.jpg differ diff --git a/public/social-card.svg b/public/social-card.svg new file mode 100644 index 000000000..65136a37a --- /dev/null +++ b/public/social-card.svg @@ -0,0 +1 @@ +YYihui’s BlogFrontend · Engineering · Ideas记录所学,分享实践,为热爱而坚持。momeak9.github.io/MyBlogDoc \ No newline at end of file diff --git a/reports/content-migration.json b/reports/content-migration.json new file mode 100644 index 000000000..49b9c4d62 --- /dev/null +++ b/reports/content-migration.json @@ -0,0 +1,16712 @@ +{ + "schemaVersion": 1, + "sourceReadOnly": true, + "datePolicy": "Explicit article frontmatter stays intact. Source filesystem modification times are provenance and dateModified only; they are never treated as publication dates.", + "counts": { + "reviewed": 820, + "added": 516, + "skipped": 292, + "excluded": 2, + "updated": 7, + "excluded_by_request": 3, + "assets": 1, + "recommendations": { + "import_new": 516, + "skip_working_notes": 3, + "skip_private_or_sensitive": 2, + "skip_duplicate": 221, + "skip_empty": 22, + "skip_about_duplicate": 1, + "skip_site_home": 1, + "skip_source_duplicate": 7, + "preserve_existing": 27, + "skip_superseded": 2, + "skip_stub": 8, + "update_existing": 7, + "skip_user_excluded": 3 + }, + "links": { + "rewritten": 1104, + "unresolved-to-text": 76, + "asset-rewritten": 1 + }, + "originallyMissingDocumentLinks": { + "inventoried": 153, + "rewritten": 128, + "convertedToText": 25 + } + }, + "existingRequestExcludedTargets": [], + "decisions": [ + { + "sourceRelativePath": "产运快速Vibe Coding验证你的所思所想.md", + "targetRelativePath": "产运快速Vibe Coding验证你的所思所想.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d81d70d752fae753eedef3e5c3ae69867ca02fd7929c3285dfdaea783be6df1f" + }, + { + "sourceRelativePath": "URL 解释 - 基础知识.md", + "targetRelativePath": "URL 解释 - 基础知识.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7429174e6fc2ca9dcbe15983bf0442c0f78614de8b55232dcaca030fabd28ed7" + }, + { + "sourceRelativePath": "「241024」Money Hack (下) What's Your Number.md", + "targetRelativePath": "「241024」Money Hack (下) What's Your Number.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "db148b3ba4e5763f3d8fadc36472d1a7936dba3f9c10ab032e07b0646ef3ee74" + }, + { + "sourceRelativePath": "平台发布.md", + "targetRelativePath": "平台发布.md", + "recommendation": "skip_working_notes", + "action": "skipped", + "rationale": "internal article distribution/publishing plan" + }, + { + "excluded": true, + "recommendation": "skip_private_or_sensitive", + "action": "excluded", + "rationale": "Private or sensitive working note omitted; no contents or fingerprints retained." + }, + { + "sourceRelativePath": "索引.md", + "targetRelativePath": "索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "143d4b1d1fcf778408cc83794339fb855c067bdfa71c5c1de279474a6897ca57" + }, + { + "sourceRelativePath": "技术目录整理清单.md", + "targetRelativePath": "技术目录整理清单.md", + "recommendation": "skip_working_notes", + "action": "skipped", + "rationale": "source directory migration checklist, not an article" + }, + { + "sourceRelativePath": "个人简介.md", + "targetRelativePath": "个人简介.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "翻译索引.md", + "targetRelativePath": "翻译索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "80b29f8d8361f5cd549f616a9cf06038014a4cc6095c07ac3024206c9b64e615" + }, + { + "sourceRelativePath": "().md", + "targetRelativePath": "().md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "2026-01-18.md", + "targetRelativePath": "2026-01-18.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "intro.md", + "targetRelativePath": "intro.md", + "recommendation": "skip_about_duplicate", + "action": "skipped", + "rationale": "about page is newer and includes source content plus additional social info" + }, + { + "sourceRelativePath": "2023 进阶清单.md", + "targetRelativePath": "2023 进阶清单.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a0195482a367622172c5293b01af833d81b1fb361d42d919f740d71b723c1828" + }, + { + "sourceRelativePath": "Vue Test Utils处理异步行为.md", + "targetRelativePath": "Vue Test Utils处理异步行为.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "be81efe27773c853f2bd0adaf0043ad157c46280ae65844b35d3865b2c62dccf" + }, + { + "sourceRelativePath": "插件.md", + "targetRelativePath": "插件.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4ac0b332c00cd7141f48a9e900056f1006a5d8d49587101963342fa766cf6370" + }, + { + "sourceRelativePath": "README.md", + "targetRelativePath": "README.md", + "recommendation": "skip_site_home", + "action": "skipped", + "rationale": "source VuePress home config conflicts with Astro homepage" + }, + { + "excluded": true, + "recommendation": "skip_private_or_sensitive", + "action": "excluded", + "rationale": "Private or sensitive working note omitted; no contents or fingerprints retained." + }, + { + "sourceRelativePath": "123.md", + "targetRelativePath": "123.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "2023 书单.md", + "targetRelativePath": "2023 书单.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "Go/Go基础语法极速版(二)——续看基本类型.md", + "targetRelativePath": "Go/Go基础语法极速版(二)——续看基本类型.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "311f0b58daba4e1ffffce6dc030ef537d554fd4806dcc516eab4c861e41ffd30" + }, + { + "sourceRelativePath": "Go/Go基础语法极速版(一)——从main函数到string类型.md", + "targetRelativePath": "Go/Go基础语法极速版(一)——从main函数到string类型.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3bfa3242153a9b9e87c16a7299f5773e3492cd6ac2d4cf87371dbd6e03ac6820" + }, + { + "sourceRelativePath": "Go/Go基础语法极速版(三)——变量、常量声明.md", + "targetRelativePath": "Go/Go基础语法极速版(三)——变量、常量声明.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c432448843912c516aeb083cc6f646a1929cf1f961ed677a632a5f8041d915e4" + }, + { + "sourceRelativePath": "Lit/第五章:致React开发者 - 将你的知识平移到Lit.md", + "targetRelativePath": "Lit/第五章:致React开发者 - 将你的知识平移到Lit.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "289169a3ff05f67899b1c6d4f6f3f421cb675643ad47c4ecc6966af14db5bfcf" + }, + { + "sourceRelativePath": "Lit/第四章:响应式与状态 - 让组件动起来.md", + "targetRelativePath": "Lit/第四章:响应式与状态 - 让组件动起来.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d9142e6ed006265b9a36b86a745fbdcabaa5634982ceae1283bf04c5c2c93aeb" + }, + { + "sourceRelativePath": "Lit/第三章:lit-html的威力 - 精通声明式模板.md", + "targetRelativePath": "Lit/第三章:lit-html的威力 - 精通声明式模板.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e03af74bf2f0504279c5336fabfdff514841769db01fd6db231da2b972f792a9" + }, + { + "sourceRelativePath": "Lit/第七章:组件化构建 - 组合与通信.md", + "targetRelativePath": "Lit/第七章:组件化构建 - 组合与通信.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c1592be97cb373bc7e81c5705b10d089713624913320a91056da05f4b4fab94d" + }, + { + "sourceRelativePath": "Lit/第八章:高级概念与Lit生态系统.md", + "targetRelativePath": "Lit/第八章:高级概念与Lit生态系统.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b0570fc39cea7dc414c3ea68789d5499223d5ffc99496bad0bd44e1f2ef676e3" + }, + { + "sourceRelativePath": "Lit/第六章:样式与主题 - Shadow DOM的封装艺术.md", + "targetRelativePath": "Lit/第六章:样式与主题 - Shadow DOM的封装艺术.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e69d45b6e63bff082d79c7cb283d7e4930a69d38202cfc3f4b9c61f13c4ea821" + }, + { + "sourceRelativePath": "Lit/第一章:Lit简介 - 现代Web组件标准.md", + "targetRelativePath": "Lit/第一章:Lit简介 - 现代Web组件标准.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c99c9c7370ef8798f808f85fc35b7e9ffd01c106b0844346881207e5bcedcd42" + }, + { + "sourceRelativePath": "Lit/第二章:你的第一个Lit组件 - 从零到\"Hello, World\".md", + "targetRelativePath": "Lit/第二章:你的第一个Lit组件 - 从零到\"Hello, World\".md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "da5a6434e35dac8def494904a6fcbf5abba6390866d6a9241da5e1bf7eacf62c" + }, + { + "sourceRelativePath": "Lit/第二章:你的第一个Lit组件 - 从零到“Hello, World”.md", + "targetRelativePath": "Lit/第二章:你的第一个Lit组件 - 从零到\"Hello, World\".md", + "recommendation": "skip_source_duplicate", + "action": "skipped", + "rationale": "same Lit第二章 topic: short 2393-char no-H1 draft superseded by 9237-char full tutorial with H1, complete chapter summary and exercises" + }, + { + "sourceRelativePath": "CSS/Flex 布局.md", + "targetRelativePath": "CSS/基础知识/Flex 布局.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/Grid 布局.md", + "targetRelativePath": "CSS/基础知识/Grid 布局.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/索引.md", + "targetRelativePath": "CSS/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "376b74c5dad5c35c32fdb1c2e222a5a70de4563fb0d9964e8cd31cbcbaa6ec74" + }, + { + "sourceRelativePath": "CSS/CSS 父元素没有被子元素撑开问题.md", + "targetRelativePath": "CSS/CSS 父元素没有被子元素撑开问题.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/Web 安全字体和网络字体 (Web Fonts).md", + "targetRelativePath": "CSS/基础知识/Web 安全字体和网络字体 (Web Fonts).md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "CSS/Tailwind CSS 核心概念:功能类优先.md", + "targetRelativePath": "CSS/Tailwind CSS 核心概念:功能类优先.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/CSS 自定义属性.md", + "targetRelativePath": "CSS/基础知识/CSS 自定义属性.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/逻辑组合伪类.md", + "targetRelativePath": "CSS/基础知识/逻辑组合伪类.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/伪类与伪元素的区别.md", + "targetRelativePath": "CSS/基础知识/伪类与伪元素的区别.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/Stylus 学习整合.md", + "targetRelativePath": "CSS/基础知识/Stylus 学习整合.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/值得你了解的Tailwind CSS Tips和技巧.md", + "targetRelativePath": "CSS/值得你了解的Tailwind CSS Tips和技巧.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "93dcddbe3be5b6aef2512f7fd307b4578ca98d7eb8118266757a9da74c29022c" + }, + { + "sourceRelativePath": "CSS/Vue scoped属性的用途和工作原理.md", + "targetRelativePath": "CSS/Vue scoped属性的用途和工作原理.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/Less 知识点汇总.md", + "targetRelativePath": "CSS/基础知识/Less 知识点汇总.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/CSS进阶:逻辑组合伪类.md", + "targetRelativePath": "CSS/基础知识/CSS进阶:逻辑组合伪类.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/PostCSS.md", + "targetRelativePath": "CSS/PostCSS.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "TipTap/Tiptap教程系列(二)_优化版.md", + "targetRelativePath": "TipTap/Tiptap教程系列(二).md", + "recommendation": "import_new", + "action": "added", + "rationale": "use expanded optimized edition at stable ordinary chapter filename", + "resultHash": "7ff651ddb10aab6f11bc5240d67f8e3d161f4f0a0fb3f6e40e43896ce05d0d01" + }, + { + "sourceRelativePath": "TipTap/Tiptap教程系列(三)-优化版.md", + "targetRelativePath": "TipTap/Tiptap教程系列(三).md", + "recommendation": "import_new", + "action": "added", + "rationale": "use expanded optimized edition at stable ordinary chapter filename", + "resultHash": "2cc4262dcf8a6d2b0cd6b003d7c272916becd7eaec32eb81d7cd9d679e5d3afc" + }, + { + "sourceRelativePath": "TipTap/Tiptap教程系列(三).md", + "targetRelativePath": "TipTap/Tiptap教程系列(三).md", + "recommendation": "skip_superseded", + "action": "skipped", + "rationale": "expanded optimized edition supplies same tutorial chapter" + }, + { + "sourceRelativePath": "TipTap/大纲.md", + "targetRelativePath": "产品/B站视频播客:长视频的另类出路,还是看上去很美?.md", + "recommendation": "import_new", + "action": "added", + "rationale": "actual first H3/article subject differs from its temporary filename", + "titleOverride": "B站视频播客:长视频的另类出路,还是看上去很美?", + "resultHash": "e8b5dcd9aea20178debfa995c2d943eb96484705722990b57577a752823c0add" + }, + { + "sourceRelativePath": "TipTap/Tiptap教程系列(一).md", + "targetRelativePath": "TipTap/Tiptap教程系列(一).md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "57748a3ed8b0a6f9b60fe2025230837fedb08d6660ba39c52223cfdf208be11d" + }, + { + "sourceRelativePath": "TipTap/编辑器加载快了 60%:我们是怎么把 1.5MB 的\"赘肉\"切掉的.md", + "targetRelativePath": "TipTap/编辑器加载快了 60%:我们是怎么把 1.5MB 的\"赘肉\"切掉的.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4ab6ceebf630785edd2a52a356d39f56a9408e4f0e7858d0c2dd744c67748191" + }, + { + "sourceRelativePath": "TipTap/Tiptap教程系列(二).md", + "targetRelativePath": "TipTap/Tiptap教程系列(二).md", + "recommendation": "skip_superseded", + "action": "skipped", + "rationale": "expanded optimized edition supplies same tutorial chapter" + }, + { + "sourceRelativePath": "TipTap/Tiptap 深度教程(四):终极定制 - 从零创建你的专属扩展.md", + "targetRelativePath": "TipTap/Tiptap 深度教程(四):终极定制 - 从零创建你的专属扩展.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0cea1a84253399489a675c221c455da3e43fa804f39158cc9b9a3e3596d21b57" + }, + { + "sourceRelativePath": "安全/未命名.md", + "targetRelativePath": "安全/未命名.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "安全/Web 安全演进:数字证书签名算法升级指南.md", + "targetRelativePath": "安全/Web 安全演进:数字证书签名算法升级指南.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e4ebd8699c049dfd112f7531351d6c34496632ec64297e8e6736865b60a4000f" + }, + { + "sourceRelativePath": "安全/Web 安全上下文技术实践指南.md", + "targetRelativePath": "安全/Web 安全上下文技术实践指南.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e09411b256a6ec8917fb359ca06e4b7e7e041eec0a9bc5863e610f08a690110b" + }, + { + "sourceRelativePath": "TypeScript/TS中的内置条件类型:ReturnType.md", + "targetRelativePath": "TypeScript/TS中的内置条件类型:ReturnType.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/如何在TypeScript中迭代对象键.md", + "targetRelativePath": "TypeScript/如何在TypeScript中迭代对象键.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7e8f42f6bc235e313c750c612c5fa11db38dbafaf9bb9407da4ca3b4adc78907" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "targetRelativePath": "TypeScript/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "761e7f2507f2b61dc759bbcc5ce377eaf272699b9bb6405d0d3d9bd7682e732f" + }, + { + "sourceRelativePath": "TypeScript/工具类型.md", + "targetRelativePath": "TypeScript/工具类型.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/函数泛型.md", + "targetRelativePath": "TypeScript/函数泛型.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/TypeScript 笔记.md", + "targetRelativePath": "TypeScript/TypeScript 笔记.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/自定义协议唤起 | 唤端能力支持库编写 —— 基于TypeScript 编写.md", + "targetRelativePath": "TypeScript/自定义协议唤起 | 唤端能力支持库编写 —— 基于TypeScript 编写.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9904b2aa98bba5554535db0a262413523ae053ade4d60ab1284f070f54188f58" + }, + { + "sourceRelativePath": "TypeScript/TS 装饰器使用一览.md", + "targetRelativePath": "TypeScript/TS 装饰器使用一览.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Vue/Vue test方法.md", + "targetRelativePath": "Vue/Vue test方法.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2536b081603da7abb77ea29202de72f9aaa12bb01359387065f83869edc80ded" + }, + { + "sourceRelativePath": "Vue/VueBus 总线传参数.md", + "targetRelativePath": "Vue/VueBus 总线传参数.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "588899aa4c32acfb5984f238f92e5adadd650296f555bbd77cb9a4e511d5f189" + }, + { + "sourceRelativePath": "Vue/索引.md", + "targetRelativePath": "Vue/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8b4764662daf63083a4836174454ab5e0613dde39fc811395942540bc7f0ec7a" + }, + { + "sourceRelativePath": "Vue/Vue3渲染机制.md", + "targetRelativePath": "Vue/Vue3渲染机制.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9e05950902e1801417241f7608d612aaf973793a8b2d6e4297ff81ec0e80f2d2" + }, + { + "sourceRelativePath": "Vue/Vuex 基础与进阶使用.md", + "targetRelativePath": "Vue/Vuex 基础与进阶使用.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fc43865b74f76d9d129e4ae1eb3781181c4ea13b3a256948543b23dd1c39900e" + }, + { + "sourceRelativePath": "Vue/Vue 自定义钩子如何访问生命周期.md", + "targetRelativePath": "Vue/Vue 自定义钩子如何访问生命周期.md", + "recommendation": "skip_stub", + "action": "skipped", + "rationale": "only one H1 title and no article body" + }, + { + "sourceRelativePath": "Vue/Vue项目常用库.md", + "targetRelativePath": "Vue/Vue项目常用库.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4e0e67efd6000cdb25b363cfbe5d9a1376edb67a8b6be00676ab2a3d2f0103da" + }, + { + "sourceRelativePath": "Vue/Vue keep-alive 笔记.md", + "targetRelativePath": "Vue/Vue keep-alive 笔记.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "53237354fff16cdde7c28a31bf9e9bdc2f2b02250a023a8398937330512ae132" + }, + { + "sourceRelativePath": "Vue/前端路由 hash 与 history 差异.md", + "targetRelativePath": "Vue/前端路由 hash 与 history 差异.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f37755b838fd03fc1bd969a9595fb2351714c96408b3aaee4c7ae22480166417" + }, + { + "sourceRelativePath": "Vue/Pinia 学习笔记.md", + "targetRelativePath": "Vue/Pinia 学习笔记.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a0ed6f59afe164d066f229f40a2617d075f33139ea17069ddf9166a504361890" + }, + { + "sourceRelativePath": "Vue/Vue Router 浅析.md", + "targetRelativePath": "Vue/Vue Router 浅析.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4aec3f548999e8b44bba084d1f3ac8d7a753a021c2005537b27dda78a6c269af" + }, + { + "sourceRelativePath": "Vue/渲染函数 hyperscript.md", + "targetRelativePath": "Vue/渲染函数 hyperscript.md", + "recommendation": "skip_stub", + "action": "skipped", + "rationale": "only one H1 title and no article body" + }, + { + "sourceRelativePath": "Vue/组件自定义v-model以及自定义修饰符.md", + "targetRelativePath": "Vue/组件自定义v-model以及自定义修饰符.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "99926e91c9455d91649589f96dbe6343bb8f3f0fc7717b67fa59187b01bf1027" + }, + { + "sourceRelativePath": "Vue/Vue.set()和this.$set().md", + "targetRelativePath": "Vue/Vue.set()和this.$set().md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c85ce99b6860f570fc2c126ee40dd7ac2cd9998481ba24980675b1e24208f08d" + }, + { + "sourceRelativePath": "Vue/Vue 进阶使用.md", + "targetRelativePath": "Vue/Vue 进阶使用.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "712d611e4f174237048b05c147c03cc5f8988774cc2d6c6bdb65c032326100b8" + }, + { + "sourceRelativePath": "Vue/`$nextTick`深入探究.md", + "targetRelativePath": "Vue/`$nextTick`深入探究.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5cfa1001127ebc7b88a3711dfd3a9c2c583b50f345bbe50c7aa7c20e87e9d71b" + }, + { + "sourceRelativePath": "数据库/Redis 学习笔记.md", + "targetRelativePath": "数据库/Redis 学习笔记.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "30dae2c8713d1a4edfc735030c985d8cc6aba62c1e42e1eeea9014c7f064e813" + }, + { + "sourceRelativePath": "数据库/MySQL从入门到入院.md", + "targetRelativePath": "数据库/MySQL从入门到入院.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bba4c10d30b780a1832fda20751dfbfc0ec1c6776fada489fed1e6cede152ee9" + }, + { + "sourceRelativePath": "数据库/高并发常见性能表现评估指标.md", + "targetRelativePath": "数据库/高并发常见性能表现评估指标.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1e3252d2d9fad60ddc3b15f1fa3e97ef26dde241048246aae132fe1a388e2f18" + }, + { + "sourceRelativePath": "Rust/wasm-pack 集成至vite项目.md", + "targetRelativePath": "Rust/wasm-pack 集成至vite项目.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "外文翻译/Islands Architecture 孤岛架构.md", + "targetRelativePath": "外文翻译/Islands Architecture 孤岛架构.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9dde6da448734046f963045ab4229904e0b737e69cb865431141993fc397aae0" + }, + { + "sourceRelativePath": "外文翻译/居中一个 div 的 N 种方法.md", + "targetRelativePath": "外文翻译/居中一个 div 的 N 种方法.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5a3b166650c8ae47b5ce6b9042ef2f41fdce23d7b91e2c2de462a9d259630d42" + }, + { + "sourceRelativePath": "外文翻译/INP (Interaction to Next Paint) 与用户体验真的有关系吗?.md", + "targetRelativePath": "外文翻译/INP (Interaction to Next Paint) 与用户体验真的有关系吗?.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f58d3f83dc4d8adf3bd160937a2a42ec5ef0f5e3cd343e829bb2d6b3e64d8bdb" + }, + { + "sourceRelativePath": "外文翻译/用于调试和分析的 5 大 Node.js 工具.md", + "targetRelativePath": "外文翻译/用于调试和分析的 5 大 Node.js 工具.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "be54c6aa64790f363a1fb746e23971ece563799cb8c5230c49b7808f0915570c" + }, + { + "sourceRelativePath": "外文翻译/URL 设计最佳实践.md", + "targetRelativePath": "外文翻译/URL 设计最佳实践.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8e303f17479a79ff2da002bc9fec53e106adee9af0bc4e4025b0ee988c829b13" + }, + { + "sourceRelativePath": "外文翻译/ECMAScript 装饰器的 10 年.md", + "targetRelativePath": "外文翻译/ECMAScript 装饰器的 10 年.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "18a744a3db7b1f4141be16cc8909e5235ca65b17ef526eb2ef5cd49f4c8c3897" + }, + { + "sourceRelativePath": "外文翻译/为什么 RSC 才是正确答案?.md", + "targetRelativePath": "外文翻译/为什么 RSC 才是正确答案?.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f933871eca1046b1a6eba7b520b9db40d1ea20c4a914b56bc5956bfa06562854" + }, + { + "sourceRelativePath": "外文翻译/什么是会话固定.md", + "targetRelativePath": "外文翻译/什么是会话固定.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b21c00e0805f2dc8074de7e887add760e99dcc55d582eab11cdfc2d2cb2efcd9" + }, + { + "sourceRelativePath": "外文翻译/每个开发人员都应该知道的五大Node.js功能.md", + "targetRelativePath": "外文翻译/每个开发人员都应该知道的五大Node.js功能.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7515eb9d1709637f4230d47c67f3e91c6f246ef5b7182f43c647673fe49623a5" + }, + { + "sourceRelativePath": "外文翻译/交互时导入.md", + "targetRelativePath": "外文翻译/交互时导入.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e59ac3057e75564ffd9d11fd4712ed9deff9d462d0d39aac93332914fe445204" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "targetRelativePath": "学习路径/JavaScript完整指南.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5a4594b1c4bafb735965de8a545a653a5929b2f27749af5e255f80bdf70a5ad2" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "targetRelativePath": "学习路径/Vue全栈路线.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1bd2cee35c8099d1ee166f3d58979c6910f0ffa1559758bae63154a44f3934bc" + }, + { + "sourceRelativePath": "面试准备/README.md", + "targetRelativePath": "面试准备/README.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c55d454fce4ea73f3005f8ccd5f6a5c04150e7335f3ef07d5a8648275653c9ab" + }, + { + "sourceRelativePath": "前端杂文/CommitMessage的Git格式规范.md", + "targetRelativePath": "前端杂文/CommitMessage的Git格式规范.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "前端杂文/Google 核心 Web 指标.md", + "targetRelativePath": "前端杂文/Google 核心 Web 指标.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "前端杂文/RPC 笔记.md", + "targetRelativePath": "前端杂文/RPC 笔记.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "前端杂文/前端应用的静态测试vs单元测试vs集成测试vsE2E(端到端)测试.md", + "targetRelativePath": "前端杂文/前端应用的静态测试vs单元测试vs集成测试vsE2E(端到端)测试.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3350af5816eb153d05eb60c40f0ac13e62cdea3821eb0839759121acc8106493" + }, + { + "sourceRelativePath": "前端杂文/强缓存和协商缓存.md", + "targetRelativePath": "前端杂文/强缓存和协商缓存.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "前端杂文/前端抓包.md", + "targetRelativePath": "前端杂文/前端抓包.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "前端杂文/CORS.md", + "targetRelativePath": "前端杂文/CORS.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "前端杂文/同构渲染:SSR (Server-Side Rendering) 与CSH (Client-Side Hydration).md", + "targetRelativePath": "前端杂文/同构渲染:SSR (Server-Side Rendering) 与CSH (Client-Side Hydration).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "前端杂文/BFF 模式 (Backend For Frontend).md", + "targetRelativePath": "前端杂文/BFF 模式 (Backend For Frontend).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "HTML/HTML知识点汇总.md", + "targetRelativePath": "HTML/HTML知识点汇总.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "HTML/HTML 高频.md", + "targetRelativePath": "八股文/HTML 高频.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "HTML/button标签和div模拟按钮的区别.md", + "targetRelativePath": "HTML/button标签和div模拟按钮的区别.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "HTML/Web Component.md", + "targetRelativePath": "HTML/Web Component.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6e58b82ceca9ac73db3ffe5df9cd40453171b9c0f3bd78afe0564bf2309889b0" + }, + { + "sourceRelativePath": "Agent/综合题库.md", + "targetRelativePath": "Agent/综合题库.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bca3dc5fdb4c4dcc9ca754913a120c6e7f3455713fd4b73f456a1bac2c97b3b7" + }, + { + "sourceRelativePath": "面经/星网锐捷面经.md", + "targetRelativePath": "面经/星网锐捷面经.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2df8e74a4ed11033064b08303bef9666ca2e1b48d41f7d1045953366456a2ca2" + }, + { + "sourceRelativePath": "面经/未命名.md", + "targetRelativePath": "面经/未命名.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "面经/快手面经.md", + "targetRelativePath": "面经/快手面经.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "481d9f4ce013c5ef0de228e011f982ff45830d5cafcfa90fd3c3a9d25bd59af7" + }, + { + "sourceRelativePath": "面经/美团面经.md", + "targetRelativePath": "面经/美团面经.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "27c89d009620aae3d4bc02115502942906b993c29b6f23e5d36bfae9a198b524" + }, + { + "sourceRelativePath": "面经/哔哩哔哩面经.md", + "targetRelativePath": "面经/哔哩哔哩面经.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b8643fdfee6c375c32854163cb599370c87041ef04197967f2ae03333f10a3b4" + }, + { + "sourceRelativePath": "面经/朴朴面经.md", + "targetRelativePath": "面经/朴朴面经.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b5e3921f4dbc12bbf0f93f1326c889c21628c8ad45086d00c4254a9c4d48ed23" + }, + { + "sourceRelativePath": "翻译/「译」这种模式将破坏你React应用的TS性能.md", + "targetRelativePath": "翻译/「译」这种模式将破坏你React应用的TS性能.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2a407631bdf3d696988caa491e1ea45aa826355289cad0fb5dc1bf90935dcf93" + }, + { + "sourceRelativePath": "翻译/「译」如何为应用选择最佳渲染策略.md", + "targetRelativePath": "翻译/「译」如何为应用选择最佳渲染策略.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fc738793f6546fef270ad4e8178237b6faeb2bc87300793fdce7f54c28316f1d" + }, + { + "sourceRelativePath": "翻译/「译」谷歌在索引过程中如何处理 JavaScript.md", + "targetRelativePath": "翻译/「译」谷歌在索引过程中如何处理 JavaScript.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9660770322e58ce0c9951e62f3c77a7b2cec58837b67e10be3da51dac4b5732b" + }, + { + "sourceRelativePath": "翻译/「译」为 Rust 及所有语言优化 WebAssembly.md", + "targetRelativePath": "翻译/「译」为 Rust 及所有语言优化 WebAssembly.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "31b94db262401aa4537f73c9c7652cfafc4e9b486c5660b058c9a7574cbb4b40" + }, + { + "sourceRelativePath": "翻译/「译」解析 JavaScript 中的循环依赖.md", + "targetRelativePath": "翻译/「译」解析 JavaScript 中的循环依赖.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3103c053564d141c6f0b9dca045fc87e25e90defda348acc9724452c5f3ccbfa" + }, + { + "sourceRelativePath": "翻译/「译」设置项目.md", + "targetRelativePath": "翻译/「译」设置项目.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5431173b3fdb5b26c3baf9c6d61d788431a4682e6957fab910fabefda4f51799" + }, + { + "sourceRelativePath": "翻译/PRPL 模式.md", + "targetRelativePath": "翻译/PRPL 模式.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2c1d2cc68125273259ca0c38f10591a7050f82dfb74b6b18d44c59debbf86e72" + }, + { + "sourceRelativePath": "翻译/「译」SolidStart 1.0:未来框架的形态.md", + "targetRelativePath": "翻译/「译」SolidStart 1.0:未来框架的形态.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5170bff7eb0ab6e8488eff1f1ffeafc21847636bff054aff219690af4af3fba4" + }, + { + "sourceRelativePath": "翻译/「译」不要将 DTO 传递给用户界面组件.md", + "targetRelativePath": "翻译/「译」不要将 DTO 传递给用户界面组件.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "af70c911364b941285924584b7bc7aa775b992ffd6a916452e38fc35283b87ce" + }, + { + "sourceRelativePath": "翻译/命名在编程中的重要性.md", + "targetRelativePath": "翻译/命名在编程中的重要性.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "917c7f59528cf6a9ad3944c6730a27ae44f5cb7a525d7425dd815aac2a254172" + }, + { + "sourceRelativePath": "翻译/「译」如何编写 React 应用程序的样式.md", + "targetRelativePath": "翻译/「译」如何编写 React 应用程序的样式.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9b9d04e0de00c43ced3aae828bc6013d9abe00417b8fa1a97a604e86cf240acf" + }, + { + "sourceRelativePath": "翻译/「译」使用 Rust 编程 WebAssembly 第一部分:从 WAT 到 WASM 集成.md", + "targetRelativePath": "翻译/「译」使用 Rust 编程 WebAssembly 第一部分:从 WAT 到 WASM 集成.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b3e9e27f8656d36e89e7cfe65c165fe2d24f215d94025170ae8219c7ba7e3523" + }, + { + "sourceRelativePath": "翻译/「译」JavaScript 舍入误差(在金融应用程序中).md", + "targetRelativePath": "翻译/「译」JavaScript 舍入误差(在金融应用程序中).md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "cfde998a7124e8a51d36e4d9d00dbaa60d80a3f416322fe1cf9af1ea6ee2abbc" + }, + { + "sourceRelativePath": "翻译/「译」如何写出更好的Typescript代码.md", + "targetRelativePath": "翻译/「译」如何写出更好的Typescript代码.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b0380f3d985db21d36ab071cb0476398576c7a51ab27742184d4396ccdbae8c3" + }, + { + "sourceRelativePath": "翻译/「译」现在如何使用容器查询.md", + "targetRelativePath": "翻译/「译」现在如何使用容器查询.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "658c1b068dc6987d102c2ced590b82f9ca3a701fddf0fef15d5aa90a3154ba33" + }, + { + "sourceRelativePath": "翻译/在企业环境中正确使用 Node.js 的九大原.md", + "targetRelativePath": "翻译/在企业环境中正确使用 Node.js 的九大原.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e9a4af383c45195b876d54b7ac875116ea429f0b5cd8bf39e7818e4467653aa4" + }, + { + "sourceRelativePath": "翻译/「译」从领域开始.md", + "targetRelativePath": "翻译/「译」从领域开始.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fdef94056ef35a62e2ffc1426884f8ebd0360f6198d400762bf693eae630e4e0" + }, + { + "sourceRelativePath": "翻译/「译」2024 年的 5 个 JavaScript 安全最佳实践.md", + "targetRelativePath": "翻译/「译」2024 年的 5 个 JavaScript 安全最佳实践.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2e5dfca1d74fac3d42e4837b142f637aada13c3d01a2740f19c670719b52fffa" + }, + { + "sourceRelativePath": "翻译/「Astro 5.0 」Astro新功能概述.md", + "targetRelativePath": "翻译/「Astro 5.0 」Astro新功能概述.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4ceda59c7dc10070d33d12a0572900b12b12aab78c21a181d859cbd59737a182" + }, + { + "sourceRelativePath": "翻译/Express. js v5.0中的新增功能.md", + "targetRelativePath": "翻译/Express. js v5.0中的新增功能.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "676e9e395324bb3dd58a0aa1e9af011388c020bd500ac64cfdf305d526517049" + }, + { + "sourceRelativePath": "翻译/「译」React 服务器组件 (RSCs) 的深入分析.md", + "targetRelativePath": "翻译/「译」React 服务器组件 (RSCs) 的深入分析.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ce8beecc218d7aee893b9b323e1acd7588516ccb3ed22429f5734ac90a2c585b" + }, + { + "sourceRelativePath": "翻译/「译」选择技术栈.md", + "targetRelativePath": "翻译/「译」选择技术栈.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1ce757ab7ff4c214496b0995d9685d4a811ffea3ae9f3a206f8d0c966b2144a6" + }, + { + "sourceRelativePath": "翻译/「译」如何初始化前端项目.md", + "targetRelativePath": "翻译/「译」设置项目.md", + "recommendation": "skip_source_duplicate", + "action": "skipped", + "rationale": "same source article body as 翻译/「译」设置项目.md after ignoring first H1" + }, + { + "sourceRelativePath": "翻译/「译」使用 CSS 解析器扩展来填充 CSS(提案).md", + "targetRelativePath": "翻译/「译」使用 CSS 解析器扩展来填充 CSS(提案).md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "48cc8bfd2d280bbe2cc4b051560829b8288602991c6417afefc13f6ed457cb6c" + }, + { + "sourceRelativePath": "翻译/「译」从简单到复杂 —— 软件四象限.md", + "targetRelativePath": "翻译/「译」从简单到复杂 —— 软件四象限.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fdeef0ce471a71413542345ff3a5ea24fa3bbdc36aee76f6d9d067b588579e81" + }, + { + "sourceRelativePath": "翻译/「译」面向 JavaScript 开发人员的 TSConfig 简介.md", + "targetRelativePath": "翻译/「译」面向 JavaScript 开发人员的 TSConfig 简介.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "437ab289e3dab669ee8094dc7e528d6d5c8a947552c104d2d0e4e1df326577d0" + }, + { + "sourceRelativePath": "翻译/「译」如何从头开始构建机器人检测脚本:分步指南.md", + "targetRelativePath": "翻译/「译」如何从头开始构建机器人检测脚本:分步指南.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2ba8c2f56e2052b6b8dd327b4983c2ce80f994f85f3101d2dc4d62c36c206452" + }, + { + "sourceRelativePath": "翻译/编写 Dockerfile:从入门到精通.md", + "targetRelativePath": "翻译/编写 Dockerfile:从入门到精通.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d42df39ff434ed39754ff7d4af9266985bfff4582a5107b0fb8698f1872c8608" + }, + { + "sourceRelativePath": "翻译/Claude 4 重磅来袭:你需要了解的一切.md", + "targetRelativePath": "翻译/Claude 4 重磅来袭:你需要了解的一切.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9a07044aa65a8003ec222da82cae59ef23d8d6fcd1a2f0afeac7df0231d23b05" + }, + { + "sourceRelativePath": "翻译/「译」关于优化 LCP 的常见误解.md", + "targetRelativePath": "翻译/「译」关于优化 LCP 的常见误解.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "64e00b44e1cd71738950f729137cd7f040888907ba55d70fc18fb55367c14737" + }, + { + "sourceRelativePath": "AI应用开发/AI应用开发面试题.md", + "targetRelativePath": "AI应用开发/AI应用开发面试题.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "86489339e1be494b707308453ed8acf97b9919d7ee81f237ad1f058362798645" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "targetRelativePath": "校招/知识大纲.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "da4faa5ce31ac22a7d7c6aa10968b39202e6372299f80c65e1797a49ca90bde3" + }, + { + "sourceRelativePath": "校招/2022年终总结.md", + "targetRelativePath": "软文/2022年终总结.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "校招/2022年中总结.md", + "targetRelativePath": "软文/2022年中总结.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "校招/校招日志 校招经验总结.md", + "targetRelativePath": "软文/校招日志 校招经验总结.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "校招/offer,三方,两方,毁约 这些你需要知道的事.md", + "targetRelativePath": "软文/offer,三方,两方,毁约 这些你需要知道的事.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "校招/2023年中总结.md", + "targetRelativePath": "校招/2023年中总结.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "计算机网络/Nginx:高性能的Web服务器.md", + "targetRelativePath": "计算机科学/计算机网络/Nginx:高性能的Web服务器.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "targetRelativePath": "计算机网络/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f793a7e1dec06e6ce791442a89f92be6479203417eb5fb6b0d1d5d80e8458799" + }, + { + "sourceRelativePath": "计算机网络/浏览器缓存机制-请求头.md", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-请求头.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/前端存储方案一览.md", + "targetRelativePath": "计算机科学/计算机网络/前端存储方案一览.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/RESTful 下请求方法的幂等性.md", + "targetRelativePath": "计算机科学/计算机网络/RESTful 下请求方法的幂等性.md", + "recommendation": "update_existing", + "action": "updated", + "rationale": "fixes RESTfull title typo", + "resultHash": "872575990ea72480947c673ff432f934b00b8a102b5680610e50429edae0a7e3" + }, + { + "sourceRelativePath": "计算机网络/WebSocket.md", + "targetRelativePath": "计算机科学/计算机网络/WebSocket.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/OpenResty:更灵活的Web服务器.md", + "targetRelativePath": "计算机科学/计算机网络/OpenResty:更灵活的Web服务器.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/WAF 网络应用防火墙.md", + "targetRelativePath": "计算机科学/计算机网络/WAF 网络应用防火墙.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/浏览器缓存机制-缓存位置.md", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-缓存位置.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/CDN 内容分发网络.md", + "targetRelativePath": "计算机科学/计算机网络/CDN 内容分发网络.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Webpack/Webpack 配置及规则.md", + "targetRelativePath": "Webpack/Webpack 配置及规则.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Webpack/Webpack 插件开发实践.md", + "targetRelativePath": "Webpack/Webpack 插件开发实践.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Webpack/Webpack 性能优化.md", + "targetRelativePath": "Webpack/Webpack 性能优化.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Webpack/Webpack 图像处理.md", + "targetRelativePath": "Webpack/Webpack 图像处理.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Webpack/Webpack 工作流程.md", + "targetRelativePath": "Webpack/Webpack 工作流程.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Webpack/Webpack 学习指北.md", + "targetRelativePath": "Webpack/Webpack 学习指北.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Webpack/Webpack 链式调用模型.md", + "targetRelativePath": "Webpack/Webpack 链式调用模型.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Webpack/Webpack Loader 实践.md", + "targetRelativePath": "Webpack/Webpack Loader 实践.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Browser/Web Components 中使用生命周期回调函数.md", + "targetRelativePath": "Browser/Web Components 中使用生命周期回调函数.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "55acdedadb5b3bc2bd113cf251eac9389b31872edc26f4052555dd7b97229fb3" + }, + { + "sourceRelativePath": "Browser/Web浏览器滚动方案一览| rAF等.md", + "targetRelativePath": "Browser/Web浏览器滚动方案一览| rAF等.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "144a66d16b2fecaa70cdb8d37c56d71ba2b7e73acccdeb5a05c2f4eee36171e8" + }, + { + "sourceRelativePath": "Browser/索引.md", + "targetRelativePath": "Browser/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "85794f9515a52a30b204def3f19c7acfbfc5b52a20db61f350b4362ef905dc64" + }, + { + "sourceRelativePath": "Browser/CORB 兼容性和影响.md", + "targetRelativePath": "浏览器原理/CORB 兼容性和影响.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Browser/浏览器插件开发框架:WXT.md", + "targetRelativePath": "Browser/浏览器插件开发框架:WXT.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "73196488d08988607a985bde9d45d85e2b0a9431f4d568ccd7a6afe098fdc130" + }, + { + "sourceRelativePath": "Browser/CORB 应对策略.md", + "targetRelativePath": "浏览器原理/CORB 应对策略.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Browser/基于 StorageEvent的跨tab事件传输方案.md", + "targetRelativePath": "Browser/基于 StorageEvent的跨tab事件传输方案.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d0266c0246a94adf130d8ff2f7b3546ee72955cb7ad4f71b21591461753a85a1" + }, + { + "sourceRelativePath": "Browser/在现代应用中使用 localStorage 的全面指南.md", + "targetRelativePath": "Browser/在现代应用中使用 localStorage 的全面指南.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c3d051496f4dd877375c96858e0ec63ff02a4674d873c0648f1c5d21e0e152e1" + }, + { + "sourceRelativePath": "Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "targetRelativePath": "Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4211e027fd296af8dd7eb0281d0459d0148f35015d4c2c4a92cb39b620e25d3e" + }, + { + "sourceRelativePath": "Browser/CORB 策略.md", + "targetRelativePath": "浏览器原理/CORB 策略.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Vite/静态资源处理.md", + "targetRelativePath": "Vite/静态资源处理.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "Vite/探索 Rolldown.md", + "targetRelativePath": "Vite/探索 Rolldown.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9c3e19adbf10fcf601fd7e46239131f4839325646b46ea996c13d2cbff3922fe" + }, + { + "sourceRelativePath": "Vite/项目启动配置.md", + "targetRelativePath": "Vite/项目启动配置.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "Vite/构建Vite知识体系-项目性能优化.md", + "targetRelativePath": "Vite/构建Vite知识体系-项目性能优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "83fdf0d5052028cbe94f198b365ef98eaa5aaa3e95c5bb819dec5e1c80983f1f" + }, + { + "sourceRelativePath": "Vite/Rollup 基本概念、使用和插件机制.md", + "targetRelativePath": "Vite/Rollup 基本概念、使用和插件机制.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c87d3aaffe624a17657053f651e90195b30d078e44d9ed86d13983627efe5b56" + }, + { + "sourceRelativePath": "Vite/项目 Lint 管理.md", + "targetRelativePath": "Vite/项目 Lint 管理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0ab35433cc0d06e6ba6e4be034d7c91de344f84235bf020a48bf62a6be6bc457" + }, + { + "sourceRelativePath": "Vite/Vite 小册笔记.md", + "targetRelativePath": "Vite/Vite 小册笔记.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "81221cd128d6d8c4e8c3a423ab3b74fba69b02866cbac8b684dd26132e33bddf" + }, + { + "sourceRelativePath": "Vite/Vite SSR 方案.md", + "targetRelativePath": "Vite/Vite SSR 方案.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2198b0b06adfac2cfd91c5256afa7892ff8d0cbd00e9cad19bd9e0f440d58ac0" + }, + { + "sourceRelativePath": "Vite/HMR API 及其原理.md", + "targetRelativePath": "Vite/HMR API 及其原理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "37e006689c8bd0369eb9353dff5ec6b4b4c92b8b6f69082bc4696464ea4d09c5" + }, + { + "sourceRelativePath": "Vite/Vite 可用项目模版.md", + "targetRelativePath": "Vite/Vite 可用项目模版.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fef85d38a2b845913195be5b372daa94a36eace702509751a127e7e1cc1cb8ea" + }, + { + "sourceRelativePath": "产品/广告.md", + "targetRelativePath": "产品/广告.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "aaf50a8f6ce064699d9ed3f6d83f620330e25477b1f5880d263d22c007b40950" + }, + { + "sourceRelativePath": "产品/产品思维.md", + "targetRelativePath": "产品/产品思维.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7de469144ab00e6d5b2dd49f33f66671c20f9115a4ac780763fe82190f3ad00e" + }, + { + "sourceRelativePath": "产品/「241018」Money Hack(上) 逃离浅滩,做空这个时代.md", + "targetRelativePath": "产品/「241018」Money Hack(上) 逃离浅滩,做空这个时代.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "af9d15a0d31e912eba5d40d8ec641d3bf436e0de737355477bb4365676568903" + }, + { + "sourceRelativePath": "产品/产品经理基础知识文档.md", + "targetRelativePath": "产品/产品经理基础知识文档.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "151d947727acb60ae10f36d90dfb36f573bfd5251d149adad13f8d9ae0586dfa" + }, + { + "sourceRelativePath": "产品/名称解释.md", + "targetRelativePath": "产品/名称解释.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b99b8b97c74e0156c3665cd36901295dc24c756dcf2c7aefb11e09d24329b122" + }, + { + "sourceRelativePath": "产品/利率.md", + "targetRelativePath": "产品/利率.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "55a17fd21ee95e9bbe60cfda75f8fa282052bf93998fc5237db88a6e58f7a16d" + }, + { + "sourceRelativePath": "MySQL/019-too-many-indexes.md", + "targetRelativePath": "MySQL/019-too-many-indexes.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "25521a04c8cdd64418d7e4d49d4a84b141b82b98a84433465345c2a0f3017a45" + }, + { + "sourceRelativePath": "MySQL/018-index-effect-troubleshooting.md", + "targetRelativePath": "MySQL/018-index-effect-troubleshooting.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2cb56116990fd23b54a2b502539850cf9747bfa3655898060faed2805839b05a" + }, + { + "sourceRelativePath": "MySQL/068-mysql-performance-optimization.md", + "targetRelativePath": "MySQL/068-mysql-performance-optimization.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7c62292bd565a3397f0f4e27c15203c669bbbfa2dbb47aa152f343149a144784" + }, + { + "sourceRelativePath": "MySQL/013-index-back-to-table.md", + "targetRelativePath": "MySQL/013-index-back-to-table.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f5daf7e3bb0b89dbd96d186a0d2dbbd8f9dbb689cf213d431857e8f5be1664c9" + }, + { + "sourceRelativePath": "MySQL/031-lock-types.md", + "targetRelativePath": "MySQL/031-lock-types.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ebc953687ab7213a134de25cb3b1a1f7f9ffd83aa80af39418b5ed4d56eed251" + }, + { + "sourceRelativePath": "MySQL/047-log-buffer.md", + "targetRelativePath": "MySQL/047-log-buffer.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4c2d29d77b1e2d04bc1862e981fb5202cf9dd4a119201597bb2406de7a08700e" + }, + { + "sourceRelativePath": "MySQL/054-text-type-limits.md", + "targetRelativePath": "MySQL/054-text-type-limits.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bbeaa868bb0eba6675e85a64afd05621b2362bc7b762c897a58b75ed63272498" + }, + { + "sourceRelativePath": "MySQL/014-leftmost-prefix-rule.md", + "targetRelativePath": "MySQL/014-leftmost-prefix-rule.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "050a1d9eec4060fc661da84d8354de54a9f9a10dc090d8c847371e97b3e10bd3" + }, + { + "sourceRelativePath": "MySQL/075-redo-log-insert-records.md", + "targetRelativePath": "MySQL/075-redo-log-insert-records.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1e9d413edd237ab9cbf06ebc43774552cad2fa0cdb6f3a63a9fdbab40b2b597d" + }, + { + "sourceRelativePath": "MySQL/063-exists-vs-in.md", + "targetRelativePath": "MySQL/063-exists-vs-in.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "347a3af7573fcf5f1b27720acbd4168469beafe1832de1a18f621c2e27cae04c" + }, + { + "sourceRelativePath": "MySQL/040-read-write-splitting.md", + "targetRelativePath": "MySQL/040-read-write-splitting.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6551cb93123137d5413910831e4f7ed2342da3db48d62e2c9c27625edccee234" + }, + { + "sourceRelativePath": "MySQL/058-database-cursor.md", + "targetRelativePath": "MySQL/058-database-cursor.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9f66b1c0033f07bfbffa8cf35f62c538ffae129ff5479802150810fbda6466c0" + }, + { + "sourceRelativePath": "MySQL/023-mysql-transaction-implementation.md", + "targetRelativePath": "MySQL/023-mysql-transaction-implementation.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5e95adbb977913b8310056db26eb710d314166b71454fd3b4f255a059e23b971" + }, + { + "sourceRelativePath": "MySQL/004-mysql-order-by-sorting.md", + "targetRelativePath": "MySQL/004-mysql-order-by-sorting.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "44fbc0cab4375383630020a4ebe302bef40088dc4fce4a019381f24b195aeff3" + }, + { + "sourceRelativePath": "MySQL/041-replication.md", + "targetRelativePath": "MySQL/041-replication.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "521311340ec157219ee24db18ea0cb2a6d976f504171f68473f0757eb592dec4" + }, + { + "sourceRelativePath": "MySQL/059-large-binary-content-storage.md", + "targetRelativePath": "MySQL/059-large-binary-content-storage.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "dbd83f4fa76f96337a9d410e49db82b703e3ac2dd05ec19db7e1b24d066eead1" + }, + { + "sourceRelativePath": "MySQL/001-database-sharding.md", + "targetRelativePath": "MySQL/001-database-sharding.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b8287a0655af00c7956b1af933505a06f42a143c67f06051c1824b036c48f17c" + }, + { + "sourceRelativePath": "MySQL/026-secondary-index-mvcc.md", + "targetRelativePath": "MySQL/026-secondary-index-mvcc.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1c7626104f343cc6533bf5e9e571465e1c8c0622907b14b90ce5740496e0ecfb" + }, + { + "sourceRelativePath": "MySQL/030-dirty-nonrepeatable-phantom-read.md", + "targetRelativePath": "MySQL/030-dirty-nonrepeatable-phantom-read.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3a0acd8b1e62d1258aee1c5a2fba8372b24d7f298a0fc8bb832e01edfcbde4ed" + }, + { + "sourceRelativePath": "MySQL/048-avoid-multi-table-joins.md", + "targetRelativePath": "MySQL/048-avoid-multi-table-joins.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d40482bc643abd1d968efb772428e6c4fe35fa6d1f3dc01af034a6d6a96c1bfe" + }, + { + "sourceRelativePath": "MySQL/077-maximum-table-columns.md", + "targetRelativePath": "MySQL/077-maximum-table-columns.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bdbf51b7a531107eb6bc688bf58c2a6643d0e6ca04eed3e78192c3f966ddfb60" + }, + { + "sourceRelativePath": "MySQL/064-write-ahead-logging.md", + "targetRelativePath": "MySQL/064-write-ahead-logging.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d9f6d7ca9c229524cbd2cbff73c992088b06aa00b8d8d9e01c22d4e8ec380dfd" + }, + { + "sourceRelativePath": "MySQL/006-mysql-index-types.md", + "targetRelativePath": "MySQL/006-mysql-index-types.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7b58d2cc5209850cc1a4671b69c6c3c4eeb49bdae959cf0a06f671fc29818f97" + }, + { + "sourceRelativePath": "MySQL/079-multithreaded-data-warehouse-sync.md", + "targetRelativePath": "MySQL/079-multithreaded-data-warehouse-sync.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e17485f506930ee6e75a4e617eeed45bd8ee2a555833187e1dc3c0964d54569d" + }, + { + "sourceRelativePath": "MySQL/032-optimistic-pessimistic-lock.md", + "targetRelativePath": "MySQL/032-optimistic-pessimistic-lock.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d59666fc7a40d329549f648db4af750d7827cc5a650bf0b523afb78649fd6f2d" + }, + { + "sourceRelativePath": "MySQL/050-delete-drop-truncate.md", + "targetRelativePath": "MySQL/050-delete-drop-truncate.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3fa8aea19387237c61b761f030ef4c572b626d605b9395dd8fd7ae4471d770bd" + }, + { + "sourceRelativePath": "MySQL/046-doublewrite-buffer.md", + "targetRelativePath": "MySQL/046-doublewrite-buffer.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "39c10f7570e9259789767e55afa9f312b9c46a8213da4fdd872c99d1ba8418d4" + }, + { + "sourceRelativePath": "MySQL/028-transaction-isolation-levels.md", + "targetRelativePath": "MySQL/028-transaction-isolation-levels.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "12e1d68a642a27899077519546ff216b353852df93a30b8f7e4cbaedd2052cd4" + }, + { + "sourceRelativePath": "MySQL/067-zero-downtime-database-migration.md", + "targetRelativePath": "MySQL/067-zero-downtime-database-migration.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "94843dee0bf2322c67cf79e9dfdb3b5f682bd233aed985ac68c68b90f14551e7" + }, + { + "sourceRelativePath": "MySQL/020-bplus-tree-query-process.md", + "targetRelativePath": "MySQL/020-bplus-tree-query-process.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7611465e8aef158e44db0041deb6188df9c94a5e9b7e186f52512ca803e80b60" + }, + { + "sourceRelativePath": "MySQL/071-logical-vs-physical-foreign-key.md", + "targetRelativePath": "MySQL/071-logical-vs-physical-foreign-key.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c2a3eb6ed09921e0d98cdbf6ce8fa7c865cab251b600e5b86420e19757a030d7" + }, + { + "sourceRelativePath": "MySQL/076-sql-logical-execution-order.md", + "targetRelativePath": "MySQL/076-sql-logical-execution-order.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4c9c0405fba26ca17eac3404d0b4cbc1257906441d6917ec685d28453c26ee70" + }, + { + "sourceRelativePath": "MySQL/003-normalization-denormalization.md", + "targetRelativePath": "MySQL/003-normalization-denormalization.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "dc5c7e24ff1663edb0857ffc4edb5a6ec65668ecfa641d38445b347228b07e18" + }, + { + "sourceRelativePath": "MySQL/035-count-differences.md", + "targetRelativePath": "MySQL/035-count-differences.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d6fdd07c377ed7814ffffd2deda6d4de05208f5f94ead99500bdba1a193ea286" + }, + { + "sourceRelativePath": "MySQL/036-int-display-width.md", + "targetRelativePath": "MySQL/036-int-display-width.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "333c461995a92bff06fed5d628d3488bafaca4cab7bc4ec4360b10c9a55c13a8" + }, + { + "sourceRelativePath": "MySQL/016-index-condition-pushdown.md", + "targetRelativePath": "MySQL/016-index-condition-pushdown.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "006b3ce6d552d504da77546f7bee0a5891cee5a652cf208e3b42bd1534fc30ff" + }, + { + "sourceRelativePath": "MySQL/025-mvcc.md", + "targetRelativePath": "MySQL/025-mvcc.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0613c206e6aaf97a662f22060817e2bf841092ddb4c6c33919355b34848bea71" + }, + { + "sourceRelativePath": "MySQL/065-production-isolation-level-choice.md", + "targetRelativePath": "MySQL/065-production-isolation-level-choice.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0d0f16ec187b6e827cb9d3f4b623c7a88d0ff8949cf4743b689807accf92fd18" + }, + { + "sourceRelativePath": "MySQL/062-when-not-to-create-index.md", + "targetRelativePath": "MySQL/062-when-not-to-create-index.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f88d78c8f9b14932038e0dc96494b843092104315f183871beebbf362cfef332" + }, + { + "sourceRelativePath": "MySQL/073-three-level-bplus-tree-capacity.md", + "targetRelativePath": "MySQL/073-three-level-bplus-tree-capacity.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "74858956dbe79137903b1afbec2c88323476efe98c2d70c436a9ce19d609f937" + }, + { + "sourceRelativePath": "MySQL/037-varchar-vs-char.md", + "targetRelativePath": "MySQL/037-varchar-vs-char.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d7dae866f71c425ec302c8381abbbe99f88df50bb81e2d970e387d558177eaa3" + }, + { + "sourceRelativePath": "MySQL/069-query-optimizer-plan-selection.md", + "targetRelativePath": "MySQL/069-query-optimizer-plan-selection.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "62997f0aaf7c343706702b47d372408f33224392cc0d47f7d9aad4675f2a9743" + }, + { + "sourceRelativePath": "MySQL/README.md", + "targetRelativePath": "MySQL/README.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8e005fbf1acfad1ca2c9843272832da35398418fba9fdf60a33d85e8673e41fd" + }, + { + "sourceRelativePath": "MySQL/034-explain-query-analysis.md", + "targetRelativePath": "MySQL/034-explain-query-analysis.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7512706054d37a6a8574d3a67fe810434d2042af0813aadc0205f60da74f645b" + }, + { + "sourceRelativePath": "MySQL/042-replication-lag.md", + "targetRelativePath": "MySQL/042-replication-lag.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1f6038037809b7a1f74327b32a72fb810fd169a8ce0b6314e1917a4e98323430" + }, + { + "sourceRelativePath": "MySQL/017-index-design-notes.md", + "targetRelativePath": "MySQL/017-index-design-notes.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "45c6074f9981ba2221d36ac91e2884bbc34cfcb7fe37ba3e6f2f60fdda6a7867" + }, + { + "sourceRelativePath": "MySQL/024-long-running-transactions.md", + "targetRelativePath": "MySQL/024-long-running-transactions.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4a801f5920855d292298eea8fdae24f12bdde52012f3ba07e58206aaacf5ae38" + }, + { + "sourceRelativePath": "MySQL/056-money-data-type.md", + "targetRelativePath": "MySQL/056-money-data-type.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "378b41d30132316b51e6fc8d1ad34e276683dbd290007cd6f5cb33621e104178" + }, + { + "sourceRelativePath": "MySQL/057-database-view.md", + "targetRelativePath": "MySQL/057-database-view.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d19ee50621e7439caca6586265a1efc6cb4e01dadb016213d22e4517666482c0" + }, + { + "sourceRelativePath": "MySQL/072-innodb-binlog-two-phase-commit.md", + "targetRelativePath": "MySQL/072-innodb-binlog-two-phase-commit.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4ecfb650697506be36eadbb408b031535850ae69d4a3dcba8156ca6745d1e280" + }, + { + "sourceRelativePath": "MySQL/066-avoid-stored-procedures.md", + "targetRelativePath": "MySQL/066-avoid-stored-procedures.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "32c0c68f2a7b7cfc68e59a67f2db42cd510beb06e25e526cb149208b556f4c03" + }, + { + "sourceRelativePath": "MySQL/009-full-and-incremental-sync.md", + "targetRelativePath": "MySQL/009-full-and-incremental-sync.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f2821331d43fd01460774fba5a34fa5ec1f8bc869ced1ea8461bff321775234f" + }, + { + "sourceRelativePath": "MySQL/029-default-isolation-level.md", + "targetRelativePath": "MySQL/029-default-isolation-level.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a2632d4eaeac76ab87b4c6b8c37fda69e794cb02b36ea9a15aeae0bd172e01de" + }, + { + "sourceRelativePath": "MySQL/005-sql-execution-process.md", + "targetRelativePath": "MySQL/005-sql-execution-process.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "aa953b6d23fba950b089c411bc557016f293d4b9d2d251354a661adfd4b0fe02" + }, + { + "sourceRelativePath": "MySQL/074-table-design-checklist.md", + "targetRelativePath": "MySQL/074-table-design-checklist.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d2c6816dd9ba437d2f896162b88a53ed7a32c98c17d45237a0c851383dfef30b" + }, + { + "sourceRelativePath": "MySQL/052-datetime-vs-timestamp.md", + "targetRelativePath": "MySQL/052-datetime-vs-timestamp.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e78aa8a111c7e81b1e4a6410bf9f704d81743a1f733e00446c8a2a87f3bc8e95" + }, + { + "sourceRelativePath": "MySQL/010-cursor-pagination.md", + "targetRelativePath": "MySQL/010-cursor-pagination.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6b9dfd602f01e4d7eef9c9b938e9bced493f294cb2906221c2bba6c3ad19cfee" + }, + { + "sourceRelativePath": "MySQL/055-auto-increment-maximum.md", + "targetRelativePath": "MySQL/055-auto-increment-maximum.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fe11ba18458f48d16d7a19ad7d555d7dcc5067f7a7834b74ceab41b259bd7498" + }, + { + "sourceRelativePath": "MySQL/027-without-mvcc.md", + "targetRelativePath": "MySQL/027-without-mvcc.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "75f60357ad9a83caa0638d64113304fa5d93600855abd8a6ddf748f543cba9a4" + }, + { + "sourceRelativePath": "MySQL/045-buffer-pool-read-path.md", + "targetRelativePath": "MySQL/045-buffer-pool-read-path.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "90b6f914741916771b751177f0bc991a7a67d2963956217d19289a18c575fb70" + }, + { + "sourceRelativePath": "MySQL/038-sql-tuning.md", + "targetRelativePath": "MySQL/038-sql-tuning.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "28ca3f2d2efd37b407119482b09728faa7d370b6c45075339ba143106dc322f2" + }, + { + "sourceRelativePath": "MySQL/044-sharding-problems.md", + "targetRelativePath": "MySQL/044-sharding-problems.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1e6ba2d49b3e343954b130db7846ee88d17655edbdb40ccdaba6bcd7d6bce65a" + }, + { + "sourceRelativePath": "MySQL/039-avoid-single-point-failure.md", + "targetRelativePath": "MySQL/039-avoid-single-point-failure.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0213db10c9656eab7e35173b0ce1e0fd1a6e7352fc52686f30ef26c06b623d77" + }, + { + "sourceRelativePath": "MySQL/011-storage-engines.md", + "targetRelativePath": "MySQL/011-storage-engines.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3de664a162d8477410723d9a93972e3fa4c871c827f309191d4b3d4b3f12595b" + }, + { + "sourceRelativePath": "MySQL/021-why-bplus-tree-index.md", + "targetRelativePath": "MySQL/021-why-bplus-tree-index.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8e86ee08117267ed5a3f1d7c1af7df25df4e4458b4bfbed4491d64beb7b056af" + }, + { + "sourceRelativePath": "MySQL/007-change-buffer.md", + "targetRelativePath": "MySQL/007-change-buffer.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a6f484c03e30d8d556e037d88d5a75137383cac44bf9c41831447dfd47815b90" + }, + { + "sourceRelativePath": "MySQL/049-slow-sql-monitoring-optimization.md", + "targetRelativePath": "MySQL/049-slow-sql-monitoring-optimization.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "24bc8a8b54b0d723a50867f16d4d201bf7dd1213a0494080eeb17aeec10a76db" + }, + { + "sourceRelativePath": "MySQL/061-varchar-length-difference.md", + "targetRelativePath": "MySQL/061-varchar-length-difference.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "54f35ff6c30a2362d26397ae4fa7d5bc642d603ec250d2045c5389fb5cdf1213" + }, + { + "sourceRelativePath": "MySQL/012-clustered-and-secondary-index.md", + "targetRelativePath": "MySQL/012-clustered-and-secondary-index.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f39da7b005b34d651cbd61c752dde05058e728c915ea4c24f84f3e109ed632d3" + }, + { + "sourceRelativePath": "MySQL/015-covering-index.md", + "targetRelativePath": "MySQL/015-covering-index.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "36cbdf339b486a9edf59f363ca2568cccf0d81d9e8789d7c264e665989a77573" + }, + { + "sourceRelativePath": "MySQL/060-mysql-vs-oracle-advantages.md", + "targetRelativePath": "MySQL/060-mysql-vs-oracle-advantages.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a73d9e42a3de27662e74da9cd11eb1f818df6c71e229182e034b3cec6283efb1" + }, + { + "sourceRelativePath": "MySQL/022-mysql-logs-binlog-redo-undo.md", + "targetRelativePath": "MySQL/022-mysql-logs-binlog-redo-undo.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b3c3573a3de03e1679c3f87754de56a621de919af93b35c2895be7d6ed90f07b" + }, + { + "sourceRelativePath": "MySQL/033-deadlock-handling.md", + "targetRelativePath": "MySQL/033-deadlock-handling.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "18e5275651c62ecd0461d11daffa8759bfe20c79f6d68e813ac8274f9500528d" + }, + { + "sourceRelativePath": "MySQL/008-batch-insert.md", + "targetRelativePath": "MySQL/008-batch-insert.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "55bff050aa783d7b78611da1bcc8cd5c19d1b90a0988d9a8426d1fe99ccf3b55" + }, + { + "sourceRelativePath": "MySQL/070-logical-vs-physical-delete.md", + "targetRelativePath": "MySQL/070-logical-vs-physical-delete.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3d84eb9dfff2554b897556f225c3b8235846d00767b32a51b190dbbcec3a015a" + }, + { + "sourceRelativePath": "MySQL/078-change-data-capture.md", + "targetRelativePath": "MySQL/078-change-data-capture.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9ffcc2cc4b73300b3b6e950090796d596b36b29135d6abf370d89deca5dda81e" + }, + { + "sourceRelativePath": "MySQL/051-limit-offset-performance.md", + "targetRelativePath": "MySQL/051-limit-offset-performance.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0902caea73fc42f0a7c337cdc1b76ca97d604e52ae33d4bf49f4464695fab283" + }, + { + "sourceRelativePath": "MySQL/002-sql-join-on-where.md", + "targetRelativePath": "MySQL/002-sql-join-on-where.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8ada0f7985f020955708058dc295bfbbbd3c66679d50c0532e6036e3a0cbdaf0" + }, + { + "sourceRelativePath": "MySQL/053-common-mysql-functions.md", + "targetRelativePath": "MySQL/053-common-mysql-functions.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "cba3dedba829321385d15c19d6a086e9bd9071e07f9fe26da32021823b3f2eb7" + }, + { + "sourceRelativePath": "MySQL/043-sharding-implementation-process.md", + "targetRelativePath": "MySQL/043-sharding-implementation-process.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b25521b3d17eb81d4e569f71aadd8d96c357e42c88a95d5d706ae0406199581e" + }, + { + "sourceRelativePath": "日本/行程.md", + "targetRelativePath": "日本/行程.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9e6587879ee6ee7d6a842cd20600832fab8f1513d6183a7dd295da5bb098083c" + }, + { + "sourceRelativePath": "日本/App 安装.md", + "targetRelativePath": "日本/App 安装.md", + "recommendation": "skip_stub", + "action": "skipped", + "rationale": "unfinished personal app packing checklist" + }, + { + "sourceRelativePath": "日本/出入境、护照和常识.md", + "targetRelativePath": "日本/出入境、护照和常识.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fde272a96abc78358081fd8619280e1408bec61e3b2394669332c05e36ac853d" + }, + { + "sourceRelativePath": "Rollup/构建中常用插件介绍commonjs、node-resolve、typescript和replace.md", + "targetRelativePath": "Rollup/构建中常用插件介绍commonjs、node-resolve、typescript和replace.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1d24310f5fbaf99b0a6ddd9d674155dc012366ea7c1cb4660781e96c4b454f1d" + }, + { + "sourceRelativePath": "场景面试题/15-message-peak-shaving.md", + "targetRelativePath": "场景面试题/15-message-peak-shaving.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f38c696f679992325705a02d36a0eee2ba100c3654adc7d158522330ea1f1595" + }, + { + "sourceRelativePath": "场景面试题/02-distributed-lock-alternatives.md", + "targetRelativePath": "场景面试题/02-distributed-lock-alternatives.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a1422de2dc20a22e1b60a206816b32df30322d9291c903fccb896be3060d2532" + }, + { + "sourceRelativePath": "场景面试题/10-cache-avalanche.md", + "targetRelativePath": "场景面试题/10-cache-avalanche.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "77dac1894da2e0d93f30a6f18fb23518c907b9c95e3a4a27a70eab46645395d7" + }, + { + "sourceRelativePath": "场景面试题/27-mysql-replication-lag.md", + "targetRelativePath": "场景面试题/27-mysql-replication-lag.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0de8f71895f62b4476aac5e3f8f3a858ff0ac0a45665fc2683d823838273a211" + }, + { + "sourceRelativePath": "场景面试题/26-mysql-configuration-tuning.md", + "targetRelativePath": "场景面试题/26-mysql-configuration-tuning.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d659889819983cad51c0384153051e342750bb0ffc00ad4ec7cdf69ea72ebe2d" + }, + { + "sourceRelativePath": "场景面试题/07-cache-value.md", + "targetRelativePath": "场景面试题/07-cache-value.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d890db3839a1efdbda7f3b986555a7cba2da5893fca61cbc0288b00d8750f5ac" + }, + { + "sourceRelativePath": "场景面试题/13-message-fanout.md", + "targetRelativePath": "场景面试题/13-message-fanout.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8c69ca1c2b35080ccfadc57306371698309f7f406103cdf4d8a25200255734b0" + }, + { + "sourceRelativePath": "场景面试题/22-sharding-cross-query-transactions.md", + "targetRelativePath": "场景面试题/22-sharding-cross-query-transactions.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "374e1c4b3a2eb5ebe9906adff25de259dd9b046a1c72f275f20c7d92c3aaa5c8" + }, + { + "sourceRelativePath": "场景面试题/28-mysql-primary-failover.md", + "targetRelativePath": "场景面试题/28-mysql-primary-failover.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "281f9b1ba5dd7c74703bf743e7bcc252ad3c2bdb89c8241c8f4e9fad4a5990c1" + }, + { + "sourceRelativePath": "场景面试题/06-redis-big-key.md", + "targetRelativePath": "场景面试题/06-redis-big-key.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "619fb6b12328eb428d91ae9c4f09d93aa85b81f9028c3f5532d1668175acdb21" + }, + { + "sourceRelativePath": "场景面试题/30-server-closes-tcp.md", + "targetRelativePath": "场景面试题/30-server-closes-tcp.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4ef46d0b2f81984d1ad0f9be0a9aa8de4db351b30f3b560eb06529668a9e153a" + }, + { + "sourceRelativePath": "场景面试题/31-tcp-server-crash-power-loss.md", + "targetRelativePath": "场景面试题/31-tcp-server-crash-power-loss.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f7321840cfa03fad2ad35e4332b92c4f95fb85c38a2414cd27442acf57af02d6" + }, + { + "sourceRelativePath": "场景面试题/24-mysql-monitoring.md", + "targetRelativePath": "场景面试题/24-mysql-monitoring.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "00bb128a2450714f9081be58c62688d31876b2c0f115228f19a57c47a10d7b57" + }, + { + "sourceRelativePath": "场景面试题/01-redis-as-message-queue.md", + "targetRelativePath": "场景面试题/01-redis-as-message-queue.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "12d5176f08c7af576da395a0596196245215cfa3808fa46d1814aaa9fd58baab" + }, + { + "sourceRelativePath": "场景面试题/03-distributed-lock-essentials.md", + "targetRelativePath": "场景面试题/03-distributed-lock-essentials.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "994b222a189cda3807164ee6ac18586b996ea94bea612bfc5ce570871cf09f50" + }, + { + "sourceRelativePath": "场景面试题/05-redis-lock-timeout.md", + "targetRelativePath": "场景面试题/05-redis-lock-timeout.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f7fc81a23ef7264f660c605241edd537f8ab31778e251cdf3e405274e846abea" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "targetRelativePath": "场景面试题/README.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3c0ce4ad6c3abc5c5504f6237fd1535ec5e617068c9ca855eacc2925d7803681" + }, + { + "sourceRelativePath": "场景面试题/21-tcp-client-failure-detection.md", + "targetRelativePath": "场景面试题/21-tcp-client-failure-detection.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3bb46fd4ecbb4c18b296ebc74da9a3e4e24df12c9d0a2402a625ea4182ffe856" + }, + { + "sourceRelativePath": "场景面试题/17-kafka-message-loss.md", + "targetRelativePath": "场景面试题/17-kafka-message-loss.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "450e0752fa3cfe4897467ce5475a4a3449cab0c08134adfc2e5eb2db90685fbd" + }, + { + "sourceRelativePath": "场景面试题/20-database-sharding-when.md", + "targetRelativePath": "场景面试题/20-database-sharding-when.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f5237edc690f36ab54fbce78243de3e18ac7a8eb3a130fcbc8f6d7d04ab27343" + }, + { + "sourceRelativePath": "场景面试题/25-mysql-deep-pagination.md", + "targetRelativePath": "场景面试题/25-mysql-deep-pagination.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8837f3c58a925704e900445ae733eeaa8116cb1948032f6b10278f327bf58458" + }, + { + "sourceRelativePath": "场景面试题/29-http-user-identity-cluster.md", + "targetRelativePath": "场景面试题/29-http-user-identity-cluster.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "10136206247a6aabfb9c0c2bc125a58aa38e4ec3956eed0c2197b31836253346" + }, + { + "sourceRelativePath": "场景面试题/08-cache-penetration.md", + "targetRelativePath": "场景面试题/08-cache-penetration.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4164306c4393000176a1bcf2ee0bb71847207a79565ae681fbfbe1fd1c11a2b4" + }, + { + "sourceRelativePath": "场景面试题/14-message-decoupling.md", + "targetRelativePath": "场景面试题/14-message-decoupling.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ceae8d004c9a94284edde91ffe61a4689665ad9f33a52cc3d2e948b1d93cb922" + }, + { + "sourceRelativePath": "场景面试题/04-redis-lock-pros-cons.md", + "targetRelativePath": "场景面试题/04-redis-lock-pros-cons.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f5d274d9e420382a21f7010c4c85ec49f4dec54487aaee14dbd9ab894ea5e4ab" + }, + { + "sourceRelativePath": "场景面试题/19-mq-backlog.md", + "targetRelativePath": "场景面试题/19-mq-backlog.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "737278aa0f5ab1ed27717d0377ae9343a6bb37d8cba5d48499928914234bc798" + }, + { + "sourceRelativePath": "场景面试题/09-cache-breakdown.md", + "targetRelativePath": "场景面试题/09-cache-breakdown.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0486327d448ba51d861c2add4b01d5ddf6305e9e74a7c26c25910ee0b7b65dd0" + }, + { + "sourceRelativePath": "场景面试题/32-tcp-connection-count.md", + "targetRelativePath": "场景面试题/32-tcp-connection-count.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f05de3fa501a5dfd3f573f203b718ca07d64c3570c5b758eb55d1c8f4f8a8d53" + }, + { + "sourceRelativePath": "场景面试题/23-mysql-slow-sql.md", + "targetRelativePath": "场景面试题/23-mysql-slow-sql.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f1c97482a45646909cb074342ea4fa7e9cd34cae7d93f90b6337a2bbc4b58fa5" + }, + { + "sourceRelativePath": "场景面试题/16-kafka-throughput.md", + "targetRelativePath": "场景面试题/16-kafka-throughput.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fc4a8c06bba19ebcca64e4eecf31671ad6a4feadef4ce8a76a1a0b7dc0c091e9" + }, + { + "sourceRelativePath": "场景面试题/11-redis-hot-key.md", + "targetRelativePath": "场景面试题/11-redis-hot-key.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1dbcda1fbe955c2252682e7b0822fd438498bc35835e632b5d3efc93f9fb2c4d" + }, + { + "sourceRelativePath": "场景面试题/12-redis-reentrant-lock.md", + "targetRelativePath": "场景面试题/12-redis-reentrant-lock.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8372b0728abe5fecad6a310768e775530c2e2dedc6b1d93883d5baefe6973d42" + }, + { + "sourceRelativePath": "场景面试题/18-kafka-duplicate-consumption.md", + "targetRelativePath": "场景面试题/18-kafka-duplicate-consumption.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "785776c6582b50a2d980beec15fc96527bf7ed40b08c47a240e679d7d346aa93" + }, + { + "sourceRelativePath": "JavaScript/前端通过 canvas 实现图片裁剪.md", + "targetRelativePath": "JavaScript/前端通过 canvas 实现图片裁剪.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "JavaScript/构建工具应该包含哪些能力?.md", + "targetRelativePath": "JavaScript/构建工具应该包含哪些能力?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/来认识一下实用的、好用的:URL API.md", + "targetRelativePath": "JavaScript/来认识一下实用的、好用的:URL API.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/LocalStorage、sessionStorage 封装 - 基于TypeScript.md", + "targetRelativePath": "JavaScript/技术实践/LocalStorage、sessionStorage 封装 - 基于TypeScript.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/前端模块:CJS, AMD, UMD, ESM, System 和 IIFE.md", + "targetRelativePath": "JavaScript/前端模块分类.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "same article body after removing H1" + }, + { + "sourceRelativePath": "JavaScript/正则表达式卷起来!.md", + "targetRelativePath": "JavaScript/正则表达式卷起来!.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/Atomics API.md", + "targetRelativePath": "JavaScript/基础知识/Atomics API.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/JavaScript优雅写法及骚操作.md", + "targetRelativePath": "JavaScript/技术实践/JavaScript优雅写法及骚操作.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "targetRelativePath": "JavaScript/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7435c072575f38b02601f49b14b799c04230939592a2f1e9d07cbabf73d47e22" + }, + { + "sourceRelativePath": "JavaScript/浏览器中如何通过webgl获取渲染器的供应商和版本信息?.md", + "targetRelativePath": "JavaScript/浏览器中如何通过webgl获取渲染器的供应商和版本信息?.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b3a0c203e75b779f47cb7a7b6189488157e7314d42bed259601e4bd68282969f" + }, + { + "sourceRelativePath": "JavaScript/IIFE 立即执行函数表达式.md", + "targetRelativePath": "JavaScript/基础知识/IIFE 立即执行函数表达式.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/玩转一行代码KO问题.md", + "targetRelativePath": "JavaScript/玩转一行代码KO问题.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/JavaScript 错误处理指南.md", + "targetRelativePath": "JavaScript/技术实践/JavaScript 错误处理指南.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/js中==与===的区别.md", + "targetRelativePath": "JavaScript/基础知识/js中==与===的区别.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/ES5、6 指导规范.md", + "targetRelativePath": "JavaScript/基础知识/ES5、6 指导规范.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/Vue 源码参考.md", + "targetRelativePath": "JavaScript/Vue 源码参考.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "JavaScript/axios、XHR、XML、AJAX和Fetch分不清怎么办?.md", + "targetRelativePath": "JavaScript/技术实践/axios、XHR、XML、AJAX和Fetch分不清怎么办?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/Web Worker 常见使用问题和解决方案.md", + "targetRelativePath": "JavaScript/Web Woker 常见使用问题和解决方案.md", + "recommendation": "update_existing", + "action": "updated", + "rationale": "corrected Worker spelling plus reciprocal internal link", + "resultHash": "70a6330e59bd680354e3b90f1bdf83b6923192f9e3fcf08b21ff9e17993af9a3" + }, + { + "sourceRelativePath": "JavaScript/JavaScript 获取用户操作系统信息及浏览器信息.md", + "targetRelativePath": "JavaScript/技术实践/JavaScript 获取用户操作系统信息及浏览器信息.md", + "recommendation": "update_existing", + "action": "updated", + "rationale": "article body stable; source image URL upgraded in 2024", + "resultHash": "abe2763ff6322264cd2ee6e1b2c2f477fad24c38ae32207550ef3d07deb29c7c" + }, + { + "sourceRelativePath": "JavaScript/ES 12 新特性.md", + "targetRelativePath": "JavaScript/基础知识/ES 12 新特性.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/页面生命周期:DOMContentLoaded, load, beforeunload, unload.md", + "targetRelativePath": "JavaScript/页面生命周期.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/使用Node.js、Express.js、TS写个简单的图床脚本(一).md", + "targetRelativePath": "JavaScript/使用Node.js、Express.js、TS写个简单的图床脚本(一).md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/为什么每个人都在谈论同构JavaScript 以及为什么它很重要.md", + "targetRelativePath": "JavaScript/为什么每个人都在谈论同构JavaScript 以及为什么它很重要.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/JS垃圾回收机制.md", + "targetRelativePath": "JavaScript/基础知识/JS垃圾回收机制.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/Property原型链与原型链.md", + "targetRelativePath": "JavaScript/Property原型链与原型链.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/深入解析call、apply、bind.md", + "targetRelativePath": "JavaScript/深入解析call、apply、bind.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/Web Woker 与主线程通信场景下对postMessage的简洁封装.md", + "targetRelativePath": "JavaScript/Web Woker 与主线程通信场景下对postMessage的简洁封装.md", + "recommendation": "skip_source_duplicate", + "action": "skipped", + "rationale": "correctly-spelled source is superseding expanded version" + }, + { + "sourceRelativePath": "JavaScript/事件循环是如何影响页面渲染的?.md", + "targetRelativePath": "JavaScript/事件循环是如何影响页面渲染的?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/PromiseA 集合.md", + "targetRelativePath": "JavaScript/PromiseA 集合.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/WebPerf Snippets —— 直接可以在浏览器控制台中获取网页性能指标的代码片段.md", + "targetRelativePath": "JavaScript/WebPerf Snippets —— 直接可以在浏览器控制台中获取网页性能指标的代码片段.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d5f3336d1d0e3101c51984c3858373ce2ead8a6ccda3108bb1eda47ca8873702" + }, + { + "sourceRelativePath": "JavaScript/Web Worker 与主线程通信场景下对postMessage的简洁封装.md", + "targetRelativePath": "JavaScript/Web Woker 与主线程通信场景下对postMessage的简洁封装.md", + "recommendation": "update_existing", + "action": "updated", + "rationale": "expanded postMessage implementation plus corrected Worker spelling", + "resultHash": "c86c0bcf93ae6075c402c15aed858ebc35b2dc501e06321524173a3f709bd6ea" + }, + { + "sourceRelativePath": "JavaScript/使用Node.js、pm2和ssh2模块实现一个简单的Node.js项目部署脚本.md", + "targetRelativePath": "JavaScript/使用Node.js、pm2和ssh2模块实现一个简单的Node.js项目部署脚本.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/Web Woker 常见使用问题和解决方案.md", + "targetRelativePath": "JavaScript/Web Woker 常见使用问题和解决方案.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/了解MutationObserver的使用以及在Vue3中的使用案例.md", + "targetRelativePath": "JavaScript/了解MutationObserver的使用以及在Vue3中的使用案例.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7c896836a48a442aae788018b3db07cd62ede74597ae954a423442d00ad75968" + }, + { + "sourceRelativePath": "JavaScript/前端 SSO 单点登入方案.md", + "targetRelativePath": "JavaScript/前端 SSO 单点登入方案.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/JSDoc 初探:代码内的文档标记.md", + "targetRelativePath": "JavaScript/技术实践/JSDoc 初探:代码内的文档标记.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/怎么总有人混淆Service Worker 和 Web Worker?.md", + "targetRelativePath": "JavaScript/怎么总有人混淆Service Worker 和 Web Worker?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/JavaScript 进阶整合.md", + "targetRelativePath": "JavaScript/基础知识/JavaScript 进阶整合.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/Set,Map 和 Array的区别.md", + "targetRelativePath": "JavaScript/Set,Map 和 Array的区别.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/JavaScript 如何跳出(终止)forEach 循环.md", + "targetRelativePath": "JavaScript/技术实践/JavaScript 如何跳出(终止)forEach 循环.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/如何使用Performance API 来衡量应用性能?.md", + "targetRelativePath": "JavaScript/如何使用Performance API 来衡量应用性能?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Astro/来了解一下 Island Architecture 孤岛架构.md", + "targetRelativePath": "元框架/Astro/来了解一下 Island Architecture 孤岛架构.md", + "recommendation": "update_existing", + "action": "updated", + "rationale": "new image URL and explicit astro code fence", + "resultHash": "f3ccf9610e234b66650dcf17f058792be2dcb35d2f849f7d72afc6fd45f3de17" + }, + { + "sourceRelativePath": "Astro/Astro 中启用服务器端渲染.md", + "targetRelativePath": "元框架/Astro/Astro 中启用服务器端渲染.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Astro/Vue集成.md", + "targetRelativePath": "元框架/Astro/Vue集成.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/优化事件处理逻辑:使用WeakSet跟踪事件处理状态.md", + "targetRelativePath": "Node/优化事件处理逻辑:使用WeakSet跟踪事件处理状态.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "08968fed579f0ea662109ddaf1c3bb5ef21120483af2a2932efbbe3368a6c063" + }, + { + "sourceRelativePath": "Node/Node 笔记(2)模块化.md", + "targetRelativePath": "Node/笔记/Node 笔记(2)模块化.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/为什么是 pnpm?我们为何使用monorepo?.md", + "targetRelativePath": "Node/为什么是 pnpm?我们为何使用monorepo?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/Node 笔记(3)Node常用内置模块.md", + "targetRelativePath": "Node/笔记/Node 笔记(3)Node常用内置模块.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/Node 笔记(7)Buffer的使用.md", + "targetRelativePath": "Node/笔记/Node 笔记(7)Buffer的使用.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/CJS 和 ES Module 横向对比.md", + "targetRelativePath": "Node/CJS 和 ES Module 横向对比.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/http-server 和 live-server.md", + "targetRelativePath": "Node/http-server 和 live-server.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c3170789c5dd92ea3b05dd03bcc82f66616efef429f835cb363a705080ca7140" + }, + { + "sourceRelativePath": "Node/npm包打补丁 — patch-package.md", + "targetRelativePath": "Node/npm包打补丁 — patch-package.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/索引.md", + "targetRelativePath": "Node/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8e4df28d86f9b751b6662308d711bf95df7f43ca5d7320e18524c4122aa2fe5d" + }, + { + "sourceRelativePath": "Node/Node.js 进程通信.md", + "targetRelativePath": "Node/Node.js 进程通信.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/Node 笔记(9)深入事件循环.md", + "targetRelativePath": "Node/笔记/Node 笔记(9)深入事件循环.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/PM2 使用指南~.md", + "targetRelativePath": "Node/PM2 使用指南~.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Node/Node.js 子进程管理和进程通信.md", + "targetRelativePath": "Node/Node.js 子进程管理和进程通信.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Node/Node 笔记(6)Stream.md", + "targetRelativePath": "Node/笔记/Node 笔记(6)Stream.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/深入探索 Node.js 中的事件处理.md", + "targetRelativePath": "Node/深入探索 Node.js 中的事件处理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "32fa8b6eee64da90c25bed06560a72242be04547e05f6c016ee5a1f9c38f33cb" + }, + { + "sourceRelativePath": "Node/Node 笔记(1)内核引擎.md", + "targetRelativePath": "Node/笔记/Node 笔记(1)内核引擎.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Node/Node 笔记(4)包管理工具.md", + "targetRelativePath": "Node/笔记/Node 笔记(4)包管理工具.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/Node 笔记(5)开发脚手架工具.md", + "targetRelativePath": "Node/笔记/Node 笔记(5)开发脚手架工具.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/图片格式转换:将上传图片转为webp.md", + "targetRelativePath": "Node/图片格式转换:将上传图片转为webp.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Node/Yarn 4.0发布:性能提升,提供更多命令和功能.md", + "targetRelativePath": "Node/Yarn 4.0发布:性能提升,提供更多命令和功能.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "69e0b67b7070dcf25c837fdd073fc5ef0edea85cbd50295b896de1062cfef84b" + }, + { + "sourceRelativePath": "Node/使用Node.js 实现网络代理(无框架,通过http-proxy).md", + "targetRelativePath": "Node/使用Node.js 实现网络代理(无框架,通过http-proxy).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/Node 笔记(8)Http模块.md", + "targetRelativePath": "Node/笔记/Node 笔记(8)Http模块.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/静态根:具有编译时常量地址的对象.md", + "targetRelativePath": "Node/静态根:具有编译时常量地址的对象.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d56f4c5a10116d8686653d886117d48217750257d2f2ff63c3c0a5bc83091e4c" + }, + { + "sourceRelativePath": "Node/横向对比 CJS 和 ES Module.md", + "targetRelativePath": "Node/横向对比 CJS 和 ES Module.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/CORS 跨域及其 Nodejs 服务端配置实践.md", + "targetRelativePath": "Node/CORS 跨域及其 Nodejs 服务端配置实践.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/咱们来整一个Node.js脚本,使用ffmpeg将视频转换为GIF文件.md", + "targetRelativePath": "Node/咱们来整一个Node.js脚本,使用ffmpeg将视频转换为GIF文件.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Node/Node.js 文件系统指南.md", + "targetRelativePath": "Node/Node.js 文件系统指南.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "牛客/牛客网刷题1-10.md", + "targetRelativePath": "牛客/牛客网刷题1-10.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "85d66e5c816ea39e38e4931ca5f771b9c8e2f1947a4cb91c0ce6da505e5c8ae4" + }, + { + "sourceRelativePath": "牛客/牛客网刷题21-30.md", + "targetRelativePath": "牛客/牛客网刷题21-30.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1944a618cf69414d1f52f9240c4d6130ab9c108264c29f2604c739cada71b9fc" + }, + { + "sourceRelativePath": "牛客/牛客网刷题41-50.md", + "targetRelativePath": "牛客/牛客网刷题41-50.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7393d360608d9207d173eda90704fbd1685205c34b2ae69cf3a76fbe892fb842" + }, + { + "sourceRelativePath": "牛客/牛客网刷题31-40.md", + "targetRelativePath": "牛客/牛客网刷题31-40.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e4779deb4c6d4040c6825ea9519617323733343b27660dae719d4c99941fdadb" + }, + { + "sourceRelativePath": "牛客/牛客网刷题11-20.md", + "targetRelativePath": "牛客/牛客网刷题11-20.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ba9de14647363bc69e8fc97550dfdca18893f8a454cc017bcc64ab0c4c64720a" + }, + { + "sourceRelativePath": "牛客/牛客网刷题51-60.md", + "targetRelativePath": "牛客/牛客网刷题51-60.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2c7658cdafc03a34bb95767437aeebd6f4f51a9c3257ba769b1a2f6cb4536821" + }, + { + "sourceRelativePath": "软技能/前端学习目标.md", + "targetRelativePath": "软文/前端学习目标.md", + "recommendation": "update_existing", + "action": "updated", + "rationale": "updated book checklist state", + "resultHash": "9c4b315e789bf19c80b3b323520907b42c7ed382107f473086b25122c521f977" + }, + { + "sourceRelativePath": "软技能/精选文章列表.md", + "targetRelativePath": "软文/精选文章列表.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "软技能/PPT图文排版心得.md", + "targetRelativePath": "软文/PPT图文排版心得.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "软技能/DDD.md", + "targetRelativePath": "软技能/DDD.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a3ca6ff50fefa7614d8d3eac2931bfdce24a390052774a88b844bd6513c8c1e2" + }, + { + "sourceRelativePath": "软技能/LaTeX 数学公式语法手册.md", + "targetRelativePath": "软文/LaTeX 数学公式语法手册.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "软技能/开发黑话 专业术语.md", + "targetRelativePath": "软技能/开发黑话 专业术语.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6331c3dfbf3b2535b50e1ef1499b6a44270d80271a547763abf2756db673e16b" + }, + { + "sourceRelativePath": "软技能/API 版本控制.md", + "targetRelativePath": "软技能/API 版本控制.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "75df25ead12623e64d2c272896e8d37671d030b94ca69114c7435bbb5bbb1a48" + }, + { + "sourceRelativePath": "软技能/浏览器翻译.md", + "targetRelativePath": "软文/浏览器翻译.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "杂文/写作技巧和经验.md", + "targetRelativePath": "软文/写作技巧和经验.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "杂文/来了解一下 git fetch 与 git pull的区别.md", + "targetRelativePath": "软文/来了解一下 git fetch 与 git pull的区别.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "杂文/Git 分支模型.md", + "targetRelativePath": "杂文/Git 分支模型.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "杂文/Serverless 笔记.md", + "targetRelativePath": "软文/Serverless 笔记.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "杂文/我的大学四年.md", + "targetRelativePath": "杂文/我的大学四年.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "33624b170fa20644494ff31f6f22786f52a7859c2813f976613d98d79b6b4650" + }, + { + "sourceRelativePath": "杂文/UED、UCD、UE、UI、交互设计.md", + "targetRelativePath": "软文/UED、UCD、UE、UI、交互设计.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "杂文/Git 常用语句与命令行.md", + "targetRelativePath": "软文/Git 常用语句与命令行.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "面试通用/share.md", + "targetRelativePath": "面试通用/share.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "887dbf3eebcd45cbe843d9dcb157c72c2558faae17c7bcb1804af5884b6d1061" + }, + { + "sourceRelativePath": "面试通用/前端工程师面试手册.md", + "targetRelativePath": "面试通用/前端工程师面试手册.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fbf7c23c8cba3c0669f529c511852142bbb9c231890a2707818326733e7a2fa9" + }, + { + "sourceRelativePath": "面试通用/「算法与数据结构」梳理6大排序算法 为了offer.md", + "targetRelativePath": "面试通用/「算法与数据结构」梳理6大排序算法 为了offer.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bd1ccbde43548214d5fd6edc735ec6acc2d6713868b282308cb8a5fe7b0e4504" + }, + { + "sourceRelativePath": "面试通用/计算机网络面试题.md", + "targetRelativePath": "面试通用/计算机网络面试题.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "754e394254323bc823ba66cf7174fe16cc0be06df3f032e3981660f1906b861e" + }, + { + "sourceRelativePath": "面试通用/Node.js 前端面试题.md", + "targetRelativePath": "面试通用/Node.js 前端面试题.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "177d955592a72046e96c0dd2414ea864b0d70b5e95236838585a01f73128a10d" + }, + { + "sourceRelativePath": "面试通用/前端面试十万字书籍总结.md", + "targetRelativePath": "面试通用/前端面试十万字书籍总结.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2640b11857f2418a5ae478942e353286b606401f19223cae2352ce709e428802" + }, + { + "sourceRelativePath": "React/从零开始实现RSC - 第 1 部分:Server Component.md", + "targetRelativePath": "React/从零开始实现RSC - 第 1 部分:Server Component.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/索引.md", + "targetRelativePath": "React/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "cca711dac34494dd1df5da14ca332ced24e1eb07c9cd014c63eaaa9b897ccb51" + }, + { + "sourceRelativePath": "React/ReactHooks汇总.md", + "targetRelativePath": "React/React Hooks笔记/ReactHooks汇总.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React基础.md", + "targetRelativePath": "React/React基础.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/执行和清除Effect的时机.md", + "targetRelativePath": "React/执行和清除Effect的时机.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React 项目优化.md", + "targetRelativePath": "React/React 项目优化.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/ReactRouter V6 解析.md", + "targetRelativePath": "React/ReactRouter V6 解析.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/useReducer:类Redux的useState替代方案.md", + "targetRelativePath": "React/useReducer:类Redux的useState替代方案.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/容器内选择单一列表并进行高亮切换的实践.md", + "targetRelativePath": "React/容器内选择单一列表并进行高亮切换的实践.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/Mobx 教程.md", + "targetRelativePath": "React/Mobx 教程.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/eslint-plugin-react 配置.md", + "targetRelativePath": "React/eslint-plugin-react 配置.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React 中使用 TypeScript.md", + "targetRelativePath": "React/React 中使用 TypeScript.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/高级 React 组件组合.md", + "targetRelativePath": "React/高级 React 组件组合.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "浏览器工作原理/Web Components 中使用生命周期回调函数.md", + "targetRelativePath": "Browser/Web Components 中使用生命周期回调函数.md", + "recommendation": "skip_source_duplicate", + "action": "skipped", + "rationale": "same source article body as Browser/Web Components 中使用生命周期回调函数.md after ignoring first H1" + }, + { + "sourceRelativePath": "浏览器工作原理/Web浏览器滚动方案一览| rAF等.md", + "targetRelativePath": "浏览器工作原理/Web浏览器滚动方案一览| rAF等.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c70902640ce3797ff596f24be4d0d4273c04c14a2558b9b3d91638d142069944" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "targetRelativePath": "浏览器工作原理/索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f7433670799979f07a16971e795699b6961c2cb2b746780e0ba393394da48c90" + }, + { + "sourceRelativePath": "浏览器工作原理/CORB 兼容性和影响.md", + "targetRelativePath": "浏览器原理/CORB 兼容性和影响.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "浏览器工作原理/深入理解内容安全策略(CSP):保障网页安全的利器.md", + "targetRelativePath": "浏览器工作原理/深入理解内容安全策略(CSP):保障网页安全的利器.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6808224cdf6a37cfc27b2ffcacde3b796fac5aebefd08129c0d088a288a323a0" + }, + { + "sourceRelativePath": "浏览器工作原理/CORB 应对策略.md", + "targetRelativePath": "浏览器原理/CORB 应对策略.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "浏览器工作原理/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "targetRelativePath": "Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "recommendation": "skip_source_duplicate", + "action": "skipped", + "rationale": "same source article body as Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md after ignoring first H1" + }, + { + "sourceRelativePath": "浏览器工作原理/CORB 策略.md", + "targetRelativePath": "浏览器原理/CORB 策略.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "年终总结/再见大学,你好bilibili——一个前端工程师的不走寻常路年终总结.md", + "targetRelativePath": "年终总结/再见大学,你好bilibili——一个前端工程师的不走寻常路年终总结.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a85d66ab7dd3b5c392969df3f5e3c0b381480e619ee45a24056f83c40b73b99d" + }, + { + "sourceRelativePath": "年终总结/2025 年终总结.md", + "targetRelativePath": "年终总结/2025 年终总结.md", + "recommendation": "skip_stub", + "action": "skipped", + "rationale": "unwritten annual review outline" + }, + { + "sourceRelativePath": "面试题合集/前端性能优化篇.md", + "targetRelativePath": "八股文/浏览器原理/前端性能优化篇.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "面试题合集/浏览器原理面试题汇总.md", + "targetRelativePath": "八股文/浏览器原理/浏览器原理面试题汇总.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "抖音/本地推投流配置.md", + "targetRelativePath": "抖音/本地推投流配置.md", + "recommendation": "skip_user_excluded", + "action": "excluded_by_request", + "rationale": "Source directory excluded by the user's request.", + "excludedByRequest": true + }, + { + "sourceRelativePath": "抖音/如何使用Dou+.md", + "targetRelativePath": "抖音/如何使用Dou+.md", + "recommendation": "skip_user_excluded", + "action": "excluded_by_request", + "rationale": "Source directory excluded by the user's request.", + "excludedByRequest": true + }, + { + "sourceRelativePath": "src/后端/85-Agent死循环排查与治理.md", + "targetRelativePath": "后端/85-Agent死循环排查与治理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f468ee3d9dc011c5040994288df22312b0dfce0128ba89c6507a3a79382dd9a2" + }, + { + "sourceRelativePath": "src/后端/118-一致性Hash设计.md", + "targetRelativePath": "后端/118-一致性Hash设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a8c5099b788c0016bb8d539fc8cca8099a24e3508e693c1ad1c618905df2ce92" + }, + { + "sourceRelativePath": "src/后端/36-大HashMap扩容优化.md", + "targetRelativePath": "后端/36-大HashMap扩容优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1525ae3901ccfe5f5cf47809574bac3723d2f7cbb06ed43f17df7fa39428f832" + }, + { + "sourceRelativePath": "src/后端/103-订单数据同步数仓方案.md", + "targetRelativePath": "后端/103-订单数据同步数仓方案.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8f2b260643fd6ee34cfa772f8316d3cb499dfc98aed2a119cf4ec0c7b735a973" + }, + { + "sourceRelativePath": "src/后端/102-亿级ArrayList去重.md", + "targetRelativePath": "后端/102-亿级ArrayList去重.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "eb472aa29e2d912f93778380ffc4f67989f716b5a54cc954e064aa7bc9ab8503" + }, + { + "sourceRelativePath": "src/后端/33-Excel导出慢优化.md", + "targetRelativePath": "后端/33-Excel导出慢优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "18ba08f3816a4dd3e95fdf47d406eea415c0f3d3bf1150c55897e52990a5b842" + }, + { + "sourceRelativePath": "src/后端/109-订单状态同步顺序错乱.md", + "targetRelativePath": "后端/109-订单状态同步顺序错乱.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "559bb9f83e798f6790889deffd0a0947e29891891a520aac4e0cec9e319b1a91" + }, + { + "sourceRelativePath": "src/后端/39-设计线程池.md", + "targetRelativePath": "后端/39-设计线程池.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "31a4a9e3718b3636d23b4aadb551c8f1725e5f2607319c7c4afdd86aefe7af8a" + }, + { + "sourceRelativePath": "src/后端/99-主线程收集并行任务结果.md", + "targetRelativePath": "后端/99-主线程收集并行任务结果.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2ec9acee186d9cf21fa84edf0c1956151aab3ef717c1fa913f3c82295383afc6" + }, + { + "sourceRelativePath": "src/后端/84-4C8G与8C16G服务器选型.md", + "targetRelativePath": "后端/84-4C8G与8C16G服务器选型.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "73bbc9af197a9abde85610847768adec9be450459f8d9fd7c1daa460db97c3c6" + }, + { + "sourceRelativePath": "src/后端/77-一秒请求优化到一毫秒.md", + "targetRelativePath": "后端/77-一秒请求优化到一毫秒.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4f11f8ab2539ddb591876f9ed7bd6e0143211f12b9bccdf3d1db1b26a572f403" + }, + { + "sourceRelativePath": "src/后端/16-接口变慢如何排查.md", + "targetRelativePath": "后端/16-接口变慢如何排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "796630abe79d5196de623b5014d5a278b8f8b9b6b7e1b90fe3766a2a9a1e75f6" + }, + { + "sourceRelativePath": "src/后端/82-服务重启避免重连洪峰.md", + "targetRelativePath": "后端/82-服务重启避免重连洪峰.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fe26775c20976b23f4e50333171bfcd9268406a9650053bbfc930f1a927e7f55" + }, + { + "sourceRelativePath": "src/后端/96-五分钟内重复登录检测.md", + "targetRelativePath": "后端/96-五分钟内重复登录检测.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ef483b98123f34f2e72e38f62a8fad53bec2622baa711c0a955a5113faf3c120" + }, + { + "sourceRelativePath": "src/后端/115-配置中心故障降级.md", + "targetRelativePath": "后端/115-配置中心故障降级.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6c04ad09433760bc5f61f1283cd2c106b71f77de044f1ed51c836e3ccd64e15b" + }, + { + "sourceRelativePath": "src/后端/80-核心数据缓存预热设计.md", + "targetRelativePath": "后端/80-核心数据缓存预热设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "80be7b648db4cc4a6e4cac828555013d5a41b7a705195318d9161cbee3959172" + }, + { + "sourceRelativePath": "src/后端/31-避免用户重复下单占库存.md", + "targetRelativePath": "后端/31-避免用户重复下单占库存.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "707832d832ae1a363af936046ab204dee0b99fb62dbe29c626fa2db2c14936d8" + }, + { + "sourceRelativePath": "src/后端/58-会员到期提前7天提醒.md", + "targetRelativePath": "后端/58-会员到期提前7天提醒.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2da4464cbf2ca8435c6022d66067190b4968d4bd4918d7dde66632e5f1c4e2bf" + }, + { + "sourceRelativePath": "src/后端/65-Redis只保留热点数据.md", + "targetRelativePath": "后端/65-Redis只保留热点数据.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fd72b9603fa7e093c4b512fc9ac3f1be6533b874312fe97193b827d52bac2190" + }, + { + "sourceRelativePath": "src/后端/89-接口恶意刷流量治理.md", + "targetRelativePath": "后端/89-接口恶意刷流量治理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9dc33eedb54ed9a27a939fb5c0d5dd097b6aa890e8f05eefff966914726136cb" + }, + { + "sourceRelativePath": "src/后端/52-Redis内存溢出排查与解决.md", + "targetRelativePath": "后端/52-Redis内存溢出排查与解决.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "283b852b1a1b3a967196b89ab955ea50cdefe958b606e76547469653146ad507" + }, + { + "sourceRelativePath": "src/后端/63-调用第三方接口注意事项.md", + "targetRelativePath": "后端/63-调用第三方接口注意事项.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5da46da2012cbb52252d9d6350f67cd3513bddd0074c6822c5fbe456e344d6e1" + }, + { + "sourceRelativePath": "src/后端/83-第三方上游异步处理方案.md", + "targetRelativePath": "后端/83-第三方上游异步处理方案.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "908167d57582b469efd4374f115531cb53a3eb169cd837bbb27e99a1c5ddf9f9" + }, + { + "sourceRelativePath": "src/后端/93-OAuth2授权服务设计.md", + "targetRelativePath": "后端/93-OAuth2授权服务设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "dc9d0da2210dcd762ab53d2cc011d773e1fd8b42bfb3d753e2c46113c64872ce" + }, + { + "sourceRelativePath": "src/后端/111-API网关设计.md", + "targetRelativePath": "后端/111-API网关设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "84f944739aec3281ac02ef698d2eaa3c758e22be17d9f0229cbba117f35fb3d9" + }, + { + "sourceRelativePath": "src/后端/91-代码之外的性能优化.md", + "targetRelativePath": "后端/91-代码之外的性能优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "04f49e7f0b7025867d5d943702fec44845528d28286bcbe83ca7537fde095708" + }, + { + "sourceRelativePath": "src/后端/68-微服务服务发现原理.md", + "targetRelativePath": "后端/68-微服务服务发现原理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "256bb1250926ec0b7bd0c98a0c1e4b497f12ec09a5fe81d8a367f93f12737703" + }, + { + "sourceRelativePath": "src/后端/13-限流与限流算法.md", + "targetRelativePath": "后端/13-限流与限流算法.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3f860e4be303cd9a555696189802eb36aea47dce67209060a24cd03095246144" + }, + { + "sourceRelativePath": "src/后端/07-设计短链系统.md", + "targetRelativePath": "后端/07-设计短链系统.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5478cefd34eba04a011cbe66aeaa170ce4e4b52062fc6e0978fae9ccebfeb316" + }, + { + "sourceRelativePath": "src/后端/100-分布式FIFO支付限流设计.md", + "targetRelativePath": "后端/100-分布式FIFO支付限流设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "08ea939fe4a7141e7febb1dbb9c97722ccc7df7d5e8791b6fb0fe5db0eac06cd" + }, + { + "sourceRelativePath": "src/后端/59-店铺Top50商品设计.md", + "targetRelativePath": "后端/59-店铺Top50商品设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d9c40eb37845f132d0ce72212c5ca7ee299ce741369eeb8fbca6dc33269c47c8" + }, + { + "sourceRelativePath": "src/后端/51-JVM内存占用与OOM分析.md", + "targetRelativePath": "后端/51-JVM内存占用与OOM分析.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b01361b42a5d36ee276e07de78903554243774ec9bb4e07119cfec4c3f74282f" + }, + { + "sourceRelativePath": "src/后端/47-JDK序列化问题排查.md", + "targetRelativePath": "后端/47-JDK序列化问题排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9d2756026ed136925aae52791ef89b906c50a8950fb30252a12398626f344534" + }, + { + "sourceRelativePath": "src/后端/78-WebSocket与IM协议设计.md", + "targetRelativePath": "后端/78-WebSocket与IM协议设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ed2e034fd538f61f71b8bd92227154ebd95c086b2ba7393b108e6f1930696d2c" + }, + { + "sourceRelativePath": "src/后端/60-MySQL查询千万行内存问题.md", + "targetRelativePath": "后端/60-MySQL查询千万行内存问题.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8ccf64ae4f4111019fed414c7972c4a4f3ac901ac4e717f4a685222d3ee26e34" + }, + { + "sourceRelativePath": "src/后端/95-大表在线新增字段.md", + "targetRelativePath": "后端/95-大表在线新增字段.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6cddca7c976ae98159543797e5ea75a42e2a04cf02266e396a1999385632268d" + }, + { + "sourceRelativePath": "src/后端/26-接口响应慢定位与解决.md", + "targetRelativePath": "后端/26-接口响应慢定位与解决.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "15fc4460970c17d584096ad2e887f874ed23d3bf3acf87f1a2fb12553cf639f4" + }, + { + "sourceRelativePath": "src/后端/40-千亿数据快速安全写入HashMap.md", + "targetRelativePath": "后端/40-千亿数据快速安全写入HashMap.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "793d5c56af53305774169551b8327832a108ba87c990d7cb816f9654260c45bd" + }, + { + "sourceRelativePath": "src/后端/69-MySQL单表大数据优化.md", + "targetRelativePath": "后端/69-MySQL单表大数据优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9decea2f3ebfb8d4ee094af2acf4fe3985c6e3cdafdff9f346803a6109bd1ad3" + }, + { + "sourceRelativePath": "src/后端/41-数据库连接池爆满排查.md", + "targetRelativePath": "后端/41-数据库连接池爆满排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "69e9b3818a7d4b9d2de4cad1bfae064edbe1014a90b31ca5b229003d30f84081" + }, + { + "sourceRelativePath": "src/后端/11-设计文件上传系统.md", + "targetRelativePath": "后端/11-设计文件上传系统.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b8ed1e4526144e67fb4b650ab2510f31cdef0ffc5ff8792c6f6f48eb893b83de" + }, + { + "sourceRelativePath": "src/后端/15-设计线程安全的HashMap.md", + "targetRelativePath": "后端/15-设计线程安全的HashMap.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a2c8d59c734057df352f3044061847b75d7256fc1888b4d8a0e300c232492a2b" + }, + { + "sourceRelativePath": "src/后端/55-Java文件写入磁盘过程.md", + "targetRelativePath": "后端/55-Java文件写入磁盘过程.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ad2427811be232bc1c0a3737a4e94336c493c71a80c06b53ba65974d3b3a66b6" + }, + { + "sourceRelativePath": "src/后端/62-订单超时取消设计.md", + "targetRelativePath": "后端/62-订单超时取消设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e1b082618556aa7e5c562a4b7ccfbd667b0068afa79a776fa14b920e71ddb0f1" + }, + { + "sourceRelativePath": "src/后端/30-订单取消与支付并发.md", + "targetRelativePath": "后端/30-订单取消与支付并发.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6ce465db0d0addfbb35c46c5166e875daebdc9ca63f84cdcc1eb75adf1d17e60" + }, + { + "sourceRelativePath": "src/后端/21-无锁实现线程安全单例.md", + "targetRelativePath": "后端/21-无锁实现线程安全单例.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d2b348695c925f3bc5d775c34f24c0f63be503f9fd10a0d14acc52ddaab743c2" + }, + { + "sourceRelativePath": "src/后端/67-Redis挂掉的系统应对.md", + "targetRelativePath": "后端/67-Redis挂掉的系统应对.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "23015de2e22b7548b453606f79df462e9ad1153bd1465a975eb9d1e6c2235aef" + }, + { + "sourceRelativePath": "src/后端/12-设计分布式ID发号器.md", + "targetRelativePath": "后端/12-设计分布式ID发号器.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b48c8150ccaf6a7168bf2362345826310cd44eac996e3fd85098a9f346407ae7" + }, + { + "sourceRelativePath": "src/后端/106-LIMIT-OFFSET分页同步丢数据.md", + "targetRelativePath": "后端/106-LIMIT-OFFSET分页同步丢数据.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bd6db32bbb75daa8cafd17fe79038094c8ad650a08a2a507ab008e2e41b83843" + }, + { + "sourceRelativePath": "src/后端/101-MySQL亿级数据快速加索引.md", + "targetRelativePath": "后端/101-MySQL亿级数据快速加索引.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a1d53af98667a174911e2379c9f3fcfb77c14dbe75df46556d704a4b092c6442" + }, + { + "sourceRelativePath": "src/后端/92-新项目上线关注指标.md", + "targetRelativePath": "后端/92-新项目上线关注指标.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a261c6185be0007b0bfc0feeeb2a4673b055dde2ee5e8b6c94c72b599e0cb9fb" + }, + { + "sourceRelativePath": "src/后端/86-LLM千用户并发吞吐分析.md", + "targetRelativePath": "后端/86-LLM千用户并发吞吐分析.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "32625e09862873ddc9c6a1efdf12235186d5cff9d46bc731c150febebcc65f3a" + }, + { + "sourceRelativePath": "src/后端/04-设计秒杀功能.md", + "targetRelativePath": "后端/04-设计秒杀功能.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e453ec6a6f9addaa8871a676c923bdbeba5ffe5532e2830a00278bd4bedf61d8" + }, + { + "sourceRelativePath": "src/后端/76-不用大小于号比较正整数.md", + "targetRelativePath": "后端/76-不用大小于号比较正整数.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "70b5bb8c8e8a0717247793922afb7bb88cef9f1d36c1ba5d9e92c95f3ba4dea4" + }, + { + "sourceRelativePath": "src/后端/17-不用sleep制造必然死锁.md", + "targetRelativePath": "后端/17-不用sleep制造必然死锁.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b0c3545ad896674ad03de88cfeacb9fcfd9eaa1ae7aac2697a0e06733312ca14" + }, + { + "sourceRelativePath": "src/后端/25-线上CPULoad飙高排查.md", + "targetRelativePath": "后端/25-线上CPULoad飙高排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0ae7fc2aa4fc07191613a1740bf9b6f406e76dc5a94d81edbe34922f328ffddc" + }, + { + "sourceRelativePath": "src/后端/01-避免支付宝八折优惠类事故.md", + "targetRelativePath": "后端/01-避免支付宝八折优惠类事故.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8088058b1e36cbe11e1642c81f2672d82875658a8e05895b988d02139bd1294e" + }, + { + "sourceRelativePath": "src/后端/64-朋友圈点赞设计.md", + "targetRelativePath": "后端/64-朋友圈点赞设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "774f00f9a02f9d48689a9ccfb867571a1bf88c689b6fee4048685c95c447fe1c" + }, + { + "sourceRelativePath": "src/后端/61-千任务一秒线程池参数.md", + "targetRelativePath": "后端/61-千任务一秒线程池参数.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "442924df499b7894d3f3d1a1abde2b9dd3cae883fb6588b9fcb44631633a814d" + }, + { + "sourceRelativePath": "src/后端/38-网关到后端RPC超时预算.md", + "targetRelativePath": "后端/38-网关到后端RPC超时预算.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d1c30cc9cc2ceafdbce1628e535e03d2234357b003e66289c72beac69eea2e74" + }, + { + "sourceRelativePath": "src/后端/81-关联表与冗余字段权衡.md", + "targetRelativePath": "后端/81-关联表与冗余字段权衡.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ac95c3c06e42818aea0da5badf4f5edcf1ee53a098723871450140e85c84af53" + }, + { + "sourceRelativePath": "src/后端/74-几行代码实现负载均衡器.md", + "targetRelativePath": "后端/74-几行代码实现负载均衡器.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7cf1dc1847a46a168b2a27a92b5d4275c983a5b7de7aea9ee9d4092eea6a58b3" + }, + { + "sourceRelativePath": "src/后端/22-抢红包金额算法.md", + "targetRelativePath": "后端/22-抢红包金额算法.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7d6ce7410f9272e9283ec74c4fdbb961c4758cbfd4410185f5f1b8fb2095366d" + }, + { + "sourceRelativePath": "src/后端/34-百万Excel数据导入数据库.md", + "targetRelativePath": "后端/34-百万Excel数据导入数据库.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "34d25769f7cc1da2c71a59deb0285ea5a01639581091d9893835937ab127ff20" + }, + { + "sourceRelativePath": "src/后端/87-JWT安全设计.md", + "targetRelativePath": "后端/87-JWT安全设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "989c4e64276eae04f18eb95e1f239743e5a8fe2733a7f39ba6d0dfd9f2600831" + }, + { + "sourceRelativePath": "src/后端/08-实现分布式单例对象.md", + "targetRelativePath": "后端/08-实现分布式单例对象.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e48f9afcc46b1bf5037a09a045ac68886789d65a975f9bb767f1172413c65095" + }, + { + "sourceRelativePath": "src/后端/94-验证码接口恶意滥用治理.md", + "targetRelativePath": "后端/94-验证码接口恶意滥用治理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8307ec5a312647f8205f572f34c8b9d0643f1d29391404f8991f9b9df14198c9" + }, + { + "sourceRelativePath": "src/后端/98-最大在线人数与最长持续时间.md", + "targetRelativePath": "后端/98-最大在线人数与最长持续时间.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "71be1a053cece92198be9459073062420ac1462590a4a85a4e2885d9f2cc3041" + }, + { + "sourceRelativePath": "src/后端/105-高可用数据同步系统.md", + "targetRelativePath": "后端/105-高可用数据同步系统.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "610194f05bfe655bde0fd82ece1346bb42b3ceef767b2842151220a2a654f1a8" + }, + { + "sourceRelativePath": "src/后端/24-线上服务器CPU飙高排查.md", + "targetRelativePath": "后端/24-线上服务器CPU飙高排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "dabbf8aa76b2851d48636981bd4bfcc0e7e0b3511dc773e85a05e859964bb6a5" + }, + { + "sourceRelativePath": "src/后端/70-Java非堆内存持续增长.md", + "targetRelativePath": "后端/70-Java非堆内存持续增长.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c951b15d0fe2f2611ec9556c0b59be0cae8b15df73b8c2b29f0fc2c4c97cffd4" + }, + { + "sourceRelativePath": "src/后端/49-消息队列故障兜底改造.md", + "targetRelativePath": "后端/49-消息队列故障兜底改造.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "369ed212e46b10b5b63981ad1db29e5e8eb3a8551135f3cd3f633a42cf6eb805" + }, + { + "sourceRelativePath": "src/后端/71-稀疏用户ID的Bitmap问题.md", + "targetRelativePath": "后端/71-稀疏用户ID的Bitmap问题.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "96e708bb5f1720dd44ff921513e2a9b6939035b4272a06732f141bfbf1b4ea5b" + }, + { + "sourceRelativePath": "src/后端/114-配置中心设计与实时通知.md", + "targetRelativePath": "后端/114-配置中心设计与实时通知.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e50e192ac994e4d8efa6fab5040cbac6c2b5884cd0f77a5584f46f842ced6b32" + }, + { + "sourceRelativePath": "src/后端/23-设计HashMap.md", + "targetRelativePath": "后端/23-设计HashMap.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "978b54a5950f8e3cb2b11a03d0399f9e866acab23cb7c0db7fee5e93bb18e635" + }, + { + "sourceRelativePath": "src/后端/02-设计RPC框架.md", + "targetRelativePath": "后端/02-设计RPC框架.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f7fe8e09b933c3e83bd8073bc33cd550691fa6c591be55858847d00f55cf8b57" + }, + { + "sourceRelativePath": "src/后端/113-网关防重放攻击.md", + "targetRelativePath": "后端/113-网关防重放攻击.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "29b49544181ebc77b2d44dbf5d068dd5d58c684517391528ae66e0c9deb00e2f" + }, + { + "sourceRelativePath": "src/后端/29-数据库存储IP地址.md", + "targetRelativePath": "后端/29-数据库存储IP地址.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "82a40c42f1e12722c8f98d3cf7a19cc413ba32cd351f8013872d519cce2506e0" + }, + { + "sourceRelativePath": "src/后端/45-MySQL索引效果排查.md", + "targetRelativePath": "后端/45-MySQL索引效果排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "51d17c80d0069901d9308d8e3758f34e7da749967fb85e1962662c8477953414" + }, + { + "sourceRelativePath": "src/后端/54-附近商户最近5家检索.md", + "targetRelativePath": "后端/54-附近商户最近5家检索.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6cb6da6679171f7e3d845d1c447685bada6cf1e2f01279409e727f0cba8a9555" + }, + { + "sourceRelativePath": "src/后端/79-Linux命令执行过程.md", + "targetRelativePath": "后端/79-Linux命令执行过程.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f4e37e38ba00aa970a24ce27c8a8a9ab3c9cf3333ece8f82527ecc6d8e71c7e9" + }, + { + "sourceRelativePath": "src/后端/116-订单库存支付分布式事务.md", + "targetRelativePath": "后端/116-订单库存支付分布式事务.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "cc63d9f7bc047279590c51ff5cb28ae366aea304e7e7bcdd379d0ec874102abc" + }, + { + "sourceRelativePath": "src/后端/108-双十一同步消息堆积处理.md", + "targetRelativePath": "后端/108-双十一同步消息堆积处理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "136971dfe558bedb8976fb439ad5d17bb4bb9a4add34d6e593836437553a7e9d" + }, + { + "sourceRelativePath": "src/后端/20-40亿QQ号在1GB内存中去重.md", + "targetRelativePath": "后端/20-40亿QQ号在1GB内存中去重.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7d968f3ca57c56b62853de3c126fb34e1e7172e9b35f2fe6f05bb6ed4aa4c1b2" + }, + { + "sourceRelativePath": "src/后端/112-API网关接口版本管理.md", + "targetRelativePath": "后端/112-API网关接口版本管理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3e7064a115e961bc77564ca4307bef603815ec9078cda6db3434154299f4089e" + }, + { + "sourceRelativePath": "src/后端/110-同步任务中途失败一致性.md", + "targetRelativePath": "后端/110-同步任务中途失败一致性.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6ac9065f75ae75bf7e093bdd90e4c04109461691c3f12723544f3bad2b90c778" + }, + { + "sourceRelativePath": "src/后端/88-CDN安装包流量异常排查.md", + "targetRelativePath": "后端/88-CDN安装包流量异常排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5a68116b7dd06446d8165c40a77a96a9ead1d718eded666acce0892f580bb700" + }, + { + "sourceRelativePath": "src/后端/56-分布式锁与并发度.md", + "targetRelativePath": "后端/56-分布式锁与并发度.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0e7a55939f50266b4f6f7243972bfc0c09f509435abd52bd6182840c461934e9" + }, + { + "sourceRelativePath": "src/后端/119-灰度发布系统设计.md", + "targetRelativePath": "后端/119-灰度发布系统设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "330bcec024b4d5d8c1ffa4c9e254ac555d99149e2edc0b6f5f34c3fb7aed5c72" + }, + { + "sourceRelativePath": "src/后端/09-分布式锁的实现.md", + "targetRelativePath": "后端/09-分布式锁的实现.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "336298f22ceff51f4d23eed70dc10b4e745dd175a6e06afdcd3402c6c3c4180e" + }, + { + "sourceRelativePath": "src/后端/72-本地操作与远程操作事务一致性.md", + "targetRelativePath": "后端/72-本地操作与远程操作事务一致性.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0cae4484f8e7ba5c68743621e70c3f6bf600209ef5bd6559c1086b39797983d6" + }, + { + "sourceRelativePath": "src/后端/53-多生产者单消费者锁设计.md", + "targetRelativePath": "后端/53-多生产者单消费者锁设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0cba709d186bad2b5b0ec8a9a3ac06e235e301717f163aeaa3ef43f0662274c5" + }, + { + "sourceRelativePath": "src/后端/10-统计每个接口每分钟调用次数.md", + "targetRelativePath": "后端/10-统计每个接口每分钟调用次数.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "52161204571e84d962ae0de6bb9be5cc737f26247f35860f9b4200387f07bbb3" + }, + { + "sourceRelativePath": "src/后端/46-订单列表全量同步优化.md", + "targetRelativePath": "后端/46-订单列表全量同步优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d867a053bece44741bcd3921595cfa686eadef3096763bcf4a9c24dda7751491" + }, + { + "sourceRelativePath": "src/后端/05-设计消息队列.md", + "targetRelativePath": "后端/05-设计消息队列.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f6ba830258f9152a03cd07db091eaf8516cd5bbe9a2fbc7f3c285e4d177480b8" + }, + { + "sourceRelativePath": "src/后端/104-MySQL实时同步数仓系统.md", + "targetRelativePath": "后端/104-MySQL实时同步数仓系统.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bef8e34a5a9d1e1631e697e19dd9bea13c5b3284d9194b742039a6a1a9026b67" + }, + { + "sourceRelativePath": "src/后端/66-跨十几个服务慢请求排查.md", + "targetRelativePath": "后端/66-跨十几个服务慢请求排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "777f56c708d2a40cb6c5b7ebe1539bcd2ec60951bff386f34e0f31a3517ebb48" + }, + { + "sourceRelativePath": "src/后端/57-设计购物车.md", + "targetRelativePath": "后端/57-设计购物车.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fd9d44385a7e55e7df8e657ee7fa5e50344b761a7983b52b340107bea77b69b2" + }, + { + "sourceRelativePath": "src/后端/18-QPS一万是否需要微服务拆分.md", + "targetRelativePath": "后端/18-QPS一万是否需要微服务拆分.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5cb952262fde17bbdbc5d7f4d1a6a3af76ec7f8c2cc0a247ca0301e8bfc94e0e" + }, + { + "sourceRelativePath": "src/后端/73-多机部署共享登录信息.md", + "targetRelativePath": "后端/73-多机部署共享登录信息.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3a5cc6f0796a934221f5a97e659adecfc407e267bfa08d9df5eb8840145a8bf5" + }, + { + "sourceRelativePath": "src/后端/28-500G数据外部排序.md", + "targetRelativePath": "后端/28-500G数据外部排序.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ea806e722406285a33bd09611f007e2fb2a2e2a21ea90602bf74813ebe591dbc" + }, + { + "sourceRelativePath": "src/后端/19-系统每天固定瘫痪一小时.md", + "targetRelativePath": "后端/19-系统每天固定瘫痪一小时.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a348cd392c095a984c513ea92446e4b986596e6fa2268e0290f43cc23e8ccf6c" + }, + { + "sourceRelativePath": "src/后端/120-灰度发布数据一致性与Schema变更.md", + "targetRelativePath": "后端/120-灰度发布数据一致性与Schema变更.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ede38b227aa7d03fbdb9e8382aa884620274bff5baaf715f5bc42dbc6547944f" + }, + { + "sourceRelativePath": "src/后端/42-数据库不停服迁移.md", + "targetRelativePath": "后端/42-数据库不停服迁移.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a27f594111dc87e627bd40f0ccb47095046a64b447201bade6f97516f66e8171" + }, + { + "sourceRelativePath": "src/后端/35-微信支付宝同时支付同一订单.md", + "targetRelativePath": "后端/35-微信支付宝同时支付同一订单.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c9d5f48b7d91c20ec0a6d01b98bb3fae938cf16672c165e2c7da7b4980fe8619" + }, + { + "sourceRelativePath": "src/后端/06-消息队列推模式与拉模式.md", + "targetRelativePath": "后端/06-消息队列推模式与拉模式.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bb973d17cb5784d210367f77a222c41a18fe92608e4c484f83f97d4116027c0e" + }, + { + "sourceRelativePath": "src/后端/03-统计5000万时间区间的最大并发量.md", + "targetRelativePath": "后端/03-统计5000万时间区间的最大并发量.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5fbc5ccd3953ceb47b37cd2f764f0780b0e03b93373072da63817eb8ec77a388" + }, + { + "sourceRelativePath": "src/后端/43-MySQL-SQL调优.md", + "targetRelativePath": "后端/43-MySQL-SQL调优.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "914fe9cc373972a7b98d35206bd163f00206cd3c54e56adb3fa0116c162115c8" + }, + { + "sourceRelativePath": "src/后端/107-数据同步OOM排查与解决.md", + "targetRelativePath": "后端/107-数据同步OOM排查与解决.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8cbc55ba975e43b6465910ba830d25cfa4c4c2be0772fe99a7e2145abc1a8e13" + }, + { + "sourceRelativePath": "src/后端/97-国内到海外数据传输延迟优化.md", + "targetRelativePath": "后端/97-国内到海外数据传输延迟优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a6975b967c8d54c6c27babcedd6eca0545fecf411928e420a3e24673b330ed85" + }, + { + "sourceRelativePath": "src/后端/90-多数据库适配设计.md", + "targetRelativePath": "后端/90-多数据库适配设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "589a5db985e47bbb7dfd6b87001813ba18363e576cb1c4783790d04904d9af36" + }, + { + "sourceRelativePath": "src/后端/14-即时通讯历史消息分页.md", + "targetRelativePath": "后端/14-即时通讯历史消息分页.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "57ca0884dfce971816786df259c34cd8f0675da16bb82aa56af42e050f62618b" + }, + { + "sourceRelativePath": "src/后端/32-Redis机器爆了如何优化.md", + "targetRelativePath": "后端/32-Redis机器爆了如何优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f07e16bb9438af28cf2445791d97ff8e35faa2e5213176db972808f765c8ae4b" + }, + { + "sourceRelativePath": "src/后端/50-设计点赞系统.md", + "targetRelativePath": "后端/50-设计点赞系统.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9aa5e20fa837978b7aaf1e1ed067d653cc45cb4f4ae75535c82963eaa308c928" + }, + { + "sourceRelativePath": "src/后端/48-SpringCloudGateway-500排查.md", + "targetRelativePath": "后端/48-SpringCloudGateway-500排查.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4df84ad1f0a5a0e1ebe2e3adcdd77f26080b70b8abfd9306016104b20148130b" + }, + { + "sourceRelativePath": "src/后端/37-微服务远程调用超时设置.md", + "targetRelativePath": "后端/37-微服务远程调用超时设置.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4e93e1716f8d7a1e7aa0f5ab87c560547f7eb0abe3d9e13bbc8c56d521b5f187" + }, + { + "sourceRelativePath": "src/后端/27-敏感词过滤设计.md", + "targetRelativePath": "后端/27-敏感词过滤设计.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8510deaf453ccca5067d4d6e2ac2d360b25edd705220743d4735cd8ffde4c6de" + }, + { + "sourceRelativePath": "src/后端/44-MySQL深度分页优化.md", + "targetRelativePath": "后端/44-MySQL深度分页优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "752837d41508d5a46149d3b164690220201b83280040adcc8b73c96a990dad1d" + }, + { + "sourceRelativePath": "src/后端/117-分布式事务补偿机制.md", + "targetRelativePath": "后端/117-分布式事务补偿机制.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3bf4e5a36e93d54b7b1b4e36bcc641a99cb5c88fe2b0a224ec7245c94cbd1df6" + }, + { + "sourceRelativePath": "src/后端/75-踢已登录用户下线.md", + "targetRelativePath": "后端/75-踢已登录用户下线.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b60df816f306656655f761a898b028765a93422b92fd047a148a39dd76cb0eea" + }, + { + "sourceRelativePath": "面试题合集/AI-Agent工程师/小红书.md", + "targetRelativePath": "面试题合集/AI-Agent工程师/小红书.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "浏览器工作原理/面试题/前端性能优化篇.md", + "targetRelativePath": "八股文/浏览器原理/前端性能优化篇.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "浏览器工作原理/面试题/浏览器原理面试题汇总.md", + "targetRelativePath": "八股文/浏览器原理/浏览器原理面试题汇总.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/Antd 组件库/Antd 表单基础使用.md", + "targetRelativePath": "React/Antd 组件库/Antd 表单基础使用.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/Antd 组件库/Antd Pro 新手上路基础知识.md", + "targetRelativePath": "React/Antd 组件库/Antd Pro 新手上路基础知识.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/React 状态更新.md", + "targetRelativePath": "React/源码学习/React 状态更新.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/structure.md", + "targetRelativePath": "React/源码学习/structure.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "React/源码学习/Hooks 解析.md", + "targetRelativePath": "React/源码学习/Hooks 解析.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/React 中的 Fiber(纤程)及其工作原理.md", + "targetRelativePath": "React/源码学习/React 中的 Fiber(纤程)及其工作原理.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/render 阶段流程.md", + "targetRelativePath": "React/源码学习/render 阶段流程.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/commit 阶段流程.md", + "targetRelativePath": "React/源码学习/commit 阶段流程.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/React 源码文件结构.md", + "targetRelativePath": "React/源码学习/React 源码文件结构.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/React 架构.md", + "targetRelativePath": "React/源码学习/React 架构.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/React 理念.md", + "targetRelativePath": "React/源码学习/React 理念.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/源码学习/深入理解JSX.md", + "targetRelativePath": "React/源码学习/深入理解JSX.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/面试题/React 面试.md", + "targetRelativePath": "八股文/React/React 面试.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/面试题/React 面试题(二).md", + "targetRelativePath": "八股文/React/React 面试题(二).md", + "recommendation": "update_existing", + "action": "updated", + "rationale": "new related-article link; source link must be remapped to React/执行和清除Effect的时机.md", + "resultHash": "3229222adf0027f23ebf8efe9b749a45c76229b977def04c20e877d10f9dd4ed" + }, + { + "sourceRelativePath": "React/面试题/React 面试题(一).md", + "targetRelativePath": "八股文/React/React 面试题(一).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/umi框架/UmiJS 乌米学习实战.md", + "targetRelativePath": "元框架/Umi/UmiJS 乌米学习实战.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Native/React Native 基础.md", + "targetRelativePath": "React/React Native/React Native 基础.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/自定义 Hooks.md", + "targetRelativePath": "React/React Hooks笔记/自定义 Hooks.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/Hooks 实战篇.md", + "targetRelativePath": "React/React Hooks笔记/Hooks 实战篇.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/Hooks :如何正确理解函数组件的生命周期?.md", + "targetRelativePath": "React/React Hooks笔记/Hooks :如何正确理解函数组件的生命周期?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/自定义事件.md", + "targetRelativePath": "React/React Hooks笔记/自定义事件.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/Hooks(2):避免重复定义回调函数.md", + "targetRelativePath": "React/React Hooks笔记/Hooks(2):避免重复定义回调函数.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/React Hooks 基础.md", + "targetRelativePath": "React/React Hooks笔记/React Hooks 基础.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/如何展示对话框,并给对话框传递参数?.md", + "targetRelativePath": "React/React Hooks笔记/如何展示对话框,并给对话框传递参数?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/在函数组件中使用 Redux.md", + "targetRelativePath": "React/React Hooks笔记/在函数组件中使用 Redux.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/内置 Hooks(1):如何保存组件状态和使用生命周期?.md", + "targetRelativePath": "React/React Hooks笔记/内置 Hooks(1):如何保存组件状态和使用生命周期?.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/函数组件设计模式.md", + "targetRelativePath": "React/React Hooks笔记/函数组件设计模式.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/React 实现按需加载.md", + "targetRelativePath": "React/React Hooks笔记/React 实现按需加载.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/React Hooks笔记/路由管理.md", + "targetRelativePath": "React/React Hooks笔记/路由管理.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "React/Dva/dva 数据获取和处理.md", + "targetRelativePath": "React/Dva/dva 数据获取和处理.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "94aff4e564f883c4bb603b8bbd2a9f65de97e3ecf8552ac0a0558166540b675d" + }, + { + "sourceRelativePath": "牛客/错题本/HTML刷题【错题本】.md", + "targetRelativePath": "牛客/错题本/HTML刷题【错题本】.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c79d08ce662126dd7626f3e37af53e387950f58970bcf1379251e5bfb388d52f" + }, + { + "sourceRelativePath": "牛客/错题本/计算机网络基础【错题本】.md", + "targetRelativePath": "牛客/错题本/计算机网络基础【错题本】.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5fe00c4b6fd68e51ae8bbd9ed4d4e7b874e382f952650028f68013effe0d6469" + }, + { + "sourceRelativePath": "牛客/错题本/JavaScript刷题【错题本】.md", + "targetRelativePath": "牛客/错题本/JavaScript刷题【错题本】.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "508c27d906b692475ccbc64da20a6c837bd3c898780b32a76a224ae2eb876539" + }, + { + "sourceRelativePath": "牛客/错题本/CSS刷题【错题本】.md", + "targetRelativePath": "牛客/错题本/CSS刷题【错题本】.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "67eb60560bad74b7b999729de756736a4c91982265155aaa58f090e2aedf349c" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(2)模块化.md", + "targetRelativePath": "Node/笔记/Node 笔记(2)模块化.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(3)Node常用内置模块.md", + "targetRelativePath": "Node/笔记/Node 笔记(3)Node常用内置模块.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(7)Buffer的使用.md", + "targetRelativePath": "Node/笔记/Node 笔记(7)Buffer的使用.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(9)深入事件循环.md", + "targetRelativePath": "Node/笔记/Node 笔记(9)深入事件循环.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(6)Stream.md", + "targetRelativePath": "Node/笔记/Node 笔记(6)Stream.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(1)内核引擎.md", + "targetRelativePath": "Node/笔记/Node 笔记(1)内核引擎.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(4)包管理工具.md", + "targetRelativePath": "Node/笔记/Node 笔记(4)包管理工具.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(5)开发脚手架工具.md", + "targetRelativePath": "Node/笔记/Node 笔记(5)开发脚手架工具.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/笔记/Node 笔记(8)Http模块.md", + "targetRelativePath": "Node/笔记/Node 笔记(8)Http模块.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/事件循环/(六).md", + "targetRelativePath": "Node/事件循环/(六).md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7549445789d5918df377935a4f249b9a80c79d8e17562a5bec9bbf8cbccaf8bc" + }, + { + "sourceRelativePath": "Node/事件循环/(一)可视化理解 Node.js 事件循环的完整指南.md", + "targetRelativePath": "Node/笔记/(一)可视化理解 Node.js 事件循环的完整指南.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/事件循环/(四)Node.js事件循环中的IO队列可视化.md", + "targetRelativePath": "Node/笔记/(四)Node.js事件循环中的IO队列可视化.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/事件循环/(二)在 Node.js 事件循环中可视化 nextTick 和 Promise 队列.md", + "targetRelativePath": "Node/笔记/(二)在 Node.js 事件循环中可视化 nextTick 和 Promise 队列.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/事件循环/(三)Node.js中的定时器队列可视化.md", + "targetRelativePath": "Node/笔记/(三)Node.js中的定时器队列可视化.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/事件循环/(五)在 Node.js 事件循环中可视化 IO 轮询.md", + "targetRelativePath": "Node/笔记/(五)在 Node.js 事件循环中可视化 IO 轮询.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/事件循环/(七).md", + "targetRelativePath": "Node/事件循环/(七).md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "Node/面试题/Node.js 面试题大集合.md", + "targetRelativePath": "Node/面试题/Node.js 面试题大集合.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "bb2442e7716663d28db53e5980ee09077697491beb920be13009f14c7b055f62" + }, + { + "sourceRelativePath": "Node/lib/利用Node.js脚本提取你的OPML文件信息.md", + "targetRelativePath": "Node/lib/利用Node.js脚本提取你的OPML文件信息.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4bb0755eb1fe346e42a0323338ecf4646d34ef26daaf48f2bab4558da875f7e2" + }, + { + "sourceRelativePath": "Node/lib/jsdom.md", + "targetRelativePath": "Node/lib/jsdom.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c3ed62c73c08812fbdf0b5bf194be329874b7649f0827ad0f3a8d6f3537c00bc" + }, + { + "sourceRelativePath": "Node/lib/解析XML数据:使用xml2js库轻松进行XML解析.md", + "targetRelativePath": "Node/lib/解析XML数据:使用xml2js库轻松进行XML解析.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2204e9d094703bcaf02f49bac7cd4afb1b10f34351f78611d6ce6a202eb66d28" + }, + { + "sourceRelativePath": "Node/lib/nodemailer:让Node.js 脚本帮你收发邮件.md", + "targetRelativePath": "Node/nodemailer:让Node.js 脚本帮你收发邮件.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Node/NPM/NPM 包管理.md", + "targetRelativePath": "Node/NPM/NPM 包管理.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Node/NPM/深入了解npmrc:使用与配置指南.md", + "targetRelativePath": "Node/NPM/深入了解npmrc:使用与配置指南.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f211acfb09b8050f8cfdcc68f738ef9233e45f7e0733abe73cff78aa383e31b5" + }, + { + "sourceRelativePath": "Node/NPM/版本语义化.md", + "targetRelativePath": "Node/NPM/版本语义化.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "Node/NPM/NPM 源设置和管理方法.md", + "targetRelativePath": "Node/NPM/NPM 源设置和管理方法.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/库/quill.js 的文本库 —— delta 的使用.md", + "targetRelativePath": "JavaScript/库/quill.js 的文本库 —— delta 的使用.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "796d105ee3eae8dfc6778250928ce3ee34640ef3e29fb575d483370c01aae766" + }, + { + "sourceRelativePath": "JavaScript/库/husky.md", + "targetRelativePath": "JavaScript/库/husky.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "JavaScript/库/enquirer 指南.md", + "targetRelativePath": "Node/库/enquirer 指南.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/库/validate-npm-package-name 小而美的库.md", + "targetRelativePath": "JavaScript/库/validate-npm-package-name 小而美的库.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "JavaScript/库/Puppeteer 使用指南.md", + "targetRelativePath": "Node/库/Puppeteer 使用指南.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/库/Quill富文本编辑器使用 - 高度自定义现代 Web 富文本编辑器.md", + "targetRelativePath": "JavaScript/库/Quill富文本编辑器使用 - 高度自定义现代 Web 富文本编辑器.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6ac19a2da8dfe73f5e9acfbd0bd2aad5befe6becc656a9003922a0cc652be237" + }, + { + "sourceRelativePath": "JavaScript/库/JS代码混淆器:JavaScript obfuscator 让你的代码看起来让人痛苦.md", + "targetRelativePath": "JavaScript/库/JS代码混淆器:JavaScript obfuscator 让你的代码看起来让人痛苦.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "78043dcbd5a112f65fbd50c96e0c8b45ce93aa73d2927d65de51e956bdb30d27" + }, + { + "sourceRelativePath": "JavaScript/库/Esprima 指南.md", + "targetRelativePath": "Node/库/Esprima 指南.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/库/Git 相关工具.md", + "targetRelativePath": "Node/库/Git 相关工具.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/库/inquirer 使用指南.md", + "targetRelativePath": "Node/库/inquirer 使用指南.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/库/yargs 使用指南.md", + "targetRelativePath": "Node/库/yargs 使用指南.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/库/Vue 3 meta.md", + "targetRelativePath": "Node/库/Vue 3 meta.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/库/ESLint.md", + "targetRelativePath": "Node/库/ESLint.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/库/Prettier.md", + "targetRelativePath": "JavaScript/库/Prettier.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "JavaScript/库/enquirer 使用指南.md", + "targetRelativePath": "Node/库/enquirer 指南.md", + "recommendation": "skip_source_duplicate", + "action": "skipped", + "rationale": "same source article body as JavaScript/库/enquirer 指南.md after ignoring first H1" + }, + { + "sourceRelativePath": "JavaScript/库/ora 优雅的终端旋转器.md", + "targetRelativePath": "Node/库/ora 优雅的终端旋转器.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "JavaScript/面试题/小滴课堂JS题目汇总.md", + "targetRelativePath": "八股文/JavaScript/小滴课堂JS题目汇总.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/面试题/JavaScript 数组去重.md", + "targetRelativePath": "八股文/JavaScript/JavaScript 数组去重.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/面试题/JavaScript 高频手撕.md", + "targetRelativePath": "八股文/JavaScript/JavaScript 高频手撕.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/面试题/JavaScript高频手撕.md", + "targetRelativePath": "八股文/JavaScript/JavaScript高频手撕.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/面试题/JavaScript 输出判断.md", + "targetRelativePath": "八股文/JavaScript/JavaScript 输出判断.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/面试题/JavaScript 面试题汇总(上).md", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(上).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/面试题/JavaScript 面试题汇总(下).md", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(下).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/WebAudio/Web Audio 滤波器Filter.md", + "targetRelativePath": "JavaScript/WebAudio/Web Audio 滤波器Filter.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "JavaScript/WebAudio/Tone.js 框架食用指南.md", + "targetRelativePath": "JavaScript/WebAudio/Tone.js 框架食用指南.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "MySQL/面试题/07-exists-vs-in.md", + "targetRelativePath": "MySQL/面试题/07-exists-vs-in.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8a43137c06c22132d369ae39ea87af0c2a3b9e1d0442c3845161a262ef84354f" + }, + { + "sourceRelativePath": "MySQL/面试题/26-redo-log.md", + "targetRelativePath": "MySQL/面试题/26-redo-log.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "92d902bf057f811ef107735abf45be78cc583991e24237981ff3e594678e90b4" + }, + { + "sourceRelativePath": "MySQL/面试题/14-union-vs-union-all.md", + "targetRelativePath": "MySQL/面试题/14-union-vs-union-all.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fd5875bf475fbb5987fbb96d1ad843f54c231c1526d0e037cd4ecb612d8e7532" + }, + { + "sourceRelativePath": "MySQL/面试题/35-isolation-levels.md", + "targetRelativePath": "MySQL/面试题/35-isolation-levels.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f4775ba1b61d2ee8facdec1ded8e2e01a849e51e2631496705613139994525ff" + }, + { + "sourceRelativePath": "MySQL/面试题/13-sql-vs-nosql.md", + "targetRelativePath": "MySQL/面试题/13-sql-vs-nosql.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "90ddb95dffc6e057e78fcac5fa002ad94ee57b4765fefa0708930f2b58e194bd" + }, + { + "sourceRelativePath": "MySQL/面试题/39-slow-sql.md", + "targetRelativePath": "MySQL/面试题/39-slow-sql.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4309f41bc116d68304131bf1de17a378a2e3f7cf4a15a88fd35c09c6bb041248" + }, + { + "sourceRelativePath": "MySQL/面试题/01-sharding-when.md", + "targetRelativePath": "MySQL/面试题/01-sharding-when.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "27144c477832817b0d971333542a8a62a66ef9a0c8dc8ea6686181c69ec62672" + }, + { + "sourceRelativePath": "MySQL/面试题/25-binlog.md", + "targetRelativePath": "MySQL/面试题/25-binlog.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "67b74e6bfc58a69775eaac7349499e1e2abec612376d6d7cb2dac7bb323ba01b" + }, + { + "sourceRelativePath": "MySQL/面试题/33-mvcc.md", + "targetRelativePath": "MySQL/面试题/33-mvcc.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3ceac0a26005a79db60d3956f4b4b3ed43e1f2985e1843fb8160fe3eb803e71e" + }, + { + "sourceRelativePath": "MySQL/面试题/28-binlog-redo-two-phase.md", + "targetRelativePath": "MySQL/面试题/28-binlog-redo-two-phase.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "865b2c4d59bb8ace267c0e3c86426fa5acefd34149cb484c1ff9b24147848413" + }, + { + "sourceRelativePath": "MySQL/面试题/29-mysql-log-flush.md", + "targetRelativePath": "MySQL/面试题/29-mysql-log-flush.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "46fc3db3eca1caf441934ec02948791698cc4a119d66c4aeb878354d6ad68548" + }, + { + "sourceRelativePath": "MySQL/面试题/18-index-not-used-explain.md", + "targetRelativePath": "MySQL/面试题/18-index-not-used-explain.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "cd3869104bd310813b9ca2805c74f0ac401994a941665f70389a25d656e8f36e" + }, + { + "sourceRelativePath": "MySQL/面试题/12-null-semantics.md", + "targetRelativePath": "MySQL/面试题/12-null-semantics.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b6d90c968a4a891a1d76140194e0c95ebbec14a514a54220a7c99a190cf60203" + }, + { + "sourceRelativePath": "MySQL/面试题/36-mysql-lock-types.md", + "targetRelativePath": "MySQL/面试题/36-mysql-lock-types.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "44dfc55a02c013c3ef4f405b3e755d7d4ba25d2b95d7579c013f6c3768856341" + }, + { + "sourceRelativePath": "MySQL/面试题/31-transaction-acid.md", + "targetRelativePath": "MySQL/面试题/31-transaction-acid.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "74862b35b4312c23ce149ab529efc8b31b4ba238ea717a395355d9d132ee3824" + }, + { + "sourceRelativePath": "MySQL/面试题/10-storage-engines.md", + "targetRelativePath": "MySQL/面试题/10-storage-engines.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a502558c1a64c58b8bc72cab69f982f20943593300b370731124779db52030ac" + }, + { + "sourceRelativePath": "MySQL/面试题/15-varchar-space.md", + "targetRelativePath": "MySQL/面试题/15-varchar-space.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f84b50c157729a415d5f797e71a936cac042f6c8e37ae697e1e2aaf303060543" + }, + { + "sourceRelativePath": "MySQL/面试题/09-mysql-cache-vs-redis.md", + "targetRelativePath": "MySQL/面试题/09-mysql-cache-vs-redis.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c314974aef995287404bf8caa6901833c2f8d745997c2afb0a03b6e5b819f925" + }, + { + "sourceRelativePath": "MySQL/面试题/08-query-execution-optimizer.md", + "targetRelativePath": "MySQL/面试题/08-query-execution-optimizer.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "92d0e2aa660d45574f179a3251ed4023a01119a786b8773df7fd29c3025f78b4" + }, + { + "sourceRelativePath": "MySQL/面试题/19-covering-index-icp.md", + "targetRelativePath": "MySQL/面试题/19-covering-index-icp.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7291f183110d374d6a50811c8b3704e89623cfad094867c90c5e9c75f4d35fc2" + }, + { + "sourceRelativePath": "MySQL/面试题/11-mysql-constraints.md", + "targetRelativePath": "MySQL/面试题/11-mysql-constraints.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "da7ba1e141e3a20a6b825becde07a794df1ecd95d5d345b4d1bc6851a6aea4b6" + }, + { + "sourceRelativePath": "MySQL/面试题/03-normalization.md", + "targetRelativePath": "MySQL/面试题/03-normalization.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fb0d5774f392820df38875d232a61ead68c7ad5352592626f7d1729584e1f949" + }, + { + "sourceRelativePath": "MySQL/面试题/21-leftmost-prefix.md", + "targetRelativePath": "MySQL/面试题/21-leftmost-prefix.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0659a612b2aa8e60c36062762668103015320e6d40242a75a5299fafca7fe4db" + }, + { + "sourceRelativePath": "MySQL/面试题/05-count-usage.md", + "targetRelativePath": "MySQL/面试题/05-count-usage.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3a6417296f41c311a65d778188b0a9f28add570fc3fe8370b5dc720921a49fcc" + }, + { + "sourceRelativePath": "MySQL/面试题/16-where-vs-having.md", + "targetRelativePath": "MySQL/面试题/16-where-vs-having.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "13f9b24464dc8932446cd6a4b62028c351385ba552c770fa6afc0785a1be122e" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "targetRelativePath": "MySQL/面试题/README.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "29edf00a7dd15e11ac2340e0b5df376ed5d9fe282f5f1d8bf05d60efcefc3ffd" + }, + { + "sourceRelativePath": "MySQL/面试题/30-optimistic-pessimistic-lock.md", + "targetRelativePath": "MySQL/面试题/30-optimistic-pessimistic-lock.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b7f057d1cfdc6d05d861a3c3021849adfc3411df6f00b50f100b7dfab71b08db" + }, + { + "sourceRelativePath": "MySQL/面试题/44-replication-lag.md", + "targetRelativePath": "MySQL/面试题/44-replication-lag.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ff96c98693cd0a5192966065541b6966e1bd0fc74ff320456bafc1bed72a2a48" + }, + { + "sourceRelativePath": "MySQL/面试题/37-read-write-splitting.md", + "targetRelativePath": "MySQL/面试题/37-read-write-splitting.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0d6ea3b774d775aadaa96ce89f414f22b4dbfa8e8db5d25c2fcc72cc3e641b50" + }, + { + "sourceRelativePath": "MySQL/面试题/43-mysql-config-tuning.md", + "targetRelativePath": "MySQL/面试题/43-mysql-config-tuning.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "284388af45a82c1056ec0b80e0d1838493948d45e75008141c5bf9832d5f9dc0" + }, + { + "sourceRelativePath": "MySQL/面试题/04-char-varchar.md", + "targetRelativePath": "MySQL/面试题/04-char-varchar.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d3a8b26f65fdfbc5e658c3fe27f364c2915e3dc38a73d2add8402db9202f74c8" + }, + { + "sourceRelativePath": "MySQL/面试题/41-deep-pagination.md", + "targetRelativePath": "MySQL/面试题/41-deep-pagination.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "f8f567e26b73313faf76376d7102e04250124edc9badc11e7672b05f4f538623" + }, + { + "sourceRelativePath": "MySQL/面试题/06-delete-drop-truncate.md", + "targetRelativePath": "MySQL/面试题/06-delete-drop-truncate.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d6661c8d862a54583d00222ffddbd33ed9fd85f9fe8a5b63b0b7800bb6d7e78a" + }, + { + "sourceRelativePath": "MySQL/面试题/23-mysql-index-types.md", + "targetRelativePath": "MySQL/面试题/23-mysql-index-types.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d4f4560e9299efcafbb7541a0dce839112ccaf0f7cf6e88b0626cacf38bfd063" + }, + { + "sourceRelativePath": "MySQL/面试题/32-deadlock.md", + "targetRelativePath": "MySQL/面试题/32-deadlock.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a69c2bfa4fc1ce2dec82984365148caef7b55bae3777d4574b265d1eea320559" + }, + { + "sourceRelativePath": "MySQL/面试题/38-sharding-aftereffects.md", + "targetRelativePath": "MySQL/面试题/38-sharding-aftereffects.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d8f3ac607c2b52299c13586b8656c99285d33eff207e77054e202b6884743d63" + }, + { + "sourceRelativePath": "MySQL/面试题/40-mysql-monitoring.md", + "targetRelativePath": "MySQL/面试题/40-mysql-monitoring.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3cfb2edc2c815af99267a0a7253d07057053986545d575ae0c229f2f18ff846f" + }, + { + "sourceRelativePath": "MySQL/面试题/24-mysql-log-retention.md", + "targetRelativePath": "MySQL/面试题/24-mysql-log-retention.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ec26f6458d88472b240d5e6d75b0b3e3ea8c091fb694f35ae32995b8718e2b51" + }, + { + "sourceRelativePath": "MySQL/面试题/02-join-on-where.md", + "targetRelativePath": "MySQL/面试题/02-join-on-where.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "29bbed4267afc27810d84364b6e5bdcff55d038a70445b2bc71282a68bdd719a" + }, + { + "sourceRelativePath": "MySQL/面试题/27-undo-log.md", + "targetRelativePath": "MySQL/面试题/27-undo-log.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1101cee98427ed234ae505fc6102334166491be0a6d818bbaadc4c4b6b5c8e3f" + }, + { + "sourceRelativePath": "MySQL/面试题/22-index-maintenance-cost.md", + "targetRelativePath": "MySQL/面试题/22-index-maintenance-cost.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4f18cca7e2e67faff3bf86de9080746d0bc93e123f8ac5de6bbe3700f5b1864b" + }, + { + "sourceRelativePath": "MySQL/面试题/34-gap-next-key-locks.md", + "targetRelativePath": "MySQL/面试题/34-gap-next-key-locks.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "41ef544fc84d5b6b8c3966d683b537d48b43e9f10521e87117a7c6b50f174261" + }, + { + "sourceRelativePath": "MySQL/面试题/45-primary-failover.md", + "targetRelativePath": "MySQL/面试题/45-primary-failover.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8544914d10f44e478c58a5c039fde5d21887bcf4ca06dd10365b7c23c4574f02" + }, + { + "sourceRelativePath": "MySQL/面试题/20-bplus-index.md", + "targetRelativePath": "MySQL/面试题/20-bplus-index.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "216344293ba4b195af661f59dfbd188fea86d846115c6163b31815ade9317cda" + }, + { + "sourceRelativePath": "MySQL/面试题/42-replication-process.md", + "targetRelativePath": "MySQL/面试题/42-replication-process.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "139079bd79a65ef58dba317b7f3de1c653db5a08c1d64c7a24c8e52578df0768" + }, + { + "sourceRelativePath": "MySQL/面试题/17-pagination-sort-like-index.md", + "targetRelativePath": "MySQL/面试题/17-pagination-sort-like-index.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "344c8685eb388171061439763938bd0737dff7086697c3165807fadd624a3e48" + }, + { + "sourceRelativePath": "产品/小红书/第5篇-电商10大商业模式全解析.md", + "targetRelativePath": "产品/小红书/第5篇-电商10大商业模式全解析.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0ab0196df480ed85003663ea61abd8be15204dde5003c83b0cb0a7b7f4b94bd5" + }, + { + "sourceRelativePath": "产品/小红书/第7篇-产品经理的技术思维和心理学技巧.md", + "targetRelativePath": "产品/小红书/第7篇-产品经理的技术思维和心理学技巧.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c70ae13ae1b42867f0f5584ae6a7e3736c756b6d5d79a501b913603f70181027" + }, + { + "sourceRelativePath": "产品/小红书/第3篇-设计资源速查手册.md", + "targetRelativePath": "产品/小红书/第3篇-设计资源速查手册.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "21c2a88c5115049a4584a56244afe1f90fb8ac4802a12b85ef0745a1ea267a4a" + }, + { + "sourceRelativePath": "产品/小红书/第1篇-产品经理工具装备库.md", + "targetRelativePath": "产品/小红书/第1篇-产品经理工具装备库.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1e1491df321c0b99988f441859ff972cb2dcbb316983838e4cde98522d8f0405" + }, + { + "sourceRelativePath": "产品/小红书/第4篇-行业黑话速成指南.md", + "targetRelativePath": "产品/小红书/第4篇-行业黑话速成指南.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3332301923d55d2995d303d0e2d327c2f01fe4bf0f43dcec26902b91764d0dad" + }, + { + "sourceRelativePath": "产品/小红书/第6篇-数据分析核心指标全解析.md", + "targetRelativePath": "产品/小红书/第6篇-数据分析核心指标全解析.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "141cd788ddbc2f51ef932708b02e5a65e19f6cb27e28b93c023a0277f0236d26" + }, + { + "sourceRelativePath": "产品/小红书/README.md", + "targetRelativePath": "产品/小红书/README.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a20657863bd35f60bd0a32d4bc1e654c4bb6ce61a829f4ba1d90bc0e473e9feb" + }, + { + "sourceRelativePath": "产品/小红书/发布计划.md", + "targetRelativePath": "产品/小红书/发布计划.md", + "recommendation": "skip_working_notes", + "action": "skipped", + "rationale": "publishing operations plan, not a finished article" + }, + { + "sourceRelativePath": "产品/小红书/第2篇-数据资源网站大全.md", + "targetRelativePath": "产品/小红书/第2篇-数据资源网站大全.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "75123eecbdaf28bdbf2d514746495cddc8af22fe7d8cf1220d0ddb6a7269c47c" + }, + { + "sourceRelativePath": "Webpack/面试题/Webpack 常见面试题.md", + "targetRelativePath": "八股文/Webpack/Webpack 常见面试题.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/面试题/TCP应知应会(中).md", + "targetRelativePath": "八股文/计算机网络/TCP应知应会(中).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/面试题/计网常考面试题.md", + "targetRelativePath": "八股文/计算机网络/计网常考面试题.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/面试题/UDP应知应会.md", + "targetRelativePath": "八股文/计算机网络/UDP应知应会.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/面试题/TCP应知应会(下).md", + "targetRelativePath": "八股文/计算机网络/TCP应知应会(下).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/面试题/TCP应知应会(上).md", + "targetRelativePath": "八股文/计算机网络/TCP应知应会(上).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/面试题/计网面试题汇总.md", + "targetRelativePath": "八股文/计算机网络/计网面试题汇总.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/HTTP/HTTPS与SSL TLS.md", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTPS与SSL TLS.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/HTTP/HTTP 版本整合.md", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTP 版本整合.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/HTTP/HTTPS性能优化.md", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTPS性能优化.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "计算机网络/HTTP/HTTP 代理和缓存.md", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTP 代理和缓存.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机网络/HTTP/TLS1.2连接过程解析.md", + "targetRelativePath": "计算机科学/计算机网络/HTTP/TLS1.2连接过程解析.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/24-event-extraction.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/24-event-extraction.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "6fdba699de3edb65c4423bd262dbf857d6038eaca9e80d06857974145c461e54" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/17-knowledge-engineering-vs-kg.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/17-knowledge-engineering-vs-kg.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "3743e8a907c8355936bab5842ac37f6b07964efd2c9dcb61d0700f5ed9c57838" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/30-knowledge-graph-reasoning.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/30-knowledge-graph-reasoning.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fe25bc7276bf696813b9001e8875991c82dfec73066968e20b9aa6b3b8e7827f" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/04-rag-vector-incremental-updates.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/04-rag-vector-incremental-updates.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "87b7b82ff1dae2b2e560a7655c74d4eff8ef5f7364914c034d95fb612ac492e2" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/19-embedding-model-selection.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/19-embedding-model-selection.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "029b1dc085d5c29b67e5da1c3ff4ec5baf6bef08ebed496df39075b66ddcaca2" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/09-crf-vs-bert-ner.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/09-crf-vs-bert-ner.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a23c613139565bcf9acf8dd7942dc616206b869bddc383b9d092af3ccc39ce52" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/14-transe-distmult-complex.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/14-transe-distmult-complex.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1a12f0f92e23b681bfdefa0835ecf09c61599bbd9086ff80f0fbebf5f0b4fe09" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/20-entity-disambiguation.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/20-entity-disambiguation.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "08c4319210315ae6a85e0c32bd62e42dea86ee73a180c03ca378f8526191a37d" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/08-knowledge-graph-completion.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/08-knowledge-graph-completion.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "88615e8ed5ad9763c1d547c7a9ac0b11dd42934a4acde0de182e3f69ef5a7cef" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/16-context-compression.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/16-context-compression.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "9c049ac18631282e60a388ec44776280e63bd554583fcbc22f073a886b182f6f" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/07-dialogue-state-tracking.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/07-dialogue-state-tracking.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "aa44164b824fabd88883a8d464f34d0f6efdf5464ef70bc8743d3c8a5fdddd6d" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/11-rag-hallucination-citation.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/11-rag-hallucination-citation.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1a155453dce6e63878531f85cfe4d397484b097357bbb46af28c91694fbe562c" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/21-rag-reranking.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/21-rag-reranking.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7a6b415a977f1a43001b7b6bf32157d3a69e62b2da4b63170f9ebc9881d40878" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/题目模板.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/题目模板.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d9194195456dd783bd51a4584e8dde4f87f283118e3a664bab9cc27a4b25c35b" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/05-knowledge-graph-llm-rag.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/05-knowledge-graph-llm-rag.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "272f39a818494ac4d3309d96c216f9c1b441d159372619321e47a67926afc2e5" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/32-pipeline-vs-joint-extraction.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/32-pipeline-vs-joint-extraction.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "21d01ba88a6d3f41fe3585920a7cf7a08266bdd98a0b79fde08496ddea29759c" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/26-semantic-chunking.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/26-semantic-chunking.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "17cf9180144062dcff0458a6dd466f4e7ac98b6fd9c96e3b736cac4becd6fc24" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/15-rag-chunking-size.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/15-rag-chunking-size.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "604c0f4002a3d737051dd84ed81c10a56d1de6068fb9367afe095a5201ef80bc" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/02-self-rag.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/02-self-rag.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4b543bb02f0cd848226bd7ecafdb8f53590cbc748318e6c9fc52999d99a44abb" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/10-distant-supervision.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/10-distant-supervision.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "4d7367875d4615f521739c2f7b36031f3c21be17f96235cfc57faca0de938ee7" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "de939ff7e9caed53112f711ab81f230e89f1568e62a00a997154bf4a2db5c6d2" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/13-graphrag.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/13-graphrag.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "dc3e0d1cc77db202f9865798412aba0a40df5b820bec0095c11faa5052805875" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/参考社区项目.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/参考社区项目.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "fc1e5e5bab1d38c337897c4c515be1c6900b65a26de29645592222fee4d80267" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/31-entity-linking.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/31-entity-linking.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "52e0eb6216cbf91aac573a773f22d59982d0ac984c9fb53ebb587a835c3800b0" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/25-hyde-retrieval.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/25-hyde-retrieval.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "149391b9eb9324b651fb2807a43bb03855fbcddc9c9efb6cefba8762104a7901" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/12-knowledge-fusion.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/12-knowledge-fusion.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "362d4b9707dee72f07aea9fac4c89ea6be255410c43041ad6316ac5d6b8199c9" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/27-relation-extraction.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/27-relation-extraction.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2d307a1ccfc1f6f10353e053f164c4d8b99405612d9864d2cde4869b75a09fd3" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/28-multilingual-knowledge-base.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/28-multilingual-knowledge-base.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "ba51fe87deadb3060f0f6b93699272050dbbbd250913a3482d9cab97a8d1bd1b" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/03-multimodal-rag.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/03-multimodal-rag.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b95e541e3791fbe64b80bee9ab8fac2f09a2d0436f2fdd96ad36e702f4e8287e" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/01-rag-multihop-qa.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/01-rag-multihop-qa.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "5f7f77343e597674b10b9a3190944b69c52fbbbe04bab6e8dea3ba9988b2709c" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/06-knowledge-graph-basics.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/06-knowledge-graph-basics.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a36cd29078647aee7268427c8e80c955d6bc3616eea58322812a9b01138743ed" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/29-hybrid-search.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/29-hybrid-search.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "68e9c1cc70abccc4cca72c10aecc844d8429fb5051b1887100aab83e207def99" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/23-ner-bio.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/23-ner-bio.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "12d2ee23adac4cb040fbc98c4b0926e95d842a41cd45068e24aea5f6d7744581" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/18-rag-evaluation.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/18-rag-evaluation.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d299dce75aa0abb4920c54fefac419cc512584aae529de589a846cf40f46fbb5" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/22-rag-ground-truth.md", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/22-rag-ground-truth.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "38af45d5b096e059799aa0c79b5948dd15a0ca9f1373334d7ad5396a3fa37812" + }, + { + "sourceRelativePath": "计算机科学/计算机视觉/SIFT.md", + "targetRelativePath": "计算机科学/计算机视觉/SIFT.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a06a1b52f38e959d54cde8ae1741c6c996162156eaff0efd1ac96fe799ce4f28" + }, + { + "sourceRelativePath": "计算机科学/设计模式/Behavior Pattern 行为模式.md", + "targetRelativePath": "计算机科学/设计模式/Behavior Pattern 行为模式.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机科学/设计模式/结构型模式 Structural Patterns.md", + "targetRelativePath": "计算机科学/设计模式/结构型模式 Structural Patterns.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机科学/设计模式/创建型模式 Creation Pattern.md", + "targetRelativePath": "计算机科学/设计模式/创建型模式 Creation Pattern.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机科学/设计模式/牛客设计模式问题总结.md", + "targetRelativePath": "计算机科学/设计模式/牛客设计模式问题总结.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "计算机科学/设计模式/UML图关系详解.md", + "targetRelativePath": "计算机科学/设计模式/UML图关系详解.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "面经/面经QA/快手面试题总结.md", + "targetRelativePath": "面经/面经QA/快手面试题总结.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "8a471c5090e4d5107f073f3329be87caf2ecae99c5184b9c7954b7718f26f023" + }, + { + "sourceRelativePath": "面经/面经QA/美团面经.md", + "targetRelativePath": "面经/面经QA/美团面经.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "c745da8512662ee288673b4d768c07eea0940d7d5e47b44a18cfbf3e7c0fe1ed" + }, + { + "sourceRelativePath": "面经/面经QA/阿里面经问题集合.md", + "targetRelativePath": "面经/面经QA/阿里面经问题集合.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "12992fe0d193a4b866d87b6525c9ce839bf162241d29c861cd06f20d754d55d7" + }, + { + "sourceRelativePath": "面经/026/海外岗前端 AI 架构师.md", + "targetRelativePath": "面经/026/海外岗前端 AI 架构师.md", + "recommendation": "skip_stub", + "action": "skipped", + "rationale": "explicitly says full article could not be recovered" + }, + { + "sourceRelativePath": "面经/026/小红书AI工程师.md", + "targetRelativePath": "面经/026/小红书AI工程师.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "03bab78ab8607234dc0336cb79e8458fc20b04c1149c45afb5e85d79d75998fd" + }, + { + "sourceRelativePath": "面经/026/腾讯混元 AIGC 前端架构师.md", + "targetRelativePath": "面经/026/腾讯混元 AIGC 前端架构师.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2b0d1467354023f5fa0c148e39af8a4f1cf9811b61b4d1f084110f4c9490631c" + }, + { + "sourceRelativePath": "面经/026/高德 AI Agent 前端开发.md", + "targetRelativePath": "面经/026/高德 AI Agent 前端开发.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "d1a0ae16164c9dc110030ff7ee13544c7cec3d4bc33f85b264121d45c75dd3fe" + }, + { + "sourceRelativePath": "数据库/MySQL/从MySQL开始学习数据库.md", + "targetRelativePath": "数据库/MySQL/从MySQL开始学习数据库.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "1f0d5316772cb0ae945b7bef33626cb7da4b2c56095bd310b6f3eeeb710f65f1" + }, + { + "sourceRelativePath": "Vue/源码学习/Vue 响应式原理.md", + "targetRelativePath": "Vue/源码学习/Vue 响应式原理.md", + "recommendation": "skip_stub", + "action": "skipped", + "rationale": "only one H1 title and no article body" + }, + { + "sourceRelativePath": "Vue/源码学习/Vue编译.md", + "targetRelativePath": "Vue/源码学习/Vue编译.md", + "recommendation": "skip_stub", + "action": "skipped", + "rationale": "only one H1 title and no article body" + }, + { + "sourceRelativePath": "Vue/源码学习/数据流原理:Vuex & Pinia.md", + "targetRelativePath": "Vue/源码学习/数据流原理:Vuex & Pinia.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "387b8706860399414010d89c0ff58d67c9b9eb9d52d33be98ee727b2067e367d" + }, + { + "sourceRelativePath": "Vue/源码学习/VueRouter.md", + "targetRelativePath": "Vue/源码学习/VueRouter.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0b9079a28190bdaa8274744c4414eda0c09b8f3cb83b9275934ff68dec378971" + }, + { + "sourceRelativePath": "Vue/源码学习/Vue VDom.md", + "targetRelativePath": "Vue/源码学习/Vue VDom.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "90e56c47ab29494abc72e4efcca637413bf74cf4e8f4654a26ccd9503b546a02" + }, + { + "sourceRelativePath": "Vue/面试题/Vue 3 面试题集合(系统整理升级变动).md", + "targetRelativePath": "八股文/Vue/Vue 3 面试题集合(系统整理升级变动).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Vue/面试题/Vue 面试(上).md", + "targetRelativePath": "八股文/Vue/Vue 面试(上).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Vue/面试题/Vue 面试(下).md", + "targetRelativePath": "八股文/Vue/Vue 面试(下).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Vue/SSR/Nuxt3:新渲染模式-边缘渲染与swr.md", + "targetRelativePath": "Vue/SSR/Nuxt3:新渲染模式-边缘渲染与swr.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "2eb9af202f563432b09a8dd5cc159f3245227021a0e7693becc5d5d0fb2b08e4" + }, + { + "sourceRelativePath": "Vue/SSR/编写跨平台友好的代码.md", + "targetRelativePath": "Vue/SSR/编写跨平台友好的代码.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "38d3ba720512159338433b6aa09f78978a691b8af49ac9aa5043682e7f8c563e" + }, + { + "sourceRelativePath": "Vue/SSR/SSR 异步数据获取.md", + "targetRelativePath": "Vue/SSR/SSR 异步数据获取.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "e09b04a8c5a838983038543092096487740e46460112dd26c86693ede2edaf35" + }, + { + "sourceRelativePath": "Vue/SSR/「译」Nuxt3:新渲染模式-边缘渲染、swr等.md", + "targetRelativePath": "Vue/SSR/「译」Nuxt3:新渲染模式-边缘渲染、swr等.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "7b9eef0b3c88d0f2392486c9cb0ae37dd430f5c1d131d973bcee1ab55c2e6da9" + }, + { + "sourceRelativePath": "Vue/Vue3/Teleport 传送.md", + "targetRelativePath": "Vue/Vue3/Teleport 传送.md", + "recommendation": "skip_stub", + "action": "skipped", + "rationale": "only one H1 title and no article body" + }, + { + "sourceRelativePath": "Vue/Vue3/Vue 3 性能优化.md", + "targetRelativePath": "Vue/Vue3/Vue 3 性能优化.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "a433e5a803b88243f80cf6b1aab5e4588c7ae5f311f0a89b08ee78dc9fc43127" + }, + { + "sourceRelativePath": "Vue/Vue3/自定义 Hook(组合式函数)、指令.md", + "targetRelativePath": "Vue/Vue3/自定义 Hook(组合式函数)、指令.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "eab20cec6ebe88e121abec43affda5ae1fa49a16b03f3ca85abedec250b4da96" + }, + { + "sourceRelativePath": "Vue/Vue3/Vue 3 事件处理注意事项.md", + "targetRelativePath": "Vue/Vue3/Vue 3 事件处理注意事项.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "becd72dbe5d7d43a00419b67f659b63ca98a947ea712688b83a0a85754533ab0" + }, + { + "sourceRelativePath": "Vue/Vue3/Nuxt3:新渲染模式-边缘渲染、swr等.md", + "targetRelativePath": "Vue/SSR/Nuxt3:新渲染模式-边缘渲染与swr.md", + "recommendation": "skip_source_duplicate", + "action": "skipped", + "rationale": "same source article body as Vue/SSR/Nuxt3:新渲染模式-边缘渲染与swr.md after ignoring first H1" + }, + { + "sourceRelativePath": "Vue/Vue3/Vue3 组件 ref 注意事项.md", + "targetRelativePath": "Vue/Vue3/Vue3 组件 ref 注意事项.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "01551e4f8feda8772eb710226244b1989cbe81f2e4650e5b850c3f5cf7312214" + }, + { + "sourceRelativePath": "Vue/Vue3/异步组件.md", + "targetRelativePath": "Vue/Vue3/异步组件.md", + "recommendation": "skip_empty", + "action": "skipped", + "rationale": null + }, + { + "sourceRelativePath": "Vue/Vue3/内置组件.md", + "targetRelativePath": "Vue/Vue3/内置组件.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "297fef65714409b447f53ea4e2ef4686b7c4b1480851488023cfd667522d5346" + }, + { + "sourceRelativePath": "Vue/Vue3/Vue 3 深入组件笔记.md", + "targetRelativePath": "Vue/Vue3/Vue 3 深入组件笔记.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "63ea3847a5baeb4f13209947254bbd803ee47441c2b47f64333641c9b9315a59" + }, + { + "sourceRelativePath": "Vue/Vue3/KeepAlive.md", + "targetRelativePath": "Vue/Vue3/KeepAlive.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "0afaf0d8889e33dff6df6b656f9ce07d7afdc766534170699b05b464d0442ef5" + }, + { + "sourceRelativePath": "Vue/interview/Vue 3 面试题集合(系统整理升级变动).md", + "targetRelativePath": "八股文/Vue/Vue 3 面试题集合(系统整理升级变动).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Vue/interview/Vue 面试(上).md", + "targetRelativePath": "八股文/Vue/Vue 面试(上).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Vue/interview/Vue 面试(下).md", + "targetRelativePath": "八股文/Vue/Vue 面试(下).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Vue/uni-app/uni-simple-router 库使用.md", + "targetRelativePath": "元框架/uni-app/uni-simple-router 库使用.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "TypeScript/面试题/TypeScript 面试专题.md", + "targetRelativePath": "八股文/TypeScript/TypeScript 面试专题.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/面试题/TypeScript面试题.md", + "targetRelativePath": "八股文/TypeScript/TypeScript面试题.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 21-30.md", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 21-30.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 1-10.md", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 1-10.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 41- 50.md", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 41- 50.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 31-40.md", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 31-40.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 51- 60.md", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 51- 60.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 11-20.md", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 11-20.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/codeTop/快手CodeTop.md", + "targetRelativePath": "刷题/Leetcode/codeTop/快手CodeTop.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/codeTop/字节跳动CodeTop(一).md", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(一).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/codeTop/拼多多CodeTop.md", + "targetRelativePath": "刷题/Leetcode/codeTop/拼多多CodeTop.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/codeTop/腾讯 CodeTop.md", + "targetRelativePath": "刷题/Leetcode/codeTop/腾讯 CodeTop.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/codeTop/字节跳动CodeTop(二).md", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(二).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/codeTop/美团CodeTop.md", + "targetRelativePath": "刷题/Leetcode/codeTop/美团CodeTop.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/codeTop/Leetcode 企业题库.md", + "targetRelativePath": "刷题/Leetcode/codeTop/Leetcode 企业题库.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/codeTop/字节跳动CodeTop(三).md", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(三).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/中等题/codetop 中等难度刷题.md", + "targetRelativePath": "刷题/Leetcode/中等题/codetop 中等难度刷题.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "leetcode/中等题/中等题刷题.md", + "targetRelativePath": "刷题/Leetcode/中等题/中等题刷题.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "CSS/basic/Flex 布局.md", + "targetRelativePath": "CSS/基础知识/Flex 布局.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/basic/Web 安全字体和网络字体 (Web Fonts).md", + "targetRelativePath": "CSS/基础知识/Web 安全字体和网络字体 (Web Fonts).md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/basic/CSS 自定义属性.md", + "targetRelativePath": "CSS/基础知识/CSS 自定义属性.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/basic/逻辑组合伪类.md", + "targetRelativePath": "CSS/基础知识/逻辑组合伪类.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/basic/伪类与伪元素的区别.md", + "targetRelativePath": "CSS/基础知识/伪类与伪元素的区别.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/basic/Stylus 学习整合.md", + "targetRelativePath": "CSS/基础知识/Stylus 学习整合.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/basic/Less 知识点汇总.md", + "targetRelativePath": "CSS/基础知识/Less 知识点汇总.md", + "recommendation": "preserve_existing", + "action": "skipped", + "rationale": "source differences are titles/formatting or omit existing attribution/context; current body is retained" + }, + { + "sourceRelativePath": "CSS/basic/CSS进阶:逻辑组合伪类.md", + "targetRelativePath": "CSS/基础知识/CSS进阶:逻辑组合伪类.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/面试题/CSS 面试题汇总.md", + "targetRelativePath": "八股文/CSS 面试题汇总.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "CSS/tailwindcss/Tailwind CSS 核心概念:功能类优先.md", + "targetRelativePath": "CSS/Tailwind CSS 核心概念:功能类优先.md", + "recommendation": "skip_duplicate", + "action": "skipped", + "rationale": "normalized body matches existing article" + }, + { + "sourceRelativePath": "Go/gin/gin 中间件.md", + "targetRelativePath": "Go/gin/gin 中间件.md", + "recommendation": "import_new", + "action": "added", + "rationale": null, + "resultHash": "b3a007f442c6df8c374f03ee6d2c0438730a6d6a320cf6cd4944ebe7d7a2a03a" + }, + { + "sourceRelativePath": "法律/法律文件/劳动法.md", + "targetRelativePath": "法律/法律文件/劳动法.md", + "recommendation": "skip_user_excluded", + "action": "excluded_by_request", + "rationale": "Source directory excluded by the user's request.", + "excludedByRequest": true + } + ], + "assets": [ + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/assets/multihop-evidence-chain.svg", + "targetRelativePath": "public/content-assets/multihop-evidence-chain.svg", + "articleRelativePath": "AI应用开发/AI知识工程与RAG/01-rag-multihop-qa.md", + "articleUrl": "/content-assets/multihop-evidence-chain.svg" + } + ], + "assetReferences": [ + { + "sourceRelativePath": "面试通用/前端工程师面试手册.md", + "href": "person.jpg", + "sourceExists": false, + "disposition": "code-example-preserved; never emitted as an image" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/01-rag-multihop-qa.md", + "href": "assets/multihop-evidence-chain.svg", + "sourceExists": true + } + ], + "sourceMissingDocumentReferences": [ + { + "sourceRelativePath": "索引.md", + "href": "Node/笔记/Node 笔记(3)内置模块.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/笔记/Node 笔记(4)包管理.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/笔记/Node 笔记(5)CLI.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/笔记/Node 笔记(6)Streams.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/笔记/Node 笔记(7)Buffer.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/笔记/Node 笔记(8)HTTP.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/笔记/Node 笔记(9)事件循环.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/事件循环/Node 事件循环可视化指南 - 完整的事件循环.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/事件循环/Node 事件循环可视化指南 - nextTick 和 Promise 队列.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/事件循环/Node 事件循环可视化指南 - 定时器队列.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/事件循环/Node 事件循环可视化指南 - IO 队列.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/事件循环/Node 事件循环可视化指南 - IO 轮询.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/NPM/包管理.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/NPM/npm源配置.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/NPM/语义化版本.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/NPM/npmrc 配置文件使用指南.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/Node进程通讯(IPC).md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/Node子进程.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/http-server与live-server的区别.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/Node.js实现网络代理.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/使用Node转换图片为webp格式.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/使用ffmpeg将视频转换为gif图.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/pm2 进程管理器.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Node/CJS和ES Module的导入区别.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "CSS/basic/Grid 布局.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "TypeScript/ReturnType条件类型.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "TypeScript/对象键遍历.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "TypeScript/装饰器使用概览.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "TypeScript/App启动协议库(TypeScript).md" + }, + { + "sourceRelativePath": "索引.md", + "href": "TypeScript/在React+TypeScript下可能影响性能的patterns.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Webpack/Webpack Loader 开发实践.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Webpack/Webpack Plugin 开发实践.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Webpack/webpack的工作流程.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Webpack/webpack-chain.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Webpack/webpack中的图片处理.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Webpack/Webpack性能优化.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Webpack/Webpack 完整学习指南.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Vite/Vite HMR API与HMR原理.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Vite/Vite 静态资源处理.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Vite/Vite项目启动配置.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Vite/Rolldown探索.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机网络/CDN.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机网络/WAF.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机网络/RESTful请求方法的幂等性.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机网络/浏览器的缓存机制(位置).md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机网络/浏览器的缓存机制(请求头).md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机网络/前端存储.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机网络/Nginx & OpenResty.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Lit/第一章:现代 Web Components 简介.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Lit/第二章:写个第一个 Lit 组件(Hello World).md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Lit/第三章:lit-html 的强大 - 声明式模板.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Lit/第四章:响应性和状态.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Lit/第五章:给 React 开发者 - 将你的知识转换到 Lit.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Lit/第六章:样式和主题 - Shadow DOM 封装.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Lit/第七章:组件组合与通信.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Lit/第八章:高级概念与 Lit 生态.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "TipTap/第四章:终极自定义 - 创建你自己的自定义扩展.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Go/Go基础语法速成版(一).md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Go/Go基础语法速成版(二).md" + }, + { + "sourceRelativePath": "索引.md", + "href": "Go/Go基础语法速成版(三).md" + }, + { + "sourceRelativePath": "索引.md", + "href": "leetcode/codeTop/美团 CodeTop.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "leetcode/codeTop/拼多多 CodeTop.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "leetcode/codeTop/快手 CodeTop.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "前端杂文/BFF.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "前端杂文/Commit Message Git 格式规范.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "前端杂文/Google Core Web Vitals.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "前端杂文/RPC笔记.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "前端杂文/静态 vs 单元 vs 集成 vs E2E 测试.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "前端杂文/强缓存 vs 协商缓存.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "前端杂文/同构渲染:SSR & CSR.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "软技能/API版本控制.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "软技能/LaTeX数学公式语法.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "软技能/PPT排版感悟.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "软技能/开发黑话.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机科学/设计模式创建型模式.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机科学/设计模式结构型模式.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机科学/设计模式行为型模式.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "计算机科学/UML关系图.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "安全/Web 安全演化:数字证书签名算法.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "安全/安全上下文技术实践.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "校招/Offer、三方、两方协议、违约.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "校招/校招日志与经验总结.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "./学习路径/React进阶路线.md" + }, + { + "sourceRelativePath": "索引.md", + "href": "./算法练习计划.md" + }, + { + "sourceRelativePath": "翻译索引.md", + "href": "./翻译/Express.js v5.0中的新增功能.md" + }, + { + "sourceRelativePath": "翻译索引.md", + "href": "./翻译/「译」如何从头开始构建机器人检测脚本:分步指南.md" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "href": "./Webpack学习路径.md" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "href": "./Vite学习路径.md" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "href": "./Node.js完整指南.md" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "href": "./TypeScript学习路径.md" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "href": "./React进阶路线.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "../Webpack/Webpack性能优化.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "../前端杂文/同构渲染:SSR & CSR.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "../前端杂文/静态 vs 单元 vs 集成 vs E2E 测试.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "./TypeScript学习路径.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "./CSS学习路径.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "./Vite学习路径.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "./Webpack学习路径.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "./Node.js完整指南.md" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "href": "./React进阶路线.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../CSS/basic/Grid 布局.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../计算机网络/浏览器的缓存机制(位置).md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../计算机网络/浏览器的缓存机制(请求头).md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../leetcode/codeTop/美团 CodeTop.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../leetcode/codeTop/拼多多 CodeTop.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../leetcode/codeTop/快手 CodeTop.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../面试通用/算法与数据结构:六大排序算法.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../面试通用/10万字前端面试书总结.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../面试通用/Node.js前端面试题.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../面试通用/算法与数据结构:六大排序算法.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../校招/校招日志与经验总结.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../校招/Offer、三方、两方协议、违约.md" + }, + { + "sourceRelativePath": "面试准备/README.md", + "href": "../学习路径/React进阶路线.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "HTML 高频.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "CSS 面试题汇总.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/JavaScript/interview/output.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/JavaScript/interview/writing.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/codeTop/ks.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/leetcode/codeTop/byteDance.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/leetcode/codeTop/Tencent.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/leetcode/codeTop/Tencent.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/leetcode/codeTop/meituan.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/Node/01.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/Node/Node.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/React/basic.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/React/Hooks/basic.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "React 项目优化.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "React 中使用 TypeScript.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/React/interview/part1.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/React/interview/part2.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "Mobx 教程.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "../React 框架/React Native/React Native 基础.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/DB/Redis.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/DB/perform.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/DB/MySQL/index.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/DB/MySQL.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/front-end/BFF.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/browser-working/L1.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/interview/6sort.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/interview/CO.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/interview/JavaScript.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/interview/OS.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/interview/JavaScript.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/interview/HTML.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/interview/CSS.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "CSS刷题【错题本】.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "HTML刷题【错题本】.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "JavaScript刷题【错题本】.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "计算机网络基础【错题本】.md" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/nowcoder/10.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/campusRec/need.html" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "href": "/campusRec/company.html" + }, + { + "sourceRelativePath": "React/面试题/React 面试题(二).md", + "href": "执行和清除Effect的时机.md" + } + ], + "reviewedLinkAliases": { + "Node/笔记/Node 笔记(3)内置模块.md": { + "targetRelativePath": "Node/笔记/Node 笔记(3)Node常用内置模块.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/笔记/Node 笔记(4)包管理.md": { + "targetRelativePath": "Node/笔记/Node 笔记(4)包管理工具.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/笔记/Node 笔记(5)CLI.md": { + "targetRelativePath": "Node/笔记/Node 笔记(5)开发脚手架工具.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/笔记/Node 笔记(6)Streams.md": { + "targetRelativePath": "Node/笔记/Node 笔记(6)Stream.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/笔记/Node 笔记(7)Buffer.md": { + "targetRelativePath": "Node/笔记/Node 笔记(7)Buffer的使用.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/笔记/Node 笔记(8)HTTP.md": { + "targetRelativePath": "Node/笔记/Node 笔记(8)Http模块.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/笔记/Node 笔记(9)事件循环.md": { + "targetRelativePath": "Node/笔记/Node 笔记(9)深入事件循环.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/事件循环/Node 事件循环可视化指南 - 完整的事件循环.md": { + "targetRelativePath": "Node/笔记/(一)可视化理解 Node.js 事件循环的完整指南.md", + "reason": "已读现存文章首H1及章节:五篇可视化指南分别对应(一)至(五),正文与现有Node/笔记稿一致" + }, + "Node/事件循环/Node 事件循环可视化指南 - nextTick 和 Promise 队列.md": { + "targetRelativePath": "Node/笔记/(二)在 Node.js 事件循环中可视化 nextTick 和 Promise 队列.md", + "reason": "已读现存文章首H1及章节:五篇可视化指南分别对应(一)至(五),正文与现有Node/笔记稿一致" + }, + "Node/事件循环/Node 事件循环可视化指南 - 定时器队列.md": { + "targetRelativePath": "Node/笔记/(三)Node.js中的定时器队列可视化.md", + "reason": "已读现存文章首H1及章节:五篇可视化指南分别对应(一)至(五),正文与现有Node/笔记稿一致" + }, + "Node/事件循环/Node 事件循环可视化指南 - IO 队列.md": { + "targetRelativePath": "Node/笔记/(四)Node.js事件循环中的IO队列可视化.md", + "reason": "已读现存文章首H1及章节:五篇可视化指南分别对应(一)至(五),正文与现有Node/笔记稿一致" + }, + "Node/事件循环/Node 事件循环可视化指南 - IO 轮询.md": { + "targetRelativePath": "Node/笔记/(五)在 Node.js 事件循环中可视化 IO 轮询.md", + "reason": "已读现存文章首H1及章节:五篇可视化指南分别对应(一)至(五),正文与现有Node/笔记稿一致" + }, + "Node/NPM/包管理.md": { + "targetRelativePath": "Node/NPM/NPM 包管理.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/NPM/npm源配置.md": { + "targetRelativePath": "Node/NPM/NPM 源设置和管理方法.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/NPM/语义化版本.md": { + "targetRelativePath": "Node/NPM/版本语义化.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/NPM/npmrc 配置文件使用指南.md": { + "targetRelativePath": "Node/NPM/深入了解npmrc:使用与配置指南.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/Node进程通讯(IPC).md": { + "targetRelativePath": "Node/Node.js 进程通信.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/Node子进程.md": { + "targetRelativePath": "Node/Node.js 子进程管理和进程通信.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/http-server与live-server的区别.md": { + "targetRelativePath": "Node/http-server 和 live-server.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/Node.js实现网络代理.md": { + "targetRelativePath": "Node/使用Node.js 实现网络代理(无框架,通过http-proxy).md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/使用Node转换图片为webp格式.md": { + "targetRelativePath": "Node/图片格式转换:将上传图片转为webp.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/使用ffmpeg将视频转换为gif图.md": { + "targetRelativePath": "Node/咱们来整一个Node.js脚本,使用ffmpeg将视频转换为GIF文件.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Node/pm2 进程管理器.md": { + "targetRelativePath": "Node/PM2 使用指南~.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "CSS/basic/Grid 布局.md": { + "targetRelativePath": "CSS/基础知识/Grid 布局.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "TypeScript/ReturnType条件类型.md": { + "targetRelativePath": "TypeScript/TS中的内置条件类型:ReturnType.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "TypeScript/对象键遍历.md": { + "targetRelativePath": "TypeScript/如何在TypeScript中迭代对象键.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "TypeScript/装饰器使用概览.md": { + "targetRelativePath": "TypeScript/TS 装饰器使用一览.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "TypeScript/App启动协议库(TypeScript).md": { + "targetRelativePath": "TypeScript/自定义协议唤起 | 唤端能力支持库编写 —— 基于TypeScript 编写.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "TypeScript/在React+TypeScript下可能影响性能的patterns.md": { + "targetRelativePath": "翻译/「译」这种模式将破坏你React应用的TS性能.md", + "reason": "现存译文明确原题 This Pattern Will Wreck Your React App's TS Performance,讲Sentry React类型扩展导致TS性能问题,吻合旧索引标签" + }, + "Webpack/Webpack Loader 开发实践.md": { + "targetRelativePath": "Webpack/Webpack Loader 实践.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Webpack/Webpack Plugin 开发实践.md": { + "targetRelativePath": "Webpack/Webpack 插件开发实践.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Webpack/webpack的工作流程.md": { + "targetRelativePath": "Webpack/Webpack 工作流程.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Webpack/webpack-chain.md": { + "targetRelativePath": "Webpack/Webpack 链式调用模型.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Webpack/webpack中的图片处理.md": { + "targetRelativePath": "Webpack/Webpack 图像处理.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Webpack/Webpack性能优化.md": { + "targetRelativePath": "Webpack/Webpack 性能优化.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Webpack/Webpack 完整学习指南.md": { + "targetRelativePath": "Webpack/Webpack 学习指北.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Vite/Vite HMR API与HMR原理.md": { + "targetRelativePath": "Vite/HMR API 及其原理.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Vite/Rolldown探索.md": { + "targetRelativePath": "Vite/探索 Rolldown.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机网络/CDN.md": { + "targetRelativePath": "计算机科学/计算机网络/CDN 内容分发网络.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机网络/WAF.md": { + "targetRelativePath": "计算机科学/计算机网络/WAF 网络应用防火墙.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机网络/RESTful请求方法的幂等性.md": { + "targetRelativePath": "计算机科学/计算机网络/RESTful 下请求方法的幂等性.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机网络/浏览器的缓存机制(位置).md": { + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-缓存位置.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机网络/浏览器的缓存机制(请求头).md": { + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-请求头.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机网络/前端存储.md": { + "targetRelativePath": "计算机科学/计算机网络/前端存储方案一览.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Lit/第一章:现代 Web Components 简介.md": { + "targetRelativePath": "Lit/第一章:Lit简介 - 现代Web组件标准.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Lit/第二章:写个第一个 Lit 组件(Hello World).md": { + "targetRelativePath": "Lit/第二章:你的第一个Lit组件 - 从零到\"Hello, World\".md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Lit/第三章:lit-html 的强大 - 声明式模板.md": { + "targetRelativePath": "Lit/第三章:lit-html的威力 - 精通声明式模板.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Lit/第四章:响应性和状态.md": { + "targetRelativePath": "Lit/第四章:响应式与状态 - 让组件动起来.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Lit/第五章:给 React 开发者 - 将你的知识转换到 Lit.md": { + "targetRelativePath": "Lit/第五章:致React开发者 - 将你的知识平移到Lit.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Lit/第六章:样式和主题 - Shadow DOM 封装.md": { + "targetRelativePath": "Lit/第六章:样式与主题 - Shadow DOM的封装艺术.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Lit/第七章:组件组合与通信.md": { + "targetRelativePath": "Lit/第七章:组件化构建 - 组合与通信.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Lit/第八章:高级概念与 Lit 生态.md": { + "targetRelativePath": "Lit/第八章:高级概念与Lit生态系统.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "TipTap/第四章:终极自定义 - 创建你自己的自定义扩展.md": { + "targetRelativePath": "TipTap/Tiptap 深度教程(四):终极定制 - 从零创建你的专属扩展.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Go/Go基础语法速成版(一).md": { + "targetRelativePath": "Go/Go基础语法极速版(一)——从main函数到string类型.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Go/Go基础语法速成版(二).md": { + "targetRelativePath": "Go/Go基础语法极速版(二)——续看基本类型.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "Go/Go基础语法速成版(三).md": { + "targetRelativePath": "Go/Go基础语法极速版(三)——变量、常量声明.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "leetcode/codeTop/美团 CodeTop.md": { + "targetRelativePath": "刷题/Leetcode/codeTop/美团CodeTop.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "leetcode/codeTop/拼多多 CodeTop.md": { + "targetRelativePath": "刷题/Leetcode/codeTop/拼多多CodeTop.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "leetcode/codeTop/快手 CodeTop.md": { + "targetRelativePath": "刷题/Leetcode/codeTop/快手CodeTop.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "前端杂文/BFF.md": { + "targetRelativePath": "前端杂文/BFF 模式 (Backend For Frontend).md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "前端杂文/Commit Message Git 格式规范.md": { + "targetRelativePath": "前端杂文/CommitMessage的Git格式规范.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "前端杂文/Google Core Web Vitals.md": { + "targetRelativePath": "前端杂文/Google 核心 Web 指标.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "前端杂文/RPC笔记.md": { + "targetRelativePath": "前端杂文/RPC 笔记.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "前端杂文/静态 vs 单元 vs 集成 vs E2E 测试.md": { + "targetRelativePath": "前端杂文/前端应用的静态测试vs单元测试vs集成测试vsE2E(端到端)测试.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "前端杂文/强缓存 vs 协商缓存.md": { + "targetRelativePath": "前端杂文/强缓存和协商缓存.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "前端杂文/同构渲染:SSR & CSR.md": { + "targetRelativePath": "前端杂文/同构渲染:SSR (Server-Side Rendering) 与CSH (Client-Side Hydration).md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "软技能/API版本控制.md": { + "targetRelativePath": "软技能/API 版本控制.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "软技能/LaTeX数学公式语法.md": { + "targetRelativePath": "软文/LaTeX 数学公式语法手册.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "软技能/PPT排版感悟.md": { + "targetRelativePath": "软文/PPT图文排版心得.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "软技能/开发黑话.md": { + "targetRelativePath": "软技能/开发黑话 专业术语.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机科学/设计模式创建型模式.md": { + "targetRelativePath": "计算机科学/设计模式/创建型模式 Creation Pattern.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机科学/设计模式结构型模式.md": { + "targetRelativePath": "计算机科学/设计模式/结构型模式 Structural Patterns.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机科学/设计模式行为型模式.md": { + "targetRelativePath": "计算机科学/设计模式/Behavior Pattern 行为模式.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "计算机科学/UML关系图.md": { + "targetRelativePath": "计算机科学/设计模式/UML图关系详解.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "安全/Web 安全演化:数字证书签名算法.md": { + "targetRelativePath": "安全/Web 安全演进:数字证书签名算法升级指南.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "安全/安全上下文技术实践.md": { + "targetRelativePath": "安全/Web 安全上下文技术实践指南.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "校招/Offer、三方、两方协议、违约.md": { + "targetRelativePath": "软文/offer,三方,两方,毁约 这些你需要知道的事.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "校招/校招日志与经验总结.md": { + "targetRelativePath": "软文/校招日志 校招经验总结.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "翻译/Express.js v5.0中的新增功能.md": { + "targetRelativePath": "翻译/Express. js v5.0中的新增功能.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "翻译/「译」如何从头开始构建机器人检测脚本:分步指南.md": { + "targetRelativePath": "翻译/「译」如何从头开始构建机器人检测脚本:分步指南.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "面试通用/算法与数据结构:六大排序算法.md": { + "targetRelativePath": "面试通用/「算法与数据结构」梳理6大排序算法 为了offer.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "面试通用/10万字前端面试书总结.md": { + "targetRelativePath": "面试通用/前端面试十万字书籍总结.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "面试通用/Node.js前端面试题.md": { + "targetRelativePath": "面试通用/Node.js 前端面试题.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "校招/HTML 高频.md": { + "targetRelativePath": "八股文/HTML 高频.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "校招/CSS 面试题汇总.md": { + "targetRelativePath": "八股文/CSS 面试题汇总.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "JavaScript/interview/output.html": { + "targetRelativePath": "八股文/JavaScript/JavaScript 输出判断.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "JavaScript/interview/writing.html": { + "targetRelativePath": "八股文/JavaScript/JavaScript 高频手撕.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "codeTop/ks.html": { + "targetRelativePath": "刷题/Leetcode/codeTop/快手CodeTop.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "leetcode/codeTop/Tencent.html": { + "targetRelativePath": "刷题/Leetcode/codeTop/腾讯 CodeTop.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "leetcode/codeTop/meituan.html": { + "targetRelativePath": "刷题/Leetcode/codeTop/美团CodeTop.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "Node/Node.html": { + "targetRelativePath": "Node/Node.js 进程通信.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "React/basic.html": { + "targetRelativePath": "React/React基础.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "React/Hooks/basic.html": { + "targetRelativePath": "React/React Hooks笔记/React Hooks 基础.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "校招/React 项目优化.md": { + "targetRelativePath": "React/React 项目优化.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "校招/React 中使用 TypeScript.md": { + "targetRelativePath": "React/React 中使用 TypeScript.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "React/interview/part1.html": { + "targetRelativePath": "八股文/React/React 面试题(一).md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "React/interview/part2.html": { + "targetRelativePath": "八股文/React/React 面试题(二).md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "校招/Mobx 教程.md": { + "targetRelativePath": "React/Mobx 教程.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "React 框架/React Native/React Native 基础.md": { + "targetRelativePath": "React/React Native/React Native 基础.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "DB/Redis.html": { + "targetRelativePath": "数据库/Redis 学习笔记.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "DB/perform.html": { + "targetRelativePath": "数据库/高并发常见性能表现评估指标.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "DB/MySQL.html": { + "targetRelativePath": "数据库/MySQL从入门到入院.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "front-end/BFF.html": { + "targetRelativePath": "前端杂文/BFF 模式 (Backend For Frontend).md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "interview/6sort.html": { + "targetRelativePath": "面试通用/「算法与数据结构」梳理6大排序算法 为了offer.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "interview/HTML.html": { + "targetRelativePath": "八股文/HTML 高频.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "interview/CSS.html": { + "targetRelativePath": "八股文/CSS 面试题汇总.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "校招/CSS刷题【错题本】.md": { + "targetRelativePath": "牛客/错题本/CSS刷题【错题本】.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "校招/HTML刷题【错题本】.md": { + "targetRelativePath": "牛客/错题本/HTML刷题【错题本】.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "校招/JavaScript刷题【错题本】.md": { + "targetRelativePath": "牛客/错题本/JavaScript刷题【错题本】.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "校招/计算机网络基础【错题本】.md": { + "targetRelativePath": "牛客/错题本/计算机网络基础【错题本】.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "nowcoder/10.html": { + "targetRelativePath": "牛客/牛客网刷题1-10.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "campusRec/need.html": { + "targetRelativePath": "软文/offer,三方,两方,毁约 这些你需要知道的事.md", + "reason": "已核对知识大纲原链接标签与现存对应稿H1/正文;映射旧VuePress英文路线至真实文章" + }, + "React/面试题/执行和清除Effect的时机.md": { + "targetRelativePath": "React/执行和清除Effect的时机.md", + "reason": "索引旧名称与现存文章首标题/章节主题唯一对应,使用审定迁移目标;保留现有正文路径" + }, + "browser-working/L1.html": { + "targetRelativePath": "浏览器原理/L1 浏览器基础.md", + "reason": "旧L1编号与现存L1浏览器基础首章唯一对应" + }, + "Node/01.html": { + "targetRelativePath": "Node/笔记/Node 笔记(1)内核引擎.md", + "reason": "git commit 7e9fa336 明确R099重命名 src/Node/01.md → src/Node/Node 笔记(1)内核引擎.md;manifest源与现Node/笔记稿目标对应,确认旧Node基础路由" + }, + "React/Hooks": { + "targetRelativePath": "React/React Hooks笔记/ReactHooks汇总.md", + "reason": "校招知识大纲链接标签明确为ReactHooks汇总;现存稿H1 ReactHooks 汇总且目标唯一,源去重hash与src/React/React Hooks笔记/ReactHooks汇总.md一致" + }, + "React/dva": { + "targetRelativePath": "React/Dva/dva 数据获取和处理.md", + "reason": "git commit 7e9fa336 的R100重命名证据:src/React/dva/README.md → src/React 框架/Dva/dva 数据获取和处理.md;现迁移稿H1及正文对应dva数据获取和处理" + }, + "React/umi": { + "targetRelativePath": "元框架/Umi/UmiJS 乌米学习实战.md", + "reason": "git commit 7e9fa336 的R100重命名证据:src/React/umi/README.md → src/React 框架/umi框架/UmiJS 乌米学习实战.md;manifest正文hash与现元框架/Umi稿相同" + } + }, + "links": [ + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/ES%2012%20新特性.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/ES 12 新特性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/PromiseA%20集合.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/PromiseA 集合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/Property原型链与原型链.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Property原型链与原型链.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/JavaScript%20错误处理指南.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript 错误处理指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/JS垃圾回收机制.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/JS垃圾回收机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/事件循环是如何影响页面渲染的?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/事件循环是如何影响页面渲染的?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/js中==与===的区别.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/js中==与===的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/IIFE%20立即执行函数表达式.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/IIFE 立即执行函数表达式.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/Web%20Worker%20常见使用问题和解决方案.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 常见使用问题和解决方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/Web%20Worker%20与主线程通信场景下对postMessage的简洁封装.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 与主线程通信场景下对postMessage的简洁封装.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/怎么总有人混淆Service%20Worker%20和%20Web%20Worker?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/怎么总有人混淆Service Worker 和 Web Worker?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/WebAudio/Web%20Audio%20滤波器Filter.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebAudio/Web Audio 滤波器Filter.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/WebAudio/Tone.js%20框架食用指南.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebAudio/Tone.js 框架食用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/了解MutationObserver的使用以及在Vue3中的使用案例.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/了解MutationObserver的使用以及在Vue3中的使用案例.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/如何使用Performance%20API%20来衡量应用性能?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/如何使用Performance API 来衡量应用性能?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/来认识一下实用的、好用的:URL%20API.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/来认识一下实用的、好用的:URL API.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/Atomics%20API.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/Atomics API.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/前端模块:CJS,%20AMD,%20UMD,%20ESM,%20System%20和%20IIFE.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/前端模块分类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/为什么每个人都在谈论同构JavaScript%20以及为什么它很重要.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/为什么每个人都在谈论同构JavaScript 以及为什么它很重要.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/深入解析call、apply、bind.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/深入解析call、apply、bind.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/JavaScript%20如何跳出(终止)forEach%20循环.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript 如何跳出(终止)forEach 循环.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/面试题/JavaScript%20数组去重.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 数组去重.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/正则表达式卷起来!.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/正则表达式卷起来!.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/JavaScript优雅写法及骚操作.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript优雅写法及骚操作.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/ESLint.md", + "action": "rewritten", + "targetRelativePath": "Node/库/ESLint.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/Prettier.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Prettier.md", + "method": "unique-normalized-title" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/husky.md", + "action": "rewritten", + "targetRelativePath": "Node/库/husky.md", + "method": "unique-normalized-title" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/inquirer%20使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/inquirer 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/enquirer%20使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/enquirer 指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/yargs%20使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/yargs 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/ora%20优雅的终端旋转器.md", + "action": "rewritten", + "targetRelativePath": "Node/库/ora 优雅的终端旋转器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/Quill富文本编辑器使用%20-%20高度自定义现代%20Web%20富文本编辑器.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/库/Quill富文本编辑器使用 - 高度自定义现代 Web 富文本编辑器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/quill.js%20的文本库%20——%20delta%20的使用.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/库/quill.js 的文本库 —— delta 的使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/Esprima%20指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Esprima 指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/Puppeteer%20使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Puppeteer 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/JS代码混淆器:JavaScript%20obfuscator%20让你的代码看起来让人痛苦.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/库/JS代码混淆器:JavaScript obfuscator 让你的代码看起来让人痛苦.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/validate-npm-package-name%20小而美的库.md", + "action": "rewritten", + "targetRelativePath": "Node/库/validate-npm-package-name 小而美的库.md", + "method": "unique-normalized-title" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/库/Git%20相关工具.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Git 相关工具.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/LocalStorage、sessionStorage%20封装%20-%20基于TypeScript.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/LocalStorage、sessionStorage 封装 - 基于TypeScript.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/前端%20SSO%20单点登入方案.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/前端 SSO 单点登入方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/前端通过%20canvas%20实现图片裁剪.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/JavaScript%20获取用户操作系统信息及浏览器信息.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript 获取用户操作系统信息及浏览器信息.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/浏览器中如何通过webgl获取渲染器的供应商和版本信息?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/浏览器中如何通过webgl获取渲染器的供应商和版本信息?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/axios、XHR、XML、AJAX和Fetch分不清怎么办?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/axios、XHR、XML、AJAX和Fetch分不清怎么办?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/JSDoc%20初探:代码内的文档标记.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JSDoc 初探:代码内的文档标记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/构建工具应该包含哪些能力?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/构建工具应该包含哪些能力?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/面试题/JavaScript%20高频手撕.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 高频手撕.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/面试题/JavaScript%20输出判断.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 输出判断.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/面试题/JavaScript%20数组去重.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 数组去重.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/面试题/JavaScript%20面试题汇总(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/面试题/JavaScript%20面试题汇总(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/面试题/小滴课堂JS题目汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/小滴课堂JS题目汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue%20进阶使用.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue 进阶使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3渲染机制.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3渲染机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue%20keep-alive%20笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue keep-alive 笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/KeepAlive.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/KeepAlive.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/`$nextTick`深入探究.md", + "action": "rewritten", + "targetRelativePath": "Vue/`$nextTick`深入探究.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue.set()和this.$set().md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue.set()和this.$set().md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/组件自定义v-model以及自定义修饰符.md", + "action": "rewritten", + "targetRelativePath": "Vue/组件自定义v-model以及自定义修饰符.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/Vue%203%20深入组件笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 深入组件笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/Vue%203%20性能优化.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/Vue%203%20事件处理注意事项.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 事件处理注意事项.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/Vue3%20组件%20ref%20注意事项.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue3 组件 ref 注意事项.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/自定义%20Hook(组合式函数)、指令.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/自定义 Hook(组合式函数)、指令.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/Teleport%20传送.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/异步组件.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/内置组件.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/内置组件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/前端路由%20hash%20与%20history%20差异.md", + "action": "rewritten", + "targetRelativePath": "Vue/前端路由 hash 与 history 差异.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Pinia%20学习笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Pinia 学习笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue项目常用库.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue项目常用库.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/SSR/编写跨平台友好的代码.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/编写跨平台友好的代码.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/SSR/SSR%20异步数据获取.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/SSR 异步数据获取.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/Vue3/Nuxt3:新渲染模式-边缘渲染、swr等.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/Nuxt3:新渲染模式-边缘渲染与swr.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue%20Test%20Utils处理异步行为.md", + "action": "rewritten", + "targetRelativePath": "Vue Test Utils处理异步行为.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vue/uni-app/uni-simple-router%20库使用.md", + "action": "rewritten", + "targetRelativePath": "元框架/uni-app/uni-simple-router 库使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/Vue%20scoped属性的用途和工作原理.md", + "action": "rewritten", + "targetRelativePath": "CSS/Vue scoped属性的用途和工作原理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(1)内核引擎.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(1)内核引擎.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(2)模块化.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(2)模块化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(3)内置模块.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(3)Node常用内置模块.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(4)包管理.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(4)包管理工具.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(5)CLI.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(5)开发脚手架工具.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(6)Streams.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(6)Stream.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(7)Buffer.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(7)Buffer的使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(8)HTTP.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(8)Http模块.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/笔记/Node%20笔记(9)事件循环.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(9)深入事件循环.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/事件循环/Node%20事件循环可视化指南%20-%20完整的事件循环.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(一)可视化理解 Node.js 事件循环的完整指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/事件循环/Node%20事件循环可视化指南%20-%20nextTick%20和%20Promise%20队列.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(二)在 Node.js 事件循环中可视化 nextTick 和 Promise 队列.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/事件循环/Node%20事件循环可视化指南%20-%20定时器队列.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(三)Node.js中的定时器队列可视化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/事件循环/Node%20事件循环可视化指南%20-%20IO%20队列.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(四)Node.js事件循环中的IO队列可视化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/事件循环/Node%20事件循环可视化指南%20-%20IO%20轮询.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(五)在 Node.js 事件循环中可视化 IO 轮询.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/NPM/包管理.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/NPM 包管理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/NPM/npm源配置.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/NPM 源设置和管理方法.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/NPM/语义化版本.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/版本语义化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/NPM/npmrc%20配置文件使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/深入了解npmrc:使用与配置指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/Node进程通讯(IPC).md", + "action": "rewritten", + "targetRelativePath": "Node/Node.js 进程通信.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/Node子进程.md", + "action": "rewritten", + "targetRelativePath": "Node/Node.js 子进程管理和进程通信.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/Node.js%20文件系统指南.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/http-server与live-server的区别.md", + "action": "rewritten", + "targetRelativePath": "Node/http-server 和 live-server.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/Node.js实现网络代理.md", + "action": "rewritten", + "targetRelativePath": "Node/使用Node.js 实现网络代理(无框架,通过http-proxy).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/使用Node转换图片为webp格式.md", + "action": "rewritten", + "targetRelativePath": "Node/图片格式转换:将上传图片转为webp.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/使用ffmpeg将视频转换为gif图.md", + "action": "rewritten", + "targetRelativePath": "Node/咱们来整一个Node.js脚本,使用ffmpeg将视频转换为GIF文件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/pm2%20进程管理器.md", + "action": "rewritten", + "targetRelativePath": "Node/PM2 使用指南~.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/CORS%20跨域及其%20Nodejs%20服务端配置实践.md", + "action": "rewritten", + "targetRelativePath": "Node/CORS 跨域及其 Nodejs 服务端配置实践.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Node/CJS和ES%20Module的导入区别.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/使用Node.js、Express.js、TS写个简单的图床脚本(一).md", + "action": "rewritten", + "targetRelativePath": "JavaScript/使用Node.js、Express.js、TS写个简单的图床脚本(一).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "JavaScript/使用Node.js、pm2和ssh2模块实现一个简单的Node.js项目部署脚本.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/使用Node.js、pm2和ssh2模块实现一个简单的Node.js项目部署脚本.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/basic/Flex%20布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Flex 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/basic/Grid%20布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Grid 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/CSS%20父元素没有被子元素撑开问题.md", + "action": "rewritten", + "targetRelativePath": "CSS/CSS 父元素没有被子元素撑开问题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/basic/Less%20知识点汇总.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Less 知识点汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/basic/Stylus%20学习整合.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Stylus 学习整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/PostCSS.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/Tailwind%20CSS%20核心概念:功能类优先.md", + "action": "rewritten", + "targetRelativePath": "CSS/Tailwind CSS 核心概念:功能类优先.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/值得你了解的Tailwind%20CSS%20Tips和技巧.md", + "action": "rewritten", + "targetRelativePath": "CSS/值得你了解的Tailwind CSS Tips和技巧.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/basic/CSS%20自定义属性.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/CSS 自定义属性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/basic/CSS进阶:逻辑组合伪类.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/CSS进阶:逻辑组合伪类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/basic/伪类与伪元素的区别.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/伪类与伪元素的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/basic/Web%20安全字体和网络字体%20(Web%20Fonts).md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Web 安全字体和网络字体 (Web Fonts).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "CSS/Vue%20scoped属性的用途和工作原理.md", + "action": "rewritten", + "targetRelativePath": "CSS/Vue scoped属性的用途和工作原理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TypeScript/工具类型.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/工具类型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TypeScript/函数泛型.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/函数泛型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TypeScript/ReturnType条件类型.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/TS中的内置条件类型:ReturnType.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TypeScript/对象键遍历.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/如何在TypeScript中迭代对象键.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TypeScript/装饰器使用概览.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/TS 装饰器使用一览.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TypeScript/App启动协议库(TypeScript).md", + "action": "rewritten", + "targetRelativePath": "TypeScript/自定义协议唤起 | 唤端能力支持库编写 —— 基于TypeScript 编写.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TypeScript/在React+TypeScript下可能影响性能的patterns.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」这种模式将破坏你React应用的TS性能.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Webpack/webpack%20配置及规则.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 配置及规则.md", + "method": "unique-normalized-title" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Webpack/Webpack%20Loader%20开发实践.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack Loader 实践.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Webpack/Webpack%20Plugin%20开发实践.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 插件开发实践.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Webpack/webpack的工作流程.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 工作流程.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Webpack/webpack-chain.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 链式调用模型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Webpack/webpack中的图片处理.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 图像处理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Webpack/Webpack性能优化.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Webpack/Webpack%20完整学习指南.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 学习指北.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/Vite%20HMR%20API与HMR原理.md", + "action": "rewritten", + "targetRelativePath": "Vite/HMR API 及其原理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/Vite%20SSR%20方案.md", + "action": "rewritten", + "targetRelativePath": "Vite/Vite SSR 方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/Vite%20静态资源处理.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/Vite%20可用项目模版.md", + "action": "rewritten", + "targetRelativePath": "Vite/Vite 可用项目模版.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/构建Vite知识体系-项目性能优化.md", + "action": "rewritten", + "targetRelativePath": "Vite/构建Vite知识体系-项目性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/项目%20Lint%20管理.md", + "action": "rewritten", + "targetRelativePath": "Vite/项目 Lint 管理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/Vite项目启动配置.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/Rollup%20基本概念、使用和插件机制.md", + "action": "rewritten", + "targetRelativePath": "Vite/Rollup 基本概念、使用和插件机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/Rolldown探索.md", + "action": "rewritten", + "targetRelativePath": "Vite/探索 Rolldown.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Vite/Vite%20小册笔记.md", + "action": "rewritten", + "targetRelativePath": "Vite/Vite 小册笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机网络/WebSocket.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/WebSocket.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机网络/CDN.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/CDN 内容分发网络.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机网络/WAF.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/WAF 网络应用防火墙.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机网络/RESTful请求方法的幂等性.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/RESTful 下请求方法的幂等性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机网络/浏览器的缓存机制(位置).md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-缓存位置.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机网络/浏览器的缓存机制(请求头).md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-请求头.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机网络/前端存储.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/前端存储方案一览.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机网络/Nginx%20&%20OpenResty.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/Chrome浏览器插件(扩展)-%20Manifest%20V3%20插件开发规范简介.md", + "action": "rewritten", + "targetRelativePath": "Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/浏览器插件开发框架:WXT.md", + "action": "rewritten", + "targetRelativePath": "Browser/浏览器插件开发框架:WXT.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/CORB%20策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/CORB%20兼容性和影响.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 兼容性和影响.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/CORB%20应对策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 应对策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/Web%20Components%20中使用生命周期回调函数.md", + "action": "rewritten", + "targetRelativePath": "Browser/Web Components 中使用生命周期回调函数.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/Web浏览器滚动方案一览|%20rAF等.md", + "action": "rewritten", + "targetRelativePath": "Browser/Web浏览器滚动方案一览| rAF等.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/基于%20StorageEvent的跨tab事件传输方案.md", + "action": "rewritten", + "targetRelativePath": "Browser/基于 StorageEvent的跨tab事件传输方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Browser/在现代应用中使用%20localStorage%20的全面指南.md", + "action": "rewritten", + "targetRelativePath": "Browser/在现代应用中使用 localStorage 的全面指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Lit/第一章:现代%20Web%20Components%20简介.md", + "action": "rewritten", + "targetRelativePath": "Lit/第一章:Lit简介 - 现代Web组件标准.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Lit/第二章:写个第一个%20Lit%20组件(Hello%20World).md", + "action": "rewritten", + "targetRelativePath": "Lit/第二章:你的第一个Lit组件 - 从零到\"Hello, World\".md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Lit/第三章:lit-html%20的强大%20-%20声明式模板.md", + "action": "rewritten", + "targetRelativePath": "Lit/第三章:lit-html的威力 - 精通声明式模板.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Lit/第四章:响应性和状态.md", + "action": "rewritten", + "targetRelativePath": "Lit/第四章:响应式与状态 - 让组件动起来.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Lit/第五章:给%20React%20开发者%20-%20将你的知识转换到%20Lit.md", + "action": "rewritten", + "targetRelativePath": "Lit/第五章:致React开发者 - 将你的知识平移到Lit.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Lit/第六章:样式和主题%20-%20Shadow%20DOM%20封装.md", + "action": "rewritten", + "targetRelativePath": "Lit/第六章:样式与主题 - Shadow DOM的封装艺术.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Lit/第七章:组件组合与通信.md", + "action": "rewritten", + "targetRelativePath": "Lit/第七章:组件化构建 - 组合与通信.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Lit/第八章:高级概念与%20Lit%20生态.md", + "action": "rewritten", + "targetRelativePath": "Lit/第八章:高级概念与Lit生态系统.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TipTap/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TipTap/第四章:终极自定义%20-%20创建你自己的自定义扩展.md", + "action": "rewritten", + "targetRelativePath": "TipTap/Tiptap 深度教程(四):终极定制 - 从零创建你的专属扩展.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TipTap/ProseMirror%20高级教程/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "TipTap/大纲.md", + "action": "rewritten", + "targetRelativePath": "产品/B站视频播客:长视频的另类出路,还是看上去很美?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Go/Go基础语法速成版(一).md", + "action": "rewritten", + "targetRelativePath": "Go/Go基础语法极速版(一)——从main函数到string类型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Go/Go基础语法速成版(二).md", + "action": "rewritten", + "targetRelativePath": "Go/Go基础语法极速版(二)——续看基本类型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Go/Go基础语法速成版(三).md", + "action": "rewritten", + "targetRelativePath": "Go/Go基础语法极速版(三)——变量、常量声明.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "Go/gin/gin%20中间件.md", + "action": "rewritten", + "targetRelativePath": "Go/gin/gin 中间件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "leetcode/codeTop/字节跳动CodeTop(一).md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(一).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "leetcode/codeTop/字节跳动CodeTop(二).md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(二).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "leetcode/codeTop/字节跳动CodeTop(三).md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(三).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "leetcode/codeTop/腾讯%20CodeTop.md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/腾讯 CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "leetcode/codeTop/美团%20CodeTop.md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/美团CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "leetcode/codeTop/拼多多%20CodeTop.md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/拼多多CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "leetcode/codeTop/快手%20CodeTop.md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/快手CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "leetcode/中等题/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "牛客/牛客网刷题1-10.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题1-10.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "牛客/牛客网刷题11-20.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题11-20.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "牛客/牛客网刷题21-30.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题21-30.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "牛客/牛客网刷题31-40.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题31-40.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "牛客/牛客网刷题41-50.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题41-50.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "牛客/牛客网刷题51-60.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题51-60.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "牛客/错题本/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "面经/哔哩哔哩面经.md", + "action": "rewritten", + "targetRelativePath": "面经/哔哩哔哩面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "面经/快手面经.md", + "action": "rewritten", + "targetRelativePath": "面经/快手面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "面经/美团面经.md", + "action": "rewritten", + "targetRelativePath": "面经/美团面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "面经/朴朴面经.md", + "action": "rewritten", + "targetRelativePath": "面经/朴朴面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "面经/星网锐捷面经.md", + "action": "rewritten", + "targetRelativePath": "面经/星网锐捷面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "面经/面试问答/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "./翻译/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/INP%20(Interaction%20to%20Next%20Paint)%20与用户体验真的有关系吗?.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/INP (Interaction to Next Paint) 与用户体验真的有关系吗?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/Islands%20Architecture%20孤岛架构.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/Islands Architecture 孤岛架构.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/URL%20设计最佳实践.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/URL 设计最佳实践.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/为什么%20RSC%20才是正确答案?.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/为什么 RSC 才是正确答案?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/居中一个%20div%20的%20N%20种方法.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/居中一个 div 的 N 种方法.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/每个开发人员都应该知道的五大Node.js功能.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/每个开发人员都应该知道的五大Node.js功能.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/什么是会话固定.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/什么是会话固定.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/ECMAScript%20装饰器的%2010%20年.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/ECMAScript 装饰器的 10 年.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/交互时导入.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/交互时导入.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "外文翻译/用于调试和分析的%205%20大%20Node.js%20工具.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/用于调试和分析的 5 大 Node.js 工具.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/BFF.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/BFF 模式 (Backend For Frontend).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/Commit%20Message%20Git%20格式规范.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/CommitMessage的Git格式规范.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/CORS.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/CORS.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/Google%20Core%20Web%20Vitals.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/Google 核心 Web 指标.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/RPC笔记.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/RPC 笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/前端抓包.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/前端抓包.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/静态%20vs%20单元%20vs%20集成%20vs%20E2E%20测试.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/前端应用的静态测试vs单元测试vs集成测试vsE2E(端到端)测试.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/强缓存%20vs%20协商缓存.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/强缓存和协商缓存.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "前端杂文/同构渲染:SSR%20&%20CSR.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/同构渲染:SSR (Server-Side Rendering) 与CSH (Client-Side Hydration).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "软技能/API版本控制.md", + "action": "rewritten", + "targetRelativePath": "软技能/API 版本控制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "软技能/DDD.md", + "action": "rewritten", + "targetRelativePath": "软技能/DDD.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "软技能/LaTeX数学公式语法.md", + "action": "rewritten", + "targetRelativePath": "软文/LaTeX 数学公式语法手册.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "软技能/PPT排版感悟.md", + "action": "rewritten", + "targetRelativePath": "软文/PPT图文排版心得.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "软技能/精选文章列表.md", + "action": "rewritten", + "targetRelativePath": "软文/精选文章列表.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "软技能/开发黑话.md", + "action": "rewritten", + "targetRelativePath": "软技能/开发黑话 专业术语.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "软技能/浏览器翻译.md", + "action": "rewritten", + "targetRelativePath": "软文/浏览器翻译.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "软技能/前端学习目标.md", + "action": "rewritten", + "targetRelativePath": "软文/前端学习目标.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机科学/设计模式创建型模式.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/设计模式/创建型模式 Creation Pattern.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机科学/设计模式结构型模式.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/设计模式/结构型模式 Structural Patterns.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机科学/设计模式行为型模式.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/设计模式/Behavior Pattern 行为模式.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "计算机科学/UML关系图.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/设计模式/UML图关系详解.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "安全/Web%20安全演化:数字证书签名算法.md", + "action": "rewritten", + "targetRelativePath": "安全/Web 安全演进:数字证书签名算法升级指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "安全/安全上下文技术实践.md", + "action": "rewritten", + "targetRelativePath": "安全/Web 安全上下文技术实践指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "HTML/HTML知识点汇总.md", + "action": "rewritten", + "targetRelativePath": "HTML/HTML知识点汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "HTML/button标签和div模拟按钮的区别.md", + "action": "rewritten", + "targetRelativePath": "HTML/button标签和div模拟按钮的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "HTML/HTML%20高频.md", + "action": "rewritten", + "targetRelativePath": "八股文/HTML 高频.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "HTML/Web%20Component.md", + "action": "rewritten", + "targetRelativePath": "HTML/Web Component.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "校招/2022年中总结.md", + "action": "rewritten", + "targetRelativePath": "软文/2022年中总结.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "校招/2022年终总结.md", + "action": "rewritten", + "targetRelativePath": "软文/2022年终总结.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "校招/2023年中总结.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "校招/Offer、三方、两方协议、违约.md", + "action": "rewritten", + "targetRelativePath": "软文/offer,三方,两方,毁约 这些你需要知道的事.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "校招/校招日志与经验总结.md", + "action": "rewritten", + "targetRelativePath": "软文/校招日志 校招经验总结.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "校招/知识大纲.md", + "action": "rewritten", + "targetRelativePath": "校招/知识大纲.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "URL%20解释%20-%20基础知识.md", + "action": "rewritten", + "targetRelativePath": "URL 解释 - 基础知识.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "个人简介.md", + "action": "rewritten", + "targetRelativePath": "@about", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "2023%20书单.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "2023%20进阶清单.md", + "action": "rewritten", + "targetRelativePath": "2023 进阶清单.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "action": "unresolved-to-text", + "reason": "excluded-private-or-sensitive-target" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "平台发布.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "./学习路径/JavaScript完整指南.md", + "action": "rewritten", + "targetRelativePath": "学习路径/JavaScript完整指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "./学习路径/Vue全栈路线.md", + "action": "rewritten", + "targetRelativePath": "学习路径/Vue全栈路线.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "./学习路径/React进阶路线.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "./面试准备/README.md", + "action": "rewritten", + "targetRelativePath": "面试准备/README.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "./翻译索引.md", + "action": "rewritten", + "targetRelativePath": "翻译索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "索引.md", + "kind": "markdown", + "originalHref": "./算法练习计划.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」React%20服务器组件%20(RSCs)%20的深入分析.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」React 服务器组件 (RSCs) 的深入分析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/为什么%20RSC%20才是正确答案?.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/为什么 RSC 才是正确答案?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」SolidStart%201.0:未来框架的形态.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」SolidStart 1.0:未来框架的形态.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「Astro%205.0%20」Astro新功能概述.md", + "action": "rewritten", + "targetRelativePath": "翻译/「Astro 5.0 」Astro新功能概述.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/Islands%20Architecture%20孤岛架构.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/Islands Architecture 孤岛架构.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」如何编写%20React%20应用程序的样式.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」如何编写 React 应用程序的样式.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」如何为应用选择最佳渲染策略.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」如何为应用选择最佳渲染策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」这种模式将破坏你React应用的TS性能.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」这种模式将破坏你React应用的TS性能.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」面向%20JavaScript%20开发人员的%20TSConfig%20简介.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」面向 JavaScript 开发人员的 TSConfig 简介.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」如何写出更好的Typescript代码.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」如何写出更好的Typescript代码.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」JavaScript%20舍入误差(在金融应用程序中).md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」JavaScript 舍入误差(在金融应用程序中).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」解析%20JavaScript%20中的循环依赖.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」解析 JavaScript 中的循环依赖.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」2024%20年的%205%20个%20JavaScript%20安全最佳实践.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」2024 年的 5 个 JavaScript 安全最佳实践.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/ECMAScript%20装饰器的%2010%20年.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/ECMAScript 装饰器的 10 年.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」谷歌在索引过程中如何处理%20JavaScript.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」谷歌在索引过程中如何处理 JavaScript.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」关于优化%20LCP%20的常见误解.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」关于优化 LCP 的常见误解.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/INP%20(Interaction%20to%20Next%20Paint)%20与用户体验真的有关系吗?.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/INP (Interaction to Next Paint) 与用户体验真的有关系吗?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/PRPL%20模式.md", + "action": "rewritten", + "targetRelativePath": "翻译/PRPL 模式.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/交互时导入.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/交互时导入.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」现在如何使用容器查询.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」现在如何使用容器查询.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」使用%20CSS%20解析器扩展来填充%20CSS(提案).md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」使用 CSS 解析器扩展来填充 CSS(提案).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/居中一个%20div%20的%20N%20种方法.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/居中一个 div 的 N 种方法.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/Express.js%20v5.0中的新增功能.md", + "action": "rewritten", + "targetRelativePath": "翻译/Express. js v5.0中的新增功能.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/在企业环境中正确使用%20Node.js%20的九大原.md", + "action": "rewritten", + "targetRelativePath": "翻译/在企业环境中正确使用 Node.js 的九大原.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/每个开发人员都应该知道的五大Node.js功能.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/每个开发人员都应该知道的五大Node.js功能.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/用于调试和分析的%205%20大%20Node.js%20工具.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/用于调试和分析的 5 大 Node.js 工具.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」从领域开始.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」从领域开始.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」选择技术栈.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」选择技术栈.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」如何初始化前端项目.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」设置项目.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」不要将%20DTO%20传递给用户界面组件.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」不要将 DTO 传递给用户界面组件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」从简单到复杂%20——%20软件四象限.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」从简单到复杂 —— 软件四象限.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」为%20Rust%20及所有语言优化%20WebAssembly.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」为 Rust 及所有语言优化 WebAssembly.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」使用%20Rust%20编程%20WebAssembly%20第一部分:从%20WAT%20到%20WASM%20集成.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」使用 Rust 编程 WebAssembly 第一部分:从 WAT 到 WASM 集成.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/什么是会话固定.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/什么是会话固定.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/「译」如何从头开始构建机器人检测脚本:分步指南.md", + "action": "rewritten", + "targetRelativePath": "翻译/「译」如何从头开始构建机器人检测脚本:分步指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/编写%20Dockerfile:从入门到精通.md", + "action": "rewritten", + "targetRelativePath": "翻译/编写 Dockerfile:从入门到精通.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./外文翻译/URL%20设计最佳实践.md", + "action": "rewritten", + "targetRelativePath": "外文翻译/URL 设计最佳实践.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/命名在编程中的重要性.md", + "action": "rewritten", + "targetRelativePath": "翻译/命名在编程中的重要性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "翻译索引.md", + "kind": "markdown", + "originalHref": "./翻译/Claude%204%20重磅来袭:你需要了解的一切.md", + "action": "rewritten", + "targetRelativePath": "翻译/Claude 4 重磅来袭:你需要了解的一切.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Flex 布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Flex 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Grid 布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Grid 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./伪类与伪元素的区别.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/伪类与伪元素的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./逻辑组合伪类.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/逻辑组合伪类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./CSS 自定义属性.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/CSS 自定义属性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Less 知识点汇总.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Less 知识点汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Stylus 学习整合.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Stylus 学习整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./PostCSS.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Tailwind CSS 核心概念:功能类优先.md", + "action": "rewritten", + "targetRelativePath": "CSS/Tailwind CSS 核心概念:功能类优先.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Vue scoped属性的用途和工作原理.md", + "action": "rewritten", + "targetRelativePath": "CSS/Vue scoped属性的用途和工作原理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./面试题/CSS 面试题汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/CSS 面试题汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./CSS 父元素没有被子元素撑开问题.md", + "action": "rewritten", + "targetRelativePath": "CSS/CSS 父元素没有被子元素撑开问题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./CSS 自定义属性.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/CSS 自定义属性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./CSS进阶:逻辑组合伪类.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/CSS进阶:逻辑组合伪类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Flex 布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Flex 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Grid 布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Grid 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Web 安全字体和网络字体 (Web Fonts).md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Web 安全字体和网络字体 (Web Fonts).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./伪类与伪元素的区别.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/伪类与伪元素的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./逻辑组合伪类.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/逻辑组合伪类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Less 知识点汇总.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Less 知识点汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./PostCSS.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Stylus 学习整合.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Stylus 学习整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Tailwind CSS 核心概念:功能类优先.md", + "action": "rewritten", + "targetRelativePath": "CSS/Tailwind CSS 核心概念:功能类优先.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./值得你了解的Tailwind CSS Tips和技巧.md", + "action": "rewritten", + "targetRelativePath": "CSS/值得你了解的Tailwind CSS Tips和技巧.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./Vue scoped属性的用途和工作原理.md", + "action": "rewritten", + "targetRelativePath": "CSS/Vue scoped属性的用途和工作原理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./basic/CSS 自定义属性.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/CSS 自定义属性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./basic/Flex 布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Flex 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./basic/Less 知识点汇总.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Less 知识点汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./basic/Stylus 学习整合.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Stylus 学习整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./basic/Web 安全字体和网络字体 (Web Fonts).md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Web 安全字体和网络字体 (Web Fonts).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./basic/伪类与伪元素的区别.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/伪类与伪元素的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./basic/逻辑组合伪类.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/逻辑组合伪类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./tailwindcss/Tailwind CSS 核心概念:功能类优先.md", + "action": "rewritten", + "targetRelativePath": "CSS/Tailwind CSS 核心概念:功能类优先.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "./面试题/CSS 面试题汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/CSS 面试题汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "../Vue/索引.md", + "action": "rewritten", + "targetRelativePath": "Vue/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "../React/索引.md", + "action": "rewritten", + "targetRelativePath": "React/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "CSS/索引.md", + "kind": "markdown", + "originalHref": "../前端杂文/CORS.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/CORS.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./TypeScript 笔记.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/TypeScript 笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./工具类型.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/工具类型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./函数泛型.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/函数泛型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./TS中的内置条件类型:ReturnType.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/TS中的内置条件类型:ReturnType.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./如何在TypeScript中迭代对象键.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/如何在TypeScript中迭代对象键.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./TS 装饰器使用一览.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/TS 装饰器使用一览.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./自定义协议唤起 | 唤端能力支持库编写 —— 基于TypeScript 编写.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/自定义协议唤起 | 唤端能力支持库编写 —— 基于TypeScript 编写.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/TypeScript 面试专题.md", + "action": "rewritten", + "targetRelativePath": "八股文/TypeScript/TypeScript 面试专题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/TypeScript面试题.md", + "action": "rewritten", + "targetRelativePath": "八股文/TypeScript/TypeScript面试题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./TS 装饰器使用一览.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/TS 装饰器使用一览.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./TS中的内置条件类型:ReturnType.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/TS中的内置条件类型:ReturnType.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./TypeScript 笔记.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/TypeScript 笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./函数泛型.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/函数泛型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./如何在TypeScript中迭代对象键.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/如何在TypeScript中迭代对象键.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./工具类型.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/工具类型.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./自定义协议唤起 | 唤端能力支持库编写 —— 基于TypeScript 编写.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/自定义协议唤起 | 唤端能力支持库编写 —— 基于TypeScript 编写.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./体操练习/BFE-TS TypeScript类型体操练习 Easy 1-10.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 1-10.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./体操练习/BFE-TS TypeScript类型体操练习 Easy 11-20.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 11-20.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./体操练习/BFE-TS TypeScript类型体操练习 Easy 21-30.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 21-30.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./体操练习/BFE-TS TypeScript类型体操练习 Easy 31-40.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 Easy 31-40.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./体操练习/BFE-TS TypeScript类型体操练习 41- 50.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 41- 50.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./体操练习/BFE-TS TypeScript类型体操练习 51- 60.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/体操练习/BFE-TS TypeScript类型体操练习 51- 60.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/TypeScript 面试专题.md", + "action": "rewritten", + "targetRelativePath": "八股文/TypeScript/TypeScript 面试专题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/TypeScript面试题.md", + "action": "rewritten", + "targetRelativePath": "八股文/TypeScript/TypeScript面试题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "../JavaScript/索引.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "../React/索引.md", + "action": "rewritten", + "targetRelativePath": "React/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "TypeScript/索引.md", + "kind": "markdown", + "originalHref": "../Vue/索引.md", + "action": "rewritten", + "targetRelativePath": "Vue/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue 进阶使用.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue 进阶使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./`$nextTick`深入探究.md", + "action": "rewritten", + "targetRelativePath": "Vue/`$nextTick`深入探究.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3渲染机制.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3渲染机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/Vue 3 深入组件笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 深入组件笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/自定义 Hook(组合式函数)、指令.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/自定义 Hook(组合式函数)、指令.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./组件自定义v-model以及自定义修饰符.md", + "action": "rewritten", + "targetRelativePath": "Vue/组件自定义v-model以及自定义修饰符.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue Router 浅析.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue Router 浅析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Pinia 学习笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Pinia 学习笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vuex 基础与进阶使用.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vuex 基础与进阶使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/Vue 响应式原理.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/Vue编译.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/Vue VDom.md", + "action": "rewritten", + "targetRelativePath": "Vue/源码学习/Vue VDom.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./面试题/Vue 3 面试题集合(系统整理升级变动).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 3 面试题集合(系统整理升级变动).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./面试题/Vue 面试(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 面试(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./面试题/Vue 面试(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 面试(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./`$nextTick`深入探究.md", + "action": "rewritten", + "targetRelativePath": "Vue/`$nextTick`深入探究.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue test方法.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue test方法.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue 进阶使用.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue 进阶使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue Router 浅析.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue Router 浅析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue keep-alive 笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue keep-alive 笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue 自定义钩子如何访问生命周期.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue.set()和this.$set().md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue.set()和this.$set().md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3渲染机制.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3渲染机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./VueBus 总线传参数.md", + "action": "rewritten", + "targetRelativePath": "Vue/VueBus 总线传参数.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue项目常用库.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue项目常用库.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./前端路由 hash 与 history 差异.md", + "action": "rewritten", + "targetRelativePath": "Vue/前端路由 hash 与 history 差异.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./渲染函数 hyperscript.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./组件自定义v-model以及自定义修饰符.md", + "action": "rewritten", + "targetRelativePath": "Vue/组件自定义v-model以及自定义修饰符.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/KeepAlive.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/KeepAlive.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/Nuxt3:新渲染模式-边缘渲染、swr等.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/Nuxt3:新渲染模式-边缘渲染与swr.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/Teleport 传送.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/Vue 3 事件处理注意事项.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 事件处理注意事项.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/Vue 3 性能优化.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/Vue 3 深入组件笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 深入组件笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/Vue3 组件 ref 注意事项.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue3 组件 ref 注意事项.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/内置组件.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/内置组件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/异步组件.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vue3/自定义 Hook(组合式函数)、指令.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/自定义 Hook(组合式函数)、指令.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Pinia 学习笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Pinia 学习笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./Vuex 基础与进阶使用.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vuex 基础与进阶使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./SSR/SSR 异步数据获取.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/SSR 异步数据获取.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./SSR/Nuxt3:新渲染模式-边缘渲染与swr.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/Nuxt3:新渲染模式-边缘渲染与swr.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./SSR/编写跨平台友好的代码.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/编写跨平台友好的代码.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./uni-app/uni-simple-router 库使用.md", + "action": "rewritten", + "targetRelativePath": "元框架/uni-app/uni-simple-router 库使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/Vue VDom.md", + "action": "rewritten", + "targetRelativePath": "Vue/源码学习/Vue VDom.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/Vue 响应式原理.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/VueRouter.md", + "action": "rewritten", + "targetRelativePath": "Vue/源码学习/VueRouter.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/Vue编译.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/数据流原理:Vuex & Pinia.md", + "action": "rewritten", + "targetRelativePath": "Vue/源码学习/数据流原理:Vuex & Pinia.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./面试题/Vue 3 面试题集合(系统整理升级变动).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 3 面试题集合(系统整理升级变动).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./面试题/Vue 面试(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 面试(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./面试题/Vue 面试(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 面试(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./interview/Vue 3 面试题集合(系统整理升级变动).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 3 面试题集合(系统整理升级变动).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./interview/Vue 面试(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 面试(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "./interview/Vue 面试(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 面试(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "../JavaScript/索引.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "../TypeScript/索引.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vue/索引.md", + "kind": "markdown", + "originalHref": "../CSS/索引.md", + "action": "rewritten", + "targetRelativePath": "CSS/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/JavaScript%20进阶整合.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/JavaScript 进阶整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/js中==与===的区别.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/js中==与===的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/IIFE%20立即执行函数表达式.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/IIFE 立即执行函数表达式.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20输出判断.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 输出判断.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/Property原型链与原型链.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Property原型链与原型链.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/深入解析call、apply、bind.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/深入解析call、apply、bind.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/ES%2012%20新特性.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/ES 12 新特性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/前端模块:CJS,%20AMD,%20UMD,%20ESM,%20System%20和%20IIFE.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/前端模块分类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/PromiseA%20集合.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/PromiseA 集合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/JavaScript%20错误处理指南.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript 错误处理指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/事件循环是如何影响页面渲染的?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/事件循环是如何影响页面渲染的?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/LocalStorage、sessionStorage%20封装%20-%20基于TypeScript.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/LocalStorage、sessionStorage 封装 - 基于TypeScript.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../Browser/在现代应用中使用%20localStorage%20的全面指南.md", + "action": "rewritten", + "targetRelativePath": "Browser/在现代应用中使用 localStorage 的全面指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../Browser/基于%20StorageEvent的跨tab事件传输方案.md", + "action": "rewritten", + "targetRelativePath": "Browser/基于 StorageEvent的跨tab事件传输方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/axios、XHR、XML、AJAX和Fetch分不清怎么办?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/axios、XHR、XML、AJAX和Fetch分不清怎么办?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/来认识一下实用的、好用的:URL%20API.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/来认识一下实用的、好用的:URL API.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/了解MutationObserver的使用以及在Vue3中的使用案例.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/了解MutationObserver的使用以及在Vue3中的使用案例.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/如何使用Performance%20API%20来衡量应用性能?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/如何使用Performance API 来衡量应用性能?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/WebPerf%20Snippets%20——%20直接可以在浏览器控制台中获取网页性能指标的代码片段.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebPerf Snippets —— 直接可以在浏览器控制台中获取网页性能指标的代码片段.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/怎么总有人混淆Service%20Worker%20和%20Web%20Worker?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/怎么总有人混淆Service Worker 和 Web Worker?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/Web%20Worker%20常见使用问题和解决方案.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 常见使用问题和解决方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/Web%20Worker%20与主线程通信场景下对postMessage的简洁封装.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 与主线程通信场景下对postMessage的简洁封装.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/WebAudio/Web%20Audio%20滤波器Filter.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebAudio/Web Audio 滤波器Filter.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/WebAudio/Tone.js%20框架食用指南.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebAudio/Tone.js 框架食用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/前端通过%20canvas%20实现图片裁剪.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/浏览器中如何通过webgl获取渲染器的供应商和版本信息?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/浏览器中如何通过webgl获取渲染器的供应商和版本信息?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/前端%20SSO%20单点登入方案.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/前端 SSO 单点登入方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../前端杂文/CORS.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/CORS.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/JavaScript优雅写法及骚操作.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript优雅写法及骚操作.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/玩转一行代码KO问题.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/玩转一行代码KO问题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/正则表达式卷起来!.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/正则表达式卷起来!.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/JavaScript%20如何跳出(终止)forEach%20循环.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript 如何跳出(终止)forEach 循环.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20数组去重.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 数组去重.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/Quill富文本编辑器使用%20-%20高度自定义现代%20Web%20富文本编辑器.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/库/Quill富文本编辑器使用 - 高度自定义现代 Web 富文本编辑器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/quill.js%20的文本库%20——%20delta%20的使用.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/库/quill.js 的文本库 —— delta 的使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/inquirer%20使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/inquirer 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/enquirer%20使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/enquirer 指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/yargs%20使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/yargs 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/ora%20优雅的终端旋转器.md", + "action": "rewritten", + "targetRelativePath": "Node/库/ora 优雅的终端旋转器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/ESLint.md", + "action": "rewritten", + "targetRelativePath": "Node/库/ESLint.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/Prettier.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Prettier.md", + "method": "unique-normalized-title" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/husky.md", + "action": "rewritten", + "targetRelativePath": "Node/库/husky.md", + "method": "unique-normalized-title" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/Puppeteer%20使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Puppeteer 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/Esprima%20指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Esprima 指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/JS代码混淆器:JavaScript%20obfuscator%20让你的代码看起来让人痛苦.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/库/JS代码混淆器:JavaScript obfuscator 让你的代码看起来让人痛苦.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/validate-npm-package-name%20小而美的库.md", + "action": "rewritten", + "targetRelativePath": "Node/库/validate-npm-package-name 小而美的库.md", + "method": "unique-normalized-title" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/库/Git%20相关工具.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Git 相关工具.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/前端模块:CJS,%20AMD,%20UMD,%20ESM,%20System%20和%20IIFE.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/前端模块分类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/构建工具应该包含哪些能力?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/构建工具应该包含哪些能力?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "./Webpack学习路径.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "./Vite学习路径.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/WebPerf%20Snippets%20——%20直接可以在浏览器控制台中获取网页性能指标的代码片段.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebPerf Snippets —— 直接可以在浏览器控制台中获取网页性能指标的代码片段.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/如何使用Performance%20API%20来衡量应用性能?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/如何使用Performance API 来衡量应用性能?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/事件循环是如何影响页面渲染的?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/事件循环是如何影响页面渲染的?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/JS垃圾回收机制.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/JS垃圾回收机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/为什么每个人都在谈论同构JavaScript%20以及为什么它很重要.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/为什么每个人都在谈论同构JavaScript 以及为什么它很重要.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/Atomics%20API.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/Atomics API.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/JSDoc%20初探:代码内的文档标记.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JSDoc 初探:代码内的文档标记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20高频手撕.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 高频手撕.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20输出判断.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 输出判断.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20数组去重.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 数组去重.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20面试题汇总(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20面试题汇总(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/小滴课堂JS题目汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/小滴课堂JS题目汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "../JavaScript/JavaScript%20进阶整合.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/JavaScript 进阶整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "./Node.js完整指南.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "./TypeScript学习路径.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "./Vue全栈路线.md", + "action": "rewritten", + "targetRelativePath": "学习路径/Vue全栈路线.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/JavaScript完整指南.md", + "kind": "markdown", + "originalHref": "./React进阶路线.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "./JavaScript完整指南.md", + "action": "rewritten", + "targetRelativePath": "学习路径/JavaScript完整指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue%20进阶使用.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue 进阶使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3渲染机制.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3渲染机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/自定义%20Hook(组合式函数)、指令.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/自定义 Hook(组合式函数)、指令.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/Vue%203%20深入组件笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 深入组件笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue.set()和this.$set().md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue.set()和this.$set().md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/`$nextTick`深入探究.md", + "action": "rewritten", + "targetRelativePath": "Vue/`$nextTick`深入探究.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/组件自定义v-model以及自定义修饰符.md", + "action": "rewritten", + "targetRelativePath": "Vue/组件自定义v-model以及自定义修饰符.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/Vue%203%20深入组件笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 深入组件笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/Vue3%20组件%20ref%20注意事项.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue3 组件 ref 注意事项.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/Vue%203%20事件处理注意事项.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 事件处理注意事项.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/异步组件.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/内置组件.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/内置组件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue%20keep-alive%20笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue keep-alive 笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/KeepAlive.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/KeepAlive.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/Teleport%20传送.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/前端路由%20hash%20与%20history%20差异.md", + "action": "rewritten", + "targetRelativePath": "Vue/前端路由 hash 与 history 差异.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Pinia%20学习笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Pinia 学习笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../CSS/Vue%20scoped属性的用途和工作原理.md", + "action": "rewritten", + "targetRelativePath": "CSS/Vue scoped属性的用途和工作原理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../CSS/Tailwind%20CSS%20核心概念:功能类优先.md", + "action": "rewritten", + "targetRelativePath": "CSS/Tailwind CSS 核心概念:功能类优先.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/Vue%203%20性能优化.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3/Vue 3 性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vite/构建Vite知识体系-项目性能优化.md", + "action": "rewritten", + "targetRelativePath": "Vite/构建Vite知识体系-项目性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Webpack/Webpack性能优化.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/SSR/编写跨平台友好的代码.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/编写跨平台友好的代码.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/SSR/SSR%20异步数据获取.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/SSR 异步数据获取.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../前端杂文/同构渲染:SSR%20&%20CSR.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/同构渲染:SSR (Server-Side Rendering) 与CSH (Client-Side Hydration).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3/Nuxt3:新渲染模式-边缘渲染、swr等.md", + "action": "rewritten", + "targetRelativePath": "Vue/SSR/Nuxt3:新渲染模式-边缘渲染与swr.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../JavaScript/为什么每个人都在谈论同构JavaScript%20以及为什么它很重要.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/为什么每个人都在谈论同构JavaScript 以及为什么它很重要.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/Vue项目常用库.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue项目常用库.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue/uni-app/uni-simple-router%20库使用.md", + "action": "rewritten", + "targetRelativePath": "元框架/uni-app/uni-simple-router 库使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../Vue%20Test%20Utils处理异步行为.md", + "action": "rewritten", + "targetRelativePath": "Vue Test Utils处理异步行为.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "../前端杂文/静态%20vs%20单元%20vs%20集成%20vs%20E2E%20测试.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/前端应用的静态测试vs单元测试vs集成测试vsE2E(端到端)测试.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "./JavaScript完整指南.md", + "action": "rewritten", + "targetRelativePath": "学习路径/JavaScript完整指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "./TypeScript学习路径.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "./CSS学习路径.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "./Vite学习路径.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "./Webpack学习路径.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "./Node.js完整指南.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "学习路径/Vue全栈路线.md", + "kind": "markdown", + "originalHref": "./React进阶路线.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20高频手撕.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 高频手撕.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript高频手撕.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript高频手撕.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20输出判断.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 输出判断.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20面试题汇总(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20面试题汇总(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/小滴课堂JS题目汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/小滴课堂JS题目汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../JavaScript/面试题/JavaScript%20数组去重.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 数组去重.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../Vue/Vue3渲染机制.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue3渲染机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../Vue/`$nextTick`深入探究.md", + "action": "rewritten", + "targetRelativePath": "Vue/`$nextTick`深入探究.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../Vue/Vue%20keep-alive%20笔记.md", + "action": "rewritten", + "targetRelativePath": "Vue/Vue keep-alive 笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../Vue/前端路由%20hash%20与%20history%20差异.md", + "action": "rewritten", + "targetRelativePath": "Vue/前端路由 hash 与 history 差异.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../TypeScript/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../CSS/basic/Flex%20布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Flex 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../CSS/basic/Grid%20布局.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/Grid 布局.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../CSS/basic/伪类与伪元素的区别.md", + "action": "rewritten", + "targetRelativePath": "CSS/基础知识/伪类与伪元素的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../计算机网络/HTTP/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../计算机网络/浏览器的缓存机制(位置).md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-缓存位置.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../计算机网络/浏览器的缓存机制(请求头).md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-请求头.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../前端杂文/CORS.md", + "action": "rewritten", + "targetRelativePath": "前端杂文/CORS.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../Node/事件循环/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../Node/笔记/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../JavaScript/事件循环是如何影响页面渲染的?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/事件循环是如何影响页面渲染的?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../浏览器工作原理/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../leetcode/codeTop/字节跳动CodeTop(一).md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(一).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../leetcode/codeTop/字节跳动CodeTop(二).md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(二).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../leetcode/codeTop/字节跳动CodeTop(三).md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/字节跳动CodeTop(三).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../leetcode/codeTop/腾讯%20CodeTop.md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/腾讯 CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../leetcode/codeTop/美团%20CodeTop.md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/美团CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../leetcode/codeTop/拼多多%20CodeTop.md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/拼多多CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../leetcode/codeTop/快手%20CodeTop.md", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/快手CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../牛客/牛客网刷题1-10.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题1-10.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../牛客/牛客网刷题11-20.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题11-20.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../牛客/牛客网刷题21-30.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题21-30.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../牛客/牛客网刷题31-40.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题31-40.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../牛客/牛客网刷题41-50.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题41-50.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../牛客/牛客网刷题51-60.md", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题51-60.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../牛客/错题本/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面试通用/算法与数据结构:六大排序算法.md", + "action": "rewritten", + "targetRelativePath": "面试通用/「算法与数据结构」梳理6大排序算法 为了offer.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面经/哔哩哔哩面经.md", + "action": "rewritten", + "targetRelativePath": "面经/哔哩哔哩面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面经/快手面经.md", + "action": "rewritten", + "targetRelativePath": "面经/快手面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面经/美团面经.md", + "action": "rewritten", + "targetRelativePath": "面经/美团面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面经/朴朴面经.md", + "action": "rewritten", + "targetRelativePath": "面经/朴朴面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面经/星网锐捷面经.md", + "action": "rewritten", + "targetRelativePath": "面经/星网锐捷面经.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面经/面试问答/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面试通用/前端工程师面试手册.md", + "action": "rewritten", + "targetRelativePath": "面试通用/前端工程师面试手册.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面试通用/10万字前端面试书总结.md", + "action": "rewritten", + "targetRelativePath": "面试通用/前端面试十万字书籍总结.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面试通用/Node.js前端面试题.md", + "action": "rewritten", + "targetRelativePath": "面试通用/Node.js 前端面试题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面试通用/计算机网络面试题.md", + "action": "rewritten", + "targetRelativePath": "面试通用/计算机网络面试题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../面试通用/算法与数据结构:六大排序算法.md", + "action": "rewritten", + "targetRelativePath": "面试通用/「算法与数据结构」梳理6大排序算法 为了offer.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../校招/2022年中总结.md", + "action": "rewritten", + "targetRelativePath": "软文/2022年中总结.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../校招/2022年终总结.md", + "action": "rewritten", + "targetRelativePath": "软文/2022年终总结.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../校招/2023年中总结.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../校招/校招日志与经验总结.md", + "action": "rewritten", + "targetRelativePath": "软文/校招日志 校招经验总结.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../校招/Offer、三方、两方协议、违约.md", + "action": "rewritten", + "targetRelativePath": "软文/offer,三方,两方,毁约 这些你需要知道的事.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../校招/知识大纲.md", + "action": "rewritten", + "targetRelativePath": "校招/知识大纲.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../学习路径/JavaScript完整指南.md", + "action": "rewritten", + "targetRelativePath": "学习路径/JavaScript完整指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../学习路径/Vue全栈路线.md", + "action": "rewritten", + "targetRelativePath": "学习路径/Vue全栈路线.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "面试准备/README.md", + "kind": "markdown", + "originalHref": "../学习路径/React进阶路线.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "HTML%20高频.md", + "action": "rewritten", + "targetRelativePath": "八股文/HTML 高频.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "CSS%20面试题汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/CSS 面试题汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/JavaScript/interview/output.html", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 输出判断.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/JavaScript/interview/writing.html", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 高频手撕.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/JavaScript/interview/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/browser-working/interview/", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/codeTop/ks.html", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/快手CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/leetcode/codeTop/byteDance.html", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/leetcode/codeTop/Tencent.html", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/腾讯 CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/leetcode/codeTop/Tencent.html", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/腾讯 CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/leetcode/codeTop/meituan.html", + "action": "rewritten", + "targetRelativePath": "刷题/Leetcode/codeTop/美团CodeTop.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "../Vue/interview/Vue%20面试(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 面试(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "../Vue/interview/Vue%20面试(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/Vue/Vue 面试(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "../Vue/uni-app/uni-simple-router%20库使用.md", + "action": "rewritten", + "targetRelativePath": "元框架/uni-app/uni-simple-router 库使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/Node/01.html", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(1)内核引擎.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/Node/Node.html", + "action": "rewritten", + "targetRelativePath": "Node/Node.js 进程通信.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/React/basic.html", + "action": "rewritten", + "targetRelativePath": "React/React基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/React/Hooks/basic.html", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/React Hooks 基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/React/Hooks", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/ReactHooks汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "React%20项目优化.md", + "action": "rewritten", + "targetRelativePath": "React/React 项目优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "React%20中使用%20TypeScript.md", + "action": "rewritten", + "targetRelativePath": "React/React 中使用 TypeScript.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/React/interview/part1.html", + "action": "rewritten", + "targetRelativePath": "八股文/React/React 面试题(一).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/React/interview/part2.html", + "action": "rewritten", + "targetRelativePath": "八股文/React/React 面试题(二).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/React/dva", + "action": "rewritten", + "targetRelativePath": "React/Dva/dva 数据获取和处理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/React/umi", + "action": "rewritten", + "targetRelativePath": "元框架/Umi/UmiJS 乌米学习实战.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "Mobx%20教程.md", + "action": "rewritten", + "targetRelativePath": "React/Mobx 教程.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "../React%20框架/React%20Native/React%20Native%20基础.md", + "action": "rewritten", + "targetRelativePath": "React/React Native/React Native 基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "../Webpack/Webpack%20性能优化.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "../Webpack/Webpack%20配置及规则.md", + "action": "rewritten", + "targetRelativePath": "Webpack/Webpack 配置及规则.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/DB/Redis.html", + "action": "rewritten", + "targetRelativePath": "数据库/Redis 学习笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/DB/perform.html", + "action": "rewritten", + "targetRelativePath": "数据库/高并发常见性能表现评估指标.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/DB/MySQL/index.html", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/DB/MySQL.html", + "action": "rewritten", + "targetRelativePath": "数据库/MySQL从入门到入院.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/front-end/BFF.html", + "action": "rewritten", + "targetRelativePath": "前端杂文/BFF 模式 (Backend For Frontend).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/browser-working/L1.html", + "action": "rewritten", + "targetRelativePath": "浏览器原理/L1 浏览器基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/interview/6sort.html", + "action": "rewritten", + "targetRelativePath": "面试通用/「算法与数据结构」梳理6大排序算法 为了offer.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/interview/CO.html", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/interview/JavaScript.html", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/interview/OS.html", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/interview/JavaScript.html", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/interview/HTML.html", + "action": "rewritten", + "targetRelativePath": "八股文/HTML 高频.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/interview/CSS.html", + "action": "rewritten", + "targetRelativePath": "八股文/CSS 面试题汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "CSS刷题【错题本】.md", + "action": "rewritten", + "targetRelativePath": "牛客/错题本/CSS刷题【错题本】.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "HTML刷题【错题本】.md", + "action": "rewritten", + "targetRelativePath": "牛客/错题本/HTML刷题【错题本】.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "JavaScript刷题【错题本】.md", + "action": "rewritten", + "targetRelativePath": "牛客/错题本/JavaScript刷题【错题本】.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/nowcoder/wrongTopic/Vue", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/nowcoder/wrongTopic/React", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "计算机网络基础【错题本】.md", + "action": "rewritten", + "targetRelativePath": "牛客/错题本/计算机网络基础【错题本】.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/nowcoder/10.html", + "action": "rewritten", + "targetRelativePath": "牛客/牛客网刷题1-10.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/campusRec/need.html", + "action": "rewritten", + "targetRelativePath": "软文/offer,三方,两方,毁约 这些你需要知道的事.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "校招/知识大纲.md", + "kind": "markdown", + "originalHref": "/campusRec/company.html", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./HTTP/HTTP 版本整合.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTP 版本整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./HTTP/HTTPS与SSL TLS.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTPS与SSL TLS.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./HTTP/TLS1.2连接过程解析.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/HTTP/TLS1.2连接过程解析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./浏览器缓存机制-请求头.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-请求头.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./浏览器缓存机制-缓存位置.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-缓存位置.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./CDN 内容分发网络.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/CDN 内容分发网络.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./Nginx:高性能的Web服务器.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/Nginx:高性能的Web服务器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./OpenResty:更灵活的Web服务器.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/OpenResty:更灵活的Web服务器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./WAF 网络应用防火墙.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/WAF 网络应用防火墙.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./WebSocket.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/WebSocket.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./面试题/TCP应知应会(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/计算机网络/TCP应知应会(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./面试题/UDP应知应会.md", + "action": "rewritten", + "targetRelativePath": "八股文/计算机网络/UDP应知应会.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./HTTP/HTTP 代理和缓存.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTP 代理和缓存.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./HTTP/HTTP 版本整合.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTP 版本整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./HTTP/HTTPS与SSL TLS.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTPS与SSL TLS.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./HTTP/HTTPS性能优化.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/HTTP/HTTPS性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./HTTP/TLS1.2连接过程解析.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/HTTP/TLS1.2连接过程解析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./RESTful 下请求方法的幂等性.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/RESTful 下请求方法的幂等性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./CDN 内容分发网络.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/CDN 内容分发网络.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./WebSocket.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/WebSocket.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./前端存储方案一览.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/前端存储方案一览.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./浏览器缓存机制-缓存位置.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-缓存位置.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./浏览器缓存机制-请求头.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/浏览器缓存机制-请求头.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./Nginx:高性能的Web服务器.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/Nginx:高性能的Web服务器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./OpenResty:更灵活的Web服务器.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/OpenResty:更灵活的Web服务器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./WAF 网络应用防火墙.md", + "action": "rewritten", + "targetRelativePath": "计算机科学/计算机网络/WAF 网络应用防火墙.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./面试题/TCP应知应会(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/计算机网络/TCP应知应会(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./面试题/TCP应知应会(中).md", + "action": "rewritten", + "targetRelativePath": "八股文/计算机网络/TCP应知应会(中).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./面试题/TCP应知应会(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/计算机网络/TCP应知应会(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./面试题/UDP应知应会.md", + "action": "rewritten", + "targetRelativePath": "八股文/计算机网络/UDP应知应会.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./面试题/计网常考面试题.md", + "action": "rewritten", + "targetRelativePath": "八股文/计算机网络/计网常考面试题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "./面试题/计网面试题汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/计算机网络/计网面试题汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "../Browser/索引.md", + "action": "rewritten", + "targetRelativePath": "Browser/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "../浏览器工作原理/索引.md", + "action": "rewritten", + "targetRelativePath": "浏览器工作原理/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "计算机网络/索引.md", + "kind": "markdown", + "originalHref": "../Node/索引.md", + "action": "rewritten", + "targetRelativePath": "Node/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./CORB 策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./CORB 应对策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 应对策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./CORB 兼容性和影响.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 兼容性和影响.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "action": "rewritten", + "targetRelativePath": "Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./浏览器插件开发框架:WXT.md", + "action": "rewritten", + "targetRelativePath": "Browser/浏览器插件开发框架:WXT.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./Web Components 中使用生命周期回调函数.md", + "action": "rewritten", + "targetRelativePath": "Browser/Web Components 中使用生命周期回调函数.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./在现代应用中使用 localStorage 的全面指南.md", + "action": "rewritten", + "targetRelativePath": "Browser/在现代应用中使用 localStorage 的全面指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./基于 StorageEvent的跨tab事件传输方案.md", + "action": "rewritten", + "targetRelativePath": "Browser/基于 StorageEvent的跨tab事件传输方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./Web浏览器滚动方案一览| rAF等.md", + "action": "rewritten", + "targetRelativePath": "Browser/Web浏览器滚动方案一览| rAF等.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./CORB 策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./CORB 应对策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 应对策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./CORB 兼容性和影响.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 兼容性和影响.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "action": "rewritten", + "targetRelativePath": "Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./Web Components 中使用生命周期回调函数.md", + "action": "rewritten", + "targetRelativePath": "Browser/Web Components 中使用生命周期回调函数.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./Web浏览器滚动方案一览| rAF等.md", + "action": "rewritten", + "targetRelativePath": "Browser/Web浏览器滚动方案一览| rAF等.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./在现代应用中使用 localStorage 的全面指南.md", + "action": "rewritten", + "targetRelativePath": "Browser/在现代应用中使用 localStorage 的全面指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./基于 StorageEvent的跨tab事件传输方案.md", + "action": "rewritten", + "targetRelativePath": "Browser/基于 StorageEvent的跨tab事件传输方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "./浏览器插件开发框架:WXT.md", + "action": "rewritten", + "targetRelativePath": "Browser/浏览器插件开发框架:WXT.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "../浏览器工作原理/索引.md", + "action": "rewritten", + "targetRelativePath": "浏览器工作原理/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "../JavaScript/索引.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Browser/索引.md", + "kind": "markdown", + "originalHref": "../计算机网络/索引.md", + "action": "rewritten", + "targetRelativePath": "计算机网络/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vite/Vite 小册笔记.md", + "kind": "wiki", + "originalHref": "Vite 小册笔记", + "action": "rewritten", + "targetRelativePath": "Vite/Vite 小册笔记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vite/Vite 小册笔记.md", + "kind": "wiki", + "originalHref": "Rollup 基本概念、使用和插件机制", + "action": "rewritten", + "targetRelativePath": "Vite/Rollup 基本概念、使用和插件机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vite/Vite 小册笔记.md", + "kind": "wiki", + "originalHref": "项目 Lint 管理", + "action": "rewritten", + "targetRelativePath": "Vite/项目 Lint 管理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Vite/Vite 小册笔记.md", + "kind": "wiki", + "originalHref": "构建Vite知识体系-项目性能优化", + "action": "rewritten", + "targetRelativePath": "Vite/构建Vite知识体系-项目性能优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./面试题/README.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/README.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./001-database-sharding.md", + "action": "rewritten", + "targetRelativePath": "MySQL/001-database-sharding.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./002-sql-join-on-where.md", + "action": "rewritten", + "targetRelativePath": "MySQL/002-sql-join-on-where.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./003-normalization-denormalization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/003-normalization-denormalization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./004-mysql-order-by-sorting.md", + "action": "rewritten", + "targetRelativePath": "MySQL/004-mysql-order-by-sorting.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./005-sql-execution-process.md", + "action": "rewritten", + "targetRelativePath": "MySQL/005-sql-execution-process.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./006-mysql-index-types.md", + "action": "rewritten", + "targetRelativePath": "MySQL/006-mysql-index-types.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./007-change-buffer.md", + "action": "rewritten", + "targetRelativePath": "MySQL/007-change-buffer.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./008-batch-insert.md", + "action": "rewritten", + "targetRelativePath": "MySQL/008-batch-insert.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./009-full-and-incremental-sync.md", + "action": "rewritten", + "targetRelativePath": "MySQL/009-full-and-incremental-sync.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./010-cursor-pagination.md", + "action": "rewritten", + "targetRelativePath": "MySQL/010-cursor-pagination.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./011-storage-engines.md", + "action": "rewritten", + "targetRelativePath": "MySQL/011-storage-engines.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./012-clustered-and-secondary-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/012-clustered-and-secondary-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./013-index-back-to-table.md", + "action": "rewritten", + "targetRelativePath": "MySQL/013-index-back-to-table.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./014-leftmost-prefix-rule.md", + "action": "rewritten", + "targetRelativePath": "MySQL/014-leftmost-prefix-rule.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./015-covering-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/015-covering-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./016-index-condition-pushdown.md", + "action": "rewritten", + "targetRelativePath": "MySQL/016-index-condition-pushdown.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./017-index-design-notes.md", + "action": "rewritten", + "targetRelativePath": "MySQL/017-index-design-notes.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./018-index-effect-troubleshooting.md", + "action": "rewritten", + "targetRelativePath": "MySQL/018-index-effect-troubleshooting.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./019-too-many-indexes.md", + "action": "rewritten", + "targetRelativePath": "MySQL/019-too-many-indexes.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./020-bplus-tree-query-process.md", + "action": "rewritten", + "targetRelativePath": "MySQL/020-bplus-tree-query-process.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./021-why-bplus-tree-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/021-why-bplus-tree-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./022-mysql-logs-binlog-redo-undo.md", + "action": "rewritten", + "targetRelativePath": "MySQL/022-mysql-logs-binlog-redo-undo.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./023-mysql-transaction-implementation.md", + "action": "rewritten", + "targetRelativePath": "MySQL/023-mysql-transaction-implementation.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./024-long-running-transactions.md", + "action": "rewritten", + "targetRelativePath": "MySQL/024-long-running-transactions.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./025-mvcc.md", + "action": "rewritten", + "targetRelativePath": "MySQL/025-mvcc.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./026-secondary-index-mvcc.md", + "action": "rewritten", + "targetRelativePath": "MySQL/026-secondary-index-mvcc.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./027-without-mvcc.md", + "action": "rewritten", + "targetRelativePath": "MySQL/027-without-mvcc.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./028-transaction-isolation-levels.md", + "action": "rewritten", + "targetRelativePath": "MySQL/028-transaction-isolation-levels.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./029-default-isolation-level.md", + "action": "rewritten", + "targetRelativePath": "MySQL/029-default-isolation-level.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./030-dirty-nonrepeatable-phantom-read.md", + "action": "rewritten", + "targetRelativePath": "MySQL/030-dirty-nonrepeatable-phantom-read.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./031-lock-types.md", + "action": "rewritten", + "targetRelativePath": "MySQL/031-lock-types.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./032-optimistic-pessimistic-lock.md", + "action": "rewritten", + "targetRelativePath": "MySQL/032-optimistic-pessimistic-lock.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./033-deadlock-handling.md", + "action": "rewritten", + "targetRelativePath": "MySQL/033-deadlock-handling.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./034-explain-query-analysis.md", + "action": "rewritten", + "targetRelativePath": "MySQL/034-explain-query-analysis.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./035-count-differences.md", + "action": "rewritten", + "targetRelativePath": "MySQL/035-count-differences.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./036-int-display-width.md", + "action": "rewritten", + "targetRelativePath": "MySQL/036-int-display-width.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./037-varchar-vs-char.md", + "action": "rewritten", + "targetRelativePath": "MySQL/037-varchar-vs-char.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./038-sql-tuning.md", + "action": "rewritten", + "targetRelativePath": "MySQL/038-sql-tuning.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./039-avoid-single-point-failure.md", + "action": "rewritten", + "targetRelativePath": "MySQL/039-avoid-single-point-failure.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./040-read-write-splitting.md", + "action": "rewritten", + "targetRelativePath": "MySQL/040-read-write-splitting.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./041-replication.md", + "action": "rewritten", + "targetRelativePath": "MySQL/041-replication.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./042-replication-lag.md", + "action": "rewritten", + "targetRelativePath": "MySQL/042-replication-lag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./001-database-sharding.md", + "action": "rewritten", + "targetRelativePath": "MySQL/001-database-sharding.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./043-sharding-implementation-process.md", + "action": "rewritten", + "targetRelativePath": "MySQL/043-sharding-implementation-process.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./044-sharding-problems.md", + "action": "rewritten", + "targetRelativePath": "MySQL/044-sharding-problems.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./045-buffer-pool-read-path.md", + "action": "rewritten", + "targetRelativePath": "MySQL/045-buffer-pool-read-path.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./046-doublewrite-buffer.md", + "action": "rewritten", + "targetRelativePath": "MySQL/046-doublewrite-buffer.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./047-log-buffer.md", + "action": "rewritten", + "targetRelativePath": "MySQL/047-log-buffer.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./048-avoid-multi-table-joins.md", + "action": "rewritten", + "targetRelativePath": "MySQL/048-avoid-multi-table-joins.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./010-cursor-pagination.md", + "action": "rewritten", + "targetRelativePath": "MySQL/010-cursor-pagination.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./049-slow-sql-monitoring-optimization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/049-slow-sql-monitoring-optimization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./050-delete-drop-truncate.md", + "action": "rewritten", + "targetRelativePath": "MySQL/050-delete-drop-truncate.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./002-sql-join-on-where.md", + "action": "rewritten", + "targetRelativePath": "MySQL/002-sql-join-on-where.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./051-limit-offset-performance.md", + "action": "rewritten", + "targetRelativePath": "MySQL/051-limit-offset-performance.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./052-datetime-vs-timestamp.md", + "action": "rewritten", + "targetRelativePath": "MySQL/052-datetime-vs-timestamp.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./003-normalization-denormalization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/003-normalization-denormalization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./053-common-mysql-functions.md", + "action": "rewritten", + "targetRelativePath": "MySQL/053-common-mysql-functions.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./054-text-type-limits.md", + "action": "rewritten", + "targetRelativePath": "MySQL/054-text-type-limits.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./055-auto-increment-maximum.md", + "action": "rewritten", + "targetRelativePath": "MySQL/055-auto-increment-maximum.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./056-money-data-type.md", + "action": "rewritten", + "targetRelativePath": "MySQL/056-money-data-type.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./057-database-view.md", + "action": "rewritten", + "targetRelativePath": "MySQL/057-database-view.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./058-database-cursor.md", + "action": "rewritten", + "targetRelativePath": "MySQL/058-database-cursor.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./059-large-binary-content-storage.md", + "action": "rewritten", + "targetRelativePath": "MySQL/059-large-binary-content-storage.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./060-mysql-vs-oracle-advantages.md", + "action": "rewritten", + "targetRelativePath": "MySQL/060-mysql-vs-oracle-advantages.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./061-varchar-length-difference.md", + "action": "rewritten", + "targetRelativePath": "MySQL/061-varchar-length-difference.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./062-when-not-to-create-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/062-when-not-to-create-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./063-exists-vs-in.md", + "action": "rewritten", + "targetRelativePath": "MySQL/063-exists-vs-in.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./064-write-ahead-logging.md", + "action": "rewritten", + "targetRelativePath": "MySQL/064-write-ahead-logging.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./065-production-isolation-level-choice.md", + "action": "rewritten", + "targetRelativePath": "MySQL/065-production-isolation-level-choice.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./066-avoid-stored-procedures.md", + "action": "rewritten", + "targetRelativePath": "MySQL/066-avoid-stored-procedures.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./067-zero-downtime-database-migration.md", + "action": "rewritten", + "targetRelativePath": "MySQL/067-zero-downtime-database-migration.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./068-mysql-performance-optimization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/068-mysql-performance-optimization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./011-storage-engines.md", + "action": "rewritten", + "targetRelativePath": "MySQL/011-storage-engines.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./069-query-optimizer-plan-selection.md", + "action": "rewritten", + "targetRelativePath": "MySQL/069-query-optimizer-plan-selection.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./070-logical-vs-physical-delete.md", + "action": "rewritten", + "targetRelativePath": "MySQL/070-logical-vs-physical-delete.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./071-logical-vs-physical-foreign-key.md", + "action": "rewritten", + "targetRelativePath": "MySQL/071-logical-vs-physical-foreign-key.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./072-innodb-binlog-two-phase-commit.md", + "action": "rewritten", + "targetRelativePath": "MySQL/072-innodb-binlog-two-phase-commit.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./073-three-level-bplus-tree-capacity.md", + "action": "rewritten", + "targetRelativePath": "MySQL/073-three-level-bplus-tree-capacity.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./074-table-design-checklist.md", + "action": "rewritten", + "targetRelativePath": "MySQL/074-table-design-checklist.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./075-redo-log-insert-records.md", + "action": "rewritten", + "targetRelativePath": "MySQL/075-redo-log-insert-records.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./076-sql-logical-execution-order.md", + "action": "rewritten", + "targetRelativePath": "MySQL/076-sql-logical-execution-order.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./021-why-bplus-tree-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/021-why-bplus-tree-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./077-maximum-table-columns.md", + "action": "rewritten", + "targetRelativePath": "MySQL/077-maximum-table-columns.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./078-change-data-capture.md", + "action": "rewritten", + "targetRelativePath": "MySQL/078-change-data-capture.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/README.md", + "kind": "markdown", + "originalHref": "./079-multithreaded-data-warehouse-sync.md", + "action": "rewritten", + "targetRelativePath": "MySQL/079-multithreaded-data-warehouse-sync.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "01-redis-as-message-queue.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/01-redis-as-message-queue.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "02-distributed-lock-alternatives.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/02-distributed-lock-alternatives.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "03-distributed-lock-essentials.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/03-distributed-lock-essentials.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "04-redis-lock-pros-cons.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/04-redis-lock-pros-cons.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "05-redis-lock-timeout.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/05-redis-lock-timeout.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "06-redis-big-key.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/06-redis-big-key.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "07-cache-value.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/07-cache-value.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "08-cache-penetration.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/08-cache-penetration.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "09-cache-breakdown.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/09-cache-breakdown.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "10-cache-avalanche.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/10-cache-avalanche.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "11-redis-hot-key.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/11-redis-hot-key.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "12-redis-reentrant-lock.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/12-redis-reentrant-lock.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "13-message-fanout.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/13-message-fanout.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "14-message-decoupling.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/14-message-decoupling.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "15-message-peak-shaving.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/15-message-peak-shaving.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "16-kafka-throughput.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/16-kafka-throughput.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "17-kafka-message-loss.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/17-kafka-message-loss.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "18-kafka-duplicate-consumption.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/18-kafka-duplicate-consumption.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "19-mq-backlog.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/19-mq-backlog.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "20-database-sharding-when.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/20-database-sharding-when.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "21-tcp-client-failure-detection.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/21-tcp-client-failure-detection.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "22-sharding-cross-query-transactions.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/22-sharding-cross-query-transactions.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "23-mysql-slow-sql.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/23-mysql-slow-sql.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "24-mysql-monitoring.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/24-mysql-monitoring.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "25-mysql-deep-pagination.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/25-mysql-deep-pagination.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "26-mysql-configuration-tuning.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/26-mysql-configuration-tuning.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "27-mysql-replication-lag.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/27-mysql-replication-lag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "28-mysql-primary-failover.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/28-mysql-primary-failover.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "29-http-user-identity-cluster.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/29-http-user-identity-cluster.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "30-server-closes-tcp.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/30-server-closes-tcp.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "31-tcp-server-crash-power-loss.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/31-tcp-server-crash-power-loss.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "场景面试题/README.md", + "kind": "markdown", + "originalHref": "32-tcp-connection-count.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/32-tcp-connection-count.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JavaScript 进阶整合.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/JavaScript 进阶整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./ES5、6 指导规范.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/ES5、6 指导规范.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./ES 12 新特性.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/ES 12 新特性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./Property原型链与原型链.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Property原型链与原型链.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./深入解析call、apply、bind.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/深入解析call、apply、bind.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JS垃圾回收机制.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/JS垃圾回收机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./PromiseA 集合.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/PromiseA 集合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./事件循环是如何影响页面渲染的?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/事件循环是如何影响页面渲染的?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./页面生命周期:DOMContentLoaded, load, beforeunload, unload.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/页面生命周期.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./如何使用Performance API 来衡量应用性能?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/如何使用Performance API 来衡量应用性能?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./来认识一下实用的、好用的:URL API.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/来认识一下实用的、好用的:URL API.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./Web Worker 常见使用问题和解决方案.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 常见使用问题和解决方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript 面试题汇总(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript 面试题汇总(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript 高频手撕.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 高频手撕.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./Atomics API.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/Atomics API.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./ES 12 新特性.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/ES 12 新特性.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./ES5、6 指导规范.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/ES5、6 指导规范.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./IIFE 立即执行函数表达式.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/IIFE 立即执行函数表达式.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JSDoc 初探:代码内的文档标记.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JSDoc 初探:代码内的文档标记.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JS垃圾回收机制.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/JS垃圾回收机制.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JavaScript 如何跳出(终止)forEach 循环.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript 如何跳出(终止)forEach 循环.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JavaScript 进阶整合.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/JavaScript 进阶整合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JavaScript 错误处理指南.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript 错误处理指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JavaScript优雅写法及骚操作.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript优雅写法及骚操作.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./PromiseA 集合.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/PromiseA 集合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./Property原型链与原型链.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Property原型链与原型链.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./Set,Map 和 Array的区别.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Set,Map 和 Array的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./js中==与===的区别.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/基础知识/js中==与===的区别.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./深入解析call、apply、bind.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/深入解析call、apply、bind.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./正则表达式卷起来!.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/正则表达式卷起来!.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./玩转一行代码KO问题.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/玩转一行代码KO问题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./JavaScript 获取用户操作系统信息及浏览器信息.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/JavaScript 获取用户操作系统信息及浏览器信息.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./LocalStorage、sessionStorage 封装 - 基于TypeScript.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/LocalStorage、sessionStorage 封装 - 基于TypeScript.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./Web Worker 常见使用问题和解决方案.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 常见使用问题和解决方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./Web Worker 与主线程通信场景下对postMessage的简洁封装.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 与主线程通信场景下对postMessage的简洁封装.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./WebAudio/Tone.js 框架食用指南.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebAudio/Tone.js 框架食用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./WebAudio/Web Audio 滤波器Filter.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebAudio/Web Audio 滤波器Filter.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./WebPerf Snippets —— 直接可以在浏览器控制台中获取网页性能指标的代码片段.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/WebPerf Snippets —— 直接可以在浏览器控制台中获取网页性能指标的代码片段.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./axios、XHR、XML、AJAX和Fetch分不清怎么办?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/技术实践/axios、XHR、XML、AJAX和Fetch分不清怎么办?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./了解MutationObserver的使用以及在Vue3中的使用案例.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/了解MutationObserver的使用以及在Vue3中的使用案例.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./事件循环是如何影响页面渲染的?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/事件循环是如何影响页面渲染的?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./前端 SSO 单点登入方案.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/前端 SSO 单点登入方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./前端通过 canvas 实现图片裁剪.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./如何使用Performance API 来衡量应用性能?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/如何使用Performance API 来衡量应用性能?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./怎么总有人混淆Service Worker 和 Web Worker?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/怎么总有人混淆Service Worker 和 Web Worker?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./来认识一下实用的、好用的:URL API.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/来认识一下实用的、好用的:URL API.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./浏览器中如何通过webgl获取渲染器的供应商和版本信息?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/浏览器中如何通过webgl获取渲染器的供应商和版本信息?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./页面生命周期:DOMContentLoaded, load, beforeunload, unload.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/页面生命周期.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./前端模块:CJS, AMD, UMD, ESM, System 和 IIFE.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/前端模块分类.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./为什么每个人都在谈论同构JavaScript 以及为什么它很重要.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/为什么每个人都在谈论同构JavaScript 以及为什么它很重要.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./构建工具应该包含哪些能力?.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/构建工具应该包含哪些能力?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./使用Node.js、Express.js、TS写个简单的图床脚本(一).md", + "action": "rewritten", + "targetRelativePath": "JavaScript/使用Node.js、Express.js、TS写个简单的图床脚本(一).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./使用Node.js、pm2和ssh2模块实现一个简单的Node.js项目部署脚本.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/使用Node.js、pm2和ssh2模块实现一个简单的Node.js项目部署脚本.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./库/ESLint.md", + "action": "rewritten", + "targetRelativePath": "Node/库/ESLint.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./库/Prettier.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Prettier.md", + "method": "unique-normalized-title" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./库/Puppeteer 使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/Puppeteer 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./库/Quill富文本编辑器使用 - 高度自定义现代 Web 富文本编辑器.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/库/Quill富文本编辑器使用 - 高度自定义现代 Web 富文本编辑器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./库/enquirer 使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/enquirer 指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./库/inquirer 使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/inquirer 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./库/yargs 使用指南.md", + "action": "rewritten", + "targetRelativePath": "Node/库/yargs 使用指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript 数组去重.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 数组去重.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript 输出判断.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 输出判断.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript 面试题汇总(上).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(上).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript 面试题汇总(下).md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 面试题汇总(下).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript 高频手撕.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript 高频手撕.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/JavaScript高频手撕.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/JavaScript高频手撕.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "./面试题/小滴课堂JS题目汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/JavaScript/小滴课堂JS题目汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "../TypeScript/索引.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "../Node/索引.md", + "action": "rewritten", + "targetRelativePath": "Node/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "../Browser/索引.md", + "action": "rewritten", + "targetRelativePath": "Browser/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/索引.md", + "kind": "markdown", + "originalHref": "../浏览器工作原理/索引.md", + "action": "rewritten", + "targetRelativePath": "浏览器工作原理/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/Web Worker 常见使用问题和解决方案.md", + "kind": "wiki", + "originalHref": "Web Worker 与主线程通信场景下对postMessage的简洁封装", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 与主线程通信场景下对postMessage的简洁封装.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "JavaScript/Web Worker 与主线程通信场景下对postMessage的简洁封装.md", + "kind": "wiki", + "originalHref": "Web Worker 常见使用问题和解决方案", + "action": "rewritten", + "targetRelativePath": "JavaScript/Web Woker 常见使用问题和解决方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(1)内核引擎.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(1)内核引擎.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(2)模块化.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(2)模块化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(3)Node常用内置模块.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(3)Node常用内置模块.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./NPM/NPM 包管理.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/NPM 包管理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./为什么是 pnpm?我们为何使用monorepo?.md", + "action": "rewritten", + "targetRelativePath": "Node/为什么是 pnpm?我们为何使用monorepo?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./npm包打补丁 — patch-package.md", + "action": "rewritten", + "targetRelativePath": "Node/npm包打补丁 — patch-package.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(9)深入事件循环.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(9)深入事件循环.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./事件循环/(一)可视化理解 Node.js 事件循环的完整指南.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(一)可视化理解 Node.js 事件循环的完整指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node.js 文件系统指南.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node.js 子进程管理和进程通信.md", + "action": "rewritten", + "targetRelativePath": "Node/Node.js 子进程管理和进程通信.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./lib/jsdom.md", + "action": "rewritten", + "targetRelativePath": "Node/lib/jsdom.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./CJS 和 ES Module 横向对比.md", + "action": "rewritten", + "targetRelativePath": "Node/CJS 和 ES Module 横向对比.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./横向对比 CJS 和 ES Module.md", + "action": "rewritten", + "targetRelativePath": "Node/横向对比 CJS 和 ES Module.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(1)内核引擎.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(1)内核引擎.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(2)模块化.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(2)模块化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(3)Node常用内置模块.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(3)Node常用内置模块.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(4)包管理工具.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(4)包管理工具.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(5)开发脚手架工具.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(5)开发脚手架工具.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(6)Stream.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(6)Stream.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(7)Buffer的使用.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(7)Buffer的使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(8)Http模块.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(8)Http模块.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node 笔记(9)深入事件循环.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/Node 笔记(9)深入事件循环.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./静态根:具有编译时常量地址的对象.md", + "action": "rewritten", + "targetRelativePath": "Node/静态根:具有编译时常量地址的对象.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./CORS 跨域及其 Nodejs 服务端配置实践.md", + "action": "rewritten", + "targetRelativePath": "Node/CORS 跨域及其 Nodejs 服务端配置实践.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node.js 子进程管理和进程通信.md", + "action": "rewritten", + "targetRelativePath": "Node/Node.js 子进程管理和进程通信.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node.js 文件系统指南.md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Node.js 进程通信.md", + "action": "rewritten", + "targetRelativePath": "Node/Node.js 进程通信.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./PM2 使用指南~.md", + "action": "rewritten", + "targetRelativePath": "Node/PM2 使用指南~.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./http-server 和 live-server.md", + "action": "rewritten", + "targetRelativePath": "Node/http-server 和 live-server.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./使用Node.js 实现网络代理(无框架,通过http-proxy).md", + "action": "rewritten", + "targetRelativePath": "Node/使用Node.js 实现网络代理(无框架,通过http-proxy).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./深入探索 Node.js 中的事件处理.md", + "action": "rewritten", + "targetRelativePath": "Node/深入探索 Node.js 中的事件处理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./NPM/NPM 包管理.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/NPM 包管理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./NPM/NPM 源设置和管理方法.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/NPM 源设置和管理方法.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./NPM/深入了解npmrc:使用与配置指南.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/深入了解npmrc:使用与配置指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./NPM/版本语义化.md", + "action": "rewritten", + "targetRelativePath": "Node/NPM/版本语义化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./Yarn 4.0发布:性能提升,提供更多命令和功能.md", + "action": "rewritten", + "targetRelativePath": "Node/Yarn 4.0发布:性能提升,提供更多命令和功能.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./npm包打补丁 — patch-package.md", + "action": "rewritten", + "targetRelativePath": "Node/npm包打补丁 — patch-package.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./为什么是 pnpm?我们为何使用monorepo?.md", + "action": "rewritten", + "targetRelativePath": "Node/为什么是 pnpm?我们为何使用monorepo?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./lib/jsdom.md", + "action": "rewritten", + "targetRelativePath": "Node/lib/jsdom.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./lib/nodemailer:让Node.js 脚本帮你收发邮件.md", + "action": "rewritten", + "targetRelativePath": "Node/nodemailer:让Node.js 脚本帮你收发邮件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./lib/利用Node.js脚本提取你的OPML文件信息.md", + "action": "rewritten", + "targetRelativePath": "Node/lib/利用Node.js脚本提取你的OPML文件信息.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./lib/解析XML数据:使用xml2js库轻松进行XML解析.md", + "action": "rewritten", + "targetRelativePath": "Node/lib/解析XML数据:使用xml2js库轻松进行XML解析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./咱们来整一个Node.js脚本,使用ffmpeg将视频转换为GIF文件.md", + "action": "rewritten", + "targetRelativePath": "Node/咱们来整一个Node.js脚本,使用ffmpeg将视频转换为GIF文件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./图片格式转换:将上传图片转为webp.md", + "action": "rewritten", + "targetRelativePath": "Node/图片格式转换:将上传图片转为webp.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./优化事件处理逻辑:使用WeakSet跟踪事件处理状态.md", + "action": "rewritten", + "targetRelativePath": "Node/优化事件处理逻辑:使用WeakSet跟踪事件处理状态.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./事件循环/(一)可视化理解 Node.js 事件循环的完整指南.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(一)可视化理解 Node.js 事件循环的完整指南.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./事件循环/(二)在 Node.js 事件循环中可视化 nextTick 和 Promise 队列.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(二)在 Node.js 事件循环中可视化 nextTick 和 Promise 队列.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./事件循环/(三)Node.js中的定时器队列可视化.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(三)Node.js中的定时器队列可视化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./事件循环/(四)Node.js事件循环中的IO队列可视化.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(四)Node.js事件循环中的IO队列可视化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./事件循环/(五)在 Node.js 事件循环中可视化 IO 轮询.md", + "action": "rewritten", + "targetRelativePath": "Node/笔记/(五)在 Node.js 事件循环中可视化 IO 轮询.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./事件循环/(六).md", + "action": "rewritten", + "targetRelativePath": "Node/事件循环/(六).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "./事件循环/(七).md", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "../JavaScript/索引.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "Node/索引.md", + "kind": "markdown", + "originalHref": "../计算机网络/索引.md", + "action": "rewritten", + "targetRelativePath": "计算机网络/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React基础.md", + "action": "rewritten", + "targetRelativePath": "React/React基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React 中使用 TypeScript.md", + "action": "rewritten", + "targetRelativePath": "React/React 中使用 TypeScript.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./ReactRouter V6 解析.md", + "action": "rewritten", + "targetRelativePath": "React/ReactRouter V6 解析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/React Hooks 基础.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/React Hooks 基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/内置 Hooks(1):如何保存组件状态和使用生命周期?.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/内置 Hooks(1):如何保存组件状态和使用生命周期?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/自定义 Hooks.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/自定义 Hooks.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React 项目优化.md", + "action": "rewritten", + "targetRelativePath": "React/React 项目优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./Mobx 教程.md", + "action": "rewritten", + "targetRelativePath": "React/Mobx 教程.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./Dva/dva 数据获取和处理.md", + "action": "rewritten", + "targetRelativePath": "React/Dva/dva 数据获取和处理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/React 理念.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/React 理念.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/React 架构.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/React 架构.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/React 中的 Fiber(纤程)及其工作原理.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/React 中的 Fiber(纤程)及其工作原理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./面试题/React 面试.md", + "action": "rewritten", + "targetRelativePath": "八股文/React/React 面试.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./面试题/React 面试题(一).md", + "action": "rewritten", + "targetRelativePath": "八股文/React/React 面试题(一).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./面试题/React 面试题(二).md", + "action": "rewritten", + "targetRelativePath": "八股文/React/React 面试题(二).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React基础.md", + "action": "rewritten", + "targetRelativePath": "React/React基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React 中使用 TypeScript.md", + "action": "rewritten", + "targetRelativePath": "React/React 中使用 TypeScript.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React 项目优化.md", + "action": "rewritten", + "targetRelativePath": "React/React 项目优化.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./ReactHooks汇总.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/ReactHooks汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./ReactRouter V6 解析.md", + "action": "rewritten", + "targetRelativePath": "React/ReactRouter V6 解析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./eslint-plugin-react 配置.md", + "action": "rewritten", + "targetRelativePath": "React/eslint-plugin-react 配置.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./useReducer:类Redux的useState替代方案.md", + "action": "rewritten", + "targetRelativePath": "React/useReducer:类Redux的useState替代方案.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./从零开始实现RSC - 第 1 部分:Server Component.md", + "action": "rewritten", + "targetRelativePath": "React/从零开始实现RSC - 第 1 部分:Server Component.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./高级 React 组件组合.md", + "action": "rewritten", + "targetRelativePath": "React/高级 React 组件组合.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./容器内选择单一列表并进行高亮切换的实践.md", + "action": "rewritten", + "targetRelativePath": "React/容器内选择单一列表并进行高亮切换的实践.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./执行和清除Effect的时机.md", + "action": "rewritten", + "targetRelativePath": "React/执行和清除Effect的时机.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/React Hooks 基础.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/React Hooks 基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/React 实现按需加载.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/React 实现按需加载.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/Hooks 实战篇.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/Hooks 实战篇.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/Hooks :如何正确理解函数组件的生命周期?.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/Hooks :如何正确理解函数组件的生命周期?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/Hooks(2):避免重复定义回调函数.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/Hooks(2):避免重复定义回调函数.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/内置 Hooks(1):如何保存组件状态和使用生命周期?.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/内置 Hooks(1):如何保存组件状态和使用生命周期?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/函数组件设计模式.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/函数组件设计模式.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/在函数组件中使用 Redux.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/在函数组件中使用 Redux.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/如何展示对话框,并给对话框传递参数?.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/如何展示对话框,并给对话框传递参数?.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/自定义 Hooks.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/自定义 Hooks.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/自定义事件.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/自定义事件.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Hooks笔记/路由管理.md", + "action": "rewritten", + "targetRelativePath": "React/React Hooks笔记/路由管理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./Mobx 教程.md", + "action": "rewritten", + "targetRelativePath": "React/Mobx 教程.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./Dva/dva 数据获取和处理.md", + "action": "rewritten", + "targetRelativePath": "React/Dva/dva 数据获取和处理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./umi框架/UmiJS 乌米学习实战.md", + "action": "rewritten", + "targetRelativePath": "元框架/Umi/UmiJS 乌米学习实战.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./Antd 组件库/Antd Pro 新手上路基础知识.md", + "action": "rewritten", + "targetRelativePath": "React/Antd 组件库/Antd Pro 新手上路基础知识.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./Antd 组件库/Antd 表单基础使用.md", + "action": "rewritten", + "targetRelativePath": "React/Antd 组件库/Antd 表单基础使用.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./React Native/React Native 基础.md", + "action": "rewritten", + "targetRelativePath": "React/React Native/React Native 基础.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/React 理念.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/React 理念.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/React 架构.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/React 架构.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/React 源码文件结构.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/React 源码文件结构.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/React 中的 Fiber(纤程)及其工作原理.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/React 中的 Fiber(纤程)及其工作原理.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/React 状态更新.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/React 状态更新.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/Hooks 解析.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/Hooks 解析.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/深入理解JSX.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/深入理解JSX.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/render 阶段流程.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/render 阶段流程.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/commit 阶段流程.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/commit 阶段流程.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./源码学习/structure.md", + "action": "rewritten", + "targetRelativePath": "React/源码学习/structure.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./面试题/React 面试.md", + "action": "rewritten", + "targetRelativePath": "八股文/React/React 面试.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./面试题/React 面试题(一).md", + "action": "rewritten", + "targetRelativePath": "八股文/React/React 面试题(一).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "./面试题/React 面试题(二).md", + "action": "rewritten", + "targetRelativePath": "八股文/React/React 面试题(二).md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "../JavaScript/索引.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "../TypeScript/索引.md", + "action": "rewritten", + "targetRelativePath": "TypeScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/索引.md", + "kind": "markdown", + "originalHref": "../CSS/索引.md", + "action": "rewritten", + "targetRelativePath": "CSS/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./CORB 策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./CORB 应对策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 应对策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./深入理解内容安全策略(CSP):保障网页安全的利器.md", + "action": "rewritten", + "targetRelativePath": "浏览器工作原理/深入理解内容安全策略(CSP):保障网页安全的利器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./Web Components 中使用生命周期回调函数.md", + "action": "rewritten", + "targetRelativePath": "Browser/Web Components 中使用生命周期回调函数.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./Web浏览器滚动方案一览| rAF等.md", + "action": "rewritten", + "targetRelativePath": "浏览器工作原理/Web浏览器滚动方案一览| rAF等.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "action": "rewritten", + "targetRelativePath": "Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./面试题/浏览器原理面试题汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/浏览器原理/浏览器原理面试题汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./面试题/前端性能优化篇.md", + "action": "rewritten", + "targetRelativePath": "八股文/浏览器原理/前端性能优化篇.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./CORB 策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./CORB 应对策略.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 应对策略.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./CORB 兼容性和影响.md", + "action": "rewritten", + "targetRelativePath": "浏览器原理/CORB 兼容性和影响.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "action": "rewritten", + "targetRelativePath": "Browser/Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./Web Components 中使用生命周期回调函数.md", + "action": "rewritten", + "targetRelativePath": "Browser/Web Components 中使用生命周期回调函数.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./Web浏览器滚动方案一览| rAF等.md", + "action": "rewritten", + "targetRelativePath": "浏览器工作原理/Web浏览器滚动方案一览| rAF等.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./深入理解内容安全策略(CSP):保障网页安全的利器.md", + "action": "rewritten", + "targetRelativePath": "浏览器工作原理/深入理解内容安全策略(CSP):保障网页安全的利器.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./面试题/前端性能优化篇.md", + "action": "rewritten", + "targetRelativePath": "八股文/浏览器原理/前端性能优化篇.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "./面试题/浏览器原理面试题汇总.md", + "action": "rewritten", + "targetRelativePath": "八股文/浏览器原理/浏览器原理面试题汇总.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "../Browser/索引.md", + "action": "rewritten", + "targetRelativePath": "Browser/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "../JavaScript/索引.md", + "action": "rewritten", + "targetRelativePath": "JavaScript/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "../计算机网络/索引.md", + "action": "rewritten", + "targetRelativePath": "计算机网络/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "浏览器工作原理/索引.md", + "kind": "markdown", + "originalHref": "../Browser/索引.md", + "action": "rewritten", + "targetRelativePath": "Browser/索引.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "React/面试题/React 面试题(二).md", + "kind": "markdown", + "originalHref": "执行和清除Effect的时机.md", + "action": "rewritten", + "targetRelativePath": "React/执行和清除Effect的时机.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/07-exists-vs-in.md", + "kind": "markdown", + "originalHref": "../063-exists-vs-in.md", + "action": "rewritten", + "targetRelativePath": "MySQL/063-exists-vs-in.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/26-redo-log.md", + "kind": "markdown", + "originalHref": "../022-mysql-logs-binlog-redo-undo.md", + "action": "rewritten", + "targetRelativePath": "MySQL/022-mysql-logs-binlog-redo-undo.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/26-redo-log.md", + "kind": "markdown", + "originalHref": "../064-write-ahead-logging.md", + "action": "rewritten", + "targetRelativePath": "MySQL/064-write-ahead-logging.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/35-isolation-levels.md", + "kind": "markdown", + "originalHref": "../028-transaction-isolation-levels.md", + "action": "rewritten", + "targetRelativePath": "MySQL/028-transaction-isolation-levels.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/35-isolation-levels.md", + "kind": "markdown", + "originalHref": "../030-dirty-nonrepeatable-phantom-read.md", + "action": "rewritten", + "targetRelativePath": "MySQL/030-dirty-nonrepeatable-phantom-read.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/39-slow-sql.md", + "kind": "markdown", + "originalHref": "../049-slow-sql-monitoring-optimization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/049-slow-sql-monitoring-optimization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/39-slow-sql.md", + "kind": "markdown", + "originalHref": "../034-explain-query-analysis.md", + "action": "rewritten", + "targetRelativePath": "MySQL/034-explain-query-analysis.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/39-slow-sql.md", + "kind": "markdown", + "originalHref": "../../场景面试题/23-mysql-slow-sql.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/23-mysql-slow-sql.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/01-sharding-when.md", + "kind": "markdown", + "originalHref": "../001-database-sharding.md", + "action": "rewritten", + "targetRelativePath": "MySQL/001-database-sharding.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/01-sharding-when.md", + "kind": "markdown", + "originalHref": "../043-sharding-implementation-process.md", + "action": "rewritten", + "targetRelativePath": "MySQL/043-sharding-implementation-process.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/25-binlog.md", + "kind": "markdown", + "originalHref": "../022-mysql-logs-binlog-redo-undo.md", + "action": "rewritten", + "targetRelativePath": "MySQL/022-mysql-logs-binlog-redo-undo.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/25-binlog.md", + "kind": "markdown", + "originalHref": "../041-replication.md", + "action": "rewritten", + "targetRelativePath": "MySQL/041-replication.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/33-mvcc.md", + "kind": "markdown", + "originalHref": "../025-mvcc.md", + "action": "rewritten", + "targetRelativePath": "MySQL/025-mvcc.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/28-binlog-redo-two-phase.md", + "kind": "markdown", + "originalHref": "../072-innodb-binlog-two-phase-commit.md", + "action": "rewritten", + "targetRelativePath": "MySQL/072-innodb-binlog-two-phase-commit.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/28-binlog-redo-two-phase.md", + "kind": "markdown", + "originalHref": "../022-mysql-logs-binlog-redo-undo.md", + "action": "rewritten", + "targetRelativePath": "MySQL/022-mysql-logs-binlog-redo-undo.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/29-mysql-log-flush.md", + "kind": "markdown", + "originalHref": "../047-log-buffer.md", + "action": "rewritten", + "targetRelativePath": "MySQL/047-log-buffer.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/29-mysql-log-flush.md", + "kind": "markdown", + "originalHref": "../072-innodb-binlog-two-phase-commit.md", + "action": "rewritten", + "targetRelativePath": "MySQL/072-innodb-binlog-two-phase-commit.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/18-index-not-used-explain.md", + "kind": "markdown", + "originalHref": "../018-index-effect-troubleshooting.md", + "action": "rewritten", + "targetRelativePath": "MySQL/018-index-effect-troubleshooting.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/18-index-not-used-explain.md", + "kind": "markdown", + "originalHref": "../034-explain-query-analysis.md", + "action": "rewritten", + "targetRelativePath": "MySQL/034-explain-query-analysis.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/36-mysql-lock-types.md", + "kind": "markdown", + "originalHref": "../031-lock-types.md", + "action": "rewritten", + "targetRelativePath": "MySQL/031-lock-types.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/31-transaction-acid.md", + "kind": "markdown", + "originalHref": "../023-mysql-transaction-implementation.md", + "action": "rewritten", + "targetRelativePath": "MySQL/023-mysql-transaction-implementation.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/10-storage-engines.md", + "kind": "markdown", + "originalHref": "../011-storage-engines.md", + "action": "rewritten", + "targetRelativePath": "MySQL/011-storage-engines.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/15-varchar-space.md", + "kind": "markdown", + "originalHref": "../037-varchar-vs-char.md", + "action": "rewritten", + "targetRelativePath": "MySQL/037-varchar-vs-char.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/15-varchar-space.md", + "kind": "markdown", + "originalHref": "../061-varchar-length-difference.md", + "action": "rewritten", + "targetRelativePath": "MySQL/061-varchar-length-difference.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/09-mysql-cache-vs-redis.md", + "kind": "markdown", + "originalHref": "../045-buffer-pool-read-path.md", + "action": "rewritten", + "targetRelativePath": "MySQL/045-buffer-pool-read-path.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/08-query-execution-optimizer.md", + "kind": "markdown", + "originalHref": "../005-sql-execution-process.md", + "action": "rewritten", + "targetRelativePath": "MySQL/005-sql-execution-process.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/08-query-execution-optimizer.md", + "kind": "markdown", + "originalHref": "../069-query-optimizer-plan-selection.md", + "action": "rewritten", + "targetRelativePath": "MySQL/069-query-optimizer-plan-selection.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/19-covering-index-icp.md", + "kind": "markdown", + "originalHref": "../015-covering-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/015-covering-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/19-covering-index-icp.md", + "kind": "markdown", + "originalHref": "../016-index-condition-pushdown.md", + "action": "rewritten", + "targetRelativePath": "MySQL/016-index-condition-pushdown.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/11-mysql-constraints.md", + "kind": "markdown", + "originalHref": "../074-table-design-checklist.md", + "action": "rewritten", + "targetRelativePath": "MySQL/074-table-design-checklist.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/11-mysql-constraints.md", + "kind": "markdown", + "originalHref": "../071-logical-vs-physical-foreign-key.md", + "action": "rewritten", + "targetRelativePath": "MySQL/071-logical-vs-physical-foreign-key.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/03-normalization.md", + "kind": "markdown", + "originalHref": "../003-normalization-denormalization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/003-normalization-denormalization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/21-leftmost-prefix.md", + "kind": "markdown", + "originalHref": "../014-leftmost-prefix-rule.md", + "action": "rewritten", + "targetRelativePath": "MySQL/014-leftmost-prefix-rule.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/05-count-usage.md", + "kind": "markdown", + "originalHref": "../035-count-differences.md", + "action": "rewritten", + "targetRelativePath": "MySQL/035-count-differences.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/16-where-vs-having.md", + "kind": "markdown", + "originalHref": "../076-sql-logical-execution-order.md", + "action": "rewritten", + "targetRelativePath": "MySQL/076-sql-logical-execution-order.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "01-sharding-when.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/01-sharding-when.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "02-join-on-where.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/02-join-on-where.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "03-normalization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/03-normalization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "04-char-varchar.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/04-char-varchar.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "05-count-usage.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/05-count-usage.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "06-delete-drop-truncate.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/06-delete-drop-truncate.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "07-exists-vs-in.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/07-exists-vs-in.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "08-query-execution-optimizer.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/08-query-execution-optimizer.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "09-mysql-cache-vs-redis.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/09-mysql-cache-vs-redis.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "10-storage-engines.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/10-storage-engines.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "11-mysql-constraints.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/11-mysql-constraints.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "12-null-semantics.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/12-null-semantics.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "13-sql-vs-nosql.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/13-sql-vs-nosql.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "14-union-vs-union-all.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/14-union-vs-union-all.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "15-varchar-space.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/15-varchar-space.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "16-where-vs-having.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/16-where-vs-having.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "17-pagination-sort-like-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/17-pagination-sort-like-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "18-index-not-used-explain.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/18-index-not-used-explain.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "19-covering-index-icp.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/19-covering-index-icp.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "20-bplus-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/20-bplus-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "21-leftmost-prefix.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/21-leftmost-prefix.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "22-index-maintenance-cost.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/22-index-maintenance-cost.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "23-mysql-index-types.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/23-mysql-index-types.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "24-mysql-log-retention.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/24-mysql-log-retention.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "25-binlog.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/25-binlog.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "26-redo-log.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/26-redo-log.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "27-undo-log.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/27-undo-log.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "28-binlog-redo-two-phase.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/28-binlog-redo-two-phase.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "29-mysql-log-flush.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/29-mysql-log-flush.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "30-optimistic-pessimistic-lock.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/30-optimistic-pessimistic-lock.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "31-transaction-acid.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/31-transaction-acid.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "32-deadlock.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/32-deadlock.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "33-mvcc.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/33-mvcc.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "34-gap-next-key-locks.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/34-gap-next-key-locks.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "35-isolation-levels.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/35-isolation-levels.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "36-mysql-lock-types.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/36-mysql-lock-types.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "37-read-write-splitting.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/37-read-write-splitting.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "38-sharding-aftereffects.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/38-sharding-aftereffects.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "39-slow-sql.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/39-slow-sql.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "40-mysql-monitoring.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/40-mysql-monitoring.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "41-deep-pagination.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/41-deep-pagination.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "42-replication-process.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/42-replication-process.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "43-mysql-config-tuning.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/43-mysql-config-tuning.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "44-replication-lag.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/44-replication-lag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/README.md", + "kind": "markdown", + "originalHref": "45-primary-failover.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/45-primary-failover.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/30-optimistic-pessimistic-lock.md", + "kind": "markdown", + "originalHref": "../032-optimistic-pessimistic-lock.md", + "action": "rewritten", + "targetRelativePath": "MySQL/032-optimistic-pessimistic-lock.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/44-replication-lag.md", + "kind": "markdown", + "originalHref": "../042-replication-lag.md", + "action": "rewritten", + "targetRelativePath": "MySQL/042-replication-lag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/44-replication-lag.md", + "kind": "markdown", + "originalHref": "../../场景面试题/27-mysql-replication-lag.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/27-mysql-replication-lag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/37-read-write-splitting.md", + "kind": "markdown", + "originalHref": "../040-read-write-splitting.md", + "action": "rewritten", + "targetRelativePath": "MySQL/040-read-write-splitting.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/43-mysql-config-tuning.md", + "kind": "markdown", + "originalHref": "../068-mysql-performance-optimization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/068-mysql-performance-optimization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/43-mysql-config-tuning.md", + "kind": "markdown", + "originalHref": "../../场景面试题/26-mysql-configuration-tuning.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/26-mysql-configuration-tuning.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/04-char-varchar.md", + "kind": "markdown", + "originalHref": "../037-varchar-vs-char.md", + "action": "rewritten", + "targetRelativePath": "MySQL/037-varchar-vs-char.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/04-char-varchar.md", + "kind": "markdown", + "originalHref": "../061-varchar-length-difference.md", + "action": "rewritten", + "targetRelativePath": "MySQL/061-varchar-length-difference.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/41-deep-pagination.md", + "kind": "markdown", + "originalHref": "../010-cursor-pagination.md", + "action": "rewritten", + "targetRelativePath": "MySQL/010-cursor-pagination.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/41-deep-pagination.md", + "kind": "markdown", + "originalHref": "../051-limit-offset-performance.md", + "action": "rewritten", + "targetRelativePath": "MySQL/051-limit-offset-performance.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/41-deep-pagination.md", + "kind": "markdown", + "originalHref": "../../场景面试题/25-mysql-deep-pagination.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/25-mysql-deep-pagination.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/06-delete-drop-truncate.md", + "kind": "markdown", + "originalHref": "../050-delete-drop-truncate.md", + "action": "rewritten", + "targetRelativePath": "MySQL/050-delete-drop-truncate.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/23-mysql-index-types.md", + "kind": "markdown", + "originalHref": "../006-mysql-index-types.md", + "action": "rewritten", + "targetRelativePath": "MySQL/006-mysql-index-types.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/23-mysql-index-types.md", + "kind": "markdown", + "originalHref": "../017-index-design-notes.md", + "action": "rewritten", + "targetRelativePath": "MySQL/017-index-design-notes.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/32-deadlock.md", + "kind": "markdown", + "originalHref": "../033-deadlock-handling.md", + "action": "rewritten", + "targetRelativePath": "MySQL/033-deadlock-handling.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/38-sharding-aftereffects.md", + "kind": "markdown", + "originalHref": "../044-sharding-problems.md", + "action": "rewritten", + "targetRelativePath": "MySQL/044-sharding-problems.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/40-mysql-monitoring.md", + "kind": "markdown", + "originalHref": "../068-mysql-performance-optimization.md", + "action": "rewritten", + "targetRelativePath": "MySQL/068-mysql-performance-optimization.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/40-mysql-monitoring.md", + "kind": "markdown", + "originalHref": "../../场景面试题/24-mysql-monitoring.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/24-mysql-monitoring.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/24-mysql-log-retention.md", + "kind": "markdown", + "originalHref": "../022-mysql-logs-binlog-redo-undo.md", + "action": "rewritten", + "targetRelativePath": "MySQL/022-mysql-logs-binlog-redo-undo.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/02-join-on-where.md", + "kind": "markdown", + "originalHref": "../002-sql-join-on-where.md", + "action": "rewritten", + "targetRelativePath": "MySQL/002-sql-join-on-where.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/27-undo-log.md", + "kind": "markdown", + "originalHref": "../022-mysql-logs-binlog-redo-undo.md", + "action": "rewritten", + "targetRelativePath": "MySQL/022-mysql-logs-binlog-redo-undo.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/27-undo-log.md", + "kind": "markdown", + "originalHref": "../025-mvcc.md", + "action": "rewritten", + "targetRelativePath": "MySQL/025-mvcc.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/22-index-maintenance-cost.md", + "kind": "markdown", + "originalHref": "../019-too-many-indexes.md", + "action": "rewritten", + "targetRelativePath": "MySQL/019-too-many-indexes.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/22-index-maintenance-cost.md", + "kind": "markdown", + "originalHref": "../018-index-effect-troubleshooting.md", + "action": "rewritten", + "targetRelativePath": "MySQL/018-index-effect-troubleshooting.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/34-gap-next-key-locks.md", + "kind": "markdown", + "originalHref": "../031-lock-types.md", + "action": "rewritten", + "targetRelativePath": "MySQL/031-lock-types.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/34-gap-next-key-locks.md", + "kind": "markdown", + "originalHref": "../030-dirty-nonrepeatable-phantom-read.md", + "action": "rewritten", + "targetRelativePath": "MySQL/030-dirty-nonrepeatable-phantom-read.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/45-primary-failover.md", + "kind": "markdown", + "originalHref": "../039-avoid-single-point-failure.md", + "action": "rewritten", + "targetRelativePath": "MySQL/039-avoid-single-point-failure.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/45-primary-failover.md", + "kind": "markdown", + "originalHref": "../../场景面试题/28-mysql-primary-failover.md", + "action": "rewritten", + "targetRelativePath": "场景面试题/28-mysql-primary-failover.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/20-bplus-index.md", + "kind": "markdown", + "originalHref": "../020-bplus-tree-query-process.md", + "action": "rewritten", + "targetRelativePath": "MySQL/020-bplus-tree-query-process.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/20-bplus-index.md", + "kind": "markdown", + "originalHref": "../021-why-bplus-tree-index.md", + "action": "rewritten", + "targetRelativePath": "MySQL/021-why-bplus-tree-index.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/42-replication-process.md", + "kind": "markdown", + "originalHref": "../041-replication.md", + "action": "rewritten", + "targetRelativePath": "MySQL/041-replication.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/42-replication-process.md", + "kind": "markdown", + "originalHref": "44-replication-lag.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/44-replication-lag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/42-replication-process.md", + "kind": "markdown", + "originalHref": "45-primary-failover.md", + "action": "rewritten", + "targetRelativePath": "MySQL/面试题/45-primary-failover.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/17-pagination-sort-like-index.md", + "kind": "markdown", + "originalHref": "../004-mysql-order-by-sorting.md", + "action": "rewritten", + "targetRelativePath": "MySQL/004-mysql-order-by-sorting.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/17-pagination-sort-like-index.md", + "kind": "markdown", + "originalHref": "../010-cursor-pagination.md", + "action": "rewritten", + "targetRelativePath": "MySQL/010-cursor-pagination.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "MySQL/面试题/17-pagination-sort-like-index.md", + "kind": "markdown", + "originalHref": "../017-index-design-notes.md", + "action": "rewritten", + "targetRelativePath": "MySQL/017-index-design-notes.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "产品/小红书/第3篇-设计资源速查手册.md", + "kind": "markdown", + "originalHref": "链接", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "产品/小红书/第3篇-设计资源速查手册.md", + "kind": "markdown", + "originalHref": "链接", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "产品/小红书/第4篇-行业黑话速成指南.md", + "kind": "markdown", + "originalHref": "链接", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "产品/小红书/第4篇-行业黑话速成指南.md", + "kind": "markdown", + "originalHref": "链接", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "产品/小红书/第4篇-行业黑话速成指南.md", + "kind": "markdown", + "originalHref": "链接", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "产品/小红书/第2篇-数据资源网站大全.md", + "kind": "markdown", + "originalHref": "链接", + "action": "unresolved-to-text" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "01-rag-multihop-qa.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/01-rag-multihop-qa.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "参考社区项目.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/参考社区项目.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "题目模板.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/题目模板.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "../AI应用开发面试题.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI应用开发面试题.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "17-knowledge-engineering-vs-kg.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/17-knowledge-engineering-vs-kg.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "06-knowledge-graph-basics.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/06-knowledge-graph-basics.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "12-knowledge-fusion.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/12-knowledge-fusion.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "28-multilingual-knowledge-base.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/28-multilingual-knowledge-base.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "23-ner-bio.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/23-ner-bio.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "09-crf-vs-bert-ner.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/09-crf-vs-bert-ner.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "27-relation-extraction.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/27-relation-extraction.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "24-event-extraction.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/24-event-extraction.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "10-distant-supervision.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/10-distant-supervision.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "32-pipeline-vs-joint-extraction.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/32-pipeline-vs-joint-extraction.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "31-entity-linking.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/31-entity-linking.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "20-entity-disambiguation.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/20-entity-disambiguation.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "14-transe-distmult-complex.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/14-transe-distmult-complex.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "08-knowledge-graph-completion.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/08-knowledge-graph-completion.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "30-knowledge-graph-reasoning.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/30-knowledge-graph-reasoning.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "05-knowledge-graph-llm-rag.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/05-knowledge-graph-llm-rag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "13-graphrag.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/13-graphrag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "15-rag-chunking-size.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/15-rag-chunking-size.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "26-semantic-chunking.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/26-semantic-chunking.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "04-rag-vector-incremental-updates.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/04-rag-vector-incremental-updates.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "19-embedding-model-selection.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/19-embedding-model-selection.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "03-multimodal-rag.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/03-multimodal-rag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "29-hybrid-search.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/29-hybrid-search.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "25-hyde-retrieval.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/25-hyde-retrieval.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "21-rag-reranking.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/21-rag-reranking.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "16-context-compression.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/16-context-compression.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "01-rag-multihop-qa.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/01-rag-multihop-qa.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "02-self-rag.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/02-self-rag.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "11-rag-hallucination-citation.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/11-rag-hallucination-citation.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "07-dialogue-state-tracking.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/07-dialogue-state-tracking.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "18-rag-evaluation.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/18-rag-evaluation.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "22-rag-ground-truth.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/22-rag-ground-truth.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/README.md", + "kind": "markdown", + "originalHref": "题目模板.md", + "action": "rewritten", + "targetRelativePath": "AI应用开发/AI知识工程与RAG/题目模板.md", + "method": "path-or-reviewed-alias" + }, + { + "sourceRelativePath": "AI应用开发/AI知识工程与RAG/01-rag-multihop-qa.md", + "kind": "image", + "originalHref": "assets/multihop-evidence-chain.svg", + "action": "asset-rewritten" + } + ] +} diff --git a/scripts/build-search.mjs b/scripts/build-search.mjs new file mode 100644 index 000000000..cda31ec56 --- /dev/null +++ b/scripts/build-search.mjs @@ -0,0 +1,380 @@ +import assert from "node:assert/strict"; +import { createHash } from "node:crypto"; +import { mkdir, readFile, rm, writeFile } from "node:fs/promises"; +import { dirname, resolve, sep } from "node:path"; +import { pathToFileURL } from "node:url"; +import * as pagefind from "pagefind"; +import { buildSearchDictionary } from "../src/lib/search-dictionary.mjs"; + +const normalizeBase = (value) => { + const parts = String(value || "/") + .split("/") + .filter(Boolean); + return parts.length ? `/${parts.join("/")}/` : "/"; +}; +const encodePath = (path) => path.split("/").map(encodeURIComponent).join("/"); +const hash = (content) => createHash("sha256").update(content).digest("hex"); +const escapeAttribute = (value) => + String(value).replace( + /[&<>"']/g, + (character) => + ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[ + character + ], + ); + +function inside(directory, path) { + const candidate = resolve(directory, path); + assert.ok( + candidate !== directory && candidate.startsWith(`${directory}${sep}`), + `Search asset escapes its output directory: ${path}`, + ); + return candidate; +} + +function checkErrors(response, action) { + if (response.errors?.length) + throw new Error(`${action}: ${response.errors.join("; ")}`); + return response; +} + +/** Enrich the rendered document in memory; metadata never becomes searchable body text. */ +export function prepareSearchHtml(html, article) { + assert.match(html, /<\/head>/i, `${article.id}: rendered HTML has no head.`); + assert.match( + html, + /\bdata-pagefind-body(?:\s|=|>)/i, + `${article.id}: rendered article is missing search body markers.`, + ); + const meta = [ + ["id", encodeURIComponent(article.id)], + ["title", article.title], + // Pagefind normalizes metadata whitespace; preserve filenames and fields exactly. + ["record", Buffer.from(JSON.stringify(article)).toString("base64url")], + ] + .map( + ([name, value]) => + ``, + ) + .join(""); + const filters = [...new Set(article.categories)] + .map( + (category) => + ``, + ) + .join(""); + const keywords = [article.description, ...(article.tags ?? [])] + .filter((value) => typeof value === "string" && value.trim()) + .map(escapeAttribute) + .join(" "); + return html + .replace(/<\/head>/i, `${meta}${filters}`) + .replace( + /<\/body>(\s*<\/html>)/i, + `

${keywords}

$1`, + ) + .toWellFormed(); +} + +function attributes(tag) { + return Object.fromEntries( + [...tag.matchAll(/\b([\w:-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g)].map( + ([, name, doubleQuoted, singleQuoted]) => [ + name.toLowerCase(), + (doubleQuoted ?? singleQuoted).replaceAll("&", "&"), + ], + ), + ); +} + +/** Only follow static imports; dynamic Mermaid and other page-only chunks stay out. */ +export function staticReferences(source, extension) { + if (extension === ".js") { + return [ + ...source.matchAll( + /\b(?:import|export)\s*(?:[^"'();]*?\bfrom\s*)?["']([^"']+)["']/g, + ), + ].map((match) => match[1]); + } + if (extension === ".css") { + return [ + ...[...source.matchAll(/@import\s+["']([^"']+)["']/g)].map( + (match) => match[1], + ), + ...[ + ...source.matchAll(/url\(\s*(?:"([^"]*)"|'([^']*)'|([^\s)]+))\s*\)/g), + ].map((match) => match[1] ?? match[2] ?? match[3]), + ]; + } + return []; +} + +/** Version files participate in download bytes, but not their own version hash. */ +export function finalizeManifest(assets, { base, articleCount }) { + const sorted = [...assets].sort((left, right) => + left.url < right.url ? -1 : left.url > right.url ? 1 : 0, + ); + const version = hash( + JSON.stringify({ + format: 1, + base, + articleCount, + files: sorted.map((asset) => ({ + url: asset.url, + sha256: hash(asset.content), + })), + }), + ); + const bytesWithoutVersion = sorted.reduce( + (sum, asset) => sum + asset.content.byteLength, + 0, + ); + const filesCount = sorted.length + 1; + let totalBytes = bytesWithoutVersion; + let versionContent; + for (let attempt = 0; attempt < 10; attempt++) { + versionContent = Buffer.from( + `${JSON.stringify({ version, articleCount, totalBytes, filesCount })}\n`, + ); + const exactTotal = bytesWithoutVersion + versionContent.byteLength; + if (exactTotal === totalBytes) break; + totalBytes = exactTotal; + } + assert.equal( + totalBytes, + bytesWithoutVersion + versionContent.byteLength, + "Search version byte total did not converge.", + ); + const files = [ + ...sorted.map((asset) => ({ + url: asset.url, + bytes: asset.content.byteLength, + })), + { url: `${base}search-version.json`, bytes: versionContent.byteLength }, + ].sort((left, right) => + left.url < right.url ? -1 : left.url > right.url ? 1 : 0, + ); + return { + manifest: { version, base, articleCount, totalBytes, files }, + versionContent, + }; +} + +export async function buildSearch({ + directory = resolve("dist"), + base = process.env.BASE_PATH || "/", +} = {}) { + directory = resolve(directory); + base = normalizeBase(base); + const contentIndex = await readFile(inside(directory, "content-index.json")); + const { articles } = JSON.parse(contentIndex.toString()); + assert.ok( + Array.isArray(articles) && articles.length > 0, + "Search build requires public articles in content-index.json.", + ); + assert.equal( + new Set(articles.map((article) => article.id)).size, + articles.length, + "Duplicate public article IDs would create duplicate search results.", + ); + const origin = new URL(articles[0].url).origin; + const assets = new Map(); + const pending = []; + const originUrl = (pathname) => new URL(pathname, origin).href; + + function localUrl(reference, from) { + if ( + !reference || + reference.startsWith("#") || + /^(?:data|blob|javascript|node):/i.test(reference) + ) + return undefined; + const url = new URL(reference, originUrl(from)); + if (url.origin !== origin) return undefined; + assert.ok( + url.pathname.startsWith(base), + `Offline search resource misses mount ${base}: ${reference}`, + ); + return url.pathname; + } + + function addBytes(url, content) { + assert.ok( + url.startsWith(base) && !/[?#]/.test(url), + `Unsafe offline search URL: ${url}`, + ); + if (assets.has(url)) return; + assets.set(url, { url, content: Buffer.from(content) }); + if (/\.(?:js|css)$/.test(url)) pending.push(url); + } + + async function addLocal(url) { + if (assets.has(url)) return; + const rawPath = decodeURIComponent(url.slice(base.length)); + const file = inside( + directory, + rawPath.endsWith("/") ? `${rawPath}index.html` : rawPath, + ); + addBytes(url, await readFile(file)); + } + + try { + const { index } = checkErrors( + await pagefind.createIndex({ + forceLanguage: "zh", + writePlayground: false, + excludeSelectors: [ + "nav", + "footer", + ".toc", + ".article-breadcrumbs", + ".article-bottom", + ".article-sources", + "button", + ], + }), + "Create Pagefind index", + ); + assert.ok(index, "Pagefind did not create an index."); + for (const article of articles) { + assert.ok( + typeof article.id === "string" && + article.id && + Array.isArray(article.categories), + "Invalid public article metadata.", + ); + const url = new URL(article.url); + assert.equal( + url.origin, + origin, + `${article.id}: article origin mismatch.`, + ); + assert.equal( + url.pathname, + `${base}posts/${encodePath(article.id)}/`, + `${article.id}: URL must preserve its encoded ID and one mount prefix.`, + ); + const sourceFile = inside(directory, `posts/${article.id}/index.html`); + const html = prepareSearchHtml( + await readFile(sourceFile, "utf8"), + article, + ); + const result = checkErrors( + await index.addHTMLFile({ url: url.pathname, content: html }), + `Index ${article.id}`, + ); + assert.equal( + result.file.url, + url.pathname, + `${article.id}: Pagefind altered the explicit article URL.`, + ); + assert.equal( + result.file.meta.id, + encodeURIComponent(article.id), + `${article.id}: missing search metadata ID.`, + ); + assert.equal( + result.file.meta.title, + article.title.replace(/\s+/g, " ").trim(), + `${article.id}: missing search title.`, + ); + assert.deepEqual( + JSON.parse( + Buffer.from(result.file.meta.record, "base64url").toString(), + ), + article, + `${article.id}: fragment metadata must retain the public article record.`, + ); + } + const { files } = checkErrors( + await index.getFiles(), + "Generate Pagefind assets", + ); + assert.ok( + files.some((file) => file.path === "pagefind.js") && + files.some((file) => file.path === "pagefind-entry.json"), + "Pagefind runtime files are missing.", + ); + const dictionary = Buffer.from( + `${JSON.stringify(buildSearchDictionary(files))}\n`, + ); + await writeFile(inside(directory, "search-dictionary.json"), dictionary); + addBytes(`${base}search-dictionary.json`, dictionary); + await rm(inside(directory, "pagefind"), { recursive: true, force: true }); + for (const file of files) { + const output = inside(directory, `pagefind/${file.path}`); + await mkdir(dirname(output), { recursive: true }); + await writeFile(output, file.content); + addBytes(`${base}pagefind/${encodePath(file.path)}`, file.content); + } + } finally { + await pagefind.close(); + } + + addBytes(`${base}content-index.json`, contentIndex); + for (const route of ["blog/", "en/blog/"]) { + const url = `${base}${route}`; + await addLocal(url); + const html = assets.get(url).content.toString(); + for (const match of html.matchAll(/<(?:script|link)\b[^>]*>/gi)) { + const attrs = attributes(match[0]); + const reference = + attrs.src || + (/^(?:stylesheet|modulepreload|icon)$/.test(attrs.rel || "") + ? attrs.href + : undefined); + const resource = localUrl(reference, url); + if (resource) await addLocal(resource); + } + for (const match of html.matchAll( + /]*type="module"[^>]*>([\s\S]*?)<\/script>/gi, + )) { + for (const reference of staticReferences(match[1], ".js")) { + const resource = localUrl(reference, url); + if (resource) await addLocal(resource); + } + } + } + for (const route of ["blog/", "en/blog/"]) { + const url = `${base}${route}`; + for (const match of assets + .get(url) + .content.toString() + .matchAll(/]*>/gi)) { + const resource = localUrl(attributes(match[0]).src, url); + if (resource) await addLocal(resource); + } + } + for (let position = 0; position < pending.length; position++) { + const from = pending[position]; + const extension = from.endsWith(".js") ? ".js" : ".css"; + for (const reference of staticReferences( + assets.get(from).content.toString(), + extension, + )) { + const resource = localUrl(reference, from); + if (resource) await addLocal(resource); + } + } + + const { manifest, versionContent } = finalizeManifest(assets.values(), { + base, + articleCount: articles.length, + }); + await writeFile(inside(directory, "search-version.json"), versionContent); + await writeFile( + inside(directory, "search-manifest.json"), + `${JSON.stringify(manifest)}\n`, + ); + console.log( + `Pagefind indexed ${articles.length} public articles; offline search pack: ${manifest.files.length} files, ${(manifest.totalBytes / 1024 / 1024).toFixed(2)} MiB, version ${manifest.version.slice(0, 12)}.`, + ); + return manifest; +} + +if ( + process.argv[1] && + pathToFileURL(resolve(process.argv[1])).href === import.meta.url +) { + await buildSearch(); +} diff --git a/scripts/migrate-blog.mjs b/scripts/migrate-blog.mjs new file mode 100644 index 000000000..af3bdeada --- /dev/null +++ b/scripts/migrate-blog.mjs @@ -0,0 +1,882 @@ +#!/usr/bin/env node +/** + * Migrate reviewed Markdown decisions without changing the source collection. + * + * Preview: node scripts/migrate-blog.mjs --source --manifest + * Apply: node scripts/migrate-blog.mjs --source --manifest --apply + * Optional --aliases accepts explicit, reviewed old-name mappings. + * A completed reports/content-migration.json can itself be used as the next manifest. + */ +import { + existsSync, + readFileSync, + writeFileSync, + mkdirSync, + readdirSync, + statSync, + realpathSync, +} from "node:fs"; +import { createHash } from "node:crypto"; +import { createRequire } from "node:module"; +import { dirname, resolve, relative, sep, posix } from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import { parseArgs } from "node:util"; + +const repository = resolve(dirname(fileURLToPath(import.meta.url)), ".."); +const targetRoot = resolve(repository, "src"); +const reportPath = resolve(repository, "reports/content-migration.json"); +const metadataPath = resolve(repository, "src/data/migration-metadata.json"); +const importActions = new Set(["import_new", "update_existing"]); +const excludedActions = new Set(["skip_sensitive", "skip_private"]); +// These reviewed source notes are never read, copied, hashed, or described in the report. +const excludedNames = new Set(["TAPD.md", "2025-12-28.md"]); +const homeNames = new Set(["README.md"]); +const aboutNames = new Set(["intro.md", "个人简介.md", "About.md"]); +const excludedByRequest = (path) => + slash(path) + .split("/") + .slice(0, -1) + .some((directory) => /抖音|法律/.test(directory)); + +const { values } = parseArgs({ + options: { + source: { type: "string" }, + manifest: { type: "string" }, + aliases: { type: "string" }, + apply: { type: "boolean", default: false }, + "dry-run": { type: "boolean", default: false }, + help: { type: "boolean", short: "h", default: false }, + }, + strict: true, +}); + +if (values.help) { + process.stdout.write( + "node scripts/migrate-blog.mjs --source --manifest [--aliases ] [--apply]\nDefault: dry run. Source files are read only.\n", + ); + process.exit(0); +} +if (!values.source || !values.manifest || (values.apply && values["dry-run"])) { + throw new Error( + "Supply --source and --manifest; choose at most one of --apply and --dry-run.", + ); +} + +const sourceRoot = realpathSync(resolve(values.source)); +if (sourceRoot === realpathSync(targetRoot)) + throw new Error("Source and destination must differ."); +const manifest = JSON.parse(readFileSync(resolve(values.manifest), "utf8")); +const previousReport = existsSync(reportPath) + ? JSON.parse(readFileSync(reportPath, "utf8")) + : null; +const previousMetadata = existsSync(metadataPath) + ? JSON.parse(readFileSync(metadataPath, "utf8")) + : {}; +const hash = (value) => createHash("sha256").update(value).digest("hex"); +const slash = (value) => String(value).replaceAll("\\", "/").normalize("NFC"); + +function safeRelative(value, kind = "document") { + const path = slash(value); + if ( + !path || + path.startsWith("/") || + /^[a-z]:/i.test(path) || + path.split("/").some((part) => part === "..") + ) { + throw new Error(`Invalid relative ${kind} path in the review.`); + } + const normalized = posix.normalize(path).replace(/^\.\//, ""); + if (normalized === "." || normalized.startsWith("../")) + throw new Error(`Invalid ${kind} path.`); + return normalized; +} + +function inside(root, relativePath) { + const result = resolve(root, relativePath); + if (!result.startsWith(`${root}${sep}`)) + throw new Error("A reviewed path leaves its allowed directory."); + return result; +} + +function readSource(sourceRelativePath) { + const sourcePath = inside(sourceRoot, sourceRelativePath); + const real = realpathSync(sourcePath); + if (!real.startsWith(`${sourceRoot}${sep}`)) + throw new Error("A source symlink leaves the source collection."); + return { + bytes: readFileSync(real), + modifiedAt: statSync(real).mtime.toISOString(), + }; +} + +function readMarkdownPaths(root, prefix = "") { + const found = []; + for (const entry of readdirSync(root, { withFileTypes: true })) { + const path = `${prefix}${entry.name}`; + if (entry.isDirectory()) { + if (entry.name !== ".vuepress") + found.push(...readMarkdownPaths(resolve(root, entry.name), `${path}/`)); + } else if (entry.isFile() && /\.md$/i.test(entry.name)) + found.push(slash(path)); + } + return found; +} + +const decisions = (manifest.relations ?? manifest.decisions ?? []).map( + (entry) => { + // The anonymous excluded records in a previous report intentionally have no source path. + if (entry.excluded) + return { recommendation: entry.recommendation, excluded: true }; + const sourceRelativePath = safeRelative( + entry.relative ?? entry.sourceRelativePath, + "source", + ); + const recommendation = entry.recommendation; + if ( + excludedActions.has(recommendation) || + excludedNames.has(posix.basename(sourceRelativePath)) + ) { + return { recommendation: "skip_private_or_sensitive", excluded: true }; + } + const targetRelativePath = + entry.recommended_target_relative ?? entry.targetRelativePath; + return { + sourceRelativePath, + targetRelativePath: targetRelativePath + ? safeRelative(targetRelativePath, "target") + : null, + recommendation, + rationale: entry.rationale ?? null, + titleOverride: entry.title_override ?? entry.titleOverride ?? null, + expectedSourceHash: entry.raw_hash, + title: entry.title, + h1: entry.h1, + excludedByRequest: + entry.excludedByRequest === true || + excludedByRequest(sourceRelativePath), + }; + }, +); +if (!decisions.length) throw new Error("The review contains no decisions."); + +const planned = decisions.filter( + (entry) => + !entry.excludedByRequest && importActions.has(entry.recommendation), +); +const plannedTargets = new Set(); +for (const entry of planned) { + if (!entry.targetRelativePath?.endsWith(".md")) + throw new Error("Every import must target a Markdown file."); + if ( + entry.targetRelativePath.startsWith(".vuepress/") || + homeNames.has(entry.targetRelativePath) || + aboutNames.has(entry.targetRelativePath) + ) { + throw new Error( + "The migration may not replace site configuration or profile content.", + ); + } + if (plannedTargets.has(entry.targetRelativePath)) + throw new Error(`Two imports target ${entry.targetRelativePath}.`); + plannedTargets.add(entry.targetRelativePath); +} +const existingTargets = new Set(readMarkdownPaths(targetRoot)); +const requestExcludedTargets = new Set( + decisions + .filter((entry) => entry.excludedByRequest && entry.targetRelativePath) + .map((entry) => entry.targetRelativePath), +); +const availableTargets = new Set( + [...existingTargets, ...plannedTargets].filter( + (path) => !excludedByRequest(path) && !requestExcludedTargets.has(path) && !homeNames.has(path) && !aboutNames.has(path), + ), +); +const priorHashes = new Map( + (previousReport?.decisions ?? []) + .filter((entry) => entry.resultHash) + .map((entry) => [entry.targetRelativePath, entry.resultHash]), +); +for (const entry of planned) { + const targetPath = inside(targetRoot, entry.targetRelativePath); + if (entry.recommendation === "update_existing" && !existsSync(targetPath)) + throw new Error(`Reviewed update is missing: ${entry.targetRelativePath}.`); + if (entry.recommendation === "import_new" && existsSync(targetPath)) { + const id = entry.targetRelativePath.replace(/\.md$/i, ""); + const previous = previousMetadata[id]; + if ( + previous?.action !== "added" || + previous?.sourceRelativePath !== entry.sourceRelativePath + ) { + throw new Error( + `Unreviewed destination collision: ${entry.targetRelativePath}.`, + ); + } + } + const previousHash = priorHashes.get(entry.targetRelativePath); + if ( + previousHash && + existsSync(targetPath) && + hash(readFileSync(targetPath)) !== previousHash + ) { + throw new Error( + `Destination changed since migration: ${entry.targetRelativePath}. Review it before reapplying.`, + ); + } +} + +const documentKey = (value) => + posix + .normalize(slash(value).replace(/^\/+/, "")) + .replace(/\.(?:md|html)$/i, "") + .replace(/\/$/, ""); +const canonicalTitle = (value) => + String(value) + .normalize("NFKC") + .toLowerCase() + .replace(/[\p{P}\p{S}\s]+/gu, ""); +const aliases = new Map(); +const titleTargets = new Map(); + +function addAlias(name, target) { + const key = documentKey(name); + if (!key || key.startsWith("../")) return; + const targets = aliases.get(key) ?? new Set(); + targets.add(target); + aliases.set(key, targets); +} + +function addTitle(name, target) { + if (!name) return; + const key = canonicalTitle(name); + if (!key) return; + const targets = titleTargets.get(key) ?? new Set(); + targets.add(target); + titleTargets.set(key, targets); +} + +for (const target of availableTargets) { + addAlias(target, target); + addAlias(`src/${target}`, target); + addTitle(posix.basename(target, ".md"), target); +} +for (const entry of decisions) { + if (entry.excluded || entry.excludedByRequest) continue; + const target = entry.targetRelativePath; + if (!availableTargets.has(target)) continue; + addAlias(entry.sourceRelativePath, target); + if (entry.sourceRelativePath.startsWith("src/")) + addAlias(entry.sourceRelativePath.slice(4), target); + addTitle(posix.basename(entry.sourceRelativePath, ".md"), target); + addTitle(entry.title, target); + addTitle(entry.h1, target); +} +// These links lead to the existing Astro pages; their source files never replace the UI. +for (const [names, page] of [[homeNames, "@home"], [aboutNames, "@about"]]) { + for (const name of names) { + if (page === "@home" && !existsSync(inside(sourceRoot, name))) continue; + aliases.set(documentKey(name), new Set([page])); + } +} + +const reviewedAliases = { + ...(manifest.reviewedLinkAliases ?? {}), + ...(values.aliases + ? JSON.parse(readFileSync(resolve(values.aliases), "utf8")) + : {}), +}; +for (const [oldPath, item] of Object.entries(reviewedAliases)) { + const old = safeRelative(oldPath, "alias"); + const target = safeRelative( + typeof item === "string" ? item : item.targetRelativePath, + "alias target", + ); + if (!availableTargets.has(target)) + throw new Error(`Reviewed alias has no article: ${target}.`); + // An explicit reviewed alias takes precedence over automatic title candidates. + aliases.set(documentKey(old), new Set([target])); +} + +const assets = (manifest.asset_migrations ?? manifest.assets ?? []).map( + (asset) => { + const sourceRelativePath = + asset.sourceRelativePath ?? slash(relative(sourceRoot, asset.source)); + const targetRelativePath = asset.public_target ?? asset.targetRelativePath; + return { + sourceRelativePath: safeRelative(sourceRelativePath, "asset source"), + targetRelativePath: safeRelative(targetRelativePath, "asset target"), + articleRelativePath: safeRelative( + asset.article ?? asset.articleRelativePath, + "asset article", + ), + articleUrl: asset.article_url ?? asset.articleUrl, + }; + }, +); +const assetMap = new Map(); +const assetWrites = []; +for (const asset of assets) { + if ( + !asset.targetRelativePath.startsWith("public/content-assets/") || + !asset.articleUrl?.startsWith("/content-assets/") + ) { + throw new Error( + "Reviewed assets must remain inside public/content-assets.", + ); + } + const { bytes } = readSource(asset.sourceRelativePath); + const targetPath = inside(repository, asset.targetRelativePath); + if ( + existsSync(targetPath) && + hash(readFileSync(targetPath)) !== hash(bytes) + ) { + throw new Error(`Destination asset differs: ${asset.targetRelativePath}.`); + } + assetMap.set(asset.sourceRelativePath, asset.articleUrl); + assetWrites.push({ targetPath, bytes, asset }); +} + +// Reuse Astro's installed Markdown parser; no extra dependency or rendering/build is needed. +const markdownRequire = createRequire( + import.meta.resolve("@astrojs/markdown-remark"), +); +const { unified } = await import( + pathToFileURL(markdownRequire.resolve("unified")) +); +const { default: remarkParse } = await import( + pathToFileURL(markdownRequire.resolve("remark-parse")) +); +const { default: remarkGfm } = await import( + pathToFileURL(markdownRequire.resolve("remark-gfm")) +); +const parser = unified().use(remarkParse).use(remarkGfm); +const linkReport = []; +const sourceMissingDocumentReferences = + manifest.sourceMissingDocumentReferences ?? + (manifest.risks?.local_docs ?? []) + .filter((item) => !item.exists) + .map((item) => ({ sourceRelativePath: item.file, href: item.url })); +const assetReferences = + manifest.assetReferences ?? + (manifest.risks?.assets ?? []).map((item) => ({ + sourceRelativePath: item.file, + href: item.url, + sourceExists: item.exists, + })); +const protectedAssetExamples = new Set(); + +function decode(value) { + try { + return decodeURIComponent(value); + } catch { + return value; + } +} + +function splitHref(href) { + const decoded = decode( + String(href).trim().replace(/^<|>$/g, "").replaceAll("&", "&"), + ); + const match = decoded.match(/^([^?#]*)([?#].*)?$/); + return { path: slash(match?.[1] ?? decoded), suffix: match?.[2] ?? "" }; +} + +function sourceResolved(path, sourceRelativePath) { + return path.startsWith("/") + ? posix.normalize(path.replace(/^\/+/, "")) + : posix.normalize(posix.join(posix.dirname(sourceRelativePath), path)); +} + +function sole(set) { + return set?.size === 1 ? [...set][0] : null; +} + +function resolveDocument(href, sourceRelativePath, { wiki = false } = {}) { + if (!href || /^(?:[a-z][a-z\d+.-]*:|\/\/|#|\?)/i.test(href)) + return { external: true }; + const { path, suffix } = splitHref(href); + if (!path) return { external: true }; + // Known interface routes retain their semantics and get BASE_URL at render time. + if (/^\/(?:en\/)?(?:about|blog|contact)?\/?$/.test(path)) return { external: true }; + const resolvedPath = sourceResolved(path, sourceRelativePath); + if (excludedNames.has(posix.basename(resolvedPath))) + return { unresolved: true, excluded: true }; + if ( + excludedByRequest(resolvedPath) || + excludedByRequest(path.replace(/^\/+/, "")) + ) + return { unresolved: true, excludedByRequest: true }; + const keys = [resolvedPath, path.replace(/^\/+/, "")]; + for (const key of keys) { + // A missing sibling README/profile must not fall back to the source root page. + if (key !== resolvedPath && /^(?:README|index|intro|About|个人简介)(?:\.(?:md|html))?$/i.test(key)) continue; + const target = sole(aliases.get(documentKey(key))); + if (target) return { target, suffix, method: "path-or-reviewed-alias" }; + } + // Old VuePress document links can omit an extension. Other extensions may be assets. + if (!wiki && !/\.(?:md|html)$/i.test(path) && posix.extname(path.replace(/\/$/, ""))) return { external: true }; + // Directory moves and whitespace/punctuation-only renames are unambiguous only + // when the normalized full title refers to one available article. + const title = posix.basename(path.replace(/\/$/, "")).replace(/\.(?:md|html)$/i, ""); + // Generic landing-page filenames are meaningful only with an exact reviewed path. + if (/^(?:readme|index|intro|about|个人简介)$/i.test(title)) return { unresolved: true, resolvedPath }; + const target = sole(titleTargets.get(canonicalTitle(title))); + if (target) return { target, suffix, method: "unique-normalized-title" }; + return { unresolved: true, resolvedPath }; +} + +function routeFor(target, suffix = "") { + const route = + target === "@home" + ? "/" + : target === "@about" + ? "/about/" + : `/posts/${target.replace(/\.md$/i, "").split("/").map(encodeURIComponent).join("/")}/`; + // Astro's Markdown adapter supplies BASE_URL at render time; this source stays portable. + return `${route}${encodeURI(suffix).replaceAll("%25", "%")}`; +} + +function recordLink(sourceRelativePath, href, result, kind) { + if (result.external) return; + linkReport.push({ + sourceRelativePath, + kind, + ...(result.excluded ? {} : { originalHref: href }), + action: result.unresolved ? "unresolved-to-text" : "rewritten", + ...(result.target + ? { targetRelativePath: result.target, method: result.method } + : {}), + ...(result.excluded + ? { reason: "excluded-private-or-sensitive-target" } + : {}), + ...(result.excludedByRequest ? { reason: "excluded-by-user-request" } : {}), + }); +} + +function frontmatter(source) { + const match = source.match(/^\uFEFF?---\r?\n[\s\S]*?\r?\n---(?:\r?\n|$)/); + return { + header: match?.[0] ?? "", + body: match ? source.slice(match[0].length) : source.replace(/^\uFEFF/, ""), + }; +} + +function walk(node, visit) { + visit(node); + for (const child of node.children ?? []) walk(child, visit); +} + +function escapeMarkdown(value) { + return String(value).replace(/([\\[\]])/g, "\\$1"); +} +function htmlText(value) { + return String(value) + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">"); +} +function htmlAttribute(value) { + return htmlText(value).replaceAll('"', """); +} + +function migrateBody(body, sourceRelativePath) { + const tree = parser.parse(body); + const edits = []; + const protectedRanges = []; + const definitions = new Map(); + const addEdit = (node, replacement) => { + const start = node.position?.start.offset; + const end = node.position?.end.offset; + if (start == null || end == null) + throw new Error("Markdown parser omitted a source position."); + edits.push({ start, end, replacement }); + }; + const labelFor = (node) => { + const first = node.children?.[0]?.position?.start.offset; + const last = node.children?.at(-1)?.position?.end.offset; + return first == null || last == null ? "" : body.slice(first, last); + }; + walk(tree, (node) => { + if ( + node.position && + [ + "link", + "linkReference", + "image", + "imageReference", + "definition", + "html", + ].includes(node.type) + ) { + protectedRanges.push([ + node.position.start.offset, + node.position.end.offset, + ]); + } + if (["code", "inlineCode"].includes(node.type)) { + protectedRanges.push([ + node.position.start.offset, + node.position.end.offset, + ]); + for (const reference of assetReferences) { + if ( + reference.sourceRelativePath === sourceRelativePath && + node.value.includes(reference.href) + ) + protectedAssetExamples.add( + `${sourceRelativePath}\n${reference.href}`, + ); + } + } + if (node.type === "definition") definitions.set(node.identifier, node); + }); + const imageResult = (href) => { + if (/^(?:[a-z][a-z\d+.-]*:|\/\/|#)/i.test(href)) return { external: true }; + const { path } = splitHref(href); + const sourceAsset = sourceResolved(path, sourceRelativePath); + const asset = assetMap.get(sourceAsset); + if (asset) return { url: asset }; + return { missing: true }; + }; + const missingImage = (alt) => + `${escapeMarkdown(alt || "原文图片")}(图片文件缺失)`; + const titleSuffix = (node) => + node.title ? ` ${JSON.stringify(node.title)}` : ""; + const definitionResults = new Map(); + for (const [id, node] of definitions) { + const result = resolveDocument(node.url, sourceRelativePath); + if (!result.external) { + definitionResults.set(id, result); + recordLink(sourceRelativePath, node.url, result, "definition"); + addEdit( + node, + result.unresolved + ? "" + : `[${node.label ?? node.identifier}]: ${routeFor(result.target, result.suffix)}${titleSuffix(node)}`, + ); + } + } + walk(tree, (node) => { + if (node.type === "link") { + const result = resolveDocument(node.url, sourceRelativePath); + if (result.external) return; + recordLink(sourceRelativePath, node.url, result, "markdown"); + addEdit( + node, + result.unresolved + ? labelFor(node) + : `[${labelFor(node)}](${routeFor(result.target, result.suffix)}${titleSuffix(node)})`, + ); + } else if (node.type === "linkReference") { + const result = definitionResults.get(node.identifier); + if (result?.unresolved) addEdit(node, labelFor(node)); + } else if (node.type === "image") { + const result = imageResult(node.url); + if (result.external) return; + linkReport.push({ + sourceRelativePath, + kind: "image", + originalHref: node.url, + action: result.missing + ? "missing-image-to-alt-text" + : "asset-rewritten", + }); + addEdit( + node, + result.missing + ? missingImage(node.alt) + : `![${escapeMarkdown(node.alt ?? "")}](${result.url}${titleSuffix(node)})`, + ); + } else if (node.type === "imageReference") { + const definition = definitions.get(node.identifier); + if (!definition) return; + const result = imageResult(definition.url); + if (result.external) return; + linkReport.push({ + sourceRelativePath, + kind: "image-reference", + originalHref: definition.url, + action: result.missing + ? "missing-image-to-alt-text" + : "asset-rewritten", + }); + addEdit( + node, + result.missing + ? missingImage(node.alt) + : `![${escapeMarkdown(node.alt ?? "")}](${result.url}${titleSuffix(definition)})`, + ); + } else if (node.type === "html") { + let html = node.value; + html = html.replace( + /]*?)\bhref\s*=\s*(["'])(.*?)\2([^>]*)>([\s\S]*?)<\/a>/gi, + (match, before, quote, href, after, label) => { + const result = resolveDocument(href, sourceRelativePath); + if (result.external) return match; + recordLink(sourceRelativePath, href, result, "html"); + return result.unresolved + ? label + : `${label}`; + }, + ); + html = html.replace( + /]*?\bsrc\s*=\s*(["'])(.*?)\1[^>]*\/?>/gi, + (match, _quote, href) => { + const result = imageResult(href); + if (result.external) return match; + linkReport.push({ + sourceRelativePath, + kind: "html-image", + originalHref: href, + action: result.missing + ? "missing-image-to-alt-text" + : "asset-rewritten", + }); + const alt = + match.match(/\balt\s*=\s*(["'])(.*?)\1/i)?.[2] ?? "原文图片"; + return result.missing + ? `${htmlText(alt)}(图片文件缺失)` + : match.replace(href, result.url); + }, + ); + if (html !== node.value) addEdit(node, html); + } + }); + // Obsidian double links are converted only outside code and existing Markdown edits. + const wikiPattern = /(!?)\[\[([^\]\r\n]+)\]\]/g; + for (const match of body.matchAll(wikiPattern)) { + const start = match.index; + const end = start + match[0].length; + if ( + protectedRanges.some(([a, b]) => start < b && end > a) || + edits.some((edit) => start < edit.end && end > edit.start) + ) + continue; + const [href, ...labelParts] = match[2].split("|"); + const label = + labelParts.join("|") || posix.basename(href).replace(/\.md$/i, ""); + if (match[1]) { + const result = imageResult(href); + if (result.external) continue; + linkReport.push({ + sourceRelativePath, + kind: "wiki-embed", + originalHref: href, + action: result.missing + ? "missing-image-to-alt-text" + : "asset-rewritten", + }); + edits.push({ + start, + end, + replacement: result.missing + ? missingImage(label) + : `![${escapeMarkdown(label)}](${result.url})`, + }); + } else { + const result = resolveDocument(href, sourceRelativePath, { wiki: true }); + recordLink(sourceRelativePath, href, result, "wiki"); + edits.push({ + start, + end, + replacement: + result.external || result.unresolved + ? escapeMarkdown(label) + : `[${escapeMarkdown(label)}](${routeFor(result.target, result.suffix)})`, + }); + } + } + // Children of Markdown links can contain images: apply the enclosing replacement + // once, rather than corrupting the file through overlapping source offsets. + const selected = edits + .sort((a, b) => a.start - b.start || b.end - a.end) + .filter( + (edit, index, all) => + !all + .slice(0, index) + .some( + (parent) => edit.start >= parent.start && edit.end <= parent.end, + ), + ); + let result = body; + for (const edit of selected.sort((a, b) => b.start - a.start)) + result = + result.slice(0, edit.start) + edit.replacement + result.slice(edit.end); + return result; +} + +const documentWrites = []; +const metadata = { ...previousMetadata }; +const reportDecisions = []; +for (const entry of decisions) { + if (entry.excluded) { + reportDecisions.push({ + excluded: true, + recommendation: "skip_private_or_sensitive", + action: "excluded", + rationale: + "Private or sensitive working note omitted; no contents or fingerprints retained.", + }); + continue; + } + const reportEntry = { + sourceRelativePath: entry.sourceRelativePath, + targetRelativePath: entry.targetRelativePath, + recommendation: entry.recommendation, + action: entry.excludedByRequest + ? "excluded_by_request" + : importActions.has(entry.recommendation) + ? entry.recommendation === "import_new" + ? "added" + : "updated" + : "skipped", + rationale: entry.excludedByRequest + ? "Source directory excluded by the user's request." + : entry.rationale, + ...(entry.excludedByRequest ? { excludedByRequest: true } : {}), + ...(entry.titleOverride ? { titleOverride: entry.titleOverride } : {}), + }; + if (entry.excludedByRequest || !importActions.has(entry.recommendation)) { + reportDecisions.push(reportEntry); + continue; + } + const { bytes, modifiedAt } = readSource(entry.sourceRelativePath); + const sourceHash = hash(bytes); + // Python-based inventories may normalize CRLF when hashing decoded text. + if ( + entry.expectedSourceHash && + sourceHash !== entry.expectedSourceHash && + hash(bytes.toString("utf8").replace(/\r\n?/g, "\n")) !== + entry.expectedSourceHash + ) { + throw new Error( + `Source changed since review: ${entry.sourceRelativePath}.`, + ); + } + const source = frontmatter(bytes.toString("utf8")); + const targetPath = inside(targetRoot, entry.targetRelativePath); + const existing = existsSync(targetPath) + ? readFileSync(targetPath, "utf8") + : null; + let header = + entry.recommendation === "update_existing" && existing != null + ? frontmatter(existing).header + : source.header; + if (entry.titleOverride) { + header = header + ? header.replace( + /^(title\s*:).*$/m, + `$1 ${JSON.stringify(entry.titleOverride)}`, + ) + : `---\ntitle: ${JSON.stringify(entry.titleOverride)}\n---\n`; + if (!/^title\s*:/m.test(header)) + header = header.replace( + /^(?:\uFEFF)?---\r?\n/, + `---\ntitle: ${JSON.stringify(entry.titleOverride)}\n`, + ); + } + const output = header + migrateBody(source.body, entry.sourceRelativePath); + const action = entry.recommendation === "import_new" ? "added" : "updated"; + metadata[entry.targetRelativePath.replace(/\.md$/i, "")] = { + sourceRelativePath: entry.sourceRelativePath, + sourceModifiedAt: modifiedAt, + sourceHash, + action, + }; + reportDecisions.push({ ...reportEntry, resultHash: hash(output) }); + documentWrites.push({ targetPath, output, unchanged: existing === output }); +} + +const byRecommendation = {}; +const byAction = {}; +for (const entry of reportDecisions) { + byRecommendation[entry.recommendation] = + (byRecommendation[entry.recommendation] ?? 0) + 1; + byAction[entry.action] = (byAction[entry.action] ?? 0) + 1; +} +const linkActions = {}; +for (const entry of linkReport) + linkActions[entry.action] = (linkActions[entry.action] ?? 0) + 1; +const missingReferenceKeys = new Set( + sourceMissingDocumentReferences.map( + (item) => `${item.sourceRelativePath}\n${decode(item.href)}`, + ), +); +const originallyMissing = linkReport.filter( + (item) => + item.originalHref && + missingReferenceKeys.has( + `${item.sourceRelativePath}\n${decode(item.originalHref)}`, + ), +); +const report = { + schemaVersion: 1, + sourceReadOnly: true, + datePolicy: + "Explicit article frontmatter stays intact. Source filesystem modification times are provenance and dateModified only; they are never treated as publication dates.", + counts: { + reviewed: reportDecisions.length, + ...byAction, + assets: assets.length, + recommendations: byRecommendation, + links: linkActions, + originallyMissingDocumentLinks: { + inventoried: sourceMissingDocumentReferences.length, + rewritten: originallyMissing.filter((item) => item.action === "rewritten") + .length, + convertedToText: originallyMissing.filter( + (item) => item.action === "unresolved-to-text", + ).length, + }, + }, + existingRequestExcludedTargets: [...requestExcludedTargets].filter((path) => + existingTargets.has(path), + ), + decisions: reportDecisions, + assets, + assetReferences: assetReferences.map((item) => ({ + ...item, + ...(protectedAssetExamples.has(`${item.sourceRelativePath}\n${item.href}`) + ? { disposition: "code-example-preserved; never emitted as an image" } + : {}), + })), + sourceMissingDocumentReferences, + reviewedLinkAliases: reviewedAliases, + links: linkReport, +}; +const writeIfChanged = (path, content) => { + if (existsSync(path) && readFileSync(path).equals(Buffer.from(content))) + return false; + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, content); + return true; +}; +let documentsWritten = 0; +let assetsWritten = 0; +if (values.apply) { + // Validate the full plan and render every edit before any destination write. + for (const item of documentWrites) + if (!item.unchanged && writeIfChanged(item.targetPath, item.output)) + documentsWritten++; + for (const item of assetWrites) + if (writeIfChanged(item.targetPath, item.bytes)) assetsWritten++; + writeIfChanged( + metadataPath, + `${JSON.stringify(Object.fromEntries(Object.entries(metadata).sort(([a], [b]) => a.localeCompare(b, "en"))), null, 2)}\n`, + ); + writeIfChanged(reportPath, `${JSON.stringify(report, null, 2)}\n`); +} +process.stdout.write( + `${JSON.stringify( + { + mode: values.apply ? "apply" : "dry-run", + counts: report.counts, + documentsToWrite: documentWrites.filter((item) => !item.unchanged).length, + documentsWritten, + assetsWritten, + report: "reports/content-migration.json", + metadata: "src/data/migration-metadata.json", + }, + null, + 2, + )}\n`, +); diff --git a/serverless.yml b/serverless.yml deleted file mode 100644 index e404ed735..000000000 --- a/serverless.yml +++ /dev/null @@ -1,19 +0,0 @@ -component: website -name: website-4qFm7_dVlx -org: '1259409954' -app: yihui-blog -stage: prod -inputs: - src: - src: ./src - dist: ./dist - hook: npm run docs:build - index: index.html - error: index.html - exclude: - - .env - region: ap-shanghai - bucketName: my-bucket-ash8g5j - protocol: https - isAutoCiDeploy: false - replace: true diff --git a/src/.vuepress/components/DataReport.vue b/src/.vuepress/components/DataReport.vue deleted file mode 100644 index f495ed3b0..000000000 --- a/src/.vuepress/components/DataReport.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/src/.vuepress/config.ts b/src/.vuepress/config.ts deleted file mode 100644 index 3b2bec2b9..000000000 --- a/src/.vuepress/config.ts +++ /dev/null @@ -1,71 +0,0 @@ -import {defineUserConfig} from "vuepress"; -import {searchProPlugin} from "vuepress-plugin-search-pro"; -import theme from "./theme"; - -export default defineUserConfig({ - theme: theme, - base: "/", - dest: "./dist", - title: "Yihui's Blog", - description: "前端小白的技术博客", - head: [ - [ - 'script', {}, ` - var _hmt = _hmt || []; - (function() { - var hm = document.createElement("script"); - hm.src = "https://hm.baidu.com/hm.js?43cbf856b430fee41af63fc72731d1d6"; - var s = document.getElementsByTagName("script")[0]; - s.parentNode.insertBefore(hm, s); - })();` - ], - [ - 'meta', {name: 'google-site-verification', content: '9vkxYqOlDYYQz21WsvuXk9ztRIK5L0_MuzL1WvFmBuY'} - ], - [ - 'meta', {name: 'keywords', content: '前端博客 vuepress Vue React JavaScript'} - ] - ], - - locales: { - "/": { - lang: "zh-CN", - title: "Yihui's Blog", - description: "前端小白的技术博客", - }, - }, - plugins: [ - searchProPlugin({ - // 索引全部内容 - indexContent: true, - locales: { - "/": { - placeholder: "搜索", - } - }, - // 自定义搜索项目 https://vuepress-theme-hope.github.io/v2/search-pro/zh/config.html#customfields - customFields: [ - { - name: "category", - // @ts-ignore - getter: (page) => page.frontmatter.category, - formatter: { - "/": "分类: $content", - }, - }, - { - name: "tag", - // @ts-ignore - getter: (page) => page.frontmatter.tag, - formatter: { - "/": "标签: $content", - }, - }, - ], - hotKeys: [{ - key: "h", - ctrl: true, - }], - }) - ], -}); diff --git a/src/.vuepress/navbar.ts b/src/.vuepress/navbar.ts deleted file mode 100644 index 4545e27f3..000000000 --- a/src/.vuepress/navbar.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {navbar} from "vuepress-theme-hope"; - -export default navbar([ - { - text: "首页", - link: "/", - }, - { - text: "关于", - link: "/个人简介", - }, - { - text: "收藏", - link: "/star", - }, - { - text: "知识大纲", - link: "/校招/知识大纲", - }, - { - text: "必读文章", - link: "/软技能/精选文章列表", - }, - { - text: "友链", - children: [ - { - text: "辉光世界官网", - link: "https://lwmc.net", - }, - { - text: "DiF1202 博客", - link: "http://182.61.38.183:3000/home" - } - ] - } -]); diff --git a/src/.vuepress/sidebar.ts b/src/.vuepress/sidebar.ts deleted file mode 100644 index 295f289c0..000000000 --- a/src/.vuepress/sidebar.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {sidebar} from "vuepress-theme-hope"; -import sidebars from "./sidebars"; - -export default sidebar({ - ...sidebars, - "/计算机网络/": "structure", - "/浏览器工作原理/": "structure", - "/leetcode/": "structure", - "/面试通用/": "structure", - "/JavaScript/": [ - { - text: "JavaScript知识体系", - prefix: "", - children: "structure" - } - ], - "/牛客/": "structure", - "/CSS/": [ - { - text: "CSS面试题", - prefix: "interview", - children: "structure" - }, - { - text: "CSS知识体系", - prefix: "", - children: "structure" - } - ], - "/HTML/": "structure", - "/TypeScript/": "structure" -}); diff --git a/src/.vuepress/sidebars/index.ts b/src/.vuepress/sidebars/index.ts deleted file mode 100644 index 772a3e1ee..000000000 --- a/src/.vuepress/sidebars/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import nodeSidebar from "./node"; -import vueSidebar from "./vue"; -import reactSidebar from "./react"; -import webpackSidebar from "./webpack"; - -export default { - ...nodeSidebar, - ...vueSidebar, - ...reactSidebar, - ...webpackSidebar, -}; - diff --git a/src/.vuepress/sidebars/node.ts b/src/.vuepress/sidebars/node.ts deleted file mode 100644 index dad28199a..000000000 --- a/src/.vuepress/sidebars/node.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {sidebar} from "vuepress-theme-hope"; - -export default sidebar({ - "/Node/": "structure", -}); diff --git a/src/.vuepress/sidebars/react.ts b/src/.vuepress/sidebars/react.ts deleted file mode 100644 index 59bc88aa3..000000000 --- a/src/.vuepress/sidebars/react.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {sidebar} from "vuepress-theme-hope"; - -export default sidebar({ - "/React/": "structure", -}); diff --git a/src/.vuepress/sidebars/vue.ts b/src/.vuepress/sidebars/vue.ts deleted file mode 100644 index cf19aa256..000000000 --- a/src/.vuepress/sidebars/vue.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {sidebar} from "vuepress-theme-hope"; - -export default sidebar({ - '/Vue/': [ - { - text: "Vue源码解析", - prefix: "code", - children: "structure", - }, - { - text: "Vue基础知识体系", - prefix: "", - children: "structure", - } - ], -}); diff --git a/src/.vuepress/sidebars/webpack.ts b/src/.vuepress/sidebars/webpack.ts deleted file mode 100644 index 3596581b8..000000000 --- a/src/.vuepress/sidebars/webpack.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {sidebar} from "vuepress-theme-hope"; - -export default sidebar({ - "/Webpack/": [ - { - text: 'Webpack基础', - prefix: '', - children: "structure", - }, - { - text: 'Webpack面试', - prefix: 'interview', - children: 'structure', - } - ], -}); diff --git a/src/.vuepress/styles/index.scss b/src/.vuepress/styles/index.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/.vuepress/styles/palette.scss b/src/.vuepress/styles/palette.scss deleted file mode 100644 index 42e7de248..000000000 --- a/src/.vuepress/styles/palette.scss +++ /dev/null @@ -1 +0,0 @@ -$theme-color: #2196f3; diff --git a/src/.vuepress/theme.ts b/src/.vuepress/theme.ts deleted file mode 100644 index 59c6bd109..000000000 --- a/src/.vuepress/theme.ts +++ /dev/null @@ -1,81 +0,0 @@ -import {hopeTheme} from "vuepress-theme-hope"; -import navbar from "./navbar"; -import sidebar from "./sidebar"; - -export default hopeTheme({ - outlookLocales: undefined, - hostname: "https://yihuiBlog.top", - - author: { - name: "Yihui", - url: "https://yihuiBlog.top", - }, - - headerDepth: 4, - - iconPrefix: "iconfont icon-", - - logo: "https://cdn.yihuiblog.top/images/logo-for-blog.jpg", - - repo: "https://github.com/MoMeak9/MyBlogDoc", - - docsDir: "/src", - - // navbar - navbar: navbar, - - // sidebar - sidebar: sidebar, - - footer: "闽ICP备19026932号-1", - - copyright: "Licensed under CC-BY 4.0", - - displayFooter: true, - - pageInfo: ["Author", "Original", "Date", "Category", "Tag", "ReadingTime"], - - blog: { - description: "泯泷 - 前端开发爱好者", - intro: "/intro.html", - medias: { - // https://vuepress-theme-hope.github.io/v2/zh/config/theme/feature.html#blog-medias - Email: "mailto:shi_yihui@qq.com", - GitHub: "https://github.com/MoMeak9", - BiliBili: "https://space.bilibili.com/298768693", - }, - }, - - plugins: { - blog: { - autoExcerpt: true, - }, - - // 你也可以使用 Waline - comment: { - provider: "Giscus", - repo: "MoMeak9/giscus_discuess", - repoId: "R_kgDOHAxnrQ", - category: "General", - categoryId: "DIC_kwDOHAxnrc4COIL7", - }, - - mdEnhance: { - presentation: { - plugins: ["highlight", "math", "search", "notes", "zoom"], - }, - }, - copyright: { - hostname: "https://yihuiblog.top", - author: 'YihuiBlog', - license: 'CC-BY 4.0', - global: true, - triggerWords: 20, - }, - copyCode: {}, - }, - fullscreen: false, - themeColor: false, - darkmode: "switch", - titleIcon: true, -}); diff --git "a/src/2023 \350\277\233\351\230\266\346\270\205\345\215\225.md" "b/src/2023 \350\277\233\351\230\266\346\270\205\345\215\225.md" new file mode 100644 index 000000000..bcbc5f83b --- /dev/null +++ "b/src/2023 \350\277\233\351\230\266\346\270\205\345\215\225.md" @@ -0,0 +1,39 @@ +@by 泯泷 + +## 纸质书单 + +​ JavaScript +- [JavaScript权威指南(原书第7版) ](https://book.douban.com/subject/35396470/) +- [JavaScript高级程序设计(第4版) ](https://book.douban.com/subject/35175321/) +- [你不知道的JavaScript(上中下) ](https://book.douban.com/subject/26351021/) +Vue +- [Vue.js技术内幕 ](https://book.douban.com/subject/36092368/) +CSS +- [CSS权威指南(第三版) ](https://book.douban.com/subject/2308234/) +新书: +- [现代JavaScript库开发:原理、技术与实战](https://book.douban.com/subject/36162488/) +- [React设计原理](https://book.douban.com/subject/36171032/) +## 全面进阶 +- [写给初中级前端的高级进阶指南 - 掘金](https://juejin.cn/post/6844904103504527374) :star: +- [React技术揭秘](https://react.iamkasong.com/#%E5%AF%BC%E5%AD%A6%E8%A7%86%E9%A2%91) :star: +- [MyBlogDoc/src/浏览器工作原理 at main · MoMeak9/MyBlogDoc](https://github.com/MoMeak9/MyBlogDoc/tree/main/src/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86) +- [计算机网络-小林coding](https://xiaolincoding.com/) +## 掘金非常好的小书 +- [深入浅出 Vite - 神三元 - 掘金小册](https://juejin.cn/book/7050063811973218341?enter_from=course_center&utm_source=course_center) +- [Webpack5 核心原理与应用实践 - 范文杰 - 掘金小册](https://juejin.cn/book/7115598540721618944?enter_from=course_center&utm_source=course_center) +- [TypeScript 全面进阶指南 - 林不渡 - 掘金小册](https://juejin.cn/book/7086408430491172901?enter_from=course_center&utm_source=course_center) :star: +## 牛人博客 +- [Kent C. Dodds](https://kentcdodds.com/) +- [fi3ework](https://github.com/fi3ework/blog) +- [**木易杨** 的博客](https://github.com/yygmind/blog) +- [DDFE/DDFE-blog: welcome to DDFE's blog](https://github.com/DDFE/DDFE-blog) +## 构建工具 +- [深入浅出 Webpack · 深入浅出 Webpack](http://webpack.wuhaolin.cn/) +- [webpack系列之一总览 · Issue #36 · DDFE/DDFE-blog](https://github.com/DDFE/DDFE-blog/issues/36) +- [[万字总结] 一文吃透 Webpack 核心原理 - 知乎](https://zhuanlan.zhihu.com/p/363928061) +## 性能优化 +- [user-centric-performance-metrics](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics) +- [详谈层合成(composite)](https://juejin.im/entry/59dc9aedf265da43200232f9) +- [让你的网页更丝滑](https://zhuanlan.zhihu.com/p/66398148) +- [Why remove time slicing from vue3?](https://github.com/vuejs/rfcs/issues/89) +- [前端性能优化之浏览器渲染优化 —— 打造60FPS页面](https://github.com/fi3ework/blog/issues/9) \ No newline at end of file diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\345\272\224\347\224\250\345\274\200\345\217\221\351\235\242\350\257\225\351\242\230.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\345\272\224\347\224\250\345\274\200\345\217\221\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 000000000..d2681d2e9 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\345\272\224\347\224\250\345\274\200\345\217\221\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,440 @@ +# AI 应用开发面试题 + +日期:2026-07-12 +标签:#面试 #AI应用开发 #RAG #A2A #Agent + +> 说明:协议与框架迭代很快。本文以 A2A 1.0.x、OpenClaw 与 Google ADK 当前公开文档为准;面试时可补一句“具体字段与 SDK 以所用版本为准”。 + +## 1. 最近 OpenClaw 这么火,你知道它的原理吗? + +### 一句话答案 + +OpenClaw 本质是一个自托管的 Agent Gateway:把 WhatsApp、Telegram、Slack 等消息渠道统一接入,通过会话、上下文、模型与工具调用闭环,让 AI 从“聊天”变为可持续执行任务的个人助理。 + +### 面试口语版 + +它不是一个新模型,而是一层 Agent 运行时和接入网关。消息先由 Channel 插件进入 Gateway,Gateway 做身份校验、路由和会话管理,再把历史上下文、系统指令和可用工具交给 Agent。模型根据 ReAct 或 tool-calling 决定是否调用文件、Shell、浏览器、定时任务等工具;工具结果回填上下文后继续推理,最终把结果发回原渠道。它火在把多渠道、持久会话、工具、记忆和自动化装成了开箱即用的自托管系统。 + +### 原理拆解 + +```mermaid +flowchart LR + U[用户/消息渠道] --> C[Channel 插件] + C --> G[Gateway: 鉴权、路由、会话] + G --> A[Agent Runtime] + A --> L[LLM 推理] + L -->|工具调用| T[工具/技能/节点] + T --> A + A --> G --> U +``` + +- **Channel 层**:适配不同 IM 的收发、Webhook/长连接、用户身份。 +- **Gateway 层**:单一事实源,维护连接、会话、路由、配置与访问控制。 +- **Agent 层**:组织 prompt、短期上下文和记忆,循环执行“推理—行动—观察”。 +- **能力层**:工具、Skills、插件、cron/webhook;模型只提出意图,执行器真正落地动作。 + +### 关键细节与追问 + +- 生产上要做工具最小权限、`allowFrom` 白名单、命令确认、密钥隔离和审计;不要把“模型能调用 Shell”当成默认安全。 +- 记忆应区分会话上下文、长期偏好和可检索知识,且要有过期与删除机制。 +- 追问:多渠道如何隔离上下文?长任务如何异步通知?工具失败怎么重试与幂等?Prompt 注入如何防护? + +## 2. 什么是 RAG?RAG 的主要流程是什么? + +### 一句话答案 + +RAG(Retrieval-Augmented Generation,检索增强生成)是在生成前从外部知识库检索相关证据,并把证据连同问题交给大模型作答的架构,用来降低幻觉并让回答可基于私有、可更新的数据。 + +### 面试口语版 + +RAG 把“知识”从模型参数中部分外置。离线侧先采集文档、清洗、分块、向量化并建立索引;在线侧对用户问题做改写或扩展,召回候选分块,经过重排和上下文压缩后,将高质量证据连同问题放入提示词,让模型只基于证据回答并给出引用。它不能保证绝对正确,效果取决于数据、检索、上下文构建和生成约束的共同质量。 + +### 原理拆解 + +```mermaid +flowchart TD + D[原始文档] --> P[清洗/解析/分块] + P --> E[Embedding] + E --> I[向量与关键词索引] + Q[用户问题] --> R[改写/扩展] + R --> S[召回:向量/BM25/过滤] + I --> S --> K[重排与上下文压缩] + K --> G[LLM: 基于证据生成] + G --> O[答案、引用、拒答] +``` + +### 关键细节与追问 + +- 离线链路关注文档版本、权限元数据、chunk 与原文可追溯关系。 +- 在线链路关注 Recall、延迟、token 预算、引用与“无证据则拒答”。 +- 追问:RAG 与微调如何选?召回不到怎么办?为什么不能只用向量检索? + +## 3. 什么是 RAG 中的 Rerank?具体需要怎么做? + +### 一句话答案 + +Rerank 是对初召回的少量候选文档按“问题—文档”的相关性再次精排,用更贵但更准的模型提高 Top-K 证据质量。 + +### 面试口语版 + +向量检索擅长快速从百万级库里粗筛,但 embedding 是分别编码 query 和 document 的,细粒度匹配不够好。工程上我会先用混合召回拿 50 到 200 个候选,再用 cross-encoder 或 LLM reranker 对每个 query-document 对打分,选前 3 到 10 个进入上下文。要加权限过滤、去重和 token 长度控制,并监控重排前后的 Recall@K、MRR/NDCG 和端到端延迟。 + +### 具体做法 + +1. 召回候选:向量、BM25 或两者融合,`topN=50~200`。 +2. 过滤:租户/ACL、时间、文档类型、重复 chunk;**过滤尽量前置**。 +3. 重排:cross-encoder 输入 `query + chunk`,得到相关性分数;可按标题、正文、元数据拼接。 +4. 截断与组装:取 `topK=3~10`,同文档相邻块合并,保留出处。 +5. 降级:reranker 超时则使用初排;对热点 query 缓存结果。 + +### 关键细节与追问 + +- 双塔 embedding 是“各自编码、近似检索”;cross-encoder 是“成对交互、精确但慢”。 +- 不要把 rerank 当召回器:它只会在候选集内排序,召回缺失无法补救。 +- 追问:何时用 LLM rerank?如何避免位置偏置?如何做线上 A/B? + +## 4. A2A 协议有哪五大设计原则? + +### 一句话答案 + +A2A 的经典五项原则是:拥抱 Agent 能力、基于现有标准、默认安全、支持长任务、模态无关;目的是让不同框架和厂商的 Agent 能以低耦合方式协作。 + +### 原理拆解 + +| 原则 | 含义 | 工程落点 | +| --- | --- | --- | +| 拥抱 Agent 能力 | 不把 Agent 简化成普通 API;要表达任务、技能、产物与状态 | Agent Card、Task、Artifact | +| 基于现有标准 | 复用 HTTP、JSON-RPC、gRPC、OAuth/OIDC 等生态 | 易接入、易观测、可演进 | +| 默认安全 | 跨边界调用必须认证、授权、最小权限 | TLS、token、ACL、审计 | +| 支持长任务 | 任务可能分钟级甚至更久,不能只同步阻塞 | 状态机、流式事件、Webhook/轮询 | +| 模态无关 | 不只传文本,也支持文件、结构化数据与富媒体 | Part/Artifact 的统一数据模型 | + +### 关键细节与追问 + +- 这些是协议设计取向,不等同于每个实现都天然安全;授权范围与工具权限仍由实现方负责。 +- 追问:Agent Card 暴露什么?为什么要有 artifact?任务取消和恢复怎么做? + +## 5. 什么是混合检索?在基于大模型的应用开发中,混合检索主要解决什么问题? + +### 一句话答案 + +混合检索是把稀疏关键词检索(如 BM25)与稠密向量检索组合,再做融合或重排;它同时解决精确字面匹配与语义同义匹配,提高复杂企业知识库的召回稳定性。 + +### 面试口语版 + +BM25 对产品型号、错误码、人名、版本号这类精确词非常强,但不理解同义表达;向量检索理解语义,却可能漏掉罕见实体或被相似语义干扰。混合检索先并行召回,再用 RRF、加权归一化或学习排序融合,最后 rerank。它解决的核心不是“模型不够聪明”,而是单一检索信号存在盲区。 + +### 关键细节与追问 + +- 常见融合:RRF 对分数尺度不敏感;加权融合需要归一化和调参;高质量方案再加 rerank。 +- 例:查“ERR-1049 怎么处理”应给 BM25 较高权重;问“如何降低订单超时”向量信号更关键。 +- 追问:为什么不能直接相加分数?元数据过滤在哪里做?融合指标如何调? + +## 6. 什么是 Google ADK? + +### 一句话答案 + +Google ADK(Agent Development Kit)是开源 Agent 开发框架,用于构建、调试、评估、编排和部署可生产化的 AI Agent;它支持多语言与多 Agent/图工作流,并不等同于某一个 Gemini 模型。 + +### 面试口语版 + +ADK 把 Agent 抽象为模型、指令、工具、会话和运行器,并提供顺序、并行、循环、委派等编排能力。简单场景可以用一个 LLM Agent 加函数工具,复杂场景可以把确定性业务流程做成图,把开放推理留给模型;再接入评测、可观测性和部署能力。选 ADK 的重点不是“Google 出品”,而是它是否匹配团队语言栈、模型提供商、部署环境和治理要求。 + +### 关键细节与追问 + +- 当前官方支持 Python、TypeScript、Go、Java、Kotlin;不同版本的 API 与能力需以官方文档为准。 +- Agent 的工具调用必须经业务层做参数校验、权限检查、幂等与审计。 +- 追问:Agent 与 workflow 的边界是什么?如何做 session/memory?怎么接 A2A 与 MCP? + +## 7. RAG 的完整流程是怎么样的? + +### 一句话答案 + +完整 RAG 要分离线建库与在线问答:采集解析、清洗分块、嵌入建索引、查询理解、召回融合、重排压缩、受控生成、引用与评估闭环。 + +### 原理拆解 + +- **离线**:采集文档 → OCR/版面解析 → 去重、清洗、切块 → 补标题/权限/时间等元数据 → embedding → 建立向量、倒排与元数据索引 → 版本发布。 +- **在线**:鉴权 → 查询识别/改写/自查询 → ACL 过滤 → 混合召回 → rerank → 去重合并/压缩 → 生成带引用答案 → 安全过滤、日志与反馈。 +- **闭环**:沉淀 bad case,定位是数据、召回、重排、提示词还是模型问题,回归评测后再发布。 + +### 关键细节与追问 + +- 完整不代表每一步都用:小库可先从“高质量分块 + 混合召回 + 引用”起步。 +- 避免把整个文档塞给模型;这会提高成本、稀释证据并降低可解释性。 +- 追问:索引更新如何做到增量?文档删除如何生效?权限变化如何防泄漏? + +## 8. A2A 协议的工作原理是怎样的? + +### 一句话答案 + +A2A 用 Agent Card 让客户端发现远端 Agent 的技能和认证方式,再以标准消息创建、推进和获取 Task;任务通过状态、消息与 Artifact 交换信息,支持同步、流式与异步回调。 + +### 原理拆解 + +```mermaid +sequenceDiagram + participant C as Client Agent + participant S as Remote Agent + C->>S: 获取 Agent Card + S-->>C: skills、capabilities、auth、endpoint + C->>S: 发送 Message / 创建 Task + S-->>C: working / input-required 等状态 + S-->>C: 流式事件或 webhook 推送 + S-->>C: completed + Artifact +``` + +- **Agent Card**:公开身份、技能、端点、能力、认证要求;通常位于 well-known 路径。 +- **Message/Part**:输入输出载体,可含文本、文件、结构化数据。 +- **Task**:长生命周期工作单元,有 working、input-required、completed、failed、canceled 等状态。 +- **Artifact**:任务产物,例如报告、文件或结构化结果;与中间聊天消息不同。 + +### 关键细节与追问 + +- A2A 规范的是 Agent 间协作语义,并不要求互相暴露内部 prompt、记忆或工具实现。 +- 追问:什么时候用 streaming,什么时候 webhook?Task ID 如何幂等?如何传递用户授权? + +## 9. 在 RAG 应用中为了优化检索精度,其中的数据清洗和预处理怎么做? + +### 一句话答案 + +数据清洗的目标是让“可检索 chunk”语义完整、噪声少、带对的元数据与权限;它通常比换一个向量模型更先决定 RAG 上限。 + +### 原理拆解 + +1. **解析保结构**:按 PDF/网页/表格/代码选择解析器,保留标题层级、表格、图片说明和页码,别把多栏 PDF 读乱。 +2. **去噪去重**:移除导航、页眉页脚、广告、乱码、空段;精确去重加 SimHash/MinHash 近重复检测。 +3. **规范化**:统一编码、日期、单位、术语别名;纠正 OCR 常见错字,保留原文可回溯。 +4. **语义分块**:按标题/段落/句子边界切,设置适当 overlap;表格、代码、FAQ 等按结构专门处理。 +5. **补齐元数据**:`doc_id`、chunk 位置、标题、来源、更新时间、语言、标签、ACL、版本与失效时间。 +6. **质量门禁**:抽样人工复核,过滤过短、重复、无主语、权限未知的块;建立可回归的 query-set。 + +### 关键细节与追问 + +- 最危险的问题是 ACL 丢失:检索正确也可能越权泄漏。 +- 对表格应保存行列上下文或转为自然语言描述;不能简单按字符截断。 +- 追问:扫描 PDF 怎么处理?chunk 质量如何量化?增量更新如何防止脏数据? + +## 10. A2A 协议的工作流程是怎样的? + +### 一句话答案 + +A2A 的典型流程是“发现—认证—发起任务—状态推进/补充输入—接收产物—审计收尾”,核心是把一次 Agent 委派显式建模为可观察、可恢复的 Task。 + +### 面试口语版 + +调用方先读取 Agent Card,确认对方能处理什么技能、支持哪些传输方式以及需要什么认证;随后携带身份和上下文发送消息。如果任务很短可同步得到结果;长任务则先返回 Task,服务端通过流式事件、轮询或 push notification 报告进度。任务遇到缺失信息会进入 `input-required`,调用方补充后继续;完成后读取 Artifact,失败或取消也必须有明确状态和可诊断错误。 + +### 关键细节与追问 + +- 调用方应设置超时、重试和幂等键;不要因网络重试重复创建外部订单。 +- 服务端应区分“协议调用成功”和“业务任务完成”,两者不是同一件事。 +- 追问:如何设计 Task 状态机?callback 失败怎么办?如何避免 Agent 间递归委派? + +## 11. 什么是查询扩展?为什么在 RAG 应用中需要查询扩展? + +### 一句话答案 + +查询扩展是在检索前把用户的短句、别称或隐含意图扩成多个更可检索的表达,用来缓解用户语言与文档语言不一致造成的召回缺失。 + +### 原理拆解 + +- **同义词/词典扩展**:如“报销”扩为“费用报销、差旅报销”;可控且适合领域术语。 +- **LLM 改写**:保留语义生成更清晰的检索 query;需限制不能臆造条件。 +- **Multi-query**:从不同角度生成 3~5 个查询,合并召回结果。 +- **HyDE**:先生成假设答案再检索相近文档;对抽象问题有帮助,但会引入模型偏差。 + +### 关键细节与追问 + +- 扩展提高 Recall,往往会拉低 Precision、增加延迟与成本,所以应配合 rerank 与开关实验。 +- 对精确错误码、SKU、姓名等实体,盲目扩展可能损害效果,应保留原 query 的高权重通路。 +- 追问:如何防止扩展幻觉?如何判断值得扩展?如何缓存? + +## 12. A2A 协议 与 MCP 协议的关系是怎样的? + +### 一句话答案 + +MCP 解决“模型/Agent 如何标准化使用外部工具和资源”,A2A 解决“一个 Agent 如何发现并协作另一个独立 Agent”;二者是互补关系,不是替代关系。 + +| 维度 | MCP | A2A | +| --- | --- | --- | +| 连接对象 | Agent/模型 ↔ 工具、资源、提示模板 | Agent ↔ Agent | +| 对方抽象 | 能力提供者 | 可自主协作的任务执行者 | +| 核心对象 | tools、resources、prompts | Agent Card、Task、Message、Artifact | +| 长任务 | 由工具实现约定 | 协议原生关注状态、流和推送 | +| 典型场景 | Agent 调 GitHub、数据库、搜索 | 研究 Agent 委派给报价/法务 Agent | + +### 高分补充 + +一个常见组合是:对外暴露 A2A 的“旅行规划 Agent”,其内部通过 MCP 调航班、酒店、地图工具。A2A 不应被拿来替代本地工具调用;MCP 也不适合单独表达跨组织 Agent 的任务生命周期和产物协作。 + +### 追问方向 + +- MCP Server 是否天然安全?如何做工具授权?A2A 的 Agent Card 是否应公开全部能力? + +## 13. 什么是自查询?为什么在 RAG 中需要自查询? + +### 一句话答案 + +自查询(Self-Query)是用 LLM 从自然语言问题中抽取“语义检索词 + 结构化元数据过滤条件”,让检索既懂意思又懂约束。 + +### 面试口语版 + +比如“找 2025 年后发布、Java 相关、只看内部 P1 文档的限流方案”,普通向量检索容易把年份、语言和权限都当普通文本。自查询会把它解析成语义 query“限流方案”,并生成 `publish_time >= 2025`、`language=Java`、`level=P1` 等 filter,然后在向量库执行带过滤的检索。它很适合元数据完善的知识库。 + +### 关键细节与追问 + +- LLM 输出必须受 JSON Schema/DSL 约束,并校验字段、操作符和值;不能直接拼 SQL。 +- ACL 不是由 LLM 决定的用户可选 filter,必须由服务端强制注入。 +- 追问:元数据缺失怎么办?自查询失败如何降级?过滤前置还是后置? + +## 14. 什么提示压缩?为什么在 RAG 中需要提示压缩? + +### 一句话答案 + +提示压缩是把过长、冗余或弱相关的检索上下文压缩为与当前问题最相关的证据,以适配上下文窗口、降低成本,并减轻“中间信息被忽略”。 + +### 原理拆解 + +- **抽取式压缩**:按句子/段落相关性保留原文,事实保真且容易引用。 +- **生成式压缩**:LLM 总结候选文档,token 更少但有改写或遗漏风险。 +- **结构化压缩**:从文档抽取字段、时间线、表格行;适合规则与产品参数。 +- **重排后压缩**:先选对文档再压缩,通常优于先压缩全部候选。 + +### 关键细节与追问 + +- 压缩不是删得越多越好:要保留否定条件、时间、数字、例外和来源。 +- 最好把“压缩后的答案证据”与原 chunk ID 映射,支持引用和回溯。 +- 追问:如何衡量压缩损失?什么时候直接增加上下文窗口? + +## 15. 如何进行 RAG 调优后的效果评估?请给出真实应用场景中采用的效果评估标准与方法 + +### 一句话答案 + +RAG 评估要拆成检索、生成、系统和业务四层,用离线带标注集做回归,用线上 A/B 与用户行为验证;只看“模型回答像不像”是不够的。 + +### 原理拆解 + +| 层级 | 指标/方法 | 企业知识库客服示例 | +| --- | --- | --- | +| 检索 | Recall@K、MRR、NDCG、命中文档率 | 标准答案所在 chunk 是否进 Top-5 | +| 生成 | 正确性、忠实性/引用一致性、完整性、拒答正确率 | 回答是否只依据制度原文,是否给对引用 | +| 系统 | p50/p95 延迟、token、错误率、超时率 | p95 小于 3 秒,成本在预算内 | +| 业务 | 自助解决率、转人工率、CSAT、风险投诉率 | 报销问答转人工下降且越权为零 | + +### 实战方法 + +1. 建立覆盖高频、长尾、无答案、冲突版本、权限隔离的金标 query 集;每条标注相关文档和期望答案要点。 +2. 每次改动做离线回归,按问题类型切片,而不只看总体平均分。 +3. 用人工评审或 LLM-as-judge 辅助,但对高风险样本做人工复核;judge 需要校准一致性。 +4. 线上灰度/A-B:比较任务成功率、人工转接和负反馈,同时监控 P95 与成本。 +5. 记录 query、检索列表、最终上下文、答案与引用,bad case 可完整复盘。 + +### 关键细节与追问 + +- 生成“正确”而引用错误仍是不合格;无答案问题的正确拒答同样重要。 +- 追问:没有金标数据怎么办?LLM judge 有什么偏差?如何避免优化指标却伤害用户体验? + +## 16. 什么是 RAG 中的分块?为什么需要分块? + +### 一句话答案 + +分块(chunking)是把长文档切成可独立嵌入、检索和放进上下文的小语义单元;它让检索粒度、向量语义和 token 预算可控。 + +### 原理拆解 + +整篇文档一个向量会混合多个主题,容易“整体相关、局部无用”;逐句切又缺上下文。合理 chunk 应围绕一个相对完整的论点或步骤,带标题与来源,检索后可以单独回答问题,也能与相邻块合并。 + +### 关键细节与追问 + +- chunk size 没有万能值:中文技术文档常从数百 token 级别起试,结合文档类型和模型窗口评估。 +- overlap 可防止边界信息断裂,但过大导致索引膨胀和重复上下文。 +- 追问:为什么 chunk 太小会降低效果?标题要不要写进 embedding?怎么处理表格? + +## 17. 在 RAG 中,常见的分块策略有哪些?分别有什么区别? + +| 策略 | 做法 | 优点 | 风险/适用场景 | +| --- | --- | --- | --- | +| 固定长度 | 按字符/token 切,带 overlap | 简单、稳定、吞吐高 | 容易截断语义;适合无结构纯文本基线 | +| 递归分隔符 | 优先按标题/段落/句子切,不够再细分 | 通用且保持自然边界 | 层级/分隔符需按语言调 | +| 语义分块 | 根据相邻句 embedding 相似度或主题转折切 | 主题完整性较好 | 计算高、边界不稳定 | +| 文档结构分块 | 按 Markdown/HTML/PDF 标题、章节、表格、代码块 | 可解释、适合知识文档 | 依赖高质量解析 | +| 父子分块 | 小块检索,大块/父文档供生成 | 兼顾精确召回与上下文 | 需维护父子映射 | +| 滑动窗口 | 固定窗口连续滑动 | 不易漏边界信息 | 大量重叠、成本高 | + +### 面试高分补充 + +我的默认策略是“结构优先 + 长度兜底 + 父子映射”:用标题和段落保语义;过长再按句子切;检索小块、回填其父段落或邻居块。然后按文档类型分别评估,代码、FAQ、表格不使用同一套规则。 + +## 18. 在 RAG 中的 Embedding 嵌入是什么? + +### 一句话答案 + +Embedding 是把文本、图片等内容编码成高维稠密向量,使语义相近的内容在向量空间距离更近;RAG 用它做近似最近邻检索。 + +### 原理拆解 + +离线时把每个 chunk 编码为向量并写入向量索引;在线时把 query 用**同一模型、同一预处理规范**编码,按 cosine similarity、dot product 或 L2 距离找近邻。Embedding 负责“候选召回”,不等同于最终事实判断,所以常需关键词检索和 rerank 配合。 + +### 关键细节与追问 + +- 文档和查询必须使用兼容的 embedding 空间;换模型通常要全量重建索引。 +- 归一化、距离度量、向量维度和 ANN 索引参数会影响效果与性能。 +- 追问:向量相似为何不代表答案正确?余弦与内积如何选择?多语言怎么处理? + +## 19. 在 RAG 中,你知道有哪些 Embedding Model 嵌入模型? + +### 一句话答案 + +常见 embedding 模型包括商用 API 模型、开源通用检索模型、中文/多语模型和多模态模型;选型要看任务与评测,而不是只看榜单。 + +### 常见类别 + +- **商用 API**:OpenAI `text-embedding-*`、Cohere Embed、Google Gemini Embedding 等,接入快、效果稳定,但有成本、网络与数据合规考量。 +- **开源通用/检索模型**:BGE 系列、E5 系列、GTE、Jina Embeddings、Nomic Embed 等,便于本地部署和领域微调。 +- **中文与多语检索**:BGE-M3、multilingual-e5 等,适合中英混合、跨语言检索;需实测中文术语表现。 +- **多模态模型**:如面向图文文档的视觉/多模态 embedding,用于图片、扫描件和图表检索;常与文本 OCR 索引并用。 + +### 关键细节与追问 + +- 模型名称、维度、最大输入与许可协议变化较快,落地时以当前模型卡、价格和许可证为准。 +- 追问:BGE 的 query instruction 有何作用?是否要量化?何时微调 embedding? + +## 20. 在 RAG 中,你如何选择 Embedding Model 嵌入模型,需要考虑哪些因素? + +### 一句话答案 + +选择 embedding 模型应以业务 query 集上的检索指标和部署约束为准,综合语言与领域、效果、延迟成本、数据合规、向量维度和可运维性;先建立基线,再用评测决定。 + +### 选型清单 + +| 维度 | 要问的问题 | +| --- | --- | +| 语料匹配 | 中文、英文还是多语?是否有代码、表格、短 query、领域术语? | +| 离线效果 | 在金标集上的 Recall@K、MRR/NDCG 是否足够?长尾和实体 query 是否稳定? | +| 在线性能 | 查询 QPS、p95、批量吞吐、最大 token、模型冷启动如何? | +| 成本与规模 | embedding 单价/推理卡成本、向量维度、索引内存和重建时间能否接受? | +| 合规安全 | 数据能否出域?是否要求私有化?许可证是否允许商用? | +| 生态运维 | 是否支持 SDK、批处理、版本固定、监控、灰度和回滚? | + +### 实战方法 + +先选 2~4 个候选模型,以相同分块、同一向量库和同一 query 集做离线对比;再把最优的 1~2 个放入小流量 A/B,观察检索命中、最终任务成功、p95 与成本。若换 embedding 模型,使用双索引灰度或重建后原子切换,避免新旧向量混在同一空间。 + +### 追问方向 + +- 为什么维度更高不一定更好?为什么不能用生成模型 hidden state 随便当 embedding?领域微调需要哪些正负样本? + +## 复习清单 + +- [ ] 能在 90 秒内讲清 RAG 的离线、在线与评估闭环。 +- [ ] 能解释 BM25、向量召回、混合检索、rerank 的边界。 +- [ ] 能用一个“企业制度问答”案例说明清洗、权限过滤、引用和拒答。 +- [ ] 能区分 MCP 的“调用工具”与 A2A 的“协作 Agent”。 +- [ ] 能讲清 Agent 系统必须具备的权限、审计、幂等、超时和降级设计。 + +## 参考资料 + +- [OpenClaw 官方文档](https://docs.openclaw.ai/) +- [A2A Protocol 官方规范](https://a2a-protocol.org/latest/specification) +- [Google ADK 官方文档](https://adk.dev/) diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/01-rag-multihop-qa.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/01-rag-multihop-qa.md" new file mode 100644 index 000000000..562b69594 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/01-rag-multihop-qa.md" @@ -0,0 +1,129 @@ +# RAG 系统中如何处理多跳问答(Multi-hop QA)? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #多跳问答 +难度:困难 +原题:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135229773373?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +多跳问答要找齐相互依赖的证据:把复杂问题拆成子问题,按依赖顺序检索并验证每一跳,再基于完整证据链作答和引用;证据不足时继续检索或拒答。 + +## 面试口语版(约 60 秒) + +普通 RAG 用原问题检索一次,适合答案直接出现在某段文档中的场景。多跳问题则要把分散的事实连起来。例如问“项目 A 的负责人属于哪个部门”,第一跳先找负责人是谁,第二跳再用这个人名查所属部门。实现时,我会先识别问题中的依赖关系,再逐跳检索并保留每条证据的文档 ID、位置和版本;每一跳校验实体是否一致,避免把同名的人或过期记录串起来。最后只基于已验证的证据作答并附引用。评估时除答案正确率,还要看整条证据链是否都被召回,以及额外检索带来的延迟和成本。 + +## 原理拆解 + +**为什么一次检索容易失效?** 第二跳的检索词可能还不存在于原问题中,要先读到第一跳的答案才能构造下一次查询。[IRCoT 论文](https://aclanthology.org/2023.acl-long.557/)将检索与中间推理步骤交替进行,展示了“已获得的信息决定下一步检索内容”的思路。这是一种实现路径,并非每道多跳题都必须使用链式思维提示。 + +以下是**虚构的内部知识库**示例: + +| 步骤 | 子问题或结论 | 所需证据 | +| --- | --- | --- | +| 原问题 | 项目 A 的负责人属于哪个部门? | 需要两条事实 | +| 第 1 跳 | 项目 A 的负责人是谁?→ 张敏 | 项目负责人记录 | +| 第 2 跳 | 张敏属于哪个部门?→ 搜索平台组 | 人员部门记录,且确认为同一人 | +| 最终回答 | 项目 A 的负责人张敏属于搜索平台组 | 同时引用两条记录 | + +子问题可以预先规划,也可以边检索边生成。若子问题互不依赖,可并行检索;上例的第二跳依赖第一跳的人名,必须顺序执行。知识图谱可按实体和关系遍历;纯文本知识库则可用迭代检索。两者都要保留原始出处,不能把模型生成的中间结论当成外部证据。 + +![两份文档通过同一员工实体形成完整证据链](/content-assets/multihop-evidence-chain.svg) + +*示意图使用虚构数据;DOC-01 与 DOC-02 表示两份必须同时引用的来源。* + +## Mermaid 图解 + +```mermaid +flowchart TD + Q[复杂问题] --> P[识别子问题和依赖] + P --> R1[检索第 1 跳] + R1 --> V1{证据与实体明确?} + V1 -->|否| F[补检索或拒答] + V1 -->|是| R2[用中间实体检索下一跳] + R2 --> V2{证据链完整且无冲突?} + V2 -->|否| F + V2 -->|是| A[基于证据作答并逐条引用] +``` + +图中的证据校验需要结合来源、时效、权限、实体对齐与内容一致性;模型本身不能保证事实真实。 + +## 伪代码:带证据链的迭代检索 + +```text +function answer_multihop(question, user_scope, max_hops, budget): + plan = decompose_into_dependent_subquestions(question) + evidence_chain = [] + known_facts = {} + + for subquestion in topological_order(plan): + if len(evidence_chain) >= max_hops or budget.exhausted(): + return abstain("预算内未形成完整证据链") + + query = fill_dependencies(subquestion, known_facts) + candidates = retrieve(query, filter=user_scope) + ranked = rerank(query, candidates) + fact, source = extract_fact_with_source(ranked) + + if source is None or not entity_matches(fact, known_facts): + return abstain("某一跳缺少可验证证据") + if conflicts_with_existing(fact, evidence_chain): + return abstain("证据冲突,需要补检索或人工核验") + + evidence_chain.append(source.document_id_and_span) + known_facts.update(fact) + + if not covers_all_required_hops(plan, evidence_chain): + return abstain("证据链不完整") + return generate_grounded_answer(question, known_facts, evidence_chain) +``` + +这是用于解释控制流程的伪代码。实际系统还需处理检索超时、重试、跨文档版本一致性,以及一个实体对应多条候选记录的情况。 + +## 关键细节与工程取舍 + +- **证据完整性**:命中其中一段不代表问题已回答;应检查每个必要跳数的 supporting facts。[HotpotQA 论文](https://aclanthology.org/D18-1259/)介绍了句级 supporting facts,可用于评估。 +- **实体消歧**:同名人、别名、历史名称可能让第二跳接错实体。优先使用稳定实体 ID、文档元数据或明确的上下文约束。 +- **权限与时效**:每跳检索都带租户或用户权限过滤;记录文档版本和生效时间,避免引用无权访问或过期证据。 +- **错误传播**:前一跳答错会改变后续查询。对低置信或冲突事实保留多个候选,必要时补检索;超过预算则拒答。 +- **成本与延迟**:逐跳调用检索器和模型会增加时延。可以先做单跳基线,只对识别出的复杂问题启用多跳;限制最大跳数、候选数和 token 预算。[EfficientRAG 论文](https://aclanthology.org/2024.emnlp-main.199/)研究了减少逐轮大模型调用的迭代检索方案。 + +## 如何评估 + +1. 为每个问题标注最终答案、每一跳的子问题、所需证据和文档版本。 +2. **检索**:统计每跳证据召回率,以及“所有必要证据都被召回”的完整链召回率;单个 Top-K 命中会掩盖缺失的跳数。 +3. **生成**:检查答案正确性、引用是否真正支持结论、证据不足时的拒答是否合理。 +4. **系统**:记录平均与尾部延迟、检索和模型调用次数、token 消耗,并与单跳 RAG 基线比较。 + +## 面试官追问 + +1. 什么问题需要多跳,什么问题一次检索就够? +2. 子问题是预先拆好,还是根据上一跳结果动态生成? +3. 第一跳召回两个同名实体,第二跳如何避免串错? +4. 只召回一半证据时,为什么不能让模型补全另一半? +5. 多跳检索比单跳准确,但延迟超标,你会从哪里优化? + +## 常见错误说法 + +- “多检索几次就等于多跳。”——关键是后续查询依赖前面的证据,最终还要检查完整证据链。 +- “模型写出了推理过程,证据就齐了。”——推理文本不是外部证据;每个事实仍需对应来源。 +- “有一条引用就够了。”——结论跨越两条事实时,两条都需要可追溯的出处。 + +## 参考论文、数据集与社区项目 + +以下链接于 2026-09-27 核对;代码 API 和项目维护状态以后以仓库文档为准。 + +| 资料 | 用来学什么 | +| --- | --- | +| [IRCoT 论文](https://aclanthology.org/2023.acl-long.557/) / [官方代码](https://github.com/StonyBrookNLP/ircot) | 检索与中间推理交替;看每跳如何构造查询 | +| [EfficientRAG 论文](https://aclanthology.org/2024.emnlp-main.199/) / [官方代码](https://github.com/NIL-zhuang/EfficientRAG-official) | 迭代检索中的成本与效率设计 | +| [HotpotQA 论文](https://aclanthology.org/D18-1259/) / [数据集主页](https://hotpotqa.github.io/) | 多跳问题与 supporting facts 的标注和评测 | +| [LlamaIndex SubQuestionQueryEngine 源码](https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/query_engine/sub_question_query_engine.py) | 观察子问题生成、分发和答案合成的框架抽象;具体依赖顺序仍需按场景设计 | + +## 学习清单 + +- [ ] 不看笔记,用 60 秒讲清“先找负责人,再找部门”的两跳流程。 +- [ ] 手写一个两跳样例,给两条证据都标注来源与版本。 +- [ ] 解释为什么完整链召回率比单段命中更能暴露多跳失败。 +- [ ] 比较预规划、动态迭代和图谱遍历各适合什么数据。 +- [ ] 用一个证据缺失或同名实体的反例说明何时拒答。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/02-self-rag.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/02-self-rag.md" new file mode 100644 index 000000000..a3d9d0d9e --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/02-self-rag.md" @@ -0,0 +1,21 @@ +# 什么是Self-RAG?如何让模型自主判断是否需要检索? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135237714105?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +Self-RAG让模型在生成时判断是否检索,并检查证据的相关性和回答的支撑程度。 + +## 面试回答要点 + +- 检索决策可以由专门的控制信号触发。 +- 对召回片段评估相关性,对生成内容评估是否有证据支持。 +- 按需检索有助于降低无效调用与噪声,但决策质量需要单独评测。 + +## 自测 + +- 不看笔记,用 60 秒回答:什么是Self-RAG?如何让模型自主判断是否需要检索? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/03-multimodal-rag.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/03-multimodal-rag.md" new file mode 100644 index 000000000..d33b692a6 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/03-multimodal-rag.md" @@ -0,0 +1,21 @@ +# RAG系统如何支持多模态检索?图文检索如何实现? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135265802406?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +多模态RAG需要把文本、图片等内容编码为可比较的表示,再按查询模态召回证据并交给生成模型。 + +## 面试回答要点 + +- 离线处理图片与文本,建立向量索引并保留模态和来源元数据。 +- 图文双向检索可采用共享语义空间的编码器;OCR与图像描述可补充可检索文本。 +- 评估跨模态召回质量,并在生成阶段保留原图或图像片段作为证据。 + +## 自测 + +- 不看笔记,用 60 秒回答:RAG系统如何支持多模态检索?图文检索如何实现? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/04-rag-vector-incremental-updates.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/04-rag-vector-incremental-updates.md" new file mode 100644 index 000000000..0ecc371a9 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/04-rag-vector-incremental-updates.md" @@ -0,0 +1,21 @@ +# 增量更新场景下,RAG的向量库如何维护?如何处理文档删除和修改? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135273697899?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +向量库增量维护的关键是让文档版本、切片和向量ID保持可追踪关系,更新时只重建受影响的数据。 + +## 面试回答要点 + +- 为每个切片记录文档ID、版本、位置与内容哈希。 +- 新增文档执行解析、分块、向量化和索引写入;删除时移除对应切片。 +- 修改可按差异重建切片,并用版本切换或原子写入避免新旧数据混用。 + +## 自测 + +- 不看笔记,用 60 秒回答:增量更新场景下,RAG的向量库如何维护?如何处理文档删除和修改? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/05-knowledge-graph-llm-rag.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/05-knowledge-graph-llm-rag.md" new file mode 100644 index 000000000..5aca03940 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/05-knowledge-graph-llm-rag.md" @@ -0,0 +1,21 @@ +# 知识图谱怎么和大模型结合?检索增强生成(RAG)怎么用图谱? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135231651321?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +知识图谱可为大模型提供结构化关系证据;在RAG中先识别实体、查询相关子图,再把关系路径与文本证据送入模型。 + +## 面试回答要点 + +- 问题中的实体先链接到图谱节点,随后沿关系检索。 +- 多跳关系适合回答涉及“谁与谁如何关联”的问题。 +- 保留子图来源和路径,控制实体歧义、图谱陈旧与关系错误。 + +## 自测 + +- 不看笔记,用 60 秒回答:知识图谱怎么和大模型结合?检索增强生成(RAG)怎么用图谱? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/06-knowledge-graph-basics.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/06-knowledge-graph-basics.md" new file mode 100644 index 000000000..0282238fa --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/06-knowledge-graph-basics.md" @@ -0,0 +1,21 @@ +# 什么是知识图谱?实体、关系、属性分别是什么? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:简单 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135261871674?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +知识图谱用实体节点和关系边表达事实,属性则描述实体或关系的具体特征。 + +## 面试回答要点 + +- 实体是可识别的对象或概念,例如公司、人物和产品。 +- 关系连接实体,通常有方向和语义类型。 +- 属性记录名称、时间、数值等信息;事实常可表示为三元组。 + +## 自测 + +- 不看笔记,用 60 秒回答:什么是知识图谱?实体、关系、属性分别是什么? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/07-dialogue-state-tracking.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/07-dialogue-state-tracking.md" new file mode 100644 index 000000000..2174729ba --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/07-dialogue-state-tracking.md" @@ -0,0 +1,21 @@ +# DST怎么处理多轮对话?历史轮次的信息怎么利用? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135256138312?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +DST通过维护随轮次更新的对话状态,把用户已经给出的槽位值带入后续对话,并处理补充、修改和指代。 + +## 面试回答要点 + +- 每轮从当前话语提取槽位,再与上一轮状态合并。 +- 历史可作为完整文本输入,也可压缩成结构化状态以节省上下文。 +- 重点处理改口、否定、省略和跨轮指代,避免旧值污染新状态。 + +## 自测 + +- 不看笔记,用 60 秒回答:DST怎么处理多轮对话?历史轮次的信息怎么利用? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/08-knowledge-graph-completion.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/08-knowledge-graph-completion.md" new file mode 100644 index 000000000..c6d578a86 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/08-knowledge-graph-completion.md" @@ -0,0 +1,21 @@ +# 知识图谱补全(Knowledge Graph Completion)怎么做?怎么预测缺失的关系? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135207477801?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +知识图谱补全依据已有三元组预测缺失的实体或关系,常用嵌入模型为候选三元组打分。 + +## 面试回答要点 + +- 把实体与关系映射到向量空间,学习图中已有事实的模式。 +- TransE类模型用关系平移建模,语义匹配模型用评分函数判别三元组。 +- 用链接预测指标评测,并注意负样本构造与一对多关系。 + +## 自测 + +- 不看笔记,用 60 秒回答:知识图谱补全(Knowledge Graph Completion)怎么做?怎么预测缺失的关系? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/09-crf-vs-bert-ner.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/09-crf-vs-bert-ner.md" new file mode 100644 index 000000000..2f1595606 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/09-crf-vs-bert-ner.md" @@ -0,0 +1,21 @@ +# 基于CRF的NER和基于BERT的NER有什么区别? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135212097827?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +CRF侧重显式建模标签转移并依赖输入特征;BERT侧重从预训练模型获取上下文语义表示,两者可以结合。 + +## 面试回答要点 + +- 传统线性链CRF通常需要词形、词性或上下文模板等特征。 +- BERT为每个token提供双向上下文表示,再由分类层预测实体标签。 +- BERT+CRF可同时利用语义特征与BIO标签约束,但训练和推理成本更高。 + +## 自测 + +- 不看笔记,用 60 秒回答:基于CRF的NER和基于BERT的NER有什么区别? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/10-distant-supervision.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/10-distant-supervision.md" new file mode 100644 index 000000000..2c27c34f9 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/10-distant-supervision.md" @@ -0,0 +1,21 @@ +# 远程监督(Distant Supervision)是什么?怎么自动生成训练数据? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135214626921?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +远程监督用知识库中的实体关系为语料自动打标签,能快速扩大训练集,但标注噪声是主要代价。 + +## 面试回答要点 + +- 从知识库取实体对与关系,匹配包含该实体对的句子。 +- 同句出现不等于句子表达该关系,因此需处理假阳性。 +- 可用多实例学习、噪声过滤和人工抽检改善数据质量。 + +## 自测 + +- 不看笔记,用 60 秒回答:远程监督(Distant Supervision)是什么?怎么自动生成训练数据? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/11-rag-hallucination-citation.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/11-rag-hallucination-citation.md" new file mode 100644 index 000000000..72c06c1ef --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/11-rag-hallucination-citation.md" @@ -0,0 +1,21 @@ +# RAG中的幻觉问题如何缓解?引用溯源(Citation)如何实现? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135216830312?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +缓解RAG幻觉要同时提高证据召回质量、约束生成范围,并把答案中的关键断言映射到可追溯的来源片段。 + +## 面试回答要点 + +- 混合召回与重排提高证据相关性,缺少证据时应允许拒答。 +- 生成时保留文档ID、切片位置和版本,给断言附对应引用。 +- 校验引用片段是否真的支持断言,不能只检查链接是否存在。 + +## 自测 + +- 不看笔记,用 60 秒回答:RAG中的幻觉问题如何缓解?引用溯源(Citation)如何实现? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/12-knowledge-fusion.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/12-knowledge-fusion.md" new file mode 100644 index 000000000..586f55338 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/12-knowledge-fusion.md" @@ -0,0 +1,21 @@ +# 知识融合(Knowledge Fusion)是什么?多个知识源怎么整合? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135219288517?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +知识融合把多个来源中的同一事实和实体统一起来,并处理模式差异、重复和冲突。 + +## 面试回答要点 + +- 先做实体对齐与schema/关系映射。 +- 合并属性和关系时保留来源、时间与置信度。 +- 冲突事实可按权威性、时效性与一致性决策,不能无条件覆盖。 + +## 自测 + +- 不看笔记,用 60 秒回答:知识融合(Knowledge Fusion)是什么?多个知识源怎么整合? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/13-graphrag.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/13-graphrag.md" new file mode 100644 index 000000000..be2ba5f11 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/13-graphrag.md" @@ -0,0 +1,21 @@ +# 什么是GraphRAG?知识图谱如何增强RAG系统? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135223474523?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +GraphRAG把图结构引入检索链路,使回答能利用实体关系、多跳路径和局部子图,而不只依赖相似文本块。 + +## 面试回答要点 + +- 离线从文档抽取实体和关系,构建图并关联原文证据。 +- 在线从问题定位实体,再扩展相关子图或路径。 +- 图检索有利于关系推理与可解释性,但图谱构建成本和抽取误差必须评估。 + +## 自测 + +- 不看笔记,用 60 秒回答:什么是GraphRAG?知识图谱如何增强RAG系统? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/14-transe-distmult-complex.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/14-transe-distmult-complex.md" new file mode 100644 index 000000000..ce70cca1a --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/14-transe-distmult-complex.md" @@ -0,0 +1,21 @@ +# TransE、DistMult、ComplEx这些知识图谱嵌入方法有什么区别? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135225731983?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +TransE、DistMult和ComplEx的主要差别是三元组评分函数,因此擅长表达的关系模式不同。 + +## 面试回答要点 + +- TransE把关系视为头实体到尾实体的向量平移。 +- DistMult采用对称的双线性评分,难以表示有方向的非对称关系。 +- ComplEx用复数嵌入与共轭运算表达非对称关系;比较时还要看训练与推理成本。 + +## 自测 + +- 不看笔记,用 60 秒回答:TransE、DistMult、ComplEx这些知识图谱嵌入方法有什么区别? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/15-rag-chunking-size.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/15-rag-chunking-size.md" new file mode 100644 index 000000000..6187bcea5 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/15-rag-chunking-size.md" @@ -0,0 +1,21 @@ +# RAG系统中文档切分的策略有哪些?如何选择合适的chunk size? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135227763328?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +文档分块需要在语义完整性、召回粒度和上下文成本之间取舍,chunk size应通过业务评测确定。 + +## 面试回答要点 + +- 固定长度切分简单,按标题、段落或句子切分更能保持结构。 +- 可采用递归或混合切分,并给相邻块少量重叠。 +- 用不同长度和重叠比例做检索与端到端评测,保留原文定位信息。 + +## 自测 + +- 不看笔记,用 60 秒回答:RAG系统中文档切分的策略有哪些?如何选择合适的chunk size? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/16-context-compression.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/16-context-compression.md" new file mode 100644 index 000000000..20097d08b --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/16-context-compression.md" @@ -0,0 +1,21 @@ +# 上下文压缩(Context Compression)技术有哪些?如何减少token消耗? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135233530668?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +上下文压缩是在不丢失回答所需证据的前提下减少输入token,可通过过滤、摘要和内容抽取实现。 + +## 面试回答要点 + +- 先重排与去重,剔除无关切片。 +- 对长证据抽取与问题相关的句子或生成摘要,同时保留出处。 +- 用答案质量、证据覆盖率、延迟与token费用共同评估压缩效果。 + +## 自测 + +- 不看笔记,用 60 秒回答:上下文压缩(Context Compression)技术有哪些?如何减少token消耗? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/17-knowledge-engineering-vs-kg.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/17-knowledge-engineering-vs-kg.md" new file mode 100644 index 000000000..34d8784e7 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/17-knowledge-engineering-vs-kg.md" @@ -0,0 +1,21 @@ +# 知识工程和知识图谱有什么区别?知识工程的完整流程是什么? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135235699960?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +知识工程是获取、表示、融合、存储、推理和应用知识的完整过程;知识图谱是其中一种结构化知识表示与产物。 + +## 面试回答要点 + +- 从需求和数据源出发,抽取实体、关系、事件等知识。 +- 设计schema并做多源融合、质量校验和版本管理。 +- 选择合适存储与推理方式,在搜索、问答等应用中持续反馈更新。 + +## 自测 + +- 不看笔记,用 60 秒回答:知识工程和知识图谱有什么区别?知识工程的完整流程是什么? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/18-rag-evaluation.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/18-rag-evaluation.md" new file mode 100644 index 000000000..c4109c8db --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/18-rag-evaluation.md" @@ -0,0 +1,21 @@ +# RAG系统的评测指标有哪些?如何评估检索质量和生成质量? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135239560814?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +RAG评测要拆开看检索是否找到证据、生成是否忠于证据,以及端到端回答是否真正解决问题。 + +## 面试回答要点 + +- 检索可看Recall@K、MRR、NDCG和相关片段覆盖率。 +- 生成可看忠实度、答案相关性、正确性和引用支撑率。 +- 用有标注的数据集结合人工复核,并监控延迟、成本和拒答表现。 + +## 自测 + +- 不看笔记,用 60 秒回答:RAG系统的评测指标有哪些?如何评估检索质量和生成质量? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/19-embedding-model-selection.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/19-embedding-model-selection.md" new file mode 100644 index 000000000..20c2283b1 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/19-embedding-model-selection.md" @@ -0,0 +1,21 @@ +# 如何选择合适的Embedding模型?开源模型vs闭源API的权衡? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135241835492?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +Embedding模型要按领域、多语言能力、检索质量、部署成本、隐私约束和延迟选择,不能只看通用榜单。 + +## 面试回答要点 + +- 用真实查询和文档评测Recall@K、MRR等指标。 +- 闭源API集成快但有调用成本、网络依赖和数据传输约束。 +- 开源模型便于本地部署与定制,但需承担推理、更新和运维成本。 + +## 自测 + +- 不看笔记,用 60 秒回答:如何选择合适的Embedding模型?开源模型vs闭源API的权衡? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/20-entity-disambiguation.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/20-entity-disambiguation.md" new file mode 100644 index 000000000..d9a0953d1 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/20-entity-disambiguation.md" @@ -0,0 +1,21 @@ +# 实体消歧(Entity Disambiguation)怎么做?苹果是水果还是公司? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135243981054?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +实体消歧利用上下文和知识库候选信息,判断一个歧义提及在当前句子中指向哪个实体。 + +## 面试回答要点 + +- 先生成候选实体,例如“苹果”可能对应公司或水果。 +- 结合邻近词、实体类型、知识图谱关系和候选描述打分。 +- 低置信度场景保留“不确定”选项,避免错误链接污染后续推理。 + +## 自测 + +- 不看笔记,用 60 秒回答:实体消歧(Entity Disambiguation)怎么做?苹果是水果还是公司? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/21-rag-reranking.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/21-rag-reranking.md" new file mode 100644 index 000000000..4c84453c4 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/21-rag-reranking.md" @@ -0,0 +1,21 @@ +# RAG中的重排序(Reranking)如何工作?有哪些重排序模型? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135245911021?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +Reranking对初召回候选进行更精细的查询与文档匹配,选出最适合放进生成上下文的证据。 + +## 面试回答要点 + +- 先用向量或关键词检索获得较大候选集。 +- 再用cross-encoder、专用重排模型或LLM逐对评分并取Top-K。 +- 精排改善排序但无法找回未召回的文档,应权衡质量与额外延迟。 + +## 自测 + +- 不看笔记,用 60 秒回答:RAG中的重排序(Reranking)如何工作?有哪些重排序模型? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/22-rag-ground-truth.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/22-rag-ground-truth.md" new file mode 100644 index 000000000..62721e38e --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/22-rag-ground-truth.md" @@ -0,0 +1,21 @@ +# 如何构建RAG系统的Ground Truth数据集?标注方法有哪些? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135247789480?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +RAG的Ground Truth至少要包含问题、相关证据和可接受答案,才能分别评测检索与生成。 + +## 面试回答要点 + +- 样本可从真实查询、专家编写或文档驱动的合成问答获得。 +- 标注相关文档片段、答案、不可回答情形和必要的来源。 +- 分层抽检、双人标注或争议仲裁可提高一致性,并避免训练集泄漏。 + +## 自测 + +- 不看笔记,用 60 秒回答:如何构建RAG系统的Ground Truth数据集?标注方法有哪些? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/23-ner-bio.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/23-ner-bio.md" new file mode 100644 index 000000000..bbb739909 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/23-ner-bio.md" @@ -0,0 +1,21 @@ +# 命名实体识别(NER)怎么做?BIO标注是什么? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:简单 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135249890312?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +NER识别文本中的实体边界与类别;BIO把每个token标成实体开头、实体内部或实体外部。 + +## 面试回答要点 + +- B表示实体起始,I表示同一实体内部,O表示非实体。 +- 在标签上附类型,如B-PER、I-ORG,可同时表达边界与类别。 +- 模型可用CRF、BERT等;评估时通常按完整实体匹配计算精确率与召回率。 + +## 自测 + +- 不看笔记,用 60 秒回答:命名实体识别(NER)怎么做?BIO标注是什么? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/24-event-extraction.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/24-event-extraction.md" new file mode 100644 index 000000000..481f5160c --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/24-event-extraction.md" @@ -0,0 +1,21 @@ +# 事件抽取(Event Extraction)是什么?触发词、论元、角色怎么识别? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135252030095?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +事件抽取把文本中的事件类型、触发词和参与要素组织成结构化记录。 + +## 面试回答要点 + +- 先定位触发事件的词,并判定事件类别。 +- 再抽取参与者、时间、地点等论元并分配角色。 +- 可用流水线或联合模型;注意跨句事件、多个事件和论元重叠。 + +## 自测 + +- 不看笔记,用 60 秒回答:事件抽取(Event Extraction)是什么?触发词、论元、角色怎么识别? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/25-hyde-retrieval.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/25-hyde-retrieval.md" new file mode 100644 index 000000000..3558a977f --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/25-hyde-retrieval.md" @@ -0,0 +1,21 @@ +# 什么是Hypothetical Document Embeddings(HyDE)?如何提升检索效果? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135254145167?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +HyDE先让模型生成一段假设性的答案文档,再用其向量检索真实文档,以缩小问题措辞与文档表达之间的差距。 + +## 面试回答要点 + +- 用户问题先生成候选答案文本,再对该文本做embedding。 +- 向量检索返回的仍是知识库里的真实证据,假设文档本身不能当事实。 +- 适用于查询短而文档表达丰富的场景,需评估生成偏差、延迟和成本。 + +## 自测 + +- 不看笔记,用 60 秒回答:什么是Hypothetical Document Embeddings(HyDE)?如何提升检索效果? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/26-semantic-chunking.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/26-semantic-chunking.md" new file mode 100644 index 000000000..40f00282a --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/26-semantic-chunking.md" @@ -0,0 +1,21 @@ +# 什么是Semantic Chunking?与固定长度切分有什么区别? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135257957401?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +Semantic Chunking依据主题转换或语义边界切分文本,比纯固定长度切分更注重每个片段的完整意思。 + +## 面试回答要点 + +- 可根据句向量相似度、标题层级或段落结构找边界。 +- 固定长度法实现快、尺寸稳定,但可能截断一句话或一个概念。 +- 语义分块仍需限制最大长度,并通过召回质量与token成本验证收益。 + +## 自测 + +- 不看笔记,用 60 秒回答:什么是Semantic Chunking?与固定长度切分有什么区别? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/27-relation-extraction.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/27-relation-extraction.md" new file mode 100644 index 000000000..1406e9006 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/27-relation-extraction.md" @@ -0,0 +1,21 @@ +# 关系抽取(Relation Extraction)是什么?怎么识别实体之间的关系? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135259964156?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +关系抽取从文本中的实体对识别语义关系,输出可用于知识图谱的结构化三元组。 + +## 面试回答要点 + +- 先识别实体及其边界,再对候选实体对做关系分类。 +- 规则、监督学习和远程监督各有覆盖率与标注成本差异。 +- 要处理无关系、多关系和跨句关系,并记录证据文本。 + +## 自测 + +- 不看笔记,用 60 秒回答:关系抽取(Relation Extraction)是什么?怎么识别实体之间的关系? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/28-multilingual-knowledge-base.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/28-multilingual-knowledge-base.md" new file mode 100644 index 000000000..50e4f3b0f --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/28-multilingual-knowledge-base.md" @@ -0,0 +1,21 @@ +# 多语言知识库怎么构建?知识的跨语言对齐怎么做? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:困难 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135263699913?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +多语言知识库应让不同语言中的同一实体和关系映射到统一标识,同时保留各语言名称与来源。 + +## 面试回答要点 + +- 从各语言数据抽取知识并建立统一schema。 +- 结合翻译、多语言嵌入和已有跨语言链接做实体对齐。 +- 关系与属性也需对齐,歧义项用上下文和人工抽检校验。 + +## 自测 + +- 不看笔记,用 60 秒回答:多语言知识库怎么构建?知识的跨语言对齐怎么做? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/29-hybrid-search.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/29-hybrid-search.md" new file mode 100644 index 000000000..8a72bcc31 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/29-hybrid-search.md" @@ -0,0 +1,21 @@ +# 什么是混合检索(Hybrid Search)?稀疏检索和稠密检索如何结合? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135267758023?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +混合检索结合BM25等词项匹配与向量语义检索,使精确关键词和语义改写都能被召回。 + +## 面试回答要点 + +- 稀疏检索擅长型号、专有名词和精确词项。 +- 稠密检索擅长语义相近但用词不同的表达。 +- 两路结果可用RRF或归一化加权融合,再重排并评估不同查询类型。 + +## 自测 + +- 不看笔记,用 60 秒回答:什么是混合检索(Hybrid Search)?稀疏检索和稠密检索如何结合? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/30-knowledge-graph-reasoning.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/30-knowledge-graph-reasoning.md" new file mode 100644 index 000000000..00ca9c5a4 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/30-knowledge-graph-reasoning.md" @@ -0,0 +1,21 @@ +# 图谱推理(Knowledge Graph Reasoning)是什么?怎么做多跳推理? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135269730938?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +图谱推理沿已有实体关系路径或规则推断新事实;多跳推理需要把多个相邻关系组合成证据链。 + +## 面试回答要点 + +- 先识别问题中的起点实体与目标关系。 +- 可用规则、路径搜索、图算法或嵌入模型寻找候选答案。 +- 限制路径长度,保留每一跳证据并检查关系方向与歧义。 + +## 自测 + +- 不看笔记,用 60 秒回答:图谱推理(Knowledge Graph Reasoning)是什么?怎么做多跳推理? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/31-entity-linking.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/31-entity-linking.md" new file mode 100644 index 000000000..9f5786163 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/31-entity-linking.md" @@ -0,0 +1,21 @@ +# 实体链接(Entity Linking)是什么?怎么把文本里的提及映射到知识库? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135271586356?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +实体链接把文本里的实体提及连接到知识库中的具体实体ID,是NER之后的消歧步骤。 + +## 面试回答要点 + +- 先用别名、词典或向量检索生成候选实体。 +- 再结合上下文、实体描述与图谱关系做排序。 +- 设置无匹配阈值,避免把知识库外的新实体强行映射到旧节点。 + +## 自测 + +- 不看笔记,用 60 秒回答:实体链接(Entity Linking)是什么?怎么把文本里的提及映射到知识库? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/32-pipeline-vs-joint-extraction.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/32-pipeline-vs-joint-extraction.md" new file mode 100644 index 000000000..74124d96f --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/32-pipeline-vs-joint-extraction.md" @@ -0,0 +1,21 @@ +# Pipeline方式和联合抽取(Joint Extraction)有什么区别? + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:中等 +来源:[牛面题目详情](https://niumianoffer.com/nm_practice/questions/q_1762135135275600627?activeIndex=0&from=bank_1762132162559495793) + +## 一句话答案 + +Pipeline先识别实体再分类关系,模块清晰却容易误差传递;联合抽取同时预测实体和关系,可让两类信息相互约束。 + +## 面试回答要点 + +- 流水线便于模块替换与定位问题,但实体漏检会使关系阶段无从补救。 +- 联合模型共享表示并协同训练,可改善实体与关系的整体一致性。 +- 比较时看端到端三元组指标、标注成本、训练复杂度和部署维护。 + +## 自测 + +- 不看笔记,用 60 秒回答:Pipeline方式和联合抽取(Joint Extraction)有什么区别? +- 结合自己的项目,补充一个具体场景、指标或取舍。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/README.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/README.md" new file mode 100644 index 000000000..8461286fa --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/README.md" @@ -0,0 +1,80 @@ +# AI 知识工程与 RAG 面试学习体系 + +日期:2026-09-27 +标签:#面试 #AI应用开发 #RAG #知识工程 + +本目录按「知识构建 → 索引与检索 → 证据组织 → 回答与评测」组织面试题。现有 32 篇短答来自[牛面 AI 知识工程与 RAG 题库](https://niumianoffer.com/nm_practice/questions?bank_id=bank_1762132162559495793&activeIndex=0),各题详情见原题来源页;笔记是学习式改写。后续根据你的具体提问逐题补全原理、示意图、伪代码、工程取舍与可核验的参考资料。 + +快速入口:[多跳问答完整示例](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/01-rag-multihop-qa/) · [参考社区项目](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/%E5%8F%82%E8%80%83%E7%A4%BE%E5%8C%BA%E9%A1%B9%E7%9B%AE/) · [题目模板](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/%E9%A2%98%E7%9B%AE%E6%A8%A1%E6%9D%BF/) · [AI 应用开发面试题总览](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E9%9D%A2%E8%AF%95%E9%A2%98/) + +## 学习路径 + +```mermaid +flowchart LR + A[知识工程基础] --> B[知识抽取与对齐] + B --> C[图谱表征与推理] + A --> D[数据准备与索引] + C --> E[检索与证据组织] + D --> E + E --> F[回答与评测] +``` + +初学者可先看 17、06、15、19、29、21、11、18,建立端到端框架;再按下面的主题深入。题号沿用原题库,主题分组不改变原文件名。 + +## 一、知识工程基础 + +- **17.** [知识工程和知识图谱有什么区别?知识工程的完整流程是什么?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/17-knowledge-engineering-vs-kg/) · 中等 +- **06.** [什么是知识图谱?实体、关系、属性分别是什么?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/06-knowledge-graph-basics/) · 简单 +- **12.** [知识融合(Knowledge Fusion)是什么?多个知识源怎么整合?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/12-knowledge-fusion/) · 中等 +- **28.** [多语言知识库怎么构建?知识的跨语言对齐怎么做?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/28-multilingual-knowledge-base/) · 困难 + +## 二、知识抽取与实体对齐 + +- **23.** [命名实体识别(NER)怎么做?BIO标注是什么?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/23-ner-bio/) · 简单 +- **09.** [基于CRF的NER和基于BERT的NER有什么区别?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/09-crf-vs-bert-ner/) · 中等 +- **27.** [关系抽取(Relation Extraction)是什么?怎么识别实体之间的关系?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/27-relation-extraction/) · 中等 +- **24.** [事件抽取(Event Extraction)是什么?触发词、论元、角色怎么识别?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/24-event-extraction/) · 中等 +- **10.** [远程监督(Distant Supervision)是什么?怎么自动生成训练数据?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/10-distant-supervision/) · 中等 +- **32.** [Pipeline方式和联合抽取(Joint Extraction)有什么区别?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/32-pipeline-vs-joint-extraction/) · 中等 +- **31.** [实体链接(Entity Linking)是什么?怎么把文本里的提及映射到知识库?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/31-entity-linking/) · 中等 +- **20.** [实体消歧(Entity Disambiguation)怎么做?苹果是水果还是公司?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/20-entity-disambiguation/) · 中等 + +## 三、图谱表征、补全与推理 + +- **14.** [TransE、DistMult、ComplEx这些知识图谱嵌入方法有什么区别?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/14-transe-distmult-complex/) · 中等 +- **08.** [知识图谱补全(Knowledge Graph Completion)怎么做?怎么预测缺失的关系?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/08-knowledge-graph-completion/) · 中等 +- **30.** [图谱推理(Knowledge Graph Reasoning)是什么?怎么做多跳推理?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/30-knowledge-graph-reasoning/) · 中等 +- **05.** [知识图谱怎么和大模型结合?检索增强生成(RAG)怎么用图谱?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/05-knowledge-graph-llm-rag/) · 中等 +- **13.** [什么是GraphRAG?知识图谱如何增强RAG系统?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/13-graphrag/) · 中等 + +## 四、RAG 数据准备与索引 + +- **15.** [RAG系统中文档切分的策略有哪些?如何选择合适的chunk size?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/15-rag-chunking-size/) · 中等 +- **26.** [什么是Semantic Chunking?与固定长度切分有什么区别?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/26-semantic-chunking/) · 中等 +- **04.** [增量更新场景下,RAG的向量库如何维护?如何处理文档删除和修改?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/04-rag-vector-incremental-updates/) · 中等 +- **19.** [如何选择合适的Embedding模型?开源模型vs闭源API的权衡?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/19-embedding-model-selection/) · 中等 +- **03.** [RAG系统如何支持多模态检索?图文检索如何实现?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/03-multimodal-rag/) · 中等 + +## 五、检索与证据组织 + +- **29.** [什么是混合检索(Hybrid Search)?稀疏检索和稠密检索如何结合?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/29-hybrid-search/) · 中等 +- **25.** [什么是Hypothetical Document Embeddings(HyDE)?如何提升检索效果?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/25-hyde-retrieval/) · 中等 +- **21.** [RAG中的重排序(Reranking)如何工作?有哪些重排序模型?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/21-rag-reranking/) · 中等 +- **16.** [上下文压缩(Context Compression)技术有哪些?如何减少token消耗?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/16-context-compression/) · 中等 +- **01.** [RAG系统中如何处理多跳问答(Multi-hop QA)?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/01-rag-multihop-qa/) · 困难 +- **02.** [什么是Self-RAG?如何让模型自主判断是否需要检索?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/02-self-rag/) · 中等 + +## 六、回答、对话与评测 + +- **11.** [RAG中的幻觉问题如何缓解?引用溯源(Citation)如何实现?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/11-rag-hallucination-citation/) · 中等 +- **07.** [DST怎么处理多轮对话?历史轮次的信息怎么利用?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/07-dialogue-state-tracking/) · 中等 +- **18.** [RAG系统的评测指标有哪些?如何评估检索质量和生成质量?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/18-rag-evaluation/) · 中等 +- **22.** [如何构建RAG系统的Ground Truth数据集?标注方法有哪些?](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/22-rag-ground-truth/) · 中等 + +## 后续提问如何落成笔记 + +1. **定位题目**:你直接问概念、方案、对比或项目场景;若已有对应文件,就在原文件中扩写。若是新题,以简短英文 slug 新建 Markdown 文件,并在本页对应主题补上链接。 +2. **先给可说出口的答案**:以[题目模板](/posts/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/AI%E7%9F%A5%E8%AF%86%E5%B7%A5%E7%A8%8B%E4%B8%8ERAG/%E9%A2%98%E7%9B%AE%E6%A8%A1%E6%9D%BF/)为骨架,先写一句话结论与 30–90 秒口语版,再展开机制、取舍、易错点和递进追问。每篇只保留与题目真正相关的小节。 +3. **用图和伪代码解释关键路径**:有明确流程或关系时画简洁 Mermaid 图;有可操作算法时写清输入、输出、失败分支的伪代码。避免只画装饰图或用无法运行的占位图充数。 +4. **核验参考资料**:优先引用论文、官方文档、标准或项目原仓库;社区项目写清它演示了什么、版本或提交、查阅日期。区分原题来源、原理依据和可学习的实现示例;未经核实的资料不要编造。 +5. **完成自测**:检查术语和版本,核对 Markdown 相对链接与 Mermaid 语法,尝试脱稿回答,并把仍答不出的追问留到学习清单。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/\345\217\202\350\200\203\347\244\276\345\214\272\351\241\271\347\233\256.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/\345\217\202\350\200\203\347\244\276\345\214\272\351\241\271\347\233\256.md" new file mode 100644 index 000000000..898ef3057 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/\345\217\202\350\200\203\347\244\276\345\214\272\351\241\271\347\233\256.md" @@ -0,0 +1,30 @@ +# 参考社区项目:从检索到可信回答 + +日期:2026-09-27 +标签:#RAG #知识工程 #社区项目 #实践 + +以下项目按学习环节分类,链接均指向项目官方仓库或文档。建议用同一批文档和问题做练习,记录检索结果、回答及证据,方便比较每次改动的效果。 + +## RAG 应用框架 + +| 项目与官方资料 | 适合学习 | 动手任务 | +| --- | --- | --- | +| **Haystack**:[仓库](https://github.com/deepset-ai/haystack) · [创建管线教程](https://docs.haystack.deepset.ai/docs/creating-pipelines) | 将检索器、提示词构建器和生成模型接成可观察的 RAG 管线。 | 用 5 篇短文档搭建 `Retriever → PromptBuilder → Generator`,打印命中的文档与最终回答。 | +| **LlamaIndex**:[仓库](https://github.com/run-llama/llama_index) · [RAG 概念](https://developers.llamaindex.ai/python/framework/understanding/rag/) | 理解 `Document`、`Node`,以及加载、索引、检索和回答的关系。 | 将一篇长文切为 `Node` 并建索引;提问后记录回答引用的节点和原文位置。 | +| **LangChain**:[仓库](https://github.com/langchain-ai/langchain) · [语义检索教程](https://docs.langchain.com/oss/python/langchain/knowledge-base) | 串起 PDF 加载、切块、嵌入、向量存储、检索器和最小 RAG。 | 选一份 PDF,完成 `加载 → 切块 → 检索 → 回答`,观察切块大小变化对命中片段的影响。 | + +## 评估工具 + +| 项目与官方资料 | 适合学习 | 动手任务 | +| --- | --- | --- | +| **Ragas**:[仓库](https://github.com/vibrantlabsai/ragas) · [RAG 评估教程](https://docs.ragas.io/en/latest/getstarted/rag_eval/) · [指标目录](https://docs.ragas.io/en/latest/concepts/metrics/available_metrics/) | 分开检查检索上下文和生成回答,例如上下文召回、忠实度与事实正确性。 | 准备 10 条 `问题 / 检索片段 / 回答 / 参考答案` 样本;换一种检索策略后重新评估,逐条查看低分原因。 | + +## 向量与搜索引擎 + +| 项目与官方资料 | 适合学习 | 动手任务 | +| --- | --- | --- | +| **Qdrant**:[仓库](https://github.com/qdrant/qdrant) · [混合检索文档](https://qdrant.tech/documentation/search/text-search/hybrid-search/) | 稠密语义检索与稀疏词项检索的融合。 | 建立含语义描述和精确编号的小数据集,比较两类查询在单路检索与混合检索中的前 5 条结果。 | +| **Milvus**:[仓库](https://github.com/milvus-io/milvus) · [多向量混合检索](https://milvus.io/docs/multi-vector-search.md) | 多向量字段、BM25 稀疏检索、稠密检索及结果重排。 | 对同一批文本分别执行稠密、BM25 和混合检索;记录每种方法是否找到了预先标记的正确片段。 | +| **OpenSearch**:[仓库](https://github.com/opensearch-project/OpenSearch) · [RAG 教程](https://docs.opensearch.org/latest/tutorials/gen-ai/rag/index/) · [混合查询](https://docs.opensearch.org/latest/query-dsl/compound/hybrid/) | 将全文搜索、向量搜索和带证据的问答接在一起。 | 为文档建立索引,对同一问题执行全文与混合查询,再用命中片段生成包含来源的回答。 | + +> 链接核对日期:2026-09-27。项目 API、安装方式和示例代码可能变化;实际运行时以链接中的当前官方文档为准。本页任务是练习目标,并非可直接运行的代码。 diff --git "a/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/\351\242\230\347\233\256\346\250\241\346\235\277.md" "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/\351\242\230\347\233\256\346\250\241\346\235\277.md" new file mode 100644 index 000000000..02804a541 --- /dev/null +++ "b/src/AI\345\272\224\347\224\250\345\274\200\345\217\221/AI\347\237\245\350\257\206\345\267\245\347\250\213\344\270\216RAG/\351\242\230\347\233\256\346\250\241\346\235\277.md" @@ -0,0 +1,75 @@ +# 题目模板:把用户提问写成面试与学习笔记 + +复制本文件的结构到对应题目文件,替换提示文字;没有解释价值的小节可以删去。不要把待填提示或未经核验的事实当作答案发布。 + +--- + +# (填写题目原文) + +日期:YYYY-MM-DD +标签:#面试 #AI应用开发 #RAG #知识工程 +难度:(按题目实际难度填写) +来源:(若改写已有题目,填原题直达链接;自拟题写“用户提问”,不要假造链接) + +## 一句话答案 + +(用一句能在面试开场直接说出的结论回答问题,避免堆定义。) + +## 30–90 秒面试口语版 + +(按“结论 → 机制/流程 → 适用场景与边界”写成自然口语;长度以实际朗读计时为准。) + +## 原理拆解 + +(说明输入、处理步骤、输出和依赖条件。若是方案对比,写清比较维度;若涉及版本差异,标注具体版本。) + +## Mermaid 图解 + +(仅在流程、调用顺序、状态变化或数据关系需要可视化时,用有效的 `mermaid` 代码块替换本段。节点写短语,边表示真实关系,并检查渲染。无需图时删除本节。) + +## 伪代码 / 最小实现思路 + +(仅当题目包含可操作的算法或系统流程时,补充语言无关的伪代码:标明输入、输出、主要步骤、停止条件和失败分支;涉及权限、版本或数据更新时写进关键步骤。无需伪代码时删除本节。) + +## 关键细节与取舍 + +- (术语、前提或边界条件) +- (质量、延迟、成本、可解释性等维度的真实取舍) +- (生产实践或诊断方法;没有亲历证据时不要写成个人经验) + +## 面试官追问 + +1. (基础:验证关键概念) +2. (进阶:解释机制或对比方案) +3. (工程:设计、故障定位或指标取舍) + +## 常见错误说法与修正 + +| 容易说错的表述 | 更准确的说法 | 为什么 | +| --- | --- | --- | +| (待核验的常见误区) | (可验证的修正) | (原理或边界) | + +## 学习清单 + +- [ ] 脱稿用 60 秒回答,并检查结论是否覆盖题目。 +- [ ] 能根据图或伪代码复述关键流程与失败分支。 +- [ ] 用一个具体场景解释方案选择、代价与评测方法。 +- [ ] 回答至少一个进阶追问,记录不确定的概念继续核验。 + +## 参考资料 + +### 一手资料 + +(优先选择论文原文、官方文档、规范或官方仓库。每条写清它支撑的论点;无法确认时标为待核验,不要补造标题、日期或结论。) + +| 资料与链接 | 类型 / 版本 | 支撑的论点 | 查阅日期 | +| --- | --- | --- | --- | +| (核验后填写) | (论文/官方文档/标准;版本) | (具体论点) | YYYY-MM-DD | + +### 参考社区项目 + +(选择与题目直接相关、能阅读代码或运行示例的项目。社区实现只作为实践参考,不替代一手资料;记录版本或提交以便复现。) + +| 项目与仓库链接 | 版本 / 提交 | 与题目的关联及可看的模块 | 查阅日期 | +| --- | --- | --- | --- | +| (核验后填写) | (版本号或提交哈希) | (对应实现入口) | YYYY-MM-DD | diff --git "a/src/Agent/\347\273\274\345\220\210\351\242\230\345\272\223.md" "b/src/Agent/\347\273\274\345\220\210\351\242\230\345\272\223.md" new file mode 100644 index 000000000..69504631a --- /dev/null +++ "b/src/Agent/\347\273\274\345\220\210\351\242\230\345\272\223.md" @@ -0,0 +1,109 @@ +# 综合题库 + +## 1. AI编程工具的未来是什么?程序员会被替代吗? + +### 1分钟面试背诵稿 + +我认为 AI 编程工具的未来,不只是代码补全,而是逐步演进成能够参与完整研发流程的工程代理。它会从写代码,扩展到理解需求、拆解任务、修改代码、运行测试、修复问题,甚至参与文档和交付流程。 + +但程序员不会被完全替代,真正会被替代的,是只做重复性编码、缺少技术判断的人。因为软件开发最难的部分并不只是写代码,而是理解业务、做技术取舍、保障系统质量,以及对最终结果负责。 + +从趋势上看,AI 会大幅提升开发效率,尤其是在模板化开发、样板代码、测试生成这些场景里。但越往上走,越需要工程师具备架构设计、问题拆解、代码评审、性能优化和风险控制能力。 + +所以我更认同一句话,不是 AI 替代程序员,而是会使用 AI 的程序员替代不会使用 AI 的程序员。未来工程师的核心竞争力,会从“手写代码的速度”,转向“定义问题、驾驭 AI、验证结果和完成交付”的能力。 + +## 2. 代码Review能用AI做吗?怎么自动提PR建议? + +### 1分钟面试背诵稿 + +我认为代码 Review 非常适合用 AI 做增强,但不适合完全替代人工。因为 AI 很擅长做大规模、标准化、重复性的检查,比如代码风格、命名规范、空指针风险、低级 bug、重复逻辑、测试缺失、类型不一致,或者根据 diff 快速总结这次改动的风险点。 + +但 AI 的边界也很明显,它未必真正理解业务上下文、历史设计决策和线上约束,所以更适合做第一层自动审查,而不是最终审批人。真正高质量的 Review,还是需要工程师来判断架构合理性、业务正确性、兼容性和发布风险。 + +如果要自动给 PR 提建议,典型做法是把 AI 接到 CI 流水线里。比如在 GitHub Actions 或 GitLab CI 里,拿到 PR 的 diff、相关文件和项目规则,然后把这些上下文交给模型,让它输出结构化的 review 建议,再通过 bot 以评论或者 summary 的方式回写到 PR 里。 + +我觉得关键不是“让 AI 代替人审代码”,而是“让 AI 先做一轮高覆盖、低成本的预审”,帮团队减少机械性 review,把人力集中在真正重要的设计和风险判断上。 + +## 3. 代码模型的上下文怎么构建?Repo-level理解怎么做? + +### 1分钟面试背诵稿 + +我理解代码模型的上下文构建,核心不是把整个仓库一次性塞给模型,而是围绕当前任务,动态提供最相关、最必要的上下文。因为仓库级代码通常很大,直接全量输入既不经济,也会稀释有效信息,导致模型抓不住重点。 + +一般来说,上下文可以分成几层。第一层是任务上下文,比如用户需求、报错信息、当前 diff 和目标文件。第二层是局部代码上下文,比如当前函数、调用链、相关类型定义、依赖模块和测试文件。第三层是仓库级上下文,比如项目目录结构、技术栈、核心模块关系、代码规范、公共组件、基础设施约束,以及 README、架构文档、lint 和 CI 规则。 + +Repo-level 理解本质上不是一次性读完整个仓库,而是先做仓库索引和结构化建模。比如预先抽取文件树、模块依赖、符号定义、调用关系、配置文件和文档,再结合 embedding 检索、关键词搜索和静态分析,在任务发生时按需召回相关内容。这样模型看到的不是“整个仓库”,而是“和当前问题最相关的仓库切片”。 + +所以我认为,代码 Agent 的关键能力不是单次生成代码,而是能不能建立一套稳定的上下文工程:先理解任务,再检索仓库,再补充约束,最后生成和验证。真正高质量的 Repo-level 理解,靠的是索引、检索、结构化信息和工具链配合,而不只是更长的上下文窗口。 + +## 4. 什么是 Repo-level? + +### 1分钟面试背诵稿 + +Repo-level 可以理解成“仓库级别”的理解能力。它不是只看当前这一个文件、这一个函数,而是站在整个代码仓库的视角去理解问题。 + +比如你改一个前端页面,如果只是 file-level 理解,模型可能只知道这个页面文件里写了什么;但如果是 Repo-level 理解,它还会知道这个页面依赖了哪些公共组件、状态管理怎么做、接口层在哪、路由怎么配、测试怎么写、项目里有什么统一规范,甚至这段逻辑在别的模块里有没有类似实现。 + +所以 Repo-level 的重点,是“跨文件、跨模块、跨目录”地理解整个项目的结构和约束。它关注的不只是单点代码,而是这段代码在整个仓库里的位置、上下游依赖和工程规则。 + +从 Agent 工程角度看,Repo-level 理解通常要靠文件树分析、符号索引、依赖关系、代码搜索、文档检索和配置解析来实现。简单说,就是让模型知道“这个仓库整体是怎么组织和运行的”,而不是只会盯着眼前这一小段代码。 + +## 5. AI编程工具的提示词怎么写?怎么让 Copilot 生成更符合需求的代码? + +### 1分钟面试背诵稿 + +我觉得给 AI 编程工具写提示词,本质上是在做需求表达和上下文约束。提示词写得越具体,生成结果通常越稳定。最差的写法就是只说一句“帮我写一个功能”,因为模型不知道你的技术栈、代码风格、边界条件和输出要求。 + +更有效的提示词,一般要包含几部分。第一是目标,要明确你想实现什么功能。第二是上下文,比如当前项目用的是 React、TypeScript、哪套状态管理、已有接口和组件在哪里。第三是约束,比如要不要兼容旧代码、是否遵循现有目录结构、是否补测试、是否禁止引入新依赖。第四是输出形式,比如只修改当前文件、分步骤输出、先给方案再给代码,或者直接生成可运行代码。 + +如果想让 Copilot 生成更符合需求的代码,关键不是一味加长 prompt,而是把相关代码、类型定义、接口契约、已有示例和注释放到它能感知到的位置。因为 Copilot 很依赖当前编辑区附近的上下文,你给它越清晰的函数签名、注释、示例和相邻代码,它就越容易沿着正确模式补全。 + +所以我的经验是,先把需求拆小,再把上下文喂准,再把约束说清。不要只让它“写代码”,而要告诉它“在什么项目里、按什么规范、基于什么已有实现、产出什么结果”。这样生成的代码才更接近真实工程需求。 + +## 6. 代码的重构建议怎么生成?什么时候该提取函数,什么时候该合并代码? + +### 1分钟面试背诵稿 + +我理解代码重构建议的生成,核心不是机械地把代码拆得更碎,而是判断当前代码是否真的影响了可读性、复用性和维护成本。AI 可以辅助发现一些典型信号,比如函数过长、嵌套太深、重复逻辑过多、命名不清、职责混杂、条件分支复杂,或者同一段逻辑在多个地方反复出现。 + +什么时候该提取函数,通常有几个判断标准。第一,这段逻辑有明确语义,值得被命名。第二,它在多个地方会复用。第三,当前函数职责太多,拆出来以后主流程会更清晰。第四,拆出来后更容易单测和复用。也就是说,提取函数的前提是“抽出来以后更好理解”,而不是单纯为了让函数变短。 + +什么时候该合并代码,一般是在发现过度抽象的时候。比如两个函数几乎只差一个变量名,拆分后反而要来回跳转才能理解;或者本来是一段连续业务流程,被拆成很多很薄的包装函数,导致阅读成本更高。这时候合并反而更好,因为它能减少无意义抽象,让逻辑更直接。 + +所以我的判断标准一直是:看抽象之后,代码是不是更容易理解、更容易修改、更容易测试。如果提取函数能强化语义边界,就拆;如果抽象只是增加跳转和心智负担,就合。重构的目标不是形式上的“更优雅”,而是工程上的“更可维护”。 + +## 7. Cursor、Windsurf这些AI IDE有什么特点?和传统IDE有什么区别? + +### 1分钟面试背诵稿 + +我觉得 Cursor、Windsurf 这类 AI IDE 的核心特点,是把大模型能力直接嵌进了开发环境,不只是做代码补全,而是让 IDE 从“被动工具”变成“可以协作的智能助手”。它们通常支持自然语言改代码、跨文件理解、基于整个仓库生成或修改代码、自动解释报错、生成测试、批量重构,甚至可以直接执行一部分工程任务。 + +和传统 IDE 相比,最大的区别不是界面,而是交互方式变了。传统 IDE 主要依赖人手动搜索、跳转、编写、调试,IDE 负责提供编辑、诊断、插件和调试能力;而 AI IDE 会在这个基础上增加一层“意图驱动”的交互,也就是你可以直接告诉它要实现什么、修什么、重构什么,它再去理解上下文并协助完成。 + +第二个区别是上下文处理能力。传统 IDE 更像是代码浏览和编辑工具,理解主要靠程序员自己;AI IDE 会主动利用当前文件、相邻代码、项目结构甚至仓库级上下文,去生成更贴合项目风格的结果。它本质上是在 IDE 里加入了一个代码 Agent。 + +但我认为 AI IDE 并不是替代传统 IDE,而是在其基础上升级工作方式。传统 IDE 的语法分析、调试、断点、插件生态依然非常重要;AI IDE 的价值是在这些能力之上,进一步提升理解、生成和自动化执行效率。所以本质上看,传统 IDE 是“工具平台”,AI IDE 更像是“工具平台加一个能协作的工程代理”。 + +## 8. 程序修复(Program Repair)怎么做?怎么自动修Bug? + +### 1分钟面试背诵稿 + +我理解 Program Repair,本质上是让系统自动完成“发现问题、定位原因、生成修复方案、验证修复结果”这一整套闭环,而不是简单让模型改一段代码。因为真正难的不是生成 patch,而是确保这个 patch 真的修好了问题,而且没有引入新的回归。 + +一个比较完整的自动修 Bug 流程,通常分成几步。第一步是问题定位,比如拿到报错日志、异常堆栈、失败测试、监控告警或者用户反馈,先缩小到相关模块和可疑代码。第二步是构建修复上下文,包括相关函数、调用链、类型定义、配置、最近变更和已有测试。第三步是生成候选修复方案,可能是一条也可能是多条。第四步是自动验证,比如跑单测、集成测试、lint、类型检查,必要时再做回归测试。 + +所以自动修 Bug 的关键,不是让 AI 直接“猜答案”,而是给它足够的问题上下文和验证机制。比如用 failing test 作为修复目标,就是非常经典的做法:只要生成的代码能让失败测试通过,同时不破坏其他测试,就说明修复质量更可信。 + +从工程角度看,真正可落地的 Program Repair 一定是“生成加验证”的模式。AI 负责提出修复候选,人和工具链负责筛选和确认。也就是说,自动修复不是一次性替代工程师,而是把修 Bug 变成一个可搜索、可评估、可回滚的自动化过程。 + +## 9. LangGraph是什么? + +### 1分钟面试背诵稿 + +LangGraph 可以理解成一个专门用来构建 AI Agent 的底层编排框架。它不是单纯帮你调一个大模型接口,而是把 Agent 的执行过程抽象成一个有状态的图,也就是用节点表示步骤,用边表示流转,让模型调用、工具调用、条件分支、循环、多 Agent 协作这些流程都能被显式控制。 + +它的核心价值,在于特别适合做复杂、长流程、可恢复的 Agent 系统。比如一个任务要经历检索、推理、调用工具、人工确认、再继续执行,这种流程如果只靠普通 prompt 很难稳定管理,但用 LangGraph 可以把状态、节点和转移关系明确建模。 + +从工程角度看,LangGraph 重点解决的是 Agent orchestration,也就是 Agent 编排问题。它强调几个能力:有状态执行、持久化、checkpoint、human-in-the-loop、流式输出,以及长任务的可靠运行。所以它更像 Agent 的工作流引擎,而不是单纯的对话封装库。 + +如果做类比的话,LangChain 更偏组件和高层封装,LangGraph 更偏底层运行时和流程控制。简单说,LangGraph 就是当你不满足于“问一句答一句”的简单调用,而是想真正搭建可控、可追踪、可恢复的 Agent 系统时,会用到的那一层框架。 diff --git "a/src/Browser/Chrome\346\265\217\350\247\210\345\231\250\346\217\222\344\273\266\357\274\210\346\211\251\345\261\225\357\274\211- Manifest V3 \346\217\222\344\273\266\345\274\200\345\217\221\350\247\204\350\214\203\347\256\200\344\273\213.md" "b/src/Browser/Chrome\346\265\217\350\247\210\345\231\250\346\217\222\344\273\266\357\274\210\346\211\251\345\261\225\357\274\211- Manifest V3 \346\217\222\344\273\266\345\274\200\345\217\221\350\247\204\350\214\203\347\256\200\344\273\213.md" new file mode 100644 index 000000000..b87791ac8 --- /dev/null +++ "b/src/Browser/Chrome\346\265\217\350\247\210\345\231\250\346\217\222\344\273\266\357\274\210\346\211\251\345\261\225\357\274\211- Manifest V3 \346\217\222\344\273\266\345\274\200\345\217\221\350\247\204\350\214\203\347\256\200\344\273\213.md" @@ -0,0 +1,96 @@ +--- +date: 2023-05-27 +category: + - 前端 + - 浏览器 +theme: vuepress +highlight: atom-one-dark +--- +# Chrome浏览器插件(扩展)- Manifest V3 插件开发规范简介 + +随着互联网的快速发展,浏览器插件成为了许多用户提升浏览器功能和个性化体验的重要工具。Chrome浏览器作为全球最受欢迎的浏览器之一,其插件生态系统也日益壮大。为了保证插件的安全性和性能,Chrome团队推出了Manifest V3,这是一种新的插件开发规范。 + +> A step in the direction of security, privacy, and performance. +> +> 向安全性、隐私性和性能方向迈出了一步。 + +Manifest V3是Chrome浏览器插件开发的一种新的规范和架构。它旨在提供更高的安全性、更好的性能和更好的隐私保护。Manifest V3引入了一些新的概念和功能,以帮助开发者更好地构建和管理插件。 + +扩展清单(Extension Manifest)向浏览器提供有关扩展功能和它使用的文件的信息。可供扩展使用的功能由当前清单版本定义。Manifest V3引入了扩展安全性、隐私性和性能的增强,并允许扩展使用开放Web技术,如service worker和promises。 + +> Chrome 应用商店不再接受新的Manifest V2 插件(扩展) +> +> - 2022年1月,Chrome网上应用商店停止接受新的Manifest V2扩展程序,并将原有的V2其可见性设置为“公开”或“未列出”。同时,将Manifest V2扩展从“私人”更改为“公共”或“未列出”的功能已删除。 +> - 2022年6月,Chrome网上应用商店停止接受新的Manifest V2扩展,并将原有的V2扩展可见性设置为“私人”。 + +## 功能摘要 + +使用Manifest V3的扩展有许多新特性和功能更改: + +- Service workers 替换 background pages. +- 使用新的declarativeNetRequest API 进行网络请求修改 +- 不再允许远程载入的代码,扩展只能执行包含在其包中的JavaScript +- Promise支持已经被添加到许多方法中,尽管回调仍然被支持作为替代方案(Chrome 最终将支持所有合适的方法上的Promise能力) +- Manifest V3中还引入了许多其他相对较小的特性变化 + +## 主要特点 + +### Service workers + +Manifest V3将后台页面(background pages)替换为Service Worker。 + +与其网页对应物一样,扩展 Service Workers 侦听并响应事件,以增强用户的体验。对于Web Service Worker,这通常意味着管理缓存,预加载资源和启用离线Web页面。虽然扩展 Service Worker 仍然可以完成所有这些工作,但扩展程序包已经包含了一组可以离线访问的资源。因此,扩展 Service Worker 倾向于专注于响应由扩展API公开的浏览器事件。 + +### 修改网络请求 + +扩展程序修改网络请求的方式在Manifest V3中发生了变化。有一个新的`declarativeNetRequest API`[chrome.declarativeNetRequest - Chrome Developers](https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/),它可以让扩展程序以保护隐私和高性能的方式修改和阻止网络请求。这个API的本质是: + +- 扩展程序不再拦截并以程序化方式修改请求,而是请求Chrome代表其评估和修改请求。 +- 扩展程序声明一组规则:用于匹配请求的模式和匹配时执行的操作。然后浏览器根据这些规则修改网络请求。 采用这种声明性方法大大减少了持久主机权限的需求。 + +> 某些扩展程序可能仍然需要广泛的主机权限来满足特定的用例(例如重定向请求)。有关详细信息,请参阅条件权限和declarativeNetRequest。 + +webRequest API 在Manifest V3中仅限于强制安装的扩展程序。这是由于阻止web请求方法存在的问题: + +- 隐私 + + 需要过多地访问用户数据,因为扩展程序需要读取用户发出的每个网络请求。 + + + +- 性能 + + 在多个进程切换和C++/JS边界之间进行数据的序列化和反序列化会导致下降。 + +- 兼容性 + + 与基于事件的后台执行不兼容,因为它需要Service Worke在处理每个请求时运行。 + +这意味着开发人员可以实现许多常见的用例,例如内容阻止,而无需任何主机权限。 + +### 托管远程代码 + +Manifest V3 中的一个关键安全改进是扩展无法加载 JavaScript 或 Wasm 文件等远程代码。这使扩展程序提交到 Chrome 网上应用店时更可靠、更高效地检查扩展程序的安全行为。具体来说,所有逻辑都必须包含在扩展包中。 + +官方建议使用远程配置文件,而不是远程代码。请参阅[迁移指南](https://developer.chrome.com/docs/extensions/migrating/improve-security#remotely-hosted-code)以获取更多信息。 + +### Promise + +Manifest V3 为 Promise 提供一流的支持。现在许多流行的 API 支持 Promise,Chrome最终决定将支持所有适当方法的 Promise。还支持Promise链、异步和等待。某些 API 功能(例如事件侦听器)仍然需要回调。 + +为了向后兼容,许多方法在添加 Promise 支持后继续支持回调。请注意,不能在同一个函数调用中同时使用两者。如果传递回调,该函数将不会返回 Promise,如果希望返回 Promise,则不要传递回调。 + +有关使用 Promise 的信息,请参阅[MDN 上的 Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)。有关将回调转换为 Promise 以及在扩展中使用它们的信息,请参阅[文章](https://developer.chrome.com/docs/extensions/mv3/promises#compare-to-callback)。 + +## 结语 + +Manifest V3也引发了一些争议。一些开发者担心Manifest V3的新权限模型和事件页模型会限制插件的功能和灵活性。他们担心这可能会影响到已有的插件,并给开发者带来额外的工作量。此外,一些开发者还担心Manifest V3的改变可能导致插件生态系统的不稳定和插件的兼容性问题。 + +总之,Manifest V3是Chrome浏览器插件开发的一次重要改进。它引入了新的权限模型、事件页模型和消息传递机制,提供了更高的安全性、更好的性能和更好的隐私保护。然而,Manifest V3也引发了一些争议,开发者们对其功能和灵活性的限制表示担忧。无论如何,Manifest V3的推出将进一步推动Chrome浏览器插件生态系统的发展和创新(Chrome 可越来越像操作系统了)。 + +> **参考:** +> +> - [Chrome Extensions Manifest V2 support timeline - Chrome Developers](https://developer.chrome.com/docs/extensions/migrating/mv2-sunset/) +> - [Welcome to the Chrome Extension Manifest V3 - Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/intro/) +> - [Chrome 扩展清单 V3 概述 - Chrome 开发者](https://developer.chrome.com/docs/extensions/mv3/intro/mv3-overview/#service-workers) +> - [chrome.declarativeNetRequest - Chrome Developers --- chrome.declarativeNetRequest - Chrome Developers](https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/) \ No newline at end of file diff --git "a/src/Browser/Web Components \344\270\255\344\275\277\347\224\250\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" "b/src/Browser/Web Components \344\270\255\344\275\277\347\224\250\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" new file mode 100644 index 000000000..019b8208f --- /dev/null +++ "b/src/Browser/Web Components \344\270\255\344\275\277\347\224\250\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" @@ -0,0 +1,192 @@ +--- +date: 2023-09-07 +category: + - 浏览器 + - 前端 + - WebComponent +--- +# Web Components 中使用生命周期回调函数 + +在 custom element 的构造函数中,可以指定多个不同的回调函数,它们将会在元素的不同生命时期被调用。这是 Web Components 技术中的一个重要特性,它能够让开发者更加灵活地控制元素的行为 + +- `connectedCallback`:当 custom element 首次被插入文档 DOM 时,被调用。 +- `disconnectedCallback`:当 custom element 从文档 DOM 中删除时,被调用。 +- `adoptedCallback`:当 custom element 被移动到新的文档时,被调用。 +- `attributeChangedCallback`: 当 custom element 增加、删除、修改自身属性时,被调用。 + +其中,`connectedCallback` 是在 custom element 首次被插入文档 DOM 时被调用的。这个回调函数通常用于执行一些初始化操作,比如添加事件监听器、请求数据等等。在这个时候,元素已经被添加到了文档中,可以访问到 DOM 和其他元素。 + +`disconnectedCallback` 是在 custom element 从文档 DOM 中删除时被调用的。这个回调函数通常用于清理一些资源,比如取消事件监听器、停止定时器等等。在这个时候,元素已经不再被文档所包含,无法访问到 DOM 和其他元素。 + +`adoptedCallback` 是在 custom element 被移动到新的文档时被调用的。这个回调函数通常用于处理一些文档级别的操作,比如重新计算布局(重排)、修改样式等等。在这个时候,元素已经从原来的文档中移除,并被添加到了新的文档中。 + +`attributeChangedCallback` 是在 custom element 增加、删除、修改自身属性时被调用的。这个回调函数通常用于处理一些属性相关的逻辑,比如根据属性值的变化更新元素的样式、重新渲染元素等等。在这个时候,元素的属性已经被修改,可以通过新的属性值来进行相应的处理。 + +需要注意的是,这些回调函数都是可选的,开发者可以根据实际需求来选择使用哪些回调函数。另外,这些回调函数只能在 custom element 的构造函数中进行定义,不能在元素实例中进行修改。 + +### 用法示例 + +我们来看一下它们的一下用法示例。下面的代码出自[life-cycle-callbacks](https://github.com/mdn/web-components-examples/tree/master/life-cycle-callbacks)示例([查看在线示例](https://mdn.github.io/web-components-examples/life-cycle-callbacks/))。这个简单示例只是生成特定大小、颜色的方块。custom element 看起来像下面这样: + +```html + +``` + +这里,类的构造函数很简单 — 我们将 shadow DOM 附加到元素上,然后将一个[`
`](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/div)元素和[` + +
+ +
+`; + +class Button extends HTMLElement { + constructor() { + super(); + + this._shadowRoot = this.attachShadow({ mode: 'open' }); + this._shadowRoot.appendChild(template.content.cloneNode(true)); + } +} + +window.customElements.define('my-button', Button); +``` + +让我们逐步进行所有步骤。自定义元素(Web Components)的定义是通过一个继承自HTMLElement的JavaScript类来完成的,该类可以帮助你实现任何自定义HTML元素。通过继承自它,你将可以访问各种类方法,例如组件的生命周期回调(生命周期方法),这些方法有助于你实现Web Components。稍后你将看到我们如何利用这些类方法。 + +此外,Web Components使用Shadow DOM,不应将其与虚拟DOM(性能优化)混淆。Shadow DOM用于封装CSS、HTML和JavaScript,以便对使用Web Components的外部组件/HTML进行隐藏。你可以为Shadow DOM设置模式,在我们的情况下设置为true,以使Shadow DOM在某种程度上对外界可访问。无论如何,你可以将Shadow DOM视为自定义元素内部的自己的子树,该子树封装了结构和样式。 + +构造函数中的另一个语句通过克隆上述声明的模板来将一个子元素附加到我们的Shadow DOM上。模板通常用于使HTML可重用。然而,在Web Components中,模板也在定义其结构和样式方面起着关键作用。在我们的自定义元素顶部,我们使用这样的模板来定义结构和样式,该模板在自定义元素的构造函数中使用。 + +我们代码片段的最后一行通过在window上定义自定义元素将其定义为我们的HTML的有效元素。第一个参数是我们可重用自定义元素的名称作为HTML,必须有一个连字符,第二个参数是我们自定义元素的定义,包括呈现的模板。之后,我们可以在我们的HTML中的某个地方使用我们的新自定义元素``。请注意,自定义元素不能/不应用作自闭合标签。 + +## 如何将属性传递给 Web Components? + +到目前为止,我们的自定义元素除了拥有自己的结构和样式之外并没有做太多事情。我们可以通过使用带有一些 CSS 的按钮元素来实现同样的效果。不过,为了了解 Web 组件,我们继续讨论自定义按钮元素。就目前而言,我们无法改变它显示的内容。例如,将标签作为 HTML 属性传递给它怎么样: + +```html + +``` + +渲染的输出仍将显示使用字符串的内部自定义元素的模板`Label`。为了使自定义元素对这个新属性做出反应,你可以监听它,并使用来自扩展 HTMLElement 类的类方法对其执行某些操作: + +```js +class Button extends HTMLElement { + constructor() { + super(); + + this._shadowRoot = this.attachShadow({ mode: 'open' }); + this._shadowRoot.appendChild(template.content.cloneNode(true)); + } + + static get observedAttributes() { + return ['label']; + } + + attributeChangedCallback(name, oldVal, newVal) { + this[name] = newVal; + } +} +``` + +每次标签属性发生变化时,都会调用attributeChangedCallback()函数,因为我们在observedAttributes()函数中将标签定义为可观察的属性。在我们的情况下,回调函数除了在我们的Web Components类实例上设置标签(这里是:this.label = 'Click Me')之外,没有太多的操作。然而,自定义元素仍然没有渲染这个标签。为了调整渲染的输出,你必须获取实际的HTML按钮并设置其HTML内容: + +```js +class Button extends HTMLElement { + constructor() { + super(); + + this._shadowRoot = this.attachShadow({ mode: 'open' }); + this._shadowRoot.appendChild(template.content.cloneNode(true)); + + this.$button = this._shadowRoot.querySelector('button'); + } + + static get observedAttributes() { + return ['label']; + } + + attributeChangedCallback(name, oldVal, newVal) { + this[name] = newVal; + + this.render(); + } + + render() { + this.$button.innerHTML = this.label; + } +} +``` + +现在,初始标签属性已在按钮中设置。此外,自定义元素也将对属性的更改做出反应。你可以以相同的方式实现其他属性。但是,你会注意到非JavaScript原始类型(如对象和数组)需要以JSON格式的字符串形式传递。在实现下拉组件时,我们将在稍后看到这一点。 + +## 将属性映射到属性 + +到目前为止,我们已经使用属性将信息传递给我们的自定义元素。每当属性发生变化时,我们在回调函数中将该属性设置为我们Web Components实例上的属性。然后,我们以命令方式进行所有必要的更改以进行渲染。但是,我们也可以使用一个获取方法将属性反映到属性。通过这种方式,我们确保始终获得最新的值,而无需在回调函数中自己进行分配。然后,this.label总是从我们的getter函数返回最新的属性: + +```js +class Button extends HTMLElement { + constructor() { + super(); + + this._shadowRoot = this.attachShadow({ mode: 'open' }); + this._shadowRoot.appendChild(template.content.cloneNode(true)); + + this.$button = this._shadowRoot.querySelector('button'); + } + + get label() { + return this.getAttribute('label'); + } + + static get observedAttributes() { + return ['label']; + } + + attributeChangedCallback(name, oldVal, newVal) { + this.render(); + } + + render() { + this.$button.innerHTML = this.label; + } +} +``` + +这就是将属性映射到属性的全部内容。然而,反过来,你也可以使用属性将信息传递给自定义元素。例如,我们可以将信息设置为元素的属性,而不是使用属性``来渲染我们的按钮。通常,当将对象和数组等信息分配给元素时,会使用这种方式: + +```html + + + +``` + +很不幸,当使用属性而不是属性时,我们用于更改属性的回调函数不再被调用,因为它只对属性更改做出反应,而不处理属性赋值。这就是我们类中的set方法派上用场的地方: + +```js +class Button extends HTMLElement { + constructor() { + super(); + + this._shadowRoot = this.attachShadow({ mode: 'open' }); + this._shadowRoot.appendChild(template.content.cloneNode(true)); + + this.$button = this._shadowRoot.querySelector('button'); + } + + get label() { + return this.getAttribute('label'); + } + + set label(value) { + this.setAttribute('label', value); + } + + static get observedAttributes() { + return ['label']; + } + + attributeChangedCallback(name, oldVal, newVal) { + this.render(); + } + + render() { + this.$button.innerHTML = this.label; + } +} +``` + +现在,由于我们从元素的外部*设置属性*,因此我们的自定义元素的 setter 方法通过将元素的属性设置为反射的属性值,确保将属性**反映到属性。**之后,我们的属性回调再次运行,因为属性已更改,因此我们恢复了渲染机制。 + +你可以为此类的每个方法添加控制台日志,以了解每个方法发生的顺序。通过打开浏览器的开发工具,也可以在 DOM 中见证整个反射:即使属性被设置为属性,属性也应该出现在元素上。 + +最后,在为我们的信息准备好 getter 和 setter 方法之后,我们可以将信息作为属性和特性传递给我们的自定义元素。整个过程称为**将属性反映到属性**,反之亦然。 + +## 如何将函数传递给 Web Components? + +最后但并非最不重要的是,我们需要在点击时使我们的自定义元素起作用。首先,自定义元素可以注册一个事件监听器来响应用户的交互。例如,我们可以选择按钮并为其添加一个事件监听器: + +```js +class Button extends HTMLElement { + constructor() { + super(); + + this._shadowRoot = this.attachShadow({ mode: 'open' }); + this._shadowRoot.appendChild(template.content.cloneNode(true)); + + this.$button = this._shadowRoot.querySelector('button'); + + this.$button.addEventListener('click', () => { + // do something + }); + } + + get label() { + return this.getAttribute('label'); + } + + set label(value) { + this.setAttribute('label', value); + } + + static get observedAttributes() { + return ['label']; + } + + attributeChangedCallback(name, oldVal, newVal) { + this.render(); + } + + render() { + this.$button.innerHTML = this.label; + } +} +``` + +*注意:可以简单地在元素的外部添加此监听器,而不需要在自定义元素中烦恼 -- 然而,将其定义在自定义元素内部可以更好地控制应该传递给外部注册的监听器的内容。* + +缺少的是从外部传递的回调函数,可以在此监听器中调用。有多种方法可以解决这个任务。首先,我们可以将函数作为属性传递。然而,由于我们已经了解到将非原始类型传递给HTML元素是麻烦的,我们希望避免这种情况。其次,我们可以将函数作为属性传递。让我们看看当使用我们的自定义元素时,这将是什么样子: + +```html + + + +``` + +我们刚刚将一个onClick处理程序定义为我们元素的函数。接下来,在我们自定义元素的监听器中,我们可以调用这个函数属性: + +```js +class Button extends HTMLElement { + constructor() { + super(); + + this._shadowRoot = this.attachShadow({ mode: 'open' }); + this._shadowRoot.appendChild(template.content.cloneNode(true)); + + this.$button = this._shadowRoot.querySelector('button'); + + this.$button.addEventListener('click', () => { + this.onClick('Hello from within the Custom Element'); + }); + } + ... +} +``` + +如果你没有在自定义元素内部使用监听器,你只会接收到事件。你可以自己尝试一下。现在,即使这样按预期工作,我宁愿使用DOM API提供的内置事件系统。因此,让我们从外部注册一个事件监听器,而不将函数分配为元素的属性: + +```html + + + +``` + +点击按钮时的输出与之前的相同,但这次使用了点击交互的事件监听器。这样,自定义元素仍然能够通过使用点击事件向外界发送信息,因为我们从自定义元素的内部工作中发送的消息仍然会被发送并可以在浏览器的日志中看到。通过这种方式,如果不需要特殊的行为,也可以省略在自定义元素中定义事件监听器的步骤,如前所述。 + +然而,通过这种方式留下的一个注意事项是:我们只能使用内置事件来处理自定义元素。然而,如果以后在不同的环境中使用你的Web Components(例如React),你可能还希望为组件提供自定义事件(例如onClick)作为API。当然,我们也可以手动将自定义元素的点击事件映射到我们框架的onClick函数,但如果我们可以在那里简单地使用相同的命名约定,那将更加方便。让我们看看如何进一步改进我们之前的实现,以支持自定义事件: + +## Web Components 的生命周期回调函数 + +我们几乎完成了自定义按钮。在我们继续自定义下拉元素(将使用我们的自定义按钮元素)之前,让我们添加最后一个点睛之笔。目前,该按钮定义了一个带有填充的内部容器元素。这对于并排使用这些自定义按钮并具有彼此的自然边距时非常有用。但是,在另一个上下文(例如下拉列表组件)中使用该按钮时,你可能希望从容器中删除此填充。因此,你可以使用名为 `connectedCallback` 的 Web 组件的生命周期回调之一: + +```js +class Button extends HTMLElement { + constructor() { + super(); + + this._shadowRoot = this.attachShadow({ mode: 'open' }); + this._shadowRoot.appendChild(template.content.cloneNode(true)); + + this.$container = this._shadowRoot.querySelector('.container'); + this.$button = this._shadowRoot.querySelector('button'); + + ... + } + + connectedCallback() { + if (this.hasAttribute('as-atom')) { + this.$container.style.padding = '0px'; + } + } + ... +} +``` + +在此情况下,如果元素上存在一个名为as-atom的属性,它将将我们的按钮容器的填充重置为零。顺便说一下,这就是你可以按照原子设计原则创建一个出色的UI库的方式,其中自定义按钮元素是一个原子,自定义下拉菜单元素是一个分子。也许两者最终会与更大的有机体中的另一个元素结合在一起。现在我们的按钮可以在下拉菜单元素中无填充地使用,如下所示:``。按钮的标签将稍后通过使用属性来设置。 + +那么生命周期回调呢?connectedCallback在Web Components附加到DOM时运行一次。这就是为什么可以在组件渲染后执行所有需要完成的任务的原因。当组件被移除时,存在一个等效的生命周期回调函数,称为disconnectedCallback。此外,之前已经在自定义元素中使用了一个生命周期方法,称为attributeChangedCallback,以对属性更改做出反应。Web Components提供了各种生命周期回调函数,请务必详细了解它们。 + +## Web Components 中的 Web Components + +Last but not least, 我们希望在另一个 Web 组件中使用完成的按钮 Web 组件。因此,我们将实现一个自定义下拉元素,应按以下方式使用: + +```jsx + +``` + +请注意,options(对象)作为 JSON 格式的属性传递给自定义元素,这种将对象和数组作为属性传递会更方便: + +```html + + + +``` + +让我们深入了解自定义下拉元素的实现。我们将从一个简单的基础开始,该基础为定义 Web 组件的类定义我们的结构、样式和样板代码。后者用于设置 Shadow DOM 的模式,将模板附加到我们的自定义元素,为我们的属性/属性定义 getter 和 setter 方法,观察我们的属性变化并对其做出响应: + +```jsx +const template = document.createElement('template'); + +template.innerHTML = ` + + + +`; + +class Dropdown extends HTMLElement { + constructor() { + super(); + + this._sR = this.attachShadow({ mode: 'open' }); + this._sR.appendChild(template.content.cloneNode(true)); + } + + static get observedAttributes() { + return ['label', 'option', 'options']; + } + + get label() { + return this.getAttribute('label'); + } + + set label(value) { + this.setAttribute('label', value); + } + + get option() { + return this.getAttribute('option'); + } + + set option(value) { + this.setAttribute('option', value); + } + + get options() { + return JSON.parse(this.getAttribute('options')); + } + + set options(value) { + this.setAttribute('options', JSON.stringify(value)); + } + + static get observedAttributes() { + return ['label', 'option', 'options']; + } + + attributeChangedCallback(name, oldVal, newVal) { + this.render(); + } + + render() { + + } +} + +window.customElements.define('my-dropdown', Dropdown); +``` + +这里有几点需要注意:首先,在我们的风格中,我们可以使用 `:host` 选择器为我们的自定义元素设置全局样式。其次,模板使用我们的自定义按钮元素,但尚未为其提供标签属性。第三,每个属性/属性都有 getter 和 setter,但是,属性/ `options` 属性反射的 getter 和 setter 正在解析对象从or到 JSON格式。 + +*注意:除了所有提到的内容之外,你可能还会注意到所有用于属性/属性反射的 getter 和 setter 方法的样板文件。此外,属性的生命周期回调看起来是重复的,构造函数与自定义按钮元素中的构造函数相同。稍后可能会了解到,存在各种轻量级库(例如带有 LitHTML 的 LitElement)用于 Web 组件之上,以消除我们的这种重复性。* + +到目前为止,尚未使用所有传递的属性和属性。我们只是用一个空的渲染方法对它们做出响应。让我们通过将它们分配给下拉列表和按钮元素以此来利用它们: + +```js +class Dropdown extends HTMLElement { + constructor() { + super(); + + this._sR = this.attachShadow({ mode: 'open' }); + this._sR.appendChild(template.content.cloneNode(true)); + + this.$label = this._sR.querySelector('.label'); + this.$button = this._sR.querySelector('my-button'); + } + + ... + + static get observedAttributes() { + return ['label', 'option', 'options']; + } + + attributeChangedCallback(name, oldVal, newVal) { + this.render(); + } + + render() { + this.$label.innerHTML = this.label; + + this.$button.setAttribute('label', 'Select Option'); + } +} + +window.customElements.define('my-dropdown', Dropdown); +``` + +下拉列表从外部获取其标签作为要设置为内部 HTML 的属性,而按钮现在将任意标签设置为属性。稍后我们将根据下拉列表中的选定选项设置此标签。此外,我们可以利用这些选项为我们的下拉列表呈现实际的可选项目: + +```js +class Dropdown extends HTMLElement { + constructor() { + super(); + + this._sR = this.attachShadow({ mode: 'open' }); + this._sR.appendChild(template.content.cloneNode(true)); + + this.$label = this._sR.querySelector('.label'); + this.$button = this._sR.querySelector('my-button'); + this.$dropdownList = this._sR.querySelector('.dropdown-list'); + } + + ... + + render() { + this.$label.innerHTML = this.label; + + this.$button.setAttribute('label', 'Select Option'); + + this.$dropdownList.innerHTML = ''; + + Object.keys(this.options || {}).forEach(key => { + let option = this.options[key]; + let $option = document.createElement('li'); + $option.innerHTML = option.label; + + this.$dropdownList.appendChild($option); + }); + } +} + +window.customElements.define('my-dropdown', Dropdown); +``` + +在这种情况下,在每次渲染时,我们都会擦除下拉列表的内部 HTML,因为选项可能已更改。然后,我们为对象 `option` 元素动态创建一个列表元素,并将其附加到我们的列表元素中,其中包含 `option` 属性的 `label` . `options` 如果未定义, `properties` 我们使用默认的空对象来避免在此处遇到异常,因为传入属性和属性之间存在争用条件。但是,即使列表被呈现,我们的样式也将 CSS `display` 属性定义为 `none` 。这就是为什么我们还看不到列表的原因,但是在我们为自定义元素的行为添加更多JavaScript之后,我们将在下一步中看到它。 + +## Web Components 与 JavaScript + +到目前为止,我们主要构建和样式化了自定义元素。我们也对更改的属性做出了反应,但在渲染步骤中还没有做太多事情。现在我们将向 Web 组件添加更多 JavaScript 的行为。只有这样,它才真正不同于使用 CSS 样式的简单 HTML 元素。你将看到如何将所有行为封装在自定义下拉元素中,而无需从外部执行任何操作。 + +让我们首先使用我们的按钮元素打开和关闭下拉列表,这应该使我们的下拉列表可见。首先,定义一个新样式,用于使用 `open` 类呈现下拉列表。请记住,我们之前曾将 `display: none;` 下拉列表用作默认样式。 + +```js +const template = document.createElement('template'); + +template.innerHTML = ` + + + ... +`; +``` + +在下一步中,我们定义一个类方法,用于切换自定义元素的内部状态。此外,当调用此类方法时,将根据新状态将新 `open` 类添加或删除到我们的下拉元素中。 + +```js +class Dropdown extends HTMLElement { + constructor() { + super(); + + this._sR = this.attachShadow({ mode: 'open' }); + this._sR.appendChild(template.content.cloneNode(true)); + + this.open = false; + + this.$label = this._sR.querySelector('.label'); + this.$button = this._sR.querySelector('my-button'); + this.$dropdown = this._sR.querySelector('.dropdown'); + this.$dropdownList = this._sR.querySelector('.dropdown-list'); + } + + toggleOpen(event) { + this.open = !this.open; + + this.open + ? this.$dropdown.classList.add('open') + : this.$dropdown.classList.remove('open'); + } + + ... +} +``` + +我们需要为自定义按钮元素的事件添加一个事件侦听器,以将下拉列表的内部状态从打开切换到关闭,反之亦然。使用它时不要忘记绑定 `this` 到我们的新类方法,否则它无法访问 `this` 设置新的内部状态或访问分配 `$dropdown` 的元素。 + +```js +class Dropdown extends HTMLElement { + constructor() { + super(); + + this._sR = this.attachShadow({ mode: 'open' }); + this._sR.appendChild(template.content.cloneNode(true)); + + this.open = false; + + this.$label = this._sR.querySelector('.label'); + this.$button = this._sR.querySelector('my-button'); + this.$dropdown = this._sR.querySelector('.dropdown'); + this.$dropdownList = this._sR.querySelector('.dropdown-list'); + + this.$button.addEventListener( + 'onClick', + this.toggleOpen.bind(this) + ); + } + + toggleOpen(event) { + this.open = !this.open; + + this.open + ? this.$dropdown.classList.add('open') + : this.$dropdown.classList.remove('open'); + } + + ... +} +``` + +立即亲自试用你的 Web 组件。应该可以通过单击我们的自定义按钮来打开和关闭自定义下拉元素。这是我们自定义元素的第一个真正的内部行为,否则它将在 React 或 Angular 等框架中实现。现在,你的框架可以简单地使用此 Web 组件,并期望它提供此行为。让我们继续在单击时从打开的列表中选择一个项目: + +```js +class Dropdown extends HTMLElement { + + ... + + render() { + ... + + Object.keys(this.options || {}).forEach(key => { + let option = this.options[key]; + let $option = document.createElement('li'); + $option.innerHTML = option.label; + + $option.addEventListener('click', () => { + this.option = key; + + this.toggleOpen(); + + this.render(); + }); + + this.$dropdownList.appendChild($option); + }); + } +} +``` + +列表中的每个呈现选项都会获取单击事件的事件侦听器。单击该选项时,该选项将设置为属性,下拉列表切换到 `close` ,组件将再次呈现。但是,为了查看发生了什么,让我们可视化下拉列表中的选定选项项: + +```js +const template = document.createElement('template'); + +template.innerHTML = ` + + + +`; +``` + +接下来,只要选项属性与列表中的选项匹配,我们就可以在 render 方法中设置这个新类。有了这个新样式,并在下拉列表中的一个选项上动态设置样式,我们可以看到该功能实际上有效: + +```js +class Dropdown extends HTMLElement { + + ... + + render() { + ... + + Object.keys(this.options || {}).forEach(key => { + let option = this.options[key]; + let $option = document.createElement('li'); + $option.innerHTML = option.label; + + if (this.option && this.option === key) { + $option.classList.add('selected'); + } + + $option.addEventListener('click', () => { + this.option = key; + + this.toggleOpen(); + + this.render(); + }); + + this.$dropdownList.appendChild($option); + }); + } +} +``` + +让我们在自定义按钮元素中显示当前选定的选项,而不是设置任意值: + +```js +class Dropdown extends HTMLElement { + + ... + + render() { + this.$label.innerHTML = this.label; + + if (this.options) { + this.$button.setAttribute( + 'label', + this.options[this.option].label + ); + } + + this.$dropdownList.innerHTML = ''; + + Object.keys(this.options || {}).forEach(key => { + ... + }); + } +} +``` + +自定义下拉元素的内部行为有效。我们能够打开和关闭它,并且可以通过从下拉列表中选择一个选项来设置一个新选项。缺少一件关键的事情:我们需要再次向外界提供 API(例如自定义事件),以通知他们更改的选项。因此,请为每个列表项单击调度一个自定义事件,但为每个自定义事件提供一个键,以标识单击了哪个项: + +```js +class Dropdown extends HTMLElement { + + ... + + render() { + ... + + Object.keys(this.options || {}).forEach(key => { + let option = this.options[key]; + let $option = document.createElement('li'); + $option.innerHTML = option.label; + + if (this.option && this.option === key) { + $option.classList.add('selected'); + } + + $option.addEventListener('click', () => { + this.option = key; + + this.toggleOpen(); + + this.dispatchEvent( + new CustomEvent('onChange', { detail: key }) + ); + + this.render(); + }); + + this.$dropdownList.appendChild($option); + }); + } +} +``` + +最后,将下拉列表用作 Web 组件时,可以为自定义事件添加事件侦听器,以获取有关更改的通知: + +```html + + + +``` + +就是这样。你已经创建了一个完全封装的下拉组件作为 Web 组件,具有自己的结构、样式和行为。后者是Web Components的关键部分,因为否则你可以简单地使用带有一些CSS的HTML元素作为样式。现在,你还将 behvaior 封装在新的自定义 HTML 元素中。祝贺! + +**** + +下拉列表和按钮元素作为 Web 组件的实现可以在此 GitHub 项目中找到,其中包含一些有用的扩展。正如我之前所说,自定义按钮元素对于下拉组件来说有点不重要,因为它没有实现任何特殊行为。你可以使用带有CSS样式的普通HTML按钮元素。但是,自定义按钮元素通过一个简单的示例帮助我们掌握了 Web 组件的概念。这就是为什么我认为从按钮组件开始是一个很好的想法,该组件稍后将在下拉组件中使用。如果你想继续在 React 中使用你的 Web 组件,请查看这个简洁的 React 钩子或这个 Web Components for React 教程。最后,我希望你从这个 Web 组件教程中学到了很多东西。如果你有反馈或只是喜欢它,请发表评论:-) + + + +> 参考: +> +> [rwieruch/web-components-starter-kit: Starter Kit for Web Components with Webpack as application bundler.](https://github.com/rwieruch/web-components-starter-kit) + + + +非常感谢您看到这里~来自译者 - 泯泷 :smile: + + + diff --git a/src/JavaScript/Atomics API.md b/src/JavaScript/Atomics API.md deleted file mode 100644 index fd5b142cf..000000000 --- a/src/JavaScript/Atomics API.md +++ /dev/null @@ -1 +0,0 @@ -Atomics API \ No newline at end of file diff --git "a/src/JavaScript/Web Woker \344\270\216\344\270\273\347\272\277\347\250\213\351\200\232\344\277\241\345\234\272\346\231\257\344\270\213\345\257\271postMessage\347\232\204\347\256\200\346\264\201\345\260\201\350\243\205.md" "b/src/JavaScript/Web Woker \344\270\216\344\270\273\347\272\277\347\250\213\351\200\232\344\277\241\345\234\272\346\231\257\344\270\213\345\257\271postMessage\347\232\204\347\256\200\346\264\201\345\260\201\350\243\205.md" index 5c0ab2d0e..94832bb0c 100644 --- "a/src/JavaScript/Web Woker \344\270\216\344\270\273\347\272\277\347\250\213\351\200\232\344\277\241\345\234\272\346\231\257\344\270\213\345\257\271postMessage\347\232\204\347\256\200\346\264\201\345\260\201\350\243\205.md" +++ "b/src/JavaScript/Web Woker \344\270\216\344\270\273\347\272\277\347\250\213\351\200\232\344\277\241\345\234\272\346\231\257\344\270\213\345\257\271postMessage\347\232\204\347\256\200\346\264\201\345\260\201\350\243\205.md" @@ -1,4 +1,4 @@ -# Web Woker 与主线程通信场景下对postMessage的简洁封装 +# Web Worker 与主线程通信场景问题和对postMessage的简单封装 在Web Worker与主线程之间进行通信时,使用`postMessage`是一种常见的方式。然而,在某些业务场景中,`postMessage`可能会显得不够简洁,因为它涉及到手动序列化和反序列化数据,以及通过事件监听器处理消息。以下是一些常见问题和解决方案,以简化在Web Worker与主线程之间的通信场景中使用`postMessage`的问题。 @@ -21,8 +21,203 @@ 1. 分割数据:将大规模的数据分割成较小的块进行传递,而不是一次性传递整个数据。例如,可以将大型数组切割成多个小块,分别传递给Web Worker,然后在Web Worker中重新组合这些小块,从而减少单次传递的数据量。 2. 使用共享内存:共享内存是一种在Web Worker和主线程之间共享数据的方式,而无需进行复制。这样可以避免结构化克隆的性能开销。共享内存可以通过使用TypedArray和ArrayBuffer来实现,可以在主线程和Web Worker之间直接共享数据的引用,而不需要进行复制。需要注意的是,共享内存可能需要使用锁或其他同步机制来确保对共享数据的访问是安全的。 -3. 使用其他序列化方式:除了结构化克隆,还可以考虑使用其他的序列化方式,例如JSON.stringify和JSON.parse。虽然JSON序列化和反序列化可能比结构化克隆更慢,但它不会像结构化克隆一样复制整个数据,而是将数据转换为JSON字符串,并在接收方解析JSON字符串成JavaScript对象。这样可以避免复制大规模的数据,从而降低性能开销。 +3. 使用其他序列化方式:除了结构化克隆,还可以考虑使用其他的序列化方式,例如JSON.stringify和JSON.parse。虽然JSON序列化和反序列化可能比结构化克隆更慢,但它不会像结构化克隆一样复制整个数据(因仅支持部分数据类型,以及会无视undefined的字段等),而是将数据转换为JSON字符串,并在接收方解析JSON字符串成JavaScript对象。这样可以一定的避免复制大规模的数据,从而降低性能开销。 4. 使用压缩算法:对于大规模的数据,可以考虑使用压缩算法对数据进行压缩,从而减小数据的大小,降低传输的数据量。在接收方进行解压缩后再进行处理。常见的压缩算法有gzip、zlib等,可以在主线程和Web Worker之间使用这些算法对数据进行压缩和解压缩。 -## postMessage简单封装 +## postMessage 简单封装 +### 主进程封装 + +```js +// 定义一个 WorkerMessage 类,用于向 Worker 发送消息并处理返回结果 + +let canStructuredClone; + +export class WorkerMessage { + constructor(workerUrl) { + this.worker = new Worker(workerUrl); + this.callbacks = new Map(); + canStructuredClone === undefined && this.isStructuredCloneSupported(); + + // 监听从 Worker 返回的消息 + this.worker.addEventListener('message', event => { + const {id, type, payload} = event.data; + const callback = this.callbacks.get(id); + + if (!callback) { + console.warn(`未知的消息 ID:${id}`); + return; + } + + switch (type) { + case 'SUCCESS': + callback.resolve(payload); + break; + case 'ERROR': + callback.reject(payload); + break; + default: + console.warn('未知的消息类型:', type); + } + + this.callbacks.delete(id); + }); + } + + // 发送消息给 Worker + postMessage(payload) { + const id = Date.now().toString(36) + Math.random().toString(36).substr(2); + const message = canStructuredClone ? {id, payload} : JSON.stringify({id, payload}) + this.worker.postMessage(message); + return new Promise((resolve, reject) => { + this.callbacks.set(id, {resolve, reject}); + }); + } + + // 关闭 Worker + terminate() { + this.worker.terminate(); + } + + // 判断当前浏览器是否支持结构化克隆算法 + isStructuredCloneSupported() { + try { + const obj = {data: 'Hello'}; + const clonedObj = window.postMessage ? window.postMessage(obj, '*') : obj; + return canStructuredClone = clonedObj !== obj; + } catch (error) { + // 捕获到异常,说明浏览器不支持结构化克隆 + return canStructuredClone = false; + } + } +} +``` + +在上面的代码中,我们定义了一个名为 `WorkerMessage` 的类,用于向 Worker 发送消息并处理返回结果。在该类的构造函数中,我们首先创建了一个 Worker 实例,并监听了 message 事件。我们使用一个 Map 对象来保存每个消息的回调函数,以便后续能够根据消息 ID 找到对应的回调函数。当从 Worker 返回的消息中包含了 ID 时,我们从 Map 中找到对应的回调函数,并根据消息的类型分别调用 resolve 和 reject 方法。在调用这些方法后,我们需要从 Map 中删除对应的回调函数,以避免内存泄漏。 + +在 `WorkerMessage` 类中,我们定义了一个 `postMessage` 方法,用于向 Worker 发送消息并处理返回结果。在该方法中,我们首先生成一个唯一的消息 ID,并构造了要发送给 Worker 的消息。然后我们使用 worker.postMessage 方法发送该消息,并返回一个 Promise 对象,以便业务层进行异步处理。在该 `Promise` 对象中,我们使用 callbacks.set 方法将该消息 ID 和对应的回调函数保存到 Map 中。 + +在 `WorkerMessage` 类中,我们还定义了一个 `terminate` 方法,用于关闭 Worker 实例。该方法会调用 `worker.terminate` 方法来关闭 Worker。 + +同时,我们使用 `isStructuredCloneSupported` 方法判断当前浏览器or环境是否支持结构化克隆,以外部 `canStructuredClone` 进行标记,并只在对象首次实例化的时候进行复制。如果当前浏览器不支持结构化克隆,则`postMessage`使用`JSON.stringify`转换成字符串。 + + +### 子进程封装类const res = this.config[type](canStructuredClone ? payload.payload : JSON.parse(payload.payload)); + +```js +export class childMessage { + constructor(self, config) { + this.self = self; + this.config = config; + } + + // 监听从主线程传来的消息 + addEventListener(callback) { + this.self.addEventListener('message', event => { + const {id, payload} = event.data; + const {type} = payload; + try { + const res = this.config[type](canStructuredClone ? payload.payload : JSON.parse(payload.payload)); + if (res instanceof Promise) { + res.then(data => { + this.self.postMessage({ + id, + type: 'SUCCESS', + payload: canStructuredClone ? data : JSON.stringify(data) + }); + }).catch(e => { + this.self.postMessage({id, type: 'ERROR', payload: e.toString()}); + }); + } else { + this.self.postMessage({ + id, + type: 'SUCCESS', + payload: canStructuredClone ? res : JSON.stringify(res) + }); + } + } catch (e) { + this.self.postMessage({id, type: 'ERROR', payload: e.toString()}); + } finally { + callback?.(); + } + }); + } +} +``` + +这个子进程消息传递的类,通过监听主线程发送的消息,并使用传入的 `config` 对象处理不同类型的消息,主进程通过指定执行函数的type,由worker来调用制定的函数。其中,`callback` 参数是一个可选的回调函数,在处理完一条消息后可以执行。其中`addEventListener(callback)`通过添加一个消息监听器,接收一个回调函数作为参数。在这个方法中,通过调用 `addEventListener` 方法,监听主线程发送过来的消息。然后对收到的消息进行处理,并将处理结果返回给主线程。如果结果是一个 Promise,则使用 `then` 方法处理异步结果,并将结果发送给主线程。如果结果是一个普通值,则直接将结果发送给主线程。在处理完一条消息后,会执行可选的 `callback` 回调函数。 + +同时也使用了`canStructuredClone`,如果浏览器支持结构化克隆(structured clone)算法,则直接将 payload 传给处理函数。否则,将 `payload` 进行 JSON 转换,并将其传给处理函数。 + +## 使用案例 + +### 主进程 + +```js +// 创建一个 WorkerMessage 实例,并指定要加载的 Worker 文件路径 +import {WorkerMessage} from "../index.js"; + +console.log('WorkerMessage start') + +const worker = new WorkerMessage('./worker.js'); + +// 发送一个消息给 Worker,并处理返回结果 +worker.postMessage({type: 'CALCULATE', payload: 10}).then( + result => { + console.log('计算结果:', result); + }, + error => { + console.error('计算出错:', error); + } +); + +// 关闭 Worker 实例 +// worker.terminate(); + +worker.postMessage({type: 'PLUS', payload: 10}).then( + result => { + console.log('计算结果:', result); + }, + error => { + console.error('计算出错:', error); + } +); + + +``` + +#### worker.js worker进程 + +```js +import {childMessage} from "../index.js"; + +// 执行计算的函数 +function doCalculate(num) { + // 这里可以执行一些复杂的计算任务 + return num * 2; +} + +function doPlus(num) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(num + 1); + }, 1000); + }); +} + +const child = new childMessage(self, { + CALCULATE: doCalculate, + PLUS: doPlus +}); + +// 起到分发执行的效果 +child.addEventListener(()=>{ + console.log('worker is listened'); +}); +``` + +### 输出 + +![image-20230420130706140](https://fs.lwmc.net/uploads/2023/04/1681967227502-202304201307354.webp) + +[Web Worker 常见使用问题和解决方案](/posts/JavaScript/Web%20Woker%20%E5%B8%B8%E8%A7%81%E4%BD%BF%E7%94%A8%E9%97%AE%E9%A2%98%E5%92%8C%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/) \ No newline at end of file diff --git "a/src/JavaScript/Web Woker \345\270\270\350\247\201\344\275\277\347\224\250\351\227\256\351\242\230\345\222\214\350\247\243\345\206\263\346\226\271\346\241\210.md" "b/src/JavaScript/Web Woker \345\270\270\350\247\201\344\275\277\347\224\250\351\227\256\351\242\230\345\222\214\350\247\243\345\206\263\346\226\271\346\241\210.md" index 27aa18ac7..f91c73af8 100644 --- "a/src/JavaScript/Web Woker \345\270\270\350\247\201\344\275\277\347\224\250\351\227\256\351\242\230\345\222\214\350\247\243\345\206\263\346\226\271\346\241\210.md" +++ "b/src/JavaScript/Web Woker \345\270\270\350\247\201\344\275\277\347\224\250\351\227\256\351\242\230\345\222\214\350\247\243\345\206\263\346\226\271\346\241\210.md" @@ -1,4 +1,4 @@ -# Web Woker 常见使用问题和解决方案 +# Web Worker 常见使用问题和解决方案 ## 问题汇总 @@ -253,4 +253,7 @@ worker2.onmessage = (event) => { `Atomics` API 则提供了一组原子操作,用于在共享的内存中进行同步和协调访问。它包括了一些常见的原子操作,例如原子加法、原子减法、原子比较和交换等,可以保证多个 Workers 在访问共享内存时的原子性操作,避免了数据竞争和不一致性的问题。 -通过使用 `SharedArrayBuffer` 和 `Atomics` API,多个 Workers 可以在共享的内存中进行高效的数据操作,从而实现更快速和高效的数据共享和通信,尤其对于大规模数据处理或复杂计算的场景下,可以显著提升性能。然而,需要注意的是,由于共享内存可能涉及到并发访问和竞态条件,使用 `SharedArrayBuffer` 和 `Atomics` API 需要谨慎处理,并遵循相关的安全性和最佳实践,以确保数据的正确性和一致性。 \ No newline at end of file +通过使用 `SharedArrayBuffer` 和 `Atomics` API,多个 Workers 可以在共享的内存中进行高效的数据操作,从而实现更快速和高效的数据共享和通信,尤其对于大规模数据处理或复杂计算的场景下,可以显著提升性能。然而,需要注意的是,由于共享内存可能涉及到并发访问和竞态条件,使用 `SharedArrayBuffer` 和 `Atomics` API 需要谨慎处理,并遵循相关的安全性和最佳实践,以确保数据的正确性和一致性。 + + +[Web Worker 与主线程通信场景下对postMessage的简洁封装](/posts/JavaScript/Web%20Woker%20%E4%B8%8E%E4%B8%BB%E7%BA%BF%E7%A8%8B%E9%80%9A%E4%BF%A1%E5%9C%BA%E6%99%AF%E4%B8%8B%E5%AF%B9postMessage%E7%9A%84%E7%AE%80%E6%B4%81%E5%B0%81%E8%A3%85/) \ No newline at end of file diff --git "a/src/JavaScript/WebPerf Snippets \342\200\224\342\200\224 \347\233\264\346\216\245\345\217\257\344\273\245\345\234\250\346\265\217\350\247\210\345\231\250\346\216\247\345\210\266\345\217\260\344\270\255\350\216\267\345\217\226\347\275\221\351\241\265\346\200\247\350\203\275\346\214\207\346\240\207\347\232\204\344\273\243\347\240\201\347\211\207\346\256\265.md" "b/src/JavaScript/WebPerf Snippets \342\200\224\342\200\224 \347\233\264\346\216\245\345\217\257\344\273\245\345\234\250\346\265\217\350\247\210\345\231\250\346\216\247\345\210\266\345\217\260\344\270\255\350\216\267\345\217\226\347\275\221\351\241\265\346\200\247\350\203\275\346\214\207\346\240\207\347\232\204\344\273\243\347\240\201\347\211\207\346\256\265.md" new file mode 100644 index 000000000..839d5a1a0 --- /dev/null +++ "b/src/JavaScript/WebPerf Snippets \342\200\224\342\200\224 \347\233\264\346\216\245\345\217\257\344\273\245\345\234\250\346\265\217\350\247\210\345\231\250\346\216\247\345\210\266\345\217\260\344\270\255\350\216\267\345\217\226\347\275\221\351\241\265\346\200\247\350\203\275\346\214\207\346\240\207\347\232\204\344\273\243\347\240\201\347\211\207\346\256\265.md" @@ -0,0 +1,176 @@ +分享社区里的精选的代码段列表,用于获取 Web 性能指标,可以非常方便地在浏览器控制台中使用,或在 Chrome DevTools 上用作运行的代码段。 + +![image.png](https://fs.lwmc.net/uploads/2024/03/1710168653296-202403112250650.webp) + +## 如何使用? + +所有代码段均在 Google Chrome 中进行测试,因此请使用此浏览器来确保正确的功能~ + +### 在 Chrome DevTools 中作为代码段运行 + +你可以在 Chrome DevTools 的 `Sources` 标签页中将 `webperf-snippets` 用作代码段。 + +1. 复制任何 WebPerf 代码段 +2. [打开 Chrome DevTools(在新选项卡中打开)](https://developer.chrome.com/docs/devtools/open/) +3. 选择`Sources`选项卡 +4. 选择 `Snippets` 子选项卡 +5.  [LCP(opens in a new tab)(在新选项卡中打开)](https://github.com/nucliweb/webperf-snippets#largest-contentful-paint-lcp)点击`New snippet`按钮,例如 LCP +![image.png](https://fs.lwmc.net/uploads/2024/03/1710168960032-202403112255758.webp) + +6. 命名代码段名称 LCP +7. 将复制的代码粘贴到右侧区域 +8. 运行代码段 `Ctrl + Enter` + + +![image.png](https://fs.lwmc.net/uploads/2024/03/1710169053011-202403112257200.webp) + +## 代码 + +### 累计布局偏移 Cumulative Layout Shift (CLS) + +当浏览器的焦点切换到另一个选项卡时,此脚本显示 CLS 值,因为 CLS 是在页面的生命周期内计算的。 + +```js +let cumulativeLayoutShiftScore = 0; +const observer = new PerformanceObserver((list) => { + for (const entry of list.getEntries()) { + if (!entry.hadRecentInput) { + cumulativeLayoutShiftScore += entry.value; + } + } +}); + +observer.observe({ type: "layout-shift", buffered: true }); + +document.addEventListener("visibilitychange", () => { + if (document.visibilityState === "hidden") { + observer.takeRecords(); + observer.disconnect(); + + console.log(`CLS: ${cumulativeLayoutShiftScore}`); + } +}); +``` + +### 最大内容绘制 Largest Contentful Paint (LCP) + +在控制台中列出最大的内容绘制,并在 LCP 元素周围添加一条绿色虚线。 + +```js +const po = new PerformanceObserver((list) => { + let entries = list.getEntries(); + + entries = dedupe(entries, "startTime"); + + entries.forEach((item, i) => { + console.dir(item); + console.log( + `${i + 1} current LCP item : ${item.element}: ${item.startTime}`, + ); + item.element ? (item.element.style = "border: 5px dotted lime;") : ""; + }); + + const lastEntry = entries[entries.length - 1]; + console.log(`LCP is: ${lastEntry.startTime}`); +}); + +po.observe({ type: "largest-contentful-paint", buffered: true }); + +function dedupe(arr, key) { + return [...new Map(arr.map((item) => [item[key], item])).values()]; +} +``` + +### 最大的内容绘制 LCP,Quick BPP(图像熵)检查 + +使用该脚本,可以获取站点上加载的所有图像的 BPP 列表。 + +> 忽略源为“data:image”的图片和第三方图片。 + +> 上下文:Chrome 112 对最大内容绘制指标进行更改,可忽略低熵图像 + +```js +console.table( + [...document.images] + .filter( + (img) => img.currentSrc != "" && !img.currentSrc.includes("data:image"), + ) + .map((img) => [ + img.currentSrc, + (performance.getEntriesByName(img.currentSrc)[0]?.encodedBodySize * 8) / + (img.width * img.height), + ]) + .filter((img) => img[1] !== 0), +); +``` + +### 最大内容渲染时间 Largest Contentful Paint Sub-Parts (LCP) + +```js +const LCP_SUB_PARTS = [ + "Time to first byte", + "Resource load delay", + "Resource load time", + "Element render delay", +]; + +new PerformanceObserver((list) => { + const lcpEntry = list.getEntries().at(-1); + const navEntry = performance.getEntriesByType("navigation")[0]; + const lcpResEntry = performance + .getEntriesByType("resource") + .filter((e) => e.name === lcpEntry.url)[0]; + + const ttfb = navEntry.responseStart; + const lcpRequestStart = Math.max( + ttfb, + lcpResEntry ? lcpResEntry.requestStart || lcpResEntry.startTime : 0, + ); + const lcpResponseEnd = Math.max( + lcpRequestStart, + lcpResEntry ? lcpResEntry.responseEnd : 0, + ); + const lcpRenderTime = Math.max( + lcpResponseEnd, + lcpEntry ? lcpEntry.startTime : 0, + ); + + LCP_SUB_PARTS.forEach((part) => performance.clearMeasures(part)); + + const lcpSubPartMeasures = [ + performance.measure(LCP_SUB_PARTS[0], { + start: 0, + end: ttfb, + }), + performance.measure(LCP_SUB_PARTS[1], { + start: ttfb, + end: lcpRequestStart, + }), + performance.measure(LCP_SUB_PARTS[2], { + start: lcpRequestStart, + end: lcpResponseEnd, + }), + performance.measure(LCP_SUB_PARTS[3], { + start: lcpResponseEnd, + end: lcpRenderTime, + }), + ]; + + // Log helpful debug information to the console. + console.log("LCP value: ", lcpRenderTime); + console.log("LCP element: ", lcpEntry.element, lcpEntry?.url); + console.table( + lcpSubPartMeasures.map((measure) => ({ + "LCP sub-part": measure.name, + "Time (ms)": measure.duration, + "% of LCP": `${ + Math.round((1000 * measure.duration) / lcpRenderTime) / 10 + }%`, + })), + ); +}).observe({ type: "largest-contentful-paint", buffered: true }); +``` + +## 参考 + +- [WebPerf Snippets – Nextra](https://webperf-snippets.nucliweb.net/) \ No newline at end of file diff --git "a/src/JavaScript/\344\272\206\350\247\243MutationObserver\347\232\204\344\275\277\347\224\250\344\273\245\345\217\212\345\234\250Vue3\344\270\255\347\232\204\344\275\277\347\224\250\346\241\210\344\276\213.md" "b/src/JavaScript/\344\272\206\350\247\243MutationObserver\347\232\204\344\275\277\347\224\250\344\273\245\345\217\212\345\234\250Vue3\344\270\255\347\232\204\344\275\277\347\224\250\346\241\210\344\276\213.md" new file mode 100644 index 000000000..99906adf5 --- /dev/null +++ "b/src/JavaScript/\344\272\206\350\247\243MutationObserver\347\232\204\344\275\277\347\224\250\344\273\245\345\217\212\345\234\250Vue3\344\270\255\347\232\204\344\275\277\347\224\250\346\241\210\344\276\213.md" @@ -0,0 +1,85 @@ +# MutationObserver的使用以及在Vue3中的使用案例 + +MutationObserver 是一种浏览器提供的 API,可以在 DOM 的一部分改变时通知我们。在本博客中,我们将逐步讨论如何在常规 JavaScript 和 Vue3 中使用 MutationObserver,并提供一些实际使用案例。 + +## MutationObserver 介绍 + +MutationObserver 是 JavaScript 中允许我们监视 DOM 变化的一种 API。当被观察的 DOM 中发生任何变化时,它就会通知我们。这可以帮助我们更轻松地处理动态 DOM 变化的情况。 + +基本上,MutationObserver 类的实例用于对 DOM 文档进行监听,当被监听的 DOM 树内容发生任何变动时,包括子树的修改、节点属性的更改,或者文本内容的变化,都能及时触发回调函数。 + +## 如何使用 MutationObserver + +在使用 MutationObserver 之前,我们首先需要创建一个新的 `MutationObserver` 实例。然后,我们需要指定一个回调函数作为其参数,该函数将在 DOM 改变时执行。 + +```javascript +var observer = new MutationObserver(callback); +``` + +这个 `callback` 函数接收两个参数:一个是 `mutations` 数组,用于保存所有发生的变化的列表;另一个是观察者对象本身,可以用于停止或开始观察。 + +```javascript +function callback(mutations, observer) { + mutations.forEach(mutation => { + console.log(mutation); + }); +} +``` + +然后,我们需要选择要观察的 DOM 元素,并指定要观察的变化类型。`observe()` 方法接受两个参数:要观察的 DOM 节点和一个用于指定哪些变化将被观察的配置对象。 + +```javascript +var targetNode = document.getElementById('some-id'); +observer.observe(targetNode, { childList: true, subtree: true }); +``` + +在上述例子中,配置对象 `{ childList: true, subtree: true }` 表示我们将观察到目标节点的子节点的变化,以及子节点树下的所有更深层次的变化。 + +然后,我们可以禁用或启用观察器。例如,`disconnect()` 方法可以用来停止观察: + +```javascript +observer.disconnect(); +``` + +再次启动观察,只需再次调用 `observe()` 方法。 + +## Vue3 中的使用案例 + +在 Vue3 中使用 MutationObserver 与在普通 JavaScript 中使用 MutationObserver 相同。考虑到 Vue3 的一些新特性,实例使用可能会略有不同。看一下下面的例子: + +```javascript +import { onMounted, onUnmounted } from 'vue'; + +export default { + setup() { + const targetNode = document.getElementById('some-id'); + const config = { childList: true, subtree: true }; + + const observer = new MutationObserver((mutations, observer) => { + mutations.forEach(mutation => { + console.log(mutation); + }); + }); + + onMounted(() => { + observer.observe(targetNode, config); + }); + + onUnmounted(() => { + observer.disconnect(); + }); + }, +}; +``` + +在这个 Vue3 示例中,我们首先导入了 `onMounted` 和 `onUnmounted` 生命周期钩子。然后在 `setup` 函数中创建了一个 `MutationObserver` 实例。 + +在组件加载完成(`onMounted`)时,我们开始对目标节点进行观察。然后,当组件卸载(`onUnmounted`)时,我们停止了观察。 + +这样,就可以在 Vue3 组件中有效地使用 MutationObserver 来观察和响应 DOM 的变化。 + +## 结论 + +MutationObserver 是一个强大的 API,允许我们观察 DOM 的变化。无论是在普通的 JavaScript 中还是在 Vue3 中,都可以有效利用它来增强交互和动态响应。 + +但请注意,尽管 MutationObserver 是一个有用的工具,却不应该过度使用它。过度监测 DOM 变化可能会导致性能问题。因此,使用时要根据真正需要来进行合理配置。 \ No newline at end of file diff --git "a/src/JavaScript/\344\275\277\347\224\250Node.js\343\200\201Express.js\343\200\201TS\345\206\231\344\270\252\347\256\200\345\215\225\347\232\204\345\233\276\345\272\212\350\204\232\346\234\254\357\274\210\344\270\200\357\274\211.md" "b/src/JavaScript/\344\275\277\347\224\250Node.js\343\200\201Express.js\343\200\201TS\345\206\231\344\270\252\347\256\200\345\215\225\347\232\204\345\233\276\345\272\212\350\204\232\346\234\254\357\274\210\344\270\200\357\274\211.md" index f4efa8f48..237388bc0 100644 --- "a/src/JavaScript/\344\275\277\347\224\250Node.js\343\200\201Express.js\343\200\201TS\345\206\231\344\270\252\347\256\200\345\215\225\347\232\204\345\233\276\345\272\212\350\204\232\346\234\254\357\274\210\344\270\200\357\274\211.md" +++ "b/src/JavaScript/\344\275\277\347\224\250Node.js\343\200\201Express.js\343\200\201TS\345\206\231\344\270\252\347\256\200\345\215\225\347\232\204\345\233\276\345\272\212\350\204\232\346\234\254\357\274\210\344\270\200\357\274\211.md" @@ -1,3 +1,5 @@ +# 使用 Node.js、Express.js、TS 写个简单的图床脚本(一) + 在这篇博客文章中,我将介绍如何使用 TypeScript 和 Express 框架来编写一个简单的图床脚本,可以将本地图片上传到服务器,并返回图片的 URL。这样,你就可以在 Markdown 文档中方便地引用图片,而不用担心图片的存储和管理问题。 我将最新源码放在了[MoMeak9/img-service: 简单图床脚本](https://github.com/MoMeak9/img-service#readme),但是这个是最终版本,添加了很多新的在后续文章才提到的功能,而本文的完整代码我放在了文末,请客官自行取用。 @@ -237,4 +239,4 @@ const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`server started at http://localhost:${port}`); }); -``` \ No newline at end of file +``` diff --git "a/src/JavaScript/\344\275\277\347\224\250Node.js\343\200\201pm2\345\222\214ssh2\346\250\241\345\235\227\345\256\236\347\216\260\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204Node.js\351\241\271\347\233\256\351\203\250\347\275\262\350\204\232\346\234\254.md" "b/src/JavaScript/\344\275\277\347\224\250Node.js\343\200\201pm2\345\222\214ssh2\346\250\241\345\235\227\345\256\236\347\216\260\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204Node.js\351\241\271\347\233\256\351\203\250\347\275\262\350\204\232\346\234\254.md" index dd5c6dc27..cf909cd40 100644 --- "a/src/JavaScript/\344\275\277\347\224\250Node.js\343\200\201pm2\345\222\214ssh2\346\250\241\345\235\227\345\256\236\347\216\260\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204Node.js\351\241\271\347\233\256\351\203\250\347\275\262\350\204\232\346\234\254.md" +++ "b/src/JavaScript/\344\275\277\347\224\250Node.js\343\200\201pm2\345\222\214ssh2\346\250\241\345\235\227\345\256\236\347\216\260\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204Node.js\351\241\271\347\233\256\351\203\250\347\275\262\350\204\232\346\234\254.md" @@ -1,3 +1,5 @@ +# 使用 Node.js、pm2 和 ssh2 模块实现一个简单的 Node.js 项目部署脚本 + 本文将介绍如何使用Node.js和ssh2模块实现一个简单的部署脚本,将本地的项目文件上传到远程服务器上。我们将使用dotenv模块来管理环境变量,以及child_process模块来执行命令行操作。 首先,我们需要安装ssh2和dotenv模块: @@ -260,4 +262,4 @@ conn.on('error', (err) => { conn.on('end', () => { console.log('SSH连接已断开'); }); -``` \ No newline at end of file +``` diff --git "a/src/JavaScript/\345\211\215\347\253\257 SSO \345\215\225\347\202\271\347\231\273\345\205\245\346\226\271\346\241\210.md" "b/src/JavaScript/\345\211\215\347\253\257 SSO \345\215\225\347\202\271\347\231\273\345\205\245\346\226\271\346\241\210.md" index e3d21d9c9..6d27332e7 100644 --- "a/src/JavaScript/\345\211\215\347\253\257 SSO \345\215\225\347\202\271\347\231\273\345\205\245\346\226\271\346\241\210.md" +++ "b/src/JavaScript/\345\211\215\347\253\257 SSO \345\215\225\347\202\271\347\231\273\345\205\245\346\226\271\346\241\210.md" @@ -1,4 +1,4 @@ - +# 前端 SSO 单点登入方案 @@ -8,4 +8,4 @@ - [前端常见登录实现方案 + 单点登录方案 - 掘金](https://juejin.cn/post/6933115003327217671) - [前端关于单点登录SSO的知识 - 掘金](https://juejin.cn/post/6844903664985866253) - [localstorage的跨域存储方案 - 简书](https://www.jianshu.com/p/e86d92aeae69) -- [localStorage跨域存储,实战篇 - 掘金](https://juejin.cn/post/6844904112165748743) \ No newline at end of file +- [localStorage跨域存储,实战篇 - 掘金](https://juejin.cn/post/6844904112165748743) diff --git "a/src/JavaScript/\345\211\215\347\253\257\346\250\241\345\235\227\357\274\232CJS, AMD, UMD, ESM, System \345\222\214 IIFE.md" "b/src/JavaScript/\345\211\215\347\253\257\346\250\241\345\235\227\345\210\206\347\261\273.md" similarity index 98% rename from "src/JavaScript/\345\211\215\347\253\257\346\250\241\345\235\227\357\274\232CJS, AMD, UMD, ESM, System \345\222\214 IIFE.md" rename to "src/JavaScript/\345\211\215\347\253\257\346\250\241\345\235\227\345\210\206\347\261\273.md" index 03e9a81db..fbf12da43 100644 --- "a/src/JavaScript/\345\211\215\347\253\257\346\250\241\345\235\227\357\274\232CJS, AMD, UMD, ESM, System \345\222\214 IIFE.md" +++ "b/src/JavaScript/\345\211\215\347\253\257\346\250\241\345\235\227\345\210\206\347\261\273.md" @@ -1,4 +1,4 @@ -# 前端模块:CJS, AMD, UMD, ESM, System 和 IIFE +# 前端模块分类 现代 Javascript 项目需要用打包工具来将小段代码编译成库或者应用程序那种更大更复杂的东西。流行的打包器有webpack、Rollup、Parcel、RequireJS 和 Browserify。它们将 JavaScript 代码转换为可以作为一个 bundle 加载的模块。 diff --git "a/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/Atomics API.md" "b/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/Atomics API.md" new file mode 100644 index 000000000..918f537ac --- /dev/null +++ "b/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/Atomics API.md" @@ -0,0 +1 @@ +# Atomics API diff --git "a/src/JavaScript/ES 12 \346\226\260\347\211\271\346\200\247.md" "b/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/ES 12 \346\226\260\347\211\271\346\200\247.md" similarity index 100% rename from "src/JavaScript/ES 12 \346\226\260\347\211\271\346\200\247.md" rename to "src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/ES 12 \346\226\260\347\211\271\346\200\247.md" diff --git "a/src/JavaScript/ES5\343\200\2016 \346\214\207\345\257\274\350\247\204\350\214\203.md" "b/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/ES5\343\200\2016 \346\214\207\345\257\274\350\247\204\350\214\203.md" similarity index 100% rename from "src/JavaScript/ES5\343\200\2016 \346\214\207\345\257\274\350\247\204\350\214\203.md" rename to "src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/ES5\343\200\2016 \346\214\207\345\257\274\350\247\204\350\214\203.md" diff --git "a/src/JavaScript/IIFE \347\253\213\345\215\263\346\211\247\350\241\214\345\207\275\346\225\260\350\241\250\350\276\276\345\274\217.md" "b/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/IIFE \347\253\213\345\215\263\346\211\247\350\241\214\345\207\275\346\225\260\350\241\250\350\276\276\345\274\217.md" similarity index 100% rename from "src/JavaScript/IIFE \347\253\213\345\215\263\346\211\247\350\241\214\345\207\275\346\225\260\350\241\250\350\276\276\345\274\217.md" rename to "src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/IIFE \347\253\213\345\215\263\346\211\247\350\241\214\345\207\275\346\225\260\350\241\250\350\276\276\345\274\217.md" diff --git "a/src/JavaScript/JS\345\236\203\345\234\276\345\233\236\346\224\266\346\234\272\345\210\266.md" "b/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/JS\345\236\203\345\234\276\345\233\236\346\224\266\346\234\272\345\210\266.md" similarity index 100% rename from "src/JavaScript/JS\345\236\203\345\234\276\345\233\236\346\224\266\346\234\272\345\210\266.md" rename to "src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/JS\345\236\203\345\234\276\345\233\236\346\224\266\346\234\272\345\210\266.md" diff --git "a/src/JavaScript/JavaScript \350\277\233\351\230\266\346\225\264\345\220\210.md" "b/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/JavaScript \350\277\233\351\230\266\346\225\264\345\220\210.md" similarity index 100% rename from "src/JavaScript/JavaScript \350\277\233\351\230\266\346\225\264\345\220\210.md" rename to "src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/JavaScript \350\277\233\351\230\266\346\225\264\345\220\210.md" diff --git "a/src/JavaScript/js\344\270\255==\344\270\216===\347\232\204\345\214\272\345\210\253.md" "b/src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/js\344\270\255==\344\270\216===\347\232\204\345\214\272\345\210\253.md" similarity index 100% rename from "src/JavaScript/js\344\270\255==\344\270\216===\347\232\204\345\214\272\345\210\253.md" rename to "src/JavaScript/\345\237\272\347\241\200\347\237\245\350\257\206/js\344\270\255==\344\270\216===\347\232\204\345\214\272\345\210\253.md" diff --git "a/src/JavaScript/\345\272\223/JS\344\273\243\347\240\201\346\267\267\346\267\206\345\231\250\357\274\232JavaScript obfuscator \350\256\251\344\275\240\347\232\204\344\273\243\347\240\201\347\234\213\350\265\267\346\235\245\350\256\251\344\272\272\347\227\233\350\213\246.md" "b/src/JavaScript/\345\272\223/JS\344\273\243\347\240\201\346\267\267\346\267\206\345\231\250\357\274\232JavaScript obfuscator \350\256\251\344\275\240\347\232\204\344\273\243\347\240\201\347\234\213\350\265\267\346\235\245\350\256\251\344\272\272\347\227\233\350\213\246.md" new file mode 100644 index 000000000..566f764fb --- /dev/null +++ "b/src/JavaScript/\345\272\223/JS\344\273\243\347\240\201\346\267\267\346\267\206\345\231\250\357\274\232JavaScript obfuscator \350\256\251\344\275\240\347\232\204\344\273\243\347\240\201\347\234\213\350\265\267\346\235\245\350\256\251\344\272\272\347\227\233\350\213\246.md" @@ -0,0 +1,373 @@ + + +在开发 JavaScript 应用程序时,保护源代码免受未经授权的访问和修改是一个重要的考虑因素。这就是 JavaScript Obfuscator 发挥作用的地方。本文将深入探讨 JavaScript Obfuscator 的原理和使用方法,帮助开发者有效地保护他们的代码。 + +## 什么是 JavaScript Obfuscator? + +![image.png](https://raw.githubusercontent.com/javascript-obfuscator/javascript-obfuscator/master/images/logo.png) + + +JavaScript Obfuscator 是一个强大的工具,它通过转换和混淆代码来帮助开发者保护他们的 JavaScript 源代码。这种转换不会改变程序的执行方式,但会使代码难以理解和修改,从而为源代码提供了一层保护。 + +## 它是如何工作? + +JavaScript Obfuscator 通过以下几种方式工作来混淆代码: + +- **变量名和函数名替换**:将原始的变量名和函数名替换为难以理解的字符序列。 +- **字符串混淆**:将字符串转换为不易读的格式,例如使用 ASCII 码表示。 +- **控制流平坦化**:改变代码的控制流程,使逻辑难以跟踪。 +- **插入死代码**:在代码中插入不会执行的代码段,增加分析和理解的难度。 + +### 执行过程 + +1. **解析**:首先,JavaScript Obfuscator读取原始的JavaScript代码,然后使用解析器将代码转换成抽象语法树(AST)。AST是一种树状结构,用于表示程序的语法结构,每个节点代表代码中的一个构造(如变量声明、函数调用等)。 + +2. **变量重命名**:在AST的基础上,工具会对变量和函数名进行重命名。它会用短序列或无意义的名称来替换原有的名称,从而使得代码难以阅读和理解。 + +3. **字符串加密**:JavaScript Obfuscator会识别代码中的字符串,并将它们加密或转换成一种不易直接理解的形式。在运行时,这些字符串会被解密或转换回原始内容,但在源代码中它们看起来是混乱的。 + +4. **控制流扁平化**:该工具会改变代码的执行流程,例如,将直线执行的代码转换成使用条件语句和跳转的形式,这使得静态分析变得更加困难。 + +5. **死代码注入**:为了进一步迷惑分析者,JavaScript Obfuscator可以在代码中注入无用的、不会被执行的代码段。这些代码看起来可能和正常代码无异,但实际上是为了增加分析的难度。 + +6. **代码转换**:除了上述操作外,JavaScript Obfuscator还会应用多种代码转换技术,如将数组访问转换为复杂的函数调用,或者使用其他方式改变代码的结构,而不改变其功能。 + +7. **生成**:最后,工具会根据处理后的AST生成新的JavaScript代码。这段代码在功能上与原始代码相同,但在形式上大为不同,难以被人直接理解。 + +通过这些步骤,JavaScript Obfuscator 能够有效地保护 JavaScript 代码,防止未经授权的复制、修改和逆向工程。需要注意的是,虽然代码混淆可以大大增加代码被理解和修改的难度,但它并不能完全防止这些行为。混淆是代码保护策略中的一环,应与其他安全措施(如代码签名、许可证检查等)结合使用,以提高整体的安全性。 + +## 快速开始 + +### 在 `Node. js` 中使用 + +首先,你需要通过 npm 安装 JavaScript Obfuscator: + +```bash +npm install --save-dev javascript-obfuscator +``` + +然后,你可以在你的 `Node.js` 项目中如下使用它: + +```javascript +var JavaScriptObfuscator = require('javascript-obfuscator'); +var obfuscationResult = JavaScriptObfuscator.obfuscate( + `(function(){ + var variable1 = '5' - 3; + var variable2 = '5' + 3; + // 更多代码... + })();`, + { + compact: false, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1, + numbersToExpressions: true, + simplify: true, + // 更多配置选项... + } +); +console.log(obfuscationResult.getObfuscatedCode()); +``` + +### 在浏览器中使用 + +你也可以直接在浏览器中使用 JavaScript Obfuscator,通过 CDN 引入: + +```html + +``` + +然后,你可以在浏览器端脚本中使用它来混淆代码: + +```javascript +var obfuscationResult = JavaScriptObfuscator.obfuscate( + // 你的JavaScript代码... +); +console.log(obfuscationResult.getObfuscatedCode()); +``` + +## 常用配置项 + +JavaScript Obfuscator 提供了丰富的配置选项,让开发者可以根据自己的需求进行定制化的代码混淆。下面是一些常见的配置项: + +- **compact**:类型为 `boolean`,默认值为 `true`。当设置为 `true` 时,生成的代码会被压缩成一行,有助于减少代码体积。 +- **controlFlowFlattening**:类型为 `boolean`,默认值为 `false`。启用控制流平坦化可以使代码逻辑更加复杂,但可能会影响运行性能。 +- **controlFlowFlatteningThreshold**:类型为 `number`,默认值为 `0.75`。这个阈值决定了哪些部分的代码会被控制流平坦化处理,范围从 `0` 到 `1`。 +- **deadCodeInjection**:类型为 `boolean`,默认值为 `false`。启用后,会在代码中插入不会被执行的死代码,增加反向工程的难度。 +- **deadCodeInjectionThreshold**:类型为 `number`,默认值为 `0.4`。这个阈值决定了有多少比例的代码会被插入死代码。 +- **debugProtection**:类型为 `boolean`,默认值为 `false`。启用后,会使得浏览器的开发者工具变得不稳定,防止代码被调试。 +- **stringArray**:类型为 `boolean`,默认值为 `true`。启用后,会将字符串放入一个特殊的数组中,通过索引访问,以增加代码的混淆程度。 +- **stringArrayEncoding**:类型为 `string` 或 `boolean`,可以是 `none`、`base64` 或 `rc4`,用于设置字符串数组的编码方式。 + +### 预设配置模板 + +**默认预设,高性能** + +```js +{ + compact: true, + controlFlowFlattening: false, + deadCodeInjection: false, + debugProtection: false, + debugProtectionInterval: 0, + disableConsoleOutput: false, + identifierNamesGenerator: 'hexadecimal', + log: false, + numbersToExpressions: false, + renameGlobals: false, + selfDefending: false, + simplify: true, + splitStrings: false, + stringArray: true, + stringArrayCallsTransform: false, + stringArrayCallsTransformThreshold: 0.5, + stringArrayEncoding: [], + stringArrayIndexShift: true, + stringArrayRotate: true, + stringArrayShuffle: true, + stringArrayWrappersCount: 1, + stringArrayWrappersChainedCalls: true, + stringArrayWrappersParametersMaxCount: 2, + stringArrayWrappersType: 'variable', + stringArrayThreshold: 0.75, + unicodeEscapeSequence: false +} +``` + +**高混淆,低性能** + +性能将比没有混淆时慢得多,并且代码体积也比较大 + +```js +{ + compact: true, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1, + deadCodeInjection: true, + deadCodeInjectionThreshold: 1, + debugProtection: true, + debugProtectionInterval: 4000, + disableConsoleOutput: true, + identifierNamesGenerator: 'hexadecimal', + log: false, + numbersToExpressions: true, + renameGlobals: false, + selfDefending: true, + simplify: true, + splitStrings: true, + splitStringsChunkLength: 5, + stringArray: true, + stringArrayCallsTransform: true, + stringArrayEncoding: ['rc4'], + stringArrayIndexShift: true, + stringArrayRotate: true, + stringArrayShuffle: true, + stringArrayWrappersCount: 5, + stringArrayWrappersChainedCalls: true, + stringArrayWrappersParametersMaxCount: 5, + stringArrayWrappersType: 'function', + stringArrayThreshold: 1, + transformObjectKeys: true, + unicodeEscapeSequence: false +} +``` + +**中等混淆,最佳性能** + +性能将比没有混淆时慢 + +```js +{ + compact: true, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 0.75, + deadCodeInjection: true, + deadCodeInjectionThreshold: 0.4, + debugProtection: false, + debugProtectionInterval: 0, + disableConsoleOutput: true, + identifierNamesGenerator: 'hexadecimal', + log: false, + numbersToExpressions: true, + renameGlobals: false, + selfDefending: true, + simplify: true, + splitStrings: true, + splitStringsChunkLength: 10, + stringArray: true, + stringArrayCallsTransform: true, + stringArrayCallsTransformThreshold: 0.75, + stringArrayEncoding: ['base64'], + stringArrayIndexShift: true, + stringArrayRotate: true, + stringArrayShuffle: true, + stringArrayWrappersCount: 2, + stringArrayWrappersChainedCalls: true, + stringArrayWrappersParametersMaxCount: 4, + stringArrayWrappersType: 'function', + stringArrayThreshold: 0.75, + transformObjectKeys: true, + unicodeEscapeSequence: false +} +``` + +**低混淆,高性能** + +性能将处于相对正常的水平 + +```js +{ + compact: true, + controlFlowFlattening: false, + deadCodeInjection: false, + debugProtection: false, + debugProtectionInterval: 0, + disableConsoleOutput: true, + identifierNamesGenerator: 'hexadecimal', + log: false, + numbersToExpressions: false, + renameGlobals: false, + selfDefending: true, + simplify: true, + splitStrings: false, + stringArray: true, + stringArrayCallsTransform: false, + stringArrayEncoding: [], + stringArrayIndexShift: true, + stringArrayRotate: true, + stringArrayShuffle: true, + stringArrayWrappersCount: 1, + stringArrayWrappersChainedCalls: true, + stringArrayWrappersParametersMaxCount: 2, + stringArrayWrappersType: 'variable', + stringArrayThreshold: 0.75, + unicodeEscapeSequence: false +} +``` + +## 在打包工具中使用 JavaScript Obfuscator + +### Webpack + +如果你使用的是 Webpack,可以通过 `webpack-obfuscator` 插件来集成 JavaScript Obfuscator。首先,安装这个插件: + +```bash +npm install --save-dev webpack-obfuscator +``` + +**插件使用:** + +在的 `webpack.config.js` 文件中配置这个插件: + +```javascript +const JavaScriptObfuscator = require('webpack-obfuscator'); + +module.exports = { + // 其他配置... + plugins: [ + new JavaScriptObfuscator({ + rotateUnicodeArray: true + // 其他混淆选项... + }, ['excluded_bundle_name.js']) + ] +}; +``` + +**加载器使用:** + +在 webpack 配置中定义一个规则,并使用混淆器-loader 作为模块的最后一个加载器。你可以添加 **enforce: 'post'** 标志,以确保在正常加载器之后调用加载器: + +```js +var WebpackObfuscator = require('webpack-obfuscator'); + +// webpack loader rules array +rules: [ + { + test: /\.js$/, + exclude: [ + path.resolve(__dirname, 'excluded_file_name.js') + ], + enforce: 'post', + use: { + loader: WebpackObfuscator.loader, + options: { + rotateStringArray: true + } + } + } +] +``` + +### Rollup + +对于使用 Rollup 的项目,可以通过 `rollup-plugin-javascript-obfuscator` 插件来集成。首先,安装这个插件: + +```bash +npm install --save-dev rollup-plugin-javascript-obfuscator +``` + +然后,在 `rollup.config.js` 中配置这个插件: + +```javascript +import javascriptObfuscator from 'rollup-plugin-javascript-obfuscator'; + +export default { + // 其他配置... + plugins: [ + javascriptObfuscator({ + compact: true, + controlFlowFlattening: true + // 其他混淆选项... + }) + ] +}; +``` + +### Gulp + +如果你的项目使用 Gulp,可以通过 `gulp-javascript-obfuscator` 插件来集成。首先,安装这个插件: + +```bash +npm install --save-dev gulp-javascript-obfuscator +``` + +然后,配置你的 `gulpfile.js` 使用这个插件: + +```javascript +const gulp = require('gulp'); +const javascriptObfuscator = require('gulp-javascript-obfuscator'); + +gulp.task('obfuscate', function () { + return gulp.src('src/*.js') + .pipe(javascriptObfuscator({ + compact: true, + controlFlowFlattening: true + // 其他混淆选项... + })) + .pipe(gulp.dest('dist')); +}); +``` + +## Why use ? + +普通的代码压缩工具(如 UglifyJS、Terser 等)主要目的是减少代码体积,提高加载速度,它们通过移除空白字符、注释、重命名变量(通常是缩短变量名)等方式来实现。虽然这些操作可以使代码难以阅读,但主要是从性能优化的角度出发,并不专注于增加代码的安全性或防止代码被逆向工程分析。 + +而JavaScript Obfuscator 提供的功能远超普通的代码压缩工具,它专门设计来保护 JavaScript 代码,防止被盗用或逆向工程。以下是它与普通代码压缩工具的主要区别: + +1. **变量重命名**:JavaScript Obfuscator 不仅重命名变量,还可以使用更复杂的名称或生成无意义的名称,使得代码逻辑难以理解。 + +2. **字符串提取和加密**:将代码中的字符串提取出来,并进行加密,只有在运行时才解密,增加了逆向工程的难度。 + +3. **死代码注入**:在代码中注入不会执行的代码段,这些代码段看起来像是正常的代码,但实际上是为了迷惑逆向工程师。 + +4. **控制流平坦化**:改变代码的执行流程,使得代码的逻辑结构变得复杂,难以通过静态分析来理解程序的行为。 + +5. **多种代码转换**:应用多种代码转换技术,如将数组访问转换为复杂的函数调用,进一步增加代码的复杂性。 + +这些特性使得 JavaScript Obfuscator 不仅能压缩代码,还能大幅度提高代码的保护级别,使得即使是有经验的开发者或黑客也难以理解和修改被混淆的代码。因此,当需要保护 JavaScript 代码不被轻易理解和修改时,仅仅使用普通的代码压缩工具是不够的,需要使用专门的代码混淆工具如 JavaScript Obfuscator。 + +## 参考 + +- [JavaScript Obfuscator Tool](https://obfuscator.io/) +- [javascript-obfuscator/javascript-obfuscator: A powerful obfuscator for JavaScript and Node.js](https://github.com/javascript-obfuscator/javascript-obfuscator) +- [javascript-obfuscator/webpack-obfuscator: javascript-obfuscator plugin for Webpack](https://github.com/javascript-obfuscator/webpack-obfuscator) + diff --git "a/src/JavaScript/\345\272\223/Quill\345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\275\277\347\224\250 - \351\253\230\345\272\246\350\207\252\345\256\232\344\271\211\347\216\260\344\273\243 Web \345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250.md" "b/src/JavaScript/\345\272\223/Quill\345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\275\277\347\224\250 - \351\253\230\345\272\246\350\207\252\345\256\232\344\271\211\347\216\260\344\273\243 Web \345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250.md" new file mode 100644 index 000000000..311fca667 --- /dev/null +++ "b/src/JavaScript/\345\272\223/Quill\345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250\344\275\277\347\224\250 - \351\253\230\345\272\246\350\207\252\345\256\232\344\271\211\347\216\260\344\273\243 Web \345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250.md" @@ -0,0 +1,141 @@ + + +Quill富文本编辑器在当今数字内容创作领域中扮演着至关重要的角色。随着网络技术的不断进步和内容营销的普及,人们对在线编辑工具的需求日益增长。Quill富文本编辑器以其强大的功能、灵活的定制性以及用户友好的界面,在众多富文本编辑器中脱颖而出,成为了许多博客作者和内容创作者的首选工具。 + +本文将深入探讨Quill富文本编辑器的特点、使用方法以及在撰写博客文章时的优势,旨在为广大写作者提供一个全面的使用指南。 + +### Quill富文本编辑器简介 + +Quill是一款开源的富文本编辑器,由Jason Chen和Byron Milligan于2012年共同开发。它基于Web标准,支持所有现代浏览器,并且可以轻松集成到现有的项目中。Quill提供了一系列的API,允许开发者灵活地定制编辑器的功能,以满足不同用户的需求。它的设计理念是提供一个轻量级、模块化的编辑器,同时保持易用性和可访问性。 + +### Quill富文本编辑器的特点 + +1. **模块化设计**:Quill采用模块化的设计理念,用户可以根据需求添加或移除功能模块,如工具栏、剪贴板、历史记录等。 +2. **丰富的格式化选项**:Quill支持多种文本格式化选项,包括字体样式、大小、颜色、列表、引用、链接、图片、视频等。 +3. **易于定制的UI**:编辑器的用户界面可以根据个人喜好或品牌风格进行定制,以提供独特的用户体验。 +4. **跨平台兼容性**:Quill能够在各种设备和浏览器上无缝运行,确保用户可以随时随地进行内容创作。 +5. **强大的API**:Quill提供了一套强大的API,使得开发者可以轻松实现复杂的功能,如内容验证、自动保存、协作编辑等。 + +## 快速开始 + +最好的开发方法就是尝试一个简单的例子。Quill使用DOM元素初始化一个编辑器。这个元素的内容将成为Quill的初始化内容。 + +```html + + + + + +
+

Hello World!

+

Some initial bold text

+


+
+ + + + + + +``` + +这个就是一个简单例子的全部内容。Quill的真正魔力来自于它的灵活性和可扩展性。你能够查看网站上所有的演示或者直接进入[Interactive Playground](https://quilljs.com/playground/)来了解更多。要深入了解,请查看[如何自定义Quill](https://quilljs.com/guides/how-to-customize-quill/)。 + +## 配置项 + +Quill允许通过多种方式来定制它以适应你的需求。本节致力于调整现有的功能。请参阅[模块(Modules)]()部分添加新功能和[主题(Themes)]()添加主题。 + +## 容器 + +Quill需要在编辑器中追加一个容器。你可以传入css选择器或者DOM对象。 + +```js +var editor = new Quill('.editor'); // 将是使用第一个匹配的元素 +``` + +```js +var container = document.getElementById('editor'); +var editor = new Quill(container); +``` + +```js +var container = $('.editor').get(0); +var editor = new Quill(container); +``` + +## 配置项 + +通过传入一个配置项对象来配置Quill。 + +```js +var options = { + debug: 'info', + modules: { + toolbar: '#toolbar' + }, + placeholder: 'Compose an epic...', + readOnly: true, + theme: 'snow' +}; +var editor = new Quill('#editor', options); +``` + +以下的配置参数会被识别: + +**bounds** + +- Default:`document.body` + +DOM元素或者一个DOM元素的css选择器,其中编辑器的UI元素(例如:tooltips)应该被包含其中。目前,只考虑左右边界。 + +**debug** + +- Default:`warn` + +debug的开关。注意:`debug`是一个静态方法并且会影响同一个页面的其它编辑器实例。只用警告和错误信息是默认启用的。 + +**formats** + +- Default:All formats + +在编辑器中允许的格式白名单。请参阅[格式化]()以获取完整列表。 + +**modules** + +包含的模块和相应的选项。请参阅[模块]()以获取更多信息。 + +**placeholder** + +- Default:none + +编辑器为空时显示的占位符。 + +**readOnly** + +- Default:`false` + +是否将编辑器是实例设置为只读模式。 + +**scrollingContainer** + +- Default:`null` + +DOM元素或者一个DOM元素的css选择器,指定改容器具有滚动条(例如:`overflow-y: auto`),如果已经被用户自定义了默认的`ql-editor`。当Quill设置为自动适应高度是,需要修复滚动跳转的错误,并且另一个父容器负责滚动。 + +> 注意:当使用body时,一些浏览器仍然会跳转。可以使用一个单独的div子节点来避免这种情况。 + +**strict** + +- Default:`true` + +根据对semver的严格解释,一些改进和修改将保证主要版本的碰撞。为了防止扩大版本号的微小变化,它们被这个严格的标志禁止。具体的变化可以在Changelog中找到并搜索“strict”。将其设置为false可能会影响将来的改进。 + +**theme** + +使用的主题名称。内置的选项有“bubble”和“snow”。无效或者假的值将加载默认的最小主题。注意:主题的特定样式仍然需要手动包含。请参阅[主题]()了解更多信息。 + +Quill富文本编辑器以其卓越的性能和灵活的定制性,为博客作者提供了一个高效、便捷的在线编辑平台。不论是个人博客写作者还是专业内容团队,Quill都能够满足他们在内容创作过程中的各种需求。随着数字媒体的不断演进,Quill富文本编辑器无疑将继续在内容创作领域发挥其重要作用,帮助创作者们更好地表达自己的想法和故事。 \ No newline at end of file diff --git "a/src/JavaScript/\345\272\223/quill.js \347\232\204\346\226\207\346\234\254\345\272\223 \342\200\224\342\200\224 delta \347\232\204\344\275\277\347\224\250.md" "b/src/JavaScript/\345\272\223/quill.js \347\232\204\346\226\207\346\234\254\345\272\223 \342\200\224\342\200\224 delta \347\232\204\344\275\277\347\224\250.md" new file mode 100644 index 000000000..b72f6f2cd --- /dev/null +++ "b/src/JavaScript/\345\272\223/quill.js \347\232\204\346\226\207\346\234\254\345\272\223 \342\200\224\342\200\224 delta \347\232\204\344\275\277\347\224\250.md" @@ -0,0 +1,397 @@ +Deltas 是一种简单但富有表现力的格式,可用于描述 Quill 的内容和变化。该格式是 JSON 的严格子集,是可读的,并且很容易被机器解析。Deltas 可以描述任何 Quill 文档,包括所有文本和格式信息,与HTML相比,Deltas 的优势在于其简洁性和易读性。HTML作为一种标记语言,包含了大量的标签和属性,使得文档结构复杂而难以理解。而达尔塔则采用了JSON格式,使得文档的结构清晰明了,易于阅读和理解。 + +Delta由操作[数组](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)组成,用于描述对文档的更改。它们可以[`insert`](https://github.com/quilljs/delta#insert-operation)、[`delete`](https://github.com/quilljs/delta#delete-operation)或[`retain`](https://github.com/quilljs/delta#retain-operation)。注意,操作不采用索引。它们总是描述当前索引的变化。使用 retains 可以“保留”或“跳过”文档的某些部分。 + +不要被它的名称 Delta 混淆 - Deltas 既表示文档,也表示对文档的更改。如果将 Deltas 视为从一个文档到另一个文档的指令,则 Deltas 表示文档的方式是从空文档开始表示指令。 + +Deltas 作为单独的[独立库](https://github.com/quilljs/delta/)实现,允许在 Quill 之外使用。它适用于[操作转换(Operational Transform)](https://en.wikipedia.org/wiki/Operational_transformation),可以在realtime、Google Docs 等应用程序中使用。有关增量背后的更深入说明,请参阅[Designing the Delta Format](https://quilljs.com/guides/designing-the-delta-format/)。 + +> **注意:**不建议手动构造 Deltas,而是使用可链接的 [`insert()`](https://github.com/quilljs/delta#insert)、[`delete()`](https://github.com/quilljs/delta#delete)) 和 [`retain()`](https://github.com/quilljs/delta#retain) 方法来创建新的 Deltas。您可以使用 [`import()`](https://quilljs.com/docs/api/#import) 从 Quill 访问 Delta。 + +## 快速示例 + +```js +// Document with text "Gandalf the Grey" +// with "Gandalf" bolded, and "Grey" in grey +const delta = new Delta([ + { insert: 'Gandalf', attributes: { bold: true } }, + { insert: ' the ' }, + { insert: 'Grey', attributes: { color: '#ccc' } } +]); + +// Change intended to be applied to above: +// Keep the first 12 characters, insert a white 'White' +// and delete the next four characters ('Grey') +const death = new Delta().retain(12) + .insert('White', { color: '#fff' }) + .delete(4); +// { +// ops: [ +// { retain: 12 }, +// { insert: 'White', attributes: { color: '#fff' } }, +// { delete: 4 } +// ] +// } + +// Applying the above: +const restored = delta.compose(death); +// { +// ops: [ +// { insert: 'Gandalf', attributes: { bold: true } }, +// { insert: ' the ' }, +// { insert: 'White', attributes: { color: '#fff' } } +// ] +// } +``` + +本自述文件描述了 Deltas 的一般形式和 API 功能。有关 Quill 具体使用 Delta 的方式的其他信息,请参阅其自己的 [Delta 文档](http://quilljs.com/docs/delta/)。Delta 背后的动机和设计思维的演练是关于[Delta 格式设计 ](http://quilljs.com/guides/designing-the-delta-format/)的。 + +此格式适用于[操作转换](https://en.wikipedia.org/wiki/Operational_transformation),并定义了多个函数来支持此用例。 + +## Operations + +- [`insert`](https://github.com/quilljs/delta#insert-operation) +- [`delete`](https://github.com/quilljs/delta#delete-operation) +- [`retain`](https://github.com/quilljs/delta#retain-operation) + +### 插入操作 + +插入操作定义了`insert`键。String 值表示插入文本。任何其他类型都表示插入嵌入(但是,为了相等,将只执行一个级别的对象比较)。 + +在文本和嵌入这两种情况下,都可以使用 Object 定义可选`attributes`键来描述附加格式信息。可以通过`retain`操作更改格式。 + +```js +// Insert a bolded "Text" +{ insert: "Text", attributes: { bold: true } } + +// Insert a link +{ insert: "Google", attributes: { link: 'https://www.google.com' } } + +// Insert an embed +{ + insert: { image: 'https://octodex.github.com/images/labtocat.png' }, + attributes: { alt: "Lab Octocat" } +} + +// Insert another embed +{ + insert: { video: 'https://www.youtube.com/watch?v=dMH0bHeiRNg' }, + attributes: { + width: 420, + height: 315 + } +} +``` + +### 删除操作 + +删除操作定义了一个数字删除键,表示要`delete`的字符数。所有嵌入的长度均为 1。 + +```js +// Delete the next 10 characters +{ delete: 10 } +``` + +### 保留操作 + +retain 操作定义了一个 Number `retain` 键,表示要保留的字符数(其他库可能使用名称 keep 或 skip)。可以使用 Object 定义可选`attributes`键,以描述对字符范围的格式更改。`attributes` Object 中的 `null` 值表示删除该键。 + +*注意:没有必要保留文档的最后字符,因为这是隐含的。* + +```js +// Keep the next 5 characters +{ retain: 5 } + +// Keep and bold the next 5 characters +{ retain: 5, attributes: { bold: true } } + +// Keep and unbold the next 5 characters +// More specifically, remove the bold key in the attributes Object +// in the next 5 characters +{ retain: 5, attributes: { bold: null } } +``` + +## 构造器 + +- [`constructor`](https://github.com/quilljs/delta#constructor) +- [`insert`](https://github.com/quilljs/delta#insert) +- [`delete`](https://github.com/quilljs/delta#delete) +- [`retain`](https://github.com/quilljs/delta#retain) + +### 构造函数 + +创建新的 Delta 对象。 + +*注意:使用 ops 或 delta 构造时,不执行有效性/健全性检查。新增量的内部操作数组也将从 ops 或 delta.ops 分配,而无需进行深拷贝。* + +#### Example + +```js +const delta = new Delta([ + { insert: 'Hello World' }, + { insert: '!', attributes: { bold: true }} +]); + +const packet = JSON.stringify(delta); + +const other = new Delta(JSON.parse(packet)); + +const chained = new Delta().insert('Hello World').insert('!', { bold: true }); +``` + +------ + +### insert() 插入 + +追加插入操作。返回`this`值以获得可链接性。 + +#### Example例 + +```js +delta.insert('Text', { bold: true, color: '#ccc' }); +delta.insert({ image: 'https://octodex.github.com/images/labtocat.png' }); +``` + +**** + +### delete() 删除 + +追加删除操作。返回 `this` 以实现可链接性。 + +#### Example例子 + +``` +delta.delete(5); +``` + +------ + +### retain() 保留 + +追加 retain 操作。返回`this`值以获得可链接性。 + +#### Example例子 + +``` +delta.retain(4).retain(5, { color: '#0c6' }); +``` + +## 文档操作 + +### concat()连接 + +返回一个新的 Delta,表示此文档与另一个文档 Delta 操作的串联。 + +```js +const a = new Delta().insert('Hello'); +const b = new Delta().insert('!', { bold: true }); + + +// { +// ops: [ +// { insert: 'Hello' }, +// { insert: '!', attributes: { bold: true } } +// ] +// } +const concat = a.concat(b); +``` + +### diff() 比较差异 + +返回表示两个文档之间差异的 Delta。 (可选)接受发生更改的建议索引,通常表示更改之前的光标位置。 + +```js +const a = new Delta().insert('Hello'); +const b = new Delta().insert('Hello!'); + +const diff = a.diff(b); // { ops: [{ retain: 5 }, { insert: '!' }] } + // a.compose(diff) == b +``` + +### eachLine() 迭代每行 + +迭代文档 Delta,使用 Delta 和表示线段的属性对象调用给定函数。 + +```js +const delta = new Delta().insert('Hello\n\n') + .insert('World') + .insert({ image: 'octocat.png' }) + .insert('\n', { align: 'right' }) + .insert('!'); + +delta.eachLine((line, attributes, i) => { + console.log(line, attributes, i); + // Can return false to exit loop early +}); +// Should log: +// { ops: [{ insert: 'Hello' }] }, {}, 0 +// { ops: [] }, {}, 1 +// { ops: [{ insert: 'World' }, { insert: { image: 'octocat.png' } }] }, { align: 'right' }, 2 +// { ops: [{ insert: '!' }] }, {}, 3 +``` + +### invert() 反转 + +返回一个反向增量,其与基本文档增量具有相反的效果。即 `base.compose(delta).compose(inverted) === base`。 + +```js +const base = new Delta().insert('Hello\n') + .insert('World'); +const delta = new Delta().retain(6, { bold: true }).insert('!').delete(5); + +const inverted = delta.invert(base); // { ops: [ + // { retain: 6, attributes: { bold: null } }, + // { insert: 'World' }, + // { delete: 1 } + // ]} + // base.compose(delta).compose(inverted) === base +``` + +## 工具方法 + +delta本身格式就是以类数组的形式,那么他也就理所当然会支持数据 + +### filter() + +返回传递给定函数的操作数组 + +```js +const delta = new Delta().insert('Hello', { bold: true }) + .insert({ image: 'https://octodex.github.com/images/labtocat.png' }) + .insert('World!'); + +const text = delta + .filter((op) => typeof op.insert === 'string') + .map((op) => op.insert) + .join(''); +``` + +### forEach() + +迭代操作,为每个操作调用提供的函数 + +```js +delta.forEach((op) => { + console.log(op); +}); +``` + +### length() + +返回 Delta 的长度,它是其操作的长度之和。 + +```js +new Delta().insert('Hello').length(); // Returns 5 + +new Delta().insert('A').retain(2).delete(1).length(); // Returns 4 +``` + +### map() + +返回一个新数组,其中包含对每个操作调用提供的函数的结果。 + +```js +const delta = new Delta().insert('Hello', { bold: true }) + .insert({ image: 'https://octodex.github.com/images/labtocat.png' }) + .insert('World!'); + +const text = delta + .map((op) => { + if (typeof op.insert === 'string') { + return op.insert; + } else { + return ''; + } + }) + .join(''); +``` + +### partition() 组合 + +创建一个由两个数组组成的新数组,返回的数据组中的第一个数组包含通过给定函数操作的,另一个则是失败的数组。 + +```js +const delta = new Delta().insert('Hello', { bold: true }) + .insert({ image: 'https://octodex.github.com/images/labtocat.png' }) + .insert('World!'); + +const results = delta.partition((op) => typeof op.insert === 'string'); +const passed = results[0]; // [{ insert: 'Hello', attributes: { bold: true }}, + // { insert: 'World'}] +const failed = results[1]; // [{ insert: { image: 'https://octodex.github.com/images/labtocat.png' }}] +``` + +### reduce() + +将给定函数应用于累加器和每个操作以减少到单个值。 + +```js +const delta = new Delta().insert('Hello', { bold: true }) + .insert({ image: 'https://octodex.github.com/images/labtocat.png' }) + .insert('World!'); + +const length = delta.reduce((length, op) => ( + length + (op.insert.length || 1); +), 0); +``` + +### slice() + +```js +const delta = new Delta().insert('Hello', { bold: true }).insert(' World'); + +// { +// ops: [ +// { insert: 'Hello', attributes: { bold: true } }, +// { insert: ' World' } +// ] +// } +const copy = delta.slice(); + +// { ops: [{ insert: 'World' }] } +const world = delta.slice(6); + +// { ops: [{ insert: ' ' }] } +const space = delta.slice(5, 6); +``` + +## 操作(operations)转换 + +### compose() 撰写 + +返回一个 Delta,相当于应用自己的 Delta 的operations,然后再应用另一个 Delta。 + +```js +const a = new Delta().insert('abc'); +const b = new Delta().retain(1).delete(1); + +const composed = a.compose(b); // composed == new Delta().insert('ac'); +``` + +### transform() 转换 + +将给定的Delta转换为自己的operations + +```js +const a = new Delta().insert('a'); +const b = new Delta().insert('b').retain(5).insert('c'); + +a.transform(b, true); // new Delta().retain(1).insert('b').retain(5).insert('c'); +a.transform(b, false); // new Delta().insert('b').retain(6).insert('c'); +``` + +### transformPosition() 变换位置 + +根据 Delta 变换索引。对于表示光标/选择位置很有用。 + +```js +const delta = new Delta().retain(5).insert('a'); +delta.transformPosition(4); // 4 +delta.transformPosition(5); // 6 +``` + +## 参考 + +- [quilljs/delta](https://github.com/quilljs/delta) +- [Designing the Delta Format - Quill](https://quilljs.com/guides/designing-the-delta-format/) +- [Delta - Quill Rich Text Editor](https://quilljs.com/docs/delta/) diff --git "a/src/JavaScript/JSDoc \345\210\235\346\216\242\357\274\232\344\273\243\347\240\201\345\206\205\347\232\204\346\226\207\346\241\243\346\240\207\350\256\260.md" "b/src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JSDoc \345\210\235\346\216\242\357\274\232\344\273\243\347\240\201\345\206\205\347\232\204\346\226\207\346\241\243\346\240\207\350\256\260.md" similarity index 100% rename from "src/JavaScript/JSDoc \345\210\235\346\216\242\357\274\232\344\273\243\347\240\201\345\206\205\347\232\204\346\226\207\346\241\243\346\240\207\350\256\260.md" rename to "src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JSDoc \345\210\235\346\216\242\357\274\232\344\273\243\347\240\201\345\206\205\347\232\204\346\226\207\346\241\243\346\240\207\350\256\260.md" diff --git "a/src/JavaScript/JavaScript \345\246\202\344\275\225\350\267\263\345\207\272\357\274\210\347\273\210\346\255\242\357\274\211forEach \345\276\252\347\216\257.md" "b/src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript \345\246\202\344\275\225\350\267\263\345\207\272\357\274\210\347\273\210\346\255\242\357\274\211forEach \345\276\252\347\216\257.md" similarity index 100% rename from "src/JavaScript/JavaScript \345\246\202\344\275\225\350\267\263\345\207\272\357\274\210\347\273\210\346\255\242\357\274\211forEach \345\276\252\347\216\257.md" rename to "src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript \345\246\202\344\275\225\350\267\263\345\207\272\357\274\210\347\273\210\346\255\242\357\274\211forEach \345\276\252\347\216\257.md" diff --git "a/src/JavaScript/JavaScript \350\216\267\345\217\226\347\224\250\346\210\267\346\223\215\344\275\234\347\263\273\347\273\237\344\277\241\346\201\257\345\217\212\346\265\217\350\247\210\345\231\250\344\277\241\346\201\257.md" "b/src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript \350\216\267\345\217\226\347\224\250\346\210\267\346\223\215\344\275\234\347\263\273\347\273\237\344\277\241\346\201\257\345\217\212\346\265\217\350\247\210\345\231\250\344\277\241\346\201\257.md" similarity index 98% rename from "src/JavaScript/JavaScript \350\216\267\345\217\226\347\224\250\346\210\267\346\223\215\344\275\234\347\263\273\347\273\237\344\277\241\346\201\257\345\217\212\346\265\217\350\247\210\345\231\250\344\277\241\346\201\257.md" rename to "src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript \350\216\267\345\217\226\347\224\250\346\210\267\346\223\215\344\275\234\347\263\273\347\273\237\344\277\241\346\201\257\345\217\212\346\265\217\350\247\210\345\231\250\344\277\241\346\201\257.md" index 5a9a6def2..2bbc9518e 100644 --- "a/src/JavaScript/JavaScript \350\216\267\345\217\226\347\224\250\346\210\267\346\223\215\344\275\234\347\263\273\347\273\237\344\277\241\346\201\257\345\217\212\346\265\217\350\247\210\345\231\250\344\277\241\346\201\257.md" +++ "b/src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript \350\216\267\345\217\226\347\224\250\346\210\267\346\223\215\344\275\234\347\263\273\347\273\237\344\277\241\346\201\257\345\217\212\346\265\217\350\247\210\345\231\250\344\277\241\346\201\257.md" @@ -16,7 +16,8 @@ category: const navigatorObject = window.navigator ``` -![image-20230115215017732](https://cdn.yihuiblog.top/images/202301152204381.png) +![image.png](https://fs.lwmc.net/uploads/2024/03/1710356363790-202403140259302.webp) + 其中常用的属性有: diff --git "a/src/JavaScript/JavaScript \351\224\231\350\257\257\345\244\204\347\220\206\346\214\207\345\215\227.md" "b/src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript \351\224\231\350\257\257\345\244\204\347\220\206\346\214\207\345\215\227.md" similarity index 100% rename from "src/JavaScript/JavaScript \351\224\231\350\257\257\345\244\204\347\220\206\346\214\207\345\215\227.md" rename to "src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript \351\224\231\350\257\257\345\244\204\347\220\206\346\214\207\345\215\227.md" diff --git "a/src/JavaScript/JavaScript\344\274\230\351\233\205\345\206\231\346\263\225\345\217\212\351\252\232\346\223\215\344\275\234.md" "b/src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript\344\274\230\351\233\205\345\206\231\346\263\225\345\217\212\351\252\232\346\223\215\344\275\234.md" similarity index 100% rename from "src/JavaScript/JavaScript\344\274\230\351\233\205\345\206\231\346\263\225\345\217\212\351\252\232\346\223\215\344\275\234.md" rename to "src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/JavaScript\344\274\230\351\233\205\345\206\231\346\263\225\345\217\212\351\252\232\346\223\215\344\275\234.md" diff --git "a/src/JavaScript/LocalStorage\343\200\201sessionStorage \345\260\201\350\243\205 - \345\237\272\344\272\216TypeScript.md" "b/src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/LocalStorage\343\200\201sessionStorage \345\260\201\350\243\205 - \345\237\272\344\272\216TypeScript.md" similarity index 100% rename from "src/JavaScript/LocalStorage\343\200\201sessionStorage \345\260\201\350\243\205 - \345\237\272\344\272\216TypeScript.md" rename to "src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/LocalStorage\343\200\201sessionStorage \345\260\201\350\243\205 - \345\237\272\344\272\216TypeScript.md" diff --git "a/src/JavaScript/axios\343\200\201XHR\343\200\201XML\343\200\201AJAX\345\222\214Fetch\345\210\206\344\270\215\346\270\205\346\200\216\344\271\210\345\212\236\357\274\237.md" "b/src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/axios\343\200\201XHR\343\200\201XML\343\200\201AJAX\345\222\214Fetch\345\210\206\344\270\215\346\270\205\346\200\216\344\271\210\345\212\236\357\274\237.md" similarity index 100% rename from "src/JavaScript/axios\343\200\201XHR\343\200\201XML\343\200\201AJAX\345\222\214Fetch\345\210\206\344\270\215\346\270\205\346\200\216\344\271\210\345\212\236\357\274\237.md" rename to "src/JavaScript/\346\212\200\346\234\257\345\256\236\350\267\265/axios\343\200\201XHR\343\200\201XML\343\200\201AJAX\345\222\214Fetch\345\210\206\344\270\215\346\270\205\346\200\216\344\271\210\345\212\236\357\274\237.md" diff --git "a/src/JavaScript/\346\236\204\345\273\272\345\267\245\345\205\267\345\272\224\350\257\245\345\214\205\345\220\253\345\223\252\344\272\233\350\203\275\345\212\233\357\274\237.md" "b/src/JavaScript/\346\236\204\345\273\272\345\267\245\345\205\267\345\272\224\350\257\245\345\214\205\345\220\253\345\223\252\344\272\233\350\203\275\345\212\233\357\274\237.md" index 26f697e6c..623a5398a 100644 --- "a/src/JavaScript/\346\236\204\345\273\272\345\267\245\345\205\267\345\272\224\350\257\245\345\214\205\345\220\253\345\223\252\344\272\233\350\203\275\345\212\233\357\274\237.md" +++ "b/src/JavaScript/\346\236\204\345\273\272\345\267\245\345\205\267\345\272\224\350\257\245\345\214\205\345\220\253\345\223\252\344\272\233\350\203\275\345\212\233\357\274\237.md" @@ -6,7 +6,7 @@ - 支持 JavaScript 高级语法(ES2022) - 压缩(模块、语句合并) - Tree Shaking -- 常量标志(比如 `process.env.NODE_ENV` 、Vite `import.meta.env.*`的处理) +- 常量标志(比如 `process\.env\.NODE_ENV` 、Vite `import\.meta\.env\.*`的处理) - 图片压缩、转换(imagemin) - SVG压缩(svgo) @@ -61,4 +61,4 @@ > 后续继续补充.... > -> 具体方案单独列出整理文章 \ No newline at end of file +> 具体方案单独列出整理文章 diff --git "a/src/JavaScript/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\215\267\350\265\267\346\235\245\357\274\201.md" "b/src/JavaScript/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\215\267\350\265\267\346\235\245\357\274\201.md" index 11523e531..80a859822 100644 --- "a/src/JavaScript/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\215\267\350\265\267\346\235\245\357\274\201.md" +++ "b/src/JavaScript/\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\215\267\350\265\267\346\235\245\357\274\201.md" @@ -74,7 +74,7 @@ console.log(string.replace(/$/, '😄')) // hello😄 这两个表示首尾位置的符号,相信大家一定都很熟悉。 -### \b +### `\b` > 单词的边界(单词与非单词之间),具体讲有三点规则。 @@ -92,7 +92,7 @@ console.log(string.replace(/$/, '😄')) // hello😄 image-20220714210512597 -### \B +### `\B` > 非单词的边界,也就是\b反着来的意思(非单词与非单词之间),它的规则如下: diff --git "a/src/JavaScript/\346\265\217\350\247\210\345\231\250\344\270\255\345\246\202\344\275\225\351\200\232\350\277\207webgl\350\216\267\345\217\226\346\270\262\346\237\223\345\231\250\347\232\204\344\276\233\345\272\224\345\225\206\345\222\214\347\211\210\346\234\254\344\277\241\346\201\257\357\274\237.md" "b/src/JavaScript/\346\265\217\350\247\210\345\231\250\344\270\255\345\246\202\344\275\225\351\200\232\350\277\207webgl\350\216\267\345\217\226\346\270\262\346\237\223\345\231\250\347\232\204\344\276\233\345\272\224\345\225\206\345\222\214\347\211\210\346\234\254\344\277\241\346\201\257\357\274\237.md" new file mode 100644 index 000000000..02bb3a9ca --- /dev/null +++ "b/src/JavaScript/\346\265\217\350\247\210\345\231\250\344\270\255\345\246\202\344\275\225\351\200\232\350\277\207webgl\350\216\267\345\217\226\346\270\262\346\237\223\345\231\250\347\232\204\344\276\233\345\272\224\345\225\206\345\222\214\347\211\210\346\234\254\344\277\241\346\201\257\357\274\237.md" @@ -0,0 +1,58 @@ +在当今数字化时代,浏览器已经成为人们生活中不可或缺的一部分。无论是在个人计算机、移动设备还是智能电视上,浏览器都是人们访问互联网内容的重要工具。对于开发者来说,了解用户使用的浏览器的供应商和版本信息至关重要,因为不同的浏览器可能会有不同的渲染器,这可能会对网页的显示和功能产生影响。而在浏览器中,WebGL是一种用于在网页上呈现3D图形的技术。通过WebGL,开发者可以使用JavaScript编写代码,利用GPU来进行图形渲染,从而实现更加流畅和逼真的视觉效果。 + +如果我们想要获取浏览器中WebGL渲染器的供应商和版本信息,可以使用WebGLRenderingContext的getExtension方法来获取WEBGL_debug_renderer_info扩展。这个扩展提供了一些额外的函数和常量,用于获取渲染器的详细信息。 + +> 注意:根据浏览器的隐私设置,此扩展可能仅适用于特权上下文或根本不工作。在Firefox中,如果 `privacy.resistFingerprinting` 设置为 `true` ,则此扩展将被禁用。且此扩展可用于WebGL1和WebGL2上下文。 + +## 获取WebGL渲染器的供应商和版本信息 + +我们需要获取WebGLRenderingContext的实例。通常,我们可以通过canvas元素的getContext方法来获取WebGLRenderingContext实例。代码如下所示: + +```js +const canvas = document.createElement("canvas") +const gl = canvas.getContext('webgl'); +``` + +接下来,我们可以使用getExtension方法来获取WEBGL_debug_renderer_info扩展的实例。如果扩展名称(区分大小写)与 `WebGLRenderingContext.getSupportedExtensions` 中的任何结果都不匹配,则只会返回 `null`。代码如下所示: + +```js +const extension = gl.getExtension('WEBGL_debug_renderer_info'); +``` + +一旦我们获取了扩展的实例,我们就可以使用它提供的常量来获取供应商和渲染器的信息。在`WEBGL_debug_renderer_info`扩展中,有两个常量可以用于获取供应商和渲染器的信息,分别是`UNMASKED_VENDOR_WEBGL`和`UNMASKED_RENDERER_WEBGL`。我们可以通过调用getParameter方法,并传入这两个常量,来获取相应的信息。代码如下所示: + +```js +const vendor = gl.getParameter(extension.UNMASKED_VENDOR_WEBGL); +const renderer = gl.getParameter(extension.UNMASKED_RENDERER_WEBGL); +``` + +最后,我们可以使用console.log方法将供应商和渲染器的信息打印到控制台上,以便进一步的使用和分析。代码如下所示: + +```js +console.log('Vendor:', vendor); +console.log('Renderer:', renderer); + +// Vendor: Google Inc. (Apple) +// Renderer: ANGLE (Apple, Apple M2 Pro, OpenGL 4.1) + +// 用完别忘了删除节点 canvas.remove() +``` + +通过以上步骤,我们可以在浏览器中使用WebGL获取渲染器的供应商和版本信息。这对于开发者来说非常有用,可以根据不同的渲染器做出相应的优化和适配,以提供更好的用户体验。 + +## 获取webglStr + +同上文内容,我们有时候想要直接获取webglStr的字符描述信息,即webgl信息,可以通过: + +```js +const canvas = document.createElement("canvas") +const gl = canvas.getContext("webgl") +const webglStr = gl.getParameter(gl.VERSION) +``` + +通过这种方式,我们可以在前端浏览器中获取到webglStr,即webgl的版本字符串。这对于开发基于webgl的图形应用程序或游戏非常有用,因为它可以提供有关浏览器支持的webgl版本的重要信息。 +## 参考 + +- [WEBGL_debug_renderer_info extension - Web APIs | MDN --- WEBGL_debug_renderer_info扩展—Web API| MDN](https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_debug_renderer_info) +- [WebGLRenderingContext.getExtension() - Web API 接口参考 | MDN](https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/getExtension) +- [WebGLRenderingContext.getParameter() - Web API 接口参考 | MDN](https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/getParameter) \ No newline at end of file diff --git "a/src/JavaScript/\347\264\242\345\274\225.md" "b/src/JavaScript/\347\264\242\345\274\225.md" new file mode 100644 index 000000000..7099a40d5 --- /dev/null +++ "b/src/JavaScript/\347\264\242\345\274\225.md" @@ -0,0 +1,92 @@ +--- +title: JavaScript 索引 +date: 2026-07-07 +category: + - 索引 + - JavaScript +tag: + - JavaScript +--- + +# JavaScript 索引 + +## 推荐路径 + +1. 基础语法与语言机制:[JavaScript 进阶整合](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/JavaScript%20%E8%BF%9B%E9%98%B6%E6%95%B4%E5%90%88/)、[ES5、6 指导规范](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/ES5%E3%80%816%20%E6%8C%87%E5%AF%BC%E8%A7%84%E8%8C%83/)、[ES 12 新特性](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/ES%2012%20%E6%96%B0%E7%89%B9%E6%80%A7/)。 +2. 原型、执行和内存:[Property原型链与原型链](/posts/JavaScript/Property%E5%8E%9F%E5%9E%8B%E9%93%BE%E4%B8%8E%E5%8E%9F%E5%9E%8B%E9%93%BE/)、[深入解析call、apply、bind](/posts/JavaScript/%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90call%E3%80%81apply%E3%80%81bind/)、[JS垃圾回收机制](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/JS%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E6%9C%BA%E5%88%B6/)。 +3. 异步与浏览器运行时:[PromiseA 集合](/posts/JavaScript/PromiseA%20%E9%9B%86%E5%90%88/)、[事件循环是如何影响页面渲染的?](/posts/JavaScript/%E4%BA%8B%E4%BB%B6%E5%BE%AA%E7%8E%AF%E6%98%AF%E5%A6%82%E4%BD%95%E5%BD%B1%E5%93%8D%E9%A1%B5%E9%9D%A2%E6%B8%B2%E6%9F%93%E7%9A%84%EF%BC%9F/)、[页面生命周期](/posts/JavaScript/%E9%A1%B5%E9%9D%A2%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/)。 +4. Web API 与工程实践:[Performance API](/posts/JavaScript/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Performance%20API%20%E6%9D%A5%E8%A1%A1%E9%87%8F%E5%BA%94%E7%94%A8%E6%80%A7%E8%83%BD%EF%BC%9F/)、[URL API](/posts/JavaScript/%E6%9D%A5%E8%AE%A4%E8%AF%86%E4%B8%80%E4%B8%8B%E5%AE%9E%E7%94%A8%E7%9A%84%E3%80%81%E5%A5%BD%E7%94%A8%E7%9A%84%EF%BC%9AURL%20API/)、[Web Worker 常见使用问题](/posts/JavaScript/Web%20Woker%20%E5%B8%B8%E8%A7%81%E4%BD%BF%E7%94%A8%E9%97%AE%E9%A2%98%E5%92%8C%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/)。 +5. 面试训练:[JavaScript 面试题汇总(上)](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%20%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%EF%BC%88%E4%B8%8A%EF%BC%89/)、[JavaScript 面试题汇总(下)](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%20%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%EF%BC%88%E4%B8%8B%EF%BC%89/)、[JavaScript 高频手撕](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%20%E9%AB%98%E9%A2%91%E6%89%8B%E6%92%95/)。 + +## 语言核心 + +- [Atomics API](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/Atomics%20API/) +- [ES 12 新特性](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/ES%2012%20%E6%96%B0%E7%89%B9%E6%80%A7/) +- [ES5、6 指导规范](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/ES5%E3%80%816%20%E6%8C%87%E5%AF%BC%E8%A7%84%E8%8C%83/) +- [IIFE 立即执行函数表达式](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/IIFE%20%E7%AB%8B%E5%8D%B3%E6%89%A7%E8%A1%8C%E5%87%BD%E6%95%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F/) +- [JSDoc 初探:代码内的文档标记](/posts/JavaScript/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/JSDoc%20%E5%88%9D%E6%8E%A2%EF%BC%9A%E4%BB%A3%E7%A0%81%E5%86%85%E7%9A%84%E6%96%87%E6%A1%A3%E6%A0%87%E8%AE%B0/) +- [JS垃圾回收机制](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/JS%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E6%9C%BA%E5%88%B6/) +- [JavaScript 如何跳出(终止)forEach 循环](/posts/JavaScript/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/JavaScript%20%E5%A6%82%E4%BD%95%E8%B7%B3%E5%87%BA%EF%BC%88%E7%BB%88%E6%AD%A2%EF%BC%89forEach%20%E5%BE%AA%E7%8E%AF/) +- [JavaScript 进阶整合](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/JavaScript%20%E8%BF%9B%E9%98%B6%E6%95%B4%E5%90%88/) +- [JavaScript 错误处理指南](/posts/JavaScript/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/JavaScript%20%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86%E6%8C%87%E5%8D%97/) +- [JavaScript优雅写法及骚操作](/posts/JavaScript/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/JavaScript%E4%BC%98%E9%9B%85%E5%86%99%E6%B3%95%E5%8F%8A%E9%AA%9A%E6%93%8D%E4%BD%9C/) +- [PromiseA 集合](/posts/JavaScript/PromiseA%20%E9%9B%86%E5%90%88/) +- [Property原型链与原型链](/posts/JavaScript/Property%E5%8E%9F%E5%9E%8B%E9%93%BE%E4%B8%8E%E5%8E%9F%E5%9E%8B%E9%93%BE/) +- [Set,Map 和 Array的区别](/posts/JavaScript/Set%EF%BC%8CMap%20%E5%92%8C%20Array%E7%9A%84%E5%8C%BA%E5%88%AB/) +- [js中==与===的区别](/posts/JavaScript/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/js%E4%B8%AD%3D%3D%E4%B8%8E%3D%3D%3D%E7%9A%84%E5%8C%BA%E5%88%AB/) +- [深入解析call、apply、bind](/posts/JavaScript/%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90call%E3%80%81apply%E3%80%81bind/) +- [正则表达式卷起来!](/posts/JavaScript/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8D%B7%E8%B5%B7%E6%9D%A5%EF%BC%81/) +- [玩转一行代码KO问题](/posts/JavaScript/%E7%8E%A9%E8%BD%AC%E4%B8%80%E8%A1%8C%E4%BB%A3%E7%A0%81KO%E9%97%AE%E9%A2%98/) + +## Web API 与浏览器 + +- [JavaScript 获取用户操作系统信息及浏览器信息](/posts/JavaScript/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/JavaScript%20%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF%E5%8F%8A%E6%B5%8F%E8%A7%88%E5%99%A8%E4%BF%A1%E6%81%AF/) +- [LocalStorage、sessionStorage 封装 - 基于TypeScript](/posts/JavaScript/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/LocalStorage%E3%80%81sessionStorage%20%E5%B0%81%E8%A3%85%20-%20%E5%9F%BA%E4%BA%8ETypeScript/) +- [Web Worker 常见使用问题和解决方案](/posts/JavaScript/Web%20Woker%20%E5%B8%B8%E8%A7%81%E4%BD%BF%E7%94%A8%E9%97%AE%E9%A2%98%E5%92%8C%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/) +- [Web Worker 与主线程通信场景下对postMessage的简洁封装](/posts/JavaScript/Web%20Woker%20%E4%B8%8E%E4%B8%BB%E7%BA%BF%E7%A8%8B%E9%80%9A%E4%BF%A1%E5%9C%BA%E6%99%AF%E4%B8%8B%E5%AF%B9postMessage%E7%9A%84%E7%AE%80%E6%B4%81%E5%B0%81%E8%A3%85/) +- [WebAudio / Tone.js 框架食用指南](/posts/JavaScript/WebAudio/Tone.js%20%E6%A1%86%E6%9E%B6%E9%A3%9F%E7%94%A8%E6%8C%87%E5%8D%97/) +- [WebAudio / Web Audio 滤波器Filter](/posts/JavaScript/WebAudio/Web%20Audio%20%E6%BB%A4%E6%B3%A2%E5%99%A8Filter/) +- [WebPerf Snippets](/posts/JavaScript/WebPerf%20Snippets%20%E2%80%94%E2%80%94%20%E7%9B%B4%E6%8E%A5%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8E%A7%E5%88%B6%E5%8F%B0%E4%B8%AD%E8%8E%B7%E5%8F%96%E7%BD%91%E9%A1%B5%E6%80%A7%E8%83%BD%E6%8C%87%E6%A0%87%E7%9A%84%E4%BB%A3%E7%A0%81%E7%89%87%E6%AE%B5/) +- [axios、XHR、XML、AJAX和Fetch分不清怎么办?](/posts/JavaScript/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/axios%E3%80%81XHR%E3%80%81XML%E3%80%81AJAX%E5%92%8CFetch%E5%88%86%E4%B8%8D%E6%B8%85%E6%80%8E%E4%B9%88%E5%8A%9E%EF%BC%9F/) +- [了解MutationObserver的使用以及在Vue3中的使用案例](/posts/JavaScript/%E4%BA%86%E8%A7%A3MutationObserver%E7%9A%84%E4%BD%BF%E7%94%A8%E4%BB%A5%E5%8F%8A%E5%9C%A8Vue3%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8%E6%A1%88%E4%BE%8B/) +- [事件循环是如何影响页面渲染的?](/posts/JavaScript/%E4%BA%8B%E4%BB%B6%E5%BE%AA%E7%8E%AF%E6%98%AF%E5%A6%82%E4%BD%95%E5%BD%B1%E5%93%8D%E9%A1%B5%E9%9D%A2%E6%B8%B2%E6%9F%93%E7%9A%84%EF%BC%9F/) +- [前端 SSO 单点登入方案](/posts/JavaScript/%E5%89%8D%E7%AB%AF%20SSO%20%E5%8D%95%E7%82%B9%E7%99%BB%E5%85%A5%E6%96%B9%E6%A1%88/) +- 前端通过 canvas 实现图片裁剪 +- [如何使用Performance API 来衡量应用性能?](/posts/JavaScript/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Performance%20API%20%E6%9D%A5%E8%A1%A1%E9%87%8F%E5%BA%94%E7%94%A8%E6%80%A7%E8%83%BD%EF%BC%9F/) +- [怎么总有人混淆Service Worker 和 Web Worker?](/posts/JavaScript/%E6%80%8E%E4%B9%88%E6%80%BB%E6%9C%89%E4%BA%BA%E6%B7%B7%E6%B7%86Service%20Worker%20%E5%92%8C%20Web%20Worker%EF%BC%9F/) +- [来认识一下实用的、好用的:URL API](/posts/JavaScript/%E6%9D%A5%E8%AE%A4%E8%AF%86%E4%B8%80%E4%B8%8B%E5%AE%9E%E7%94%A8%E7%9A%84%E3%80%81%E5%A5%BD%E7%94%A8%E7%9A%84%EF%BC%9AURL%20API/) +- [浏览器中如何通过webgl获取渲染器的供应商和版本信息?](/posts/JavaScript/%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%AD%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87webgl%E8%8E%B7%E5%8F%96%E6%B8%B2%E6%9F%93%E5%99%A8%E7%9A%84%E4%BE%9B%E5%BA%94%E5%95%86%E5%92%8C%E7%89%88%E6%9C%AC%E4%BF%A1%E6%81%AF%EF%BC%9F/) +- [页面生命周期:DOMContentLoaded, load, beforeunload, unload](/posts/JavaScript/%E9%A1%B5%E9%9D%A2%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/) + +## 模块化、工程与工具 + +- [前端模块:CJS, AMD, UMD, ESM, System 和 IIFE](/posts/JavaScript/%E5%89%8D%E7%AB%AF%E6%A8%A1%E5%9D%97%E5%88%86%E7%B1%BB/) +- [为什么每个人都在谈论同构JavaScript 以及为什么它很重要](/posts/JavaScript/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%AF%8F%E4%B8%AA%E4%BA%BA%E9%83%BD%E5%9C%A8%E8%B0%88%E8%AE%BA%E5%90%8C%E6%9E%84JavaScript%20%E4%BB%A5%E5%8F%8A%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E5%BE%88%E9%87%8D%E8%A6%81/) +- [构建工具应该包含哪些能力?](/posts/JavaScript/%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7%E5%BA%94%E8%AF%A5%E5%8C%85%E5%90%AB%E5%93%AA%E4%BA%9B%E8%83%BD%E5%8A%9B%EF%BC%9F/) +- [使用Node.js、Express.js、TS写个简单的图床脚本(一)](/posts/JavaScript/%E4%BD%BF%E7%94%A8Node.js%E3%80%81Express.js%E3%80%81TS%E5%86%99%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%9B%BE%E5%BA%8A%E8%84%9A%E6%9C%AC%EF%BC%88%E4%B8%80%EF%BC%89/) +- [使用Node.js、pm2和ssh2模块实现一个简单的Node.js项目部署脚本](/posts/JavaScript/%E4%BD%BF%E7%94%A8Node.js%E3%80%81pm2%E5%92%8Cssh2%E6%A8%A1%E5%9D%97%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84Node.js%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2%E8%84%9A%E6%9C%AC/) +- [ESLint](/posts/Node/%E5%BA%93/ESLint/) +- [Prettier](/posts/Node/%E5%BA%93/Prettier/) +- [Puppeteer 使用指南](/posts/Node/%E5%BA%93/Puppeteer%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/) +- [Quill富文本编辑器使用](/posts/JavaScript/%E5%BA%93/Quill%E5%AF%8C%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8%E4%BD%BF%E7%94%A8%20-%20%E9%AB%98%E5%BA%A6%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%B0%E4%BB%A3%20Web%20%E5%AF%8C%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8/) +- [enquirer 使用指南](/posts/Node/%E5%BA%93/enquirer%20%E6%8C%87%E5%8D%97/) +- [inquirer 使用指南](/posts/Node/%E5%BA%93/inquirer%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/) +- [yargs 使用指南](/posts/Node/%E5%BA%93/yargs%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/) + +## 面试题 + +- [JavaScript 数组去重](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%20%E6%95%B0%E7%BB%84%E5%8E%BB%E9%87%8D/) +- [JavaScript 输出判断](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%20%E8%BE%93%E5%87%BA%E5%88%A4%E6%96%AD/) +- [JavaScript 面试题汇总(上)](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%20%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%EF%BC%88%E4%B8%8A%EF%BC%89/) +- [JavaScript 面试题汇总(下)](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%20%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%EF%BC%88%E4%B8%8B%EF%BC%89/) +- [JavaScript 高频手撕](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%20%E9%AB%98%E9%A2%91%E6%89%8B%E6%92%95/) +- [JavaScript高频手撕](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/JavaScript%E9%AB%98%E9%A2%91%E6%89%8B%E6%92%95/) +- [小滴课堂JS题目汇总](/posts/%E5%85%AB%E8%82%A1%E6%96%87/JavaScript/%E5%B0%8F%E6%BB%B4%E8%AF%BE%E5%A0%82JS%E9%A2%98%E7%9B%AE%E6%B1%87%E6%80%BB/) + +## 关联目录 + +- [TypeScript 索引](/posts/TypeScript/%E7%B4%A2%E5%BC%95/) +- [Node 索引](/posts/Node/%E7%B4%A2%E5%BC%95/) +- [Browser 索引](/posts/Browser/%E7%B4%A2%E5%BC%95/) +- [浏览器工作原理索引](/posts/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86/%E7%B4%A2%E5%BC%95/) + diff --git "a/src/JavaScript/\351\235\242\350\257\225\351\242\230/\345\255\227\347\254\246\344\270\262\350\275\254\346\225\260\347\273\204\350\277\233\351\230\266\347\211\210.md" "b/src/JavaScript/\351\235\242\350\257\225\351\242\230/\345\255\227\347\254\246\344\270\262\350\275\254\346\225\260\347\273\204\350\277\233\351\230\266\347\211\210.md" deleted file mode 100644 index e69de29bb..000000000 diff --git "a/src/JavaScript/\351\241\265\351\235\242\347\224\237\345\221\275\345\221\250\346\234\237\357\274\232DOMContentLoaded, load, beforeunload, unload.md" "b/src/JavaScript/\351\241\265\351\235\242\347\224\237\345\221\275\345\221\250\346\234\237.md" similarity index 100% rename from "src/JavaScript/\351\241\265\351\235\242\347\224\237\345\221\275\345\221\250\346\234\237\357\274\232DOMContentLoaded, load, beforeunload, unload.md" rename to "src/JavaScript/\351\241\265\351\235\242\347\224\237\345\221\275\345\221\250\346\234\237.md" diff --git "a/src/Lit/\347\254\254\344\270\200\347\253\240\357\274\232Lit\347\256\200\344\273\213 - \347\216\260\344\273\243Web\347\273\204\344\273\266\346\240\207\345\207\206.md" "b/src/Lit/\347\254\254\344\270\200\347\253\240\357\274\232Lit\347\256\200\344\273\213 - \347\216\260\344\273\243Web\347\273\204\344\273\266\346\240\207\345\207\206.md" new file mode 100644 index 000000000..8b650b5bc --- /dev/null +++ "b/src/Lit/\347\254\254\344\270\200\347\253\240\357\274\232Lit\347\256\200\344\273\213 - \347\216\260\344\273\243Web\347\273\204\344\273\266\346\240\207\345\207\206.md" @@ -0,0 +1,76 @@ +# 第一章:Lit简介 - 现代Web组件标准 + +> **为什么要学习 Lit?** +> 如果你厌倦了庞大的框架、复杂的构建配置,渴望回归 Web 标准的简洁;或者你在寻找一个能与任何框架互操作的组件解决方案——Lit 可能就是你要找的答案。 +> +> **本章你将了解**: +> - Lit 的三大核心优势及其技术实现原理 +> - Web 组件标准的三大支柱 +> - Lit 与主流 VDOM 框架在架构层面的本质区别 + +### 1.1 什么是Lit?简单、快速、面向未来 + +Lit是一个用于构建快速、轻量级Web组件的简单库 。它的核心价值主张围绕三个关键原则:简单性、高性能和面向未来的架构。   + +**简单 (Simple)**:Lit并非又一个庞大的前端框架,而是构建在Web组件标准之上的一个轻量层。它只添加了开发者高效工作所必需的功能:响应式状态、声明式模板以及一系列旨在减少样板代码的贴心特性 。这种设计的哲学是避免不必要的抽象,尽可能贴近Web平台本身。这种“简单”并不意味着功能孱弱,而是指其架构清晰,学习曲线平缓,让开发者能专注于业务逻辑而非框架的复杂性。   + +**快速 (Fast)**:Lit的性能优势体现在两个方面。首先,它的核心库经过压缩和最小化后,体积仅约5 KB,极大地减小了应用的打包体积,缩短了加载时间 。其次,其渲染速度极快。与其他依赖虚拟DOM(Virtual DOM)的框架不同,Lit在更新UI时,只会精准地操作那些发生变化的动态部分,无需重建一个虚拟树并与真实DOM进行比对 。这种精细化的更新机制使其渲染性能“快如闪电” 。   + +**面向未来 (Future-Ready)**:Lit的根基是Web组件标准,这些标准由浏览器原生支持 。这意味着用Lit构建的组件具有无与伦比的互操作性,可以在任何使用HTML的地方运行,无论是否使用了其他框架 。这种特性使得Lit成为构建可共享组件、设计系统或可维护、面向未来的网站和应用的理想选择。通过拥抱浏览器原生组件模型,Lit最大限度地减少了技术锁定,提升了项目的灵活性和长期可维护性 。   + +### 1.2 理解基石:Web组件入门 + +要真正理解Lit,首先必须了解它所构建的基础——Web组件。Web组件是一套由W3C标准支持的浏览器原生技术,它允许开发者创建可复用、封装良好的自定义HTML元素。它主要由三项核心技术组成 :   + +- **自定义元素 (Custom Elements)**:这项标准允许开发者定义全新的HTML标签,并为其赋予特定的行为和外观。例如,你可以创建一个``元素,浏览器会像对待`
`或`

`一样识别和处理它 。每一个Lit组件本质上都是一个标准的自定义元素,它继承自原生的   + + `HTMLElement`类 。   + +- **Shadow DOM**:它提供了一种强大的封装机制,可以将一个元素的DOM结构和CSS样式与其主文档的DOM隔离开来。Lit默认使用Shadow DOM来创建作用域样式,确保组件内部的CSS选择器不会影响页面上的其他元素,反之亦然 。这使得样式管理变得简单而可靠。   + +- **HTML模板 (HTML Templates)**:通过`