├── .npmrc ├── .eslintignore ├── versions.json ├── assets ├── context-menu.png ├── image-styles.png ├── remove-style.png ├── styles-order.png ├── assing-hotkeys.png ├── buy-me-a-coffee.png ├── command-palette.png ├── pretended-result.png └── enable-contextual-menu.png ├── .editorconfig ├── manifest.json ├── .gitignore ├── tsconfig.json ├── version-bump.mjs ├── .eslintrc ├── package.json ├── LICENSE.txt ├── esbuild.config.mjs ├── README.md ├── styles.css ├── src ├── main.ts └── settings.ts └── yarn.lock /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | main.js 4 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "0.1.0": "0.1.0" 3 | } 4 | -------------------------------------------------------------------------------- /assets/context-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/context-menu.png -------------------------------------------------------------------------------- /assets/image-styles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/image-styles.png -------------------------------------------------------------------------------- /assets/remove-style.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/remove-style.png -------------------------------------------------------------------------------- /assets/styles-order.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/styles-order.png -------------------------------------------------------------------------------- /assets/assing-hotkeys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/assing-hotkeys.png -------------------------------------------------------------------------------- /assets/buy-me-a-coffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/buy-me-a-coffee.png -------------------------------------------------------------------------------- /assets/command-palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/command-palette.png -------------------------------------------------------------------------------- /assets/pretended-result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/pretended-result.png -------------------------------------------------------------------------------- /assets/enable-contextual-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanjoarranz/style-text-obsidian-plugin/HEAD/assets/enable-contextual-menu.png -------------------------------------------------------------------------------- /.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 = 2 10 | tab_width = 2 11 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "style-text", 3 | "name": "Style Text", 4 | "version": "0.1.0", 5 | "minAppVersion": "0.1.0", 6 | "description": "Apply custom CSS styles to selected text in your Obsidian Notes.", 7 | "author": "Juanjo Arranz", 8 | "authorUrl": "https://github.com/juanjoarranz", 9 | "fundingUrl": "https://ko-fi.com/F1F6H4TAR", 10 | "isDesktopOnly": false 11 | } -------------------------------------------------------------------------------- /.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 | TRUCOS y NOTAS.txt 24 | learning/main.ts 25 | learning 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": "src", 4 | "inlineSourceMap": true, 5 | "inlineSources": true, 6 | "module": "ESNext", 7 | "target": "ES6", 8 | "allowJs": true, 9 | "jsx": "react", 10 | "noImplicitAny": true, 11 | "moduleResolution": "node", 12 | "importHelpers": true, 13 | "isolatedModules": true, 14 | "strictNullChecks": true, 15 | "lib": [ 16 | "DOM", 17 | "ES5", 18 | "ES6", 19 | "ES7" 20 | ] 21 | }, 22 | "include": [ 23 | "src/**/*.ts", 24 | "src/**/*.tsx" 25 | ], 26 | "exclude": [ 27 | "lib/**/*" 28 | ] 29 | } -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-sample-plugin", 3 | "version": "1.0.0", 4 | "description": "This is a sample plugin for Obsidian (https://obsidian.md)", 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 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "MIT", 14 | "devDependencies": { 15 | "@types/node": "^16.11.6", 16 | "@typescript-eslint/eslint-plugin": "5.29.0", 17 | "@typescript-eslint/parser": "5.29.0", 18 | "builtin-modules": "3.3.0", 19 | "esbuild": "0.17.3", 20 | "obsidian": "latest", 21 | "tslib": "2.4.0", 22 | "typescript": "4.7.4" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Juanjo Arranz 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 | -------------------------------------------------------------------------------- /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 | const context = await esbuild.context({ 15 | banner: { 16 | js: banner, 17 | }, 18 | entryPoints: ["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 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Obsidian Style Text 2 | 3 | Apply custom CSS styles to selected text in your Obsidian Notes. 4 | 5 | 6 | ## Instructions 7 | 8 | The Style Text Obsidian plugin allows to create as many CSS Styles as you wish: 9 | 10 | ![Alt text](./assets/image-styles.png) 11 | 12 | Then, they will be available to be applied to the selected text in the editor via **Commands** (Command Palette): 13 | 14 | ![Alt text](./assets/command-palette.png) 15 | 16 | Each command can optionally be assigned to Obsidian Hotkeys for quick access: 17 | ![Alt text](./assets/assing-hotkeys.png) 18 | 19 | 20 | The styles are also available in contextual menu in the editor. You first need to enable them in the plugin settings: 21 | 22 | ![Alt text](./assets/enable-contextual-menu.png) 23 | 24 | So the enable styles will be available in the context-menu to be applied to the selected text after right-clicking: 25 | ![Alt text](./assets/context-menu.png) 26 | 27 | To get the pretended result: 28 | ![Alt text](./assets/pretended-result.png) 29 | 30 | 31 | The plugin also offers an aditional command "Remove Style" to get rid of the unwanted styles. You only need to select the paragraph, or text or place the cursor in front of a style text and choose the command from the context menu or command palette: 32 | 33 | ![Alt text](./assets/remove-style.png) 34 | 35 | The order of the context menu items follows the order in the settings. You can move up or down the styles as desired: 36 | 37 | ![Alt text](./assets/styles-order.png) 38 | 39 | ## Say Thank You 40 | 41 | If you enjoy Style Text Obsidian Plugin then please support my work by buying me a coffee on [https://ko-fi.com/F1F6H4TAR](https://ko-fi.com/F1F6H4TAR) 42 | 43 | 44 | [“”](https://ko-fi.com/F1F6H4TAR) 45 | -------------------------------------------------------------------------------- /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 | 10 | .style-text mark { 11 | border-radius: 0.2em; 12 | } 13 | 14 | /* Setting Header */ 15 | .setting-header { 16 | display: flex; 17 | margin-bottom: 5px; 18 | } 19 | 20 | div.name-header { 21 | padding-left: 10px; 22 | flex: 0.28; 23 | font-size: 20px; 24 | } 25 | 26 | div.style-header { 27 | font-size: 20px; 28 | padding-left: 0px; 29 | flex: 0.55; 30 | } 31 | 32 | .container_add_button { 33 | /* text-align: right; 34 | margin-bottom: 20px; */ 35 | flex: 0.2; 36 | display: flex; 37 | } 38 | 39 | .container_add_button button { 40 | margin-left: auto; 41 | background-color: var(--interactive-accent); 42 | font-size: medium; 43 | } 44 | 45 | /* Setting Items */ 46 | .setting-item-container { 47 | display: flex; 48 | flex-direction: row; 49 | border-top: 1px solid var(--background-modifier-border); 50 | padding-top: 11px; 51 | padding-bottom: 11px; 52 | border-bottom: 1px solid var(--background-modifier-border); 53 | 54 | } 55 | 56 | input.style-text-setting-item-name { 57 | /* width: 100%; 58 | width: 90%; */ 59 | flex: 0.3; 60 | margin-right: 10px; 61 | line-height: var(--line-height-tight); 62 | background: var(--background-modifier-form-field); 63 | border: var(--input-border-width) solid var(--background-modifier-border); 64 | color: var(--text-normal); 65 | font-family: inherit; 66 | padding: var(--size-4-1) var(--size-4-2); 67 | font-size: var(--font-ui-medium); 68 | font-size: 15px; 69 | font-weight: normal; 70 | border-radius: var(--input-radius); 71 | outline: none; 72 | } 73 | 74 | input.style-text-setting-item-name:active { 75 | box-shadow: 0 0 0 2px var(--background-modifier-border-focus); 76 | } 77 | 78 | input.style-text-setting-item-name:focus { 79 | box-shadow: 0 0 0 2px var(--background-modifier-border-focus); 80 | transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; 81 | } 82 | 83 | /* .setting-item-name input { 84 | width: 90%; 85 | font-size: 1.05em; 86 | } */ 87 | 88 | .style-text-setting-item-css { 89 | width: 100%; 90 | flex: 0.6; 91 | } 92 | 93 | .style-text-setting-item-css input { 94 | width: 100%; 95 | font-size: 1.05em; 96 | } 97 | 98 | .style-text-setting-item-contextMenu .checkbox-container { 99 | margin-top: 4px; 100 | margin-left: 8px 101 | } 102 | 103 | .style-text-button-container { 104 | text-align: right; 105 | flex: 0.1; 106 | } 107 | 108 | .style-text-delete-style-button { 109 | background-color: var(--background-modifier-error); 110 | } 111 | 112 | 113 | /* Instructions */ 114 | .container-instructions { 115 | margin-top: 40px; 116 | } 117 | 118 | .instructions { 119 | color: var(--text-muted); 120 | font-size: var(--font-ui-smaller); 121 | font-style: normal; 122 | } 123 | 124 | p.instructions { 125 | margin-bottom: 5px; 126 | } 127 | 128 | ul.instructions { 129 | margin-top: 1px; 130 | } 131 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { App, Editor, MarkdownView, Menu, Modal, Plugin } from 'obsidian'; 2 | 3 | import { DEFAULT_SETTINGS, StyleTextSettings, GeneralSettingsTab, Style } from './settings' 4 | 5 | export type EnhancedApp = App & { 6 | commands: { executeCommandById: Function }; 7 | }; 8 | 9 | export default class StyleText extends Plugin { 10 | settings: StyleTextSettings; 11 | 12 | async onload(): Promise { 13 | 14 | await this.loadSettings(); 15 | this.addCommand({ 16 | id: 'remove-style', 17 | name: 'Remove Style', 18 | editorCallback: (editor: Editor, view: MarkdownView) => { 19 | const selection = editor.getSelection(); 20 | editor.replaceSelection(this.betterClearHTMLTags(selection)); 21 | } 22 | }); 23 | 24 | // Style Commands 25 | this.settings.styles.forEach((style, index) => { 26 | this.addStyleCommand(style, index + 1); 27 | }); 28 | 29 | 30 | // Styles Context Menu 31 | this.registerEvent( 32 | this.app.workspace.on("editor-menu", this.styleTextInContextMenu) 33 | ); 34 | 35 | this.updateBodyListClass(); 36 | this.addSettingTab(new GeneralSettingsTab(this.app, this)); 37 | } 38 | 39 | async loadSettings() { 40 | this.settings = { ...DEFAULT_SETTINGS, ...await this.loadData() }; 41 | } 42 | 43 | async saveSettings() { 44 | await this.saveData(this.settings); 45 | } 46 | 47 | clearHTMLTags(strToSanitize: string): string { 48 | return strToSanitize.replace(/(<([^>]+)>)/gi, ''); 49 | } 50 | 51 | betterClearHTMLTags(strToSanitize: string): string { 52 | let myHTML = new DOMParser() 53 | .parseFromString(strToSanitize, 'text/html'); 54 | return myHTML.body.textContent || ''; 55 | } 56 | 57 | // index: 1-based 58 | addStyleCommand(style: Style, index: number) { 59 | const isHighlight = style.css.indexOf("background-color") !== -1; 60 | const isCallout = style.css.indexOf(">") !== -1; 61 | const tag = isHighlight ? "mark" : "span"; 62 | this.addCommand({ 63 | id: `style${index}`, 64 | name: `${style.name}`, 65 | editorCallback: (editor: Editor, view: MarkdownView) => { 66 | let selection = editor.getSelection(); 67 | 68 | if (!isCallout) { 69 | editor.replaceSelection(`<${tag} style="${style.css}">${selection}`); 70 | 71 | } else { // isCallout 72 | selection = selection.replace(/\n/g, "\n> "); 73 | editor.replaceSelection(`${style.css} ${selection}`); 74 | } 75 | } 76 | }); 77 | } 78 | 79 | styleTextInContextMenu = (menu: Menu, editor: Editor) => { 80 | const enhancedApp = this.app as EnhancedApp; 81 | 82 | menu.addItem((item) => 83 | item 84 | .setTitle("Remove Style") 85 | .setIcon("eraser") 86 | .onClick(() => { 87 | enhancedApp.commands.executeCommandById(`style-text:remove-style`); 88 | }) 89 | ); 90 | 91 | this.settings.styles.forEach((style, index) => { 92 | if (style.contextMenu) { 93 | menu.addItem((item) => 94 | item 95 | .setTitle(style.name) 96 | .setIcon("highlighter") 97 | .onClick(() => { 98 | enhancedApp.commands.executeCommandById(`style-text:style${index + 1}`); 99 | }) 100 | ); 101 | } 102 | }); 103 | } 104 | 105 | updateBodyListClass() { 106 | document.body.classList.add("style-text"); 107 | } 108 | } 109 | 110 | 111 | -------------------------------------------------------------------------------- /src/settings.ts: -------------------------------------------------------------------------------- 1 | import { ButtonComponent, PluginSettingTab, Setting } from "obsidian"; 2 | import StyleText from './main'; 3 | export interface Style { 4 | name: string; 5 | css: string; 6 | contextMenu: boolean; 7 | } 8 | export interface StyleTextSettings { 9 | styles: Style[]; 10 | } 11 | 12 | export const DEFAULT_SETTINGS: StyleTextSettings = { 13 | styles: [ 14 | { name: "Super Big", css: "font-size: 28px;", contextMenu: true }, 15 | { name: "Super Big Yellow Highlight", css: "font-size: 28px; background-color: #fff88f; color: black", contextMenu: false }, 16 | { name: "Big", css: "font-size: 24px", contextMenu: false }, 17 | { name: "Big Green Highlight", css: "font-size: 24px; background-color: #1EFF00; color: black", contextMenu: true }, 18 | { name: "Large", css: "font-size: 20px", contextMenu: false }, 19 | { name: "Large Yellow", css: "font-size: 20px; color: yellow", contextMenu: false }, 20 | { name: "Large Orange", css: "font-size: 20px; color: orange", contextMenu: true }, 21 | { name: "Large Red", css: "font-size: 20px; color: red", contextMenu: false }, 22 | { name: "Green Highlight", css: "background-color: #1EFF00; color: black", contextMenu: true }, 23 | { name: "Yellow Highlight", css: "background-color: #fff88f; color: black", contextMenu: true }, 24 | ] 25 | } 26 | 27 | export class GeneralSettingsTab extends PluginSettingTab { 28 | 29 | plugin: StyleText; 30 | 31 | constructor(app: App, plugin: StyleText) { 32 | super(app, plugin); 33 | this.plugin = plugin; 34 | } 35 | 36 | display() { 37 | const { containerEl } = this; 38 | 39 | this.clearHtml(); 40 | 41 | containerEl.empty(); 42 | containerEl.createEl('div').createEl('span', { text: 'Created by ' }).createEl('a', { text: 'Juanjo Arranz', href: 'https://github.com/juanjoarranz' }); 43 | 44 | containerEl.createEl('p', { text: 'CSS styles to be applied to the selected text.' }); 45 | 46 | const settingHeader: HTMLDivElement = containerEl.createDiv({ cls: "setting-header" }); 47 | settingHeader.createDiv({ text: "Name", cls: "name-header" }); 48 | settingHeader.createDiv({ text: "Style", cls: "style-header" }); 49 | 50 | // Add Style Button 51 | let containerButton = settingHeader.createEl('div', { cls: 'container_add_button' }); 52 | let addStyleButton = containerButton.createEl('button', { text: 'Add Style' }); 53 | 54 | // Setting Items 55 | const settingContainer: HTMLDivElement = containerEl.createDiv(); 56 | addStyleButton.onclick = ev => this.addStyle(settingContainer); 57 | 58 | this.plugin.settings.styles.forEach((s, i) => this.addStyle(settingContainer, i + 1)); 59 | 60 | this.addInstructions(containerEl); 61 | 62 | this.donate(containerEl); 63 | } 64 | 65 | 66 | private clearHtml() { 67 | // remove disruptive classes and elements 68 | setTimeout(() => { 69 | removeClass("setting-item"); 70 | removeClass("setting-item-info"); 71 | removeClass("setting-item-control"); 72 | deleteContainer(".setting-item-description"); 73 | }, 0); 74 | 75 | function removeClass(className: string) { 76 | document.querySelectorAll("." + className) 77 | .forEach(i => i.removeClass(className)); 78 | } 79 | 80 | function deleteContainer(selector: string) { 81 | document.querySelectorAll(selector) 82 | .forEach(i => i.parentElement?.remove()); 83 | } 84 | } 85 | 86 | private addStyle(containerEl: HTMLElement, counter?: number) { 87 | 88 | this.clearHtml(); 89 | 90 | const { styles } = this.plugin.settings; 91 | 92 | const settingItemContainer: HTMLDivElement = containerEl.createDiv({ cls: 'setting-item-container' }); 93 | const stylesCounter = counter ?? styles.length + 1; // 1-based 94 | 95 | if (!counter) { 96 | const newStyle: Style = { name: "Large Yellow", css: "font-size: 20px; color: yellow", contextMenu: false }; 97 | styles.push(newStyle); 98 | this.plugin.addStyleCommand(newStyle, stylesCounter); 99 | this.plugin.saveSettings(); 100 | } 101 | 102 | const currentStyle = styles[stylesCounter - 1]; 103 | 104 | // Style Name 105 | let styleNameInput = settingItemContainer.createEl('input', { cls: 'style-text-setting-item-name' }); 106 | styleNameInput.value = currentStyle.name; 107 | styleNameInput.onchange = (async (event) => { 108 | const value = styleNameInput.value; 109 | currentStyle.name = value; 110 | await this.plugin.saveSettings(); 111 | this.plugin.addStyleCommand({ 112 | name: value, 113 | css: currentStyle.css, 114 | contextMenu: currentStyle.contextMenu 115 | }, stylesCounter + 1); 116 | }); 117 | 118 | // Style 119 | // new Setting(settingItemContainer) 120 | // .setClass('setting-item-name') 121 | // .addText(text => { 122 | // return text.setValue(this.plugin.settings.styles[stylesCounter - 1]?.name ?? newStyle.name) 123 | // .onChange(async (value) => { 124 | // this.plugin.settings.styles[stylesCounter - 1].name = value; 125 | // await this.plugin.saveSettings(); 126 | // this.plugin.addStyleCommand({ 127 | // name: value, 128 | // css: this.plugin.settings.styles[stylesCounter - 1].css 129 | // }, stylesCounter); 130 | // }) 131 | // }); 132 | new Setting(settingItemContainer) 133 | .setClass('style-text-setting-item-css') 134 | .addText(text => { 135 | return text.setValue(currentStyle.css) 136 | .onChange(async (value) => { 137 | currentStyle.css = value; 138 | await this.plugin.saveSettings(); 139 | this.plugin.addStyleCommand({ 140 | name: currentStyle.name, 141 | css: value, 142 | contextMenu: currentStyle.contextMenu 143 | }, stylesCounter + 1); 144 | }) 145 | }); 146 | 147 | // Toggle Context Menu 148 | new Setting(settingItemContainer) 149 | .setClass('style-text-setting-item-contextMenu') 150 | .addToggle(toggle => { 151 | toggle.setValue(currentStyle.contextMenu) 152 | .setTooltip((toggle.getValue() ? "disable" : "enable") + " contex menu") 153 | .onChange(async () => { 154 | const value = toggle.getValue(); 155 | toggle.setTooltip((value ? "disable" : "enable") + " contex menu"); 156 | currentStyle.contextMenu = value; 157 | await this.plugin.saveSettings(); 158 | }) 159 | }); 160 | 161 | // Up Button 162 | const upDisabled = stylesCounter === 1; 163 | if (!upDisabled) { 164 | const upButtonContainer = settingItemContainer.createDiv({ cls: 'style-text-button-container' }); 165 | const upButton = new ButtonComponent(upButtonContainer); 166 | upButton.setIcon('arrow-up').setClass('style-text-delete-style-button') 167 | .setTooltip("Move up") 168 | .onClick(() => this.moveStyle("up", stylesCounter, styles)); 169 | } 170 | 171 | // Down Button 172 | const downDisabled = (stylesCounter === styles.length); 173 | if (!downDisabled) { 174 | const downButtonContainer = settingItemContainer.createDiv({ cls: 'style-text-button-container' }); 175 | const downButton = new ButtonComponent(downButtonContainer); 176 | downButton.setIcon('arrow-down').setClass('style-text-delete-style-button') 177 | .setTooltip("Move down") 178 | .onClick(() => this.moveStyle("down", stylesCounter, styles)); 179 | } 180 | 181 | // Delete Button 182 | const deleteButtonContainer = settingItemContainer.createDiv({ cls: 'style-text-button-container' }); 183 | const deleteButton = new ButtonComponent(deleteButtonContainer); 184 | deleteButton.setIcon('trash-2').setClass('style-text-delete-style-button') 185 | .setTooltip("Remove Style") 186 | .onClick(async () => { 187 | this.plugin.settings.styles.splice(stylesCounter - 1, 1); 188 | await this.plugin.saveSettings(); 189 | this.display(); 190 | }); 191 | 192 | if (!counter) setTimeout(() => this.display(), 0); 193 | } 194 | 195 | private async moveStyle(direction: "up" | "down", stylesCounter: number, styles: Style[]) { 196 | this.plugin.settings.styles = moveStyle(direction, stylesCounter, styles); 197 | await this.plugin.saveSettings(); 198 | this.plugin.settings.styles.forEach((style, index) => { 199 | this.plugin.addStyleCommand(style, index + 1); 200 | }); 201 | this.display(); 202 | 203 | function moveStyle(direction: "up" | "down", stylesCounter: number, styles: Style[]): Style[] { 204 | const movingStyle = styles.splice(stylesCounter - 1, 1)[0]; 205 | const newPosition = direction === "up" ? stylesCounter - 2 : stylesCounter; 206 | const newStyles = [ 207 | ...styles.slice(0, newPosition), 208 | movingStyle, 209 | ...styles.slice(newPosition) 210 | ]; 211 | return newStyles; 212 | } 213 | } 214 | 215 | private addInstructions(containerEl: HTMLElement) { 216 | 217 | const containerInstructions = containerEl.createEl('div', { cls: 'container-instructions' }); 218 | 219 | // Instructions 220 | // With Command Palette 221 | containerInstructions.createEl('p', { text: 'Usage with the Command Palette:', cls: 'instructions' }); 222 | const commandPaletteUl = containerInstructions.createEl('ul', { cls: 'instructions' }); 223 | commandPaletteUl.createEl('li', { text: 'Select text on the editor' }); 224 | commandPaletteUl.createEl('li', { text: 'Open the Command Palette: or +

' }); 225 | commandPaletteUl.createEl('li', { text: 'Look up the Style to apply: "Style Text ..."' }); 226 | commandPaletteUl.createEl('li', { text: 'Choose the Style: ' }); 227 | 228 | 229 | // Remove Applied Styles 230 | containerInstructions.createEl('p', { text: 'Remove Applied Styles:', cls: 'instructions' }); 231 | const removeUl = containerInstructions.createEl('ul', { cls: 'instructions' }); 232 | removeUl.createEl('li', { text: 'Select the styled text on the editor' }); 233 | removeUl.createEl('li', { text: 'Open the Command Palette: or +

' }); 234 | removeUl.createEl('li', { text: 'Look up: "Style Remove"' }); 235 | removeUl.createEl('li', { text: 'Press ' }); 236 | } 237 | 238 | private donate(containerEl: HTMLElement) { 239 | const donateContainer = containerEl.createEl('div', { cls: 'donate' }); 240 | donateContainer.setCssStyles({ marginTop: '40px' }); 241 | 242 | let buyMeCoffeeImage = new Image(130); 243 | buyMeCoffeeImage.src = 'https://cdn.ko-fi.com/cdn/kofi3.png?v=3'; 244 | donateContainer.createEl('a', { href: 'https://ko-fi.com/F1F6H4TAR', text: '' }).appendChild(buyMeCoffeeImage); 245 | 246 | } 247 | } 248 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@codemirror/state@^6.0.0", "@codemirror/state@^6.5.0": 6 | version "6.5.2" 7 | resolved "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz" 8 | integrity sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA== 9 | dependencies: 10 | "@marijn/find-cluster-break" "^1.0.0" 11 | 12 | "@codemirror/view@^6.0.0": 13 | version "6.38.8" 14 | resolved "https://registry.npmjs.org/@codemirror/view/-/view-6.38.8.tgz" 15 | integrity sha512-XcE9fcnkHCbWkjeKyi0lllwXmBLtyYb5dt89dJyx23I9+LSh5vZDIuk7OLG4VM1lgrXZQcY6cxyZyk5WVPRv/A== 16 | dependencies: 17 | "@codemirror/state" "^6.5.0" 18 | crelt "^1.0.6" 19 | style-mod "^4.1.0" 20 | w3c-keyname "^2.2.4" 21 | 22 | "@esbuild/win32-x64@0.17.3": 23 | version "0.17.3" 24 | resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.3.tgz" 25 | integrity sha512-FdVl64OIuiKjgXBjwZaJLKp0eaEckifbhn10dXWhysMJkWblg3OEEGKSIyhiD5RSgAya8WzP3DNkngtIg3Nt7g== 26 | 27 | "@eslint-community/eslint-utils@^4.2.0": 28 | version "4.9.0" 29 | resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz" 30 | integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== 31 | dependencies: 32 | eslint-visitor-keys "^3.4.3" 33 | 34 | "@eslint-community/regexpp@^4.6.1": 35 | version "4.12.2" 36 | resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz" 37 | integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== 38 | 39 | "@eslint/eslintrc@^2.1.4": 40 | version "2.1.4" 41 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" 42 | integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== 43 | dependencies: 44 | ajv "^6.12.4" 45 | debug "^4.3.2" 46 | espree "^9.6.0" 47 | globals "^13.19.0" 48 | ignore "^5.2.0" 49 | import-fresh "^3.2.1" 50 | js-yaml "^4.1.0" 51 | minimatch "^3.1.2" 52 | strip-json-comments "^3.1.1" 53 | 54 | "@eslint/js@8.57.1": 55 | version "8.57.1" 56 | resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz" 57 | integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== 58 | 59 | "@humanwhocodes/config-array@^0.13.0": 60 | version "0.13.0" 61 | resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz" 62 | integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== 63 | dependencies: 64 | "@humanwhocodes/object-schema" "^2.0.3" 65 | debug "^4.3.1" 66 | minimatch "^3.0.5" 67 | 68 | "@humanwhocodes/module-importer@^1.0.1": 69 | version "1.0.1" 70 | resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" 71 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 72 | 73 | "@humanwhocodes/object-schema@^2.0.3": 74 | version "2.0.3" 75 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" 76 | integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== 77 | 78 | "@marijn/find-cluster-break@^1.0.0": 79 | version "1.0.2" 80 | resolved "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz" 81 | integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g== 82 | 83 | "@nodelib/fs.scandir@2.1.5": 84 | version "2.1.5" 85 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 86 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 87 | dependencies: 88 | "@nodelib/fs.stat" "2.0.5" 89 | run-parallel "^1.1.9" 90 | 91 | "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": 92 | version "2.0.5" 93 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 94 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 95 | 96 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 97 | version "1.2.8" 98 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 99 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 100 | dependencies: 101 | "@nodelib/fs.scandir" "2.1.5" 102 | fastq "^1.6.0" 103 | 104 | "@types/codemirror@0.0.108": 105 | version "0.0.108" 106 | resolved "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz" 107 | integrity sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw== 108 | dependencies: 109 | "@types/tern" "*" 110 | 111 | "@types/estree@*": 112 | version "1.0.1" 113 | resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz" 114 | integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== 115 | 116 | "@types/json-schema@^7.0.9": 117 | version "7.0.12" 118 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" 119 | integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== 120 | 121 | "@types/node@^16.11.6": 122 | version "16.18.36" 123 | resolved "https://registry.npmjs.org/@types/node/-/node-16.18.36.tgz" 124 | integrity sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ== 125 | 126 | "@types/tern@*": 127 | version "0.23.4" 128 | resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz" 129 | integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== 130 | dependencies: 131 | "@types/estree" "*" 132 | 133 | "@typescript-eslint/eslint-plugin@5.29.0": 134 | version "5.29.0" 135 | resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz" 136 | integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== 137 | dependencies: 138 | "@typescript-eslint/scope-manager" "5.29.0" 139 | "@typescript-eslint/type-utils" "5.29.0" 140 | "@typescript-eslint/utils" "5.29.0" 141 | debug "^4.3.4" 142 | functional-red-black-tree "^1.0.1" 143 | ignore "^5.2.0" 144 | regexpp "^3.2.0" 145 | semver "^7.3.7" 146 | tsutils "^3.21.0" 147 | 148 | "@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@5.29.0": 149 | version "5.29.0" 150 | resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz" 151 | integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== 152 | dependencies: 153 | "@typescript-eslint/scope-manager" "5.29.0" 154 | "@typescript-eslint/types" "5.29.0" 155 | "@typescript-eslint/typescript-estree" "5.29.0" 156 | debug "^4.3.4" 157 | 158 | "@typescript-eslint/scope-manager@5.29.0": 159 | version "5.29.0" 160 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz" 161 | integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== 162 | dependencies: 163 | "@typescript-eslint/types" "5.29.0" 164 | "@typescript-eslint/visitor-keys" "5.29.0" 165 | 166 | "@typescript-eslint/type-utils@5.29.0": 167 | version "5.29.0" 168 | resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz" 169 | integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== 170 | dependencies: 171 | "@typescript-eslint/utils" "5.29.0" 172 | debug "^4.3.4" 173 | tsutils "^3.21.0" 174 | 175 | "@typescript-eslint/types@5.29.0": 176 | version "5.29.0" 177 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz" 178 | integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== 179 | 180 | "@typescript-eslint/typescript-estree@5.29.0": 181 | version "5.29.0" 182 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz" 183 | integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== 184 | dependencies: 185 | "@typescript-eslint/types" "5.29.0" 186 | "@typescript-eslint/visitor-keys" "5.29.0" 187 | debug "^4.3.4" 188 | globby "^11.1.0" 189 | is-glob "^4.0.3" 190 | semver "^7.3.7" 191 | tsutils "^3.21.0" 192 | 193 | "@typescript-eslint/utils@5.29.0": 194 | version "5.29.0" 195 | resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz" 196 | integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== 197 | dependencies: 198 | "@types/json-schema" "^7.0.9" 199 | "@typescript-eslint/scope-manager" "5.29.0" 200 | "@typescript-eslint/types" "5.29.0" 201 | "@typescript-eslint/typescript-estree" "5.29.0" 202 | eslint-scope "^5.1.1" 203 | eslint-utils "^3.0.0" 204 | 205 | "@typescript-eslint/visitor-keys@5.29.0": 206 | version "5.29.0" 207 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz" 208 | integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== 209 | dependencies: 210 | "@typescript-eslint/types" "5.29.0" 211 | eslint-visitor-keys "^3.3.0" 212 | 213 | "@ungap/structured-clone@^1.2.0": 214 | version "1.3.0" 215 | resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz" 216 | integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== 217 | 218 | acorn-jsx@^5.3.2: 219 | version "5.3.2" 220 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 221 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 222 | 223 | "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: 224 | version "8.15.0" 225 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" 226 | integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== 227 | 228 | ajv@^6.12.4: 229 | version "6.12.6" 230 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 231 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 232 | dependencies: 233 | fast-deep-equal "^3.1.1" 234 | fast-json-stable-stringify "^2.0.0" 235 | json-schema-traverse "^0.4.1" 236 | uri-js "^4.2.2" 237 | 238 | ansi-regex@^5.0.1: 239 | version "5.0.1" 240 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 241 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 242 | 243 | ansi-styles@^4.1.0: 244 | version "4.3.0" 245 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 246 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 247 | dependencies: 248 | color-convert "^2.0.1" 249 | 250 | argparse@^2.0.1: 251 | version "2.0.1" 252 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 253 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 254 | 255 | array-union@^2.1.0: 256 | version "2.1.0" 257 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 258 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 259 | 260 | balanced-match@^1.0.0: 261 | version "1.0.2" 262 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 263 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 264 | 265 | brace-expansion@^1.1.7: 266 | version "1.1.12" 267 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz" 268 | integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== 269 | dependencies: 270 | balanced-match "^1.0.0" 271 | concat-map "0.0.1" 272 | 273 | braces@^3.0.2: 274 | version "3.0.2" 275 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 276 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 277 | dependencies: 278 | fill-range "^7.0.1" 279 | 280 | builtin-modules@3.3.0: 281 | version "3.3.0" 282 | resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" 283 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== 284 | 285 | callsites@^3.0.0: 286 | version "3.1.0" 287 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 288 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 289 | 290 | chalk@^4.0.0: 291 | version "4.1.2" 292 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 293 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 294 | dependencies: 295 | ansi-styles "^4.1.0" 296 | supports-color "^7.1.0" 297 | 298 | color-convert@^2.0.1: 299 | version "2.0.1" 300 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 301 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 302 | dependencies: 303 | color-name "~1.1.4" 304 | 305 | color-name@~1.1.4: 306 | version "1.1.4" 307 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 308 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 309 | 310 | concat-map@0.0.1: 311 | version "0.0.1" 312 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 313 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 314 | 315 | crelt@^1.0.6: 316 | version "1.0.6" 317 | resolved "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz" 318 | integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== 319 | 320 | cross-spawn@^7.0.2: 321 | version "7.0.6" 322 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" 323 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 324 | dependencies: 325 | path-key "^3.1.0" 326 | shebang-command "^2.0.0" 327 | which "^2.0.1" 328 | 329 | debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: 330 | version "4.3.4" 331 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 332 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 333 | dependencies: 334 | ms "2.1.2" 335 | 336 | deep-is@^0.1.3: 337 | version "0.1.4" 338 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 339 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 340 | 341 | dir-glob@^3.0.1: 342 | version "3.0.1" 343 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 344 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 345 | dependencies: 346 | path-type "^4.0.0" 347 | 348 | doctrine@^3.0.0: 349 | version "3.0.0" 350 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 351 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 352 | dependencies: 353 | esutils "^2.0.2" 354 | 355 | esbuild@0.17.3: 356 | version "0.17.3" 357 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.3.tgz" 358 | integrity sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g== 359 | optionalDependencies: 360 | "@esbuild/android-arm" "0.17.3" 361 | "@esbuild/android-arm64" "0.17.3" 362 | "@esbuild/android-x64" "0.17.3" 363 | "@esbuild/darwin-arm64" "0.17.3" 364 | "@esbuild/darwin-x64" "0.17.3" 365 | "@esbuild/freebsd-arm64" "0.17.3" 366 | "@esbuild/freebsd-x64" "0.17.3" 367 | "@esbuild/linux-arm" "0.17.3" 368 | "@esbuild/linux-arm64" "0.17.3" 369 | "@esbuild/linux-ia32" "0.17.3" 370 | "@esbuild/linux-loong64" "0.17.3" 371 | "@esbuild/linux-mips64el" "0.17.3" 372 | "@esbuild/linux-ppc64" "0.17.3" 373 | "@esbuild/linux-riscv64" "0.17.3" 374 | "@esbuild/linux-s390x" "0.17.3" 375 | "@esbuild/linux-x64" "0.17.3" 376 | "@esbuild/netbsd-x64" "0.17.3" 377 | "@esbuild/openbsd-x64" "0.17.3" 378 | "@esbuild/sunos-x64" "0.17.3" 379 | "@esbuild/win32-arm64" "0.17.3" 380 | "@esbuild/win32-ia32" "0.17.3" 381 | "@esbuild/win32-x64" "0.17.3" 382 | 383 | escape-string-regexp@^4.0.0: 384 | version "4.0.0" 385 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 386 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 387 | 388 | eslint-scope@^5.1.1: 389 | version "5.1.1" 390 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" 391 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 392 | dependencies: 393 | esrecurse "^4.3.0" 394 | estraverse "^4.1.1" 395 | 396 | eslint-scope@^7.2.2: 397 | version "7.2.2" 398 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" 399 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 400 | dependencies: 401 | esrecurse "^4.3.0" 402 | estraverse "^5.2.0" 403 | 404 | eslint-utils@^3.0.0: 405 | version "3.0.0" 406 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" 407 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 408 | dependencies: 409 | eslint-visitor-keys "^2.0.0" 410 | 411 | eslint-visitor-keys@^2.0.0: 412 | version "2.1.0" 413 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" 414 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 415 | 416 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: 417 | version "3.4.1" 418 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" 419 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 420 | 421 | eslint-visitor-keys@^3.4.3: 422 | version "3.4.3" 423 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" 424 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 425 | 426 | eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@>=5: 427 | version "8.57.1" 428 | resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz" 429 | integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== 430 | dependencies: 431 | "@eslint-community/eslint-utils" "^4.2.0" 432 | "@eslint-community/regexpp" "^4.6.1" 433 | "@eslint/eslintrc" "^2.1.4" 434 | "@eslint/js" "8.57.1" 435 | "@humanwhocodes/config-array" "^0.13.0" 436 | "@humanwhocodes/module-importer" "^1.0.1" 437 | "@nodelib/fs.walk" "^1.2.8" 438 | "@ungap/structured-clone" "^1.2.0" 439 | ajv "^6.12.4" 440 | chalk "^4.0.0" 441 | cross-spawn "^7.0.2" 442 | debug "^4.3.2" 443 | doctrine "^3.0.0" 444 | escape-string-regexp "^4.0.0" 445 | eslint-scope "^7.2.2" 446 | eslint-visitor-keys "^3.4.3" 447 | espree "^9.6.1" 448 | esquery "^1.4.2" 449 | esutils "^2.0.2" 450 | fast-deep-equal "^3.1.3" 451 | file-entry-cache "^6.0.1" 452 | find-up "^5.0.0" 453 | glob-parent "^6.0.2" 454 | globals "^13.19.0" 455 | graphemer "^1.4.0" 456 | ignore "^5.2.0" 457 | imurmurhash "^0.1.4" 458 | is-glob "^4.0.0" 459 | is-path-inside "^3.0.3" 460 | js-yaml "^4.1.0" 461 | json-stable-stringify-without-jsonify "^1.0.1" 462 | levn "^0.4.1" 463 | lodash.merge "^4.6.2" 464 | minimatch "^3.1.2" 465 | natural-compare "^1.4.0" 466 | optionator "^0.9.3" 467 | strip-ansi "^6.0.1" 468 | text-table "^0.2.0" 469 | 470 | espree@^9.6.0, espree@^9.6.1: 471 | version "9.6.1" 472 | resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" 473 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 474 | dependencies: 475 | acorn "^8.9.0" 476 | acorn-jsx "^5.3.2" 477 | eslint-visitor-keys "^3.4.1" 478 | 479 | esquery@^1.4.2: 480 | version "1.6.0" 481 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" 482 | integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== 483 | dependencies: 484 | estraverse "^5.1.0" 485 | 486 | esrecurse@^4.3.0: 487 | version "4.3.0" 488 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 489 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 490 | dependencies: 491 | estraverse "^5.2.0" 492 | 493 | estraverse@^4.1.1: 494 | version "4.3.0" 495 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" 496 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 497 | 498 | estraverse@^5.1.0: 499 | version "5.3.0" 500 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 501 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 502 | 503 | estraverse@^5.2.0: 504 | version "5.3.0" 505 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 506 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 507 | 508 | esutils@^2.0.2: 509 | version "2.0.3" 510 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 511 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 512 | 513 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 514 | version "3.1.3" 515 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 516 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 517 | 518 | fast-glob@^3.2.9: 519 | version "3.2.12" 520 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" 521 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 522 | dependencies: 523 | "@nodelib/fs.stat" "^2.0.2" 524 | "@nodelib/fs.walk" "^1.2.3" 525 | glob-parent "^5.1.2" 526 | merge2 "^1.3.0" 527 | micromatch "^4.0.4" 528 | 529 | fast-json-stable-stringify@^2.0.0: 530 | version "2.1.0" 531 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 532 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 533 | 534 | fast-levenshtein@^2.0.6: 535 | version "2.0.6" 536 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 537 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 538 | 539 | fastq@^1.6.0: 540 | version "1.15.0" 541 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" 542 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 543 | dependencies: 544 | reusify "^1.0.4" 545 | 546 | file-entry-cache@^6.0.1: 547 | version "6.0.1" 548 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 549 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 550 | dependencies: 551 | flat-cache "^3.0.4" 552 | 553 | fill-range@^7.0.1: 554 | version "7.0.1" 555 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 556 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 557 | dependencies: 558 | to-regex-range "^5.0.1" 559 | 560 | find-up@^5.0.0: 561 | version "5.0.0" 562 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 563 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 564 | dependencies: 565 | locate-path "^6.0.0" 566 | path-exists "^4.0.0" 567 | 568 | flat-cache@^3.0.4: 569 | version "3.2.0" 570 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" 571 | integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== 572 | dependencies: 573 | flatted "^3.2.9" 574 | keyv "^4.5.3" 575 | rimraf "^3.0.2" 576 | 577 | flatted@^3.2.9: 578 | version "3.3.3" 579 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" 580 | integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== 581 | 582 | fs.realpath@^1.0.0: 583 | version "1.0.0" 584 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 585 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 586 | 587 | functional-red-black-tree@^1.0.1: 588 | version "1.0.1" 589 | resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" 590 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 591 | 592 | glob-parent@^5.1.2: 593 | version "5.1.2" 594 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 595 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 596 | dependencies: 597 | is-glob "^4.0.1" 598 | 599 | glob-parent@^6.0.2: 600 | version "6.0.2" 601 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 602 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 603 | dependencies: 604 | is-glob "^4.0.3" 605 | 606 | glob@^7.1.3: 607 | version "7.2.3" 608 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 609 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 610 | dependencies: 611 | fs.realpath "^1.0.0" 612 | inflight "^1.0.4" 613 | inherits "2" 614 | minimatch "^3.1.1" 615 | once "^1.3.0" 616 | path-is-absolute "^1.0.0" 617 | 618 | globals@^13.19.0: 619 | version "13.24.0" 620 | resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" 621 | integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== 622 | dependencies: 623 | type-fest "^0.20.2" 624 | 625 | globby@^11.1.0: 626 | version "11.1.0" 627 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" 628 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 629 | dependencies: 630 | array-union "^2.1.0" 631 | dir-glob "^3.0.1" 632 | fast-glob "^3.2.9" 633 | ignore "^5.2.0" 634 | merge2 "^1.4.1" 635 | slash "^3.0.0" 636 | 637 | graphemer@^1.4.0: 638 | version "1.4.0" 639 | resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" 640 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 641 | 642 | has-flag@^4.0.0: 643 | version "4.0.0" 644 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 645 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 646 | 647 | ignore@^5.2.0: 648 | version "5.2.4" 649 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" 650 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 651 | 652 | import-fresh@^3.2.1: 653 | version "3.3.1" 654 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" 655 | integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== 656 | dependencies: 657 | parent-module "^1.0.0" 658 | resolve-from "^4.0.0" 659 | 660 | imurmurhash@^0.1.4: 661 | version "0.1.4" 662 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 663 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 664 | 665 | inflight@^1.0.4: 666 | version "1.0.6" 667 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 668 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 669 | dependencies: 670 | once "^1.3.0" 671 | wrappy "1" 672 | 673 | inherits@2: 674 | version "2.0.4" 675 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 676 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 677 | 678 | is-extglob@^2.1.1: 679 | version "2.1.1" 680 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 681 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 682 | 683 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 684 | version "4.0.3" 685 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 686 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 687 | dependencies: 688 | is-extglob "^2.1.1" 689 | 690 | is-number@^7.0.0: 691 | version "7.0.0" 692 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 693 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 694 | 695 | is-path-inside@^3.0.3: 696 | version "3.0.3" 697 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" 698 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 699 | 700 | isexe@^2.0.0: 701 | version "2.0.0" 702 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 703 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 704 | 705 | js-yaml@^4.1.0: 706 | version "4.1.1" 707 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz" 708 | integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== 709 | dependencies: 710 | argparse "^2.0.1" 711 | 712 | json-buffer@3.0.1: 713 | version "3.0.1" 714 | resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" 715 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 716 | 717 | json-schema-traverse@^0.4.1: 718 | version "0.4.1" 719 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 720 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 721 | 722 | json-stable-stringify-without-jsonify@^1.0.1: 723 | version "1.0.1" 724 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 725 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 726 | 727 | keyv@^4.5.3: 728 | version "4.5.4" 729 | resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" 730 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 731 | dependencies: 732 | json-buffer "3.0.1" 733 | 734 | levn@^0.4.1: 735 | version "0.4.1" 736 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 737 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 738 | dependencies: 739 | prelude-ls "^1.2.1" 740 | type-check "~0.4.0" 741 | 742 | locate-path@^6.0.0: 743 | version "6.0.0" 744 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 745 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 746 | dependencies: 747 | p-locate "^5.0.0" 748 | 749 | lodash.merge@^4.6.2: 750 | version "4.6.2" 751 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 752 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 753 | 754 | lru-cache@^6.0.0: 755 | version "6.0.0" 756 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 757 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 758 | dependencies: 759 | yallist "^4.0.0" 760 | 761 | merge2@^1.3.0, merge2@^1.4.1: 762 | version "1.4.1" 763 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 764 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 765 | 766 | micromatch@^4.0.4: 767 | version "4.0.5" 768 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" 769 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 770 | dependencies: 771 | braces "^3.0.2" 772 | picomatch "^2.3.1" 773 | 774 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 775 | version "3.1.2" 776 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 777 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 778 | dependencies: 779 | brace-expansion "^1.1.7" 780 | 781 | moment@2.29.4: 782 | version "2.29.4" 783 | resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" 784 | integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== 785 | 786 | ms@2.1.2: 787 | version "2.1.2" 788 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 789 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 790 | 791 | natural-compare@^1.4.0: 792 | version "1.4.0" 793 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 794 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 795 | 796 | obsidian@latest: 797 | version "1.2.8" 798 | resolved "https://registry.npmjs.org/obsidian/-/obsidian-1.2.8.tgz" 799 | integrity sha512-HrC+feA8o0tXspj4lEAqxb1btwLwHD2oHXSwbbN+CdRHURqbCkuIDLld+nkuyJ1w1c9uvVDRVk8BoeOnWheOrQ== 800 | dependencies: 801 | "@types/codemirror" "0.0.108" 802 | moment "2.29.4" 803 | 804 | once@^1.3.0: 805 | version "1.4.0" 806 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 807 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 808 | dependencies: 809 | wrappy "1" 810 | 811 | optionator@^0.9.3: 812 | version "0.9.4" 813 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" 814 | integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== 815 | dependencies: 816 | deep-is "^0.1.3" 817 | fast-levenshtein "^2.0.6" 818 | levn "^0.4.1" 819 | prelude-ls "^1.2.1" 820 | type-check "^0.4.0" 821 | word-wrap "^1.2.5" 822 | 823 | p-limit@^3.0.2: 824 | version "3.1.0" 825 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 826 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 827 | dependencies: 828 | yocto-queue "^0.1.0" 829 | 830 | p-locate@^5.0.0: 831 | version "5.0.0" 832 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 833 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 834 | dependencies: 835 | p-limit "^3.0.2" 836 | 837 | parent-module@^1.0.0: 838 | version "1.0.1" 839 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 840 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 841 | dependencies: 842 | callsites "^3.0.0" 843 | 844 | path-exists@^4.0.0: 845 | version "4.0.0" 846 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 847 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 848 | 849 | path-is-absolute@^1.0.0: 850 | version "1.0.1" 851 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 852 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 853 | 854 | path-key@^3.1.0: 855 | version "3.1.1" 856 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 857 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 858 | 859 | path-type@^4.0.0: 860 | version "4.0.0" 861 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 862 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 863 | 864 | picomatch@^2.3.1: 865 | version "2.3.1" 866 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 867 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 868 | 869 | prelude-ls@^1.2.1: 870 | version "1.2.1" 871 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 872 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 873 | 874 | punycode@^2.1.0: 875 | version "2.3.1" 876 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" 877 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 878 | 879 | queue-microtask@^1.2.2: 880 | version "1.2.3" 881 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 882 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 883 | 884 | regexpp@^3.2.0: 885 | version "3.2.0" 886 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" 887 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 888 | 889 | resolve-from@^4.0.0: 890 | version "4.0.0" 891 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 892 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 893 | 894 | reusify@^1.0.4: 895 | version "1.0.4" 896 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 897 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 898 | 899 | rimraf@^3.0.2: 900 | version "3.0.2" 901 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 902 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 903 | dependencies: 904 | glob "^7.1.3" 905 | 906 | run-parallel@^1.1.9: 907 | version "1.2.0" 908 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 909 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 910 | dependencies: 911 | queue-microtask "^1.2.2" 912 | 913 | semver@^7.3.7: 914 | version "7.5.2" 915 | resolved "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz" 916 | integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== 917 | dependencies: 918 | lru-cache "^6.0.0" 919 | 920 | shebang-command@^2.0.0: 921 | version "2.0.0" 922 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 923 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 924 | dependencies: 925 | shebang-regex "^3.0.0" 926 | 927 | shebang-regex@^3.0.0: 928 | version "3.0.0" 929 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 930 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 931 | 932 | slash@^3.0.0: 933 | version "3.0.0" 934 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 935 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 936 | 937 | strip-ansi@^6.0.1: 938 | version "6.0.1" 939 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 940 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 941 | dependencies: 942 | ansi-regex "^5.0.1" 943 | 944 | strip-json-comments@^3.1.1: 945 | version "3.1.1" 946 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 947 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 948 | 949 | style-mod@^4.1.0: 950 | version "4.1.3" 951 | resolved "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz" 952 | integrity sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ== 953 | 954 | supports-color@^7.1.0: 955 | version "7.2.0" 956 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 957 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 958 | dependencies: 959 | has-flag "^4.0.0" 960 | 961 | text-table@^0.2.0: 962 | version "0.2.0" 963 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 964 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 965 | 966 | to-regex-range@^5.0.1: 967 | version "5.0.1" 968 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 969 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 970 | dependencies: 971 | is-number "^7.0.0" 972 | 973 | tslib@^1.8.1: 974 | version "1.14.1" 975 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" 976 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 977 | 978 | tslib@2.4.0: 979 | version "2.4.0" 980 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" 981 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 982 | 983 | tsutils@^3.21.0: 984 | version "3.21.0" 985 | resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" 986 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 987 | dependencies: 988 | tslib "^1.8.1" 989 | 990 | type-check@^0.4.0, type-check@~0.4.0: 991 | version "0.4.0" 992 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 993 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 994 | dependencies: 995 | prelude-ls "^1.2.1" 996 | 997 | type-fest@^0.20.2: 998 | version "0.20.2" 999 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1000 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1001 | 1002 | "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@4.7.4: 1003 | version "4.7.4" 1004 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" 1005 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 1006 | 1007 | uri-js@^4.2.2: 1008 | version "4.4.1" 1009 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 1010 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1011 | dependencies: 1012 | punycode "^2.1.0" 1013 | 1014 | w3c-keyname@^2.2.4: 1015 | version "2.2.8" 1016 | resolved "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz" 1017 | integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== 1018 | 1019 | which@^2.0.1: 1020 | version "2.0.2" 1021 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1022 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1023 | dependencies: 1024 | isexe "^2.0.0" 1025 | 1026 | word-wrap@^1.2.5: 1027 | version "1.2.5" 1028 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" 1029 | integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== 1030 | 1031 | wrappy@1: 1032 | version "1.0.2" 1033 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1034 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1035 | 1036 | yallist@^4.0.0: 1037 | version "4.0.0" 1038 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 1039 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1040 | 1041 | yocto-queue@^0.1.0: 1042 | version "0.1.0" 1043 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1044 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1045 | --------------------------------------------------------------------------------