├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github └── FUNDING.yml ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc.json ├── LICENSE ├── README.md ├── esbuild.config.mjs ├── manifest.json ├── package.json ├── scripts └── release.sh ├── src ├── components │ ├── action_line.ts │ ├── action_line_button.ts │ ├── action_line_divider.ts │ ├── differences_view.ts │ └── modals │ │ ├── delete_file_modal.ts │ │ ├── risky_action_modal.ts │ │ └── select_file_modal.ts ├── data │ ├── difference.ts │ ├── file_differences.test.ts │ └── file_differences.ts ├── main.ts └── utils │ ├── string_utils.test.ts │ └── string_utils.ts ├── styles.css ├── tsconfig.json ├── version-bump.mjs ├── versions.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | insert_final_newline = true 8 | indent_style = tab 9 | indent_size = 4 10 | tab_width = 4 11 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | main.js 4 | 5 | *.css 6 | *.svg -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es2021": true 5 | }, 6 | "extends": [ 7 | "plugin:react/recommended", 8 | "airbnb", 9 | "plugin:@typescript-eslint/recommended", 10 | "prettier", 11 | "plugin:prettier/recommended" 12 | ], 13 | "parser": "@typescript-eslint/parser", 14 | "parserOptions": { 15 | "ecmaFeatures": { 16 | "jsx": true 17 | }, 18 | "ecmaVersion": 12, 19 | "sourceType": "module" 20 | }, 21 | "plugins": ["react", "@typescript-eslint", "react-hooks"], 22 | "rules": { 23 | "class-methods-use-this": "off", 24 | "no-use-before-define": "off", 25 | "no-restricted-syntax": "off", 26 | "no-warning-comments": 1, 27 | "semi": [2, "always"], 28 | "@typescript-eslint/no-use-before-define": ["error"], 29 | "react/jsx-filename-extension": [ 30 | "warn", 31 | { 32 | "extensions": [".tsx"] 33 | } 34 | ], 35 | "import/extensions": [ 36 | "error", 37 | "ignorePackages", 38 | { 39 | "ts": "never", 40 | "tsx": "never" 41 | } 42 | ], 43 | "no-shadow": "off", 44 | "@typescript-eslint/no-shadow": ["error"], 45 | "@typescript-eslint/explicit-function-return-type": [ 46 | "error", 47 | { 48 | "allowExpressions": true 49 | } 50 | ], 51 | "max-len": [ 52 | "warn", 53 | { 54 | "code": 80 55 | } 56 | ], 57 | "react-hooks/rules-of-hooks": "error", 58 | "react-hooks/exhaustive-deps": "warn", 59 | "import/prefer-default-export": "off", 60 | "react/prop-types": "off" 61 | }, 62 | "settings": { 63 | "import/resolver": { 64 | "typescript": {} 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [friebetill] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # vscode 2 | .vscode 3 | 4 | # Intellij 5 | *.iml 6 | .idea 7 | 8 | # npm 9 | node_modules 10 | 11 | # Don't include the compiled main.js file in the repo. 12 | # They should be uploaded to GitHub releases instead. 13 | main.js 14 | 15 | # Exclude sourcemaps 16 | *.map 17 | 18 | # obsidian 19 | data.json 20 | 21 | # Exclude macOS Finder (System Explorer) View States 22 | .DS_Store 23 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | # Ignore artifacts: 3 | build 4 | coverage -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 4, 4 | "semi": true, 5 | "singleQuote": true 6 | } 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Till Friebe 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Obsidian File Diff 2 | 3 | [![Obsidian Downloads](https://img.shields.io/badge/dynamic/json?color=7e6ad6&labelColor=34208c&label=Obsidian%20Downloads&query=$['file-diff'].downloads&url=https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/community-plugin-stats.json&)](obsidian://show-plugin?id=file-diff) 4 | ![GitHub stars](https://img.shields.io/github/stars/friebetill/obsidian-file-diff?style=flat) 5 | 6 | ## Commands 7 | 8 | `Compare`: Compare your active file with another file and look at the differences. 9 | 10 | `Compare and merge`: Same as `Compare`, but you have the option to merge changes. 11 | 12 | `Find sync conflicts and merge`: Finds all Syncthing conflicts and shows the merge option for each conflict sequentially. 13 | 14 | GIF of a demo show this plugin 17 | 18 | ## Motivation 19 | 20 | I created this plugin because I use [SyncThing](https://syncthing.net/) and it bothered me to clean up merge conflicts by hand. 21 | 22 | ## Installation 23 | 24 | 1. Search for "File Diff" in the community plugins of Obsidian 25 | 2. Install the plugin 26 | 3. Enable the plugin 27 | 28 | ## FAQ 29 | 30 | 1. How do I adjust the colors? 31 | 32 | Adjust the colors by following [these instructions](https://github.com/friebetill/obsidian-file-diff/issues/1#issuecomment-1425157959). 33 | 34 | ## Contributing 35 | 36 | If you have any issues or suggestions, please open an issue on the repository. 37 | If you would like to contribute code, please fork the repository and submit a 38 | pull request. 39 | 40 | ## Support 41 | 42 | For support, please open an issue on the repository, with a reproducible example if possible. 43 | 44 | If you're interested in supporting me, it would mean a lot if you could buy me a coffee through GitHub Sponsors, located on the right side. 45 | -------------------------------------------------------------------------------- /esbuild.config.mjs: -------------------------------------------------------------------------------- 1 | import builtins from "builtin-modules"; 2 | import esbuild from "esbuild"; 3 | import process from "process"; 4 | 5 | const banner = 6 | `/* 7 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 8 | if you want to view the source, please visit the github repository of this plugin 9 | */ 10 | `; 11 | 12 | const prod = (process.argv[2] === "production"); 13 | 14 | const context = await esbuild.context({ 15 | banner: { 16 | js: banner, 17 | }, 18 | entryPoints: ["src/main.ts"], 19 | bundle: true, 20 | external: [ 21 | "obsidian", 22 | "electron", 23 | "@codemirror/autocomplete", 24 | "@codemirror/collab", 25 | "@codemirror/commands", 26 | "@codemirror/language", 27 | "@codemirror/lint", 28 | "@codemirror/search", 29 | "@codemirror/state", 30 | "@codemirror/view", 31 | "@lezer/common", 32 | "@lezer/highlight", 33 | "@lezer/lr", 34 | ...builtins], 35 | format: "cjs", 36 | target: "es2018", 37 | logLevel: "info", 38 | sourcemap: prod ? false : "inline", 39 | treeShaking: true, 40 | outfile: "main.js", 41 | }); 42 | 43 | if (prod) { 44 | await context.rebuild(); 45 | process.exit(0); 46 | } else { 47 | await context.watch(); 48 | } -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "file-diff", 3 | "name": "File Diff", 4 | "version": "1.1.1", 5 | "minAppVersion": "0.15.0", 6 | "description": "Shows the differences between two files..", 7 | "author": "Till Friebe", 8 | "authorUrl": "https://friebetill.github.io/", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-file-diff", 3 | "version": "1.1.1", 4 | "description": "Shows the differences between two files.", 5 | "main": "main.js", 6 | "scripts": { 7 | "dev": "node esbuild.config.mjs", 8 | "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", 9 | "test": "vitest", 10 | "format": "prettier --write \"**/*.{ts,tsx}\"", 11 | "lint": "eslint src", 12 | "coverage": "vitest run --coverage", 13 | "release": "./scripts/release.sh" 14 | }, 15 | "keywords": [ 16 | "obsidian" 17 | ], 18 | "author": "Till Friebe", 19 | "authorUrl": "https://friebetill.github.io/", 20 | "license": "MIT", 21 | "dependencies": { 22 | "diff": "^5.1.0", 23 | "obsidian": "latest" 24 | }, 25 | "devDependencies": { 26 | "@types/diff": "^5.0.2", 27 | "@types/node": "^16.11.6", 28 | "@typescript-eslint/eslint-plugin": "5.29.0", 29 | "@typescript-eslint/parser": "5.29.0", 30 | "builtin-modules": "3.3.0", 31 | "esbuild": "0.17.3", 32 | "eslint": "^8.33.0", 33 | "eslint-config-airbnb": "^19.0.4", 34 | "eslint-config-prettier": "^8.6.0", 35 | "eslint-import-resolver-typescript": "^3.5.3", 36 | "eslint-plugin-import": "^2.27.5", 37 | "eslint-plugin-jsx-a11y": "^6.7.1", 38 | "eslint-plugin-prettier": "^4.2.1", 39 | "eslint-plugin-react": "^7.32.2", 40 | "eslint-plugin-react-hooks": "^4.6.0", 41 | "prettier": "^2.8.3", 42 | "react": "^18.2.0", 43 | "tslib": "2.4.0", 44 | "typescript": "4.7.4", 45 | "vitest": "^0.28.3" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /scripts/release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CURRENT_VERSION="" 4 | NEW_VERSION="" 5 | OBSIDIAN_MINIMUM_VERSION="0.15.0" 6 | 7 | # This script is used to release a new version of the project. 8 | main() { 9 | verifyDependencies 10 | 11 | # Version 12 | readCurrentVersion 13 | askForNewVersion 14 | 15 | # Update files 16 | updatePackageJson 17 | updateManifestJson 18 | updateVersionsJson 19 | 20 | # Git 21 | addUpdatedFiles 22 | commitChanges 23 | pushChanges 24 | 25 | buildRelease 26 | 27 | createGitHubRelease 28 | } 29 | 30 | verifyDependencies() { 31 | # Verify that GitHub CLI is installed 32 | if ! command -v gh &>/dev/null; then 33 | echo "GitHub CLI could not be found. Please install it from https://cli.github.com/." 34 | exit 35 | fi 36 | } 37 | 38 | readCurrentVersion() { 39 | CURRENT_VERSION=$(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') 40 | } 41 | 42 | askForNewVersion() { 43 | # Ask for new version number 44 | echo "What is the new version number? The current version is $CURRENT_VERSION." 45 | read -r NEW_VERSION 46 | 47 | # Check if version number is valid 48 | if [[ ! $NEW_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then 49 | echo "Version number is not valid. Please use the format x.x.x." 50 | exit 1 51 | else 52 | echo "" 53 | fi 54 | } 55 | 56 | updatePackageJson() { 57 | echo "Update version in package.json. Press ENTER to update or ESC to skip." 58 | if askForEnter; then 59 | sed -i '' "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/g" package.json 60 | 61 | echo "Verify version in package.json is correct" 62 | echo "" 63 | git --no-pager diff package.json 64 | echo "" 65 | echo "Press ENTER if the version is correct or ESC to abort." 66 | if ! askForEnter; then 67 | echo "Aborting release" 68 | exit 1 69 | fi 70 | 71 | echo "" 72 | fi 73 | } 74 | 75 | updateManifestJson() { 76 | echo "Update version in manifest.json. Press ENTER to update or ESC to skip." 77 | if askForEnter; then 78 | sed -i '' "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/g" manifest.json 79 | 80 | echo "Verify version in manifest.json is correct." 81 | echo "" 82 | git --no-pager diff manifest.json 83 | echo "" 84 | echo "Press ENTER if the version is correct or ESC to abort." 85 | if ! askForEnter; then 86 | echo "Aborting release" 87 | exit 1 88 | fi 89 | 90 | echo "" 91 | fi 92 | } 93 | 94 | updateVersionsJson() { 95 | echo "Add version to versions.json. Press ENTER to update or ESC to skip." 96 | if askForEnter; then 97 | # Add new version after line with current version in versions.json on macOS 98 | sed -i "" -E "s/(\"$CURRENT_VERSION\":.*)/\1,\n\t\"$NEW_VERSION\": \"$OBSIDIAN_MINIMUM_VERSION\"/g" versions.json 99 | 100 | echo "Verify version in versions.json is correct." 101 | echo "" 102 | git --no-pager diff versions.json 103 | echo "" 104 | echo "Press ENTER if the version is correct or ESC to abort." 105 | if ! askForEnter; then 106 | echo "Aborting release" 107 | exit 1 108 | fi 109 | 110 | echo "" 111 | fi 112 | } 113 | 114 | addUpdatedFiles() { 115 | echo "Add package.json, manifest.json and versions.json to Git. Press ENTER to add or ESC to skip." 116 | if askForEnter; then 117 | git add package.json 118 | git add manifest.json 119 | git add versions.json 120 | fi 121 | 122 | echo "" 123 | } 124 | 125 | commitChanges() { 126 | echo "Commit changes. Press ENTER to commit or ESC to skip." 127 | if askForEnter; then 128 | git commit -m "Release version $NEW_VERSION" 129 | fi 130 | echo "" 131 | } 132 | 133 | pushChanges() { 134 | echo "Push changes. Press ENTER to push or ESC to skip." 135 | if askForEnter; then 136 | git push 137 | fi 138 | echo "" 139 | } 140 | 141 | buildRelease() { 142 | echo "Build release. Press ENTER to build or ESC to skip." 143 | if askForEnter; then 144 | npm run build 145 | fi 146 | echo "" 147 | } 148 | 149 | createGitHubRelease() { 150 | echo "Create GitHub release. Press ENTER to create or ESC to skip." 151 | if askForEnter; then 152 | gh release create "$NEW_VERSION" manifest.json main.js styles.css --generate-notes 153 | fi 154 | echo "" 155 | } 156 | 157 | askForEnter() { 158 | read -r -s -n 1 key 159 | # -s: do not echo input character. 160 | # -n 1: read only 1 character (separate with space) 161 | 162 | # double brackets to test, single equals sign, empty string for just 'enter' in this case... 163 | # if [[ ... ]] is followed by semicolon and 'then' keyword 164 | if [[ $key = "" ]]; then 165 | return 0 166 | else 167 | return 1 168 | fi 169 | } 170 | 171 | main 172 | -------------------------------------------------------------------------------- /src/components/action_line.ts: -------------------------------------------------------------------------------- 1 | import { TFile } from 'obsidian'; 2 | import { Difference } from '../data/difference'; 3 | import { deleteLines, insertLine, replaceLine } from '../utils/string_utils'; 4 | import { ActionLineButton } from './action_line_button'; 5 | import { ActionLineDivider } from './action_line_divider'; 6 | 7 | type VoidCallback = () => void; 8 | 9 | export class ActionLine { 10 | constructor(args: { 11 | difference: Difference; 12 | file1: TFile; 13 | file2: TFile; 14 | file1Content: string; 15 | file2Content: string; 16 | triggerRebuild: VoidCallback; 17 | }) { 18 | this.difference = args.difference; 19 | this.file1 = args.file1; 20 | this.file2 = args.file2; 21 | this.file1Content = args.file1Content; 22 | this.file2Content = args.file2Content; 23 | this.triggerRebuild = args.triggerRebuild; 24 | } 25 | 26 | private difference: Difference; 27 | 28 | private file1: TFile; 29 | 30 | private file2: TFile; 31 | 32 | private file1Content: string; 33 | 34 | private file2Content: string; 35 | 36 | private triggerRebuild: VoidCallback; 37 | 38 | build(container: HTMLDivElement): void { 39 | const actionLine = container.createDiv({ 40 | cls: 'flex flex-row gap-1 py-0-5', 41 | }); 42 | 43 | const hasMinusLines = this.difference.file1Lines.length > 0; 44 | const hasPlusLines = this.difference.file2Lines.length > 0; 45 | 46 | if (hasPlusLines && hasMinusLines) { 47 | new ActionLineButton({ 48 | text: 'Accept Top', 49 | onClick: (e) => this.acceptTopClick(e, this.difference), 50 | }).build(actionLine); 51 | ActionLineDivider.build(actionLine); 52 | new ActionLineButton({ 53 | text: 'Accept Bottom', 54 | onClick: (e) => this.acceptBottomClick(e, this.difference), 55 | }).build(actionLine); 56 | ActionLineDivider.build(actionLine); 57 | new ActionLineButton({ 58 | text: 'Accept All', 59 | onClick: (e) => this.acceptAllClick(e, this.difference), 60 | }).build(actionLine); 61 | ActionLineDivider.build(actionLine); 62 | new ActionLineButton({ 63 | text: 'Accept None', 64 | onClick: (e) => this.acceptNoneClick(e, this.difference), 65 | }).build(actionLine); 66 | } else if (hasMinusLines) { 67 | new ActionLineButton({ 68 | text: `Accept from ${this.file1.name}`, 69 | onClick: (e) => this.insertFile1Difference(e, this.difference), 70 | }).build(actionLine); 71 | ActionLineDivider.build(actionLine); 72 | new ActionLineButton({ 73 | text: 'Discard', 74 | onClick: (e) => this.discardFile1Difference(e, this.difference), 75 | }).build(actionLine); 76 | } else if (hasPlusLines) { 77 | new ActionLineButton({ 78 | text: `Accept from ${this.file2.name}`, 79 | onClick: (e) => this.insertFile2Difference(e, this.difference), 80 | }).build(actionLine); 81 | ActionLineDivider.build(actionLine); 82 | new ActionLineButton({ 83 | text: 'Discard', 84 | onClick: (e) => this.discardFile2Difference(e, this.difference), 85 | }).build(actionLine); 86 | } 87 | } 88 | 89 | private async acceptTopClick( 90 | event: MouseEvent, 91 | difference: Difference 92 | ): Promise { 93 | event.preventDefault(); 94 | 95 | const changedLines = difference.file1Lines.join('\n'); 96 | const newContent = replaceLine({ 97 | fullText: this.file2Content, 98 | newLine: changedLines, 99 | position: difference.file2Start, 100 | linesToReplace: difference.file2Lines.length, 101 | }); 102 | await app.vault.modify(this.file2, newContent); 103 | 104 | this.triggerRebuild(); 105 | } 106 | 107 | private async acceptBottomClick( 108 | event: MouseEvent, 109 | difference: Difference 110 | ): Promise { 111 | event.preventDefault(); 112 | 113 | const changedLines = difference.file2Lines.join('\n'); 114 | const newContent = replaceLine({ 115 | fullText: this.file1Content, 116 | newLine: changedLines, 117 | position: difference.file1Start, 118 | linesToReplace: difference.file1Lines.length, 119 | }); 120 | await app.vault.modify(this.file1, newContent); 121 | 122 | this.triggerRebuild(); 123 | } 124 | 125 | private async acceptAllClick( 126 | event: MouseEvent, 127 | difference: Difference 128 | ): Promise { 129 | event.preventDefault(); 130 | 131 | const changedLines = [ 132 | ...difference.file1Lines, 133 | ...difference.file2Lines, 134 | ].join('\n'); 135 | 136 | const newFile1Content = replaceLine({ 137 | fullText: this.file1Content, 138 | newLine: changedLines, 139 | position: difference.file1Start, 140 | linesToReplace: difference.file1Lines.length, 141 | }); 142 | await app.vault.modify(this.file1, newFile1Content); 143 | 144 | const newFile2Content = replaceLine({ 145 | fullText: this.file2Content, 146 | newLine: changedLines, 147 | position: difference.file2Start, 148 | linesToReplace: difference.file2Lines.length, 149 | }); 150 | await app.vault.modify(this.file2, newFile2Content); 151 | 152 | this.triggerRebuild(); 153 | } 154 | 155 | private async acceptNoneClick( 156 | event: MouseEvent, 157 | difference: Difference 158 | ): Promise { 159 | event.preventDefault(); 160 | 161 | const newFile1Content = deleteLines({ 162 | fullText: this.file1Content, 163 | position: difference.file1Start, 164 | count: difference.file1Lines.length, 165 | }); 166 | await app.vault.modify(this.file1, newFile1Content); 167 | 168 | const newFile2Content = deleteLines({ 169 | fullText: this.file2Content, 170 | position: difference.file2Start, 171 | count: difference.file2Lines.length, 172 | }); 173 | await app.vault.modify(this.file2, newFile2Content); 174 | 175 | this.triggerRebuild(); 176 | } 177 | 178 | private async insertFile1Difference( 179 | event: MouseEvent, 180 | difference: Difference 181 | ): Promise { 182 | event.preventDefault(); 183 | 184 | const changedLines = difference.file1Lines.join('\n'); 185 | const newContent = insertLine({ 186 | fullText: this.file2Content, 187 | newLine: changedLines, 188 | position: difference.file2Start, 189 | }); 190 | await app.vault.modify(this.file2, newContent); 191 | 192 | this.triggerRebuild(); 193 | } 194 | 195 | private async insertFile2Difference( 196 | event: MouseEvent, 197 | difference: Difference 198 | ): Promise { 199 | event.preventDefault(); 200 | 201 | const changedLines = difference.file2Lines.join('\n'); 202 | const newContent = insertLine({ 203 | fullText: this.file1Content, 204 | newLine: changedLines, 205 | position: difference.file1Start, 206 | }); 207 | await app.vault.modify(this.file1, newContent); 208 | 209 | this.triggerRebuild(); 210 | } 211 | 212 | async discardFile1Difference( 213 | event: MouseEvent, 214 | difference: Difference 215 | ): Promise { 216 | event.preventDefault(); 217 | 218 | const newContent = deleteLines({ 219 | fullText: this.file1Content, 220 | position: difference.file1Start, 221 | count: difference.file1Lines.length, 222 | }); 223 | await app.vault.modify(this.file1, newContent); 224 | 225 | this.triggerRebuild(); 226 | } 227 | 228 | async discardFile2Difference( 229 | event: MouseEvent, 230 | difference: Difference 231 | ): Promise { 232 | event.preventDefault(); 233 | 234 | const newContent = deleteLines({ 235 | fullText: this.file2Content, 236 | position: difference.file2Start, 237 | count: difference.file2Lines.length, 238 | }); 239 | await app.vault.modify(this.file2, newContent); 240 | 241 | this.triggerRebuild(); 242 | } 243 | } 244 | -------------------------------------------------------------------------------- /src/components/action_line_button.ts: -------------------------------------------------------------------------------- 1 | export class ActionLineButton { 2 | constructor(args: { text: string; onClick: (e: MouseEvent) => void }) { 3 | this.text = args.text; 4 | this.onClick = args.onClick; 5 | } 6 | 7 | public text: string; 8 | 9 | public onClick: (e: MouseEvent) => void; 10 | 11 | build(actionLine: HTMLDivElement): void { 12 | actionLine 13 | .createEl('a', { 14 | text: this.text, 15 | cls: 'no-decoration text-xxs file-diff__action-line', 16 | }) 17 | .onClickEvent(this.onClick); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/action_line_divider.ts: -------------------------------------------------------------------------------- 1 | export class ActionLineDivider { 2 | static build(actionLine: HTMLDivElement): void { 3 | actionLine.createEl('span', { 4 | text: '|', 5 | cls: 'text-xxs file-diff__action-line', 6 | }); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/components/differences_view.ts: -------------------------------------------------------------------------------- 1 | import { structuredPatch, diffWords } from 'diff'; 2 | import { ItemView, TFile, ViewStateResult, WorkspaceLeaf } from 'obsidian'; 3 | import { Difference } from '../data/difference'; 4 | import { FileDifferences } from '../data/file_differences'; 5 | import { preventEmptyString } from '../utils/string_utils'; 6 | import { ActionLine } from './action_line'; 7 | import { DeleteFileModal } from './modals/delete_file_modal'; 8 | 9 | export const VIEW_TYPE_DIFFERENCES = 'differences-view'; 10 | 11 | export interface ViewState { 12 | file1: TFile; 13 | file2: TFile; 14 | showMergeOption: boolean; 15 | continueCallback?: (shouldContinue: boolean) => Promise; 16 | } 17 | 18 | export class DifferencesView extends ItemView { 19 | constructor(leaf: WorkspaceLeaf) { 20 | super(leaf); 21 | 22 | this.registerEvent( 23 | this.app.vault.on('modify', async (file) => { 24 | if (file !== this.state.file1 && file !== this.state.file2) { 25 | return; 26 | } 27 | 28 | await this.updateState(); 29 | this.build(); 30 | }) 31 | ); 32 | } 33 | 34 | private state: ViewState; 35 | 36 | private file1Content: string; 37 | 38 | private file2Content: string; 39 | 40 | private fileDifferences: FileDifferences; 41 | 42 | private file1Lines: string[]; 43 | 44 | private file2Lines: string[]; 45 | 46 | private wasDeleteModalShown = false; 47 | 48 | override getViewType(): string { 49 | return VIEW_TYPE_DIFFERENCES; 50 | } 51 | 52 | override getDisplayText(): string { 53 | if (this.state?.file1 && this.state?.file2) { 54 | return ( 55 | `File Diff: ${this.state.file1.name} ` + 56 | `and ${this.state.file2.name}` 57 | ); 58 | } 59 | return `File Diff`; 60 | } 61 | 62 | override async setState( 63 | state: ViewState, 64 | result: ViewStateResult 65 | ): Promise { 66 | super.setState(state, result); 67 | this.state = state; 68 | 69 | await this.updateState(); 70 | this.build(); 71 | } 72 | 73 | async onunload(): Promise { 74 | this.state.continueCallback?.(false); 75 | } 76 | 77 | private async updateState(): Promise { 78 | if (this.state.file1 == null || this.state.file2 == null) { 79 | return; 80 | } 81 | 82 | this.file1Content = await this.app.vault.cachedRead(this.state.file1); 83 | this.file2Content = await this.app.vault.cachedRead(this.state.file2); 84 | 85 | this.file1Lines = this.file1Content 86 | // Add trailing new line as this removes edge cases 87 | .concat('\n') 88 | .split('\n') 89 | // Streamline empty spaces at the end as this remove edge cases 90 | .map((line) => line.trimEnd()); 91 | 92 | this.file2Lines = this.file2Content 93 | // Add trailing new spaces as this removes edge cases 94 | .concat('\n') 95 | .split('\n') 96 | // Streamline empty lines at the end as this remove edge cases 97 | .map((line) => line.trimEnd()); 98 | 99 | const parsedDiff = structuredPatch( 100 | this.state.file1.path, 101 | this.state.file2.path, 102 | this.file1Lines.join('\n'), 103 | this.file2Lines.join('\n') 104 | ); 105 | this.fileDifferences = FileDifferences.fromParsedDiff(parsedDiff); 106 | 107 | } 108 | 109 | private build(): void { 110 | this.contentEl.empty(); 111 | 112 | const container = this.contentEl.createDiv({ 113 | cls: 'file-diff__container', 114 | }); 115 | 116 | this.buildLines(container); 117 | 118 | this.scrollToFirstDifference(); 119 | if ( 120 | this.fileDifferences.differences.length === 0 && 121 | this.state.showMergeOption && 122 | !this.wasDeleteModalShown 123 | ) { 124 | this.wasDeleteModalShown = true; 125 | this.showDeleteModal(); 126 | } 127 | } 128 | 129 | private buildLines(container: HTMLDivElement): void { 130 | let lineCount1 = 0; 131 | let lineCount2 = 0; 132 | const maxLineCount = Math.max(this.file1Lines.length, this.file2Lines.length) 133 | while (lineCount1 <= maxLineCount || lineCount2 <= maxLineCount) { 134 | const difference = this.fileDifferences.differences.find( 135 | // eslint-disable-next-line no-loop-func 136 | (d) => 137 | d.file1Start === lineCount1 && d.file2Start === lineCount2 138 | ); 139 | 140 | if (difference != null) { 141 | const differenceContainer = container.createDiv({ 142 | cls: 'difference', 143 | }); 144 | this.buildDifferenceVisualizer(differenceContainer, difference); 145 | lineCount1 += difference.file1Lines.length; 146 | lineCount2 += difference.file2Lines.length; 147 | } else { 148 | const line = 149 | lineCount1 <= lineCount2 150 | ? this.file1Lines[lineCount1] 151 | : this.file2Lines[lineCount2]; 152 | container.createDiv({ 153 | // Necessary to give the line a height when it's empty. 154 | text: preventEmptyString(line), 155 | cls: 'file-diff__line', 156 | }); 157 | lineCount1 += 1; 158 | lineCount2 += 1; 159 | } 160 | } 161 | } 162 | 163 | private buildDifferenceVisualizer( 164 | container: HTMLDivElement, 165 | difference: Difference 166 | ): void { 167 | if (this.state.showMergeOption) { 168 | new ActionLine({ 169 | difference, 170 | file1: this.state.file1, 171 | file2: this.state.file2, 172 | file1Content: this.file1Content, 173 | file2Content: this.file2Content, 174 | triggerRebuild: async (): Promise => { 175 | await this.updateState(); 176 | this.build(); 177 | }, 178 | }).build(container); 179 | } 180 | 181 | // Draw top diff 182 | for (let i = 0; i < difference.file1Lines.length; i += 1) { 183 | const line1 = difference.file1Lines[i]; 184 | const line2 = difference.file2Lines[i]; 185 | 186 | const lineDiv = container.createDiv({ cls: 'file-diff__line file-diff__top-line__bg' }); 187 | const diffSpans = this.buildDiffLine(line1, line2, 'file-diff_top-line__character'); 188 | 189 | // Remove border radius if applicable 190 | if (i < difference.file1Lines.length - 1 || difference.file2Lines.length !== 0) { 191 | lineDiv.classList.add('file-diff__no-bottom-border'); 192 | } 193 | if (i !== 0) { 194 | lineDiv.classList.add('file-diff__no-top-border'); 195 | } 196 | 197 | lineDiv.appendChild(diffSpans); 198 | } 199 | 200 | // Draw bottom diff 201 | for (let i = 0; i < difference.file2Lines.length; i += 1) { 202 | const line1 = difference.file1Lines[i]; 203 | const line2 = difference.file2Lines[i]; 204 | 205 | const lineDiv = container.createDiv({ cls: 'file-diff__line file-diff__bottom-line__bg' }); 206 | const diffSpans = this.buildDiffLine(line2, line1, 'file-diff_bottom-line__character'); 207 | 208 | // Remove border radius if applicable 209 | if ((i == 0 && difference.file1Lines.length > 0) || i > 0) { 210 | lineDiv.classList.add('file-diff__no-top-border'); 211 | } 212 | if (i < difference.file2Lines.length - 1) { 213 | lineDiv.classList.add('file-diff__no-bottom-border'); 214 | } 215 | 216 | lineDiv.appendChild(diffSpans); 217 | } 218 | } 219 | 220 | private buildDiffLine(line1: string, line2: string, charClass: string) { 221 | const fragment = document.createElement('div'); 222 | 223 | if (line1 != undefined && line1.length === 0) { 224 | fragment.textContent = preventEmptyString(line1); 225 | } else if (line1 != undefined && line2 != undefined) { 226 | const differences = diffWords(line2, line1); 227 | 228 | for (const difference of differences) { 229 | if (difference.removed) { 230 | continue; 231 | } 232 | 233 | const span = document.createElement('span'); 234 | // Necessary to give the line a height when it's empty. 235 | span.textContent = preventEmptyString(difference.value); 236 | if (difference.added) { 237 | span.classList.add(charClass); 238 | } 239 | fragment.appendChild(span); 240 | } 241 | } else if(line1 != undefined && line2 == undefined) { 242 | const span = document.createElement('span'); 243 | // Necessary to give the line a height when it's empty. 244 | span.textContent = preventEmptyString(line1); 245 | span.classList.add(charClass); 246 | fragment.appendChild(span); 247 | } else { 248 | fragment.textContent = preventEmptyString(line1); 249 | } 250 | 251 | return fragment; 252 | } 253 | 254 | private scrollToFirstDifference(): void { 255 | if (this.fileDifferences.differences.length === 0) { 256 | return; 257 | } 258 | 259 | const containerRect = this.contentEl 260 | .getElementsByClassName('file-diff__container')[0] 261 | .getBoundingClientRect(); 262 | const elementRect = this.contentEl 263 | .getElementsByClassName('difference')[0] 264 | .getBoundingClientRect(); 265 | this.contentEl.scrollTo({ 266 | top: elementRect.top - containerRect.top - 100, 267 | behavior: 'smooth', 268 | }); 269 | } 270 | 271 | async showDeleteModal(): Promise { 272 | // Wait a moment to avoid appearing overly aggressive with the modal 273 | await sleep(200); 274 | 275 | return new Promise((resolve, reject) => { 276 | new DeleteFileModal({ 277 | file1: this.state.file1, 278 | file2: this.state.file2, 279 | onDone: (e) => { 280 | if (e) { 281 | return reject(e); 282 | } 283 | this.state.continueCallback?.(true); 284 | this.leaf.detach(); 285 | return resolve(); 286 | }, 287 | }).open(); 288 | }); 289 | } 290 | } 291 | -------------------------------------------------------------------------------- /src/components/modals/delete_file_modal.ts: -------------------------------------------------------------------------------- 1 | import { Modal, TFile } from 'obsidian'; 2 | 3 | export class DeleteFileModal extends Modal { 4 | constructor(args: { 5 | file1: TFile; 6 | file2: TFile; 7 | onDone: (error: Error | null) => void; 8 | }) { 9 | super(app); 10 | this.file1 = args.file1; 11 | this.file2 = args.file2; 12 | this.onDone = args.onDone; 13 | } 14 | 15 | private readonly file1: TFile; 16 | 17 | private readonly file2: TFile; 18 | 19 | private readonly onDone: (error: Error | null) => void; 20 | 21 | onOpen(): void { 22 | // Counteract gravity pull by moving box up for balanced composition 23 | this.modalEl.addClass('mb-20'); 24 | 25 | this.contentEl.createEl('h3', { 26 | text: `Delete "${this.file2.name}"?`, 27 | }); 28 | this.contentEl.createEl('p', { 29 | text: 30 | `The contents of "${this.file1.name}" and ` + 31 | `"${this.file2.name}" are identical. Would you like to ` + 32 | `delete the duplicate file? Please note that this action is ` + 33 | `irreversible.`, 34 | }); 35 | 36 | const buttonContainer = this.contentEl.createDiv( 37 | 'file-diff__button-container' 38 | ); 39 | 40 | const deleteButton = buttonContainer.createEl('button', { 41 | text: 'Delete', 42 | cls: 'mod-warning mr-2', 43 | }); 44 | const cancelButton = buttonContainer.createEl('button', { 45 | text: 'Cancel', 46 | }); 47 | 48 | deleteButton.addEventListener('click', () => this.handleDeleteClick()); 49 | cancelButton.addEventListener('click', () => this.close()); 50 | } 51 | 52 | handleDeleteClick(): void { 53 | this.app.vault.delete(this.file2); 54 | 55 | this.close(); 56 | 57 | this.onDone(null); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/components/modals/risky_action_modal.ts: -------------------------------------------------------------------------------- 1 | import { Modal } from 'obsidian'; 2 | 3 | export class RiskyActionModal extends Modal { 4 | constructor(args: { onAccept: (error: Error | null) => void }) { 5 | super(app); 6 | this.onAccept = args.onAccept; 7 | } 8 | 9 | private readonly onAccept: (error: Error | null) => void; 10 | 11 | onOpen(): void { 12 | // Counteract gravity pull by moving box up for balanced composition 13 | this.modalEl.addClass('mb-20'); 14 | 15 | this.contentEl.createEl('h3', { text: `Do you accept the risk?` }); 16 | this.contentEl.createEl('p', { 17 | text: 18 | `The merging options alter the files irreversibly. ` + 19 | `Proceed with caution and only if you are aware and ` + 20 | `accepting of the associated risks.`, 21 | }); 22 | 23 | const buttonContainer = this.contentEl.createDiv( 24 | 'file-diff__button-container' 25 | ); 26 | 27 | const deleteButton = buttonContainer.createEl('button', { 28 | text: 'Accept Risk', 29 | cls: 'mod-warning mr-2', 30 | }); 31 | const cancelButton = buttonContainer.createEl('button', { 32 | text: 'Cancel', 33 | }); 34 | 35 | cancelButton.addEventListener('click', () => this.close()); 36 | deleteButton.addEventListener('click', () => { 37 | this.close(); 38 | this.onAccept(null); 39 | }); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/components/modals/select_file_modal.ts: -------------------------------------------------------------------------------- 1 | import { SuggestModal, TFile } from 'obsidian'; 2 | 3 | export class SelectFileModal extends SuggestModal { 4 | constructor(args: { 5 | selectableFiles: TFile[]; 6 | onChoose: (error: Error | null, result?: TFile) => void; 7 | }) { 8 | super(app); 9 | this.selectableFiles = args.selectableFiles; 10 | this.onChoose = args.onChoose; 11 | } 12 | 13 | private readonly selectableFiles: TFile[]; 14 | 15 | private readonly onChoose: (error: Error | null, result?: TFile) => void; 16 | 17 | getSuggestions(query: string): TFile[] { 18 | return this.selectableFiles 19 | .filter((file) => { 20 | const searchQuery = query?.toLowerCase(); 21 | return file.name?.toLowerCase().includes(searchQuery); 22 | }) 23 | .sort((a, b) => (a.stat.mtime < b.stat.mtime ? 1 : -1)); 24 | } 25 | 26 | renderSuggestion(file: TFile, el: HTMLElement): void { 27 | el.createEl('div', { text: file.name }); 28 | } 29 | 30 | onChooseSuggestion(file: TFile): void { 31 | this.onChoose(null, file); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/data/difference.ts: -------------------------------------------------------------------------------- 1 | export class Difference { 2 | constructor(args: { 3 | file1Start: number; 4 | file2Start: number; 5 | file1Lines: string[]; 6 | file2Lines: string[]; 7 | }) { 8 | this.file1Start = args.file1Start; 9 | this.file2Start = args.file2Start; 10 | this.file1Lines = args.file1Lines; 11 | this.file2Lines = args.file2Lines; 12 | } 13 | 14 | public readonly file1Start: number; 15 | 16 | public readonly file2Start: number; 17 | 18 | public readonly file1Lines: string[]; 19 | 20 | public readonly file2Lines: string[]; 21 | } 22 | -------------------------------------------------------------------------------- /src/data/file_differences.test.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import { ParsedDiff } from 'diff'; 3 | import { describe, expect, it } from 'vitest'; 4 | import { FileDifferences } from './file_differences'; 5 | 6 | describe('FileDifferences.fromParsedDiff', () => { 7 | it('should work with files containing one line', () => { 8 | const test = JSON.parse(` 9 | {"oldFileName": "1", "newFileName": "2", "hunks": [ 10 | {"oldStart": 1, "oldLines": 1, "newStart": 1, "newLines": 1, 11 | "lines": ["-a","+b"] 12 | }]} 13 | `) as ParsedDiff; 14 | 15 | const fileDifferences = FileDifferences.fromParsedDiff(test); 16 | 17 | expect(JSON.stringify(fileDifferences)).toBe( 18 | '{"file1Name":"1","file2Name":"2",' + 19 | '"differences":[{"file1Start":0,"file2Start":0,' + 20 | '"file1Lines":["a"],"file2Lines":["b"]}]}' 21 | ); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/data/file_differences.ts: -------------------------------------------------------------------------------- 1 | import { ParsedDiff } from 'diff'; 2 | import { Difference } from './difference'; 3 | 4 | /** 5 | * A class that contains the differences between two files. 6 | */ 7 | export class FileDifferences { 8 | private constructor(args: { 9 | file1Name?: string; 10 | file2Name?: string; 11 | differences: Difference[]; 12 | }) { 13 | this.file1Name = args.file1Name; 14 | this.file2Name = args.file2Name; 15 | this.differences = args.differences; 16 | } 17 | 18 | public readonly file1Name?: string; 19 | 20 | public readonly file2Name?: string; 21 | 22 | public readonly differences: Difference[]; 23 | 24 | /** 25 | * Returns a FileDifferences object from the given ParsedDiff instance. 26 | * 27 | * Why create a new data structure if parsedDiff already exists? 28 | * 29 | * The FileDifferences class was created because there was a limitation in 30 | * the existing ParsedDiff class from the diff library for my use case. The 31 | * hunk object in the ParsedDiff class can contain multiple separated line 32 | * differences, which is problematic because I wanted to display a separate 33 | * action line for each contiguous change and thus allow for more precise 34 | * selection of changes. Additionally, the user needs to be able to apply 35 | * the changes one by one and so I have to keep a state where only one 36 | * contiguous change but is applied. To solve this, I considered two 37 | * options: removing the contiguous change directly in the hunk object or 38 | * introducing a new data structure with a finer granularity. I ultimately 39 | * chose the latter option as it seemed simpler. 40 | */ 41 | static fromParsedDiff(parsedDiff: ParsedDiff): FileDifferences { 42 | const differences: Difference[] = []; 43 | 44 | parsedDiff.hunks.forEach((hunk) => { 45 | let line1Count = 0; 46 | let line2Count = 0; 47 | for (let i = 0; i < hunk.lines.length; i += 1) { 48 | const line = hunk.lines[i]; 49 | 50 | if (line.startsWith('+') || line.startsWith('-')) { 51 | const start = i; 52 | 53 | // Find the end of the contiguous lines 54 | let end = start; 55 | while ( 56 | end < hunk.lines.length - 1 && 57 | (hunk.lines[end + 1].startsWith('+') || 58 | hunk.lines[end + 1].startsWith('-')) 59 | ) { 60 | end += 1; 61 | } 62 | 63 | // Add the contiguous lines to the differences 64 | const file1Lines = hunk.lines 65 | .slice(start, end + 1) 66 | .filter((l) => l.startsWith('-')) 67 | .map((l) => l.slice(1)); 68 | const file2Lines = hunk.lines 69 | .slice(start, end + 1) 70 | .filter((l) => l.startsWith('+')) 71 | .map((l) => l.slice(1)); 72 | differences.push( 73 | new Difference({ 74 | file1Start: hunk.oldStart + start - line2Count - 1, 75 | file2Start: hunk.newStart + start - line1Count - 1, 76 | file1Lines, 77 | file2Lines, 78 | }) 79 | ); 80 | 81 | line1Count += file1Lines.length; 82 | line2Count += file2Lines.length; 83 | i += end - start; 84 | } 85 | } 86 | }); 87 | 88 | return new this({ 89 | file1Name: parsedDiff.oldFileName, 90 | file2Name: parsedDiff.newFileName, 91 | differences, 92 | }); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { Plugin, TFile } from 'obsidian'; 2 | 3 | import { 4 | DifferencesView, 5 | VIEW_TYPE_DIFFERENCES, 6 | ViewState, 7 | } from './components/differences_view'; 8 | import { RiskyActionModal } from './components/modals/risky_action_modal'; 9 | import { SelectFileModal } from './components/modals/select_file_modal'; 10 | 11 | export default class FileDiffPlugin extends Plugin { 12 | fileDiffMergeWarningKey = 'file-diff-merge-warning'; 13 | 14 | override onload(): void { 15 | this.registerView( 16 | VIEW_TYPE_DIFFERENCES, 17 | (leaf) => new DifferencesView(leaf) 18 | ); 19 | 20 | this.addCommand({ 21 | id: 'compare', 22 | name: 'Compare', 23 | editorCallback: async () => { 24 | const activeFile = this.app.workspace.getActiveFile(); 25 | if (activeFile == null) { 26 | return; 27 | } 28 | 29 | const compareFile = await this.getFileToCompare(activeFile); 30 | if (compareFile == null) { 31 | return; 32 | } 33 | 34 | this.openDifferencesView({ 35 | file1: activeFile, 36 | file2: compareFile, 37 | showMergeOption: false, 38 | }); 39 | }, 40 | }); 41 | 42 | this.addCommand({ 43 | id: 'compare-and-merge', 44 | name: 'Compare and merge', 45 | editorCallback: async () => { 46 | // Show warning when this option is selected for the first time 47 | if (!localStorage.getItem(this.fileDiffMergeWarningKey)) { 48 | await this.showRiskyActionModal(); 49 | if (!localStorage.getItem(this.fileDiffMergeWarningKey)) { 50 | return; 51 | } 52 | } 53 | 54 | const activeFile = this.app.workspace.getActiveFile(); 55 | if (activeFile == null) { 56 | return; 57 | } 58 | 59 | const compareFile = await this.getFileToCompare(activeFile); 60 | if (compareFile == null) { 61 | return; 62 | } 63 | 64 | this.openDifferencesView({ 65 | file1: activeFile, 66 | file2: compareFile, 67 | showMergeOption: true, 68 | }); 69 | }, 70 | }); 71 | 72 | this.addCommand({ 73 | id: 'find-sync-conflicts-and-merge', 74 | name: 'Find sync conflicts and merge', 75 | callback: async () => { 76 | // Show warning when this option is selected for the first time 77 | if (!localStorage.getItem(this.fileDiffMergeWarningKey)) { 78 | await this.showRiskyActionModal(); 79 | if (!localStorage.getItem(this.fileDiffMergeWarningKey)) { 80 | return; 81 | } 82 | } 83 | 84 | const syncConflicts = this.findSyncConflicts(); 85 | 86 | for await (const syncConflict of syncConflicts) { 87 | const continuePromise = new Promise((resolve) => { 88 | this.openDifferencesView({ 89 | file1: syncConflict.originalFile, 90 | file2: syncConflict.syncConflictFile, 91 | showMergeOption: true, 92 | continueCallback: async (shouldContinue: boolean) => 93 | resolve(shouldContinue), 94 | }); 95 | }); 96 | 97 | const shouldContinue = await continuePromise; 98 | if (!shouldContinue) { 99 | break; 100 | } 101 | } 102 | }, 103 | }); 104 | } 105 | 106 | override async onunload(): Promise { 107 | this.app.workspace.detachLeavesOfType(VIEW_TYPE_DIFFERENCES); 108 | } 109 | 110 | private getFileToCompare(activeFile: TFile): Promise { 111 | const selectableFiles = this.app.vault.getFiles(); 112 | selectableFiles.remove(activeFile); 113 | return this.showSelectOtherFileModal({ selectableFiles }); 114 | } 115 | 116 | private showSelectOtherFileModal(args: { 117 | selectableFiles: TFile[]; 118 | }): Promise { 119 | return new Promise((resolve, reject) => { 120 | new SelectFileModal({ 121 | selectableFiles: args.selectableFiles, 122 | onChoose: (e, f) => (e ? reject(e) : resolve(f)), 123 | }).open(); 124 | }); 125 | } 126 | 127 | private showRiskyActionModal(): Promise { 128 | return new Promise((resolve, reject) => { 129 | new RiskyActionModal({ 130 | onAccept: async (e: Error | null) => { 131 | if (e) { 132 | reject(e); 133 | } else { 134 | localStorage.setItem( 135 | this.fileDiffMergeWarningKey, 136 | 'true' 137 | ); 138 | // Wait for the set item dispatch event to be processed 139 | await sleep(50); 140 | 141 | resolve(); 142 | } 143 | }, 144 | }).open(); 145 | }); 146 | } 147 | 148 | async openDifferencesView(state: ViewState): Promise { 149 | // Closes all leafs (views) of the type VIEW_TYPE_DIFFERENCES 150 | this.app.workspace.detachLeavesOfType(VIEW_TYPE_DIFFERENCES); 151 | 152 | // Opens a new leaf (view) of the type VIEW_TYPE_DIFFERENCES 153 | const leaf = this.app.workspace.getLeaf(true); 154 | leaf.setViewState({ 155 | type: VIEW_TYPE_DIFFERENCES, 156 | active: true, 157 | state, 158 | }); 159 | this.app.workspace.revealLeaf(leaf); 160 | } 161 | 162 | findSyncConflicts(): { originalFile: TFile; syncConflictFile: TFile }[] { 163 | const syncConflicts: { 164 | originalFile: TFile; 165 | syncConflictFile: TFile; 166 | }[] = []; 167 | 168 | const files = app.vault.getMarkdownFiles(); 169 | 170 | for (const file of files) { 171 | if (file.name.includes('sync-conflict')) { 172 | const originalFileName = file.name.replace( 173 | /\.sync-conflict-\d{8}-\d{6}-[A-Z0-9]+/, 174 | '' 175 | ); 176 | const originalFile = files.find( 177 | (f) => f.name === originalFileName && (file.parent?.path ?? "") === (f.parent?.path ?? "") 178 | ); 179 | 180 | if (originalFile) { 181 | syncConflicts.push({ 182 | originalFile, 183 | syncConflictFile: file, 184 | }); 185 | } 186 | } 187 | } 188 | 189 | return syncConflicts; 190 | } 191 | } 192 | -------------------------------------------------------------------------------- /src/utils/string_utils.test.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import { describe, expect, it } from 'vitest'; 3 | import { replaceLine } from './string_utils'; 4 | 5 | describe('replaceLine', () => { 6 | it('should replace fullText with newLine at given position', () => { 7 | const fullText = 'line1\nline2\nline3'; 8 | const newFullText = replaceLine({ 9 | fullText, 10 | newLine: 'newLine2', 11 | position: 1, 12 | linesToReplace: 1, 13 | }); 14 | expect(newFullText).toBe('line1\nnewLine2\nline3'); 15 | }); 16 | 17 | it('should replacing with mutliple lines correctly', () => { 18 | const fullText = 'line1\nline2\nline3'; 19 | const newFullText = replaceLine({ 20 | fullText, 21 | newLine: 'newLine2\nnewLine3', 22 | position: 1, 23 | linesToReplace: 1, 24 | }); 25 | expect(newFullText).toBe('line1\nnewLine2\nnewLine3\nline3'); 26 | }); 27 | 28 | it('should remove line when new line is empty', () => { 29 | const fullText = 'line1\nline2\nline3'; 30 | const newFullText = replaceLine({ 31 | fullText, 32 | newLine: '', 33 | position: 1, 34 | linesToReplace: 1, 35 | }); 36 | expect(newFullText).toBe('line1\nline3'); 37 | }); 38 | 39 | it('should replace two lines', () => { 40 | const fullText = 'line1\nline2\nline3\nline4'; 41 | const newFullText = replaceLine({ 42 | fullText, 43 | newLine: 'line5', 44 | position: 1, 45 | linesToReplace: 2, 46 | }); 47 | expect(newFullText).toBe('line1\nline5\nline4'); 48 | }); 49 | }); 50 | -------------------------------------------------------------------------------- /src/utils/string_utils.ts: -------------------------------------------------------------------------------- 1 | /** Method to insert a line in a string */ 2 | export function insertLine(args: { 3 | fullText: string; 4 | newLine: string; 5 | position: number; 6 | }): string { 7 | const lines = args.fullText.split('\n'); 8 | lines.splice(args.position, 0, args.newLine); 9 | return lines.join('\n'); 10 | } 11 | 12 | /** Method to replace a line in a string */ 13 | export function replaceLine(args: { 14 | fullText: string; 15 | newLine: string; 16 | position: number; 17 | linesToReplace: number; 18 | }): string { 19 | const lines = args.fullText.split('\n'); 20 | if (args.newLine === '') { 21 | lines.splice(args.position, args.linesToReplace); 22 | } else { 23 | lines.splice(args.position, args.linesToReplace, args.newLine); 24 | } 25 | return lines.join('\n'); 26 | } 27 | 28 | /** Method to delete a line in a string */ 29 | export function deleteLines(args: { 30 | fullText: string; 31 | position: number; 32 | count: number; 33 | }): string { 34 | const lines = args.fullText.split('\n'); 35 | lines.splice(args.position, args.count); 36 | return lines.join('\n'); 37 | } 38 | 39 | /** Returns an invisible character when the text is empty. */ 40 | export function preventEmptyString(text: string): string { 41 | return text !== '' ? text : '‎'; 42 | } 43 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | .file-diff__container { 2 | width: 100%; 3 | max-width: 100%; 4 | overflow-x: scroll; 5 | padding: 1rem; 6 | } 7 | 8 | .file-diff__line { 9 | padding: 0.1rem 0; 10 | } 11 | 12 | .file-diff__button-container { 13 | text-align: right; 14 | } 15 | 16 | @media (prefers-color-scheme: light) { 17 | .file-diff__top-line__bg { 18 | background-color: #d9f4ef; 19 | border-radius: 0.25rem; /* 4px */ 20 | } 21 | 22 | .file-diff_top-line__character { 23 | background-color: #99e1d3; 24 | border-radius: 0.25rem; /* 4px */ 25 | } 26 | 27 | .file-diff__bottom-line__bg { 28 | background-color: #d9edff; 29 | border-radius: 0.25rem; /* 4px */ 30 | } 31 | 32 | .file-diff_bottom-line__character { 33 | background-color: #b1d4f2; 34 | border-radius: 0.25rem; /* 4px */ 35 | } 36 | } 37 | 38 | @media (prefers-color-scheme: dark) { 39 | .file-diff__top-line__bg { 40 | background-color: #25403b; 41 | border-radius: 0.25rem; /* 4px */ 42 | } 43 | 44 | .file-diff_top-line__character { 45 | background-color: #236559; 46 | border-radius: 0.25rem; /* 4px */ 47 | } 48 | 49 | .file-diff__bottom-line__bg { 50 | background-color: #25394b; 51 | border-radius: 0.25rem; /* 4px */ 52 | } 53 | 54 | .file-diff_bottom-line__character { 55 | background-color: #2e618d; 56 | border-radius: 0.25rem; /* 4px */ 57 | } 58 | } 59 | 60 | .file-diff__no-bottom-border { 61 | border-bottom-left-radius: 0; 62 | border-bottom-right-radius: 0; 63 | } 64 | 65 | .file-diff__no-top-border { 66 | border-top-left-radius: 0; 67 | border-top-right-radius: 0; 68 | } 69 | 70 | .file-diff__action-line { 71 | color: #919191; 72 | } 73 | 74 | /* Tailwind CSS */ 75 | .flex { 76 | display: flex; 77 | } 78 | 79 | .flex-row { 80 | flex-direction: row; 81 | } 82 | 83 | .gap-1 { 84 | gap: 0.25rem; /* 4px */ 85 | } 86 | 87 | .no-decoration { 88 | text-decoration-line: none; 89 | } 90 | 91 | .no-decoration:hover { 92 | text-decoration-line: none; 93 | } 94 | 95 | .text-xxs { 96 | font-size: 0.65rem; 97 | } 98 | 99 | /* Rename from py-0.5 to py-0-5, as dots aren't allowed in selector names */ 100 | .py-0-5 { 101 | padding-top: 0.125rem; /* 2px */ 102 | padding-bottom: 0.125rem; /* 2px */ 103 | } 104 | 105 | .mr-2 { 106 | margin-right: 0.5rem; /* 8px */ 107 | } 108 | 109 | .mb-20 { 110 | margin-bottom: 5rem; /* 80px */ 111 | } 112 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "inlineSourceMap": true, 5 | "inlineSources": true, 6 | "module": "ESNext", 7 | "target": "ES6", 8 | "allowJs": true, 9 | "noImplicitAny": true, 10 | "moduleResolution": "node", 11 | "importHelpers": true, 12 | "isolatedModules": true, 13 | "strictNullChecks": true, 14 | "lib": ["DOM", "ES5", "ES6", "ES7"], 15 | "skipLibCheck": true 16 | }, 17 | "include": ["**/*.ts"] 18 | } 19 | -------------------------------------------------------------------------------- /version-bump.mjs: -------------------------------------------------------------------------------- 1 | import { readFileSync, writeFileSync } from "fs"; 2 | 3 | const targetVersion = process.env.npm_package_version; 4 | 5 | // read minAppVersion from manifest.json and bump version to target version 6 | let manifest = JSON.parse(readFileSync("manifest.json", "utf8")); 7 | const { minAppVersion } = manifest; 8 | manifest.version = targetVersion; 9 | writeFileSync("manifest.json", JSON.stringify(manifest, null, "\t")); 10 | 11 | // update versions.json with target version and minAppVersion from manifest.json 12 | let versions = JSON.parse(readFileSync("versions.json", "utf8")); 13 | versions[targetVersion] = minAppVersion; 14 | writeFileSync("versions.json", JSON.stringify(versions, null, "\t")); 15 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.0.0": "0.15.0", 3 | "1.0.1": "0.15.0", 4 | "1.0.2": "0.15.0", 5 | "1.0.3": "0.15.0", 6 | "1.0.4": "0.15.0", 7 | "1.0.5": "0.15.0", 8 | "1.0.6": "0.15.0", 9 | "1.0.7": "0.15.0", 10 | "1.0.8": "0.15.0", 11 | "1.0.9": "0.15.0", 12 | "1.0.10": "0.15.0", 13 | "1.0.11": "0.15.0", 14 | "1.0.12": "0.15.0", 15 | "1.0.13": "0.15.0", 16 | "1.1.0": "0.15.0", 17 | "1.1.1": "0.15.0" 18 | } 19 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.20.7": 6 | version "7.22.5" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" 8 | integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== 9 | dependencies: 10 | regenerator-runtime "^0.13.11" 11 | 12 | "@esbuild/android-arm64@0.17.19": 13 | version "0.17.19" 14 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" 15 | integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== 16 | 17 | "@esbuild/android-arm64@0.17.3": 18 | version "0.17.3" 19 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.3.tgz#35d045f69c9b4cf3f8efcd1ced24a560213d3346" 20 | integrity sha512-XvJsYo3dO3Pi4kpalkyMvfQsjxPWHYjoX4MDiB/FUM4YMfWcXa5l4VCwFWVYI1+92yxqjuqrhNg0CZg3gSouyQ== 21 | 22 | "@esbuild/android-arm@0.17.19": 23 | version "0.17.19" 24 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" 25 | integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== 26 | 27 | "@esbuild/android-arm@0.17.3": 28 | version "0.17.3" 29 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.3.tgz#4986d26306a7440078d42b3bf580d186ef714286" 30 | integrity sha512-1Mlz934GvbgdDmt26rTLmf03cAgLg5HyOgJN+ZGCeP3Q9ynYTNMn2/LQxIl7Uy+o4K6Rfi2OuLsr12JQQR8gNg== 31 | 32 | "@esbuild/android-x64@0.17.19": 33 | version "0.17.19" 34 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" 35 | integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== 36 | 37 | "@esbuild/android-x64@0.17.3": 38 | version "0.17.3" 39 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.3.tgz#a1928cd681e4055103384103c8bd34df7b9c7b19" 40 | integrity sha512-nuV2CmLS07Gqh5/GrZLuqkU9Bm6H6vcCspM+zjp9TdQlxJtIe+qqEXQChmfc7nWdyr/yz3h45Utk1tUn8Cz5+A== 41 | 42 | "@esbuild/darwin-arm64@0.17.19": 43 | version "0.17.19" 44 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" 45 | integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== 46 | 47 | "@esbuild/darwin-arm64@0.17.3": 48 | version "0.17.3" 49 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.3.tgz#e4af2b392e5606a4808d3a78a99d38c27af39f1d" 50 | integrity sha512-01Hxaaat6m0Xp9AXGM8mjFtqqwDjzlMP0eQq9zll9U85ttVALGCGDuEvra5Feu/NbP5AEP1MaopPwzsTcUq1cw== 51 | 52 | "@esbuild/darwin-x64@0.17.19": 53 | version "0.17.19" 54 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" 55 | integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== 56 | 57 | "@esbuild/darwin-x64@0.17.3": 58 | version "0.17.3" 59 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.3.tgz#cbcbfb32c8d5c86953f215b48384287530c5a38e" 60 | integrity sha512-Eo2gq0Q/er2muf8Z83X21UFoB7EU6/m3GNKvrhACJkjVThd0uA+8RfKpfNhuMCl1bKRfBzKOk6xaYKQZ4lZqvA== 61 | 62 | "@esbuild/freebsd-arm64@0.17.19": 63 | version "0.17.19" 64 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" 65 | integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== 66 | 67 | "@esbuild/freebsd-arm64@0.17.3": 68 | version "0.17.3" 69 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.3.tgz#90ec1755abca4c3ffe1ad10819cd9d31deddcb89" 70 | integrity sha512-CN62ESxaquP61n1ZjQP/jZte8CE09M6kNn3baos2SeUfdVBkWN5n6vGp2iKyb/bm/x4JQzEvJgRHLGd5F5b81w== 71 | 72 | "@esbuild/freebsd-x64@0.17.19": 73 | version "0.17.19" 74 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" 75 | integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== 76 | 77 | "@esbuild/freebsd-x64@0.17.3": 78 | version "0.17.3" 79 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.3.tgz#8760eedc466af253c3ed0dfa2940d0e59b8b0895" 80 | integrity sha512-feq+K8TxIznZE+zhdVurF3WNJ/Sa35dQNYbaqM/wsCbWdzXr5lyq+AaTUSER2cUR+SXPnd/EY75EPRjf4s1SLg== 81 | 82 | "@esbuild/linux-arm64@0.17.19": 83 | version "0.17.19" 84 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" 85 | integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== 86 | 87 | "@esbuild/linux-arm64@0.17.3": 88 | version "0.17.3" 89 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.3.tgz#13916fc8873115d7d546656e19037267b12d4567" 90 | integrity sha512-JHeZXD4auLYBnrKn6JYJ0o5nWJI9PhChA/Nt0G4MvLaMrvXuWnY93R3a7PiXeJQphpL1nYsaMcoV2QtuvRnF/g== 91 | 92 | "@esbuild/linux-arm@0.17.19": 93 | version "0.17.19" 94 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" 95 | integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== 96 | 97 | "@esbuild/linux-arm@0.17.3": 98 | version "0.17.3" 99 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.3.tgz#15f876d127b244635ddc09eaaa65ae97bc472a63" 100 | integrity sha512-CLP3EgyNuPcg2cshbwkqYy5bbAgK+VhyfMU7oIYyn+x4Y67xb5C5ylxsNUjRmr8BX+MW3YhVNm6Lq6FKtRTWHQ== 101 | 102 | "@esbuild/linux-ia32@0.17.19": 103 | version "0.17.19" 104 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" 105 | integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== 106 | 107 | "@esbuild/linux-ia32@0.17.3": 108 | version "0.17.3" 109 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.3.tgz#6691f02555d45b698195c81c9070ab4e521ef005" 110 | integrity sha512-FyXlD2ZjZqTFh0sOQxFDiWG1uQUEOLbEh9gKN/7pFxck5Vw0qjWSDqbn6C10GAa1rXJpwsntHcmLqydY9ST9ZA== 111 | 112 | "@esbuild/linux-loong64@0.17.19": 113 | version "0.17.19" 114 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" 115 | integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== 116 | 117 | "@esbuild/linux-loong64@0.17.3": 118 | version "0.17.3" 119 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.3.tgz#f77ef657f222d8b3a8fbd530a09e40976c458d48" 120 | integrity sha512-OrDGMvDBI2g7s04J8dh8/I7eSO+/E7nMDT2Z5IruBfUO/RiigF1OF6xoH33Dn4W/OwAWSUf1s2nXamb28ZklTA== 121 | 122 | "@esbuild/linux-mips64el@0.17.19": 123 | version "0.17.19" 124 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" 125 | integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== 126 | 127 | "@esbuild/linux-mips64el@0.17.3": 128 | version "0.17.3" 129 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.3.tgz#fa38833cfc8bfaadaa12b243257fe6d19d0f6f79" 130 | integrity sha512-DcnUpXnVCJvmv0TzuLwKBC2nsQHle8EIiAJiJ+PipEVC16wHXaPEKP0EqN8WnBe0TPvMITOUlP2aiL5YMld+CQ== 131 | 132 | "@esbuild/linux-ppc64@0.17.19": 133 | version "0.17.19" 134 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" 135 | integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== 136 | 137 | "@esbuild/linux-ppc64@0.17.3": 138 | version "0.17.3" 139 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.3.tgz#c157a602b627c90d174743e4b0dfb7630b101dbf" 140 | integrity sha512-BDYf/l1WVhWE+FHAW3FzZPtVlk9QsrwsxGzABmN4g8bTjmhazsId3h127pliDRRu5674k1Y2RWejbpN46N9ZhQ== 141 | 142 | "@esbuild/linux-riscv64@0.17.19": 143 | version "0.17.19" 144 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" 145 | integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== 146 | 147 | "@esbuild/linux-riscv64@0.17.3": 148 | version "0.17.3" 149 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.3.tgz#7bf79614bd544bd932839b1fcff6cf1f8f6bdf1a" 150 | integrity sha512-WViAxWYMRIi+prTJTyV1wnqd2mS2cPqJlN85oscVhXdb/ZTFJdrpaqm/uDsZPGKHtbg5TuRX/ymKdOSk41YZow== 151 | 152 | "@esbuild/linux-s390x@0.17.19": 153 | version "0.17.19" 154 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" 155 | integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== 156 | 157 | "@esbuild/linux-s390x@0.17.3": 158 | version "0.17.3" 159 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.3.tgz#6bb50c5a2613d31ce1137fe5c249ecadbecccdea" 160 | integrity sha512-Iw8lkNHUC4oGP1O/KhumcVy77u2s6+KUjieUqzEU3XuWJqZ+AY7uVMrrCbAiwWTkpQHkr00BuXH5RpC6Sb/7Ug== 161 | 162 | "@esbuild/linux-x64@0.17.19": 163 | version "0.17.19" 164 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" 165 | integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== 166 | 167 | "@esbuild/linux-x64@0.17.3": 168 | version "0.17.3" 169 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.3.tgz#aa140d99f0d9e0af388024823bfe4558d73fbbf9" 170 | integrity sha512-0AGkWQMzeoeAtXQRNB3s4J1/T2XbigM2/Mn2yU1tQSmQRmHIZdkGbVq2A3aDdNslPyhb9/lH0S5GMTZ4xsjBqg== 171 | 172 | "@esbuild/netbsd-x64@0.17.19": 173 | version "0.17.19" 174 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" 175 | integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== 176 | 177 | "@esbuild/netbsd-x64@0.17.3": 178 | version "0.17.3" 179 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.3.tgz#b6ae9948b03e4c95dc581c68358fb61d9d12a625" 180 | integrity sha512-4+rR/WHOxIVh53UIQIICryjdoKdHsFZFD4zLSonJ9RRw7bhKzVyXbnRPsWSfwybYqw9sB7ots/SYyufL1mBpEg== 181 | 182 | "@esbuild/openbsd-x64@0.17.19": 183 | version "0.17.19" 184 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" 185 | integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== 186 | 187 | "@esbuild/openbsd-x64@0.17.3": 188 | version "0.17.3" 189 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.3.tgz#cda007233e211fc9154324bfa460540cfc469408" 190 | integrity sha512-cVpWnkx9IYg99EjGxa5Gc0XmqumtAwK3aoz7O4Dii2vko+qXbkHoujWA68cqXjhh6TsLaQelfDO4MVnyr+ODeA== 191 | 192 | "@esbuild/sunos-x64@0.17.19": 193 | version "0.17.19" 194 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" 195 | integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== 196 | 197 | "@esbuild/sunos-x64@0.17.3": 198 | version "0.17.3" 199 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.3.tgz#f1385b092000c662d360775f3fad80943d2169c4" 200 | integrity sha512-RxmhKLbTCDAY2xOfrww6ieIZkZF+KBqG7S2Ako2SljKXRFi+0863PspK74QQ7JpmWwncChY25JTJSbVBYGQk2Q== 201 | 202 | "@esbuild/win32-arm64@0.17.19": 203 | version "0.17.19" 204 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" 205 | integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== 206 | 207 | "@esbuild/win32-arm64@0.17.3": 208 | version "0.17.3" 209 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.3.tgz#14e9dd9b1b55aa991f80c120fef0c4492d918801" 210 | integrity sha512-0r36VeEJ4efwmofxVJRXDjVRP2jTmv877zc+i+Pc7MNsIr38NfsjkQj23AfF7l0WbB+RQ7VUb+LDiqC/KY/M/A== 211 | 212 | "@esbuild/win32-ia32@0.17.19": 213 | version "0.17.19" 214 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" 215 | integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== 216 | 217 | "@esbuild/win32-ia32@0.17.3": 218 | version "0.17.3" 219 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.3.tgz#de584423513d13304a6925e01233499a37a4e075" 220 | integrity sha512-wgO6rc7uGStH22nur4aLFcq7Wh86bE9cOFmfTr/yxN3BXvDEdCSXyKkO+U5JIt53eTOgC47v9k/C1bITWL/Teg== 221 | 222 | "@esbuild/win32-x64@0.17.19": 223 | version "0.17.19" 224 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" 225 | integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== 226 | 227 | "@esbuild/win32-x64@0.17.3": 228 | version "0.17.3" 229 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.3.tgz#2f69ea6b37031b0d1715dd2da832a8ae5eb36e74" 230 | integrity sha512-FdVl64OIuiKjgXBjwZaJLKp0eaEckifbhn10dXWhysMJkWblg3OEEGKSIyhiD5RSgAya8WzP3DNkngtIg3Nt7g== 231 | 232 | "@eslint-community/eslint-utils@^4.2.0": 233 | version "4.4.0" 234 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 235 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 236 | dependencies: 237 | eslint-visitor-keys "^3.3.0" 238 | 239 | "@eslint-community/regexpp@^4.4.0": 240 | version "4.5.1" 241 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 242 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 243 | 244 | "@eslint/eslintrc@^2.0.3": 245 | version "2.0.3" 246 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" 247 | integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== 248 | dependencies: 249 | ajv "^6.12.4" 250 | debug "^4.3.2" 251 | espree "^9.5.2" 252 | globals "^13.19.0" 253 | ignore "^5.2.0" 254 | import-fresh "^3.2.1" 255 | js-yaml "^4.1.0" 256 | minimatch "^3.1.2" 257 | strip-json-comments "^3.1.1" 258 | 259 | "@eslint/js@8.42.0": 260 | version "8.42.0" 261 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6" 262 | integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw== 263 | 264 | "@humanwhocodes/config-array@^0.11.10": 265 | version "0.11.10" 266 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" 267 | integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== 268 | dependencies: 269 | "@humanwhocodes/object-schema" "^1.2.1" 270 | debug "^4.1.1" 271 | minimatch "^3.0.5" 272 | 273 | "@humanwhocodes/module-importer@^1.0.1": 274 | version "1.0.1" 275 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 276 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 277 | 278 | "@humanwhocodes/object-schema@^1.2.1": 279 | version "1.2.1" 280 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 281 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 282 | 283 | "@nodelib/fs.scandir@2.1.5": 284 | version "2.1.5" 285 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 286 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 287 | dependencies: 288 | "@nodelib/fs.stat" "2.0.5" 289 | run-parallel "^1.1.9" 290 | 291 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 292 | version "2.0.5" 293 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 294 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 295 | 296 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 297 | version "1.2.8" 298 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 299 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 300 | dependencies: 301 | "@nodelib/fs.scandir" "2.1.5" 302 | fastq "^1.6.0" 303 | 304 | "@pkgr/utils@^2.3.1": 305 | version "2.4.1" 306 | resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3" 307 | integrity sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w== 308 | dependencies: 309 | cross-spawn "^7.0.3" 310 | fast-glob "^3.2.12" 311 | is-glob "^4.0.3" 312 | open "^9.1.0" 313 | picocolors "^1.0.0" 314 | tslib "^2.5.0" 315 | 316 | "@types/chai-subset@^1.3.3": 317 | version "1.3.3" 318 | resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" 319 | integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== 320 | dependencies: 321 | "@types/chai" "*" 322 | 323 | "@types/chai@*", "@types/chai@^4.3.4": 324 | version "4.3.5" 325 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" 326 | integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== 327 | 328 | "@types/codemirror@5.60.8": 329 | version "5.60.8" 330 | resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-5.60.8.tgz#b647d04b470e8e1836dd84b2879988fc55c9de68" 331 | integrity sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw== 332 | dependencies: 333 | "@types/tern" "*" 334 | 335 | "@types/diff@^5.0.2": 336 | version "5.0.3" 337 | resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.3.tgz#1f89e49ff83b5d200d78964fb896c68498ce1828" 338 | integrity sha512-amrLbRqTU9bXMCc6uX0sWpxsQzRIo9z6MJPkH1pkez/qOxuqSZVuryJAWoBRq94CeG8JxY+VK4Le9HtjQR5T9A== 339 | 340 | "@types/estree@*": 341 | version "1.0.1" 342 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" 343 | integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== 344 | 345 | "@types/json-schema@^7.0.9": 346 | version "7.0.12" 347 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" 348 | integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== 349 | 350 | "@types/json5@^0.0.29": 351 | version "0.0.29" 352 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 353 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 354 | 355 | "@types/node@*": 356 | version "20.2.6" 357 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.6.tgz#f8f4cdcf9bc74fffcb44a9e1e3f3586d583dac24" 358 | integrity sha512-GQBWUtGoefMEOx/vu+emHEHU5aw6JdDoEtZhoBrHFPZbA/YNRFfN996XbBASEWdvmLSLyv9FKYppYGyZjCaq/g== 359 | 360 | "@types/node@^16.11.6": 361 | version "16.18.35" 362 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.35.tgz#d691fa3bccf0279babd2a079d046f9967642f895" 363 | integrity sha512-yqU2Rf94HFZqgHf6Tuyc/IqVD0l3U91KjvypSr1GtJKyrnl6L/kfnxVqN4QOwcF5Zx9tO/HKK+fozGr5AtqA+g== 364 | 365 | "@types/tern@*": 366 | version "0.23.4" 367 | resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" 368 | integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== 369 | dependencies: 370 | "@types/estree" "*" 371 | 372 | "@typescript-eslint/eslint-plugin@5.29.0": 373 | version "5.29.0" 374 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" 375 | integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== 376 | dependencies: 377 | "@typescript-eslint/scope-manager" "5.29.0" 378 | "@typescript-eslint/type-utils" "5.29.0" 379 | "@typescript-eslint/utils" "5.29.0" 380 | debug "^4.3.4" 381 | functional-red-black-tree "^1.0.1" 382 | ignore "^5.2.0" 383 | regexpp "^3.2.0" 384 | semver "^7.3.7" 385 | tsutils "^3.21.0" 386 | 387 | "@typescript-eslint/parser@5.29.0": 388 | version "5.29.0" 389 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" 390 | integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== 391 | dependencies: 392 | "@typescript-eslint/scope-manager" "5.29.0" 393 | "@typescript-eslint/types" "5.29.0" 394 | "@typescript-eslint/typescript-estree" "5.29.0" 395 | debug "^4.3.4" 396 | 397 | "@typescript-eslint/scope-manager@5.29.0": 398 | version "5.29.0" 399 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" 400 | integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== 401 | dependencies: 402 | "@typescript-eslint/types" "5.29.0" 403 | "@typescript-eslint/visitor-keys" "5.29.0" 404 | 405 | "@typescript-eslint/type-utils@5.29.0": 406 | version "5.29.0" 407 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" 408 | integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== 409 | dependencies: 410 | "@typescript-eslint/utils" "5.29.0" 411 | debug "^4.3.4" 412 | tsutils "^3.21.0" 413 | 414 | "@typescript-eslint/types@5.29.0": 415 | version "5.29.0" 416 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" 417 | integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== 418 | 419 | "@typescript-eslint/typescript-estree@5.29.0": 420 | version "5.29.0" 421 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" 422 | integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== 423 | dependencies: 424 | "@typescript-eslint/types" "5.29.0" 425 | "@typescript-eslint/visitor-keys" "5.29.0" 426 | debug "^4.3.4" 427 | globby "^11.1.0" 428 | is-glob "^4.0.3" 429 | semver "^7.3.7" 430 | tsutils "^3.21.0" 431 | 432 | "@typescript-eslint/utils@5.29.0": 433 | version "5.29.0" 434 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" 435 | integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== 436 | dependencies: 437 | "@types/json-schema" "^7.0.9" 438 | "@typescript-eslint/scope-manager" "5.29.0" 439 | "@typescript-eslint/types" "5.29.0" 440 | "@typescript-eslint/typescript-estree" "5.29.0" 441 | eslint-scope "^5.1.1" 442 | eslint-utils "^3.0.0" 443 | 444 | "@typescript-eslint/visitor-keys@5.29.0": 445 | version "5.29.0" 446 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" 447 | integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== 448 | dependencies: 449 | "@typescript-eslint/types" "5.29.0" 450 | eslint-visitor-keys "^3.3.0" 451 | 452 | "@vitest/expect@0.28.5": 453 | version "0.28.5" 454 | resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.28.5.tgz#d5a6eccd014e9ad66fe87a20d16426a2815c0e8a" 455 | integrity sha512-gqTZwoUTwepwGIatnw4UKpQfnoyV0Z9Czn9+Lo2/jLIt4/AXLTn+oVZxlQ7Ng8bzcNkR+3DqLJ08kNr8jRmdNQ== 456 | dependencies: 457 | "@vitest/spy" "0.28.5" 458 | "@vitest/utils" "0.28.5" 459 | chai "^4.3.7" 460 | 461 | "@vitest/runner@0.28.5": 462 | version "0.28.5" 463 | resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.28.5.tgz#4a18fe0e40b25569763f9f1f64b799d1629b3026" 464 | integrity sha512-NKkHtLB+FGjpp5KmneQjTcPLWPTDfB7ie+MmF1PnUBf/tGe2OjGxWyB62ySYZ25EYp9krR5Bw0YPLS/VWh1QiA== 465 | dependencies: 466 | "@vitest/utils" "0.28.5" 467 | p-limit "^4.0.0" 468 | pathe "^1.1.0" 469 | 470 | "@vitest/spy@0.28.5": 471 | version "0.28.5" 472 | resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.28.5.tgz#b69affa0786200251b9e5aac5c58bbfb1b3273c9" 473 | integrity sha512-7if6rsHQr9zbmvxN7h+gGh2L9eIIErgf8nSKYDlg07HHimCxp4H6I/X/DPXktVPPLQfiZ1Cw2cbDIx9fSqDjGw== 474 | dependencies: 475 | tinyspy "^1.0.2" 476 | 477 | "@vitest/utils@0.28.5": 478 | version "0.28.5" 479 | resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.28.5.tgz#7b82b528df86adfbd4a1f6a3b72c39790e81de0d" 480 | integrity sha512-UyZdYwdULlOa4LTUSwZ+Paz7nBHGTT72jKwdFSV4IjHF1xsokp+CabMdhjvVhYwkLfO88ylJT46YMilnkSARZA== 481 | dependencies: 482 | cli-truncate "^3.1.0" 483 | diff "^5.1.0" 484 | loupe "^2.3.6" 485 | picocolors "^1.0.0" 486 | pretty-format "^27.5.1" 487 | 488 | acorn-jsx@^5.3.2: 489 | version "5.3.2" 490 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 491 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 492 | 493 | acorn-walk@^8.2.0: 494 | version "8.2.0" 495 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 496 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 497 | 498 | acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: 499 | version "8.8.2" 500 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 501 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 502 | 503 | ajv@^6.10.0, ajv@^6.12.4: 504 | version "6.12.6" 505 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 506 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 507 | dependencies: 508 | fast-deep-equal "^3.1.1" 509 | fast-json-stable-stringify "^2.0.0" 510 | json-schema-traverse "^0.4.1" 511 | uri-js "^4.2.2" 512 | 513 | ansi-regex@^5.0.1: 514 | version "5.0.1" 515 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 516 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 517 | 518 | ansi-regex@^6.0.1: 519 | version "6.0.1" 520 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" 521 | integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 522 | 523 | ansi-styles@^4.1.0: 524 | version "4.3.0" 525 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 526 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 527 | dependencies: 528 | color-convert "^2.0.1" 529 | 530 | ansi-styles@^5.0.0: 531 | version "5.2.0" 532 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 533 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 534 | 535 | ansi-styles@^6.0.0: 536 | version "6.2.1" 537 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 538 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 539 | 540 | argparse@^2.0.1: 541 | version "2.0.1" 542 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 543 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 544 | 545 | aria-query@^5.1.3: 546 | version "5.1.3" 547 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" 548 | integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== 549 | dependencies: 550 | deep-equal "^2.0.5" 551 | 552 | array-buffer-byte-length@^1.0.0: 553 | version "1.0.0" 554 | resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" 555 | integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== 556 | dependencies: 557 | call-bind "^1.0.2" 558 | is-array-buffer "^3.0.1" 559 | 560 | array-includes@^3.1.5, array-includes@^3.1.6: 561 | version "3.1.6" 562 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" 563 | integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== 564 | dependencies: 565 | call-bind "^1.0.2" 566 | define-properties "^1.1.4" 567 | es-abstract "^1.20.4" 568 | get-intrinsic "^1.1.3" 569 | is-string "^1.0.7" 570 | 571 | array-union@^2.1.0: 572 | version "2.1.0" 573 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 574 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 575 | 576 | array.prototype.flat@^1.3.1: 577 | version "1.3.1" 578 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" 579 | integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== 580 | dependencies: 581 | call-bind "^1.0.2" 582 | define-properties "^1.1.4" 583 | es-abstract "^1.20.4" 584 | es-shim-unscopables "^1.0.0" 585 | 586 | array.prototype.flatmap@^1.3.1: 587 | version "1.3.1" 588 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" 589 | integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== 590 | dependencies: 591 | call-bind "^1.0.2" 592 | define-properties "^1.1.4" 593 | es-abstract "^1.20.4" 594 | es-shim-unscopables "^1.0.0" 595 | 596 | array.prototype.tosorted@^1.1.1: 597 | version "1.1.1" 598 | resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" 599 | integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== 600 | dependencies: 601 | call-bind "^1.0.2" 602 | define-properties "^1.1.4" 603 | es-abstract "^1.20.4" 604 | es-shim-unscopables "^1.0.0" 605 | get-intrinsic "^1.1.3" 606 | 607 | assertion-error@^1.1.0: 608 | version "1.1.0" 609 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 610 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 611 | 612 | ast-types-flow@^0.0.7: 613 | version "0.0.7" 614 | resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" 615 | integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== 616 | 617 | available-typed-arrays@^1.0.5: 618 | version "1.0.5" 619 | resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" 620 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== 621 | 622 | axe-core@^4.6.2: 623 | version "4.7.2" 624 | resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" 625 | integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== 626 | 627 | axobject-query@^3.1.1: 628 | version "3.1.1" 629 | resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" 630 | integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== 631 | dependencies: 632 | deep-equal "^2.0.5" 633 | 634 | balanced-match@^1.0.0: 635 | version "1.0.2" 636 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 637 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 638 | 639 | big-integer@^1.6.44: 640 | version "1.6.51" 641 | resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" 642 | integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== 643 | 644 | bplist-parser@^0.2.0: 645 | version "0.2.0" 646 | resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" 647 | integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== 648 | dependencies: 649 | big-integer "^1.6.44" 650 | 651 | brace-expansion@^1.1.7: 652 | version "1.1.11" 653 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 654 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 655 | dependencies: 656 | balanced-match "^1.0.0" 657 | concat-map "0.0.1" 658 | 659 | braces@^3.0.2: 660 | version "3.0.2" 661 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 662 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 663 | dependencies: 664 | fill-range "^7.0.1" 665 | 666 | buffer-from@^1.0.0: 667 | version "1.1.2" 668 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 669 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 670 | 671 | builtin-modules@3.3.0: 672 | version "3.3.0" 673 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" 674 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== 675 | 676 | bundle-name@^3.0.0: 677 | version "3.0.0" 678 | resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" 679 | integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== 680 | dependencies: 681 | run-applescript "^5.0.0" 682 | 683 | cac@^6.7.14: 684 | version "6.7.14" 685 | resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" 686 | integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== 687 | 688 | call-bind@^1.0.0, call-bind@^1.0.2: 689 | version "1.0.2" 690 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 691 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 692 | dependencies: 693 | function-bind "^1.1.1" 694 | get-intrinsic "^1.0.2" 695 | 696 | callsites@^3.0.0: 697 | version "3.1.0" 698 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 699 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 700 | 701 | chai@^4.3.7: 702 | version "4.3.7" 703 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" 704 | integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== 705 | dependencies: 706 | assertion-error "^1.1.0" 707 | check-error "^1.0.2" 708 | deep-eql "^4.1.2" 709 | get-func-name "^2.0.0" 710 | loupe "^2.3.1" 711 | pathval "^1.1.1" 712 | type-detect "^4.0.5" 713 | 714 | chalk@^4.0.0: 715 | version "4.1.2" 716 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 717 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 718 | dependencies: 719 | ansi-styles "^4.1.0" 720 | supports-color "^7.1.0" 721 | 722 | check-error@^1.0.2: 723 | version "1.0.2" 724 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 725 | integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== 726 | 727 | cli-truncate@^3.1.0: 728 | version "3.1.0" 729 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" 730 | integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== 731 | dependencies: 732 | slice-ansi "^5.0.0" 733 | string-width "^5.0.0" 734 | 735 | color-convert@^2.0.1: 736 | version "2.0.1" 737 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 738 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 739 | dependencies: 740 | color-name "~1.1.4" 741 | 742 | color-name@~1.1.4: 743 | version "1.1.4" 744 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 745 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 746 | 747 | concat-map@0.0.1: 748 | version "0.0.1" 749 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 750 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 751 | 752 | confusing-browser-globals@^1.0.10: 753 | version "1.0.11" 754 | resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" 755 | integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== 756 | 757 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 758 | version "7.0.3" 759 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 760 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 761 | dependencies: 762 | path-key "^3.1.0" 763 | shebang-command "^2.0.0" 764 | which "^2.0.1" 765 | 766 | damerau-levenshtein@^1.0.8: 767 | version "1.0.8" 768 | resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" 769 | integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== 770 | 771 | debug@^3.2.7: 772 | version "3.2.7" 773 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 774 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 775 | dependencies: 776 | ms "^2.1.1" 777 | 778 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 779 | version "4.3.4" 780 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 781 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 782 | dependencies: 783 | ms "2.1.2" 784 | 785 | deep-eql@^4.1.2: 786 | version "4.1.3" 787 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" 788 | integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== 789 | dependencies: 790 | type-detect "^4.0.0" 791 | 792 | deep-equal@^2.0.5: 793 | version "2.2.1" 794 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739" 795 | integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ== 796 | dependencies: 797 | array-buffer-byte-length "^1.0.0" 798 | call-bind "^1.0.2" 799 | es-get-iterator "^1.1.3" 800 | get-intrinsic "^1.2.0" 801 | is-arguments "^1.1.1" 802 | is-array-buffer "^3.0.2" 803 | is-date-object "^1.0.5" 804 | is-regex "^1.1.4" 805 | is-shared-array-buffer "^1.0.2" 806 | isarray "^2.0.5" 807 | object-is "^1.1.5" 808 | object-keys "^1.1.1" 809 | object.assign "^4.1.4" 810 | regexp.prototype.flags "^1.5.0" 811 | side-channel "^1.0.4" 812 | which-boxed-primitive "^1.0.2" 813 | which-collection "^1.0.1" 814 | which-typed-array "^1.1.9" 815 | 816 | deep-is@^0.1.3: 817 | version "0.1.4" 818 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 819 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 820 | 821 | default-browser-id@^3.0.0: 822 | version "3.0.0" 823 | resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" 824 | integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== 825 | dependencies: 826 | bplist-parser "^0.2.0" 827 | untildify "^4.0.0" 828 | 829 | default-browser@^4.0.0: 830 | version "4.0.0" 831 | resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" 832 | integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== 833 | dependencies: 834 | bundle-name "^3.0.0" 835 | default-browser-id "^3.0.0" 836 | execa "^7.1.1" 837 | titleize "^3.0.0" 838 | 839 | define-lazy-prop@^3.0.0: 840 | version "3.0.0" 841 | resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" 842 | integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== 843 | 844 | define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: 845 | version "1.2.0" 846 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" 847 | integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== 848 | dependencies: 849 | has-property-descriptors "^1.0.0" 850 | object-keys "^1.1.1" 851 | 852 | diff@^5.1.0: 853 | version "5.1.0" 854 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" 855 | integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== 856 | 857 | dir-glob@^3.0.1: 858 | version "3.0.1" 859 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 860 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 861 | dependencies: 862 | path-type "^4.0.0" 863 | 864 | doctrine@^2.1.0: 865 | version "2.1.0" 866 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 867 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 868 | dependencies: 869 | esutils "^2.0.2" 870 | 871 | doctrine@^3.0.0: 872 | version "3.0.0" 873 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 874 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 875 | dependencies: 876 | esutils "^2.0.2" 877 | 878 | eastasianwidth@^0.2.0: 879 | version "0.2.0" 880 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 881 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 882 | 883 | emoji-regex@^9.2.2: 884 | version "9.2.2" 885 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 886 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 887 | 888 | enhanced-resolve@^5.12.0: 889 | version "5.14.1" 890 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" 891 | integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== 892 | dependencies: 893 | graceful-fs "^4.2.4" 894 | tapable "^2.2.0" 895 | 896 | es-abstract@^1.19.0, es-abstract@^1.20.4: 897 | version "1.21.2" 898 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" 899 | integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== 900 | dependencies: 901 | array-buffer-byte-length "^1.0.0" 902 | available-typed-arrays "^1.0.5" 903 | call-bind "^1.0.2" 904 | es-set-tostringtag "^2.0.1" 905 | es-to-primitive "^1.2.1" 906 | function.prototype.name "^1.1.5" 907 | get-intrinsic "^1.2.0" 908 | get-symbol-description "^1.0.0" 909 | globalthis "^1.0.3" 910 | gopd "^1.0.1" 911 | has "^1.0.3" 912 | has-property-descriptors "^1.0.0" 913 | has-proto "^1.0.1" 914 | has-symbols "^1.0.3" 915 | internal-slot "^1.0.5" 916 | is-array-buffer "^3.0.2" 917 | is-callable "^1.2.7" 918 | is-negative-zero "^2.0.2" 919 | is-regex "^1.1.4" 920 | is-shared-array-buffer "^1.0.2" 921 | is-string "^1.0.7" 922 | is-typed-array "^1.1.10" 923 | is-weakref "^1.0.2" 924 | object-inspect "^1.12.3" 925 | object-keys "^1.1.1" 926 | object.assign "^4.1.4" 927 | regexp.prototype.flags "^1.4.3" 928 | safe-regex-test "^1.0.0" 929 | string.prototype.trim "^1.2.7" 930 | string.prototype.trimend "^1.0.6" 931 | string.prototype.trimstart "^1.0.6" 932 | typed-array-length "^1.0.4" 933 | unbox-primitive "^1.0.2" 934 | which-typed-array "^1.1.9" 935 | 936 | es-get-iterator@^1.1.3: 937 | version "1.1.3" 938 | resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" 939 | integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== 940 | dependencies: 941 | call-bind "^1.0.2" 942 | get-intrinsic "^1.1.3" 943 | has-symbols "^1.0.3" 944 | is-arguments "^1.1.1" 945 | is-map "^2.0.2" 946 | is-set "^2.0.2" 947 | is-string "^1.0.7" 948 | isarray "^2.0.5" 949 | stop-iteration-iterator "^1.0.0" 950 | 951 | es-set-tostringtag@^2.0.1: 952 | version "2.0.1" 953 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" 954 | integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== 955 | dependencies: 956 | get-intrinsic "^1.1.3" 957 | has "^1.0.3" 958 | has-tostringtag "^1.0.0" 959 | 960 | es-shim-unscopables@^1.0.0: 961 | version "1.0.0" 962 | resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" 963 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== 964 | dependencies: 965 | has "^1.0.3" 966 | 967 | es-to-primitive@^1.2.1: 968 | version "1.2.1" 969 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 970 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 971 | dependencies: 972 | is-callable "^1.1.4" 973 | is-date-object "^1.0.1" 974 | is-symbol "^1.0.2" 975 | 976 | esbuild@0.17.3: 977 | version "0.17.3" 978 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.3.tgz#d9aa02a3bc441ed35f9569cd9505812ae3fcae61" 979 | integrity sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g== 980 | optionalDependencies: 981 | "@esbuild/android-arm" "0.17.3" 982 | "@esbuild/android-arm64" "0.17.3" 983 | "@esbuild/android-x64" "0.17.3" 984 | "@esbuild/darwin-arm64" "0.17.3" 985 | "@esbuild/darwin-x64" "0.17.3" 986 | "@esbuild/freebsd-arm64" "0.17.3" 987 | "@esbuild/freebsd-x64" "0.17.3" 988 | "@esbuild/linux-arm" "0.17.3" 989 | "@esbuild/linux-arm64" "0.17.3" 990 | "@esbuild/linux-ia32" "0.17.3" 991 | "@esbuild/linux-loong64" "0.17.3" 992 | "@esbuild/linux-mips64el" "0.17.3" 993 | "@esbuild/linux-ppc64" "0.17.3" 994 | "@esbuild/linux-riscv64" "0.17.3" 995 | "@esbuild/linux-s390x" "0.17.3" 996 | "@esbuild/linux-x64" "0.17.3" 997 | "@esbuild/netbsd-x64" "0.17.3" 998 | "@esbuild/openbsd-x64" "0.17.3" 999 | "@esbuild/sunos-x64" "0.17.3" 1000 | "@esbuild/win32-arm64" "0.17.3" 1001 | "@esbuild/win32-ia32" "0.17.3" 1002 | "@esbuild/win32-x64" "0.17.3" 1003 | 1004 | esbuild@^0.17.5: 1005 | version "0.17.19" 1006 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" 1007 | integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== 1008 | optionalDependencies: 1009 | "@esbuild/android-arm" "0.17.19" 1010 | "@esbuild/android-arm64" "0.17.19" 1011 | "@esbuild/android-x64" "0.17.19" 1012 | "@esbuild/darwin-arm64" "0.17.19" 1013 | "@esbuild/darwin-x64" "0.17.19" 1014 | "@esbuild/freebsd-arm64" "0.17.19" 1015 | "@esbuild/freebsd-x64" "0.17.19" 1016 | "@esbuild/linux-arm" "0.17.19" 1017 | "@esbuild/linux-arm64" "0.17.19" 1018 | "@esbuild/linux-ia32" "0.17.19" 1019 | "@esbuild/linux-loong64" "0.17.19" 1020 | "@esbuild/linux-mips64el" "0.17.19" 1021 | "@esbuild/linux-ppc64" "0.17.19" 1022 | "@esbuild/linux-riscv64" "0.17.19" 1023 | "@esbuild/linux-s390x" "0.17.19" 1024 | "@esbuild/linux-x64" "0.17.19" 1025 | "@esbuild/netbsd-x64" "0.17.19" 1026 | "@esbuild/openbsd-x64" "0.17.19" 1027 | "@esbuild/sunos-x64" "0.17.19" 1028 | "@esbuild/win32-arm64" "0.17.19" 1029 | "@esbuild/win32-ia32" "0.17.19" 1030 | "@esbuild/win32-x64" "0.17.19" 1031 | 1032 | escape-string-regexp@^4.0.0: 1033 | version "4.0.0" 1034 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 1035 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 1036 | 1037 | eslint-config-airbnb-base@^15.0.0: 1038 | version "15.0.0" 1039 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" 1040 | integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== 1041 | dependencies: 1042 | confusing-browser-globals "^1.0.10" 1043 | object.assign "^4.1.2" 1044 | object.entries "^1.1.5" 1045 | semver "^6.3.0" 1046 | 1047 | eslint-config-airbnb@^19.0.4: 1048 | version "19.0.4" 1049 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" 1050 | integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== 1051 | dependencies: 1052 | eslint-config-airbnb-base "^15.0.0" 1053 | object.assign "^4.1.2" 1054 | object.entries "^1.1.5" 1055 | 1056 | eslint-config-prettier@^8.6.0: 1057 | version "8.8.0" 1058 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" 1059 | integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== 1060 | 1061 | eslint-import-resolver-node@^0.3.7: 1062 | version "0.3.7" 1063 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" 1064 | integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== 1065 | dependencies: 1066 | debug "^3.2.7" 1067 | is-core-module "^2.11.0" 1068 | resolve "^1.22.1" 1069 | 1070 | eslint-import-resolver-typescript@^3.5.3: 1071 | version "3.5.5" 1072 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" 1073 | integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== 1074 | dependencies: 1075 | debug "^4.3.4" 1076 | enhanced-resolve "^5.12.0" 1077 | eslint-module-utils "^2.7.4" 1078 | get-tsconfig "^4.5.0" 1079 | globby "^13.1.3" 1080 | is-core-module "^2.11.0" 1081 | is-glob "^4.0.3" 1082 | synckit "^0.8.5" 1083 | 1084 | eslint-module-utils@^2.7.4: 1085 | version "2.8.0" 1086 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" 1087 | integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== 1088 | dependencies: 1089 | debug "^3.2.7" 1090 | 1091 | eslint-plugin-import@^2.27.5: 1092 | version "2.27.5" 1093 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" 1094 | integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== 1095 | dependencies: 1096 | array-includes "^3.1.6" 1097 | array.prototype.flat "^1.3.1" 1098 | array.prototype.flatmap "^1.3.1" 1099 | debug "^3.2.7" 1100 | doctrine "^2.1.0" 1101 | eslint-import-resolver-node "^0.3.7" 1102 | eslint-module-utils "^2.7.4" 1103 | has "^1.0.3" 1104 | is-core-module "^2.11.0" 1105 | is-glob "^4.0.3" 1106 | minimatch "^3.1.2" 1107 | object.values "^1.1.6" 1108 | resolve "^1.22.1" 1109 | semver "^6.3.0" 1110 | tsconfig-paths "^3.14.1" 1111 | 1112 | eslint-plugin-jsx-a11y@^6.7.1: 1113 | version "6.7.1" 1114 | resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" 1115 | integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== 1116 | dependencies: 1117 | "@babel/runtime" "^7.20.7" 1118 | aria-query "^5.1.3" 1119 | array-includes "^3.1.6" 1120 | array.prototype.flatmap "^1.3.1" 1121 | ast-types-flow "^0.0.7" 1122 | axe-core "^4.6.2" 1123 | axobject-query "^3.1.1" 1124 | damerau-levenshtein "^1.0.8" 1125 | emoji-regex "^9.2.2" 1126 | has "^1.0.3" 1127 | jsx-ast-utils "^3.3.3" 1128 | language-tags "=1.0.5" 1129 | minimatch "^3.1.2" 1130 | object.entries "^1.1.6" 1131 | object.fromentries "^2.0.6" 1132 | semver "^6.3.0" 1133 | 1134 | eslint-plugin-prettier@^4.2.1: 1135 | version "4.2.1" 1136 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" 1137 | integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== 1138 | dependencies: 1139 | prettier-linter-helpers "^1.0.0" 1140 | 1141 | eslint-plugin-react-hooks@^4.6.0: 1142 | version "4.6.0" 1143 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" 1144 | integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== 1145 | 1146 | eslint-plugin-react@^7.32.2: 1147 | version "7.32.2" 1148 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" 1149 | integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== 1150 | dependencies: 1151 | array-includes "^3.1.6" 1152 | array.prototype.flatmap "^1.3.1" 1153 | array.prototype.tosorted "^1.1.1" 1154 | doctrine "^2.1.0" 1155 | estraverse "^5.3.0" 1156 | jsx-ast-utils "^2.4.1 || ^3.0.0" 1157 | minimatch "^3.1.2" 1158 | object.entries "^1.1.6" 1159 | object.fromentries "^2.0.6" 1160 | object.hasown "^1.1.2" 1161 | object.values "^1.1.6" 1162 | prop-types "^15.8.1" 1163 | resolve "^2.0.0-next.4" 1164 | semver "^6.3.0" 1165 | string.prototype.matchall "^4.0.8" 1166 | 1167 | eslint-scope@^5.1.1: 1168 | version "5.1.1" 1169 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 1170 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 1171 | dependencies: 1172 | esrecurse "^4.3.0" 1173 | estraverse "^4.1.1" 1174 | 1175 | eslint-scope@^7.2.0: 1176 | version "7.2.0" 1177 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 1178 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 1179 | dependencies: 1180 | esrecurse "^4.3.0" 1181 | estraverse "^5.2.0" 1182 | 1183 | eslint-utils@^3.0.0: 1184 | version "3.0.0" 1185 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 1186 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 1187 | dependencies: 1188 | eslint-visitor-keys "^2.0.0" 1189 | 1190 | eslint-visitor-keys@^2.0.0: 1191 | version "2.1.0" 1192 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 1193 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 1194 | 1195 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: 1196 | version "3.4.1" 1197 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 1198 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 1199 | 1200 | eslint@^8.33.0: 1201 | version "8.42.0" 1202 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.42.0.tgz#7bebdc3a55f9ed7167251fe7259f75219cade291" 1203 | integrity sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A== 1204 | dependencies: 1205 | "@eslint-community/eslint-utils" "^4.2.0" 1206 | "@eslint-community/regexpp" "^4.4.0" 1207 | "@eslint/eslintrc" "^2.0.3" 1208 | "@eslint/js" "8.42.0" 1209 | "@humanwhocodes/config-array" "^0.11.10" 1210 | "@humanwhocodes/module-importer" "^1.0.1" 1211 | "@nodelib/fs.walk" "^1.2.8" 1212 | ajv "^6.10.0" 1213 | chalk "^4.0.0" 1214 | cross-spawn "^7.0.2" 1215 | debug "^4.3.2" 1216 | doctrine "^3.0.0" 1217 | escape-string-regexp "^4.0.0" 1218 | eslint-scope "^7.2.0" 1219 | eslint-visitor-keys "^3.4.1" 1220 | espree "^9.5.2" 1221 | esquery "^1.4.2" 1222 | esutils "^2.0.2" 1223 | fast-deep-equal "^3.1.3" 1224 | file-entry-cache "^6.0.1" 1225 | find-up "^5.0.0" 1226 | glob-parent "^6.0.2" 1227 | globals "^13.19.0" 1228 | graphemer "^1.4.0" 1229 | ignore "^5.2.0" 1230 | import-fresh "^3.0.0" 1231 | imurmurhash "^0.1.4" 1232 | is-glob "^4.0.0" 1233 | is-path-inside "^3.0.3" 1234 | js-yaml "^4.1.0" 1235 | json-stable-stringify-without-jsonify "^1.0.1" 1236 | levn "^0.4.1" 1237 | lodash.merge "^4.6.2" 1238 | minimatch "^3.1.2" 1239 | natural-compare "^1.4.0" 1240 | optionator "^0.9.1" 1241 | strip-ansi "^6.0.1" 1242 | strip-json-comments "^3.1.0" 1243 | text-table "^0.2.0" 1244 | 1245 | espree@^9.5.2: 1246 | version "9.5.2" 1247 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" 1248 | integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== 1249 | dependencies: 1250 | acorn "^8.8.0" 1251 | acorn-jsx "^5.3.2" 1252 | eslint-visitor-keys "^3.4.1" 1253 | 1254 | esquery@^1.4.2: 1255 | version "1.5.0" 1256 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 1257 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 1258 | dependencies: 1259 | estraverse "^5.1.0" 1260 | 1261 | esrecurse@^4.3.0: 1262 | version "4.3.0" 1263 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1264 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1265 | dependencies: 1266 | estraverse "^5.2.0" 1267 | 1268 | estraverse@^4.1.1: 1269 | version "4.3.0" 1270 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 1271 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1272 | 1273 | estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: 1274 | version "5.3.0" 1275 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1276 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1277 | 1278 | esutils@^2.0.2: 1279 | version "2.0.3" 1280 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1281 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1282 | 1283 | execa@^5.0.0: 1284 | version "5.1.1" 1285 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1286 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1287 | dependencies: 1288 | cross-spawn "^7.0.3" 1289 | get-stream "^6.0.0" 1290 | human-signals "^2.1.0" 1291 | is-stream "^2.0.0" 1292 | merge-stream "^2.0.0" 1293 | npm-run-path "^4.0.1" 1294 | onetime "^5.1.2" 1295 | signal-exit "^3.0.3" 1296 | strip-final-newline "^2.0.0" 1297 | 1298 | execa@^7.1.1: 1299 | version "7.1.1" 1300 | resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" 1301 | integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== 1302 | dependencies: 1303 | cross-spawn "^7.0.3" 1304 | get-stream "^6.0.1" 1305 | human-signals "^4.3.0" 1306 | is-stream "^3.0.0" 1307 | merge-stream "^2.0.0" 1308 | npm-run-path "^5.1.0" 1309 | onetime "^6.0.0" 1310 | signal-exit "^3.0.7" 1311 | strip-final-newline "^3.0.0" 1312 | 1313 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1314 | version "3.1.3" 1315 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1316 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1317 | 1318 | fast-diff@^1.1.2: 1319 | version "1.3.0" 1320 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" 1321 | integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== 1322 | 1323 | fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: 1324 | version "3.2.12" 1325 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 1326 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 1327 | dependencies: 1328 | "@nodelib/fs.stat" "^2.0.2" 1329 | "@nodelib/fs.walk" "^1.2.3" 1330 | glob-parent "^5.1.2" 1331 | merge2 "^1.3.0" 1332 | micromatch "^4.0.4" 1333 | 1334 | fast-json-stable-stringify@^2.0.0: 1335 | version "2.1.0" 1336 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1337 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1338 | 1339 | fast-levenshtein@^2.0.6: 1340 | version "2.0.6" 1341 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1342 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 1343 | 1344 | fastq@^1.6.0: 1345 | version "1.15.0" 1346 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 1347 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 1348 | dependencies: 1349 | reusify "^1.0.4" 1350 | 1351 | file-entry-cache@^6.0.1: 1352 | version "6.0.1" 1353 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1354 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1355 | dependencies: 1356 | flat-cache "^3.0.4" 1357 | 1358 | fill-range@^7.0.1: 1359 | version "7.0.1" 1360 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1361 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1362 | dependencies: 1363 | to-regex-range "^5.0.1" 1364 | 1365 | find-up@^5.0.0: 1366 | version "5.0.0" 1367 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1368 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1369 | dependencies: 1370 | locate-path "^6.0.0" 1371 | path-exists "^4.0.0" 1372 | 1373 | flat-cache@^3.0.4: 1374 | version "3.0.4" 1375 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 1376 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1377 | dependencies: 1378 | flatted "^3.1.0" 1379 | rimraf "^3.0.2" 1380 | 1381 | flatted@^3.1.0: 1382 | version "3.2.7" 1383 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 1384 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 1385 | 1386 | for-each@^0.3.3: 1387 | version "0.3.3" 1388 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" 1389 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 1390 | dependencies: 1391 | is-callable "^1.1.3" 1392 | 1393 | fs.realpath@^1.0.0: 1394 | version "1.0.0" 1395 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1396 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1397 | 1398 | fsevents@~2.3.2: 1399 | version "2.3.2" 1400 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1401 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1402 | 1403 | function-bind@^1.1.1: 1404 | version "1.1.1" 1405 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1406 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1407 | 1408 | function.prototype.name@^1.1.5: 1409 | version "1.1.5" 1410 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" 1411 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== 1412 | dependencies: 1413 | call-bind "^1.0.2" 1414 | define-properties "^1.1.3" 1415 | es-abstract "^1.19.0" 1416 | functions-have-names "^1.2.2" 1417 | 1418 | functional-red-black-tree@^1.0.1: 1419 | version "1.0.1" 1420 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1421 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 1422 | 1423 | functions-have-names@^1.2.2, functions-have-names@^1.2.3: 1424 | version "1.2.3" 1425 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" 1426 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 1427 | 1428 | get-func-name@^2.0.0: 1429 | version "2.0.0" 1430 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 1431 | integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== 1432 | 1433 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: 1434 | version "1.2.1" 1435 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" 1436 | integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== 1437 | dependencies: 1438 | function-bind "^1.1.1" 1439 | has "^1.0.3" 1440 | has-proto "^1.0.1" 1441 | has-symbols "^1.0.3" 1442 | 1443 | get-stream@^6.0.0, get-stream@^6.0.1: 1444 | version "6.0.1" 1445 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1446 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1447 | 1448 | get-symbol-description@^1.0.0: 1449 | version "1.0.0" 1450 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" 1451 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 1452 | dependencies: 1453 | call-bind "^1.0.2" 1454 | get-intrinsic "^1.1.1" 1455 | 1456 | get-tsconfig@^4.5.0: 1457 | version "4.6.0" 1458 | resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.0.tgz#e977690993a42f3e320e932427502a40f7af6d05" 1459 | integrity sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg== 1460 | dependencies: 1461 | resolve-pkg-maps "^1.0.0" 1462 | 1463 | glob-parent@^5.1.2: 1464 | version "5.1.2" 1465 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1466 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1467 | dependencies: 1468 | is-glob "^4.0.1" 1469 | 1470 | glob-parent@^6.0.2: 1471 | version "6.0.2" 1472 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1473 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1474 | dependencies: 1475 | is-glob "^4.0.3" 1476 | 1477 | glob@^7.1.3: 1478 | version "7.2.3" 1479 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1480 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1481 | dependencies: 1482 | fs.realpath "^1.0.0" 1483 | inflight "^1.0.4" 1484 | inherits "2" 1485 | minimatch "^3.1.1" 1486 | once "^1.3.0" 1487 | path-is-absolute "^1.0.0" 1488 | 1489 | globals@^13.19.0: 1490 | version "13.20.0" 1491 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 1492 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 1493 | dependencies: 1494 | type-fest "^0.20.2" 1495 | 1496 | globalthis@^1.0.3: 1497 | version "1.0.3" 1498 | resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" 1499 | integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== 1500 | dependencies: 1501 | define-properties "^1.1.3" 1502 | 1503 | globby@^11.1.0: 1504 | version "11.1.0" 1505 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1506 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1507 | dependencies: 1508 | array-union "^2.1.0" 1509 | dir-glob "^3.0.1" 1510 | fast-glob "^3.2.9" 1511 | ignore "^5.2.0" 1512 | merge2 "^1.4.1" 1513 | slash "^3.0.0" 1514 | 1515 | globby@^13.1.3: 1516 | version "13.1.4" 1517 | resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" 1518 | integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== 1519 | dependencies: 1520 | dir-glob "^3.0.1" 1521 | fast-glob "^3.2.11" 1522 | ignore "^5.2.0" 1523 | merge2 "^1.4.1" 1524 | slash "^4.0.0" 1525 | 1526 | gopd@^1.0.1: 1527 | version "1.0.1" 1528 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" 1529 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 1530 | dependencies: 1531 | get-intrinsic "^1.1.3" 1532 | 1533 | graceful-fs@^4.2.4: 1534 | version "4.2.11" 1535 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1536 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1537 | 1538 | graphemer@^1.4.0: 1539 | version "1.4.0" 1540 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 1541 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1542 | 1543 | has-bigints@^1.0.1, has-bigints@^1.0.2: 1544 | version "1.0.2" 1545 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" 1546 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 1547 | 1548 | has-flag@^4.0.0: 1549 | version "4.0.0" 1550 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1551 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1552 | 1553 | has-property-descriptors@^1.0.0: 1554 | version "1.0.0" 1555 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" 1556 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 1557 | dependencies: 1558 | get-intrinsic "^1.1.1" 1559 | 1560 | has-proto@^1.0.1: 1561 | version "1.0.1" 1562 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" 1563 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 1564 | 1565 | has-symbols@^1.0.2, has-symbols@^1.0.3: 1566 | version "1.0.3" 1567 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1568 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1569 | 1570 | has-tostringtag@^1.0.0: 1571 | version "1.0.0" 1572 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" 1573 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 1574 | dependencies: 1575 | has-symbols "^1.0.2" 1576 | 1577 | has@^1.0.3: 1578 | version "1.0.3" 1579 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1580 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1581 | dependencies: 1582 | function-bind "^1.1.1" 1583 | 1584 | human-signals@^2.1.0: 1585 | version "2.1.0" 1586 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1587 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1588 | 1589 | human-signals@^4.3.0: 1590 | version "4.3.1" 1591 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" 1592 | integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== 1593 | 1594 | ignore@^5.2.0: 1595 | version "5.2.4" 1596 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1597 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1598 | 1599 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1600 | version "3.3.0" 1601 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1602 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1603 | dependencies: 1604 | parent-module "^1.0.0" 1605 | resolve-from "^4.0.0" 1606 | 1607 | imurmurhash@^0.1.4: 1608 | version "0.1.4" 1609 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1610 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1611 | 1612 | inflight@^1.0.4: 1613 | version "1.0.6" 1614 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1615 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1616 | dependencies: 1617 | once "^1.3.0" 1618 | wrappy "1" 1619 | 1620 | inherits@2: 1621 | version "2.0.4" 1622 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1623 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1624 | 1625 | internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: 1626 | version "1.0.5" 1627 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" 1628 | integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== 1629 | dependencies: 1630 | get-intrinsic "^1.2.0" 1631 | has "^1.0.3" 1632 | side-channel "^1.0.4" 1633 | 1634 | is-arguments@^1.1.1: 1635 | version "1.1.1" 1636 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" 1637 | integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== 1638 | dependencies: 1639 | call-bind "^1.0.2" 1640 | has-tostringtag "^1.0.0" 1641 | 1642 | is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: 1643 | version "3.0.2" 1644 | resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" 1645 | integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== 1646 | dependencies: 1647 | call-bind "^1.0.2" 1648 | get-intrinsic "^1.2.0" 1649 | is-typed-array "^1.1.10" 1650 | 1651 | is-bigint@^1.0.1: 1652 | version "1.0.4" 1653 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" 1654 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1655 | dependencies: 1656 | has-bigints "^1.0.1" 1657 | 1658 | is-boolean-object@^1.1.0: 1659 | version "1.1.2" 1660 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" 1661 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1662 | dependencies: 1663 | call-bind "^1.0.2" 1664 | has-tostringtag "^1.0.0" 1665 | 1666 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: 1667 | version "1.2.7" 1668 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" 1669 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 1670 | 1671 | is-core-module@^2.11.0, is-core-module@^2.9.0: 1672 | version "2.12.1" 1673 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" 1674 | integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== 1675 | dependencies: 1676 | has "^1.0.3" 1677 | 1678 | is-date-object@^1.0.1, is-date-object@^1.0.5: 1679 | version "1.0.5" 1680 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" 1681 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1682 | dependencies: 1683 | has-tostringtag "^1.0.0" 1684 | 1685 | is-docker@^2.0.0: 1686 | version "2.2.1" 1687 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" 1688 | integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== 1689 | 1690 | is-docker@^3.0.0: 1691 | version "3.0.0" 1692 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" 1693 | integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== 1694 | 1695 | is-extglob@^2.1.1: 1696 | version "2.1.1" 1697 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1698 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1699 | 1700 | is-fullwidth-code-point@^4.0.0: 1701 | version "4.0.0" 1702 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" 1703 | integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== 1704 | 1705 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1706 | version "4.0.3" 1707 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1708 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1709 | dependencies: 1710 | is-extglob "^2.1.1" 1711 | 1712 | is-inside-container@^1.0.0: 1713 | version "1.0.0" 1714 | resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" 1715 | integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== 1716 | dependencies: 1717 | is-docker "^3.0.0" 1718 | 1719 | is-map@^2.0.1, is-map@^2.0.2: 1720 | version "2.0.2" 1721 | resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" 1722 | integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== 1723 | 1724 | is-negative-zero@^2.0.2: 1725 | version "2.0.2" 1726 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" 1727 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 1728 | 1729 | is-number-object@^1.0.4: 1730 | version "1.0.7" 1731 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" 1732 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 1733 | dependencies: 1734 | has-tostringtag "^1.0.0" 1735 | 1736 | is-number@^7.0.0: 1737 | version "7.0.0" 1738 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1739 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1740 | 1741 | is-path-inside@^3.0.3: 1742 | version "3.0.3" 1743 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1744 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1745 | 1746 | is-regex@^1.1.4: 1747 | version "1.1.4" 1748 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 1749 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1750 | dependencies: 1751 | call-bind "^1.0.2" 1752 | has-tostringtag "^1.0.0" 1753 | 1754 | is-set@^2.0.1, is-set@^2.0.2: 1755 | version "2.0.2" 1756 | resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" 1757 | integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== 1758 | 1759 | is-shared-array-buffer@^1.0.2: 1760 | version "1.0.2" 1761 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" 1762 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 1763 | dependencies: 1764 | call-bind "^1.0.2" 1765 | 1766 | is-stream@^2.0.0: 1767 | version "2.0.1" 1768 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1769 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1770 | 1771 | is-stream@^3.0.0: 1772 | version "3.0.0" 1773 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" 1774 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== 1775 | 1776 | is-string@^1.0.5, is-string@^1.0.7: 1777 | version "1.0.7" 1778 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" 1779 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1780 | dependencies: 1781 | has-tostringtag "^1.0.0" 1782 | 1783 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1784 | version "1.0.4" 1785 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 1786 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1787 | dependencies: 1788 | has-symbols "^1.0.2" 1789 | 1790 | is-typed-array@^1.1.10, is-typed-array@^1.1.9: 1791 | version "1.1.10" 1792 | resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" 1793 | integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== 1794 | dependencies: 1795 | available-typed-arrays "^1.0.5" 1796 | call-bind "^1.0.2" 1797 | for-each "^0.3.3" 1798 | gopd "^1.0.1" 1799 | has-tostringtag "^1.0.0" 1800 | 1801 | is-weakmap@^2.0.1: 1802 | version "2.0.1" 1803 | resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" 1804 | integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== 1805 | 1806 | is-weakref@^1.0.2: 1807 | version "1.0.2" 1808 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" 1809 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1810 | dependencies: 1811 | call-bind "^1.0.2" 1812 | 1813 | is-weakset@^2.0.1: 1814 | version "2.0.2" 1815 | resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" 1816 | integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== 1817 | dependencies: 1818 | call-bind "^1.0.2" 1819 | get-intrinsic "^1.1.1" 1820 | 1821 | is-wsl@^2.2.0: 1822 | version "2.2.0" 1823 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" 1824 | integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== 1825 | dependencies: 1826 | is-docker "^2.0.0" 1827 | 1828 | isarray@^2.0.5: 1829 | version "2.0.5" 1830 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" 1831 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== 1832 | 1833 | isexe@^2.0.0: 1834 | version "2.0.0" 1835 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1836 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1837 | 1838 | "js-tokens@^3.0.0 || ^4.0.0": 1839 | version "4.0.0" 1840 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1841 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1842 | 1843 | js-yaml@^4.1.0: 1844 | version "4.1.0" 1845 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1846 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1847 | dependencies: 1848 | argparse "^2.0.1" 1849 | 1850 | json-schema-traverse@^0.4.1: 1851 | version "0.4.1" 1852 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1853 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1854 | 1855 | json-stable-stringify-without-jsonify@^1.0.1: 1856 | version "1.0.1" 1857 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1858 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1859 | 1860 | json5@^1.0.2: 1861 | version "1.0.2" 1862 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" 1863 | integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== 1864 | dependencies: 1865 | minimist "^1.2.0" 1866 | 1867 | jsonc-parser@^3.2.0: 1868 | version "3.2.0" 1869 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" 1870 | integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== 1871 | 1872 | "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: 1873 | version "3.3.3" 1874 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" 1875 | integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== 1876 | dependencies: 1877 | array-includes "^3.1.5" 1878 | object.assign "^4.1.3" 1879 | 1880 | language-subtag-registry@~0.3.2: 1881 | version "0.3.22" 1882 | resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" 1883 | integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== 1884 | 1885 | language-tags@=1.0.5: 1886 | version "1.0.5" 1887 | resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" 1888 | integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== 1889 | dependencies: 1890 | language-subtag-registry "~0.3.2" 1891 | 1892 | levn@^0.4.1: 1893 | version "0.4.1" 1894 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1895 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1896 | dependencies: 1897 | prelude-ls "^1.2.1" 1898 | type-check "~0.4.0" 1899 | 1900 | local-pkg@^0.4.2: 1901 | version "0.4.3" 1902 | resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" 1903 | integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== 1904 | 1905 | locate-path@^6.0.0: 1906 | version "6.0.0" 1907 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1908 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1909 | dependencies: 1910 | p-locate "^5.0.0" 1911 | 1912 | lodash.merge@^4.6.2: 1913 | version "4.6.2" 1914 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1915 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1916 | 1917 | loose-envify@^1.1.0, loose-envify@^1.4.0: 1918 | version "1.4.0" 1919 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1920 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1921 | dependencies: 1922 | js-tokens "^3.0.0 || ^4.0.0" 1923 | 1924 | loupe@^2.3.1, loupe@^2.3.6: 1925 | version "2.3.6" 1926 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" 1927 | integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== 1928 | dependencies: 1929 | get-func-name "^2.0.0" 1930 | 1931 | lru-cache@^6.0.0: 1932 | version "6.0.0" 1933 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1934 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1935 | dependencies: 1936 | yallist "^4.0.0" 1937 | 1938 | merge-stream@^2.0.0: 1939 | version "2.0.0" 1940 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1941 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1942 | 1943 | merge2@^1.3.0, merge2@^1.4.1: 1944 | version "1.4.1" 1945 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1946 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1947 | 1948 | micromatch@^4.0.4: 1949 | version "4.0.5" 1950 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1951 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1952 | dependencies: 1953 | braces "^3.0.2" 1954 | picomatch "^2.3.1" 1955 | 1956 | mimic-fn@^2.1.0: 1957 | version "2.1.0" 1958 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1959 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1960 | 1961 | mimic-fn@^4.0.0: 1962 | version "4.0.0" 1963 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" 1964 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== 1965 | 1966 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1967 | version "3.1.2" 1968 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1969 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1970 | dependencies: 1971 | brace-expansion "^1.1.7" 1972 | 1973 | minimist@^1.2.0, minimist@^1.2.6: 1974 | version "1.2.8" 1975 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1976 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1977 | 1978 | mlly@^1.1.0, mlly@^1.2.0: 1979 | version "1.3.0" 1980 | resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.3.0.tgz#3184cb80c6437bda861a9f452ae74e3434ed9cd1" 1981 | integrity sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw== 1982 | dependencies: 1983 | acorn "^8.8.2" 1984 | pathe "^1.1.0" 1985 | pkg-types "^1.0.3" 1986 | ufo "^1.1.2" 1987 | 1988 | moment@2.29.4: 1989 | version "2.29.4" 1990 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" 1991 | integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== 1992 | 1993 | ms@2.1.2: 1994 | version "2.1.2" 1995 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1996 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1997 | 1998 | ms@^2.1.1: 1999 | version "2.1.3" 2000 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 2001 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 2002 | 2003 | nanoid@^3.3.6: 2004 | version "3.3.6" 2005 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" 2006 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== 2007 | 2008 | natural-compare@^1.4.0: 2009 | version "1.4.0" 2010 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2011 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 2012 | 2013 | npm-run-path@^4.0.1: 2014 | version "4.0.1" 2015 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 2016 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 2017 | dependencies: 2018 | path-key "^3.0.0" 2019 | 2020 | npm-run-path@^5.1.0: 2021 | version "5.1.0" 2022 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" 2023 | integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== 2024 | dependencies: 2025 | path-key "^4.0.0" 2026 | 2027 | object-assign@^4.1.1: 2028 | version "4.1.1" 2029 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2030 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 2031 | 2032 | object-inspect@^1.12.3, object-inspect@^1.9.0: 2033 | version "1.12.3" 2034 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" 2035 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== 2036 | 2037 | object-is@^1.1.5: 2038 | version "1.1.5" 2039 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" 2040 | integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== 2041 | dependencies: 2042 | call-bind "^1.0.2" 2043 | define-properties "^1.1.3" 2044 | 2045 | object-keys@^1.1.1: 2046 | version "1.1.1" 2047 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2048 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2049 | 2050 | object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: 2051 | version "4.1.4" 2052 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" 2053 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 2054 | dependencies: 2055 | call-bind "^1.0.2" 2056 | define-properties "^1.1.4" 2057 | has-symbols "^1.0.3" 2058 | object-keys "^1.1.1" 2059 | 2060 | object.entries@^1.1.5, object.entries@^1.1.6: 2061 | version "1.1.6" 2062 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" 2063 | integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== 2064 | dependencies: 2065 | call-bind "^1.0.2" 2066 | define-properties "^1.1.4" 2067 | es-abstract "^1.20.4" 2068 | 2069 | object.fromentries@^2.0.6: 2070 | version "2.0.6" 2071 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" 2072 | integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== 2073 | dependencies: 2074 | call-bind "^1.0.2" 2075 | define-properties "^1.1.4" 2076 | es-abstract "^1.20.4" 2077 | 2078 | object.hasown@^1.1.2: 2079 | version "1.1.2" 2080 | resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" 2081 | integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== 2082 | dependencies: 2083 | define-properties "^1.1.4" 2084 | es-abstract "^1.20.4" 2085 | 2086 | object.values@^1.1.6: 2087 | version "1.1.6" 2088 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" 2089 | integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== 2090 | dependencies: 2091 | call-bind "^1.0.2" 2092 | define-properties "^1.1.4" 2093 | es-abstract "^1.20.4" 2094 | 2095 | obsidian@latest: 2096 | version "1.4.11" 2097 | resolved "https://registry.yarnpkg.com/obsidian/-/obsidian-1.4.11.tgz#5cba594c83a74ebad58b630c610265018abdadaa" 2098 | integrity sha512-BCVYTvaXxElJMl6MMbDdY/CGK+aq18SdtDY/7vH8v6BxCBQ6KF4kKxL0vG9UZ0o5qh139KpUoJHNm+6O5dllKA== 2099 | dependencies: 2100 | "@types/codemirror" "5.60.8" 2101 | moment "2.29.4" 2102 | 2103 | once@^1.3.0: 2104 | version "1.4.0" 2105 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2106 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 2107 | dependencies: 2108 | wrappy "1" 2109 | 2110 | onetime@^5.1.2: 2111 | version "5.1.2" 2112 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 2113 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 2114 | dependencies: 2115 | mimic-fn "^2.1.0" 2116 | 2117 | onetime@^6.0.0: 2118 | version "6.0.0" 2119 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" 2120 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== 2121 | dependencies: 2122 | mimic-fn "^4.0.0" 2123 | 2124 | open@^9.1.0: 2125 | version "9.1.0" 2126 | resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" 2127 | integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== 2128 | dependencies: 2129 | default-browser "^4.0.0" 2130 | define-lazy-prop "^3.0.0" 2131 | is-inside-container "^1.0.0" 2132 | is-wsl "^2.2.0" 2133 | 2134 | optionator@^0.9.1: 2135 | version "0.9.1" 2136 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 2137 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 2138 | dependencies: 2139 | deep-is "^0.1.3" 2140 | fast-levenshtein "^2.0.6" 2141 | levn "^0.4.1" 2142 | prelude-ls "^1.2.1" 2143 | type-check "^0.4.0" 2144 | word-wrap "^1.2.3" 2145 | 2146 | p-limit@^3.0.2: 2147 | version "3.1.0" 2148 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2149 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2150 | dependencies: 2151 | yocto-queue "^0.1.0" 2152 | 2153 | p-limit@^4.0.0: 2154 | version "4.0.0" 2155 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" 2156 | integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== 2157 | dependencies: 2158 | yocto-queue "^1.0.0" 2159 | 2160 | p-locate@^5.0.0: 2161 | version "5.0.0" 2162 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 2163 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 2164 | dependencies: 2165 | p-limit "^3.0.2" 2166 | 2167 | parent-module@^1.0.0: 2168 | version "1.0.1" 2169 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 2170 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 2171 | dependencies: 2172 | callsites "^3.0.0" 2173 | 2174 | path-exists@^4.0.0: 2175 | version "4.0.0" 2176 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2177 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2178 | 2179 | path-is-absolute@^1.0.0: 2180 | version "1.0.1" 2181 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2182 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2183 | 2184 | path-key@^3.0.0, path-key@^3.1.0: 2185 | version "3.1.1" 2186 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2187 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2188 | 2189 | path-key@^4.0.0: 2190 | version "4.0.0" 2191 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" 2192 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== 2193 | 2194 | path-parse@^1.0.7: 2195 | version "1.0.7" 2196 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2197 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2198 | 2199 | path-type@^4.0.0: 2200 | version "4.0.0" 2201 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 2202 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 2203 | 2204 | pathe@^1.1.0: 2205 | version "1.1.1" 2206 | resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" 2207 | integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== 2208 | 2209 | pathval@^1.1.1: 2210 | version "1.1.1" 2211 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 2212 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 2213 | 2214 | picocolors@^1.0.0: 2215 | version "1.0.0" 2216 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 2217 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 2218 | 2219 | picomatch@^2.3.1: 2220 | version "2.3.1" 2221 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2222 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2223 | 2224 | pkg-types@^1.0.3: 2225 | version "1.0.3" 2226 | resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" 2227 | integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== 2228 | dependencies: 2229 | jsonc-parser "^3.2.0" 2230 | mlly "^1.2.0" 2231 | pathe "^1.1.0" 2232 | 2233 | postcss@^8.4.23: 2234 | version "8.4.24" 2235 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" 2236 | integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== 2237 | dependencies: 2238 | nanoid "^3.3.6" 2239 | picocolors "^1.0.0" 2240 | source-map-js "^1.0.2" 2241 | 2242 | prelude-ls@^1.2.1: 2243 | version "1.2.1" 2244 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 2245 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 2246 | 2247 | prettier-linter-helpers@^1.0.0: 2248 | version "1.0.0" 2249 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 2250 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 2251 | dependencies: 2252 | fast-diff "^1.1.2" 2253 | 2254 | prettier@^2.8.3: 2255 | version "2.8.8" 2256 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 2257 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 2258 | 2259 | pretty-format@^27.5.1: 2260 | version "27.5.1" 2261 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" 2262 | integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== 2263 | dependencies: 2264 | ansi-regex "^5.0.1" 2265 | ansi-styles "^5.0.0" 2266 | react-is "^17.0.1" 2267 | 2268 | prop-types@^15.8.1: 2269 | version "15.8.1" 2270 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" 2271 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== 2272 | dependencies: 2273 | loose-envify "^1.4.0" 2274 | object-assign "^4.1.1" 2275 | react-is "^16.13.1" 2276 | 2277 | punycode@^2.1.0: 2278 | version "2.3.0" 2279 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 2280 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 2281 | 2282 | queue-microtask@^1.2.2: 2283 | version "1.2.3" 2284 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 2285 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 2286 | 2287 | react-is@^16.13.1: 2288 | version "16.13.1" 2289 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 2290 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 2291 | 2292 | react-is@^17.0.1: 2293 | version "17.0.2" 2294 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" 2295 | integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== 2296 | 2297 | react@^18.2.0: 2298 | version "18.2.0" 2299 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" 2300 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 2301 | dependencies: 2302 | loose-envify "^1.1.0" 2303 | 2304 | regenerator-runtime@^0.13.11: 2305 | version "0.13.11" 2306 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 2307 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 2308 | 2309 | regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: 2310 | version "1.5.0" 2311 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" 2312 | integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== 2313 | dependencies: 2314 | call-bind "^1.0.2" 2315 | define-properties "^1.2.0" 2316 | functions-have-names "^1.2.3" 2317 | 2318 | regexpp@^3.2.0: 2319 | version "3.2.0" 2320 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 2321 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 2322 | 2323 | resolve-from@^4.0.0: 2324 | version "4.0.0" 2325 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2326 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2327 | 2328 | resolve-pkg-maps@^1.0.0: 2329 | version "1.0.0" 2330 | resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" 2331 | integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== 2332 | 2333 | resolve@^1.22.1: 2334 | version "1.22.2" 2335 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" 2336 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== 2337 | dependencies: 2338 | is-core-module "^2.11.0" 2339 | path-parse "^1.0.7" 2340 | supports-preserve-symlinks-flag "^1.0.0" 2341 | 2342 | resolve@^2.0.0-next.4: 2343 | version "2.0.0-next.4" 2344 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" 2345 | integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== 2346 | dependencies: 2347 | is-core-module "^2.9.0" 2348 | path-parse "^1.0.7" 2349 | supports-preserve-symlinks-flag "^1.0.0" 2350 | 2351 | reusify@^1.0.4: 2352 | version "1.0.4" 2353 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2354 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2355 | 2356 | rimraf@^3.0.2: 2357 | version "3.0.2" 2358 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2359 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2360 | dependencies: 2361 | glob "^7.1.3" 2362 | 2363 | rollup@^3.21.0: 2364 | version "3.24.1" 2365 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.24.1.tgz#7ed67b778fb90a6f5e32e64510af9e28b03e47a8" 2366 | integrity sha512-REHe5dx30ERBRFS0iENPHy+t6wtSEYkjrhwNsLyh3qpRaZ1+aylvMUdMBUHWUD/RjjLmLzEvY8Z9XRlpcdIkHA== 2367 | optionalDependencies: 2368 | fsevents "~2.3.2" 2369 | 2370 | run-applescript@^5.0.0: 2371 | version "5.0.0" 2372 | resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" 2373 | integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== 2374 | dependencies: 2375 | execa "^5.0.0" 2376 | 2377 | run-parallel@^1.1.9: 2378 | version "1.2.0" 2379 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 2380 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2381 | dependencies: 2382 | queue-microtask "^1.2.2" 2383 | 2384 | safe-regex-test@^1.0.0: 2385 | version "1.0.0" 2386 | resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" 2387 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== 2388 | dependencies: 2389 | call-bind "^1.0.2" 2390 | get-intrinsic "^1.1.3" 2391 | is-regex "^1.1.4" 2392 | 2393 | semver@^6.3.0: 2394 | version "6.3.0" 2395 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2396 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2397 | 2398 | semver@^7.3.7: 2399 | version "7.5.1" 2400 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" 2401 | integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== 2402 | dependencies: 2403 | lru-cache "^6.0.0" 2404 | 2405 | shebang-command@^2.0.0: 2406 | version "2.0.0" 2407 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2408 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2409 | dependencies: 2410 | shebang-regex "^3.0.0" 2411 | 2412 | shebang-regex@^3.0.0: 2413 | version "3.0.0" 2414 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2415 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2416 | 2417 | side-channel@^1.0.4: 2418 | version "1.0.4" 2419 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 2420 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 2421 | dependencies: 2422 | call-bind "^1.0.0" 2423 | get-intrinsic "^1.0.2" 2424 | object-inspect "^1.9.0" 2425 | 2426 | siginfo@^2.0.0: 2427 | version "2.0.0" 2428 | resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" 2429 | integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== 2430 | 2431 | signal-exit@^3.0.3, signal-exit@^3.0.7: 2432 | version "3.0.7" 2433 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2434 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2435 | 2436 | slash@^3.0.0: 2437 | version "3.0.0" 2438 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2439 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2440 | 2441 | slash@^4.0.0: 2442 | version "4.0.0" 2443 | resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" 2444 | integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== 2445 | 2446 | slice-ansi@^5.0.0: 2447 | version "5.0.0" 2448 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" 2449 | integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== 2450 | dependencies: 2451 | ansi-styles "^6.0.0" 2452 | is-fullwidth-code-point "^4.0.0" 2453 | 2454 | source-map-js@^1.0.2: 2455 | version "1.0.2" 2456 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 2457 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 2458 | 2459 | source-map-support@^0.5.21: 2460 | version "0.5.21" 2461 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 2462 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 2463 | dependencies: 2464 | buffer-from "^1.0.0" 2465 | source-map "^0.6.0" 2466 | 2467 | source-map@^0.6.0, source-map@^0.6.1: 2468 | version "0.6.1" 2469 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2470 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2471 | 2472 | stackback@0.0.2: 2473 | version "0.0.2" 2474 | resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" 2475 | integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== 2476 | 2477 | std-env@^3.3.1: 2478 | version "3.3.3" 2479 | resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" 2480 | integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== 2481 | 2482 | stop-iteration-iterator@^1.0.0: 2483 | version "1.0.0" 2484 | resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" 2485 | integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== 2486 | dependencies: 2487 | internal-slot "^1.0.4" 2488 | 2489 | string-width@^5.0.0: 2490 | version "5.1.2" 2491 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 2492 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 2493 | dependencies: 2494 | eastasianwidth "^0.2.0" 2495 | emoji-regex "^9.2.2" 2496 | strip-ansi "^7.0.1" 2497 | 2498 | string.prototype.matchall@^4.0.8: 2499 | version "4.0.8" 2500 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" 2501 | integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== 2502 | dependencies: 2503 | call-bind "^1.0.2" 2504 | define-properties "^1.1.4" 2505 | es-abstract "^1.20.4" 2506 | get-intrinsic "^1.1.3" 2507 | has-symbols "^1.0.3" 2508 | internal-slot "^1.0.3" 2509 | regexp.prototype.flags "^1.4.3" 2510 | side-channel "^1.0.4" 2511 | 2512 | string.prototype.trim@^1.2.7: 2513 | version "1.2.7" 2514 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" 2515 | integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== 2516 | dependencies: 2517 | call-bind "^1.0.2" 2518 | define-properties "^1.1.4" 2519 | es-abstract "^1.20.4" 2520 | 2521 | string.prototype.trimend@^1.0.6: 2522 | version "1.0.6" 2523 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" 2524 | integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== 2525 | dependencies: 2526 | call-bind "^1.0.2" 2527 | define-properties "^1.1.4" 2528 | es-abstract "^1.20.4" 2529 | 2530 | string.prototype.trimstart@^1.0.6: 2531 | version "1.0.6" 2532 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" 2533 | integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== 2534 | dependencies: 2535 | call-bind "^1.0.2" 2536 | define-properties "^1.1.4" 2537 | es-abstract "^1.20.4" 2538 | 2539 | strip-ansi@^6.0.1: 2540 | version "6.0.1" 2541 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2542 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2543 | dependencies: 2544 | ansi-regex "^5.0.1" 2545 | 2546 | strip-ansi@^7.0.1: 2547 | version "7.1.0" 2548 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" 2549 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 2550 | dependencies: 2551 | ansi-regex "^6.0.1" 2552 | 2553 | strip-bom@^3.0.0: 2554 | version "3.0.0" 2555 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2556 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 2557 | 2558 | strip-final-newline@^2.0.0: 2559 | version "2.0.0" 2560 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2561 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2562 | 2563 | strip-final-newline@^3.0.0: 2564 | version "3.0.0" 2565 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" 2566 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== 2567 | 2568 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 2569 | version "3.1.1" 2570 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2571 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2572 | 2573 | strip-literal@^1.0.0: 2574 | version "1.0.1" 2575 | resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.0.1.tgz#0115a332710c849b4e46497891fb8d585e404bd2" 2576 | integrity sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q== 2577 | dependencies: 2578 | acorn "^8.8.2" 2579 | 2580 | supports-color@^7.1.0: 2581 | version "7.2.0" 2582 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2583 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2584 | dependencies: 2585 | has-flag "^4.0.0" 2586 | 2587 | supports-preserve-symlinks-flag@^1.0.0: 2588 | version "1.0.0" 2589 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2590 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2591 | 2592 | synckit@^0.8.5: 2593 | version "0.8.5" 2594 | resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" 2595 | integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== 2596 | dependencies: 2597 | "@pkgr/utils" "^2.3.1" 2598 | tslib "^2.5.0" 2599 | 2600 | tapable@^2.2.0: 2601 | version "2.2.1" 2602 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 2603 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 2604 | 2605 | text-table@^0.2.0: 2606 | version "0.2.0" 2607 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2608 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 2609 | 2610 | tinybench@^2.3.1: 2611 | version "2.5.0" 2612 | resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.0.tgz#4711c99bbf6f3e986f67eb722fed9cddb3a68ba5" 2613 | integrity sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA== 2614 | 2615 | tinypool@^0.3.1: 2616 | version "0.3.1" 2617 | resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.1.tgz#a99c2e446aba9be05d3e1cb756d6aed7af4723b6" 2618 | integrity sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ== 2619 | 2620 | tinyspy@^1.0.2: 2621 | version "1.1.1" 2622 | resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.1.1.tgz#0cb91d5157892af38cb2d217f5c7e8507a5bf092" 2623 | integrity sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== 2624 | 2625 | titleize@^3.0.0: 2626 | version "3.0.0" 2627 | resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" 2628 | integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== 2629 | 2630 | to-regex-range@^5.0.1: 2631 | version "5.0.1" 2632 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2633 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2634 | dependencies: 2635 | is-number "^7.0.0" 2636 | 2637 | tsconfig-paths@^3.14.1: 2638 | version "3.14.2" 2639 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" 2640 | integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== 2641 | dependencies: 2642 | "@types/json5" "^0.0.29" 2643 | json5 "^1.0.2" 2644 | minimist "^1.2.6" 2645 | strip-bom "^3.0.0" 2646 | 2647 | tslib@2.4.0: 2648 | version "2.4.0" 2649 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 2650 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 2651 | 2652 | tslib@^1.8.1: 2653 | version "1.14.1" 2654 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 2655 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2656 | 2657 | tslib@^2.5.0: 2658 | version "2.5.3" 2659 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" 2660 | integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== 2661 | 2662 | tsutils@^3.21.0: 2663 | version "3.21.0" 2664 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 2665 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 2666 | dependencies: 2667 | tslib "^1.8.1" 2668 | 2669 | type-check@^0.4.0, type-check@~0.4.0: 2670 | version "0.4.0" 2671 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2672 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2673 | dependencies: 2674 | prelude-ls "^1.2.1" 2675 | 2676 | type-detect@^4.0.0, type-detect@^4.0.5: 2677 | version "4.0.8" 2678 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2679 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2680 | 2681 | type-fest@^0.20.2: 2682 | version "0.20.2" 2683 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2684 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2685 | 2686 | typed-array-length@^1.0.4: 2687 | version "1.0.4" 2688 | resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" 2689 | integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== 2690 | dependencies: 2691 | call-bind "^1.0.2" 2692 | for-each "^0.3.3" 2693 | is-typed-array "^1.1.9" 2694 | 2695 | typescript@4.7.4: 2696 | version "4.7.4" 2697 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 2698 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 2699 | 2700 | ufo@^1.1.2: 2701 | version "1.1.2" 2702 | resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" 2703 | integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== 2704 | 2705 | unbox-primitive@^1.0.2: 2706 | version "1.0.2" 2707 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" 2708 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 2709 | dependencies: 2710 | call-bind "^1.0.2" 2711 | has-bigints "^1.0.2" 2712 | has-symbols "^1.0.3" 2713 | which-boxed-primitive "^1.0.2" 2714 | 2715 | untildify@^4.0.0: 2716 | version "4.0.0" 2717 | resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" 2718 | integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== 2719 | 2720 | uri-js@^4.2.2: 2721 | version "4.4.1" 2722 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2723 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2724 | dependencies: 2725 | punycode "^2.1.0" 2726 | 2727 | vite-node@0.28.5: 2728 | version "0.28.5" 2729 | resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.28.5.tgz#56d0f78846ea40fddf2e28390899df52a4738006" 2730 | integrity sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA== 2731 | dependencies: 2732 | cac "^6.7.14" 2733 | debug "^4.3.4" 2734 | mlly "^1.1.0" 2735 | pathe "^1.1.0" 2736 | picocolors "^1.0.0" 2737 | source-map "^0.6.1" 2738 | source-map-support "^0.5.21" 2739 | vite "^3.0.0 || ^4.0.0" 2740 | 2741 | "vite@^3.0.0 || ^4.0.0": 2742 | version "4.3.9" 2743 | resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d" 2744 | integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== 2745 | dependencies: 2746 | esbuild "^0.17.5" 2747 | postcss "^8.4.23" 2748 | rollup "^3.21.0" 2749 | optionalDependencies: 2750 | fsevents "~2.3.2" 2751 | 2752 | vitest@^0.28.3: 2753 | version "0.28.5" 2754 | resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.28.5.tgz#94410a8924cd7189e4f1adffa8c5cde809cbf2f9" 2755 | integrity sha512-pyCQ+wcAOX7mKMcBNkzDwEHRGqQvHUl0XnoHR+3Pb1hytAHISgSxv9h0gUiSiYtISXUU3rMrKiKzFYDrI6ZIHA== 2756 | dependencies: 2757 | "@types/chai" "^4.3.4" 2758 | "@types/chai-subset" "^1.3.3" 2759 | "@types/node" "*" 2760 | "@vitest/expect" "0.28.5" 2761 | "@vitest/runner" "0.28.5" 2762 | "@vitest/spy" "0.28.5" 2763 | "@vitest/utils" "0.28.5" 2764 | acorn "^8.8.1" 2765 | acorn-walk "^8.2.0" 2766 | cac "^6.7.14" 2767 | chai "^4.3.7" 2768 | debug "^4.3.4" 2769 | local-pkg "^0.4.2" 2770 | pathe "^1.1.0" 2771 | picocolors "^1.0.0" 2772 | source-map "^0.6.1" 2773 | std-env "^3.3.1" 2774 | strip-literal "^1.0.0" 2775 | tinybench "^2.3.1" 2776 | tinypool "^0.3.1" 2777 | tinyspy "^1.0.2" 2778 | vite "^3.0.0 || ^4.0.0" 2779 | vite-node "0.28.5" 2780 | why-is-node-running "^2.2.2" 2781 | 2782 | which-boxed-primitive@^1.0.2: 2783 | version "1.0.2" 2784 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 2785 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 2786 | dependencies: 2787 | is-bigint "^1.0.1" 2788 | is-boolean-object "^1.1.0" 2789 | is-number-object "^1.0.4" 2790 | is-string "^1.0.5" 2791 | is-symbol "^1.0.3" 2792 | 2793 | which-collection@^1.0.1: 2794 | version "1.0.1" 2795 | resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" 2796 | integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== 2797 | dependencies: 2798 | is-map "^2.0.1" 2799 | is-set "^2.0.1" 2800 | is-weakmap "^2.0.1" 2801 | is-weakset "^2.0.1" 2802 | 2803 | which-typed-array@^1.1.9: 2804 | version "1.1.9" 2805 | resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" 2806 | integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== 2807 | dependencies: 2808 | available-typed-arrays "^1.0.5" 2809 | call-bind "^1.0.2" 2810 | for-each "^0.3.3" 2811 | gopd "^1.0.1" 2812 | has-tostringtag "^1.0.0" 2813 | is-typed-array "^1.1.10" 2814 | 2815 | which@^2.0.1: 2816 | version "2.0.2" 2817 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2818 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2819 | dependencies: 2820 | isexe "^2.0.0" 2821 | 2822 | why-is-node-running@^2.2.2: 2823 | version "2.2.2" 2824 | resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" 2825 | integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== 2826 | dependencies: 2827 | siginfo "^2.0.0" 2828 | stackback "0.0.2" 2829 | 2830 | word-wrap@^1.2.3: 2831 | version "1.2.3" 2832 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2833 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2834 | 2835 | wrappy@1: 2836 | version "1.0.2" 2837 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2838 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2839 | 2840 | yallist@^4.0.0: 2841 | version "4.0.0" 2842 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2843 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2844 | 2845 | yocto-queue@^0.1.0: 2846 | version "0.1.0" 2847 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2848 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2849 | 2850 | yocto-queue@^1.0.0: 2851 | version "1.0.0" 2852 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" 2853 | integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== 2854 | --------------------------------------------------------------------------------