├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .gitignore ├── .npmrc ├── LICENSE ├── README.md ├── build-scripts └── deploy-local.sh ├── esbuild.config.mjs ├── manifest.json ├── package.json ├── src ├── constants.ts ├── custom-selection-handlers.ts ├── main.ts └── 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 | npm node_modules 2 | build -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "env": { "node": true }, 5 | "plugins": [ 6 | "@typescript-eslint" 7 | ], 8 | "extends": [ 9 | "eslint:recommended", 10 | "plugin:@typescript-eslint/eslint-recommended", 11 | "plugin:@typescript-eslint/recommended" 12 | ], 13 | "parserOptions": { 14 | "sourceType": "module" 15 | }, 16 | "rules": { 17 | "no-unused-vars": "off", 18 | "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], 19 | "@typescript-eslint/ban-ts-comment": "off", 20 | "no-prototype-builtins": "off", 21 | "@typescript-eslint/no-empty-function": "off" 22 | } 23 | } -------------------------------------------------------------------------------- /.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 | 24 | # output files 25 | dist 26 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Tim Hor 4 | Copyright (c) 2022 Matthew Alner 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NO LONGER SUPPORTED 2 | 3 | > [!WARNING] 4 | > i've stopped maintaining this repo as personally i've moved to using [obsidian-editor-shortcuts](https://github.com/timhor/obsidian-editor-shortcuts) it does everything this plugin does and way more. 5 | 6 | # Toggle Case 7 | 8 | This [Obsidian](https://obsidian.md) plugin adds a command to toggle the case of your selection between `lowercase` => `Title Case` => `UPPERCASE` 9 | 10 | | Command | Shortcut \* | 11 | |------------------------------------------------|-------------| 12 | | Toggle Case | Not set | 13 | 14 | ### Multiple Cursors 15 | 16 | The shortcut also works with [multiple cursors](https://help.obsidian.md/How+to/Working+with+multiple+cursors): 17 | 18 | ## Installing the plugin 19 | 20 | Refer to the official installation instructions for third-party plugins [here](https://help.obsidian.md/Advanced+topics/Community+plugins). 21 | 22 | ## Configuring settings 23 | 24 | Go to Settings → Hotkeys to customise the keyboard shortcut for "Toggle Case". 25 | 26 | ## Thanks 27 | 28 | Many thanks to [obsidian-editor-shortcuts](https://github.com/timhor/obsidian-editor-shortcuts) from which this is largely copied / based on. 29 | Take a look if you want a much more comprehensive set of common code editor shortcuts. 30 | 31 | 32 | https://user-images.githubusercontent.com/2782730/206288618-2b1cebd5-14f5-4e06-b353-fbc740394ea8.mp4 33 | 34 | -------------------------------------------------------------------------------- /build-scripts/deploy-local.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | OBSIDIAN_PLUGIN_PATH="$HOME/obsidian-vaults/Sandbox/.obsidian/plugins" 4 | OBSIDIAN_PLUGIN_NAME="toggle-case" 5 | 6 | echo "running local deploy:" 7 | echo "PATH: ${OBSIDIAN_PLUGIN_PATH:?}/${OBSIDIAN_PLUGIN_NAME:?}" 8 | 9 | rm -rf "${OBSIDIAN_PLUGIN_PATH:?}/${OBSIDIAN_PLUGIN_NAME:?}" 10 | mkdir -p "${OBSIDIAN_PLUGIN_PATH:?}/${OBSIDIAN_PLUGIN_NAME:?}" 11 | cp dist/main.js styles.css manifest.json "${OBSIDIAN_PLUGIN_PATH:?}/${OBSIDIAN_PLUGIN_NAME:?}" 12 | 13 | printf "$(tput setaf 2)✓ Success: $(tput sgr0)%s.\n" "Restart Obsidian" 14 | -------------------------------------------------------------------------------- /esbuild.config.mjs: -------------------------------------------------------------------------------- 1 | import esbuild from "esbuild"; 2 | import process from "process"; 3 | import builtins from 'builtin-modules' 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 | esbuild.build({ 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 | watch: !prod, 37 | target: 'es2018', 38 | logLevel: "info", 39 | sourcemap: prod ? false : 'inline', 40 | treeShaking: true, 41 | outfile: 'dist/main.js', 42 | }).catch(() => process.exit(1)); 43 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-toggle-case", 3 | "name": "Toggle Case", 4 | "version": "1.1.0", 5 | "minAppVersion": "0.15.0", 6 | "description": "This is an Obsidian plugin to toggle between `lowercase` `UPPERCASE` and `Title Case`", 7 | "author": "automattech", 8 | "authorUrl": "https://github.com/MatthewAlner/obsidian-toggle-case", 9 | "isDesktopOnly": false 10 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-toggle-case", 3 | "version": "1.1.0", 4 | "description": "This is a plugin for Obsidian (https://obsidian.md) to toggle between `lowercase` `UPPERCASE` and `Title Case`", 5 | "main": "main.js", 6 | "scripts": { 7 | "dev": "node esbuild.config.mjs", 8 | "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", 9 | "version": "node version-bump.mjs && git add manifest.json versions.json", 10 | "deployLocal": "yarn build && ./build-scripts/deploy-local.sh" 11 | }, 12 | "keywords": [], 13 | "author": "automattech", 14 | "license": "MIT", 15 | "devDependencies": { 16 | "@types/node": "^16.11.6", 17 | "@typescript-eslint/eslint-plugin": "5.29.0", 18 | "@typescript-eslint/parser": "5.29.0", 19 | "builtin-modules": "3.3.0", 20 | "esbuild": "0.14.47", 21 | "obsidian": "latest", 22 | "tslib": "2.4.0", 23 | "typescript": "4.7.4" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | export const LOWERCASE_ARTICLES = ['the', 'a', 'an']; 2 | -------------------------------------------------------------------------------- /src/custom-selection-handlers.ts: -------------------------------------------------------------------------------- 1 | import { EditorSelectionOrCaret } from 'obsidian'; 2 | 3 | export type CustomSelectionHandler = ( 4 | selections: EditorSelectionOrCaret[], 5 | ) => EditorSelectionOrCaret[]; 6 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import type { EditorSelection } from 'obsidian'; 2 | import { App, Editor, Plugin, PluginSettingTab, Setting } from 'obsidian'; 3 | import { LOWERCASE_ARTICLES } from './constants'; 4 | import { 5 | defaultMultipleSelectionOptions, 6 | getSelectionBoundaries, 7 | withMultipleSelections, 8 | wordRangeAtPos, 9 | } from './utils'; 10 | 11 | // Remember to rename these classes and interfaces!! 12 | 13 | interface IPluginSettings { 14 | shouldSyncCaseMultiCursor: boolean; 15 | } 16 | 17 | const DEFAULT_SETTINGS: IPluginSettings = { 18 | shouldSyncCaseMultiCursor: true 19 | } 20 | 21 | export default class ToggleCasePlugin extends Plugin { 22 | public settings: IPluginSettings; 23 | private caseSyncCheckText: string | null = null; 24 | 25 | async onload() { 26 | await this.loadSettings(); 27 | 28 | // This adds a command that can be triggered when in editor mode 29 | this.addCommand({ 30 | id: 'toggle-case', 31 | name: 'Toggle Case', 32 | editorCallback: (editor) => 33 | withMultipleSelections( 34 | editor, 35 | (editor, selection, index) => this.toggleCase(editor,selection, index), 36 | { ...defaultMultipleSelectionOptions } 37 | ), 38 | }); 39 | 40 | // This adds a settings tab so the user can configure various aspects of the plugin 41 | this.addSettingTab(new SettingsTab(this.app, this)); 42 | } 43 | 44 | async loadSettings() { 45 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); 46 | } 47 | 48 | async saveSettings() { 49 | await this.saveData(this.settings); 50 | } 51 | 52 | private toggleCase( editor: Editor, selection: EditorSelection, index: number ) { 53 | let { from, to } = getSelectionBoundaries(selection); 54 | let selectedText = editor.getRange(from, to); 55 | 56 | // apply transform on word at cursor if nothing is selected 57 | if (selectedText.length === 0) { 58 | const pos = selection.head; 59 | const { anchor, head } = wordRangeAtPos(pos, editor.getLine(pos.line)); 60 | [from, to] = [anchor, head]; 61 | selectedText = editor.getRange(anchor, head); 62 | } 63 | 64 | const replacementText: string = this.getNextCase(selectedText, index); 65 | editor.replaceRange(replacementText, from, to); 66 | 67 | return selection; 68 | } 69 | 70 | private toTitleCase(selectedText: string) { 71 | // use capture group to join with the same separator used to split 72 | return selectedText 73 | .split(/(\s+)/) 74 | .map((word, index, allWords) => { 75 | if ( 76 | index > 0 && 77 | index < allWords.length - 1 && 78 | LOWERCASE_ARTICLES.includes(word.toLowerCase()) 79 | ) { 80 | return word.toLowerCase(); 81 | } 82 | return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase(); 83 | }) 84 | .join('') 85 | } 86 | 87 | private getNextCase(selectedText: string, index: number): string { 88 | let textToCheck: string = selectedText; 89 | 90 | if (this.settings.shouldSyncCaseMultiCursor && index === 0) { 91 | this.caseSyncCheckText = selectedText; 92 | } 93 | 94 | if (this.settings.shouldSyncCaseMultiCursor && this.caseSyncCheckText) { 95 | textToCheck = this.caseSyncCheckText; 96 | } 97 | 98 | const checkTextUpper = textToCheck.toUpperCase(); 99 | const checkTextLower = textToCheck.toLowerCase(); 100 | const checkTextTitle = this.toTitleCase(textToCheck); 101 | 102 | switch(textToCheck) { 103 | case checkTextUpper: { 104 | return selectedText.toLowerCase(); 105 | } 106 | case checkTextLower: { 107 | return this.toTitleCase(selectedText); 108 | } 109 | case checkTextTitle: { 110 | return selectedText.toUpperCase(); 111 | } 112 | default: { 113 | return selectedText.toUpperCase(); 114 | } 115 | } 116 | } 117 | } 118 | 119 | class SettingsTab extends PluginSettingTab { 120 | plugin: ToggleCasePlugin; 121 | 122 | constructor(app: App, plugin: ToggleCasePlugin) { 123 | super(app, plugin); 124 | this.plugin = plugin; 125 | } 126 | 127 | display(): void { 128 | const {containerEl} = this; 129 | 130 | containerEl.empty(); 131 | 132 | containerEl.createEl('h2', {text: 'Settings for my awesome plugin.'}); 133 | 134 | new Setting(containerEl) 135 | .setName('Sync case multi-cursor') 136 | .setDesc('When there are multiple selections, apply the same case transformation to all.') 137 | .addToggle(toggle => toggle 138 | .setValue(this.plugin.settings.shouldSyncCaseMultiCursor) 139 | .onChange(async (value) => { 140 | this.plugin.settings.shouldSyncCaseMultiCursor = value; 141 | await this.plugin.saveSettings(); 142 | })); 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { Editor, EditorPosition, EditorSelection, EditorSelectionOrCaret, } from 'obsidian'; 2 | import { CustomSelectionHandler } from './custom-selection-handlers'; 3 | 4 | type EditorActionCallback = ( 5 | editor: Editor, 6 | selection: EditorSelection, 7 | index: number, 8 | args?: string, 9 | ) => EditorSelectionOrCaret; 10 | 11 | type MultipleSelectionOptions = { 12 | // Additional information to be passed to the EditorActionCallback 13 | args?: string; 14 | 15 | // Perform further processing of new selections before they are set 16 | customSelectionHandler?: CustomSelectionHandler; 17 | 18 | // Whether the action should be repeated for cursors on the same line 19 | repeatSameLineActions?: boolean; 20 | }; 21 | 22 | export const defaultMultipleSelectionOptions = { repeatSameLineActions: true }; 23 | 24 | export const withMultipleSelections = ( 25 | editor: Editor, 26 | callback: EditorActionCallback, 27 | options: MultipleSelectionOptions = defaultMultipleSelectionOptions, 28 | ) => { 29 | // @ts-expect-error: Obsidian's Editor interface does not explicitly 30 | // include the CodeMirror cm object, but it is there when using the 31 | // legacy editor 32 | const { cm } = editor; 33 | 34 | const selections: EditorSelection[] = editor.listSelections(); 35 | let selectionIndexesToProcess: number[]; 36 | let newSelections: EditorSelectionOrCaret[] = []; 37 | 38 | if (!options.repeatSameLineActions) { 39 | const seenLines: number[] = []; 40 | selectionIndexesToProcess = selections.reduce( 41 | (indexes: number[], currSelection: EditorSelection, currIndex: number) => { 42 | const currentLine = currSelection.head.line; 43 | if (!seenLines.includes(currentLine)) { 44 | seenLines.push(currentLine); 45 | indexes.push(currIndex); 46 | } 47 | return indexes; 48 | }, 49 | [], 50 | ); 51 | } 52 | 53 | const applyCallbackOnSelections = () => { 54 | for (let i = 0; i < selections.length; i++) { 55 | // Controlled by repeatSameLineActions 56 | if (selectionIndexesToProcess && !selectionIndexesToProcess.includes(i)) { 57 | continue; 58 | } 59 | 60 | // Can't reuse selections variable as positions may change on each iteration 61 | const selection = editor.listSelections()[i]; 62 | 63 | // Selections may disappear (e.g. running delete line for two cursors on the same line) 64 | if (selection) { 65 | const newSelection = callback(editor, selection, i, options.args); 66 | newSelections.push(newSelection); 67 | } 68 | } 69 | 70 | if (options.customSelectionHandler) { 71 | newSelections = options.customSelectionHandler(newSelections); 72 | } 73 | editor.setSelections(newSelections); 74 | }; 75 | 76 | if (cm && cm.operation) { 77 | // Group all the updates into one atomic operation (so undo/redo work as expected) 78 | cm.operation(applyCallbackOnSelections); 79 | } else { 80 | // Safe fallback if cm doesn't exist (so undo/redo will step through each change) 81 | console.debug('cm object not found, operations will not be buffered'); 82 | applyCallbackOnSelections(); 83 | } 84 | }; 85 | 86 | export const getSelectionBoundaries = (selection: EditorSelection) => { 87 | let { anchor: from, head: to } = selection; 88 | 89 | // in case user selects upwards 90 | if (from.line > to.line) { 91 | [from, to] = [to, from]; 92 | } 93 | 94 | // in case user selects backwards on the same line 95 | if (from.line === to.line && from.ch > to.ch) { 96 | [from, to] = [to, from]; 97 | } 98 | 99 | return { from, to }; 100 | }; 101 | 102 | // Match any character from any language: https://www.regular-expressions.info/unicode.html 103 | const isLetterCharacter = (char: string) => /\p{L}\p{M}*/u.test(char); 104 | 105 | export const wordRangeAtPos = ( 106 | pos: EditorPosition, 107 | lineContent: string, 108 | ): { anchor: EditorPosition; head: EditorPosition } => { 109 | let start = pos.ch; 110 | let end = pos.ch; 111 | while (start > 0 && isLetterCharacter(lineContent.charAt(start - 1))) { 112 | start--; 113 | } 114 | while ( 115 | end < lineContent.length && 116 | isLetterCharacter(lineContent.charAt(end)) 117 | ) { 118 | end++; 119 | } 120 | return { 121 | anchor: { 122 | line: pos.line, 123 | ch: start, 124 | }, 125 | head: { 126 | line: pos.line, 127 | ch: end, 128 | }, 129 | }; 130 | }; 131 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This CSS file will be included with your plugin, and 4 | available in the app when your plugin is enabled. 5 | 6 | If your plugin does not need CSS, delete this file. 7 | 8 | */ 9 | -------------------------------------------------------------------------------- /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": [ 15 | "DOM", 16 | "ES5", 17 | "ES6", 18 | "ES7" 19 | ], 20 | "rootDir": "src", 21 | "outDir": "dist" 22 | }, 23 | "include": [ 24 | "**/*.ts" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /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.1.0": "0.15.0" 4 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@nodelib/fs.scandir@2.1.5": 6 | version "2.1.5" 7 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 8 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 9 | dependencies: 10 | "@nodelib/fs.stat" "2.0.5" 11 | run-parallel "^1.1.9" 12 | 13 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 14 | version "2.0.5" 15 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 16 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 17 | 18 | "@nodelib/fs.walk@^1.2.3": 19 | version "1.2.8" 20 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 21 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 22 | dependencies: 23 | "@nodelib/fs.scandir" "2.1.5" 24 | fastq "^1.6.0" 25 | 26 | "@types/codemirror@0.0.108": 27 | version "0.0.108" 28 | resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.108.tgz#e640422b666bf49251b384c390cdeb2362585bde" 29 | integrity sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw== 30 | dependencies: 31 | "@types/tern" "*" 32 | 33 | "@types/estree@*": 34 | version "1.0.0" 35 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" 36 | integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== 37 | 38 | "@types/json-schema@^7.0.9": 39 | version "7.0.11" 40 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 41 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 42 | 43 | "@types/node@^16.11.6": 44 | version "16.18.6" 45 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.6.tgz#87846192fd51b693368fad3e99123169225621d4" 46 | integrity sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA== 47 | 48 | "@types/tern@*": 49 | version "0.23.4" 50 | resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" 51 | integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== 52 | dependencies: 53 | "@types/estree" "*" 54 | 55 | "@typescript-eslint/eslint-plugin@5.29.0": 56 | version "5.29.0" 57 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" 58 | integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== 59 | dependencies: 60 | "@typescript-eslint/scope-manager" "5.29.0" 61 | "@typescript-eslint/type-utils" "5.29.0" 62 | "@typescript-eslint/utils" "5.29.0" 63 | debug "^4.3.4" 64 | functional-red-black-tree "^1.0.1" 65 | ignore "^5.2.0" 66 | regexpp "^3.2.0" 67 | semver "^7.3.7" 68 | tsutils "^3.21.0" 69 | 70 | "@typescript-eslint/parser@5.29.0": 71 | version "5.29.0" 72 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" 73 | integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== 74 | dependencies: 75 | "@typescript-eslint/scope-manager" "5.29.0" 76 | "@typescript-eslint/types" "5.29.0" 77 | "@typescript-eslint/typescript-estree" "5.29.0" 78 | debug "^4.3.4" 79 | 80 | "@typescript-eslint/scope-manager@5.29.0": 81 | version "5.29.0" 82 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" 83 | integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== 84 | dependencies: 85 | "@typescript-eslint/types" "5.29.0" 86 | "@typescript-eslint/visitor-keys" "5.29.0" 87 | 88 | "@typescript-eslint/type-utils@5.29.0": 89 | version "5.29.0" 90 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" 91 | integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== 92 | dependencies: 93 | "@typescript-eslint/utils" "5.29.0" 94 | debug "^4.3.4" 95 | tsutils "^3.21.0" 96 | 97 | "@typescript-eslint/types@5.29.0": 98 | version "5.29.0" 99 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" 100 | integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== 101 | 102 | "@typescript-eslint/typescript-estree@5.29.0": 103 | version "5.29.0" 104 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" 105 | integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== 106 | dependencies: 107 | "@typescript-eslint/types" "5.29.0" 108 | "@typescript-eslint/visitor-keys" "5.29.0" 109 | debug "^4.3.4" 110 | globby "^11.1.0" 111 | is-glob "^4.0.3" 112 | semver "^7.3.7" 113 | tsutils "^3.21.0" 114 | 115 | "@typescript-eslint/utils@5.29.0": 116 | version "5.29.0" 117 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" 118 | integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== 119 | dependencies: 120 | "@types/json-schema" "^7.0.9" 121 | "@typescript-eslint/scope-manager" "5.29.0" 122 | "@typescript-eslint/types" "5.29.0" 123 | "@typescript-eslint/typescript-estree" "5.29.0" 124 | eslint-scope "^5.1.1" 125 | eslint-utils "^3.0.0" 126 | 127 | "@typescript-eslint/visitor-keys@5.29.0": 128 | version "5.29.0" 129 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" 130 | integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== 131 | dependencies: 132 | "@typescript-eslint/types" "5.29.0" 133 | eslint-visitor-keys "^3.3.0" 134 | 135 | array-union@^2.1.0: 136 | version "2.1.0" 137 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 138 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 139 | 140 | braces@^3.0.2: 141 | version "3.0.2" 142 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 143 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 144 | dependencies: 145 | fill-range "^7.0.1" 146 | 147 | builtin-modules@3.3.0: 148 | version "3.3.0" 149 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" 150 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== 151 | 152 | debug@^4.3.4: 153 | version "4.3.4" 154 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 155 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 156 | dependencies: 157 | ms "2.1.2" 158 | 159 | dir-glob@^3.0.1: 160 | version "3.0.1" 161 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 162 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 163 | dependencies: 164 | path-type "^4.0.0" 165 | 166 | esbuild-android-64@0.14.47: 167 | version "0.14.47" 168 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz#ef95b42c67bcf4268c869153fa3ad1466c4cea6b" 169 | integrity sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g== 170 | 171 | esbuild-android-arm64@0.14.47: 172 | version "0.14.47" 173 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz#4ebd7ce9fb250b4695faa3ee46fd3b0754ecd9e6" 174 | integrity sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ== 175 | 176 | esbuild-darwin-64@0.14.47: 177 | version "0.14.47" 178 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz#e0da6c244f497192f951807f003f6a423ed23188" 179 | integrity sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA== 180 | 181 | esbuild-darwin-arm64@0.14.47: 182 | version "0.14.47" 183 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz#cd40fd49a672fca581ed202834239dfe540a9028" 184 | integrity sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw== 185 | 186 | esbuild-freebsd-64@0.14.47: 187 | version "0.14.47" 188 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz#8da6a14c095b29c01fc8087a16cb7906debc2d67" 189 | integrity sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ== 190 | 191 | esbuild-freebsd-arm64@0.14.47: 192 | version "0.14.47" 193 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz#ad31f9c92817ff8f33fd253af7ab5122dc1b83f6" 194 | integrity sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ== 195 | 196 | esbuild-linux-32@0.14.47: 197 | version "0.14.47" 198 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz#de085e4db2e692ea30c71208ccc23fdcf5196c58" 199 | integrity sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw== 200 | 201 | esbuild-linux-64@0.14.47: 202 | version "0.14.47" 203 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz#2a9321bbccb01f01b04cebfcfccbabeba3658ba1" 204 | integrity sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw== 205 | 206 | esbuild-linux-arm64@0.14.47: 207 | version "0.14.47" 208 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz#b9da7b6fc4b0ca7a13363a0c5b7bb927e4bc535a" 209 | integrity sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw== 210 | 211 | esbuild-linux-arm@0.14.47: 212 | version "0.14.47" 213 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz#56fec2a09b9561c337059d4af53625142aded853" 214 | integrity sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA== 215 | 216 | esbuild-linux-mips64le@0.14.47: 217 | version "0.14.47" 218 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz#9db21561f8f22ed79ef2aedb7bbef082b46cf823" 219 | integrity sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg== 220 | 221 | esbuild-linux-ppc64le@0.14.47: 222 | version "0.14.47" 223 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz#dc3a3da321222b11e96e50efafec9d2de408198b" 224 | integrity sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w== 225 | 226 | esbuild-linux-riscv64@0.14.47: 227 | version "0.14.47" 228 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz#9bd6dcd3dca6c0357084ecd06e1d2d4bf105335f" 229 | integrity sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g== 230 | 231 | esbuild-linux-s390x@0.14.47: 232 | version "0.14.47" 233 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz#a458af939b52f2cd32fc561410d441a51f69d41f" 234 | integrity sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw== 235 | 236 | esbuild-netbsd-64@0.14.47: 237 | version "0.14.47" 238 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz#6388e785d7e7e4420cb01348d7483ab511b16aa8" 239 | integrity sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ== 240 | 241 | esbuild-openbsd-64@0.14.47: 242 | version "0.14.47" 243 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz#309af806db561aa886c445344d1aacab850dbdc5" 244 | integrity sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw== 245 | 246 | esbuild-sunos-64@0.14.47: 247 | version "0.14.47" 248 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz#3f19612dcdb89ba6c65283a7ff6e16f8afbf8aaa" 249 | integrity sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ== 250 | 251 | esbuild-windows-32@0.14.47: 252 | version "0.14.47" 253 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz#a92d279c8458d5dc319abcfeb30aa49e8f2e6f7f" 254 | integrity sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ== 255 | 256 | esbuild-windows-64@0.14.47: 257 | version "0.14.47" 258 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz#2564c3fcf0c23d701edb71af8c52d3be4cec5f8a" 259 | integrity sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ== 260 | 261 | esbuild-windows-arm64@0.14.47: 262 | version "0.14.47" 263 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz#86d9db1a22d83360f726ac5fba41c2f625db6878" 264 | integrity sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ== 265 | 266 | esbuild@0.14.47: 267 | version "0.14.47" 268 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.47.tgz#0d6415f6bd8eb9e73a58f7f9ae04c5276cda0e4d" 269 | integrity sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA== 270 | optionalDependencies: 271 | esbuild-android-64 "0.14.47" 272 | esbuild-android-arm64 "0.14.47" 273 | esbuild-darwin-64 "0.14.47" 274 | esbuild-darwin-arm64 "0.14.47" 275 | esbuild-freebsd-64 "0.14.47" 276 | esbuild-freebsd-arm64 "0.14.47" 277 | esbuild-linux-32 "0.14.47" 278 | esbuild-linux-64 "0.14.47" 279 | esbuild-linux-arm "0.14.47" 280 | esbuild-linux-arm64 "0.14.47" 281 | esbuild-linux-mips64le "0.14.47" 282 | esbuild-linux-ppc64le "0.14.47" 283 | esbuild-linux-riscv64 "0.14.47" 284 | esbuild-linux-s390x "0.14.47" 285 | esbuild-netbsd-64 "0.14.47" 286 | esbuild-openbsd-64 "0.14.47" 287 | esbuild-sunos-64 "0.14.47" 288 | esbuild-windows-32 "0.14.47" 289 | esbuild-windows-64 "0.14.47" 290 | esbuild-windows-arm64 "0.14.47" 291 | 292 | eslint-scope@^5.1.1: 293 | version "5.1.1" 294 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 295 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 296 | dependencies: 297 | esrecurse "^4.3.0" 298 | estraverse "^4.1.1" 299 | 300 | eslint-utils@^3.0.0: 301 | version "3.0.0" 302 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 303 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 304 | dependencies: 305 | eslint-visitor-keys "^2.0.0" 306 | 307 | eslint-visitor-keys@^2.0.0: 308 | version "2.1.0" 309 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 310 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 311 | 312 | eslint-visitor-keys@^3.3.0: 313 | version "3.3.0" 314 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 315 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 316 | 317 | esrecurse@^4.3.0: 318 | version "4.3.0" 319 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 320 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 321 | dependencies: 322 | estraverse "^5.2.0" 323 | 324 | estraverse@^4.1.1: 325 | version "4.3.0" 326 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 327 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 328 | 329 | estraverse@^5.2.0: 330 | version "5.3.0" 331 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 332 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 333 | 334 | fast-glob@^3.2.9: 335 | version "3.2.12" 336 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 337 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 338 | dependencies: 339 | "@nodelib/fs.stat" "^2.0.2" 340 | "@nodelib/fs.walk" "^1.2.3" 341 | glob-parent "^5.1.2" 342 | merge2 "^1.3.0" 343 | micromatch "^4.0.4" 344 | 345 | fastq@^1.6.0: 346 | version "1.14.0" 347 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" 348 | integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== 349 | dependencies: 350 | reusify "^1.0.4" 351 | 352 | fill-range@^7.0.1: 353 | version "7.0.1" 354 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 355 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 356 | dependencies: 357 | to-regex-range "^5.0.1" 358 | 359 | functional-red-black-tree@^1.0.1: 360 | version "1.0.1" 361 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 362 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 363 | 364 | glob-parent@^5.1.2: 365 | version "5.1.2" 366 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 367 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 368 | dependencies: 369 | is-glob "^4.0.1" 370 | 371 | globby@^11.1.0: 372 | version "11.1.0" 373 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 374 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 375 | dependencies: 376 | array-union "^2.1.0" 377 | dir-glob "^3.0.1" 378 | fast-glob "^3.2.9" 379 | ignore "^5.2.0" 380 | merge2 "^1.4.1" 381 | slash "^3.0.0" 382 | 383 | ignore@^5.2.0: 384 | version "5.2.1" 385 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" 386 | integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== 387 | 388 | is-extglob@^2.1.1: 389 | version "2.1.1" 390 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 391 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 392 | 393 | is-glob@^4.0.1, is-glob@^4.0.3: 394 | version "4.0.3" 395 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 396 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 397 | dependencies: 398 | is-extglob "^2.1.1" 399 | 400 | is-number@^7.0.0: 401 | version "7.0.0" 402 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 403 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 404 | 405 | lru-cache@^6.0.0: 406 | version "6.0.0" 407 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 408 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 409 | dependencies: 410 | yallist "^4.0.0" 411 | 412 | merge2@^1.3.0, merge2@^1.4.1: 413 | version "1.4.1" 414 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 415 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 416 | 417 | micromatch@^4.0.4: 418 | version "4.0.5" 419 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 420 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 421 | dependencies: 422 | braces "^3.0.2" 423 | picomatch "^2.3.1" 424 | 425 | moment@2.29.4: 426 | version "2.29.4" 427 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" 428 | integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== 429 | 430 | ms@2.1.2: 431 | version "2.1.2" 432 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 433 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 434 | 435 | obsidian@latest: 436 | version "0.16.3" 437 | resolved "https://registry.yarnpkg.com/obsidian/-/obsidian-0.16.3.tgz#137b7e91f949517a1bc817b1d7ef9b8aefb219bc" 438 | integrity sha512-hal9qk1A0GMhHSeLr2/+o3OpLmImiP+Y+sx2ewP13ds76KXsziG96n+IPFT0mSkup1zSwhEu+DeRhmbcyCCXWw== 439 | dependencies: 440 | "@types/codemirror" "0.0.108" 441 | moment "2.29.4" 442 | 443 | path-type@^4.0.0: 444 | version "4.0.0" 445 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 446 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 447 | 448 | picomatch@^2.3.1: 449 | version "2.3.1" 450 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 451 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 452 | 453 | queue-microtask@^1.2.2: 454 | version "1.2.3" 455 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 456 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 457 | 458 | regexpp@^3.2.0: 459 | version "3.2.0" 460 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 461 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 462 | 463 | reusify@^1.0.4: 464 | version "1.0.4" 465 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 466 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 467 | 468 | run-parallel@^1.1.9: 469 | version "1.2.0" 470 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 471 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 472 | dependencies: 473 | queue-microtask "^1.2.2" 474 | 475 | semver@^7.3.7: 476 | version "7.3.8" 477 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 478 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 479 | dependencies: 480 | lru-cache "^6.0.0" 481 | 482 | slash@^3.0.0: 483 | version "3.0.0" 484 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 485 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 486 | 487 | to-regex-range@^5.0.1: 488 | version "5.0.1" 489 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 490 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 491 | dependencies: 492 | is-number "^7.0.0" 493 | 494 | tslib@2.4.0: 495 | version "2.4.0" 496 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 497 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 498 | 499 | tslib@^1.8.1: 500 | version "1.14.1" 501 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 502 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 503 | 504 | tsutils@^3.21.0: 505 | version "3.21.0" 506 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 507 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 508 | dependencies: 509 | tslib "^1.8.1" 510 | 511 | typescript@4.7.4: 512 | version "4.7.4" 513 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 514 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 515 | 516 | yallist@^4.0.0: 517 | version "4.0.0" 518 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 519 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 520 | --------------------------------------------------------------------------------