diff --git a/docs/.gitignore b/docs/.gitignore index 5fd7df512..019fdc9f5 100755 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -12,3 +12,6 @@ config.local.js basement_dist .vuepress/.temp .vuepress/.cache +.vitepress/.temp +.vitepress/cache +.vitepress/dist diff --git a/docs/.vitepress/components/Publication.vue b/docs/.vitepress/components/Publication.vue new file mode 100644 index 000000000..1ed00a08a --- /dev/null +++ b/docs/.vitepress/components/Publication.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/docs/.vitepress/components/Publications.vue b/docs/.vitepress/components/Publications.vue new file mode 100644 index 000000000..8c07054a4 --- /dev/null +++ b/docs/.vitepress/components/Publications.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/docs/.vitepress/components/PublicationsPage.vue b/docs/.vitepress/components/PublicationsPage.vue new file mode 100644 index 000000000..821e18c2b --- /dev/null +++ b/docs/.vitepress/components/PublicationsPage.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 000000000..9075c2923 --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,71 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Dolos", + description: "Source Code Plagiarism Detection", + + ignoreDeadLinks: [ + /^https?:\/\/localhost/ + ], + + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + + nav: [ + { text: 'Documentation', link: '/guide/' }, + { text: 'Examples', link: '/try/' }, + { text: 'Use Dolos', link: 'https://dolos.ugent.be/server' }, + ], + + sidebar: [ + { text: "Introduction", link: "/guide/" }, + { + text: 'Dolos Online', + items: [ + { text: 'Use Dolos Online', link: '/guide/server' }, + { text: 'Use case: Dodona', link: '/guide/dodona' }, + ] + }, + { + text: 'CLI & Library', + items: [ + { text: 'Install the Dolos CLI', link: '/guide/installation' }, + { text: 'Use the Dolos CLI', link: '/guide/running' }, + { text: 'Run Dolos using docker', link: '/guide/docker' }, + { text: 'Add metadata', link: '/guide/adding-metadata' }, + { text: 'Add new languages', link: '/guide/adding-languages' }, + { text: 'Use the Dolos library', link: '/guide/library' }, + ] + }, + { + text: 'About Dolos', + items: [ + { text: 'How Dolos works', link: '/about/algorithm' }, + { text: 'Supported programming languages', link: '/about/languages' }, + { text: 'Research publications', link: '/about/publications' }, + ] + } + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/dodona-edu/dolos' } + ], + + search: { + provider: 'local' + }, + + footer: { + message: "Made by Team Dodona with ❤️" + } + }, + + vite: { + resolve: { + alias: { + '@components': __dirname + '/components' + } + } + } +}) diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 000000000..07970be5f --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,16 @@ +// https://vitepress.dev/guide/custom-theme +import { h } from 'vue' +import Theme from 'vitepress/theme' +import './style.css' + +export default { + ...Theme, + Layout: () => { + return h(Theme.Layout, null, { + // https://vitepress.dev/guide/extending-default-theme#layout-slots + }) + }, + enhanceApp({ app, router, siteData }) { + // ... + } +} diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css new file mode 100644 index 000000000..b272a284f --- /dev/null +++ b/docs/.vitepress/theme/style.css @@ -0,0 +1,130 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-brand: #646cff; + --vp-c-brand-light: #747bff; + --vp-c-brand-lighter: #9499ff; + --vp-c-brand-lightest: #bcc0ff; + --vp-c-brand-dark: #535bf2; + --vp-c-brand-darker: #454ce1; + --vp-c-brand-dimm: rgba(100, 108, 255, 0.08); +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: var(--vp-c-brand-light); + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand); + --vp-button-brand-hover-border: var(--vp-c-brand-light); + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-light); + --vp-button-brand-active-border: var(--vp-c-brand-light); + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-button-brand-bg); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #bd34fe 30%, + #41d1ff + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #bd34fe 50%, + #47caff 50% + ); + --vp-home-hero-image-filter: blur(40px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(72px); + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: var(--vp-c-brand); + --vp-custom-block-tip-text: var(--vp-c-brand-darker); + --vp-custom-block-tip-bg: var(--vp-c-brand-dimm); +} + +.dark { + --vp-custom-block-tip-border: var(--vp-c-brand); + --vp-custom-block-tip-text: var(--vp-c-brand-lightest); + --vp-custom-block-tip-bg: var(--vp-c-brand-dimm); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand) !important; +} + +/** + * General styling + * -------------------------------------------------------------------------- */ +.row { + display: flex; + flex-direction: row; + flex-wrap: wrap; + width: 100%; + gap: 1rem; +} + +.column { + display: flex; + flex-direction: column; + flex: 1; +} + +.center-content { + justify-content: center; + align-content: center; + display: flex; +} + +.image-row { + background: white; + padding: 1rem; +} + +.image-row img { + display: inline; + max-width: 33%; + vertical-align: middle; +} + +.tagline { + text-wrap: balance; +} + + diff --git a/docs/.vuepress/components/HomeHero.vue b/docs/.vuepress/components/HomeHero.vue deleted file mode 100644 index f188aa64b..000000000 --- a/docs/.vuepress/components/HomeHero.vue +++ /dev/null @@ -1,101 +0,0 @@ - - - diff --git a/docs/.vuepress/styles/index.scss b/docs/.vuepress/styles/index.scss deleted file mode 100644 index c4d2b9096..000000000 --- a/docs/.vuepress/styles/index.scss +++ /dev/null @@ -1,35 +0,0 @@ -.row { - display: flex; - flex-direction: row; - flex-wrap: wrap; - width: 100%; - gap: 1rem; -} - -.column { - display: flex; - flex-direction: column; - flex: 1; -} - -.center-content { - justify-content: center; - align-content: center; - display: flex; -} - -.link-button { - display: inline-block; - font-size: 1.2rem; - color: var(--c-bg); - background-color: var(--c-brand); - padding: 0.8rem 1.6rem; - border-radius: 4px; - transition: background-color .1s ease; - box-sizing: border-box; - border-bottom: 1px solid var(--c-border); - &:hover { - background-color: var(--c-brand-light); - } - -} diff --git a/docs/guide/algorithm.md b/docs/about/algorithm.md similarity index 54% rename from docs/guide/algorithm.md rename to docs/about/algorithm.md index 8a7681a41..fd391fa2c 100644 --- a/docs/guide/algorithm.md +++ b/docs/about/algorithm.md @@ -1,21 +1,21 @@ # How Dolos works -Conceptually, the algorithm of Dolos can be split up in four steps: +Conceptually, the plagiarism detection pipeline of Dolos can be split into four successive steps: + 1. Tokenization 2. Fingerprinting 3. Indexing 4. Reporting - ## Tokenization -To be immune to plagiarism where variables and functions are renamed, Dolos -doesn't run directly on the source code subjected to the test. First a -tokenization step is performed using [Tree-sitter](http://tree-sitter.github.io/tree-sitter/). -Tree-sitter can generate syntax trees for many languages and converts source code -to a more structured form, free of naming variabilities. +To be immune against masking plagiarism by techniques such as renaming variables and functions, Dolos +doesn't directly process the source code under investigation. It starts by performing a +tokenization step using [Tree-sitter](http://tree-sitter.github.io/tree-sitter/). +Tree-sitter can generate syntax trees for many programming languages, converts source code +to a more structured form, and masks specific naming of variables and functions. -For example, the code +For example, the JavaScript code ```javascript function sum(a, b) { @@ -39,19 +39,19 @@ program ([0, 0] - [3, 0]) identifier ([1, 13] - [1, 14]) ``` -Next, we can start looking for similarities in the submitted files. +Based on this representation, Dolos starts looking for similarities among the submitted files. ## Fingerprinting To measure similarities between (converted) files, Dolos tries to find common -substrings between them. We use substrings of a fixed length called _k_-grams. +sequences of tokens. More specifically, it uses subsequences of fixed length called _k_-grams. To efficiently make these comparisons and reduce the memory usage, all _k_-grams are hashed using a rolling hash function (the one used by Rabin-Karp in their string matching algorithm). The length _k_ of _k_-grams can be with the `-k` option. To further reduce the memory usage, only a subset of all hashes are stored. The -selection of which hashes to store is done by the Winnowing algorithm as +selection of hashes is done by the Winnowing algorithm as described by [(Schleimer, Wilkerson and Aiken)](http://theory.stanford.edu/~aiken/publications/papers/sigmod03.pdf). In short: only the hash with the smallest numerical value is kept for each window. The window length (in _k_-grams) can be altered with the `-w` option. @@ -61,21 +61,21 @@ these are stored as simple integers. ## Indexing -Because we want to compare all files with each other, it is more efficient to +Because Dolos needs to compare all files with each other, it is more efficient to first create an index containing the fingerprints of all files. For each of the -fingerprints encountered in any of the files, we store the file and +fingerprints encountered in any of the files, we store the file and the corresponding line number where we encountered that fingerprint. -Once a fingerprint is stored twice in the index, we can record this as a match +As soon as a fingerprint is stored in the index twice, this is recorded as a match between the two files because they share at least one k-gram. ## Reporting -Finally, we collect all fingerprints that occur in more than one file and -aggregate the results into a report. +Dolos finally collects all fingerprints that occur in more than one file and +aggregates the results into a report. -This report will contain all file pairs that have at least one common fingerprint, together with some metrics: -- **similarity**: which represents the fraction of shared fingerprints between the two files -- **total overlap**: which is the absolute value of shared fingerprints, useful for larger projects -- **longest fragment**: the length (in fingerprints) of the longest subsequent list of fingerprints matching between the two files, useful for when not the whole source code file is copied +This report contains all file pairs that have at least one common fingerprint, together with some metrics: +- **similarity**: the fraction of shared fingerprints between the two files +- **total overlap**: the absolute value of shared fingerprints, useful for larger projects +- **longest fragment**: the length (in fingerprints) of the longest subsequence of fingerprints matching between the two files, useful when not the whole source code is copied diff --git a/docs/about/languages.md b/docs/about/languages.md new file mode 100644 index 000000000..b930d0a85 --- /dev/null +++ b/docs/about/languages.md @@ -0,0 +1,47 @@ +--- +next: + text: "Adding a language to the Dolos CLI / lib" + link: /guide/adding-languages.md +--- + +# How Dolos handles programming languages + +Your choice of programming languages in teaching should not restrict how easily you can detect plagiarism. +That's why the plagiarism detection pipeline of Dolos is built on top of a generic parser model that supports the broadest possible array of programming languages. + +![Tree-sitter logo](https://tree-sitter.github.io/tree-sitter/assets/images/tree-sitter-small.png) + +Dolos uses [Tree-sitter](https://tree-sitter.github.io/tree-sitter/) parsers to process source files. +As such, Dolos supports all programming languages for which a Tree-sitter parser is available. +[The list of available parsers](https://tree-sitter.github.io/tree-sitter/#available-parsers) is sheer endless and still growing. + +## Supported programming languages + +Shipping Dolos with all languages readily installed would be impractical. +Moreover, not all parsers are of the same quality or have been updated to the latest version of Tree-sitter. +That's why we only ship the Dolos CLI with a default selection of high-quality parsers. + +Dolos CLI and the online service have out-of-the-box support for the most commonly used programming languages: + +- Bash +- C +- C++ +- C# +- Elm +- JavaScript +- Java +- PHP +- Python +- Typescript + +## Requesting support for a new language + +If you're using Dolos Online and your programming language of choice is not in the above list, you can request support +on our [issue tracker on GitHub](https://github.com/dodona-edu/dolos/issues/1029) or [by sending us an email](mailto:dodona@ugent.be). + +## Adding a language locally + +If you don't want to wait on our support to add a new language, you can also add it yourself by running the [Dolos CLI](/guide/installation) and [installing additional parsers locally](/guide/adding-languages.md). + +Please let us know if you've been successful, so we can officially add support for the language in our next release of Dolos. +If you need help, contact us [on GitHub](https://github.com/dodona-edu/dolos/issues/1029) or [by sending us an email](mailto:dodona@ugent.be). diff --git a/docs/about/publications.md b/docs/about/publications.md new file mode 100644 index 000000000..ea0b4f130 --- /dev/null +++ b/docs/about/publications.md @@ -0,0 +1,78 @@ +--- +layout: page +title: Publications +--- + + + + + + + Learning to code is increasingly embedded in secondary and higher education curricula, where solving programming exercises plays an important role in the learning process and in formative and summative assessment. Unfortunately, students admit that copying code from each other is a common practice and teachers indicate they rarely use plagiarism detection tools. + We want to lower the barrier for teachers to detect plagiarism by introducing a new source code plagiarism detection tool (Dolos) that is powered by state-of-the art similarity detection algorithms, offers interactive visualizations, and uses generic parser models to support a broad range of programming languages. + Dolos is compared with state-of-the-art plagiarism detection tools in a benchmark based on a standardized dataset. We describe our experience with integrating Dolos in a programming course with a strong focus on online learning and the impact of transitioning to remote assessment during the COVID-19 pandemic. + Dolos outperforms other plagiarism detection tools in detecting potential cases of plagiarism and is a valuable tool for preventing and detecting plagiarism in online learning environments. It is available under the permissive MIT open-source license at https://dolos.ugent.be. + + + With the increasing demand for programming skills comes a trend towards more online programming courses and assessments. While this allows educators to teach larger groups of students, it also opens the door to dishonest student behaviour, such as copying code from other students. When teachers use assignments where all students write code for the same problem, source code similarity tools can help to combat plagiarism. Unfortunately, teachers often do not use these tools to prevent such behaviour. In response to this challenge, we have developed a new source code plagiarism detection tool named Dolos. Dolos is open-source, supports a wide range of programming languages, and is designed to be user-friendly. It enables teachers to detect, prove and prevent plagiarism in programming courses by using fast algorithms and powerful visualisations. We present further enhancements to Dolos and discuss how it can be integrated into modern computing education courses to meet the challenges of online learning and assessment. By lowering the barriers for teachers to detect, prove and prevent plagiarism in programming courses, Dolos can help protect academic integrity and ensure that students earn their grades honestly. + + + + + Dodona (dodona.ugent.be) is an intelligent tutoring system for learning computer programming, statistics and data science. It bridges the gap between assessment and learning by providing real-time data and feedback to help students learn better, teachers teach better and educational technology become more effective. We show how Dodona can be used as a virtual co-teacher to stimulate active learning and support challenge-based education in open and collaborative learning environments. We also highlight some of the opportunities and challenges we have faced in practice. Dodona is free to use and has more than 50 thousand registered users across many educational and research institutions, including 15 thousand new users in the last year. Dodona's source code is available on GitHub under the permissive MIT open-source license. + + + Debugging is an important aspect of programming. Most programming languages have some features and tools to facilitate debugging. As the debugging process is also frustrating, it requires good scaffolding, in which a debugger can be a useful tool [3]. Scratch is a visual block-based programming language that is commonly used to teach programming to children, aged 10--14 [4]. It comes with its own integrated development environment (IDE), where children can edit and run their code. This IDE misses some of the tools that are available in traditional IDEs, such as a debugger. In response to this challenge, we developed Blink. Blink is a debugger for Scratch with the aim of being usable to the young audience that typically uses Scratch. We present the currently implemented features of the debugger, and the challenges we faced while implementing those, both from a user-experience standpoint and a technical standpoint. + + + In educational contexts, automated assessment tools (AAT) are commonly used to provide formative feedback on programming exercises. However, designing exercises for AAT remains a laborious task or imposes limitations on the exercises. Most AAT use either output comparison, where the generated output is compared against an expected output, or unit testing, where the tool has access to the code of the submission under test. While output comparison has the advantage of being programming language independent, the testing capabilities are limited to the output. Conversely, unit testing can generate more granular feedback, but is tightly coupled with the programming language of the submission. In this paper, we introduce TESTed, which enables the best of both worlds: combining the granular feedback of unit testing with the programming language independence of output comparison. Educators can save time by designing exercises that can be used across programming languages. Finally, we report on using TESTed in educational practice. + + + We present a privacy-friendly early-detection framework to identify students at risk of failing in introductory programming courses at university. The framework was validated for two different courses with annual editions taken by higher education students (N = 2 080) and was found to be highly accurate and robust against variation in course structures, teaching and learning styles, programming exercises and classification algorithms. By using interpretable machine learning techniques, the framework also provides insight into what aspects of practising programming skills promote or inhibit learning or have no or minor effect on the learning process. Findings showed that the framework was capable of predicting students’ future success already early on in the semester. + + + + + diff --git a/docs/deploy.sh b/docs/deploy.sh index a81dcd11c..b415aa530 100755 --- a/docs/deploy.sh +++ b/docs/deploy.sh @@ -4,5 +4,5 @@ yarn build rsync -glpPrtvz \ -e 'ssh -p 4840' \ - .vuepress/dist/ \ + .vitepress/dist/ \ dodona@dolos.ugent.be:dolos/docs diff --git a/docs/guide/README.md b/docs/guide/README.md deleted file mode 100755 index 54b71a4ed..000000000 --- a/docs/guide/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Introduction - -Dolos is a command-line application for source code plagiarism detection. It -uses [tree-sitter](https://tree-sitter.github.io/tree-sitter/), an incremental -parser library, to support a broad range of programming languages. - - -- [Try Dolos](/try/) -- [Install Dolos](/guide/installation.html) -- [How to use Dolos](/guide/running.html) - -By using powerful visualizations, you can see in a glance how similar the analyzed files are. Based on our experience with teaching programming courses, Dolos focuses on two main use cases: - -**Tests and exams** where no communication or collaboration is allowed and thus no similar submissions are expected. Submissions with a high similarity or with similar parts could a be a sign of possible cheating behavior and are immediately visible in the interface. - -**Regular exercises** where collaboration is allowed between (small) groups of students where teachers want to see if solutions are not exchanged among larger groups of students. Dolos groups submissions within clusters to easily identify problematic groups. - -The example below shows the difference between submissions for the same exercise used for an test where no communication or collaboration is allowed (left) and later as a mandatory exercise where students are allowed to collaborate in small groups (right): - -![Two plagiarism graphs. The first plagiarism graph is of solutions submitted for a test in academic year 2020-2021 with only two connected nodes in the graph. The second plagiarism graph is of the same exercise given as a mandatory exercise in the academic year 2021-2022 and shows a lot of connected nodes, indicating a lot of plagiarism.](/images/comparison-exercise-evaluation.png) - - -## Why a new tool? - -We noticed that existing tools were lacking in a lot of ways. Some of them are provided as a website only, which was often offline and had an archaic interface. Others did not support the programming languages we wanted to use or were simply too difficult to get up and running ... - -With Dolos, we want to provide an **open-source** tool which you can easily extend and integrate in your own workflow. It should be **easy to install** and have a **modern user interface**. Finally, we want teachers to be **as effective as possible** in detecting and preventing plagiarism, giving them more time do do what they do best: teaching. - -![Screenshot of the Dolos Web UI showing an overview of the analyzed submissions and a histogram with the similarity distribution](/images/dolos-screenshot.png) - -## Who made this software? - -Dolos is an active research project by [Team Dodona](https://dodona.ugent.be/en/about/) at Ghent University. If you use this software for your research, please cite: - -> Maertens et. al. (2022) J. Computer Assisted Learning [doi:10.1111/jcal.12662](https://doi.org/10.1111/jcal.12662) - -[![Header of the article titled "Dolos: Language-agnostic plagiarism detection in source code"](/images/dolos-article.png)](https://doi.org/10.1111/jcal.12662) - -## What's in a name? - -Dolos is properly named after the spirit of trickery and guile in Greek -mythology. His [bio on Wikipedia](https://en.wikipedia.org/wiki/Dolos_(mythology)) -reads as: - -_He became known for his skill when attempting to make a fraudulent -copy statue of Aletheia , in order to trick people into thinking they were -seeing the real statue. He ran out of the clay he was using to create the -statue, and had to leave the feet unfinished as he quaked in fear while his -skill-master looked over his attempt at deceitfulness. To his surprise, -Prometheus was rather amazed at the similarity between the statues, so Dolos -then became a master in cunning deception, craftiness, and treachery. There are -even some stories of Dolos tricking gods into lies._ diff --git a/docs/guide/adding-languages.md b/docs/guide/adding-languages.md new file mode 100644 index 000000000..b26b8329c --- /dev/null +++ b/docs/guide/adding-languages.md @@ -0,0 +1,67 @@ +# Add a new language + +Dolos is built on top of a [generic parser model](/about/languages.md) to achieve loose coupling with specific programming languages. +As a result, it is fairly easy to add support for additional programming languages if a suitable parser is available. + +Dolos automatically discovers the available [Tree-sitter parsers](https://tree-sitter.github.io/tree-sitter/) on the local system at runtime. +As such, adding support for a new language comes down to installing a Tree-sitter parser for that language in the `node_modules` on your system (Dolos searches `NODE_PATH`). + +As an example, we demonstrate how the **Rust** programming language can be supported. + +## Check availability + +To assure that Dolos does not yet support the target programming language, simply run: + +```shell +dolos -l rust *.rs +``` + +If no parser is available for the target language, you'll get this error message: + +``` +[error] Error: No tokenizer found for rust +``` + +## Find a parser + +If no parser is available for the target programming language, +search an appropriate parser [on the Tree-sitter website](https://tree-sitter.github.io/tree-sitter/#available-parsers) +or [on the Tree-sitter GitHub page](https://github.com/tree-sitter). + +There exists a Rust parser named [`tree-sitter-rust`](https://github.com/tree-sitter/tree-sitter-rust). + +::: tip +If the language you are looking for is not listed on either the website or GitHub, it might be that there is no parser available. +If that is the case, you can [contact us](mailto:dodona@ugent.be) and we will see if we can help. + +It is possible to [create a new parser](https://tree-sitter.github.io/tree-sitter/creating-parsers), but this quickly becomes complicated. +::: + +## Install the parser + +First run the command `dolos --version` to check what version of Tree-sitter is currently used by Dolos. +The output will look like this: + +``` +Dolos v2.2.3 +Node v18.16.0 +Tree-sitter v0.20.1 +``` + +Tree-sitter parsers must have the same (major) version as the core library, +so the version must be specified explicitly by suffixing the parser name with `@`. +Dolos uses Tree-sitter v0.20.0 in the above example above, +so we need to install `tree-sitter-rust@0.20` in that case. +You may safely omit the minor version (the third number after the final dot). + +Use `npm` or `yarn` to install a Tree-sitter parser for a specific programming language: + +```shell +npm install -g tree-sitter-rust@0.20 +``` + +## Start Dolos with the new parser + +Dolos automatically detects newly installed parsers as soon as a new analysis is run. + +Contact us on [GitHub](https://github.com/dodona-edu/dolos/issues/1029) if you need help with supporting additional programming languages. diff --git a/docs/guide/adding-metadata.md b/docs/guide/adding-metadata.md new file mode 100644 index 000000000..141d50407 --- /dev/null +++ b/docs/guide/adding-metadata.md @@ -0,0 +1,75 @@ +# Adding metadata + +You can improve the report by adding metadata together with your submissions: + +- Adding a submission timestamp will enable the **submission timeline**. +- Adding a **label** to submissions will add a distinctly coloured label to the submissions show in the report. This is useful when you have multiple cohorts in a course. +- Adding a **full_name** will show the name of the submission author instead of the file name. + +Metadata does not alter how the plagiarism detection pipeline works. +It only has effect on the visualizations in the resulting report. + +::: info + +If you export submissions from [Dodona](./dodona.md) with the option "Include info csv" enabled, you download a ZIP-file that already has the expected metadata format for Dolos. + +::: + +## CSV format + +To submit metadata, you need to include a CSV file with this data in a structured format. +The format is the same for Dolos Online, the Dolos CLI and the Dolos javascript library. + +The `info.csv` file must have a column `filename` that contains the paths of all inspected source files relative to the root of the ZIP-file. + +These columns are optional, but will be used to improve the analysis: + +- `label`: a string label; the analysis report will use the same color for submissions with the same label (using the column name `labels` will also work, however only a single label is supported) +- `created_at`: a timestamp of the submission; timestamps are used to construct a timeline of submissions +- `full_name`: a string with the full name of the submission author (student) + +Additional columns are allowed, but will be ignored by Dolos. + +#### Example + +Here's an example of a valid `info.csv` file: + +::: code-group + +```csv [Required column only] +filename +alice.js +bob.js +carol.js +zoe.js +``` + +```csv [With optional columns] +filename,label,created_at +alice.js,teacher,2019-07-23 17:12:33 +0200 +bob.js,,2019-07-25 11:02:57 +0200 +carol.js,group1,2019-07-25 14:43:20 +0200 +zoe.js,group1,2019-07-27 19:22:39 +0200 +``` +::: + +## Using Dolos Online + +Include the `info.csv` file in the **root** of the ZIP-file (not in a directory). + +::: tip +If you export submissions from [Dodona](./dodona.md), you download a ZIP-file that has the expected format for Dolos. +Learn more about how you can analyse Dodona submissions with Dolos from the [Dodona use case](./dodona.html). +::: + + +## Using Dolos CLI + +If you're using a **ZIP** file with the submissions, add the `info.csv` to the root of the ZIP-file (not in a directory). + +With the files on your filesystem, you can point Dolos directly to the `info.csv` file: + +```shell +dolos run -l javascript info.csv +``` + diff --git a/docs/guide/docker.md b/docs/guide/docker.md index 7c56ce84a..5858e9175 100644 --- a/docs/guide/docker.md +++ b/docs/guide/docker.md @@ -1,32 +1,34 @@ # Install Dolos with Docker -We provide a [Docker image with the latest Dolos version installed](https://github.com/dodona-edu/dolos/pkgs/container/dolos) -through GitHub's container registry. You can pull the latest image with the -following command: +The lastest Dolos version comes pre-installed in a [Docker container image](https://github.com/dodona-edu/dolos/pkgs/container/dolos) +that is available from GitHub's container registry. +Use the following commando to pull the image: + ```shell docker pull ghcr.io/dodona-edu/dolos:latest ``` -## Running Dolos in Docker +## Run Dolos CLI in Docker + +The Docker container comes with a complete `npm`-installed Dolos CLI (latest version). +See the section on [Running Dolos](./running.html) to learn more about the available CLI arguments. -The Docker container contains the Dolos program installed with `npm`, it has -the same CLI arguments shown in the section [Running Dolos](./running.html). +Running Dolos from the Docker container requires some additional arguments: -You do have to pass some extra arguments to Docker to work with the container: -- `-v "$PWD:/dolos"` gives Dolos acces to your current directory -- `--init` will make sure stopping the container with Control-C works +- `-v "$PWD:/dolos"` gives Dolos access to your current directory +- `--init` assures that the container can be stopped with Control-C - `--network host` allows Dolos's webserver to bind to -For example: the command to analyze and view the samples shown in the section -[Running Dolos](./running.html) using the docker container is: +Here is, for example, a containerized version of the command from the [Running Dolos](./running.html) tutorial +to run a plagiarism detection analysis and open an interatie web app where the analysis results can be explored: ```shell docker run --init --network host -v "$PWD:/dolos" ghcr.io/dodona-edu/dolos -l javascript -f web *.js ``` :::: tip -If you do not want to bind the docker container to the host network, you can -omit `--network host` argument from **docker** and add pass `--host 0.0.0.0` to -**dolos**. You can then visit the Dolos UI at the IP address or hostname of the -docker container. +To avoid binding of the docker container to the host network, +omit the `--network host` argument from **docker** +and add pass `--host 0.0.0.0` to **dolos**. +You can then visit the interactive web app at the IP address or hostname of the docker container. :::: diff --git a/docs/guide/dodona.md b/docs/guide/dodona.md index f83354e64..4dd0355ae 100644 --- a/docs/guide/dodona.md +++ b/docs/guide/dodona.md @@ -1,46 +1,49 @@ # Use case: Dodona -This page serves as an illustration how to use Dolos in practice, by showing how -you can perform an analysis with Dolos on data exported from the online -programming exercise platform [Dodona](https://dodona.ugent.be). +To illustrate how Dolos can be used in education practice, we show how teachers can perform plagiarism detection on submissions exported from the coding platform [Dodona](https://dodona.ugent.be). -## Fetch submissions from Dodona +## Export submissions from Dodona -In [Dodona](https://dodona.ugent.be), export the students' submissions: +Export submissions for a programming exercise in a [Dodona](https://dodona.ugent.be) course: -1. Click on the series menu the exercise is in and click _Export student submissions_. ![Series menu showing "Export student submissions" as option](/images/dodona-export-0.png) -2. Select the desired exercise and click _Next step_. ![Export wizard showing a selection of exercises](/images/dodona-export-1.png) +1. In the series that contains the exercise, open the series menu and choose _Export student submissions_. ![Series menu showing "Export student submissions" as option](/images/dodona-export-0.png) +2. Select the exercise and click _Next step_. ![Export wizard showing a selection of exercises](/images/dodona-export-1.png) 3. Select the following options: - Include a summary - - Only the last submission + - Only the last submission (default) - Only students with at least one submission - - (Optionally) Group "By exercise" ![Export wizard showing different options](/images/dodona-export-2.png) -4. Start export, wait until finished and download file. +4. Click _Start export_ and wait until exporting has finished +5. Download the export (ZIP-file). ::: tip -You can select multiple exercises in step 2 if the submissions are different enough that they will have less similarities. However, Dolos will still compare the submissions as if they were for a single exercise. +It is allowed to select multiple exercises from the same series (step 2). However, Dolos will cross-compare all exported submissions without making a distinction between submissions for the same exercise or for different exercises. ::: -## Run Dolos plagiarism detection +## Detect plagiarism using Dolos Online -You can run Dolos directly on the ZIP-archive: +Open [Dolos Online](https://dolos.ugent.be/server) in your browser. Upload the ZIP-file you just downloaded from Dodona. Click _Analyze_. + +Within a few seconds, the plagiarism detection report will be ready and you will be able to explore the results. + +[Read more about how to use Dolos Online](/guide/server). + +## Run Dolos CLI (offline) + +[Installing Dolos CLI](/guide/installation) on your computer if you haven't done so. Run Dolos on the ZIP-file you just downloaded from Dodona: ```shell dolos run -f web -l ${LANGUAGE} dodona-exported.zip ``` -This will make an HTML page with an overview of the report available on [localhost:3000](http://localhost:3000). It will also create a `dolos-report-${date}/` directory with the analyzed files. +A plagiarism detection report is made available on [localhost:3000](http://localhost:3000). Dolos has also created a `dolos-report-${date}/` directory containing the analysis results in plain text. ::: tip -By passing the `info.csv` file, Dolos can include the metadata associated with -the submissions in the resulting report. +Provide metadata on the submissions by passing an `info.csv` file to Dolos. ::: -You can change how Dolos performs the analysis by passing different command-line -arguments. You can view a list of arguments by running `dolos -h`. - -## Dolos web +The plagiarism detection analysis performed by Dolos can be tweaked by passing specific command line arguments. Run `dolos -h` to see a detailed list of all available arguments. -Once you've started the Dolos with the `-f web` flag, it will launch an interactive UI which you can visit with your browser at [localhost:3000](http://localhost:3000). +### Dolos UI +Running Dolos with the `-f web` flag, will open an interactive report in your browser at [localhost:3000](http://localhost:3000). diff --git a/docs/guide/index.md b/docs/guide/index.md new file mode 100755 index 000000000..01afb2fb2 --- /dev/null +++ b/docs/guide/index.md @@ -0,0 +1,41 @@ +# Introduction + +Dolos is a source code plagiarism detection tool that [supports a broad range of programming languages](/about/languages). +It is available as an [online service](/guide/server) for regular users, and as a [command-line tool](/guide/installation) and a [JavaScript library](/guide/library) for more advanced users. The source code of Dolos is [open](https://github.com/dodona-edu/dolos) under the MIT license. + +- [Online examples to see Dolos in action](/try/) +- [Use Dolos Online on your own data](/guide/server) +- [Install Dolos as a command-line tool](/guide/installation) + +See at a glance how similar the analyzed files are from the powerful visualizations provided by Dolos. Based on our experience with teaching programming courses, Dolos focuses on two main use cases: + +- **Tests and exams** where no communication or collaboration is allowed and thus no similar submissions are expected. Submissions with a high similarity or with similar fragments could a be a sign of possible cheating behavior and are immediately visible in the interface. +- **Regular exercises** where collaboration is allowed between (small) groups of students where teachers want to see if solutions are not exchanged among larger groups of students. Dolos groups submissions within clusters to easily identify problematic groups. + +The following example shows different trends among submissions for the same exercise that was initially used for a test where no communication or collaboration was allowed (left) and that was later reused as a mandatory exercise where students were allowed to collaborate in small groups (right): + +![Two plagiarism graphs. The first plagiarism graph is of solutions submitted for a test in academic year 2020-2021 with only two connected nodes in the graph. The second plagiarism graph is of the same exercise given as a mandatory exercise in the academic year 2021-2022 and shows a lot of connected nodes, indicating a lot of plagiarism.](/images/comparison-exercise-evaluation.png) + +## Why a new tool? + +We found that all existing tools were missing some important features. Some tools only came as a web app that was down regularly or had an archaic user interface. Others tools did not support the programming languages we use in our courses or were simply too difficult to get up and running or too cumbersome to use in daily practice ... + +With Dolos, we want to provide an **open-source** tool that can easily be extended and integrated in your own workflow. It needs no installation (web app) or is **easy to install** (CLI) and has a **modern user interface**. As a result, we want teachers to be **as effective as possible** in detecting and preventing plagiarism, giving them more time do do what they do best: teaching. + +![Screenshot of the Dolos Web UI showing an overview of the analyzed submissions and a histogram with the similarity distribution](/images/dolos-screenshot.png) + +## Who made this software? + +Dolos is an active research project by [Team Dodona](https://dodona.ugent.be/en/about/) at [Ghent University](https://www.ugent.be/en) (Belgium). Please use this citation if you use Dolos in your own research: + +> Maertens et. al. (2022) J. Computer Assisted Learning [doi:10.1111/jcal.12662](https://doi.org/10.1111/jcal.12662) + +[![Header of the article titled "Dolos: Language-agnostic plagiarism detection in source code"](/images/dolos-article.png)](https://doi.org/10.1111/jcal.12662) + +See our [publications page](/about/publications) for more articles published by Team Dodona. + +## What's in a name? + +Dolos is properly named after the spirit of trickery and guile in Greek mythology. His [bio on Wikipedia](https://en.wikipedia.org/wiki/Dolos_(mythology)) reads as: + +_He became known for his skill when attempting to make a fraudulent copy statue of Aletheia, in order to trick people into thinking they were seeing the real statue. He ran out of the clay he was using to create the statue, and had to leave the feet unfinished as he quaked in fear while his skill-master looked over his attempt at deceitfulness. To his surprise, Prometheus was rather amazed at the similarity between the statues, so Dolos then became a master in cunning deception, craftiness, and treachery. There are even some stories of Dolos tricking gods into lies._ diff --git a/docs/guide/installation.md b/docs/guide/installation.md index 4b95a2fae..ae704078b 100755 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -1,107 +1,110 @@ # Installation -By following the steps on this page, you can install Dolos directly on your -system. You can also use Dolos by using the [docker container](./docker.html) we -have provided. +This tutorial describes step by step how you can install the Dolos CLI on your system. +As an alternative, you can also use the Dolos CLI from the [docker container](./docker) we provide. ## Install Node.js -Dolos needs the JavaScript runtime [Node.js](https://nodejs.org/en/), version 14 or higher. You can check if Node is installed and its version by using the command: +Dolos needs the JavaScript runtime [Node.js](https://nodejs.org/en/) (we recommend the latest LTS version). +Use this command to check if a suitable Node version is installed on your system: + ```shell node --version # v18.10.0 ``` -If this reports an error (`node: command not found`) or an older version than 14, -you will need to install Node using the instructions below. + +If this command reports an error (`node: command not found`) or if the Node.js version is too old, +you will need to install a recent version of Node.js using the instructions below. ### Windows -The Windows documentation mentions two approaches to installing Node.js: +There are two ways to install Node.js on Windows: -- Download and install Node directly from the [Node.js homepage](https://nodejs.org/en/) -- [Install Node on WSL](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl) (Windows Subsystem for Linux). +- Download and install Node.js directly from its [homepage](https://nodejs.org/en/) +- [Install Node.js on Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl) (WSL). -If you are not sure which method is best, please refer to the [Microsoft documentation site](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-overview). +Visit the [Microsoft documentation site](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-overview) for more information, +in case you are unsure which method will suite you best. ::: warning -When installing Dolos on Windows, you need to enable support for building native -modules. In the installer on the page **Tools for Native Modules** you need to -check the box to **Automatically install the necessary tools**. +When installing Dolos on Windows, you need to enable support for building native modules. +On the page **Tools for Native Modules** of the installer you need to check the box to **Automatically install the necessary tools**. -Alternatively, you can install these tools manually by following [the instructions on the node-gyp page](https://github.com/nodejs/node-gyp#on-windows). +Alternatively, you can manually install these tools by following [the instructions on the node-gyp page](https://github.com/nodejs/node-gyp#on-windows). ::: ### Debian or Ubuntu Linux -Node provides specific [installation instructions](https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions) +Node.js provides specific [installation instructions](https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions) for these Linux distributions. ### Other Linux distributions -Node is available in the repository of various [package managers](https://nodejs.org/en/download/package-manager/), -please search for Node using the package manager of your distribution. +Node.js is available in the repository of various [package managers](https://nodejs.org/en/download/package-manager/). +Search for "Node" using the package manager of your distribution. ## Install Dolos -By default, Node comes with its own package manager `npm`. You can install -Dolos with `npm` using the following command: +By default, Node.js comes with its own package manager `npm`. +Use the following commando to install Dolos with `npm`: + ```shell npm install -g @dodona/dolos ``` ::: warning -The `@dodona/` prefix is required. If you just try installing `dolos` -you will install another package not associated with this project. +The `@dodona/` prefix is required. +If you just try installing `dolos`, you will install another package that is not associated with this project. ::: -The `-g` flag will install Dolos globally. If you omit this flag, `npm` will -add Dolos as a dependency to the JavaScript project you are currently in (if any) -and Dolos will only be available there. +The `-g` flag will install Dolos globally. +If you omit this flag, `npm` will only add Dolos as a dependency to your current JavaScript project (if any) and Dolos will only be available for that project. + +Alternatively, you can use the [yarn](https://classic.yarnpkg.com/lang/en/) node package manager: -Alternatively, you can also use other node package managers like [yarn](https://classic.yarnpkg.com/lang/en/): ```shell yarn add global @dodona/dolos ``` -You should now be able to run Dolos. You can test this by running Dolos with the -`--version` flag, which will print the current Dolos version, the version of -Node it is running on and the version of tree-sitter. +You should now be able to run Dolos. +Test this by running Dolos with the `--version` flag. +This will print the Dolos version, the version of Node.js it is running on and the version of [Tree-sitter](https://tree-sitter.github.io/tree-sitter/). + ```shell dolos --version ``` -Dolos already supports most common programming languages out-of-the box. -However, if the language you want to use is not supported, you can easily -[add a new language](/guide/languages.html#adding-a-new-language). +Dolos supports most commonly used programming languages out-of-the box. +However, you can easily [add a new language](/guide/adding-languages#adding-a-new-language) if your target programming language is not yet supported. ## Troubleshooting -If you encounter a problem not listed here, or if the solution does not work for -you, please contact us a [dodona@ugent.be](mailto:dodona@ugent.be) or -[open an issue](https://github.com/dodona-edu/dolos/issues/new) on our GitHub page. +If you encounter a problem not listed here, or if the solution does not work for you, +please contact us a [dodona@ugent.be](mailto:dodona@ugent.be) +or [open an issue on GitHub](https://github.com/dodona-edu/dolos/issues/new). ### Module was compiled against a different Node.js version -If you get the following error: +The following error message + ``` Error: The module 'node_modules/@dodona/dolos/node_modules/tree-sitter/build/Release/tree_sitter_runtime_binding.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 67. This version of Node.js requires NODE_MODULE_VERSION 83. Please try re-compiling or re-installing ``` -This means `tree-sitter` was installed for another Node version. This can -occur when you update Node, or when you use a Node version manager (like nvm) -and switched versions. -**Solution:** run `npm rebuild -g --force`. This will recompile all binary -addons for your current Node version. +means that `tree-sitter` was installed for another Node.js version. +This may occur when you update Node.js, or when you use a Node.js version manager (like `nvm`) and switched versions. + +**Solution:** Run `npm rebuild -g --force`. +This will recompile all binary addons for your current Node.js version. ### Could not find Python/Visual Studio/CC installation -When installing Dolos, some native modules need to be build using `node-gyp`, -which requires Python and a compiler (Visual Studio on Windows). -For example: if you don't have Python available on your system, -you will get the following error when installing Dolos: +`node-gyp` must build some native modules when installing Dolos. +This requires Python and a compiler (Visual Studio on Windows). +For example, you get the following error when installing Dolos and Python is not installed on your system: ``` npm ERR! gyp ERR! find Python @@ -109,15 +112,15 @@ npm ERR! gyp ERR! configure error npm ERR! gyp ERR! stack Error: Could not find any Python installation to use ``` -A similar warning can be shown for `Visual Studio`, `make`, `cc`, etc. +A similar warning can be displayed for `Visual Studio`, `make`, `cc`, etc. -**Solution:** you need to install the dependencies required by `node-gyp`, there -are specific instructions for +**Solution:** Install the dependencies required by `node-gyp`. +There are specific instructions for [Unix](https://github.com/nodejs/node-gyp#on-unix), -[MacOS](https://github.com/nodejs/node-gyp#on-macos) -and [Windows](https://github.com/nodejs/node-gyp#on-windows) - +[MacOS](https://github.com/nodejs/node-gyp#on-macos), +and [Windows](https://github.com/nodejs/node-gyp#on-windows). Afterwards you may need to reinstall dependencies by passing the `--force` flag: + ```shell npm install -g --force @dodona/dolos ``` @@ -125,4 +128,5 @@ npm install -g --force @dodona/dolos ### Cannot find module './build/Release/tree_sitter_runtime_binding' Something went wrong while building the native modules. -Try to rebuild the native modules using `npm rebuild -g --force`. + +**Solution:** Try to rebuild the native modules using `npm rebuild -g --force`. diff --git a/docs/guide/languages.md b/docs/guide/languages.md deleted file mode 100644 index 4375af181..000000000 --- a/docs/guide/languages.md +++ /dev/null @@ -1,83 +0,0 @@ -# Supported programming languages - -Dolos uses [Tree-sitter](https://tree-sitter.github.io/tree-sitter/) parsers to -process source files. As a result, Dolos supports all programming languages for -which a Tree-sitter parser is available. -[The list of available parsers](https://tree-sitter.github.io/tree-sitter/#available-parsers) -is sheer endless - -![Tree-sitter logo](https://tree-sitter.github.io/tree-sitter/assets/images/tree-sitter-small.png) - -Each of these parsers has its own package which needs to be installed if you want -to use it. By default, Dolos ships out-of-the box with parsers installed for the -most common programming languages: -- JavaScript -- Java -- Python -- C -- C# -- Bash - -However, adding a new language is very easy. - -## Adding a new language - -Dolos discovers tree-sitter parsers at runtime. This means that in order to add -support for a new language, you only need that parser to be available on your -system in your `NODE_PATH`. - -We will demonstrate this by adding language support for the programming language **Rust**. - -### Check availability - -To make sure Dolos doesn't already support the desired language, you can simply start -an anlysis: - -```shell -dolos -l rust *.rs -``` - -If the parser is not installed, you will get an error message: -``` -[error] Error: No tokenizer found for rust -``` - -### Find a parser - -If the parser is not installed, you can search for it [on the Tree-sitter website](https://tree-sitter.github.io/tree-sitter/#available-parsers) -or [on the Tree-sitter GitHub page](https://github.com/tree-sitter). - -A Rust parser [exists](https://github.com/tree-sitter/tree-sitter-rust) and the package is named, unsurprisingly, `tree-sitter-rust`. - -::: tip -If the language you are looking for is not listed on either the website or GitHub, it might be that there is no parser available. -If that is the case, you can [contact us](mailto:dodona@ugent.be) and we will see if we can help. - -It is possible to [create a new parser](https://tree-sitter.github.io/tree-sitter/creating-parsers), but this quickly becomes complicated. -::: - -### Install the parser - -First, you need to check which version of Tree-sitter Dolos is currently using, -by running the command `dolos --version`. The output will look like this: - -``` -Dolos v1.0.1 -Node v14.17.3 -Tree-sitter v0.19.0 -``` - -Tree-sitter parsers need to have the same (major) version of the core library, -so you will need to specify the version explicitly by suffixing the parser name -with `@`. In the example above, Dolos is using Tree-sitter v0.19.0, so -you would need to install `tree-sitter-rust@0.19`. You may safely omit the minor -version (the numbers after the last dot). - -Install a Tree-sitter parser for a specific programming language using `npm` or `yarn`: -```shell -npm install -g tree-sitter-rust@0.19 -``` -### Start Dolos with the new parser - -Once the parser is installed, Dolos will be able to detect the new parser, and you -can run the analysis on your files. \ No newline at end of file diff --git a/docs/guide/library.md b/docs/guide/library.md new file mode 100644 index 000000000..0fe53be75 --- /dev/null +++ b/docs/guide/library.md @@ -0,0 +1,47 @@ +# Dolos Javascript library + +The Dolos CLI is actually a wrapper around the core TypeScript/JavaScript library [@dodona/dolos-lib](https://www.npmjs.com/package/@dodona/dolos-lib). +This library implements the [algorithms](/about/algorithm) of the Dolos plagiarism detection pipeline. +Feel free to use or extend individual algorithms in your own projects. +We're happy to [hear](https://dodona.ugent.be/nl/contact/) about any extensions you make. + +## Installation + +Using `npm` or `yarn` to install the library, similar to [installing the CLI](/guide/installation): + +```shell +npm install @dodona/dolos-lib +``` + +## Usage + +Take a look at our [example repository](https://github.com/rien/dolos-lib-example/blob/main/index.mjs) +for some simple use cases that demonstrate how the library can be used. + +For example, this JavaScript code snippet logs all matching fragments shared among a list of files: + +```javascript +import { Dolos } from "@dodona/dolos-lib"; + +const files = [ + "sample.js", + "copied_function.js", + "another_copied_function.js", + "copy_of_sample.js", +]; + +const dolos = new Dolos(); +const report = await dolos.analyzePaths(files); + +for (const pair of report.allPairs()) { + for (const fragment of pair.buildFragments()) { + const left = fragment.leftSelection; + const right = fragment.rightSelection; + console.log(`${pair.leftFile.path}:{${left.startRow},${left.startCol} -> ${left.endRow},${left.endCol}} matches with ${pair.rightFile.path}:{${right.startRow},${right.startCol} -> ${right.endRow},${right.endCol}}`); + } +} +``` + +Since Dolos primarily targets teachers that will use Dolos as a [web app](/guide/server) or as a [command line tool](/guide/running), +the library is not documented as extensive as we would like. +Feel free to [create an issue on GitHub](https://github.com/dodona-edu/dolos) or [send us an email](mailto:dodona@ugent.be) if you have any questions. diff --git a/docs/guide/running.md b/docs/guide/running.md index a5f4d290e..d3988d1d4 100644 --- a/docs/guide/running.md +++ b/docs/guide/running.md @@ -1,32 +1,35 @@ -# Running Dolos +# Running Dolos CLI -If you want to follow along, we have provided a [ZIP with sample files](/simple-dataset.zip). -Download and extract this in your terminal. - -On Unix, you can accomplish this using the following commands: +This tutorial describes how you can perform source code plagiarism detection by running Dolos on your local system. +It uses a sample set of source files contained in this [ZIP-file](/simple-dataset.zip). +Download the ZIP-file and extract the source files if you want to run the analysis yourself. +On Unix, this can be done by running the following commands in your terminal: ```shell -wget https://dolos.ugent.be/simple-dataset.zip -unzip simple-dataset.zip -ls +wget https://dolos.ugent.be/simple-dataset.zip # download the ZIP archive +unzip simple-dataset.zip # extract the ZIP archive +ls # list extracted source files # another_copied_function.js copied_function.js copy_of_sample.js info.csv sample.js ``` ## Simple start -The simplest way to run Dolos is to set the language using the `-l` or `--language` -flag and pass it a list of all the files you want to analyze: +The easiest way to detect plagiarism by running the Dolos CLI is to +set the programming language using the `-l` or `--language` flag +and pass it a list of all files you want to inspect: ```shell -dolos run -l javascript another_copied_function.js copied_function.js copy_of_sample.js sample.js +dolos run -l javascript another_copied_function.js copied_function.js copy_of_sample.js sample.js # or shorter using file globbing (does not work on Windows) dolos run -l javascript *.js -# or by passing the info.csv +# or by passing an info.csv file dolos run -l javascript info.csv -# or by passing the ZIP-archive +# or by passing a ZIP-archive dolos run -l javascript simple-dataset.zip ``` -The output in your terminal will should look like this: + +The output in your terminal should look like this: + ``` File path File path Similarity Longest Total overlap fragment @@ -38,96 +41,77 @@ copied_function.js sample.js 0.153846 8 ``` ::: tip -You can show all the command-line options by passing the `-h` or `--help` flag -or by running `dolos help run`. +You can show all command line options by passing the `-h` or `--help` flag or by running `dolos help run`. ::: ## Adding metadata -You can improve your analysis results by giving a CSV-file instead of a list of file. This file can contain extra metadata for each submission. However, only the row `filename` with the path to each submission is required. +You can improve the plagiarism detection report by adding metadata to your submissions (submission time, labels, author name, ...). +See the page about [adding metadata](/guide/adding-metadata) to see how. -In addition, you can add the following rows to enhance the results: -- `created_at`: the timestamp at which the submission was handed in -- `full_name`: the full name of the author of the submission -- `labels`: label used to group submissions together (only one label is supported currently) +## Modifying plagiarism detection parameters -```shell -dolos run -l javascript info.csv -``` +The plagiarism detection parameters can be altered by passing the relevant arguments when running Dolos. +See [how Dolos works](/about/algorithm.html) for more information about what influence these parameters have on an analysis. -::: tip -The format of the CSV-file and the ZIP-archive that Dolos is able to analyse, is the format in which [Dodona](https://dodona.ugent.be) exports its submissions. Go to [the Dodona use case](./dodona.html) to learn how you can analyse Dodona submissions with Dolos. -::: +If running Dolos takes too long or consumes too much memory, tweaking these parameters might help. +We recommend to increase the **window length** (`-w`) first, before altering the **_k_-gram length** (`-k`). + +### Window length -## Modifying analysis parameters +Short: `-w `, long: `--kgrams-in-window `, default: `17`. -The analysis parameters can be altered by passing the relevant program -arguments. For more information about the impact of these parameters you can -read the section describing [how Dolos works](./algorithm.html). +Sets window length (in _k_-grams) used by the [winnowing algorithm](/about/algorithm.html). +The winnowing algorithm selects one _k_-grams from each overlapping window of `w` subsequent _k_-grams. +This may result in a `w`-fold reduction of the memory usage. -If a Dolos analysis is taking too long or consuming too much memory, it can -help to alter these parameters. It is recommended to increase the Window length -(`-w`) first before altering the _k_-gram length (`-k`). +Larger values decrease memory usage and runtime, but result in fewer detections and therefore also decrease the accuracy of plagiarism detection. ### _k_-gram length Short: `-k `, long: `--kgram-length `, default: `23`. -This changes the number of of _tokens_ contained in a single _k_-gram. This is the -minimum matchable unit: corresponding fragments in two files smaller than this -value will not be found. - -Larger values decrease memory usage and decrease running time, but will result -in fewer detections. - -### Window length - -Short: `-w `, long: `--kgrams-in-window `, default: `17`. - -This changes window length (in _k_-grams) used by the Winnowing algorithm. The -algorithm will pick one out of every `w` subsequent _k_-grams. This will -therefore reduce memory usage `w` times. +Sets the number of _tokens_ in a _k_-gram. +This determines the shortest matchable unit: +common fragments between two files that are shorter than $$k$$ tokens will not be found during plagiarism detection. -Larger values decrease memory usage and decrease running time, but will result -in fewer detections. +Larger values decrease memory usage and runtime, but result in fewer detections and therefore also decrease the accuracy of plagiarism detection. ### Other parameters -Dolos includes other parameters that can be used to finetune the analysis. A -more detailed listing of these parameters and their function can be viewed by -running `dolos --help`. - +Dolos has other parameters that influence a plagiarism detection analysis. +Run `dolos --help` for a more detailed listing of these parameters and a description of their impact. ## Output format -You can specify how Dolos reports its results by setting the `-f` or `--output-format` flag. +Set the `-f` or `--output-format` flag to specify how Dolos reports its analysis results. Formatting options are: - - **terminal**: outputs plain text output in your terminal (default) - - **web**: starts a webserver where you can interactively view results - - **csv**: writes the resulting CSV-files of the analysis to a directory -Often, you want to use the **web** option to use the interactive user interface -provided by Dolos: + - **terminal**: outputs analysis results in your terminal in plain text format (default) + - **csv**: outputs results as a directory containing CSV-files + - **web**: opens an interactive web app in your browser that allows a visual exploration of the analysis results + +Use the **web** option to explore the plagiarism detection results in an interactive web app: ```shell dolos run -f web -l javascript *.js ``` -This will start a local webserver where you can interactively explore the -analysis report in your browser. By default, the report is available on . +This will display an analysis report in your browser, +giving you the most interactive way to explore the results of plagiarism detection. +By default, the report is available at . The report should look like [this](https://dolos.ugent.be/demo/sample/). ## Serving generated reports -If you run Dolos with `-f web` or `-f csv`, it will create a directory with the -analysis report in your current working directory. +Running Dolos with `-f web` or `-f csv` creates a new directory in the current working directory containing the analysis report in CSV-format. + +You can manually launch an interactive web app to explore to these analysis results, +without having to re-analyze the source files, by running the following command: -You can view the results again in your browser without having to re-analyze the -files by executing the command ```shell dolos serve dolos-report-20210831T141228596Z/ ``` -This will launch the same web view as if you launched Dolos with the `-f web` -option. +This will open the same web app as if you launched Dolos with the `-f web` option. diff --git a/docs/guide/server.md b/docs/guide/server.md new file mode 100644 index 000000000..804afdfdb --- /dev/null +++ b/docs/guide/server.md @@ -0,0 +1,100 @@ +# Use Dolos Online + +Dolos Online is a [web app](https://dolos.ugent.be/server) for plagiarism detection in source code that is free to use. + +All you need is a browser. +No additional installations needed. +We describe the steps for plagiarism detection within a set of source files. +Download this [ZIP-file](/simple-dataset.zip) containing some sample files if you want to perform the analysis yourself. + +## Upload and inspect source files + +Start plagiarism detection by uploading a ZIP-file containing the source files you want to inspect. + +![Screenshot of the upload form](/images/screenshots/dolos-upload.png) + +Specify a name for the analysis or keep the default name. +This name allows you to identify results in the backlog of analysis results that is kept in your browser history. + +Dolos automatically detects the programming language of the inspected source files based on their file extensions. +If the ZIP-file contains source files from a mix of programming languages, Dolos will only inspect the files from the dominant programming language. +Select a specific programming language if you want to override the automatic selection. + +Read the terms and conditions and check "I accept the above conditions". + +Click "Analyze" to upload your files and start the analysis. + +::: tip + +You can enhance the analysis results by [adding metadata](/guide/adding-metadata) to your submissions. + +Submissions exported from [Dodona](/guide/dodona) with the option `Include info csv` enabled already include metadata in a format Dolos recognizes. + +::: + +### Analysis results + +Dolos schedules an analysis for your submitted dataset. +The scheduler uses a queue to avoid overloading the server. +You get informed as soon as the analysis is completed: + +![Notification if the analysis is complete](/images/screenshots/dolos-finished.png) + +Click "View results" to start exploring the analysis results. + +![Screenshot of the report page](/images/screenshots/dolos-report-overview.png) + +::: tip Sharing reports + +By default, the secret link to your analysis report is kept hidden, so you don't accidentally share it with others. + +To share a report, click the "Share" button in the top right corner and copy the secret link. + +::: + +## Report history + +To the right side of the upload form, you'll see a list of previous analysis results. +This list is stored in the _local storage_ of your browser, meaning that the list is removed whenever you clear your browser data. + +![Screenshot of the report history list](/images/screenshots/dolos-history.png) + +If you want to keep track of a report or share it with someone else, click the "Share" button and copy the secret link. + +If you want to permanently delete a submitted dataset and its analysis report from our servers, click the "Delete" button. + +::: info + +If the secret link to a report gets lost (for example: by clearing your browser data), you can no longer delete the report from our servers yourself. +However, the secret link is the only way to get access to the report and we periodically delete old reports from our servers. + +You can simply upload the same dataset again to generate a new report. + +::: + +## How is this free? + +[Team Dodona](https://dodona.ugent.be/en/about/) develops Dolos and runs Dolos Online. +We are researchers and teachers of programming courses at [Ghent University](https://www.ugent.be/en) (Belgium). + +Team Dodona never shares submitted files or analysis reports with others and never uses it for commercial purposes. +You can delete your data from our servers at any point. +We periodically delete older data to free up space on our servers. + +As with our [Dodona](https://dodona.ugent.be) platform for learning to code, we provide Dolos as a free service to schools and universities. +Our servers are hosted by [Ghent University](https://www.ugent.be/en) (Belgium). + +You can also [run Dolos locally](installation.html) or [host your own server](docker.html). +The source code of Dolos is open and available on Github: [github.com/dodona-edu/dolos/](https://github.com/dodona-edu/dolos/). + +### Supported by + +
+
+Ghent University +Ghent University Faculty of Sciences +ELIXIR Belgium +
+ +Help us keep Dolos and Dodona free and [support us](https://dodona.ugent.be/en/support-us/). + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..8f71ed6af --- /dev/null +++ b/docs/index.md @@ -0,0 +1,73 @@ +--- +layout: home + +titleTemplate: Source Code Plagiarism Detection + +hero: + name: "Dolos" + tagline: Quick and easy plagiarism detection for a wide range of programming languages. + text: Source code plagiarism detection + + image: + src: /images/demo-exercise-graph-circle.png + alt: The Dolos plagiarism graph + + imageLink: https://dolos.ugent.be/demo/pyramidal-constants/exercise/#/graph + + actions: + - text: Documentation + link: /guide/ + theme: alt + - text: Examples + link: /try/ + theme: alt + - text: Try it out → + link: https://dolos.ugent.be/server/ + theme: brand + + +features: + - title: Free online service + details: No installation required. Secure, private and fast. Just upload your files and get a report. + link: https://dolos.ugent.be/server/ + linkText: Try Dolos online + icon: 🌩️ + + - title: Multilingual + details: Dolos supports many programming languages by leveraging the tree-sitter parser library. + link: /about/languages.html + linkText: Supported languages + icon: 🌳 + + - title: CLI & Library + details: Run Dolos from the command line or use it as a library in your own project. For advanced users. + link: /guide/installation + linkText: Installation instructions + icon: 💻 + + + - title: Open source + details: View, use and contribute to the source code. Licensed under the MIT license. + link: https://github.com/dodona-edu/dolos + linkText: View source + icon: 📖 + + - title: Fueled by research + details: Dolos is the result of active research in the field of source code plagiarism detection. + link: /about/publications + linkText: Publications + icon: 🔬 + + - title: Advanced algorithms + details: Using state-of-the-art algorithms, Dolos helps you discover plagiarism. + link: /about/algorithm + linkText: How it works + icon: 🚀 + + +footer: Made by Team Dodona with ❤️ +--- + + + + diff --git a/docs/package.json b/docs/package.json index 3da5f6ea9..2d6a06a43 100755 --- a/docs/package.json +++ b/docs/package.json @@ -2,19 +2,18 @@ "name": "dolos-docs", "version": "2.2.4", "description": "Dolos source code plagiarism detection: information & documentation", - "main": "index.js", "authors": { "name": "Team Dodona", "email": "dodona@ugent.be" }, "repository": "https://github.com/dodona-edu/dolos", - "scripts": { - "dev": "vuepress dev .", - "build": "vuepress build ." - }, "license": "MIT", "devDependencies": { - "@vuepress/plugin-search": "2.0.0-beta.53", - "vuepress": "2.0.0-beta.53" + "vitepress": "1.0.0-beta.5" + }, + "scripts": { + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview" } } diff --git a/docs/public/images/elixir.png b/docs/public/images/elixir.png new file mode 100644 index 000000000..a629f430e Binary files /dev/null and b/docs/public/images/elixir.png differ diff --git a/docs/public/images/maertens-2022.png b/docs/public/images/maertens-2022.png new file mode 100644 index 000000000..becf9d642 Binary files /dev/null and b/docs/public/images/maertens-2022.png differ diff --git a/docs/public/images/maertens-2023.png b/docs/public/images/maertens-2023.png new file mode 100644 index 000000000..c156ada70 Binary files /dev/null and b/docs/public/images/maertens-2023.png differ diff --git a/docs/public/images/screenshots/dolos-finished.png b/docs/public/images/screenshots/dolos-finished.png new file mode 100644 index 000000000..e432f0dd4 Binary files /dev/null and b/docs/public/images/screenshots/dolos-finished.png differ diff --git a/docs/public/images/screenshots/dolos-history.png b/docs/public/images/screenshots/dolos-history.png new file mode 100644 index 000000000..f4517a2d6 Binary files /dev/null and b/docs/public/images/screenshots/dolos-history.png differ diff --git a/docs/public/images/screenshots/dolos-report-overview.png b/docs/public/images/screenshots/dolos-report-overview.png new file mode 100644 index 000000000..98e31f499 Binary files /dev/null and b/docs/public/images/screenshots/dolos-report-overview.png differ diff --git a/docs/public/images/screenshots/dolos-upload.png b/docs/public/images/screenshots/dolos-upload.png new file mode 100644 index 000000000..81bf1f76a Binary files /dev/null and b/docs/public/images/screenshots/dolos-upload.png differ diff --git a/docs/public/images/strijbol-2022.png b/docs/public/images/strijbol-2022.png new file mode 100644 index 000000000..75bf2e79c Binary files /dev/null and b/docs/public/images/strijbol-2022.png differ diff --git a/docs/public/images/strijbol-2023.png b/docs/public/images/strijbol-2023.png new file mode 100644 index 000000000..218d1f0c8 Binary files /dev/null and b/docs/public/images/strijbol-2023.png differ diff --git a/docs/public/images/ugent.png b/docs/public/images/ugent.png new file mode 100644 index 000000000..f06b9f46c Binary files /dev/null and b/docs/public/images/ugent.png differ diff --git a/docs/public/images/vanpetegem-2022.png b/docs/public/images/vanpetegem-2022.png new file mode 100644 index 000000000..a61123478 Binary files /dev/null and b/docs/public/images/vanpetegem-2022.png differ diff --git a/docs/public/images/vanpetegem-2023.png b/docs/public/images/vanpetegem-2023.png new file mode 100644 index 000000000..09c70fd9a Binary files /dev/null and b/docs/public/images/vanpetegem-2023.png differ diff --git a/docs/public/images/we.png b/docs/public/images/we.png new file mode 100644 index 000000000..c61f2a655 Binary files /dev/null and b/docs/public/images/we.png differ diff --git a/docs/try/README.md b/docs/try/index.md similarity index 82% rename from docs/try/README.md rename to docs/try/index.md index e0925c808..a652f7e7d 100644 --- a/docs/try/README.md +++ b/docs/try/index.md @@ -1,10 +1,14 @@ --- sidebar: false --- -# Try Dolos +# Examples On this page you can find the results of a plagiarism analysis for a few different cases. +## Try on your own data! + +If you want to run Dolos yourself, you can follow our [quick start guide](/guide/server.md). + ## Classroom dataset This analysis was performed on submissions for the same exercise: once as a graded test where no communication was allowed between students, and once as a mandatory exercise where collaboration is expected between small groups of students. @@ -12,12 +16,12 @@ This analysis was performed on submissions for the same exercise: once as a grad
-## Test assignment +### Test assignment [![Plagiarism graph of the submissions for a programming exercise on a test](/images/demo-evaluation-graph.png)](https://dolos.ugent.be/demo/pyramidal-constants/evaluation/) Analysis performed on all 169 submissions for a test assignment where no communication was allowed between students. All students submitted unique solutions during the test, except for two students who confessed they exchanged a solution during the test. @@ -26,13 +30,13 @@ Analysis performed on all 169 submissions for a test assignment where no communi
-## Mandatory assignment +### Mandatory assignment [![Plagiarism graph of submissions for a mandatory programming exercise where collaboration is allowed](/images/demo-exercise-graph.png)](https://dolos.ugent.be/demo/pyramidal-constants/exercise/) Analysis performed on all 392 submissions for a mandatory assignment. Communication and collaboration is allowed. Students work either individually or in groups of two or three students, but we also observe some clusters of four or more students that exchanged solutions and submitted them with hardly any varying types and amounts of modifications. @@ -51,12 +55,12 @@ Note that these labels were added manually by experts, but they might not be ful
-## Java +### Java [![Plagiarism graph of the Java files in the SOCO dataset](/images/soco-java-graph.png)](https://dolos.ugent.be/demo/soco/java/#/graph) A set of 259 Java files, of which 115 files are labeled as plagiarism. @@ -64,19 +68,15 @@ A set of 259 Java files, of which 115 files are labeled as plagiarism.
-## C +### C [![Plagiarism graph of the C files in the SOCO dataset](/images/soco-c-graph.png)](https://dolos.ugent.be/demo/soco/c/#/graph) A set of 79 C files, of which 37 files are labeled as plagiarism.
- -## Try on your own data! - -If you want to run Dolos yourself, you can follow our [quick start guide](/guide/installation.html) diff --git a/docs/vuepress.config.ts b/docs/vuepress.config.ts deleted file mode 100644 index 5b563fcb7..000000000 --- a/docs/vuepress.config.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { defineUserConfig, defaultTheme } from 'vuepress'; -import { searchPlugin } from "@vuepress/plugin-search"; -import { path } from '@vuepress/utils'; - -export default defineUserConfig({ - lang: 'en-US', - title: 'Dolos', - description: 'Dolos source code plagiarism detection: information & documentation', - - public: "public/", - - head: [ - ['meta', { name: 'theme-color', content: '#3eaf7c' }], - ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }], - ['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'black' }] - ], - - - theme: defaultTheme({ - repo: "https://github.com/dodona-edu/dolos", - editLink: false, - contributors: false, - lastUpdated: false, - navbar: [ - { - text: 'Guide', - link: '/guide/', - }, - { - text: 'Try Dolos', - link: '/try/' - }, - ], - - sidebarDepth: 1, - sidebar: [ - { - link: '/guide/', - text: 'Guide', - children: [ - './', - './installation', - './running', - './languages', - './algorithm', - './docker', - './dodona' - ] - } - ], - }), - - alias: { - '@theme/HomeHero.vue': path.resolve(__dirname, './.vuepress/components/HomeHero.vue'), - }, - - plugins: [ - searchPlugin({ - isSearchable: (page) => page.path !== '/', - }) - ], -}); diff --git a/docs/yarn.lock b/docs/yarn.lock index 4e5bf522f..e0389b2ea 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -2,181 +2,289 @@ # yarn lockfile v1 -"@babel/parser@^7.20.15", "@babel/parser@^7.21.3": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" - integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== - -"@esbuild/android-arm@0.15.18": - version "0.15.18" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80" - integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw== +"@algolia/autocomplete-core@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7" + integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw== + dependencies: + "@algolia/autocomplete-plugin-algolia-insights" "1.9.3" + "@algolia/autocomplete-shared" "1.9.3" + +"@algolia/autocomplete-plugin-algolia-insights@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587" + integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg== + dependencies: + "@algolia/autocomplete-shared" "1.9.3" -"@esbuild/linux-loong64@0.15.18": - version "0.15.18" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239" - integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ== +"@algolia/autocomplete-preset-algolia@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da" + integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA== + dependencies: + "@algolia/autocomplete-shared" "1.9.3" -"@jridgewell/sourcemap-codec@^1.4.13": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@algolia/autocomplete-shared@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" + integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== -"@mdit-vue/plugin-component@^0.11.1": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@mdit-vue/plugin-component/-/plugin-component-0.11.2.tgz#3b7b6aef7368bb1a4b006c8430f0e9b7d4044b5b" - integrity sha512-ucFiEULCkLcCG1Tf1MfG5u5PS4BIXWIeKGHRGsXxz1ix2GbZWKFVgWEdNEckBu8s75Fv1WJLIOiAYZyri2f1nw== +"@algolia/cache-browser-local-storage@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.1.tgz#b2f204a436893b4856165670ec4dda12cdc055b8" + integrity sha512-e91Jpu93X3t3mVdQwF3ZDjSFMFIfzSc+I76G4EX8nl9RYXgqcjframoL05VTjcD2YCsI18RIHAWVCBoCXVZnrw== dependencies: - "@types/markdown-it" "^12.2.3" - markdown-it "^13.0.1" + "@algolia/cache-common" "4.17.1" -"@mdit-vue/plugin-frontmatter@^0.11.1": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-0.11.1.tgz#4e4e013bf151fa54525f4e9c7c0a829912364ccb" - integrity sha512-AdZJInjD1pTJXlfhuoBS5ycuIQ3ewBfY0R/XHM3TRDEaDHQJHxouUCpCyijZmpdljTU45lFetIowaKtAi7GBog== - dependencies: - "@mdit-vue/types" "0.11.0" - "@types/markdown-it" "^12.2.3" - gray-matter "^4.0.3" - markdown-it "^13.0.1" - -"@mdit-vue/plugin-headers@^0.11.1": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@mdit-vue/plugin-headers/-/plugin-headers-0.11.2.tgz#dd7ca7d00a6b2e28d516ba83718c6e336995d125" - integrity sha512-hH2zm4m+2tWe7dya/nxbbpB95pa9RjwYxl++kyZuRrqyhNTtsi2HWojX02peQ1nQMKKIWPDHtpeAHGP7dOLKFw== - dependencies: - "@mdit-vue/shared" "0.11.2" - "@mdit-vue/types" "0.11.0" - "@types/markdown-it" "^12.2.3" - markdown-it "^13.0.1" - -"@mdit-vue/plugin-sfc@^0.11.1": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@mdit-vue/plugin-sfc/-/plugin-sfc-0.11.1.tgz#1e7102ea3f67f0761e482ac50c413f7e10e1ba41" - integrity sha512-3AjQXqExzT9FWGNOeTBqK1pbt1UA5anrZvjo7OO2PJ3lrfZd0rbjionFkmW/VW1912laHUraIP6n74mUNqPuWw== - dependencies: - "@mdit-vue/types" "0.11.0" - "@types/markdown-it" "^12.2.3" - markdown-it "^13.0.1" - -"@mdit-vue/plugin-title@^0.11.1": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@mdit-vue/plugin-title/-/plugin-title-0.11.2.tgz#8fc030ef1ef835872ce8a184a6941242c8bdc10e" - integrity sha512-R91WCN16CePWRT2bSXaDJGXvj0MuaCz4m2GbYqUbQxd+dqf18uuGPdbhr1rwhIqCvy7GD/g7hSgOFi3DNDAIzA== - dependencies: - "@mdit-vue/shared" "0.11.2" - "@mdit-vue/types" "0.11.0" - "@types/markdown-it" "^12.2.3" - markdown-it "^13.0.1" - -"@mdit-vue/plugin-toc@^0.11.1": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@mdit-vue/plugin-toc/-/plugin-toc-0.11.2.tgz#ed508ec23fd7ea2b6a7263ac4c1b98a4bbdc0853" - integrity sha512-0OcGG4TnYIZJ6SLZtk24Nj0oP2vcLn0FyMTao/nB/2Z17/fP3whoo6dVV+0G4Oi8HZ+MMDi661lvS2b4b/glYA== +"@algolia/cache-common@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.1.tgz#f4877f6fdc594a29ce6d032fae96f0517bf80b1d" + integrity sha512-fvi1WT8aSiGAKrcTw8Qg3RYgcwW8GZMHcqEm4AyDBEy72JZlFBSY80cTQ75MslINjCHXLDT+9EN8AGI9WVY7uA== + +"@algolia/cache-in-memory@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.1.tgz#7b3ab5f6de897677d92db549f8228966c62966d5" + integrity sha512-NbBt6eBWlsXc5geSpfPRC5dkIB/0Ptthw8r0yM5Z7D3sPlYdnTZSO9y9XWXIptRMwmZe4cM8iBMN8y0tzbcBkA== dependencies: - "@mdit-vue/shared" "0.11.2" - "@mdit-vue/types" "0.11.0" - "@types/markdown-it" "^12.2.3" - markdown-it "^13.0.1" - -"@mdit-vue/shared@0.11.2", "@mdit-vue/shared@^0.11.0": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@mdit-vue/shared/-/shared-0.11.2.tgz#ef575b9b6b4697858b9e391dcae7307b503bd9ad" - integrity sha512-Z/GS/v9DURZE13Hv41meKzdnprMwenVJoM3t82OE5HIGvtE6QovsZ+mMF/rMvLgaLLMDjT3EwvrrBmemWkHYTQ== + "@algolia/cache-common" "4.17.1" + +"@algolia/client-account@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.1.tgz#81747c0828d2688af4a98bbed3d3b0aa7daa25f6" + integrity sha512-3rL/6ofJvyL+q8TiWM3qoM9tig+SY4gB1Vbsj+UeJPnJm8Khm+7OS+r+mFraqR6pTehYqN8yGYoE7x4diEn4aA== dependencies: - "@mdit-vue/types" "0.11.0" - "@types/markdown-it" "^12.2.3" - markdown-it "^13.0.1" - -"@mdit-vue/types@0.11.0", "@mdit-vue/types@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@mdit-vue/types/-/types-0.11.0.tgz#ab9c6f4e69d9c9eaabf1a73e59dc699875b224ef" - integrity sha512-ygCGP7vFpqS02hpZwEe1uz8cfImWX06+zRs08J+tCZRKb6k+easIaIHFtY9ZSxt7j9L/gAPLDo/5RmOT6z0DPQ== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "@algolia/client-common" "4.17.1" + "@algolia/client-search" "4.17.1" + "@algolia/transporter" "4.17.1" + +"@algolia/client-analytics@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.1.tgz#d6ecc75fd792fb1dee67c01497098ce175f1c4c9" + integrity sha512-Bepr2w249vODqeBtM7i++tPmUsQ9B81aupUGbDWmjA/FX+jzQqOdhW8w1CFO5kWViNKTbz2WBIJ9U3x8hOa4bA== dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "@algolia/client-common" "4.17.1" + "@algolia/client-search" "4.17.1" + "@algolia/requester-common" "4.17.1" + "@algolia/transporter" "4.17.1" + +"@algolia/client-common@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.1.tgz#a8b561c1e3a19cce2c24e9a49bd822477c2f56d9" + integrity sha512-+r7kg4EgbFnGsDnoGSVNtXZO8xvZ0vzf1WAOV7sqV9PMf1bp6cpJP/3IuPrSk4t5w2KVl+pC8jfTM7HcFlfBEQ== dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "@algolia/requester-common" "4.17.1" + "@algolia/transporter" "4.17.1" -"@types/debug@^4.1.7": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== +"@algolia/client-personalization@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.1.tgz#26b2c8e13e9b69afd4e2c17879f538d408b708f3" + integrity sha512-gJku9DG/THJpfsSlG/az0a3QIn+VVff9kKh8PG8+7ZfxOHS+C+Y5YSeZVsC+c2cfoKLPo3CuHIiJ/p86erR3bA== dependencies: - "@types/ms" "*" + "@algolia/client-common" "4.17.1" + "@algolia/requester-common" "4.17.1" + "@algolia/transporter" "4.17.1" -"@types/fs-extra@^9.0.13": - version "9.0.13" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" - integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== +"@algolia/client-search@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.1.tgz#defaf56083e613fb593a9a49837b6aa551ed38eb" + integrity sha512-Q5YfT5gVkx60PZDQBqp/zH9aUbBdC7HVvxupiHUgnCKqRQsRZjOhLest7AI6FahepuZLBZS62COrO7v+JvKY7w== dependencies: - "@types/node" "*" + "@algolia/client-common" "4.17.1" + "@algolia/requester-common" "4.17.1" + "@algolia/transporter" "4.17.1" -"@types/hash-sum@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/hash-sum/-/hash-sum-1.0.0.tgz#838f4e8627887d42b162d05f3d96ca636c2bc504" - integrity sha512-FdLBT93h3kcZ586Aee66HPCVJ6qvxVjBlDWNmxSGSbCZe9hTsjRKdSsl4y1T+3zfujxo9auykQMnFsfyHWD7wg== +"@algolia/logger-common@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.1.tgz#fe50f67a86276cebdfd8337bc5d925f7a3bf9e43" + integrity sha512-Us28Ot+fLEmX9M96sa65VZ8EyEEzhYPxfhV9aQyKDjfXbUdJlJxKt6wZpoEg9RAPSdO8IjK9nmuW2P8au3rRsg== -"@types/linkify-it@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" - integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== +"@algolia/logger-console@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.1.tgz#d9d6dc0bb6ad1321b66163491cc4618d27beb73d" + integrity sha512-iKGQTpOjHiE64W3JIOu6dmDvn+AfYIElI9jf/Nt6umRPmP/JI9rK+OHUoW4pKrBtdG0DPd62ppeNXzSnLxY6/g== + dependencies: + "@algolia/logger-common" "4.17.1" -"@types/markdown-it-emoji@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz#f12a97df2758f38b4b38f277b468780459faff14" - integrity sha512-2ln8Wjbcj/0oRi/6VnuMeWEHHuK8uapFttvcLmDIe1GKCsFBLOLBX+D+xhDa9oWOQV0IpvxwrSfKKssAqqroog== +"@algolia/requester-browser-xhr@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.1.tgz#8be50e4196cd9d1ec311970845a42f2aee35860e" + integrity sha512-W5mGfGDsyfVR+r4pUFrYLGBEM18gs38+GNt5PE5uPULy4uVTSnnVSkJkWeRkmLBk9zEZ/Nld8m4zavK6dtEuYg== dependencies: - "@types/markdown-it" "*" + "@algolia/requester-common" "4.17.1" -"@types/markdown-it@*", "@types/markdown-it@^12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" - integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== +"@algolia/requester-common@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.1.tgz#3b3912c8df1e05f0fd49f4c9a7caa3fe45d2d995" + integrity sha512-HggXdjvVFQR0I5l7hM5WdHgQ1tqcRWeyXZz8apQ7zPWZhirmY2E9D6LVhDh/UnWQNEm7nBtM+eMFONJ3bZccIQ== + +"@algolia/requester-node-http@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.1.tgz#f4eeee985833ad2b51ac9ff757be5c1a786ff80a" + integrity sha512-NzFWecXT6d0PPsQY9L+/qoK2deF74OLcpvqCH+Vh3mh+QzPsFafcBExdguAjZsAWDn1R6JEeFW7/fo/p0SE57w== dependencies: - "@types/linkify-it" "*" - "@types/mdurl" "*" + "@algolia/requester-common" "4.17.1" -"@types/mdurl@*": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" - integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== +"@algolia/transporter@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.1.tgz#9508e08e984e110603ec66a19362017c1df59e05" + integrity sha512-ZM+qhX47Vh46mWH8/U9ihvy98HdTYpYQDSlqBD7IbiUbbyoCMke+qmdSX2MGhR2FCcXBSxejsJKKVAfbpaLVgg== + dependencies: + "@algolia/cache-common" "4.17.1" + "@algolia/logger-common" "4.17.1" + "@algolia/requester-common" "4.17.1" -"@types/ms@*": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== +"@babel/parser@^7.20.15", "@babel/parser@^7.21.3": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32" + integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA== + +"@docsearch/css@3.5.1", "@docsearch/css@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.5.1.tgz#4adf9884735bbfea621c3716e80ea97baa419b73" + integrity sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA== + +"@docsearch/js@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.5.1.tgz#6d8de3b4fcf7de94462c0e592e333efa9ebbbabd" + integrity sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw== + dependencies: + "@docsearch/react" "3.5.1" + preact "^10.0.0" + +"@docsearch/react@3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.5.1.tgz#35f4a75f948211d8bb6830d2147c575f96a85274" + integrity sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ== + dependencies: + "@algolia/autocomplete-core" "1.9.3" + "@algolia/autocomplete-preset-algolia" "1.9.3" + "@docsearch/css" "3.5.1" + algoliasearch "^4.0.0" + +"@esbuild/android-arm64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz#fa6f0cc7105367cb79cc0a8bf32bf50cb1673e45" + integrity sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw== + +"@esbuild/android-arm@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.11.tgz#ae84a410696c9f549a15be94eaececb860bacacb" + integrity sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q== + +"@esbuild/android-x64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.11.tgz#0e58360bbc789ad0d68174d32ba20e678c2a16b6" + integrity sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw== + +"@esbuild/darwin-arm64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz#fcdcd2ef76ca656540208afdd84f284072f0d1f9" + integrity sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w== + +"@esbuild/darwin-x64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz#c5ac602ec0504a8ff81e876bc8a9811e94d69d37" + integrity sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw== + +"@esbuild/freebsd-arm64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz#7012fb06ee3e6e0d5560664a65f3fefbcc46db2e" + integrity sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A== + +"@esbuild/freebsd-x64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz#c5de1199f70e1f97d5c8fca51afa9bf9a2af5969" + integrity sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q== + +"@esbuild/linux-arm64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz#2a6d3a74e0b8b5f294e22b4515b29f76ebd42660" + integrity sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog== + +"@esbuild/linux-arm@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz#5175bd61b793b436e4aece6328aa0d9be07751e1" + integrity sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg== + +"@esbuild/linux-ia32@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz#20ee6cfd65a398875f321a485e7b2278e5f6f67b" + integrity sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw== + +"@esbuild/linux-loong64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz#8e7b251dede75083bf44508dab5edce3f49d052b" + integrity sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw== + +"@esbuild/linux-mips64el@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz#a3125eb48538ac4932a9d05089b157f94e443165" + integrity sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg== + +"@esbuild/linux-ppc64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz#842abadb7a0995bd539adee2be4d681b68279499" + integrity sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ== + +"@esbuild/linux-riscv64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz#7ce6e6cee1c72d5b4d2f4f8b6fcccf4a9bea0e28" + integrity sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w== + +"@esbuild/linux-s390x@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz#98fbc794363d02ded07d300df2e535650b297b96" + integrity sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg== + +"@esbuild/linux-x64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz#f8458ec8cf74c8274e4cacd00744d8446cac52eb" + integrity sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA== + +"@esbuild/netbsd-x64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz#a7b2f991b8293748a7be42eac1c4325faf0c7cca" + integrity sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q== + +"@esbuild/openbsd-x64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz#3e50923de84c54008f834221130fd23646072b2f" + integrity sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ== + +"@esbuild/sunos-x64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz#ae47a550b0cd395de03606ecfba03cc96c7c19e2" + integrity sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng== + +"@esbuild/win32-arm64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz#05d364582b7862d7fbf4698ef43644f7346dcfcc" + integrity sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg== + +"@esbuild/win32-ia32@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz#a3372095a4a1939da672156a3c104f8ce85ee616" + integrity sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg== + +"@esbuild/win32-x64@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz#6526c7e1b40d5b9f0a222c6b767c22f6fb97aa57" + integrity sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA== -"@types/node@*": - version "20.2.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878" - integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw== +"@jridgewell/sourcemap-codec@^1.4.13": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@types/web-bluetooth@^0.0.16": - version "0.0.16" - resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8" - integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ== +"@types/web-bluetooth@^0.0.17": + version "0.0.17" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40" + integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA== -"@vitejs/plugin-vue@^3.1.2": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz#a1484089dd85d6528f435743f84cdd0d215bbb54" - integrity sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw== +"@vitejs/plugin-vue@^4.2.3": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" + integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw== "@vue/compiler-core@3.3.4": version "3.3.4" @@ -220,7 +328,7 @@ "@vue/compiler-dom" "3.3.4" "@vue/shared" "3.3.4" -"@vue/devtools-api@^6.4.5", "@vue/devtools-api@^6.5.0": +"@vue/devtools-api@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== @@ -268,847 +376,126 @@ "@vue/compiler-ssr" "3.3.4" "@vue/shared" "3.3.4" -"@vue/shared@3.3.4", "@vue/shared@^3.2.41": +"@vue/shared@3.3.4": version "3.3.4" resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780" integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ== -"@vuepress/bundler-vite@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/bundler-vite/-/bundler-vite-2.0.0-beta.53.tgz#6c425cccbe6f4d281a87dee320ded6f1e9eee329" - integrity sha512-zkqkV+EnoTi7cTRi6xjb0SRg0GzRYwceJu80/6q7Bd+h+VktqhapcHAZ8QaIsq8OxCXbg3sms/A9kg3UxBnRqg== - dependencies: - "@vitejs/plugin-vue" "^3.1.2" - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - autoprefixer "^10.4.12" - connect-history-api-fallback "^2.0.0" - postcss "^8.4.18" - postcss-load-config "^4.0.1" - rollup "^2.79.1" - vite "~3.1.8" - vue "^3.2.41" - vue-router "^4.1.6" - -"@vuepress/cli@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/cli/-/cli-2.0.0-beta.53.tgz#5c8670abadb29797eb65071be93b0b6a76f444c0" - integrity sha512-MT2y6syOIP17hq/mWiZXTDEViDb3/k5eIVzlvpw4N8oiAr4hwwdCUzQ5vKVd7trn+83KvG5XYOLtjrj1hexlYg== - dependencies: - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - cac "^6.7.14" - chokidar "^3.5.3" - envinfo "^7.8.1" - esbuild "^0.15.12" - -"@vuepress/client@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/client/-/client-2.0.0-beta.53.tgz#c60fd217d01510ea62f57b8077940a51342f45f8" - integrity sha512-TDKxlrUvwfWu3QAY4SHeu9mVqBkEoKvuoy0WsKy7x9omEy8+HJG1O9y664bP9SotD52skcKL1iW38nQJR2+AkQ== - dependencies: - "@vue/devtools-api" "^6.4.5" - "@vuepress/shared" "2.0.0-beta.53" - vue "^3.2.41" - vue-router "^4.1.6" - -"@vuepress/core@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/core/-/core-2.0.0-beta.53.tgz#600da932f6ece8699580ecaf9937bc6bf6e7a71d" - integrity sha512-s642hM+PpiNphLm/KZvva45OYKX6hWRh2Y+C92TDGzCMxiONI8ZxGLqXRCw5bKw5NGh91s+P4sf3iaY+JxL1Ig== - dependencies: - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/markdown" "2.0.0-beta.53" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - vue "^3.2.41" - -"@vuepress/markdown@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-2.0.0-beta.53.tgz#8f9cc4a91e7bfb34d2606ffcde1d13526dc69308" - integrity sha512-ohIujGc0tVSsFTBD5kyB0asxLsDtctzrOOgHvaS2fDWqm0MQisjxnQKNFdbWk9bfddAyty0aKN+m/4l0f5lCDw== - dependencies: - "@mdit-vue/plugin-component" "^0.11.1" - "@mdit-vue/plugin-frontmatter" "^0.11.1" - "@mdit-vue/plugin-headers" "^0.11.1" - "@mdit-vue/plugin-sfc" "^0.11.1" - "@mdit-vue/plugin-title" "^0.11.1" - "@mdit-vue/plugin-toc" "^0.11.1" - "@mdit-vue/shared" "^0.11.0" - "@mdit-vue/types" "^0.11.0" - "@types/markdown-it" "^12.2.3" - "@types/markdown-it-emoji" "^2.0.2" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - markdown-it "^13.0.1" - markdown-it-anchor "^8.6.5" - markdown-it-emoji "^2.0.2" - mdurl "^1.0.1" - -"@vuepress/plugin-active-header-links@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-beta.53.tgz#08b4a196a659b06fe386d04e824ffaa31ddd0e58" - integrity sha512-rlDQ4CpF/awzHN6l6c5C4/bbiAZisZ2Z9cP2GJJBbxIb6QA6GOrIoHMt6L+9321Q+/jmntjoRJT4yHP/jg8OMA== - dependencies: - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - ts-debounce "^4.0.0" - vue "^3.2.41" - vue-router "^4.1.6" - -"@vuepress/plugin-back-to-top@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-beta.53.tgz#ef19c8a8b48643b9eaf9a0c3acffcb60958024a6" - integrity sha512-M7+WIA1e57yHbpUKksVDQdcHceslqeGn0/MldjmZHZ/xosxjM/ZIsw7AiSdmCcISEZBr60IXxDoLqJMNhMNQLQ== - dependencies: - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - ts-debounce "^4.0.0" - vue "^3.2.41" - -"@vuepress/plugin-container@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-container/-/plugin-container-2.0.0-beta.53.tgz#b112de6559af7fb82c42327bbe2be6969d810d70" - integrity sha512-kkEee5iGRHfGVFNBsF2b5vCfjC7dcmU2zqICJq8/UZbhWuyAavpmDovQYLCVh/yTfNE1FlRUOAFFI+jf3bvF9g== - dependencies: - "@types/markdown-it" "^12.2.3" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/markdown" "2.0.0-beta.53" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - markdown-it "^13.0.1" - markdown-it-container "^3.0.0" - -"@vuepress/plugin-external-link-icon@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-beta.53.tgz#8ad4fe660192bc991ccf7051dd5fdc9476e6a0f9" - integrity sha512-S+IY1PK96Vbuf90IdZBe36kRpMCXrGr9TPaPm1aAQ9GA0Y5QQkTV876SXsb0n1B6Ae2AsSieulB2o4lyoL1LBQ== - dependencies: - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/markdown" "2.0.0-beta.53" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - vue "^3.2.41" - -"@vuepress/plugin-git@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-git/-/plugin-git-2.0.0-beta.53.tgz#6fffbf178ec4ee41e0134198474b96af6d31d3bc" - integrity sha512-hefVEUhxTgvDcrsIutVBBfJvixR/L6iTQZ9eDAj2z71fOgnVNdN8PNZ9XRDm3nhZrye9X44AmJI82Wk9SlwgVw== - dependencies: - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - execa "^6.1.0" - -"@vuepress/plugin-medium-zoom@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-beta.53.tgz#03a7b49bdcac4bdc8e813019f74d849e348d3540" - integrity sha512-hvmO40is/JrHDcSFp73qwX90nXUAaBBZHokZ0I3D61u6acFtI4HU/vpJpu+3oiqjXHQaUNqZO5eDr4EpypGjUg== - dependencies: - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - medium-zoom "^1.0.6" - vue "^3.2.41" - -"@vuepress/plugin-nprogress@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-beta.53.tgz#7e83e959180b74e6026f3c15e4e92479ba1f72c3" - integrity sha512-xO8Dqw1yCttY6N+jDpuwE3RG+jQVPE0EieRafTWRO+fGCFobGa/6Zldc4x3+alB2xyXwFAy2495NYgPudNIWeQ== - dependencies: - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - vue "^3.2.41" - vue-router "^4.1.6" - -"@vuepress/plugin-palette@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-palette/-/plugin-palette-2.0.0-beta.53.tgz#ae9d40ce7e6f24a41d9758de277076cbcd376473" - integrity sha512-iYCb397nu/WacvXEaTmeex7lxkjHqRPXLAqBccrD4JWPshP2iu1ajM316jI8sUXSPTZZl4GOQ7+fqbr+UGHdEg== - dependencies: - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - chokidar "^3.5.3" - -"@vuepress/plugin-prismjs@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-beta.53.tgz#b6a0cec28306c6fa049ddc2624f606b27b49f493" - integrity sha512-8zAMHqSPJK8Nw9hP2V12BrAfT88Mmw37Lhi6cbc0S9Ub+wapzZkD9I1SuR1OEssqqMrHL2h1dWx25RqYstn7eA== - dependencies: - "@vuepress/core" "2.0.0-beta.53" - prismjs "^1.29.0" - -"@vuepress/plugin-search@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-2.0.0-beta.53.tgz#6904650490dc4d1d5385cf288baf896f9fa40e73" - integrity sha512-x9FScY9aLTzlp6D5wO1d0kDkAO9TkzLwGueNx5F13Nkq589weq8uTTiNRA2oDM0l+H9BF6vDJ+XJlzE5W3u9gQ== - dependencies: - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - chokidar "^3.5.3" - vue "^3.2.41" - vue-router "^4.1.6" - -"@vuepress/plugin-theme-data@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-beta.53.tgz#b838a2afae815301c8b9d1ec3cfe865a72d4f302" - integrity sha512-fTOWrsO+ql2ZcN1UtF7Xc6+J/XfOAL+4+0Tq6fSky4Gv1HdC2Euey+r+RYgYkTdogdbL2VaUp3s+jhcow5WWAg== - dependencies: - "@vue/devtools-api" "^6.4.5" - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - vue "^3.2.41" - -"@vuepress/shared@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/shared/-/shared-2.0.0-beta.53.tgz#acf19da2dd23c09afd29cffb993644e29b91d229" - integrity sha512-B0qWorGxC3ruSHdZcJW24XtEDEU3L3uPr0xzTeKVfHjOM4b9hN83YzBtW4n/WPnmk1RXVE9266Ulh9ZL5okGOw== - dependencies: - "@mdit-vue/types" "^0.11.0" - "@vue/shared" "^3.2.41" - -"@vuepress/theme-default@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-2.0.0-beta.53.tgz#0891d380360a4f4cd07b54953582cafb4ad174d0" - integrity sha512-FNzEgD2D+ZZRpgF4PfUMCVfKkpzHjmapMlho6Q74d1iqf5cbDeiTyUSWXM2SWHwyZDbdbemjcnfiztb1c215ow== - dependencies: - "@vuepress/client" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/plugin-active-header-links" "2.0.0-beta.53" - "@vuepress/plugin-back-to-top" "2.0.0-beta.53" - "@vuepress/plugin-container" "2.0.0-beta.53" - "@vuepress/plugin-external-link-icon" "2.0.0-beta.53" - "@vuepress/plugin-git" "2.0.0-beta.53" - "@vuepress/plugin-medium-zoom" "2.0.0-beta.53" - "@vuepress/plugin-nprogress" "2.0.0-beta.53" - "@vuepress/plugin-palette" "2.0.0-beta.53" - "@vuepress/plugin-prismjs" "2.0.0-beta.53" - "@vuepress/plugin-theme-data" "2.0.0-beta.53" - "@vuepress/shared" "2.0.0-beta.53" - "@vuepress/utils" "2.0.0-beta.53" - "@vueuse/core" "^9.3.1" - sass "^1.55.0" - vue "^3.2.41" - vue-router "^4.1.6" - -"@vuepress/utils@2.0.0-beta.53": - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/@vuepress/utils/-/utils-2.0.0-beta.53.tgz#ac61235436a4c45e03e7e856ea59a55de0f890cc" - integrity sha512-cYqAspUJoY1J84kbDbPbrIcfaoID5Wb+BUrcWV7x8EFPXTn/KBLgc4/KBxWkdxk8O9V96/bXBDSLlalqLJCmJw== - dependencies: - "@types/debug" "^4.1.7" - "@types/fs-extra" "^9.0.13" - "@types/hash-sum" "^1.0.0" - "@vuepress/shared" "2.0.0-beta.53" - chalk "^5.1.2" - debug "^4.3.4" - fs-extra "^10.1.0" - globby "^13.1.2" - hash-sum "^2.0.0" - ora "^6.1.2" - upath "^2.0.1" - -"@vueuse/core@^9.3.1": - version "9.13.0" - resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-9.13.0.tgz#2f69e66d1905c1e4eebc249a01759cf88ea00cf4" - integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw== - dependencies: - "@types/web-bluetooth" "^0.0.16" - "@vueuse/metadata" "9.13.0" - "@vueuse/shared" "9.13.0" - vue-demi "*" - -"@vueuse/metadata@9.13.0": - version "9.13.0" - resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-9.13.0.tgz#bc25a6cdad1b1a93c36ce30191124da6520539ff" - integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ== - -"@vueuse/shared@9.13.0": - version "9.13.0" - resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-9.13.0.tgz#089ff4cc4e2e7a4015e57a8f32e4b39d096353b9" - integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw== - dependencies: - vue-demi "*" - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -autoprefixer@^10.4.12: - version "10.4.14" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== - dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" - integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== - dependencies: - buffer "^6.0.3" - inherits "^2.0.4" - readable-stream "^3.4.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.21.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: - version "1.0.30001488" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001488.tgz#d19d7b6e913afae3e98f023db97c19e9ddc5e91f" - integrity sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ== - -chalk@^5.0.0, chalk@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== - -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - -cli-spinners@^2.6.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" +"@vueuse/core@10.2.1", "@vueuse/core@^10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.2.1.tgz#a62b54cdaf1496138a9f8a7df7f9d644892b421f" + integrity sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w== + dependencies: + "@types/web-bluetooth" "^0.0.17" + "@vueuse/metadata" "10.2.1" + "@vueuse/shared" "10.2.1" + vue-demi ">=0.14.5" + +"@vueuse/integrations@^10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-10.2.1.tgz#abc44b35f909f6b5e1a66a2d69a257bb4b087536" + integrity sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ== + dependencies: + "@vueuse/core" "10.2.1" + "@vueuse/shared" "10.2.1" + vue-demi ">=0.14.5" + +"@vueuse/metadata@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.2.1.tgz#0865066def62ed97629c417ec79678d508d22934" + integrity sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ== + +"@vueuse/shared@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.2.1.tgz#0fd0a5dd014b7713b7fe03347b30fad69bb15b30" + integrity sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw== + dependencies: + vue-demi ">=0.14.5" + +algoliasearch@^4.0.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.1.tgz#23926448b815bbf9a921bc6077abc1ce8d3224b2" + integrity sha512-4GDQ1RhP2qUR3x8PevFRbEdqZqIARNViZYjgTJmA1T7wRNtFA3W4Aqc/RsODqa1J8IO/QDla5x4tWuUS8NV8wA== + dependencies: + "@algolia/cache-browser-local-storage" "4.17.1" + "@algolia/cache-common" "4.17.1" + "@algolia/cache-in-memory" "4.17.1" + "@algolia/client-account" "4.17.1" + "@algolia/client-analytics" "4.17.1" + "@algolia/client-common" "4.17.1" + "@algolia/client-personalization" "4.17.1" + "@algolia/client-search" "4.17.1" + "@algolia/logger-common" "4.17.1" + "@algolia/logger-console" "4.17.1" + "@algolia/requester-browser-xhr" "4.17.1" + "@algolia/requester-common" "4.17.1" + "@algolia/requester-node-http" "4.17.1" + "@algolia/transporter" "4.17.1" + +ansi-sequence-parser@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed" + integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ== + +body-scroll-lock@4.0.0-beta.0: + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz#4f78789d10e6388115c0460cd6d7d4dd2bbc4f7e" + integrity sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ== csstype@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== -debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -electron-to-chromium@^1.4.284: - version "1.4.402" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.402.tgz#9aa7bbb63081513127870af6d22f829344c5ba57" - integrity sha512-gWYvJSkohOiBE6ecVYXkrDgNaUjo47QEKK0kQzmWyhkH+yoYiG44bwuicTGNSIQRG3WDMsWVZJLRnJnLNkbWvA== - -entities@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" - integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== - -envinfo@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -esbuild-android-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5" - integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA== - -esbuild-android-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04" - integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ== - -esbuild-darwin-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410" - integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg== - -esbuild-darwin-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337" - integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA== - -esbuild-freebsd-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2" - integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA== - -esbuild-freebsd-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635" - integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA== - -esbuild-linux-32@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce" - integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg== - -esbuild-linux-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c" - integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw== - -esbuild-linux-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d" - integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug== - -esbuild-linux-arm@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc" - integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA== - -esbuild-linux-mips64le@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb" - integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ== - -esbuild-linux-ppc64le@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507" - integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w== - -esbuild-linux-riscv64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6" - integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg== - -esbuild-linux-s390x@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb" - integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ== - -esbuild-netbsd-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998" - integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg== - -esbuild-openbsd-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8" - integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ== - -esbuild-sunos-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971" - integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw== - -esbuild-windows-32@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3" - integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ== - -esbuild-windows-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0" - integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw== - -esbuild-windows-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7" - integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ== - -esbuild@^0.15.12, esbuild@^0.15.9: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d" - integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q== +esbuild@^0.18.6: + version "0.18.11" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.11.tgz#cbf94dc3359d57f600a0dbf281df9b1d1b4a156e" + integrity sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA== optionalDependencies: - "@esbuild/android-arm" "0.15.18" - "@esbuild/linux-loong64" "0.15.18" - esbuild-android-64 "0.15.18" - esbuild-android-arm64 "0.15.18" - esbuild-darwin-64 "0.15.18" - esbuild-darwin-arm64 "0.15.18" - esbuild-freebsd-64 "0.15.18" - esbuild-freebsd-arm64 "0.15.18" - esbuild-linux-32 "0.15.18" - esbuild-linux-64 "0.15.18" - esbuild-linux-arm "0.15.18" - esbuild-linux-arm64 "0.15.18" - esbuild-linux-mips64le "0.15.18" - esbuild-linux-ppc64le "0.15.18" - esbuild-linux-riscv64 "0.15.18" - esbuild-linux-s390x "0.15.18" - esbuild-netbsd-64 "0.15.18" - esbuild-openbsd-64 "0.15.18" - esbuild-sunos-64 "0.15.18" - esbuild-windows-32 "0.15.18" - esbuild-windows-64 "0.15.18" - esbuild-windows-arm64 "0.15.18" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + "@esbuild/android-arm" "0.18.11" + "@esbuild/android-arm64" "0.18.11" + "@esbuild/android-x64" "0.18.11" + "@esbuild/darwin-arm64" "0.18.11" + "@esbuild/darwin-x64" "0.18.11" + "@esbuild/freebsd-arm64" "0.18.11" + "@esbuild/freebsd-x64" "0.18.11" + "@esbuild/linux-arm" "0.18.11" + "@esbuild/linux-arm64" "0.18.11" + "@esbuild/linux-ia32" "0.18.11" + "@esbuild/linux-loong64" "0.18.11" + "@esbuild/linux-mips64el" "0.18.11" + "@esbuild/linux-ppc64" "0.18.11" + "@esbuild/linux-riscv64" "0.18.11" + "@esbuild/linux-s390x" "0.18.11" + "@esbuild/linux-x64" "0.18.11" + "@esbuild/netbsd-x64" "0.18.11" + "@esbuild/openbsd-x64" "0.18.11" + "@esbuild/sunos-x64" "0.18.11" + "@esbuild/win32-arm64" "0.18.11" + "@esbuild/win32-ia32" "0.18.11" + "@esbuild/win32-x64" "0.18.11" estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -execa@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== +focus-trap@^7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.4.3.tgz#a3dae73d44df359eb92bbf37b18e173e813b16c5" + integrity sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg== dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -fast-glob@^3.2.11: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" + tabbable "^6.1.2" fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -globby@^13.1.2: - version "13.1.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" - integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -gray-matter@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -immutable@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" - integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== - -inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-unicode-supported@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -lilconfig@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -linkify-it@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" - integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== - dependencies: - uc.micro "^1.0.1" - -log-symbols@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" - integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== - dependencies: - chalk "^5.0.0" - is-unicode-supported "^1.1.0" +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== magic-string@^0.30.0: version "0.30.0" @@ -1117,407 +504,113 @@ magic-string@^0.30.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" -markdown-it-anchor@^8.6.5: - version "8.6.7" - resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634" - integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== - -markdown-it-container@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/markdown-it-container/-/markdown-it-container-3.0.0.tgz#1d19b06040a020f9a827577bb7dbf67aa5de9a5b" - integrity sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw== - -markdown-it-emoji@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz#cd42421c2fda1537d9cc12b9923f5c8aeb9029c8" - integrity sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ== - -markdown-it@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" - integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== - dependencies: - argparse "^2.0.1" - entities "~3.0.1" - linkify-it "^4.0.1" - mdurl "^1.0.1" - uc.micro "^1.0.5" - -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== - -medium-zoom@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/medium-zoom/-/medium-zoom-1.0.8.tgz#2bd1fbcf2961fa7b0e318fe284462aa9b8608ed2" - integrity sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +mark.js@8.11.1: + version "8.11.1" + resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" + integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +minisearch@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-6.1.0.tgz#6e74e743dbd0e88fa5ca52fef2391e0aa7055252" + integrity sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg== nanoid@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== -node-releases@^2.0.8: - version "2.0.11" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.11.tgz#59d7cef999d13f908e43b5a70001cf3129542f0f" - integrity sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -ora@^6.1.2: - version "6.3.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-6.3.1.tgz#a4e9e5c2cf5ee73c259e8b410273e706a2ad3ed6" - integrity sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ== - dependencies: - chalk "^5.0.0" - cli-cursor "^4.0.0" - cli-spinners "^2.6.1" - is-interactive "^2.0.0" - is-unicode-supported "^1.1.0" - log-symbols "^5.1.0" - stdin-discarder "^0.1.0" - strip-ansi "^7.0.1" - wcwidth "^1.0.1" - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== - dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" - -postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.1.10, postcss@^8.4.16, postcss@^8.4.18: - version "8.4.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" - integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== +postcss@^8.1.10, postcss@^8.4.24: + version "8.4.24" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" + integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" -prismjs@^1.29.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== +preact@^10.0.0: + version "10.15.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.15.1.tgz#a1de60c9fc0c79a522d969c65dcaddc5d994eede" + integrity sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g== -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -resolve@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rollup@^2.79.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== +rollup@^3.25.2: + version "3.26.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.26.0.tgz#9f2e0316a4ca641911cefd8515c562a9124e6130" + integrity sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg== optionalDependencies: fsevents "~2.3.2" -rollup@~2.78.0: - version "2.78.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f" - integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg== - optionalDependencies: - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -sass@^1.55.0: - version "1.62.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.62.1.tgz#caa8d6bf098935bc92fc73fa169fb3790cacd029" - integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A== +shiki@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.3.tgz#d1a93c463942bdafb9866d74d619a4347d0bbf64" + integrity sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g== dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.2, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: +source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stdin-discarder@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21" - integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== - dependencies: - bl "^5.0.0" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" +tabbable@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.1.2.tgz#b0d3ca81d582d48a80f71b267d1434b1469a3703" + integrity sha512-qCN98uP7i9z0fIS4amQ5zbGBOq+OSigYeGvPy7NDk8Y9yncqDZ9pRPgfsc2PJIVM9RrJj7GIfuRgmjoUU9zTHQ== -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== +vite@4.4.0-beta.3: + version "4.4.0-beta.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.0-beta.3.tgz#143c2281f7028ef7addda7f453ea6166663acf6a" + integrity sha512-IC/thYTvArOFRJ4qvvudnu4KKZOVc+gduS3I9OfC5SbP/Rf4kkP7z6Of2QpKeOSVqwIK24khW6VOUmVD/0yzSQ== dependencies: - ansi-regex "^6.0.1" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -ts-debounce@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ts-debounce/-/ts-debounce-4.0.0.tgz#33440ef64fab53793c3d546a8ca6ae539ec15841" - integrity sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg== - -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -vite@~3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/vite/-/vite-3.1.8.tgz#fa29144167d19b773baffd65b3972ea4c12359c9" - integrity sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg== - dependencies: - esbuild "^0.15.9" - postcss "^8.4.16" - resolve "^1.22.1" - rollup "~2.78.0" + esbuild "^0.18.6" + postcss "^8.4.24" + rollup "^3.25.2" optionalDependencies: fsevents "~2.3.2" -vue-demi@*: +vitepress@1.0.0-beta.5: + version "1.0.0-beta.5" + resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.0.0-beta.5.tgz#8cccf89df6a7c8b446d6b17008ce65d94ace2280" + integrity sha512-/RjqqRsSEKkzF6HhK5e5Ij+bZ7ETb9jNCRRgIMm10gJ+ZLC3D1OqkE465lEqCeJUgt2HZ6jmWjDqIBfrJSpv7w== + dependencies: + "@docsearch/css" "^3.5.1" + "@docsearch/js" "^3.5.1" + "@vitejs/plugin-vue" "^4.2.3" + "@vue/devtools-api" "^6.5.0" + "@vueuse/core" "^10.2.1" + "@vueuse/integrations" "^10.2.1" + body-scroll-lock "4.0.0-beta.0" + focus-trap "^7.4.3" + mark.js "8.11.1" + minisearch "^6.1.0" + shiki "^0.14.3" + vite "4.4.0-beta.3" + vue "^3.3.4" + +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + +vue-demi@>=0.14.5: version "0.14.5" resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.5.tgz#676d0463d1a1266d5ab5cba932e043d8f5f2fbd9" integrity sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA== -vue-router@^4.1.6: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.1.tgz#f8ab85c89e74682cad71519480fdf2b855e8c9e0" - integrity sha512-nW28EeifEp8Abc5AfmAShy5ZKGsGzjcnZ3L1yc2DYUo+MqbBClrRP9yda3dIekM4I50/KnEwo1wkBLf7kHH5Cw== - dependencies: - "@vue/devtools-api" "^6.5.0" - -vue@^3.2.41: +vue@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6" integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw== @@ -1527,39 +620,3 @@ vue@^3.2.41: "@vue/runtime-dom" "3.3.4" "@vue/server-renderer" "3.3.4" "@vue/shared" "3.3.4" - -vuepress-vite@2.0.0-beta.53: - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/vuepress-vite/-/vuepress-vite-2.0.0-beta.53.tgz#6724d5edd99df2d494a8145206192e4cc88e9b9a" - integrity sha512-kITVMM+LcV5mDQXQXAKgK0adAGMm7oyPls6HPTLM9gUvpSs2A19zfwf8zFoxIF9X+ANay4Tg87egtnJOcp8Wcg== - dependencies: - "@vuepress/bundler-vite" "2.0.0-beta.53" - "@vuepress/cli" "2.0.0-beta.53" - "@vuepress/core" "2.0.0-beta.53" - "@vuepress/theme-default" "2.0.0-beta.53" - -vuepress@2.0.0-beta.53: - version "2.0.0-beta.53" - resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-2.0.0-beta.53.tgz#3530f36e6ef99827c8182c13db34aca4d4680231" - integrity sha512-swnH25oCHAE0ZIXBAp4gaalIsrxLLn+mguekOybwLcTNQUgbcqf8EXwVxOgN663JzPuHcxRAJg3nN/swKsFifQ== - dependencies: - vuepress-vite "2.0.0-beta.53" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -yaml@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" - integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==