├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github └── workflows │ └── main.yml ├── .gitignore ├── .npmrc ├── README.md ├── esbuild.config.mjs ├── images └── screenshot.png ├── main.ref.ts ├── manifest.json ├── package-lock.json ├── package.json ├── src ├── components │ └── settings-tab-component.ts ├── constants.ts ├── daily-notes-integration.ts ├── generate-styles.ts ├── main.ts ├── models │ └── settings.ts └── year-timeline-plugin.ts ├── styles.css ├── tsconfig.json ├── version-bump.mjs └── versions.json /.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 = space 9 | indent_size = 2 10 | tab_width = 2 11 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | main.js 4 | -------------------------------------------------------------------------------- /.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 | } -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: ubuntu-latest 13 | 14 | timeout-minutes: 20 15 | 16 | strategy: 17 | matrix: 18 | node-version: [16.x] 19 | 20 | steps: 21 | - uses: actions/checkout@v3 22 | - uses: actions/setup-node@v3 23 | with: 24 | node-version: 18 25 | - name: Install dependencies 26 | run: npm ci 27 | - name: Build 28 | run: npm run build 29 | # - name: Run unit tests 30 | # run: npm test 31 | - name: Run ESLint 32 | run: npx eslint . --ext .ts 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # vscode 2 | .vscode 3 | 4 | # Intellij 5 | *.iml 6 | .idea 7 | 8 | # npm 9 | node_modules 10 | 11 | # Don't include the compiled main.js file in the repo. 12 | # They should be uploaded to GitHub releases instead. 13 | main.js 14 | 15 | # Exclude sourcemaps 16 | *.map 17 | 18 | # obsidian 19 | data.json 20 | 21 | # Exclude macOS Finder (System Explorer) View States 22 | .DS_Store 23 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Obsidian year timeline plugin 2 | 3 | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/P5P2GIRD6) 4 | 5 | Add a configurable year timeline to your Obsidian notes. 6 | Change colors, rename months and place markers for important events on your timeline! 7 | 8 | ![](images/screenshot.png) 9 | 10 | ## How to use it in Daily Notes or Templater templates 11 | 1. Install the plugin 12 | 2. Open the Year Timeline plugin settings page and generate a snippet. 13 | Or copy from here 14 | - Daily Notes 15 | ```html 16 | 17 | ``` 18 | - Templater 19 | ```html 20 | "> 21 | ``` 22 | 3. Place the generated snippet in your markdown template file where you want the timeline to appear. 23 | 24 | ### Daily Notes integration (experimental) 25 | There is an option in the settings page to enable integration with the Obsidian Daily Notes plugin. 26 | Enabling this option will allow you to click on the timeline to navigate between the daily notes. 27 | The timeline plugin will try to use the necessary Daily Notes settings automatically. 28 | As this is an experimental setting and hasn't been properly tested yet, it is disabled by default. 29 | 30 | ## How to use it in a vault's home or portal page 31 | 1. Install the plugin 32 | 2. Open the settings page and generate the DataView JavaScript snippet 33 | 3. Place the generated snippet in your markdown file. 34 | -------------------------------------------------------------------------------- /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: ["src/main.ts"], 19 | bundle: true, 20 | external: [ 21 | "obsidian", 22 | "electron", 23 | "@codemirror/autocomplete", 24 | "@codemirror/collab", 25 | "@codemirror/commands", 26 | "@codemirror/language", 27 | "@codemirror/lint", 28 | "@codemirror/search", 29 | "@codemirror/state", 30 | "@codemirror/view", 31 | "@lezer/common", 32 | "@lezer/highlight", 33 | "@lezer/lr", 34 | ...builtins], 35 | format: "cjs", 36 | target: "es2018", 37 | logLevel: "info", 38 | sourcemap: prod ? false : "inline", 39 | treeShaking: true, 40 | outfile: "main.js", 41 | }); 42 | 43 | if (prod) { 44 | await context.rebuild(); 45 | process.exit(0); 46 | } else { 47 | await context.watch(); 48 | } 49 | -------------------------------------------------------------------------------- /images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taneltm/obsidian-year-timeline/733401c0806cae1dbafa232d2c47a80f4b7e8345/images/screenshot.png -------------------------------------------------------------------------------- /main.ref.ts: -------------------------------------------------------------------------------- 1 | import { App, Editor, MarkdownView, Modal, Notice, Plugin, PluginSettingTab, Setting } from 'obsidian'; 2 | 3 | // Remember to rename these classes and interfaces! 4 | 5 | interface MyPluginSettings { 6 | mySetting: string; 7 | } 8 | 9 | const DEFAULT_SETTINGS: MyPluginSettings = { 10 | mySetting: 'default' 11 | } 12 | 13 | export default class MyPlugin extends Plugin { 14 | settings: MyPluginSettings; 15 | 16 | async onload() { 17 | await this.loadSettings(); 18 | 19 | // This creates an icon in the left ribbon. 20 | const ribbonIconEl = this.addRibbonIcon('dice', 'Sample Plugin', (evt: MouseEvent) => { 21 | // Called when the user clicks the icon. 22 | new Notice('This is a notice!'); 23 | }); 24 | // Perform additional things with the ribbon 25 | ribbonIconEl.addClass('my-plugin-ribbon-class'); 26 | 27 | // This adds a status bar item to the bottom of the app. Does not work on mobile apps. 28 | const statusBarItemEl = this.addStatusBarItem(); 29 | statusBarItemEl.setText('Status Bar Text'); 30 | 31 | // This adds a simple command that can be triggered anywhere 32 | this.addCommand({ 33 | id: 'open-sample-modal-simple', 34 | name: 'Open sample modal (simple)', 35 | callback: () => { 36 | new SampleModal(this.app).open(); 37 | } 38 | }); 39 | // This adds an editor command that can perform some operation on the current editor instance 40 | this.addCommand({ 41 | id: 'sample-editor-command', 42 | name: 'Sample editor command', 43 | editorCallback: (editor: Editor, view: MarkdownView) => { 44 | console.log(editor.getSelection()); 45 | editor.replaceSelection('Sample Editor Command'); 46 | } 47 | }); 48 | // This adds a complex command that can check whether the current state of the app allows execution of the command 49 | this.addCommand({ 50 | id: 'open-sample-modal-complex', 51 | name: 'Open sample modal (complex)', 52 | checkCallback: (checking: boolean) => { 53 | // Conditions to check 54 | const markdownView = this.app.workspace.getActiveViewOfType(MarkdownView); 55 | if (markdownView) { 56 | // If checking is true, we're simply "checking" if the command can be run. 57 | // If checking is false, then we want to actually perform the operation. 58 | if (!checking) { 59 | new SampleModal(this.app).open(); 60 | } 61 | 62 | // This command will only show up in Command Palette when the check function returns true 63 | return true; 64 | } 65 | } 66 | }); 67 | 68 | // This adds a settings tab so the user can configure various aspects of the plugin 69 | this.addSettingTab(new SampleSettingTab(this.app, this)); 70 | 71 | // If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin) 72 | // Using this function will automatically remove the event listener when this plugin is disabled. 73 | this.registerDomEvent(document, 'click', (evt: MouseEvent) => { 74 | console.log('click', evt); 75 | }); 76 | 77 | // When registering intervals, this function will automatically clear the interval when the plugin is disabled. 78 | this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000)); 79 | } 80 | 81 | onunload() { 82 | 83 | } 84 | 85 | async loadSettings() { 86 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); 87 | } 88 | 89 | async saveSettings() { 90 | await this.saveData(this.settings); 91 | } 92 | } 93 | 94 | class SampleModal extends Modal { 95 | constructor(app: App) { 96 | super(app); 97 | } 98 | 99 | onOpen() { 100 | const {contentEl} = this; 101 | contentEl.setText('Woah!'); 102 | } 103 | 104 | onClose() { 105 | const {contentEl} = this; 106 | contentEl.empty(); 107 | } 108 | } 109 | 110 | class SampleSettingTab extends PluginSettingTab { 111 | plugin: MyPlugin; 112 | 113 | constructor(app: App, plugin: MyPlugin) { 114 | super(app, plugin); 115 | this.plugin = plugin; 116 | } 117 | 118 | display(): void { 119 | const {containerEl} = this; 120 | 121 | containerEl.empty(); 122 | 123 | containerEl.createEl('h2', {text: 'Settings for my awesome plugin.'}); 124 | 125 | new Setting(containerEl) 126 | .setName('Setting #1') 127 | .setDesc('It\'s a secret') 128 | .addText(text => text 129 | .setPlaceholder('Enter your secret') 130 | .setValue(this.plugin.settings.mySetting) 131 | .onChange(async (value) => { 132 | console.log('Secret: ' + value); 133 | this.plugin.settings.mySetting = value; 134 | await this.plugin.saveSettings(); 135 | })); 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-year-timeline", 3 | "name": "Year Timeline", 4 | "version": "1.0.0", 5 | "minAppVersion": "1.2.8", 6 | "description": "Create a year timeline in your notes.", 7 | "author": "TanelTM", 8 | "authorUrl": "https://github.com/taneltm", 9 | "fundingUrl": "https://ko-fi.com/taneltm", 10 | "isDesktopOnly": false 11 | } 12 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-year-timeline", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "obsidian-year-timeline", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@types/node": "^16.11.6", 13 | "@typescript-eslint/eslint-plugin": "5.29.0", 14 | "@typescript-eslint/parser": "5.29.0", 15 | "builtin-modules": "3.3.0", 16 | "esbuild": "0.17.3", 17 | "obsidian": "latest", 18 | "tslib": "2.4.0", 19 | "typescript": "4.7.4" 20 | } 21 | }, 22 | "node_modules/@codemirror/state": { 23 | "version": "6.2.0", 24 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.0.tgz", 25 | "integrity": "sha512-69QXtcrsc3RYtOtd+GsvczJ319udtBf1PTrr2KbLWM/e2CXUPnh0Nz9AUo8WfhSQ7GeL8dPVNUmhQVgpmuaNGA==", 26 | "dev": true, 27 | "peer": true 28 | }, 29 | "node_modules/@codemirror/view": { 30 | "version": "6.9.1", 31 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.9.1.tgz", 32 | "integrity": "sha512-bzfSjJn9dAADVpabLKWKNmMG4ibyTV2e3eOGowjElNPTdTkSbi6ixPYHm2u0ADcETfKsi2/R84Rkmi91dH9yEg==", 33 | "dev": true, 34 | "peer": true, 35 | "dependencies": { 36 | "@codemirror/state": "^6.1.4", 37 | "style-mod": "^4.0.0", 38 | "w3c-keyname": "^2.2.4" 39 | } 40 | }, 41 | "node_modules/@esbuild/android-arm": { 42 | "version": "0.17.3", 43 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.3.tgz", 44 | "integrity": "sha512-1Mlz934GvbgdDmt26rTLmf03cAgLg5HyOgJN+ZGCeP3Q9ynYTNMn2/LQxIl7Uy+o4K6Rfi2OuLsr12JQQR8gNg==", 45 | "cpu": [ 46 | "arm" 47 | ], 48 | "dev": true, 49 | "optional": true, 50 | "os": [ 51 | "android" 52 | ], 53 | "engines": { 54 | "node": ">=12" 55 | } 56 | }, 57 | "node_modules/@esbuild/android-arm64": { 58 | "version": "0.17.3", 59 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.3.tgz", 60 | "integrity": "sha512-XvJsYo3dO3Pi4kpalkyMvfQsjxPWHYjoX4MDiB/FUM4YMfWcXa5l4VCwFWVYI1+92yxqjuqrhNg0CZg3gSouyQ==", 61 | "cpu": [ 62 | "arm64" 63 | ], 64 | "dev": true, 65 | "optional": true, 66 | "os": [ 67 | "android" 68 | ], 69 | "engines": { 70 | "node": ">=12" 71 | } 72 | }, 73 | "node_modules/@esbuild/android-x64": { 74 | "version": "0.17.3", 75 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.3.tgz", 76 | "integrity": "sha512-nuV2CmLS07Gqh5/GrZLuqkU9Bm6H6vcCspM+zjp9TdQlxJtIe+qqEXQChmfc7nWdyr/yz3h45Utk1tUn8Cz5+A==", 77 | "cpu": [ 78 | "x64" 79 | ], 80 | "dev": true, 81 | "optional": true, 82 | "os": [ 83 | "android" 84 | ], 85 | "engines": { 86 | "node": ">=12" 87 | } 88 | }, 89 | "node_modules/@esbuild/darwin-arm64": { 90 | "version": "0.17.3", 91 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.3.tgz", 92 | "integrity": "sha512-01Hxaaat6m0Xp9AXGM8mjFtqqwDjzlMP0eQq9zll9U85ttVALGCGDuEvra5Feu/NbP5AEP1MaopPwzsTcUq1cw==", 93 | "cpu": [ 94 | "arm64" 95 | ], 96 | "dev": true, 97 | "optional": true, 98 | "os": [ 99 | "darwin" 100 | ], 101 | "engines": { 102 | "node": ">=12" 103 | } 104 | }, 105 | "node_modules/@esbuild/darwin-x64": { 106 | "version": "0.17.3", 107 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.3.tgz", 108 | "integrity": "sha512-Eo2gq0Q/er2muf8Z83X21UFoB7EU6/m3GNKvrhACJkjVThd0uA+8RfKpfNhuMCl1bKRfBzKOk6xaYKQZ4lZqvA==", 109 | "cpu": [ 110 | "x64" 111 | ], 112 | "dev": true, 113 | "optional": true, 114 | "os": [ 115 | "darwin" 116 | ], 117 | "engines": { 118 | "node": ">=12" 119 | } 120 | }, 121 | "node_modules/@esbuild/freebsd-arm64": { 122 | "version": "0.17.3", 123 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.3.tgz", 124 | "integrity": "sha512-CN62ESxaquP61n1ZjQP/jZte8CE09M6kNn3baos2SeUfdVBkWN5n6vGp2iKyb/bm/x4JQzEvJgRHLGd5F5b81w==", 125 | "cpu": [ 126 | "arm64" 127 | ], 128 | "dev": true, 129 | "optional": true, 130 | "os": [ 131 | "freebsd" 132 | ], 133 | "engines": { 134 | "node": ">=12" 135 | } 136 | }, 137 | "node_modules/@esbuild/freebsd-x64": { 138 | "version": "0.17.3", 139 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.3.tgz", 140 | "integrity": "sha512-feq+K8TxIznZE+zhdVurF3WNJ/Sa35dQNYbaqM/wsCbWdzXr5lyq+AaTUSER2cUR+SXPnd/EY75EPRjf4s1SLg==", 141 | "cpu": [ 142 | "x64" 143 | ], 144 | "dev": true, 145 | "optional": true, 146 | "os": [ 147 | "freebsd" 148 | ], 149 | "engines": { 150 | "node": ">=12" 151 | } 152 | }, 153 | "node_modules/@esbuild/linux-arm": { 154 | "version": "0.17.3", 155 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.3.tgz", 156 | "integrity": "sha512-CLP3EgyNuPcg2cshbwkqYy5bbAgK+VhyfMU7oIYyn+x4Y67xb5C5ylxsNUjRmr8BX+MW3YhVNm6Lq6FKtRTWHQ==", 157 | "cpu": [ 158 | "arm" 159 | ], 160 | "dev": true, 161 | "optional": true, 162 | "os": [ 163 | "linux" 164 | ], 165 | "engines": { 166 | "node": ">=12" 167 | } 168 | }, 169 | "node_modules/@esbuild/linux-arm64": { 170 | "version": "0.17.3", 171 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.3.tgz", 172 | "integrity": "sha512-JHeZXD4auLYBnrKn6JYJ0o5nWJI9PhChA/Nt0G4MvLaMrvXuWnY93R3a7PiXeJQphpL1nYsaMcoV2QtuvRnF/g==", 173 | "cpu": [ 174 | "arm64" 175 | ], 176 | "dev": true, 177 | "optional": true, 178 | "os": [ 179 | "linux" 180 | ], 181 | "engines": { 182 | "node": ">=12" 183 | } 184 | }, 185 | "node_modules/@esbuild/linux-ia32": { 186 | "version": "0.17.3", 187 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.3.tgz", 188 | "integrity": "sha512-FyXlD2ZjZqTFh0sOQxFDiWG1uQUEOLbEh9gKN/7pFxck5Vw0qjWSDqbn6C10GAa1rXJpwsntHcmLqydY9ST9ZA==", 189 | "cpu": [ 190 | "ia32" 191 | ], 192 | "dev": true, 193 | "optional": true, 194 | "os": [ 195 | "linux" 196 | ], 197 | "engines": { 198 | "node": ">=12" 199 | } 200 | }, 201 | "node_modules/@esbuild/linux-loong64": { 202 | "version": "0.17.3", 203 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.3.tgz", 204 | "integrity": "sha512-OrDGMvDBI2g7s04J8dh8/I7eSO+/E7nMDT2Z5IruBfUO/RiigF1OF6xoH33Dn4W/OwAWSUf1s2nXamb28ZklTA==", 205 | "cpu": [ 206 | "loong64" 207 | ], 208 | "dev": true, 209 | "optional": true, 210 | "os": [ 211 | "linux" 212 | ], 213 | "engines": { 214 | "node": ">=12" 215 | } 216 | }, 217 | "node_modules/@esbuild/linux-mips64el": { 218 | "version": "0.17.3", 219 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.3.tgz", 220 | "integrity": "sha512-DcnUpXnVCJvmv0TzuLwKBC2nsQHle8EIiAJiJ+PipEVC16wHXaPEKP0EqN8WnBe0TPvMITOUlP2aiL5YMld+CQ==", 221 | "cpu": [ 222 | "mips64el" 223 | ], 224 | "dev": true, 225 | "optional": true, 226 | "os": [ 227 | "linux" 228 | ], 229 | "engines": { 230 | "node": ">=12" 231 | } 232 | }, 233 | "node_modules/@esbuild/linux-ppc64": { 234 | "version": "0.17.3", 235 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.3.tgz", 236 | "integrity": "sha512-BDYf/l1WVhWE+FHAW3FzZPtVlk9QsrwsxGzABmN4g8bTjmhazsId3h127pliDRRu5674k1Y2RWejbpN46N9ZhQ==", 237 | "cpu": [ 238 | "ppc64" 239 | ], 240 | "dev": true, 241 | "optional": true, 242 | "os": [ 243 | "linux" 244 | ], 245 | "engines": { 246 | "node": ">=12" 247 | } 248 | }, 249 | "node_modules/@esbuild/linux-riscv64": { 250 | "version": "0.17.3", 251 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.3.tgz", 252 | "integrity": "sha512-WViAxWYMRIi+prTJTyV1wnqd2mS2cPqJlN85oscVhXdb/ZTFJdrpaqm/uDsZPGKHtbg5TuRX/ymKdOSk41YZow==", 253 | "cpu": [ 254 | "riscv64" 255 | ], 256 | "dev": true, 257 | "optional": true, 258 | "os": [ 259 | "linux" 260 | ], 261 | "engines": { 262 | "node": ">=12" 263 | } 264 | }, 265 | "node_modules/@esbuild/linux-s390x": { 266 | "version": "0.17.3", 267 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.3.tgz", 268 | "integrity": "sha512-Iw8lkNHUC4oGP1O/KhumcVy77u2s6+KUjieUqzEU3XuWJqZ+AY7uVMrrCbAiwWTkpQHkr00BuXH5RpC6Sb/7Ug==", 269 | "cpu": [ 270 | "s390x" 271 | ], 272 | "dev": true, 273 | "optional": true, 274 | "os": [ 275 | "linux" 276 | ], 277 | "engines": { 278 | "node": ">=12" 279 | } 280 | }, 281 | "node_modules/@esbuild/linux-x64": { 282 | "version": "0.17.3", 283 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.3.tgz", 284 | "integrity": "sha512-0AGkWQMzeoeAtXQRNB3s4J1/T2XbigM2/Mn2yU1tQSmQRmHIZdkGbVq2A3aDdNslPyhb9/lH0S5GMTZ4xsjBqg==", 285 | "cpu": [ 286 | "x64" 287 | ], 288 | "dev": true, 289 | "optional": true, 290 | "os": [ 291 | "linux" 292 | ], 293 | "engines": { 294 | "node": ">=12" 295 | } 296 | }, 297 | "node_modules/@esbuild/netbsd-x64": { 298 | "version": "0.17.3", 299 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.3.tgz", 300 | "integrity": "sha512-4+rR/WHOxIVh53UIQIICryjdoKdHsFZFD4zLSonJ9RRw7bhKzVyXbnRPsWSfwybYqw9sB7ots/SYyufL1mBpEg==", 301 | "cpu": [ 302 | "x64" 303 | ], 304 | "dev": true, 305 | "optional": true, 306 | "os": [ 307 | "netbsd" 308 | ], 309 | "engines": { 310 | "node": ">=12" 311 | } 312 | }, 313 | "node_modules/@esbuild/openbsd-x64": { 314 | "version": "0.17.3", 315 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.3.tgz", 316 | "integrity": "sha512-cVpWnkx9IYg99EjGxa5Gc0XmqumtAwK3aoz7O4Dii2vko+qXbkHoujWA68cqXjhh6TsLaQelfDO4MVnyr+ODeA==", 317 | "cpu": [ 318 | "x64" 319 | ], 320 | "dev": true, 321 | "optional": true, 322 | "os": [ 323 | "openbsd" 324 | ], 325 | "engines": { 326 | "node": ">=12" 327 | } 328 | }, 329 | "node_modules/@esbuild/sunos-x64": { 330 | "version": "0.17.3", 331 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.3.tgz", 332 | "integrity": "sha512-RxmhKLbTCDAY2xOfrww6ieIZkZF+KBqG7S2Ako2SljKXRFi+0863PspK74QQ7JpmWwncChY25JTJSbVBYGQk2Q==", 333 | "cpu": [ 334 | "x64" 335 | ], 336 | "dev": true, 337 | "optional": true, 338 | "os": [ 339 | "sunos" 340 | ], 341 | "engines": { 342 | "node": ">=12" 343 | } 344 | }, 345 | "node_modules/@esbuild/win32-arm64": { 346 | "version": "0.17.3", 347 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.3.tgz", 348 | "integrity": "sha512-0r36VeEJ4efwmofxVJRXDjVRP2jTmv877zc+i+Pc7MNsIr38NfsjkQj23AfF7l0WbB+RQ7VUb+LDiqC/KY/M/A==", 349 | "cpu": [ 350 | "arm64" 351 | ], 352 | "dev": true, 353 | "optional": true, 354 | "os": [ 355 | "win32" 356 | ], 357 | "engines": { 358 | "node": ">=12" 359 | } 360 | }, 361 | "node_modules/@esbuild/win32-ia32": { 362 | "version": "0.17.3", 363 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.3.tgz", 364 | "integrity": "sha512-wgO6rc7uGStH22nur4aLFcq7Wh86bE9cOFmfTr/yxN3BXvDEdCSXyKkO+U5JIt53eTOgC47v9k/C1bITWL/Teg==", 365 | "cpu": [ 366 | "ia32" 367 | ], 368 | "dev": true, 369 | "optional": true, 370 | "os": [ 371 | "win32" 372 | ], 373 | "engines": { 374 | "node": ">=12" 375 | } 376 | }, 377 | "node_modules/@esbuild/win32-x64": { 378 | "version": "0.17.3", 379 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.3.tgz", 380 | "integrity": "sha512-FdVl64OIuiKjgXBjwZaJLKp0eaEckifbhn10dXWhysMJkWblg3OEEGKSIyhiD5RSgAya8WzP3DNkngtIg3Nt7g==", 381 | "cpu": [ 382 | "x64" 383 | ], 384 | "dev": true, 385 | "optional": true, 386 | "os": [ 387 | "win32" 388 | ], 389 | "engines": { 390 | "node": ">=12" 391 | } 392 | }, 393 | "node_modules/@eslint/eslintrc": { 394 | "version": "2.0.0", 395 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", 396 | "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", 397 | "dev": true, 398 | "peer": true, 399 | "dependencies": { 400 | "ajv": "^6.12.4", 401 | "debug": "^4.3.2", 402 | "espree": "^9.4.0", 403 | "globals": "^13.19.0", 404 | "ignore": "^5.2.0", 405 | "import-fresh": "^3.2.1", 406 | "js-yaml": "^4.1.0", 407 | "minimatch": "^3.1.2", 408 | "strip-json-comments": "^3.1.1" 409 | }, 410 | "engines": { 411 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 412 | }, 413 | "funding": { 414 | "url": "https://opencollective.com/eslint" 415 | } 416 | }, 417 | "node_modules/@eslint/js": { 418 | "version": "8.35.0", 419 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", 420 | "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", 421 | "dev": true, 422 | "peer": true, 423 | "engines": { 424 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 425 | } 426 | }, 427 | "node_modules/@humanwhocodes/config-array": { 428 | "version": "0.11.8", 429 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", 430 | "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", 431 | "dev": true, 432 | "peer": true, 433 | "dependencies": { 434 | "@humanwhocodes/object-schema": "^1.2.1", 435 | "debug": "^4.1.1", 436 | "minimatch": "^3.0.5" 437 | }, 438 | "engines": { 439 | "node": ">=10.10.0" 440 | } 441 | }, 442 | "node_modules/@humanwhocodes/module-importer": { 443 | "version": "1.0.1", 444 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 445 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 446 | "dev": true, 447 | "peer": true, 448 | "engines": { 449 | "node": ">=12.22" 450 | }, 451 | "funding": { 452 | "type": "github", 453 | "url": "https://github.com/sponsors/nzakas" 454 | } 455 | }, 456 | "node_modules/@humanwhocodes/object-schema": { 457 | "version": "1.2.1", 458 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 459 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 460 | "dev": true, 461 | "peer": true 462 | }, 463 | "node_modules/@nodelib/fs.scandir": { 464 | "version": "2.1.5", 465 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 466 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 467 | "dev": true, 468 | "dependencies": { 469 | "@nodelib/fs.stat": "2.0.5", 470 | "run-parallel": "^1.1.9" 471 | }, 472 | "engines": { 473 | "node": ">= 8" 474 | } 475 | }, 476 | "node_modules/@nodelib/fs.stat": { 477 | "version": "2.0.5", 478 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 479 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 480 | "dev": true, 481 | "engines": { 482 | "node": ">= 8" 483 | } 484 | }, 485 | "node_modules/@nodelib/fs.walk": { 486 | "version": "1.2.8", 487 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 488 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 489 | "dev": true, 490 | "dependencies": { 491 | "@nodelib/fs.scandir": "2.1.5", 492 | "fastq": "^1.6.0" 493 | }, 494 | "engines": { 495 | "node": ">= 8" 496 | } 497 | }, 498 | "node_modules/@types/codemirror": { 499 | "version": "0.0.108", 500 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz", 501 | "integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==", 502 | "dev": true, 503 | "dependencies": { 504 | "@types/tern": "*" 505 | } 506 | }, 507 | "node_modules/@types/estree": { 508 | "version": "1.0.0", 509 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", 510 | "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", 511 | "dev": true 512 | }, 513 | "node_modules/@types/json-schema": { 514 | "version": "7.0.11", 515 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", 516 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", 517 | "dev": true 518 | }, 519 | "node_modules/@types/node": { 520 | "version": "16.18.13", 521 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.13.tgz", 522 | "integrity": "sha512-l0/3XZ153UTlNOnZK8xSNoJlQda9/WnYgiTdcKKPJSZjdjI9MU+A9oMXOesAWLSnqAaaJhj3qfQsU07Dr8OUwg==", 523 | "dev": true 524 | }, 525 | "node_modules/@types/tern": { 526 | "version": "0.23.4", 527 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", 528 | "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", 529 | "dev": true, 530 | "dependencies": { 531 | "@types/estree": "*" 532 | } 533 | }, 534 | "node_modules/@typescript-eslint/eslint-plugin": { 535 | "version": "5.29.0", 536 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", 537 | "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", 538 | "dev": true, 539 | "dependencies": { 540 | "@typescript-eslint/scope-manager": "5.29.0", 541 | "@typescript-eslint/type-utils": "5.29.0", 542 | "@typescript-eslint/utils": "5.29.0", 543 | "debug": "^4.3.4", 544 | "functional-red-black-tree": "^1.0.1", 545 | "ignore": "^5.2.0", 546 | "regexpp": "^3.2.0", 547 | "semver": "^7.3.7", 548 | "tsutils": "^3.21.0" 549 | }, 550 | "engines": { 551 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 552 | }, 553 | "funding": { 554 | "type": "opencollective", 555 | "url": "https://opencollective.com/typescript-eslint" 556 | }, 557 | "peerDependencies": { 558 | "@typescript-eslint/parser": "^5.0.0", 559 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 560 | }, 561 | "peerDependenciesMeta": { 562 | "typescript": { 563 | "optional": true 564 | } 565 | } 566 | }, 567 | "node_modules/@typescript-eslint/parser": { 568 | "version": "5.29.0", 569 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", 570 | "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", 571 | "dev": true, 572 | "dependencies": { 573 | "@typescript-eslint/scope-manager": "5.29.0", 574 | "@typescript-eslint/types": "5.29.0", 575 | "@typescript-eslint/typescript-estree": "5.29.0", 576 | "debug": "^4.3.4" 577 | }, 578 | "engines": { 579 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 580 | }, 581 | "funding": { 582 | "type": "opencollective", 583 | "url": "https://opencollective.com/typescript-eslint" 584 | }, 585 | "peerDependencies": { 586 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 587 | }, 588 | "peerDependenciesMeta": { 589 | "typescript": { 590 | "optional": true 591 | } 592 | } 593 | }, 594 | "node_modules/@typescript-eslint/scope-manager": { 595 | "version": "5.29.0", 596 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", 597 | "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", 598 | "dev": true, 599 | "dependencies": { 600 | "@typescript-eslint/types": "5.29.0", 601 | "@typescript-eslint/visitor-keys": "5.29.0" 602 | }, 603 | "engines": { 604 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 605 | }, 606 | "funding": { 607 | "type": "opencollective", 608 | "url": "https://opencollective.com/typescript-eslint" 609 | } 610 | }, 611 | "node_modules/@typescript-eslint/type-utils": { 612 | "version": "5.29.0", 613 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", 614 | "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", 615 | "dev": true, 616 | "dependencies": { 617 | "@typescript-eslint/utils": "5.29.0", 618 | "debug": "^4.3.4", 619 | "tsutils": "^3.21.0" 620 | }, 621 | "engines": { 622 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 623 | }, 624 | "funding": { 625 | "type": "opencollective", 626 | "url": "https://opencollective.com/typescript-eslint" 627 | }, 628 | "peerDependencies": { 629 | "eslint": "*" 630 | }, 631 | "peerDependenciesMeta": { 632 | "typescript": { 633 | "optional": true 634 | } 635 | } 636 | }, 637 | "node_modules/@typescript-eslint/types": { 638 | "version": "5.29.0", 639 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", 640 | "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", 641 | "dev": true, 642 | "engines": { 643 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 644 | }, 645 | "funding": { 646 | "type": "opencollective", 647 | "url": "https://opencollective.com/typescript-eslint" 648 | } 649 | }, 650 | "node_modules/@typescript-eslint/typescript-estree": { 651 | "version": "5.29.0", 652 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", 653 | "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", 654 | "dev": true, 655 | "dependencies": { 656 | "@typescript-eslint/types": "5.29.0", 657 | "@typescript-eslint/visitor-keys": "5.29.0", 658 | "debug": "^4.3.4", 659 | "globby": "^11.1.0", 660 | "is-glob": "^4.0.3", 661 | "semver": "^7.3.7", 662 | "tsutils": "^3.21.0" 663 | }, 664 | "engines": { 665 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 666 | }, 667 | "funding": { 668 | "type": "opencollective", 669 | "url": "https://opencollective.com/typescript-eslint" 670 | }, 671 | "peerDependenciesMeta": { 672 | "typescript": { 673 | "optional": true 674 | } 675 | } 676 | }, 677 | "node_modules/@typescript-eslint/utils": { 678 | "version": "5.29.0", 679 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", 680 | "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", 681 | "dev": true, 682 | "dependencies": { 683 | "@types/json-schema": "^7.0.9", 684 | "@typescript-eslint/scope-manager": "5.29.0", 685 | "@typescript-eslint/types": "5.29.0", 686 | "@typescript-eslint/typescript-estree": "5.29.0", 687 | "eslint-scope": "^5.1.1", 688 | "eslint-utils": "^3.0.0" 689 | }, 690 | "engines": { 691 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 692 | }, 693 | "funding": { 694 | "type": "opencollective", 695 | "url": "https://opencollective.com/typescript-eslint" 696 | }, 697 | "peerDependencies": { 698 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 699 | } 700 | }, 701 | "node_modules/@typescript-eslint/visitor-keys": { 702 | "version": "5.29.0", 703 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", 704 | "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", 705 | "dev": true, 706 | "dependencies": { 707 | "@typescript-eslint/types": "5.29.0", 708 | "eslint-visitor-keys": "^3.3.0" 709 | }, 710 | "engines": { 711 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 712 | }, 713 | "funding": { 714 | "type": "opencollective", 715 | "url": "https://opencollective.com/typescript-eslint" 716 | } 717 | }, 718 | "node_modules/acorn": { 719 | "version": "8.8.2", 720 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 721 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 722 | "dev": true, 723 | "peer": true, 724 | "bin": { 725 | "acorn": "bin/acorn" 726 | }, 727 | "engines": { 728 | "node": ">=0.4.0" 729 | } 730 | }, 731 | "node_modules/acorn-jsx": { 732 | "version": "5.3.2", 733 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 734 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 735 | "dev": true, 736 | "peer": true, 737 | "peerDependencies": { 738 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 739 | } 740 | }, 741 | "node_modules/ajv": { 742 | "version": "6.12.6", 743 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 744 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 745 | "dev": true, 746 | "peer": true, 747 | "dependencies": { 748 | "fast-deep-equal": "^3.1.1", 749 | "fast-json-stable-stringify": "^2.0.0", 750 | "json-schema-traverse": "^0.4.1", 751 | "uri-js": "^4.2.2" 752 | }, 753 | "funding": { 754 | "type": "github", 755 | "url": "https://github.com/sponsors/epoberezkin" 756 | } 757 | }, 758 | "node_modules/ansi-regex": { 759 | "version": "5.0.1", 760 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 761 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 762 | "dev": true, 763 | "peer": true, 764 | "engines": { 765 | "node": ">=8" 766 | } 767 | }, 768 | "node_modules/ansi-styles": { 769 | "version": "4.3.0", 770 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 771 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 772 | "dev": true, 773 | "peer": true, 774 | "dependencies": { 775 | "color-convert": "^2.0.1" 776 | }, 777 | "engines": { 778 | "node": ">=8" 779 | }, 780 | "funding": { 781 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 782 | } 783 | }, 784 | "node_modules/argparse": { 785 | "version": "2.0.1", 786 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 787 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 788 | "dev": true, 789 | "peer": true 790 | }, 791 | "node_modules/array-union": { 792 | "version": "2.1.0", 793 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 794 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 795 | "dev": true, 796 | "engines": { 797 | "node": ">=8" 798 | } 799 | }, 800 | "node_modules/balanced-match": { 801 | "version": "1.0.2", 802 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 803 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 804 | "dev": true, 805 | "peer": true 806 | }, 807 | "node_modules/brace-expansion": { 808 | "version": "1.1.11", 809 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 810 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 811 | "dev": true, 812 | "peer": true, 813 | "dependencies": { 814 | "balanced-match": "^1.0.0", 815 | "concat-map": "0.0.1" 816 | } 817 | }, 818 | "node_modules/braces": { 819 | "version": "3.0.2", 820 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 821 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 822 | "dev": true, 823 | "dependencies": { 824 | "fill-range": "^7.0.1" 825 | }, 826 | "engines": { 827 | "node": ">=8" 828 | } 829 | }, 830 | "node_modules/builtin-modules": { 831 | "version": "3.3.0", 832 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 833 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 834 | "dev": true, 835 | "engines": { 836 | "node": ">=6" 837 | }, 838 | "funding": { 839 | "url": "https://github.com/sponsors/sindresorhus" 840 | } 841 | }, 842 | "node_modules/callsites": { 843 | "version": "3.1.0", 844 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 845 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 846 | "dev": true, 847 | "peer": true, 848 | "engines": { 849 | "node": ">=6" 850 | } 851 | }, 852 | "node_modules/chalk": { 853 | "version": "4.1.2", 854 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 855 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 856 | "dev": true, 857 | "peer": true, 858 | "dependencies": { 859 | "ansi-styles": "^4.1.0", 860 | "supports-color": "^7.1.0" 861 | }, 862 | "engines": { 863 | "node": ">=10" 864 | }, 865 | "funding": { 866 | "url": "https://github.com/chalk/chalk?sponsor=1" 867 | } 868 | }, 869 | "node_modules/color-convert": { 870 | "version": "2.0.1", 871 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 872 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 873 | "dev": true, 874 | "peer": true, 875 | "dependencies": { 876 | "color-name": "~1.1.4" 877 | }, 878 | "engines": { 879 | "node": ">=7.0.0" 880 | } 881 | }, 882 | "node_modules/color-name": { 883 | "version": "1.1.4", 884 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 885 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 886 | "dev": true, 887 | "peer": true 888 | }, 889 | "node_modules/concat-map": { 890 | "version": "0.0.1", 891 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 892 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 893 | "dev": true, 894 | "peer": true 895 | }, 896 | "node_modules/cross-spawn": { 897 | "version": "7.0.3", 898 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 899 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 900 | "dev": true, 901 | "peer": true, 902 | "dependencies": { 903 | "path-key": "^3.1.0", 904 | "shebang-command": "^2.0.0", 905 | "which": "^2.0.1" 906 | }, 907 | "engines": { 908 | "node": ">= 8" 909 | } 910 | }, 911 | "node_modules/debug": { 912 | "version": "4.3.4", 913 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 914 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 915 | "dev": true, 916 | "dependencies": { 917 | "ms": "2.1.2" 918 | }, 919 | "engines": { 920 | "node": ">=6.0" 921 | }, 922 | "peerDependenciesMeta": { 923 | "supports-color": { 924 | "optional": true 925 | } 926 | } 927 | }, 928 | "node_modules/deep-is": { 929 | "version": "0.1.4", 930 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 931 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 932 | "dev": true, 933 | "peer": true 934 | }, 935 | "node_modules/dir-glob": { 936 | "version": "3.0.1", 937 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 938 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 939 | "dev": true, 940 | "dependencies": { 941 | "path-type": "^4.0.0" 942 | }, 943 | "engines": { 944 | "node": ">=8" 945 | } 946 | }, 947 | "node_modules/doctrine": { 948 | "version": "3.0.0", 949 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 950 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 951 | "dev": true, 952 | "peer": true, 953 | "dependencies": { 954 | "esutils": "^2.0.2" 955 | }, 956 | "engines": { 957 | "node": ">=6.0.0" 958 | } 959 | }, 960 | "node_modules/esbuild": { 961 | "version": "0.17.3", 962 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.3.tgz", 963 | "integrity": "sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g==", 964 | "dev": true, 965 | "hasInstallScript": true, 966 | "bin": { 967 | "esbuild": "bin/esbuild" 968 | }, 969 | "engines": { 970 | "node": ">=12" 971 | }, 972 | "optionalDependencies": { 973 | "@esbuild/android-arm": "0.17.3", 974 | "@esbuild/android-arm64": "0.17.3", 975 | "@esbuild/android-x64": "0.17.3", 976 | "@esbuild/darwin-arm64": "0.17.3", 977 | "@esbuild/darwin-x64": "0.17.3", 978 | "@esbuild/freebsd-arm64": "0.17.3", 979 | "@esbuild/freebsd-x64": "0.17.3", 980 | "@esbuild/linux-arm": "0.17.3", 981 | "@esbuild/linux-arm64": "0.17.3", 982 | "@esbuild/linux-ia32": "0.17.3", 983 | "@esbuild/linux-loong64": "0.17.3", 984 | "@esbuild/linux-mips64el": "0.17.3", 985 | "@esbuild/linux-ppc64": "0.17.3", 986 | "@esbuild/linux-riscv64": "0.17.3", 987 | "@esbuild/linux-s390x": "0.17.3", 988 | "@esbuild/linux-x64": "0.17.3", 989 | "@esbuild/netbsd-x64": "0.17.3", 990 | "@esbuild/openbsd-x64": "0.17.3", 991 | "@esbuild/sunos-x64": "0.17.3", 992 | "@esbuild/win32-arm64": "0.17.3", 993 | "@esbuild/win32-ia32": "0.17.3", 994 | "@esbuild/win32-x64": "0.17.3" 995 | } 996 | }, 997 | "node_modules/escape-string-regexp": { 998 | "version": "4.0.0", 999 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1000 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1001 | "dev": true, 1002 | "peer": true, 1003 | "engines": { 1004 | "node": ">=10" 1005 | }, 1006 | "funding": { 1007 | "url": "https://github.com/sponsors/sindresorhus" 1008 | } 1009 | }, 1010 | "node_modules/eslint": { 1011 | "version": "8.35.0", 1012 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", 1013 | "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", 1014 | "dev": true, 1015 | "peer": true, 1016 | "dependencies": { 1017 | "@eslint/eslintrc": "^2.0.0", 1018 | "@eslint/js": "8.35.0", 1019 | "@humanwhocodes/config-array": "^0.11.8", 1020 | "@humanwhocodes/module-importer": "^1.0.1", 1021 | "@nodelib/fs.walk": "^1.2.8", 1022 | "ajv": "^6.10.0", 1023 | "chalk": "^4.0.0", 1024 | "cross-spawn": "^7.0.2", 1025 | "debug": "^4.3.2", 1026 | "doctrine": "^3.0.0", 1027 | "escape-string-regexp": "^4.0.0", 1028 | "eslint-scope": "^7.1.1", 1029 | "eslint-utils": "^3.0.0", 1030 | "eslint-visitor-keys": "^3.3.0", 1031 | "espree": "^9.4.0", 1032 | "esquery": "^1.4.2", 1033 | "esutils": "^2.0.2", 1034 | "fast-deep-equal": "^3.1.3", 1035 | "file-entry-cache": "^6.0.1", 1036 | "find-up": "^5.0.0", 1037 | "glob-parent": "^6.0.2", 1038 | "globals": "^13.19.0", 1039 | "grapheme-splitter": "^1.0.4", 1040 | "ignore": "^5.2.0", 1041 | "import-fresh": "^3.0.0", 1042 | "imurmurhash": "^0.1.4", 1043 | "is-glob": "^4.0.0", 1044 | "is-path-inside": "^3.0.3", 1045 | "js-sdsl": "^4.1.4", 1046 | "js-yaml": "^4.1.0", 1047 | "json-stable-stringify-without-jsonify": "^1.0.1", 1048 | "levn": "^0.4.1", 1049 | "lodash.merge": "^4.6.2", 1050 | "minimatch": "^3.1.2", 1051 | "natural-compare": "^1.4.0", 1052 | "optionator": "^0.9.1", 1053 | "regexpp": "^3.2.0", 1054 | "strip-ansi": "^6.0.1", 1055 | "strip-json-comments": "^3.1.0", 1056 | "text-table": "^0.2.0" 1057 | }, 1058 | "bin": { 1059 | "eslint": "bin/eslint.js" 1060 | }, 1061 | "engines": { 1062 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1063 | }, 1064 | "funding": { 1065 | "url": "https://opencollective.com/eslint" 1066 | } 1067 | }, 1068 | "node_modules/eslint-scope": { 1069 | "version": "5.1.1", 1070 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 1071 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 1072 | "dev": true, 1073 | "dependencies": { 1074 | "esrecurse": "^4.3.0", 1075 | "estraverse": "^4.1.1" 1076 | }, 1077 | "engines": { 1078 | "node": ">=8.0.0" 1079 | } 1080 | }, 1081 | "node_modules/eslint-utils": { 1082 | "version": "3.0.0", 1083 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1084 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1085 | "dev": true, 1086 | "dependencies": { 1087 | "eslint-visitor-keys": "^2.0.0" 1088 | }, 1089 | "engines": { 1090 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 1091 | }, 1092 | "funding": { 1093 | "url": "https://github.com/sponsors/mysticatea" 1094 | }, 1095 | "peerDependencies": { 1096 | "eslint": ">=5" 1097 | } 1098 | }, 1099 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 1100 | "version": "2.1.0", 1101 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1102 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1103 | "dev": true, 1104 | "engines": { 1105 | "node": ">=10" 1106 | } 1107 | }, 1108 | "node_modules/eslint-visitor-keys": { 1109 | "version": "3.3.0", 1110 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 1111 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 1112 | "dev": true, 1113 | "engines": { 1114 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1115 | } 1116 | }, 1117 | "node_modules/eslint/node_modules/eslint-scope": { 1118 | "version": "7.1.1", 1119 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 1120 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 1121 | "dev": true, 1122 | "peer": true, 1123 | "dependencies": { 1124 | "esrecurse": "^4.3.0", 1125 | "estraverse": "^5.2.0" 1126 | }, 1127 | "engines": { 1128 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1129 | } 1130 | }, 1131 | "node_modules/eslint/node_modules/estraverse": { 1132 | "version": "5.3.0", 1133 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1134 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1135 | "dev": true, 1136 | "peer": true, 1137 | "engines": { 1138 | "node": ">=4.0" 1139 | } 1140 | }, 1141 | "node_modules/espree": { 1142 | "version": "9.4.1", 1143 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", 1144 | "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", 1145 | "dev": true, 1146 | "peer": true, 1147 | "dependencies": { 1148 | "acorn": "^8.8.0", 1149 | "acorn-jsx": "^5.3.2", 1150 | "eslint-visitor-keys": "^3.3.0" 1151 | }, 1152 | "engines": { 1153 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1154 | }, 1155 | "funding": { 1156 | "url": "https://opencollective.com/eslint" 1157 | } 1158 | }, 1159 | "node_modules/esquery": { 1160 | "version": "1.4.2", 1161 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", 1162 | "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", 1163 | "dev": true, 1164 | "peer": true, 1165 | "dependencies": { 1166 | "estraverse": "^5.1.0" 1167 | }, 1168 | "engines": { 1169 | "node": ">=0.10" 1170 | } 1171 | }, 1172 | "node_modules/esquery/node_modules/estraverse": { 1173 | "version": "5.3.0", 1174 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1175 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1176 | "dev": true, 1177 | "peer": true, 1178 | "engines": { 1179 | "node": ">=4.0" 1180 | } 1181 | }, 1182 | "node_modules/esrecurse": { 1183 | "version": "4.3.0", 1184 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1185 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1186 | "dev": true, 1187 | "dependencies": { 1188 | "estraverse": "^5.2.0" 1189 | }, 1190 | "engines": { 1191 | "node": ">=4.0" 1192 | } 1193 | }, 1194 | "node_modules/esrecurse/node_modules/estraverse": { 1195 | "version": "5.3.0", 1196 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1197 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1198 | "dev": true, 1199 | "engines": { 1200 | "node": ">=4.0" 1201 | } 1202 | }, 1203 | "node_modules/estraverse": { 1204 | "version": "4.3.0", 1205 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1206 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1207 | "dev": true, 1208 | "engines": { 1209 | "node": ">=4.0" 1210 | } 1211 | }, 1212 | "node_modules/esutils": { 1213 | "version": "2.0.3", 1214 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1215 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1216 | "dev": true, 1217 | "peer": true, 1218 | "engines": { 1219 | "node": ">=0.10.0" 1220 | } 1221 | }, 1222 | "node_modules/fast-deep-equal": { 1223 | "version": "3.1.3", 1224 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1225 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1226 | "dev": true, 1227 | "peer": true 1228 | }, 1229 | "node_modules/fast-glob": { 1230 | "version": "3.2.12", 1231 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 1232 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 1233 | "dev": true, 1234 | "dependencies": { 1235 | "@nodelib/fs.stat": "^2.0.2", 1236 | "@nodelib/fs.walk": "^1.2.3", 1237 | "glob-parent": "^5.1.2", 1238 | "merge2": "^1.3.0", 1239 | "micromatch": "^4.0.4" 1240 | }, 1241 | "engines": { 1242 | "node": ">=8.6.0" 1243 | } 1244 | }, 1245 | "node_modules/fast-glob/node_modules/glob-parent": { 1246 | "version": "5.1.2", 1247 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1248 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1249 | "dev": true, 1250 | "dependencies": { 1251 | "is-glob": "^4.0.1" 1252 | }, 1253 | "engines": { 1254 | "node": ">= 6" 1255 | } 1256 | }, 1257 | "node_modules/fast-json-stable-stringify": { 1258 | "version": "2.1.0", 1259 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1260 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1261 | "dev": true, 1262 | "peer": true 1263 | }, 1264 | "node_modules/fast-levenshtein": { 1265 | "version": "2.0.6", 1266 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1267 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1268 | "dev": true, 1269 | "peer": true 1270 | }, 1271 | "node_modules/fastq": { 1272 | "version": "1.15.0", 1273 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1274 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1275 | "dev": true, 1276 | "dependencies": { 1277 | "reusify": "^1.0.4" 1278 | } 1279 | }, 1280 | "node_modules/file-entry-cache": { 1281 | "version": "6.0.1", 1282 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1283 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1284 | "dev": true, 1285 | "peer": true, 1286 | "dependencies": { 1287 | "flat-cache": "^3.0.4" 1288 | }, 1289 | "engines": { 1290 | "node": "^10.12.0 || >=12.0.0" 1291 | } 1292 | }, 1293 | "node_modules/fill-range": { 1294 | "version": "7.0.1", 1295 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1296 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1297 | "dev": true, 1298 | "dependencies": { 1299 | "to-regex-range": "^5.0.1" 1300 | }, 1301 | "engines": { 1302 | "node": ">=8" 1303 | } 1304 | }, 1305 | "node_modules/find-up": { 1306 | "version": "5.0.0", 1307 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1308 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1309 | "dev": true, 1310 | "peer": true, 1311 | "dependencies": { 1312 | "locate-path": "^6.0.0", 1313 | "path-exists": "^4.0.0" 1314 | }, 1315 | "engines": { 1316 | "node": ">=10" 1317 | }, 1318 | "funding": { 1319 | "url": "https://github.com/sponsors/sindresorhus" 1320 | } 1321 | }, 1322 | "node_modules/flat-cache": { 1323 | "version": "3.0.4", 1324 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1325 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1326 | "dev": true, 1327 | "peer": true, 1328 | "dependencies": { 1329 | "flatted": "^3.1.0", 1330 | "rimraf": "^3.0.2" 1331 | }, 1332 | "engines": { 1333 | "node": "^10.12.0 || >=12.0.0" 1334 | } 1335 | }, 1336 | "node_modules/flatted": { 1337 | "version": "3.2.7", 1338 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 1339 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 1340 | "dev": true, 1341 | "peer": true 1342 | }, 1343 | "node_modules/fs.realpath": { 1344 | "version": "1.0.0", 1345 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1346 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1347 | "dev": true, 1348 | "peer": true 1349 | }, 1350 | "node_modules/functional-red-black-tree": { 1351 | "version": "1.0.1", 1352 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1353 | "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", 1354 | "dev": true 1355 | }, 1356 | "node_modules/glob": { 1357 | "version": "7.2.3", 1358 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1359 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1360 | "dev": true, 1361 | "peer": true, 1362 | "dependencies": { 1363 | "fs.realpath": "^1.0.0", 1364 | "inflight": "^1.0.4", 1365 | "inherits": "2", 1366 | "minimatch": "^3.1.1", 1367 | "once": "^1.3.0", 1368 | "path-is-absolute": "^1.0.0" 1369 | }, 1370 | "engines": { 1371 | "node": "*" 1372 | }, 1373 | "funding": { 1374 | "url": "https://github.com/sponsors/isaacs" 1375 | } 1376 | }, 1377 | "node_modules/glob-parent": { 1378 | "version": "6.0.2", 1379 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1380 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1381 | "dev": true, 1382 | "peer": true, 1383 | "dependencies": { 1384 | "is-glob": "^4.0.3" 1385 | }, 1386 | "engines": { 1387 | "node": ">=10.13.0" 1388 | } 1389 | }, 1390 | "node_modules/globals": { 1391 | "version": "13.20.0", 1392 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 1393 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 1394 | "dev": true, 1395 | "peer": true, 1396 | "dependencies": { 1397 | "type-fest": "^0.20.2" 1398 | }, 1399 | "engines": { 1400 | "node": ">=8" 1401 | }, 1402 | "funding": { 1403 | "url": "https://github.com/sponsors/sindresorhus" 1404 | } 1405 | }, 1406 | "node_modules/globby": { 1407 | "version": "11.1.0", 1408 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1409 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1410 | "dev": true, 1411 | "dependencies": { 1412 | "array-union": "^2.1.0", 1413 | "dir-glob": "^3.0.1", 1414 | "fast-glob": "^3.2.9", 1415 | "ignore": "^5.2.0", 1416 | "merge2": "^1.4.1", 1417 | "slash": "^3.0.0" 1418 | }, 1419 | "engines": { 1420 | "node": ">=10" 1421 | }, 1422 | "funding": { 1423 | "url": "https://github.com/sponsors/sindresorhus" 1424 | } 1425 | }, 1426 | "node_modules/grapheme-splitter": { 1427 | "version": "1.0.4", 1428 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", 1429 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", 1430 | "dev": true, 1431 | "peer": true 1432 | }, 1433 | "node_modules/has-flag": { 1434 | "version": "4.0.0", 1435 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1436 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1437 | "dev": true, 1438 | "peer": true, 1439 | "engines": { 1440 | "node": ">=8" 1441 | } 1442 | }, 1443 | "node_modules/ignore": { 1444 | "version": "5.2.4", 1445 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 1446 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 1447 | "dev": true, 1448 | "engines": { 1449 | "node": ">= 4" 1450 | } 1451 | }, 1452 | "node_modules/import-fresh": { 1453 | "version": "3.3.0", 1454 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1455 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1456 | "dev": true, 1457 | "peer": true, 1458 | "dependencies": { 1459 | "parent-module": "^1.0.0", 1460 | "resolve-from": "^4.0.0" 1461 | }, 1462 | "engines": { 1463 | "node": ">=6" 1464 | }, 1465 | "funding": { 1466 | "url": "https://github.com/sponsors/sindresorhus" 1467 | } 1468 | }, 1469 | "node_modules/imurmurhash": { 1470 | "version": "0.1.4", 1471 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1472 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1473 | "dev": true, 1474 | "peer": true, 1475 | "engines": { 1476 | "node": ">=0.8.19" 1477 | } 1478 | }, 1479 | "node_modules/inflight": { 1480 | "version": "1.0.6", 1481 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1482 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1483 | "dev": true, 1484 | "peer": true, 1485 | "dependencies": { 1486 | "once": "^1.3.0", 1487 | "wrappy": "1" 1488 | } 1489 | }, 1490 | "node_modules/inherits": { 1491 | "version": "2.0.4", 1492 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1493 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1494 | "dev": true, 1495 | "peer": true 1496 | }, 1497 | "node_modules/is-extglob": { 1498 | "version": "2.1.1", 1499 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1500 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1501 | "dev": true, 1502 | "engines": { 1503 | "node": ">=0.10.0" 1504 | } 1505 | }, 1506 | "node_modules/is-glob": { 1507 | "version": "4.0.3", 1508 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1509 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1510 | "dev": true, 1511 | "dependencies": { 1512 | "is-extglob": "^2.1.1" 1513 | }, 1514 | "engines": { 1515 | "node": ">=0.10.0" 1516 | } 1517 | }, 1518 | "node_modules/is-number": { 1519 | "version": "7.0.0", 1520 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1521 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1522 | "dev": true, 1523 | "engines": { 1524 | "node": ">=0.12.0" 1525 | } 1526 | }, 1527 | "node_modules/is-path-inside": { 1528 | "version": "3.0.3", 1529 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1530 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1531 | "dev": true, 1532 | "peer": true, 1533 | "engines": { 1534 | "node": ">=8" 1535 | } 1536 | }, 1537 | "node_modules/isexe": { 1538 | "version": "2.0.0", 1539 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1540 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1541 | "dev": true, 1542 | "peer": true 1543 | }, 1544 | "node_modules/js-sdsl": { 1545 | "version": "4.3.0", 1546 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", 1547 | "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", 1548 | "dev": true, 1549 | "peer": true, 1550 | "funding": { 1551 | "type": "opencollective", 1552 | "url": "https://opencollective.com/js-sdsl" 1553 | } 1554 | }, 1555 | "node_modules/js-yaml": { 1556 | "version": "4.1.0", 1557 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1558 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1559 | "dev": true, 1560 | "peer": true, 1561 | "dependencies": { 1562 | "argparse": "^2.0.1" 1563 | }, 1564 | "bin": { 1565 | "js-yaml": "bin/js-yaml.js" 1566 | } 1567 | }, 1568 | "node_modules/json-schema-traverse": { 1569 | "version": "0.4.1", 1570 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1571 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1572 | "dev": true, 1573 | "peer": true 1574 | }, 1575 | "node_modules/json-stable-stringify-without-jsonify": { 1576 | "version": "1.0.1", 1577 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1578 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1579 | "dev": true, 1580 | "peer": true 1581 | }, 1582 | "node_modules/levn": { 1583 | "version": "0.4.1", 1584 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1585 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1586 | "dev": true, 1587 | "peer": true, 1588 | "dependencies": { 1589 | "prelude-ls": "^1.2.1", 1590 | "type-check": "~0.4.0" 1591 | }, 1592 | "engines": { 1593 | "node": ">= 0.8.0" 1594 | } 1595 | }, 1596 | "node_modules/locate-path": { 1597 | "version": "6.0.0", 1598 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1599 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1600 | "dev": true, 1601 | "peer": true, 1602 | "dependencies": { 1603 | "p-locate": "^5.0.0" 1604 | }, 1605 | "engines": { 1606 | "node": ">=10" 1607 | }, 1608 | "funding": { 1609 | "url": "https://github.com/sponsors/sindresorhus" 1610 | } 1611 | }, 1612 | "node_modules/lodash.merge": { 1613 | "version": "4.6.2", 1614 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1615 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1616 | "dev": true, 1617 | "peer": true 1618 | }, 1619 | "node_modules/lru-cache": { 1620 | "version": "6.0.0", 1621 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1622 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1623 | "dev": true, 1624 | "dependencies": { 1625 | "yallist": "^4.0.0" 1626 | }, 1627 | "engines": { 1628 | "node": ">=10" 1629 | } 1630 | }, 1631 | "node_modules/merge2": { 1632 | "version": "1.4.1", 1633 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1634 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1635 | "dev": true, 1636 | "engines": { 1637 | "node": ">= 8" 1638 | } 1639 | }, 1640 | "node_modules/micromatch": { 1641 | "version": "4.0.5", 1642 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1643 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1644 | "dev": true, 1645 | "dependencies": { 1646 | "braces": "^3.0.2", 1647 | "picomatch": "^2.3.1" 1648 | }, 1649 | "engines": { 1650 | "node": ">=8.6" 1651 | } 1652 | }, 1653 | "node_modules/minimatch": { 1654 | "version": "3.1.2", 1655 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1656 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1657 | "dev": true, 1658 | "peer": true, 1659 | "dependencies": { 1660 | "brace-expansion": "^1.1.7" 1661 | }, 1662 | "engines": { 1663 | "node": "*" 1664 | } 1665 | }, 1666 | "node_modules/moment": { 1667 | "version": "2.29.4", 1668 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 1669 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 1670 | "dev": true, 1671 | "engines": { 1672 | "node": "*" 1673 | } 1674 | }, 1675 | "node_modules/ms": { 1676 | "version": "2.1.2", 1677 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1678 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1679 | "dev": true 1680 | }, 1681 | "node_modules/natural-compare": { 1682 | "version": "1.4.0", 1683 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1684 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1685 | "dev": true, 1686 | "peer": true 1687 | }, 1688 | "node_modules/obsidian": { 1689 | "version": "1.1.1", 1690 | "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.1.1.tgz", 1691 | "integrity": "sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==", 1692 | "dev": true, 1693 | "dependencies": { 1694 | "@types/codemirror": "0.0.108", 1695 | "moment": "2.29.4" 1696 | }, 1697 | "peerDependencies": { 1698 | "@codemirror/state": "^6.0.0", 1699 | "@codemirror/view": "^6.0.0" 1700 | } 1701 | }, 1702 | "node_modules/once": { 1703 | "version": "1.4.0", 1704 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1705 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1706 | "dev": true, 1707 | "peer": true, 1708 | "dependencies": { 1709 | "wrappy": "1" 1710 | } 1711 | }, 1712 | "node_modules/optionator": { 1713 | "version": "0.9.1", 1714 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1715 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1716 | "dev": true, 1717 | "peer": true, 1718 | "dependencies": { 1719 | "deep-is": "^0.1.3", 1720 | "fast-levenshtein": "^2.0.6", 1721 | "levn": "^0.4.1", 1722 | "prelude-ls": "^1.2.1", 1723 | "type-check": "^0.4.0", 1724 | "word-wrap": "^1.2.3" 1725 | }, 1726 | "engines": { 1727 | "node": ">= 0.8.0" 1728 | } 1729 | }, 1730 | "node_modules/p-limit": { 1731 | "version": "3.1.0", 1732 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1733 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1734 | "dev": true, 1735 | "peer": true, 1736 | "dependencies": { 1737 | "yocto-queue": "^0.1.0" 1738 | }, 1739 | "engines": { 1740 | "node": ">=10" 1741 | }, 1742 | "funding": { 1743 | "url": "https://github.com/sponsors/sindresorhus" 1744 | } 1745 | }, 1746 | "node_modules/p-locate": { 1747 | "version": "5.0.0", 1748 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1749 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1750 | "dev": true, 1751 | "peer": true, 1752 | "dependencies": { 1753 | "p-limit": "^3.0.2" 1754 | }, 1755 | "engines": { 1756 | "node": ">=10" 1757 | }, 1758 | "funding": { 1759 | "url": "https://github.com/sponsors/sindresorhus" 1760 | } 1761 | }, 1762 | "node_modules/parent-module": { 1763 | "version": "1.0.1", 1764 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1765 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1766 | "dev": true, 1767 | "peer": true, 1768 | "dependencies": { 1769 | "callsites": "^3.0.0" 1770 | }, 1771 | "engines": { 1772 | "node": ">=6" 1773 | } 1774 | }, 1775 | "node_modules/path-exists": { 1776 | "version": "4.0.0", 1777 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1778 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1779 | "dev": true, 1780 | "peer": true, 1781 | "engines": { 1782 | "node": ">=8" 1783 | } 1784 | }, 1785 | "node_modules/path-is-absolute": { 1786 | "version": "1.0.1", 1787 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1788 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1789 | "dev": true, 1790 | "peer": true, 1791 | "engines": { 1792 | "node": ">=0.10.0" 1793 | } 1794 | }, 1795 | "node_modules/path-key": { 1796 | "version": "3.1.1", 1797 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1798 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1799 | "dev": true, 1800 | "peer": true, 1801 | "engines": { 1802 | "node": ">=8" 1803 | } 1804 | }, 1805 | "node_modules/path-type": { 1806 | "version": "4.0.0", 1807 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1808 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1809 | "dev": true, 1810 | "engines": { 1811 | "node": ">=8" 1812 | } 1813 | }, 1814 | "node_modules/picomatch": { 1815 | "version": "2.3.1", 1816 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1817 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1818 | "dev": true, 1819 | "engines": { 1820 | "node": ">=8.6" 1821 | }, 1822 | "funding": { 1823 | "url": "https://github.com/sponsors/jonschlinkert" 1824 | } 1825 | }, 1826 | "node_modules/prelude-ls": { 1827 | "version": "1.2.1", 1828 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1829 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1830 | "dev": true, 1831 | "peer": true, 1832 | "engines": { 1833 | "node": ">= 0.8.0" 1834 | } 1835 | }, 1836 | "node_modules/punycode": { 1837 | "version": "2.3.0", 1838 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1839 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1840 | "dev": true, 1841 | "peer": true, 1842 | "engines": { 1843 | "node": ">=6" 1844 | } 1845 | }, 1846 | "node_modules/queue-microtask": { 1847 | "version": "1.2.3", 1848 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1849 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1850 | "dev": true, 1851 | "funding": [ 1852 | { 1853 | "type": "github", 1854 | "url": "https://github.com/sponsors/feross" 1855 | }, 1856 | { 1857 | "type": "patreon", 1858 | "url": "https://www.patreon.com/feross" 1859 | }, 1860 | { 1861 | "type": "consulting", 1862 | "url": "https://feross.org/support" 1863 | } 1864 | ] 1865 | }, 1866 | "node_modules/regexpp": { 1867 | "version": "3.2.0", 1868 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1869 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1870 | "dev": true, 1871 | "engines": { 1872 | "node": ">=8" 1873 | }, 1874 | "funding": { 1875 | "url": "https://github.com/sponsors/mysticatea" 1876 | } 1877 | }, 1878 | "node_modules/resolve-from": { 1879 | "version": "4.0.0", 1880 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1881 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1882 | "dev": true, 1883 | "peer": true, 1884 | "engines": { 1885 | "node": ">=4" 1886 | } 1887 | }, 1888 | "node_modules/reusify": { 1889 | "version": "1.0.4", 1890 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1891 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1892 | "dev": true, 1893 | "engines": { 1894 | "iojs": ">=1.0.0", 1895 | "node": ">=0.10.0" 1896 | } 1897 | }, 1898 | "node_modules/rimraf": { 1899 | "version": "3.0.2", 1900 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1901 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1902 | "dev": true, 1903 | "peer": true, 1904 | "dependencies": { 1905 | "glob": "^7.1.3" 1906 | }, 1907 | "bin": { 1908 | "rimraf": "bin.js" 1909 | }, 1910 | "funding": { 1911 | "url": "https://github.com/sponsors/isaacs" 1912 | } 1913 | }, 1914 | "node_modules/run-parallel": { 1915 | "version": "1.2.0", 1916 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1917 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1918 | "dev": true, 1919 | "funding": [ 1920 | { 1921 | "type": "github", 1922 | "url": "https://github.com/sponsors/feross" 1923 | }, 1924 | { 1925 | "type": "patreon", 1926 | "url": "https://www.patreon.com/feross" 1927 | }, 1928 | { 1929 | "type": "consulting", 1930 | "url": "https://feross.org/support" 1931 | } 1932 | ], 1933 | "dependencies": { 1934 | "queue-microtask": "^1.2.2" 1935 | } 1936 | }, 1937 | "node_modules/semver": { 1938 | "version": "7.3.8", 1939 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 1940 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 1941 | "dev": true, 1942 | "dependencies": { 1943 | "lru-cache": "^6.0.0" 1944 | }, 1945 | "bin": { 1946 | "semver": "bin/semver.js" 1947 | }, 1948 | "engines": { 1949 | "node": ">=10" 1950 | } 1951 | }, 1952 | "node_modules/shebang-command": { 1953 | "version": "2.0.0", 1954 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1955 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1956 | "dev": true, 1957 | "peer": true, 1958 | "dependencies": { 1959 | "shebang-regex": "^3.0.0" 1960 | }, 1961 | "engines": { 1962 | "node": ">=8" 1963 | } 1964 | }, 1965 | "node_modules/shebang-regex": { 1966 | "version": "3.0.0", 1967 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1968 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1969 | "dev": true, 1970 | "peer": true, 1971 | "engines": { 1972 | "node": ">=8" 1973 | } 1974 | }, 1975 | "node_modules/slash": { 1976 | "version": "3.0.0", 1977 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1978 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1979 | "dev": true, 1980 | "engines": { 1981 | "node": ">=8" 1982 | } 1983 | }, 1984 | "node_modules/strip-ansi": { 1985 | "version": "6.0.1", 1986 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1987 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1988 | "dev": true, 1989 | "peer": true, 1990 | "dependencies": { 1991 | "ansi-regex": "^5.0.1" 1992 | }, 1993 | "engines": { 1994 | "node": ">=8" 1995 | } 1996 | }, 1997 | "node_modules/strip-json-comments": { 1998 | "version": "3.1.1", 1999 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2000 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2001 | "dev": true, 2002 | "peer": true, 2003 | "engines": { 2004 | "node": ">=8" 2005 | }, 2006 | "funding": { 2007 | "url": "https://github.com/sponsors/sindresorhus" 2008 | } 2009 | }, 2010 | "node_modules/style-mod": { 2011 | "version": "4.0.0", 2012 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz", 2013 | "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", 2014 | "dev": true, 2015 | "peer": true 2016 | }, 2017 | "node_modules/supports-color": { 2018 | "version": "7.2.0", 2019 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2020 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2021 | "dev": true, 2022 | "peer": true, 2023 | "dependencies": { 2024 | "has-flag": "^4.0.0" 2025 | }, 2026 | "engines": { 2027 | "node": ">=8" 2028 | } 2029 | }, 2030 | "node_modules/text-table": { 2031 | "version": "0.2.0", 2032 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2033 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 2034 | "dev": true, 2035 | "peer": true 2036 | }, 2037 | "node_modules/to-regex-range": { 2038 | "version": "5.0.1", 2039 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2040 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2041 | "dev": true, 2042 | "dependencies": { 2043 | "is-number": "^7.0.0" 2044 | }, 2045 | "engines": { 2046 | "node": ">=8.0" 2047 | } 2048 | }, 2049 | "node_modules/tslib": { 2050 | "version": "2.4.0", 2051 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 2052 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 2053 | "dev": true 2054 | }, 2055 | "node_modules/tsutils": { 2056 | "version": "3.21.0", 2057 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", 2058 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", 2059 | "dev": true, 2060 | "dependencies": { 2061 | "tslib": "^1.8.1" 2062 | }, 2063 | "engines": { 2064 | "node": ">= 6" 2065 | }, 2066 | "peerDependencies": { 2067 | "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" 2068 | } 2069 | }, 2070 | "node_modules/tsutils/node_modules/tslib": { 2071 | "version": "1.14.1", 2072 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 2073 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 2074 | "dev": true 2075 | }, 2076 | "node_modules/type-check": { 2077 | "version": "0.4.0", 2078 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2079 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2080 | "dev": true, 2081 | "peer": true, 2082 | "dependencies": { 2083 | "prelude-ls": "^1.2.1" 2084 | }, 2085 | "engines": { 2086 | "node": ">= 0.8.0" 2087 | } 2088 | }, 2089 | "node_modules/type-fest": { 2090 | "version": "0.20.2", 2091 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2092 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2093 | "dev": true, 2094 | "peer": true, 2095 | "engines": { 2096 | "node": ">=10" 2097 | }, 2098 | "funding": { 2099 | "url": "https://github.com/sponsors/sindresorhus" 2100 | } 2101 | }, 2102 | "node_modules/typescript": { 2103 | "version": "4.7.4", 2104 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 2105 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 2106 | "dev": true, 2107 | "bin": { 2108 | "tsc": "bin/tsc", 2109 | "tsserver": "bin/tsserver" 2110 | }, 2111 | "engines": { 2112 | "node": ">=4.2.0" 2113 | } 2114 | }, 2115 | "node_modules/uri-js": { 2116 | "version": "4.4.1", 2117 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2118 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2119 | "dev": true, 2120 | "peer": true, 2121 | "dependencies": { 2122 | "punycode": "^2.1.0" 2123 | } 2124 | }, 2125 | "node_modules/w3c-keyname": { 2126 | "version": "2.2.6", 2127 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", 2128 | "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", 2129 | "dev": true, 2130 | "peer": true 2131 | }, 2132 | "node_modules/which": { 2133 | "version": "2.0.2", 2134 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2135 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2136 | "dev": true, 2137 | "peer": true, 2138 | "dependencies": { 2139 | "isexe": "^2.0.0" 2140 | }, 2141 | "bin": { 2142 | "node-which": "bin/node-which" 2143 | }, 2144 | "engines": { 2145 | "node": ">= 8" 2146 | } 2147 | }, 2148 | "node_modules/word-wrap": { 2149 | "version": "1.2.3", 2150 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2151 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2152 | "dev": true, 2153 | "peer": true, 2154 | "engines": { 2155 | "node": ">=0.10.0" 2156 | } 2157 | }, 2158 | "node_modules/wrappy": { 2159 | "version": "1.0.2", 2160 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2161 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2162 | "dev": true, 2163 | "peer": true 2164 | }, 2165 | "node_modules/yallist": { 2166 | "version": "4.0.0", 2167 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2168 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2169 | "dev": true 2170 | }, 2171 | "node_modules/yocto-queue": { 2172 | "version": "0.1.0", 2173 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2174 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2175 | "dev": true, 2176 | "peer": true, 2177 | "engines": { 2178 | "node": ">=10" 2179 | }, 2180 | "funding": { 2181 | "url": "https://github.com/sponsors/sindresorhus" 2182 | } 2183 | } 2184 | }, 2185 | "dependencies": { 2186 | "@codemirror/state": { 2187 | "version": "6.2.0", 2188 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.0.tgz", 2189 | "integrity": "sha512-69QXtcrsc3RYtOtd+GsvczJ319udtBf1PTrr2KbLWM/e2CXUPnh0Nz9AUo8WfhSQ7GeL8dPVNUmhQVgpmuaNGA==", 2190 | "dev": true, 2191 | "peer": true 2192 | }, 2193 | "@codemirror/view": { 2194 | "version": "6.9.1", 2195 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.9.1.tgz", 2196 | "integrity": "sha512-bzfSjJn9dAADVpabLKWKNmMG4ibyTV2e3eOGowjElNPTdTkSbi6ixPYHm2u0ADcETfKsi2/R84Rkmi91dH9yEg==", 2197 | "dev": true, 2198 | "peer": true, 2199 | "requires": { 2200 | "@codemirror/state": "^6.1.4", 2201 | "style-mod": "^4.0.0", 2202 | "w3c-keyname": "^2.2.4" 2203 | } 2204 | }, 2205 | "@esbuild/android-arm": { 2206 | "version": "0.17.3", 2207 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.3.tgz", 2208 | "integrity": "sha512-1Mlz934GvbgdDmt26rTLmf03cAgLg5HyOgJN+ZGCeP3Q9ynYTNMn2/LQxIl7Uy+o4K6Rfi2OuLsr12JQQR8gNg==", 2209 | "dev": true, 2210 | "optional": true 2211 | }, 2212 | "@esbuild/android-arm64": { 2213 | "version": "0.17.3", 2214 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.3.tgz", 2215 | "integrity": "sha512-XvJsYo3dO3Pi4kpalkyMvfQsjxPWHYjoX4MDiB/FUM4YMfWcXa5l4VCwFWVYI1+92yxqjuqrhNg0CZg3gSouyQ==", 2216 | "dev": true, 2217 | "optional": true 2218 | }, 2219 | "@esbuild/android-x64": { 2220 | "version": "0.17.3", 2221 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.3.tgz", 2222 | "integrity": "sha512-nuV2CmLS07Gqh5/GrZLuqkU9Bm6H6vcCspM+zjp9TdQlxJtIe+qqEXQChmfc7nWdyr/yz3h45Utk1tUn8Cz5+A==", 2223 | "dev": true, 2224 | "optional": true 2225 | }, 2226 | "@esbuild/darwin-arm64": { 2227 | "version": "0.17.3", 2228 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.3.tgz", 2229 | "integrity": "sha512-01Hxaaat6m0Xp9AXGM8mjFtqqwDjzlMP0eQq9zll9U85ttVALGCGDuEvra5Feu/NbP5AEP1MaopPwzsTcUq1cw==", 2230 | "dev": true, 2231 | "optional": true 2232 | }, 2233 | "@esbuild/darwin-x64": { 2234 | "version": "0.17.3", 2235 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.3.tgz", 2236 | "integrity": "sha512-Eo2gq0Q/er2muf8Z83X21UFoB7EU6/m3GNKvrhACJkjVThd0uA+8RfKpfNhuMCl1bKRfBzKOk6xaYKQZ4lZqvA==", 2237 | "dev": true, 2238 | "optional": true 2239 | }, 2240 | "@esbuild/freebsd-arm64": { 2241 | "version": "0.17.3", 2242 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.3.tgz", 2243 | "integrity": "sha512-CN62ESxaquP61n1ZjQP/jZte8CE09M6kNn3baos2SeUfdVBkWN5n6vGp2iKyb/bm/x4JQzEvJgRHLGd5F5b81w==", 2244 | "dev": true, 2245 | "optional": true 2246 | }, 2247 | "@esbuild/freebsd-x64": { 2248 | "version": "0.17.3", 2249 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.3.tgz", 2250 | "integrity": "sha512-feq+K8TxIznZE+zhdVurF3WNJ/Sa35dQNYbaqM/wsCbWdzXr5lyq+AaTUSER2cUR+SXPnd/EY75EPRjf4s1SLg==", 2251 | "dev": true, 2252 | "optional": true 2253 | }, 2254 | "@esbuild/linux-arm": { 2255 | "version": "0.17.3", 2256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.3.tgz", 2257 | "integrity": "sha512-CLP3EgyNuPcg2cshbwkqYy5bbAgK+VhyfMU7oIYyn+x4Y67xb5C5ylxsNUjRmr8BX+MW3YhVNm6Lq6FKtRTWHQ==", 2258 | "dev": true, 2259 | "optional": true 2260 | }, 2261 | "@esbuild/linux-arm64": { 2262 | "version": "0.17.3", 2263 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.3.tgz", 2264 | "integrity": "sha512-JHeZXD4auLYBnrKn6JYJ0o5nWJI9PhChA/Nt0G4MvLaMrvXuWnY93R3a7PiXeJQphpL1nYsaMcoV2QtuvRnF/g==", 2265 | "dev": true, 2266 | "optional": true 2267 | }, 2268 | "@esbuild/linux-ia32": { 2269 | "version": "0.17.3", 2270 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.3.tgz", 2271 | "integrity": "sha512-FyXlD2ZjZqTFh0sOQxFDiWG1uQUEOLbEh9gKN/7pFxck5Vw0qjWSDqbn6C10GAa1rXJpwsntHcmLqydY9ST9ZA==", 2272 | "dev": true, 2273 | "optional": true 2274 | }, 2275 | "@esbuild/linux-loong64": { 2276 | "version": "0.17.3", 2277 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.3.tgz", 2278 | "integrity": "sha512-OrDGMvDBI2g7s04J8dh8/I7eSO+/E7nMDT2Z5IruBfUO/RiigF1OF6xoH33Dn4W/OwAWSUf1s2nXamb28ZklTA==", 2279 | "dev": true, 2280 | "optional": true 2281 | }, 2282 | "@esbuild/linux-mips64el": { 2283 | "version": "0.17.3", 2284 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.3.tgz", 2285 | "integrity": "sha512-DcnUpXnVCJvmv0TzuLwKBC2nsQHle8EIiAJiJ+PipEVC16wHXaPEKP0EqN8WnBe0TPvMITOUlP2aiL5YMld+CQ==", 2286 | "dev": true, 2287 | "optional": true 2288 | }, 2289 | "@esbuild/linux-ppc64": { 2290 | "version": "0.17.3", 2291 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.3.tgz", 2292 | "integrity": "sha512-BDYf/l1WVhWE+FHAW3FzZPtVlk9QsrwsxGzABmN4g8bTjmhazsId3h127pliDRRu5674k1Y2RWejbpN46N9ZhQ==", 2293 | "dev": true, 2294 | "optional": true 2295 | }, 2296 | "@esbuild/linux-riscv64": { 2297 | "version": "0.17.3", 2298 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.3.tgz", 2299 | "integrity": "sha512-WViAxWYMRIi+prTJTyV1wnqd2mS2cPqJlN85oscVhXdb/ZTFJdrpaqm/uDsZPGKHtbg5TuRX/ymKdOSk41YZow==", 2300 | "dev": true, 2301 | "optional": true 2302 | }, 2303 | "@esbuild/linux-s390x": { 2304 | "version": "0.17.3", 2305 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.3.tgz", 2306 | "integrity": "sha512-Iw8lkNHUC4oGP1O/KhumcVy77u2s6+KUjieUqzEU3XuWJqZ+AY7uVMrrCbAiwWTkpQHkr00BuXH5RpC6Sb/7Ug==", 2307 | "dev": true, 2308 | "optional": true 2309 | }, 2310 | "@esbuild/linux-x64": { 2311 | "version": "0.17.3", 2312 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.3.tgz", 2313 | "integrity": "sha512-0AGkWQMzeoeAtXQRNB3s4J1/T2XbigM2/Mn2yU1tQSmQRmHIZdkGbVq2A3aDdNslPyhb9/lH0S5GMTZ4xsjBqg==", 2314 | "dev": true, 2315 | "optional": true 2316 | }, 2317 | "@esbuild/netbsd-x64": { 2318 | "version": "0.17.3", 2319 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.3.tgz", 2320 | "integrity": "sha512-4+rR/WHOxIVh53UIQIICryjdoKdHsFZFD4zLSonJ9RRw7bhKzVyXbnRPsWSfwybYqw9sB7ots/SYyufL1mBpEg==", 2321 | "dev": true, 2322 | "optional": true 2323 | }, 2324 | "@esbuild/openbsd-x64": { 2325 | "version": "0.17.3", 2326 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.3.tgz", 2327 | "integrity": "sha512-cVpWnkx9IYg99EjGxa5Gc0XmqumtAwK3aoz7O4Dii2vko+qXbkHoujWA68cqXjhh6TsLaQelfDO4MVnyr+ODeA==", 2328 | "dev": true, 2329 | "optional": true 2330 | }, 2331 | "@esbuild/sunos-x64": { 2332 | "version": "0.17.3", 2333 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.3.tgz", 2334 | "integrity": "sha512-RxmhKLbTCDAY2xOfrww6ieIZkZF+KBqG7S2Ako2SljKXRFi+0863PspK74QQ7JpmWwncChY25JTJSbVBYGQk2Q==", 2335 | "dev": true, 2336 | "optional": true 2337 | }, 2338 | "@esbuild/win32-arm64": { 2339 | "version": "0.17.3", 2340 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.3.tgz", 2341 | "integrity": "sha512-0r36VeEJ4efwmofxVJRXDjVRP2jTmv877zc+i+Pc7MNsIr38NfsjkQj23AfF7l0WbB+RQ7VUb+LDiqC/KY/M/A==", 2342 | "dev": true, 2343 | "optional": true 2344 | }, 2345 | "@esbuild/win32-ia32": { 2346 | "version": "0.17.3", 2347 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.3.tgz", 2348 | "integrity": "sha512-wgO6rc7uGStH22nur4aLFcq7Wh86bE9cOFmfTr/yxN3BXvDEdCSXyKkO+U5JIt53eTOgC47v9k/C1bITWL/Teg==", 2349 | "dev": true, 2350 | "optional": true 2351 | }, 2352 | "@esbuild/win32-x64": { 2353 | "version": "0.17.3", 2354 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.3.tgz", 2355 | "integrity": "sha512-FdVl64OIuiKjgXBjwZaJLKp0eaEckifbhn10dXWhysMJkWblg3OEEGKSIyhiD5RSgAya8WzP3DNkngtIg3Nt7g==", 2356 | "dev": true, 2357 | "optional": true 2358 | }, 2359 | "@eslint/eslintrc": { 2360 | "version": "2.0.0", 2361 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", 2362 | "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", 2363 | "dev": true, 2364 | "peer": true, 2365 | "requires": { 2366 | "ajv": "^6.12.4", 2367 | "debug": "^4.3.2", 2368 | "espree": "^9.4.0", 2369 | "globals": "^13.19.0", 2370 | "ignore": "^5.2.0", 2371 | "import-fresh": "^3.2.1", 2372 | "js-yaml": "^4.1.0", 2373 | "minimatch": "^3.1.2", 2374 | "strip-json-comments": "^3.1.1" 2375 | } 2376 | }, 2377 | "@eslint/js": { 2378 | "version": "8.35.0", 2379 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", 2380 | "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", 2381 | "dev": true, 2382 | "peer": true 2383 | }, 2384 | "@humanwhocodes/config-array": { 2385 | "version": "0.11.8", 2386 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", 2387 | "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", 2388 | "dev": true, 2389 | "peer": true, 2390 | "requires": { 2391 | "@humanwhocodes/object-schema": "^1.2.1", 2392 | "debug": "^4.1.1", 2393 | "minimatch": "^3.0.5" 2394 | } 2395 | }, 2396 | "@humanwhocodes/module-importer": { 2397 | "version": "1.0.1", 2398 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 2399 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 2400 | "dev": true, 2401 | "peer": true 2402 | }, 2403 | "@humanwhocodes/object-schema": { 2404 | "version": "1.2.1", 2405 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 2406 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 2407 | "dev": true, 2408 | "peer": true 2409 | }, 2410 | "@nodelib/fs.scandir": { 2411 | "version": "2.1.5", 2412 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 2413 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 2414 | "dev": true, 2415 | "requires": { 2416 | "@nodelib/fs.stat": "2.0.5", 2417 | "run-parallel": "^1.1.9" 2418 | } 2419 | }, 2420 | "@nodelib/fs.stat": { 2421 | "version": "2.0.5", 2422 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 2423 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 2424 | "dev": true 2425 | }, 2426 | "@nodelib/fs.walk": { 2427 | "version": "1.2.8", 2428 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 2429 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 2430 | "dev": true, 2431 | "requires": { 2432 | "@nodelib/fs.scandir": "2.1.5", 2433 | "fastq": "^1.6.0" 2434 | } 2435 | }, 2436 | "@types/codemirror": { 2437 | "version": "0.0.108", 2438 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz", 2439 | "integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==", 2440 | "dev": true, 2441 | "requires": { 2442 | "@types/tern": "*" 2443 | } 2444 | }, 2445 | "@types/estree": { 2446 | "version": "1.0.0", 2447 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", 2448 | "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", 2449 | "dev": true 2450 | }, 2451 | "@types/json-schema": { 2452 | "version": "7.0.11", 2453 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", 2454 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", 2455 | "dev": true 2456 | }, 2457 | "@types/node": { 2458 | "version": "16.18.13", 2459 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.13.tgz", 2460 | "integrity": "sha512-l0/3XZ153UTlNOnZK8xSNoJlQda9/WnYgiTdcKKPJSZjdjI9MU+A9oMXOesAWLSnqAaaJhj3qfQsU07Dr8OUwg==", 2461 | "dev": true 2462 | }, 2463 | "@types/tern": { 2464 | "version": "0.23.4", 2465 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", 2466 | "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", 2467 | "dev": true, 2468 | "requires": { 2469 | "@types/estree": "*" 2470 | } 2471 | }, 2472 | "@typescript-eslint/eslint-plugin": { 2473 | "version": "5.29.0", 2474 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", 2475 | "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", 2476 | "dev": true, 2477 | "requires": { 2478 | "@typescript-eslint/scope-manager": "5.29.0", 2479 | "@typescript-eslint/type-utils": "5.29.0", 2480 | "@typescript-eslint/utils": "5.29.0", 2481 | "debug": "^4.3.4", 2482 | "functional-red-black-tree": "^1.0.1", 2483 | "ignore": "^5.2.0", 2484 | "regexpp": "^3.2.0", 2485 | "semver": "^7.3.7", 2486 | "tsutils": "^3.21.0" 2487 | } 2488 | }, 2489 | "@typescript-eslint/parser": { 2490 | "version": "5.29.0", 2491 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", 2492 | "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", 2493 | "dev": true, 2494 | "requires": { 2495 | "@typescript-eslint/scope-manager": "5.29.0", 2496 | "@typescript-eslint/types": "5.29.0", 2497 | "@typescript-eslint/typescript-estree": "5.29.0", 2498 | "debug": "^4.3.4" 2499 | } 2500 | }, 2501 | "@typescript-eslint/scope-manager": { 2502 | "version": "5.29.0", 2503 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", 2504 | "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", 2505 | "dev": true, 2506 | "requires": { 2507 | "@typescript-eslint/types": "5.29.0", 2508 | "@typescript-eslint/visitor-keys": "5.29.0" 2509 | } 2510 | }, 2511 | "@typescript-eslint/type-utils": { 2512 | "version": "5.29.0", 2513 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", 2514 | "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", 2515 | "dev": true, 2516 | "requires": { 2517 | "@typescript-eslint/utils": "5.29.0", 2518 | "debug": "^4.3.4", 2519 | "tsutils": "^3.21.0" 2520 | } 2521 | }, 2522 | "@typescript-eslint/types": { 2523 | "version": "5.29.0", 2524 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", 2525 | "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", 2526 | "dev": true 2527 | }, 2528 | "@typescript-eslint/typescript-estree": { 2529 | "version": "5.29.0", 2530 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", 2531 | "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", 2532 | "dev": true, 2533 | "requires": { 2534 | "@typescript-eslint/types": "5.29.0", 2535 | "@typescript-eslint/visitor-keys": "5.29.0", 2536 | "debug": "^4.3.4", 2537 | "globby": "^11.1.0", 2538 | "is-glob": "^4.0.3", 2539 | "semver": "^7.3.7", 2540 | "tsutils": "^3.21.0" 2541 | } 2542 | }, 2543 | "@typescript-eslint/utils": { 2544 | "version": "5.29.0", 2545 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", 2546 | "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", 2547 | "dev": true, 2548 | "requires": { 2549 | "@types/json-schema": "^7.0.9", 2550 | "@typescript-eslint/scope-manager": "5.29.0", 2551 | "@typescript-eslint/types": "5.29.0", 2552 | "@typescript-eslint/typescript-estree": "5.29.0", 2553 | "eslint-scope": "^5.1.1", 2554 | "eslint-utils": "^3.0.0" 2555 | } 2556 | }, 2557 | "@typescript-eslint/visitor-keys": { 2558 | "version": "5.29.0", 2559 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", 2560 | "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", 2561 | "dev": true, 2562 | "requires": { 2563 | "@typescript-eslint/types": "5.29.0", 2564 | "eslint-visitor-keys": "^3.3.0" 2565 | } 2566 | }, 2567 | "acorn": { 2568 | "version": "8.8.2", 2569 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 2570 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 2571 | "dev": true, 2572 | "peer": true 2573 | }, 2574 | "acorn-jsx": { 2575 | "version": "5.3.2", 2576 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 2577 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 2578 | "dev": true, 2579 | "peer": true, 2580 | "requires": {} 2581 | }, 2582 | "ajv": { 2583 | "version": "6.12.6", 2584 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2585 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2586 | "dev": true, 2587 | "peer": true, 2588 | "requires": { 2589 | "fast-deep-equal": "^3.1.1", 2590 | "fast-json-stable-stringify": "^2.0.0", 2591 | "json-schema-traverse": "^0.4.1", 2592 | "uri-js": "^4.2.2" 2593 | } 2594 | }, 2595 | "ansi-regex": { 2596 | "version": "5.0.1", 2597 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2598 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2599 | "dev": true, 2600 | "peer": true 2601 | }, 2602 | "ansi-styles": { 2603 | "version": "4.3.0", 2604 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2605 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2606 | "dev": true, 2607 | "peer": true, 2608 | "requires": { 2609 | "color-convert": "^2.0.1" 2610 | } 2611 | }, 2612 | "argparse": { 2613 | "version": "2.0.1", 2614 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2615 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2616 | "dev": true, 2617 | "peer": true 2618 | }, 2619 | "array-union": { 2620 | "version": "2.1.0", 2621 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 2622 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 2623 | "dev": true 2624 | }, 2625 | "balanced-match": { 2626 | "version": "1.0.2", 2627 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2628 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2629 | "dev": true, 2630 | "peer": true 2631 | }, 2632 | "brace-expansion": { 2633 | "version": "1.1.11", 2634 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2635 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2636 | "dev": true, 2637 | "peer": true, 2638 | "requires": { 2639 | "balanced-match": "^1.0.0", 2640 | "concat-map": "0.0.1" 2641 | } 2642 | }, 2643 | "braces": { 2644 | "version": "3.0.2", 2645 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2646 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2647 | "dev": true, 2648 | "requires": { 2649 | "fill-range": "^7.0.1" 2650 | } 2651 | }, 2652 | "builtin-modules": { 2653 | "version": "3.3.0", 2654 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 2655 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 2656 | "dev": true 2657 | }, 2658 | "callsites": { 2659 | "version": "3.1.0", 2660 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 2661 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 2662 | "dev": true, 2663 | "peer": true 2664 | }, 2665 | "chalk": { 2666 | "version": "4.1.2", 2667 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2668 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2669 | "dev": true, 2670 | "peer": true, 2671 | "requires": { 2672 | "ansi-styles": "^4.1.0", 2673 | "supports-color": "^7.1.0" 2674 | } 2675 | }, 2676 | "color-convert": { 2677 | "version": "2.0.1", 2678 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2679 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2680 | "dev": true, 2681 | "peer": true, 2682 | "requires": { 2683 | "color-name": "~1.1.4" 2684 | } 2685 | }, 2686 | "color-name": { 2687 | "version": "1.1.4", 2688 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2689 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2690 | "dev": true, 2691 | "peer": true 2692 | }, 2693 | "concat-map": { 2694 | "version": "0.0.1", 2695 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2696 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 2697 | "dev": true, 2698 | "peer": true 2699 | }, 2700 | "cross-spawn": { 2701 | "version": "7.0.3", 2702 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 2703 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 2704 | "dev": true, 2705 | "peer": true, 2706 | "requires": { 2707 | "path-key": "^3.1.0", 2708 | "shebang-command": "^2.0.0", 2709 | "which": "^2.0.1" 2710 | } 2711 | }, 2712 | "debug": { 2713 | "version": "4.3.4", 2714 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2715 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2716 | "dev": true, 2717 | "requires": { 2718 | "ms": "2.1.2" 2719 | } 2720 | }, 2721 | "deep-is": { 2722 | "version": "0.1.4", 2723 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2724 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2725 | "dev": true, 2726 | "peer": true 2727 | }, 2728 | "dir-glob": { 2729 | "version": "3.0.1", 2730 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 2731 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 2732 | "dev": true, 2733 | "requires": { 2734 | "path-type": "^4.0.0" 2735 | } 2736 | }, 2737 | "doctrine": { 2738 | "version": "3.0.0", 2739 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 2740 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 2741 | "dev": true, 2742 | "peer": true, 2743 | "requires": { 2744 | "esutils": "^2.0.2" 2745 | } 2746 | }, 2747 | "esbuild": { 2748 | "version": "0.17.3", 2749 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.3.tgz", 2750 | "integrity": "sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g==", 2751 | "dev": true, 2752 | "requires": { 2753 | "@esbuild/android-arm": "0.17.3", 2754 | "@esbuild/android-arm64": "0.17.3", 2755 | "@esbuild/android-x64": "0.17.3", 2756 | "@esbuild/darwin-arm64": "0.17.3", 2757 | "@esbuild/darwin-x64": "0.17.3", 2758 | "@esbuild/freebsd-arm64": "0.17.3", 2759 | "@esbuild/freebsd-x64": "0.17.3", 2760 | "@esbuild/linux-arm": "0.17.3", 2761 | "@esbuild/linux-arm64": "0.17.3", 2762 | "@esbuild/linux-ia32": "0.17.3", 2763 | "@esbuild/linux-loong64": "0.17.3", 2764 | "@esbuild/linux-mips64el": "0.17.3", 2765 | "@esbuild/linux-ppc64": "0.17.3", 2766 | "@esbuild/linux-riscv64": "0.17.3", 2767 | "@esbuild/linux-s390x": "0.17.3", 2768 | "@esbuild/linux-x64": "0.17.3", 2769 | "@esbuild/netbsd-x64": "0.17.3", 2770 | "@esbuild/openbsd-x64": "0.17.3", 2771 | "@esbuild/sunos-x64": "0.17.3", 2772 | "@esbuild/win32-arm64": "0.17.3", 2773 | "@esbuild/win32-ia32": "0.17.3", 2774 | "@esbuild/win32-x64": "0.17.3" 2775 | } 2776 | }, 2777 | "escape-string-regexp": { 2778 | "version": "4.0.0", 2779 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2780 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2781 | "dev": true, 2782 | "peer": true 2783 | }, 2784 | "eslint": { 2785 | "version": "8.35.0", 2786 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", 2787 | "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", 2788 | "dev": true, 2789 | "peer": true, 2790 | "requires": { 2791 | "@eslint/eslintrc": "^2.0.0", 2792 | "@eslint/js": "8.35.0", 2793 | "@humanwhocodes/config-array": "^0.11.8", 2794 | "@humanwhocodes/module-importer": "^1.0.1", 2795 | "@nodelib/fs.walk": "^1.2.8", 2796 | "ajv": "^6.10.0", 2797 | "chalk": "^4.0.0", 2798 | "cross-spawn": "^7.0.2", 2799 | "debug": "^4.3.2", 2800 | "doctrine": "^3.0.0", 2801 | "escape-string-regexp": "^4.0.0", 2802 | "eslint-scope": "^7.1.1", 2803 | "eslint-utils": "^3.0.0", 2804 | "eslint-visitor-keys": "^3.3.0", 2805 | "espree": "^9.4.0", 2806 | "esquery": "^1.4.2", 2807 | "esutils": "^2.0.2", 2808 | "fast-deep-equal": "^3.1.3", 2809 | "file-entry-cache": "^6.0.1", 2810 | "find-up": "^5.0.0", 2811 | "glob-parent": "^6.0.2", 2812 | "globals": "^13.19.0", 2813 | "grapheme-splitter": "^1.0.4", 2814 | "ignore": "^5.2.0", 2815 | "import-fresh": "^3.0.0", 2816 | "imurmurhash": "^0.1.4", 2817 | "is-glob": "^4.0.0", 2818 | "is-path-inside": "^3.0.3", 2819 | "js-sdsl": "^4.1.4", 2820 | "js-yaml": "^4.1.0", 2821 | "json-stable-stringify-without-jsonify": "^1.0.1", 2822 | "levn": "^0.4.1", 2823 | "lodash.merge": "^4.6.2", 2824 | "minimatch": "^3.1.2", 2825 | "natural-compare": "^1.4.0", 2826 | "optionator": "^0.9.1", 2827 | "regexpp": "^3.2.0", 2828 | "strip-ansi": "^6.0.1", 2829 | "strip-json-comments": "^3.1.0", 2830 | "text-table": "^0.2.0" 2831 | }, 2832 | "dependencies": { 2833 | "eslint-scope": { 2834 | "version": "7.1.1", 2835 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 2836 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 2837 | "dev": true, 2838 | "peer": true, 2839 | "requires": { 2840 | "esrecurse": "^4.3.0", 2841 | "estraverse": "^5.2.0" 2842 | } 2843 | }, 2844 | "estraverse": { 2845 | "version": "5.3.0", 2846 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2847 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2848 | "dev": true, 2849 | "peer": true 2850 | } 2851 | } 2852 | }, 2853 | "eslint-scope": { 2854 | "version": "5.1.1", 2855 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 2856 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 2857 | "dev": true, 2858 | "requires": { 2859 | "esrecurse": "^4.3.0", 2860 | "estraverse": "^4.1.1" 2861 | } 2862 | }, 2863 | "eslint-utils": { 2864 | "version": "3.0.0", 2865 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 2866 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 2867 | "dev": true, 2868 | "requires": { 2869 | "eslint-visitor-keys": "^2.0.0" 2870 | }, 2871 | "dependencies": { 2872 | "eslint-visitor-keys": { 2873 | "version": "2.1.0", 2874 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 2875 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 2876 | "dev": true 2877 | } 2878 | } 2879 | }, 2880 | "eslint-visitor-keys": { 2881 | "version": "3.3.0", 2882 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 2883 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 2884 | "dev": true 2885 | }, 2886 | "espree": { 2887 | "version": "9.4.1", 2888 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", 2889 | "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", 2890 | "dev": true, 2891 | "peer": true, 2892 | "requires": { 2893 | "acorn": "^8.8.0", 2894 | "acorn-jsx": "^5.3.2", 2895 | "eslint-visitor-keys": "^3.3.0" 2896 | } 2897 | }, 2898 | "esquery": { 2899 | "version": "1.4.2", 2900 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", 2901 | "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", 2902 | "dev": true, 2903 | "peer": true, 2904 | "requires": { 2905 | "estraverse": "^5.1.0" 2906 | }, 2907 | "dependencies": { 2908 | "estraverse": { 2909 | "version": "5.3.0", 2910 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2911 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2912 | "dev": true, 2913 | "peer": true 2914 | } 2915 | } 2916 | }, 2917 | "esrecurse": { 2918 | "version": "4.3.0", 2919 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2920 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2921 | "dev": true, 2922 | "requires": { 2923 | "estraverse": "^5.2.0" 2924 | }, 2925 | "dependencies": { 2926 | "estraverse": { 2927 | "version": "5.3.0", 2928 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2929 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2930 | "dev": true 2931 | } 2932 | } 2933 | }, 2934 | "estraverse": { 2935 | "version": "4.3.0", 2936 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 2937 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 2938 | "dev": true 2939 | }, 2940 | "esutils": { 2941 | "version": "2.0.3", 2942 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2943 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2944 | "dev": true, 2945 | "peer": true 2946 | }, 2947 | "fast-deep-equal": { 2948 | "version": "3.1.3", 2949 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2950 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2951 | "dev": true, 2952 | "peer": true 2953 | }, 2954 | "fast-glob": { 2955 | "version": "3.2.12", 2956 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 2957 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 2958 | "dev": true, 2959 | "requires": { 2960 | "@nodelib/fs.stat": "^2.0.2", 2961 | "@nodelib/fs.walk": "^1.2.3", 2962 | "glob-parent": "^5.1.2", 2963 | "merge2": "^1.3.0", 2964 | "micromatch": "^4.0.4" 2965 | }, 2966 | "dependencies": { 2967 | "glob-parent": { 2968 | "version": "5.1.2", 2969 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2970 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2971 | "dev": true, 2972 | "requires": { 2973 | "is-glob": "^4.0.1" 2974 | } 2975 | } 2976 | } 2977 | }, 2978 | "fast-json-stable-stringify": { 2979 | "version": "2.1.0", 2980 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2981 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2982 | "dev": true, 2983 | "peer": true 2984 | }, 2985 | "fast-levenshtein": { 2986 | "version": "2.0.6", 2987 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2988 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2989 | "dev": true, 2990 | "peer": true 2991 | }, 2992 | "fastq": { 2993 | "version": "1.15.0", 2994 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 2995 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 2996 | "dev": true, 2997 | "requires": { 2998 | "reusify": "^1.0.4" 2999 | } 3000 | }, 3001 | "file-entry-cache": { 3002 | "version": "6.0.1", 3003 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 3004 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 3005 | "dev": true, 3006 | "peer": true, 3007 | "requires": { 3008 | "flat-cache": "^3.0.4" 3009 | } 3010 | }, 3011 | "fill-range": { 3012 | "version": "7.0.1", 3013 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 3014 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 3015 | "dev": true, 3016 | "requires": { 3017 | "to-regex-range": "^5.0.1" 3018 | } 3019 | }, 3020 | "find-up": { 3021 | "version": "5.0.0", 3022 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 3023 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 3024 | "dev": true, 3025 | "peer": true, 3026 | "requires": { 3027 | "locate-path": "^6.0.0", 3028 | "path-exists": "^4.0.0" 3029 | } 3030 | }, 3031 | "flat-cache": { 3032 | "version": "3.0.4", 3033 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 3034 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 3035 | "dev": true, 3036 | "peer": true, 3037 | "requires": { 3038 | "flatted": "^3.1.0", 3039 | "rimraf": "^3.0.2" 3040 | } 3041 | }, 3042 | "flatted": { 3043 | "version": "3.2.7", 3044 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 3045 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 3046 | "dev": true, 3047 | "peer": true 3048 | }, 3049 | "fs.realpath": { 3050 | "version": "1.0.0", 3051 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 3052 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 3053 | "dev": true, 3054 | "peer": true 3055 | }, 3056 | "functional-red-black-tree": { 3057 | "version": "1.0.1", 3058 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 3059 | "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", 3060 | "dev": true 3061 | }, 3062 | "glob": { 3063 | "version": "7.2.3", 3064 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 3065 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 3066 | "dev": true, 3067 | "peer": true, 3068 | "requires": { 3069 | "fs.realpath": "^1.0.0", 3070 | "inflight": "^1.0.4", 3071 | "inherits": "2", 3072 | "minimatch": "^3.1.1", 3073 | "once": "^1.3.0", 3074 | "path-is-absolute": "^1.0.0" 3075 | } 3076 | }, 3077 | "glob-parent": { 3078 | "version": "6.0.2", 3079 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 3080 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 3081 | "dev": true, 3082 | "peer": true, 3083 | "requires": { 3084 | "is-glob": "^4.0.3" 3085 | } 3086 | }, 3087 | "globals": { 3088 | "version": "13.20.0", 3089 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 3090 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 3091 | "dev": true, 3092 | "peer": true, 3093 | "requires": { 3094 | "type-fest": "^0.20.2" 3095 | } 3096 | }, 3097 | "globby": { 3098 | "version": "11.1.0", 3099 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 3100 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 3101 | "dev": true, 3102 | "requires": { 3103 | "array-union": "^2.1.0", 3104 | "dir-glob": "^3.0.1", 3105 | "fast-glob": "^3.2.9", 3106 | "ignore": "^5.2.0", 3107 | "merge2": "^1.4.1", 3108 | "slash": "^3.0.0" 3109 | } 3110 | }, 3111 | "grapheme-splitter": { 3112 | "version": "1.0.4", 3113 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", 3114 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", 3115 | "dev": true, 3116 | "peer": true 3117 | }, 3118 | "has-flag": { 3119 | "version": "4.0.0", 3120 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3121 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3122 | "dev": true, 3123 | "peer": true 3124 | }, 3125 | "ignore": { 3126 | "version": "5.2.4", 3127 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 3128 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 3129 | "dev": true 3130 | }, 3131 | "import-fresh": { 3132 | "version": "3.3.0", 3133 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 3134 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 3135 | "dev": true, 3136 | "peer": true, 3137 | "requires": { 3138 | "parent-module": "^1.0.0", 3139 | "resolve-from": "^4.0.0" 3140 | } 3141 | }, 3142 | "imurmurhash": { 3143 | "version": "0.1.4", 3144 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 3145 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 3146 | "dev": true, 3147 | "peer": true 3148 | }, 3149 | "inflight": { 3150 | "version": "1.0.6", 3151 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 3152 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 3153 | "dev": true, 3154 | "peer": true, 3155 | "requires": { 3156 | "once": "^1.3.0", 3157 | "wrappy": "1" 3158 | } 3159 | }, 3160 | "inherits": { 3161 | "version": "2.0.4", 3162 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3163 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 3164 | "dev": true, 3165 | "peer": true 3166 | }, 3167 | "is-extglob": { 3168 | "version": "2.1.1", 3169 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3170 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 3171 | "dev": true 3172 | }, 3173 | "is-glob": { 3174 | "version": "4.0.3", 3175 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3176 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3177 | "dev": true, 3178 | "requires": { 3179 | "is-extglob": "^2.1.1" 3180 | } 3181 | }, 3182 | "is-number": { 3183 | "version": "7.0.0", 3184 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3185 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3186 | "dev": true 3187 | }, 3188 | "is-path-inside": { 3189 | "version": "3.0.3", 3190 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 3191 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 3192 | "dev": true, 3193 | "peer": true 3194 | }, 3195 | "isexe": { 3196 | "version": "2.0.0", 3197 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3198 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 3199 | "dev": true, 3200 | "peer": true 3201 | }, 3202 | "js-sdsl": { 3203 | "version": "4.3.0", 3204 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", 3205 | "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", 3206 | "dev": true, 3207 | "peer": true 3208 | }, 3209 | "js-yaml": { 3210 | "version": "4.1.0", 3211 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 3212 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 3213 | "dev": true, 3214 | "peer": true, 3215 | "requires": { 3216 | "argparse": "^2.0.1" 3217 | } 3218 | }, 3219 | "json-schema-traverse": { 3220 | "version": "0.4.1", 3221 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 3222 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 3223 | "dev": true, 3224 | "peer": true 3225 | }, 3226 | "json-stable-stringify-without-jsonify": { 3227 | "version": "1.0.1", 3228 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 3229 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 3230 | "dev": true, 3231 | "peer": true 3232 | }, 3233 | "levn": { 3234 | "version": "0.4.1", 3235 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 3236 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 3237 | "dev": true, 3238 | "peer": true, 3239 | "requires": { 3240 | "prelude-ls": "^1.2.1", 3241 | "type-check": "~0.4.0" 3242 | } 3243 | }, 3244 | "locate-path": { 3245 | "version": "6.0.0", 3246 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3247 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3248 | "dev": true, 3249 | "peer": true, 3250 | "requires": { 3251 | "p-locate": "^5.0.0" 3252 | } 3253 | }, 3254 | "lodash.merge": { 3255 | "version": "4.6.2", 3256 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 3257 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 3258 | "dev": true, 3259 | "peer": true 3260 | }, 3261 | "lru-cache": { 3262 | "version": "6.0.0", 3263 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3264 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3265 | "dev": true, 3266 | "requires": { 3267 | "yallist": "^4.0.0" 3268 | } 3269 | }, 3270 | "merge2": { 3271 | "version": "1.4.1", 3272 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 3273 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 3274 | "dev": true 3275 | }, 3276 | "micromatch": { 3277 | "version": "4.0.5", 3278 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 3279 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 3280 | "dev": true, 3281 | "requires": { 3282 | "braces": "^3.0.2", 3283 | "picomatch": "^2.3.1" 3284 | } 3285 | }, 3286 | "minimatch": { 3287 | "version": "3.1.2", 3288 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3289 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3290 | "dev": true, 3291 | "peer": true, 3292 | "requires": { 3293 | "brace-expansion": "^1.1.7" 3294 | } 3295 | }, 3296 | "moment": { 3297 | "version": "2.29.4", 3298 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 3299 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 3300 | "dev": true 3301 | }, 3302 | "ms": { 3303 | "version": "2.1.2", 3304 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3305 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3306 | "dev": true 3307 | }, 3308 | "natural-compare": { 3309 | "version": "1.4.0", 3310 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3311 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 3312 | "dev": true, 3313 | "peer": true 3314 | }, 3315 | "obsidian": { 3316 | "version": "1.1.1", 3317 | "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.1.1.tgz", 3318 | "integrity": "sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==", 3319 | "dev": true, 3320 | "requires": { 3321 | "@types/codemirror": "0.0.108", 3322 | "moment": "2.29.4" 3323 | } 3324 | }, 3325 | "once": { 3326 | "version": "1.4.0", 3327 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3328 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 3329 | "dev": true, 3330 | "peer": true, 3331 | "requires": { 3332 | "wrappy": "1" 3333 | } 3334 | }, 3335 | "optionator": { 3336 | "version": "0.9.1", 3337 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 3338 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 3339 | "dev": true, 3340 | "peer": true, 3341 | "requires": { 3342 | "deep-is": "^0.1.3", 3343 | "fast-levenshtein": "^2.0.6", 3344 | "levn": "^0.4.1", 3345 | "prelude-ls": "^1.2.1", 3346 | "type-check": "^0.4.0", 3347 | "word-wrap": "^1.2.3" 3348 | } 3349 | }, 3350 | "p-limit": { 3351 | "version": "3.1.0", 3352 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3353 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3354 | "dev": true, 3355 | "peer": true, 3356 | "requires": { 3357 | "yocto-queue": "^0.1.0" 3358 | } 3359 | }, 3360 | "p-locate": { 3361 | "version": "5.0.0", 3362 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3363 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3364 | "dev": true, 3365 | "peer": true, 3366 | "requires": { 3367 | "p-limit": "^3.0.2" 3368 | } 3369 | }, 3370 | "parent-module": { 3371 | "version": "1.0.1", 3372 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3373 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3374 | "dev": true, 3375 | "peer": true, 3376 | "requires": { 3377 | "callsites": "^3.0.0" 3378 | } 3379 | }, 3380 | "path-exists": { 3381 | "version": "4.0.0", 3382 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3383 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3384 | "dev": true, 3385 | "peer": true 3386 | }, 3387 | "path-is-absolute": { 3388 | "version": "1.0.1", 3389 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3390 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 3391 | "dev": true, 3392 | "peer": true 3393 | }, 3394 | "path-key": { 3395 | "version": "3.1.1", 3396 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3397 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3398 | "dev": true, 3399 | "peer": true 3400 | }, 3401 | "path-type": { 3402 | "version": "4.0.0", 3403 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 3404 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 3405 | "dev": true 3406 | }, 3407 | "picomatch": { 3408 | "version": "2.3.1", 3409 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3410 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3411 | "dev": true 3412 | }, 3413 | "prelude-ls": { 3414 | "version": "1.2.1", 3415 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3416 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3417 | "dev": true, 3418 | "peer": true 3419 | }, 3420 | "punycode": { 3421 | "version": "2.3.0", 3422 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 3423 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 3424 | "dev": true, 3425 | "peer": true 3426 | }, 3427 | "queue-microtask": { 3428 | "version": "1.2.3", 3429 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3430 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3431 | "dev": true 3432 | }, 3433 | "regexpp": { 3434 | "version": "3.2.0", 3435 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 3436 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 3437 | "dev": true 3438 | }, 3439 | "resolve-from": { 3440 | "version": "4.0.0", 3441 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3442 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3443 | "dev": true, 3444 | "peer": true 3445 | }, 3446 | "reusify": { 3447 | "version": "1.0.4", 3448 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3449 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3450 | "dev": true 3451 | }, 3452 | "rimraf": { 3453 | "version": "3.0.2", 3454 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3455 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3456 | "dev": true, 3457 | "peer": true, 3458 | "requires": { 3459 | "glob": "^7.1.3" 3460 | } 3461 | }, 3462 | "run-parallel": { 3463 | "version": "1.2.0", 3464 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3465 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3466 | "dev": true, 3467 | "requires": { 3468 | "queue-microtask": "^1.2.2" 3469 | } 3470 | }, 3471 | "semver": { 3472 | "version": "7.3.8", 3473 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 3474 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 3475 | "dev": true, 3476 | "requires": { 3477 | "lru-cache": "^6.0.0" 3478 | } 3479 | }, 3480 | "shebang-command": { 3481 | "version": "2.0.0", 3482 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3483 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3484 | "dev": true, 3485 | "peer": true, 3486 | "requires": { 3487 | "shebang-regex": "^3.0.0" 3488 | } 3489 | }, 3490 | "shebang-regex": { 3491 | "version": "3.0.0", 3492 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3493 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3494 | "dev": true, 3495 | "peer": true 3496 | }, 3497 | "slash": { 3498 | "version": "3.0.0", 3499 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3500 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3501 | "dev": true 3502 | }, 3503 | "strip-ansi": { 3504 | "version": "6.0.1", 3505 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3506 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3507 | "dev": true, 3508 | "peer": true, 3509 | "requires": { 3510 | "ansi-regex": "^5.0.1" 3511 | } 3512 | }, 3513 | "strip-json-comments": { 3514 | "version": "3.1.1", 3515 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3516 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3517 | "dev": true, 3518 | "peer": true 3519 | }, 3520 | "style-mod": { 3521 | "version": "4.0.0", 3522 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz", 3523 | "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", 3524 | "dev": true, 3525 | "peer": true 3526 | }, 3527 | "supports-color": { 3528 | "version": "7.2.0", 3529 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3530 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3531 | "dev": true, 3532 | "peer": true, 3533 | "requires": { 3534 | "has-flag": "^4.0.0" 3535 | } 3536 | }, 3537 | "text-table": { 3538 | "version": "0.2.0", 3539 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3540 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3541 | "dev": true, 3542 | "peer": true 3543 | }, 3544 | "to-regex-range": { 3545 | "version": "5.0.1", 3546 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3547 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3548 | "dev": true, 3549 | "requires": { 3550 | "is-number": "^7.0.0" 3551 | } 3552 | }, 3553 | "tslib": { 3554 | "version": "2.4.0", 3555 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 3556 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 3557 | "dev": true 3558 | }, 3559 | "tsutils": { 3560 | "version": "3.21.0", 3561 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", 3562 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", 3563 | "dev": true, 3564 | "requires": { 3565 | "tslib": "^1.8.1" 3566 | }, 3567 | "dependencies": { 3568 | "tslib": { 3569 | "version": "1.14.1", 3570 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 3571 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 3572 | "dev": true 3573 | } 3574 | } 3575 | }, 3576 | "type-check": { 3577 | "version": "0.4.0", 3578 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3579 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3580 | "dev": true, 3581 | "peer": true, 3582 | "requires": { 3583 | "prelude-ls": "^1.2.1" 3584 | } 3585 | }, 3586 | "type-fest": { 3587 | "version": "0.20.2", 3588 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3589 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3590 | "dev": true, 3591 | "peer": true 3592 | }, 3593 | "typescript": { 3594 | "version": "4.7.4", 3595 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 3596 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 3597 | "dev": true 3598 | }, 3599 | "uri-js": { 3600 | "version": "4.4.1", 3601 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3602 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3603 | "dev": true, 3604 | "peer": true, 3605 | "requires": { 3606 | "punycode": "^2.1.0" 3607 | } 3608 | }, 3609 | "w3c-keyname": { 3610 | "version": "2.2.6", 3611 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", 3612 | "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", 3613 | "dev": true, 3614 | "peer": true 3615 | }, 3616 | "which": { 3617 | "version": "2.0.2", 3618 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3619 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3620 | "dev": true, 3621 | "peer": true, 3622 | "requires": { 3623 | "isexe": "^2.0.0" 3624 | } 3625 | }, 3626 | "word-wrap": { 3627 | "version": "1.2.3", 3628 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 3629 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 3630 | "dev": true, 3631 | "peer": true 3632 | }, 3633 | "wrappy": { 3634 | "version": "1.0.2", 3635 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3636 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3637 | "dev": true, 3638 | "peer": true 3639 | }, 3640 | "yallist": { 3641 | "version": "4.0.0", 3642 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3643 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3644 | "dev": true 3645 | }, 3646 | "yocto-queue": { 3647 | "version": "0.1.0", 3648 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3649 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3650 | "dev": true, 3651 | "peer": true 3652 | } 3653 | } 3654 | } 3655 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-year-timeline", 3 | "version": "1.0.0", 4 | "description": "Create a year timeline in your notes", 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": "TanelTM", 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 | -------------------------------------------------------------------------------- /src/components/settings-tab-component.ts: -------------------------------------------------------------------------------- 1 | import { App, ColorComponent, PluginSettingTab, Setting, TextComponent } from "obsidian"; 2 | import moment from "moment"; 3 | 4 | import YearTimelinePlugin from "../year-timeline-plugin"; 5 | import { DEFAULT_SETTINGS, snippets } from "../constants"; 6 | import { Month, MonthSettings } from "src/models/settings"; 7 | 8 | export class SettingsTabComponent extends PluginSettingTab { 9 | plugin: YearTimelinePlugin; 10 | 11 | previewDate: string; 12 | 13 | constructor(app: App, plugin: YearTimelinePlugin) { 14 | super(app, plugin); 15 | this.plugin = plugin; 16 | this.previewDate = moment().format("YYYY-06-01"); 17 | } 18 | 19 | display(): void { 20 | const {containerEl} = this; 21 | 22 | containerEl.empty(); 23 | 24 | this.displaySnippet(); 25 | this.displayTimelineSettings(); 26 | this.displayPreview(); 27 | this.displayDayMarkerSettings(); 28 | this.displayCustomMarkerSettings(); 29 | this.displayDailyNotesIntegrationSettings(); 30 | } 31 | 32 | displayPreview() { 33 | const {containerEl} = this; 34 | 35 | containerEl.createEl('h2', {text: 'Preview'}); 36 | 37 | containerEl 38 | .createDiv({ 39 | attr: { 40 | style: ` 41 | outline: 1px solid var(--background-modifier-border); 42 | overflow: hidden; 43 | margin-bottom: 1rem; 44 | `, 45 | } 46 | }) 47 | .createEl('i', { 48 | attr: { 49 | 'data-timeline': moment(this.previewDate).format('DDD'), 50 | style: 'min-width: 600px', 51 | } 52 | }); 53 | 54 | 55 | containerEl 56 | .createDiv({ 57 | attr: { 58 | style: ` 59 | display: flex; 60 | justify-content: flex-end; 61 | gap: 0.25rem; 62 | flex-wrap: wrap; 63 | padding: 0.25rem 0; 64 | ` 65 | } 66 | }) 67 | .createEl('input', { 68 | attr: { 69 | type: 'date', 70 | value: this.previewDate 71 | } 72 | }) 73 | .addEventListener('change', (event) => { 74 | const date = (event.currentTarget as HTMLInputElement).value; 75 | 76 | this.previewDate = moment(date).format('YYYY-MM-DD'); 77 | this.display(); 78 | }) 79 | } 80 | 81 | displaySnippet() { 82 | const {containerEl} = this; 83 | 84 | containerEl.createEl('h2', {text: 'Snippet'}); 85 | 86 | const snippetFor = containerEl.createDiv({ 87 | attr: { 88 | style: ` 89 | display: flex; 90 | justify-content: flex-end; 91 | gap: 0.25rem; 92 | flex-wrap: wrap; 93 | padding: 0.25rem 0; 94 | ` 95 | } 96 | }); 97 | 98 | 99 | const snippet = containerEl.createEl('textarea', { 100 | attr: { 101 | rows: 3, 102 | placeholder: 'Pick a snippet type, copy-paste to MD file', 103 | readonly: true, 104 | style: ` 105 | resize: none; 106 | width: 100%; 107 | `, 108 | } 109 | }) 110 | 111 | snippets.forEach(({buttonLabel, code}) => { 112 | snippetFor.createEl('input', { value: buttonLabel, type: 'button'}).onclick = () => { 113 | snippet.value = code; 114 | } 115 | }) 116 | } 117 | 118 | displayDayMarkerSettings() { 119 | const {containerEl} = this; 120 | 121 | containerEl.createEl('h2', {text: 'Day marker settings'}); 122 | 123 | new Setting(containerEl) 124 | .setName('Marker') 125 | .addDropdown((component) => component 126 | .addOption('line', 'Line') 127 | .addOption('circle', 'Circle') 128 | .addOption('emoji', 'Emoji or symbol') 129 | .setValue(this.plugin.settings.dayMarker.style) 130 | 131 | .onChange(async (value: 'line' | 'circle' | 'emoji') => { 132 | this.plugin.settings.dayMarker.style = value; 133 | await this.plugin.saveSettings(); 134 | this.plugin.reload(); 135 | this.display(); 136 | }) 137 | ) 138 | 139 | switch (this.plugin.settings.dayMarker.style) { 140 | case 'line': { 141 | new Setting(containerEl) 142 | .setName('Line color') 143 | .addColorPicker((component) => component 144 | .setValue(this.plugin.settings.dayMarker.line.color) 145 | .onChange(async (value) => { 146 | this.plugin.settings.dayMarker.line.color = value; 147 | await this.plugin.saveSettings(); 148 | this.plugin.reload(); 149 | }) 150 | ) 151 | .addExtraButton((component) => component 152 | .setIcon('lucide-rotate-ccw') 153 | .setTooltip('Reset to default') 154 | .onClick(async () => { 155 | this.plugin.settings.dayMarker.line.color = DEFAULT_SETTINGS.dayMarker.line.color; 156 | await this.plugin.saveSettings(); 157 | this.plugin.reload(); 158 | this.display(); 159 | }) 160 | ); 161 | 162 | new Setting(containerEl) 163 | .setName('Line width') 164 | .addSlider((component) => component 165 | .setLimits(1, 50, 0.5) 166 | .setDynamicTooltip() 167 | .setValue(this.plugin.settings.dayMarker.line.width) 168 | .onChange(async (value) => { 169 | this.plugin.settings.dayMarker.line.width = value; 170 | await this.plugin.saveSettings(); 171 | this.plugin.reload(); 172 | }) 173 | ) 174 | .addExtraButton((component) => component 175 | .setIcon('lucide-rotate-ccw') 176 | .setTooltip('Reset to default') 177 | .onClick(async () => { 178 | this.plugin.settings.dayMarker.line.width = DEFAULT_SETTINGS.dayMarker.line.width; 179 | await this.plugin.saveSettings(); 180 | this.plugin.reload(); 181 | this.display(); 182 | }) 183 | ); 184 | 185 | break; 186 | } 187 | case 'circle': { 188 | new Setting(containerEl) 189 | .setName('Circle color') 190 | .addColorPicker((component) => component 191 | .setValue(this.plugin.settings.dayMarker.circle.color) 192 | .onChange(async (value) => { 193 | this.plugin.settings.dayMarker.circle.color = value; 194 | await this.plugin.saveSettings(); 195 | this.plugin.reload(); 196 | }) 197 | ) 198 | .addExtraButton((component) => component 199 | .setIcon('lucide-rotate-ccw') 200 | .setTooltip('Reset to default') 201 | .onClick(async () => { 202 | this.plugin.settings.dayMarker.circle.color = DEFAULT_SETTINGS.dayMarker.circle.color; 203 | await this.plugin.saveSettings(); 204 | this.plugin.reload(); 205 | this.display(); 206 | }) 207 | ); 208 | 209 | new Setting(containerEl) 210 | .setName('Circle border color') 211 | .addColorPicker((component) => component 212 | .setValue(this.plugin.settings.dayMarker.circle.border) 213 | .onChange(async (value) => { 214 | this.plugin.settings.dayMarker.circle.border = value; 215 | await this.plugin.saveSettings(); 216 | this.plugin.reload(); 217 | }) 218 | ) 219 | .addExtraButton((component) => component 220 | .setIcon('lucide-rotate-ccw') 221 | .setTooltip('Reset to default') 222 | .onClick(async () => { 223 | this.plugin.settings.dayMarker.circle.border = DEFAULT_SETTINGS.dayMarker.circle.border; 224 | await this.plugin.saveSettings(); 225 | this.plugin.reload(); 226 | this.display(); 227 | }) 228 | ); 229 | 230 | new Setting(containerEl) 231 | .setName('Circle border thickness') 232 | .addSlider((component) => component 233 | .setLimits(1, 50, 0.5) 234 | .setDynamicTooltip() 235 | .setValue(this.plugin.settings.dayMarker.circle.borderWidth) 236 | .onChange(async (value) => { 237 | this.plugin.settings.dayMarker.circle.borderWidth = value; 238 | await this.plugin.saveSettings(); 239 | this.plugin.reload(); 240 | }) 241 | ) 242 | .addExtraButton((component) => component 243 | .setIcon('lucide-rotate-ccw') 244 | .setTooltip('Reset to default') 245 | .onClick(async () => { 246 | this.plugin.settings.dayMarker.circle.borderWidth = DEFAULT_SETTINGS.dayMarker.circle.borderWidth; 247 | await this.plugin.saveSettings(); 248 | this.plugin.reload(); 249 | this.display(); 250 | }) 251 | ); 252 | 253 | new Setting(containerEl) 254 | .setName('Circle radius') 255 | .addSlider((component) => component 256 | .setLimits(1, 200, 1) 257 | .setDynamicTooltip() 258 | .setValue(this.plugin.settings.dayMarker.circle.radius) 259 | .onChange(async (value) => { 260 | this.plugin.settings.dayMarker.circle.radius = value; 261 | await this.plugin.saveSettings(); 262 | this.plugin.reload(); 263 | }) 264 | ) 265 | .addExtraButton((component) => component 266 | .setIcon('lucide-rotate-ccw') 267 | .setTooltip('Reset to default') 268 | .onClick(async () => { 269 | this.plugin.settings.dayMarker.circle.radius = DEFAULT_SETTINGS.dayMarker.circle.radius; 270 | await this.plugin.saveSettings(); 271 | this.plugin.reload(); 272 | this.display(); 273 | }) 274 | ); 275 | 276 | break; 277 | } 278 | case 'emoji': { 279 | new Setting(containerEl) 280 | .setName('Emoji or symbol character') 281 | .addText((component) => component 282 | .setValue(this.plugin.settings.dayMarker.emoji.character) 283 | .onChange(async (value) => { 284 | this.plugin.settings.dayMarker.emoji.character = value; 285 | await this.plugin.saveSettings(); 286 | this.plugin.reload(); 287 | }) 288 | ) 289 | .addExtraButton((component) => component 290 | .setIcon('lucide-rotate-ccw') 291 | .setTooltip('Reset to default') 292 | .onClick(async () => { 293 | this.plugin.settings.dayMarker.emoji.character = DEFAULT_SETTINGS.dayMarker.emoji.character; 294 | await this.plugin.saveSettings(); 295 | this.plugin.reload(); 296 | this.display(); 297 | }) 298 | ); 299 | 300 | new Setting(containerEl) 301 | .setName('Adjust emoji or symbol size') 302 | .addSlider((component) => component 303 | .setLimits(0.15, 3, 0.05) 304 | .setDynamicTooltip() 305 | .setValue(this.plugin.settings.dayMarker.emoji.scale) 306 | .onChange(async (value) => { 307 | this.plugin.settings.dayMarker.emoji.scale = value; 308 | await this.plugin.saveSettings(); 309 | this.plugin.reload(); 310 | }) 311 | ) 312 | .addExtraButton((component) => component 313 | .setIcon('lucide-rotate-ccw') 314 | .setTooltip('Reset to default') 315 | .onClick(async () => { 316 | this.plugin.settings.dayMarker.emoji.scale = DEFAULT_SETTINGS.dayMarker.emoji.scale; 317 | await this.plugin.saveSettings(); 318 | this.plugin.reload(); 319 | this.display(); 320 | }) 321 | ); 322 | 323 | new Setting(containerEl) 324 | .setName('Adjust emoji or symbol X offset') 325 | .addSlider((component) => component 326 | .setLimits(-100, 100, 1) 327 | .setDynamicTooltip() 328 | .setValue(this.plugin.settings.dayMarker.emoji.offsetX) 329 | .onChange(async (value) => { 330 | this.plugin.settings.dayMarker.emoji.offsetX = value; 331 | await this.plugin.saveSettings(); 332 | this.plugin.reload(); 333 | }) 334 | ) 335 | .addExtraButton((component) => component 336 | .setIcon('lucide-rotate-ccw') 337 | .setTooltip('Reset to default') 338 | .onClick(async () => { 339 | this.plugin.settings.dayMarker.emoji.offsetX = DEFAULT_SETTINGS.dayMarker.emoji.offsetX; 340 | await this.plugin.saveSettings(); 341 | this.plugin.reload(); 342 | this.display(); 343 | }) 344 | ); 345 | 346 | new Setting(containerEl) 347 | .setName('Adjust emoji or symbol Y offset') 348 | .addSlider((component) => component 349 | .setLimits(-100, 100, 1) 350 | .setDynamicTooltip() 351 | .setValue(this.plugin.settings.dayMarker.emoji.offsetY) 352 | .onChange(async (value) => { 353 | this.plugin.settings.dayMarker.emoji.offsetY = value; 354 | await this.plugin.saveSettings(); 355 | this.plugin.reload(); 356 | }) 357 | ) 358 | .addExtraButton((component) => component 359 | .setIcon('lucide-rotate-ccw') 360 | .setTooltip('Reset to default') 361 | .onClick(async () => { 362 | this.plugin.settings.dayMarker.emoji.offsetY = DEFAULT_SETTINGS.dayMarker.emoji.offsetY; 363 | await this.plugin.saveSettings(); 364 | this.plugin.reload(); 365 | this.display(); 366 | }) 367 | ); 368 | 369 | break; 370 | } 371 | } 372 | } 373 | 374 | displayTimelineSettings() { 375 | const {containerEl} = this; 376 | 377 | containerEl.createEl('h2', {text: 'Timeline settings'}); 378 | 379 | new Setting(containerEl) 380 | .setName('Timeline style') 381 | .addDropdown((component) => component 382 | .addOption('solid', 'Solid months') 383 | .addOption('gradient', 'Gradient') 384 | .addOption('custom', 'Custom SVG') 385 | .setValue(this.plugin.settings.timeline.style) 386 | .onChange(async (value: 'solid' | 'gradient' | 'custom') => { 387 | this.plugin.settings.timeline.style = value; 388 | await this.plugin.saveSettings(); 389 | this.plugin.reload(); 390 | this.display(); 391 | }) 392 | ); 393 | 394 | switch (this.plugin.settings.timeline.style) { 395 | case 'solid': { 396 | return this.displayTimelineMonthSettings(); 397 | } 398 | case 'gradient': { 399 | return this.displayTimelineGradientSettings(); 400 | } 401 | case 'custom': { 402 | return this.displayTimelineCustomSettings(); 403 | } 404 | } 405 | } 406 | 407 | displayTimelineMonthSettings() { 408 | const {containerEl} = this; 409 | 410 | const { solid: monthSettings } = this.plugin.settings.timeline; 411 | 412 | Object.entries(monthSettings).forEach(async ([month, { name, color }]: [month: Month, setting: MonthSettings]) => { 413 | let colorPicker: ColorComponent; 414 | let nameField: TextComponent; 415 | 416 | new Setting(containerEl) 417 | .setName(name) 418 | .addText((component) => nameField = component 419 | .setValue(name) 420 | .onChange(async (value) => { 421 | this.plugin.settings.timeline.solid[month].name = value; 422 | await this.plugin.saveSettings(); 423 | this.plugin.reload(); 424 | }) 425 | ) 426 | .addColorPicker((colorComponent) => colorPicker = colorComponent 427 | .setValue(color) 428 | .onChange(async (value) => { 429 | this.plugin.settings.timeline.solid[month].color = value; 430 | await this.plugin.saveSettings(); 431 | this.plugin.reload(); 432 | }) 433 | ) 434 | .addExtraButton((component) => component 435 | .setIcon('lucide-rotate-ccw') 436 | .setTooltip('Reset to default') 437 | .onClick(() => { 438 | this.plugin.settings.timeline.solid[month] = { 439 | name: DEFAULT_SETTINGS.timeline.solid[month].name, 440 | color: DEFAULT_SETTINGS.timeline.solid[month].color, 441 | }; 442 | nameField.setValue(this.plugin.settings.timeline.solid[month].name); 443 | colorPicker.setValue(this.plugin.settings.timeline.solid[month].color); 444 | }) 445 | ); 446 | }) 447 | } 448 | 449 | displayTimelineGradientSettings() { 450 | const {containerEl} = this; 451 | 452 | const { gradient } = this.plugin.settings.timeline; 453 | 454 | if (gradient.colors.length) { 455 | gradient.colors.forEach((colorSettings, index) => { 456 | const {offset, color} = colorSettings; 457 | 458 | new Setting(containerEl) 459 | .setName("#" + (index + 1)) 460 | .addColorPicker((component) => component 461 | .setValue(color) 462 | .onChange(async (value) => { 463 | this.plugin.settings.timeline.gradient.colors[index].color = value; 464 | await this.plugin.saveSettings(); 465 | this.plugin.reload(); 466 | }) 467 | ) 468 | .addSlider((component) => component 469 | .setValue(offset) 470 | .setDynamicTooltip() 471 | .setLimits(0, 100, 0.5) 472 | .onChange(async (value) => { 473 | this.plugin.settings.timeline.gradient.colors[index].offset = value; 474 | await this.plugin.saveSettings(); 475 | this.plugin.reload(); 476 | }) 477 | ) 478 | .addExtraButton((component) => component 479 | .setIcon('lucide-trash-2') 480 | .setTooltip('Remove') 481 | .onClick(async () => { 482 | this.plugin.settings.timeline.gradient.colors = ( 483 | this.plugin.settings.timeline.gradient.colors.filter((someSettings) => someSettings != colorSettings) 484 | ); 485 | await this.plugin.saveSettings(); 486 | this.plugin.reload(); 487 | this.display(); 488 | }) 489 | ); 490 | }) 491 | } else { 492 | containerEl.createEl('p', { 493 | text: 'No gradient colors. Try to add one!', 494 | }); 495 | } 496 | 497 | containerEl 498 | .createDiv({ 499 | attr: { 500 | style: ` 501 | display: flex; 502 | justify-content: flex-end; 503 | gap: 0.25rem; 504 | flex-wrap: wrap; 505 | padding: 0.25rem 0; 506 | ` 507 | } 508 | }) 509 | .createEl('input', { 510 | attr: { 511 | type: 'button', 512 | value: 'Add gradient color!' 513 | } 514 | }) 515 | .addEventListener('click', async (event) => { 516 | 517 | const offset = 50; 518 | const color = '#FF0000'; 519 | 520 | this.plugin.settings.timeline.gradient.colors = [ 521 | ...this.plugin.settings.timeline.gradient.colors, 522 | { offset, color } 523 | ]; 524 | 525 | await this.plugin.saveSettings(); 526 | this.plugin.reload(); 527 | this.display(); 528 | }) 529 | } 530 | 531 | displayTimelineCustomSettings() { 532 | const {containerEl} = this; 533 | 534 | new Setting(containerEl) 535 | .addTextArea((component) => { 536 | component.inputEl.style.width = '100%'; 537 | component.inputEl.style.resize = 'none'; 538 | component.inputEl.rows = 10; 539 | 540 | component.inputEl.parentElement?.parentElement?.querySelector('.setting-item-info')?.remove(); 541 | 542 | component 543 | .setValue(this.plugin.settings.timeline.custom) 544 | .onChange(async (value) => { 545 | this.plugin.settings.timeline.custom = value; 546 | await this.plugin.saveSettings(); 547 | this.plugin.reload(); 548 | }) 549 | }) 550 | .addExtraButton((component) => component 551 | .setIcon('lucide-rotate-ccw') 552 | .setTooltip('Reset to default') 553 | .onClick(async () => { 554 | this.plugin.settings.timeline.custom = DEFAULT_SETTINGS.timeline.custom; 555 | await this.plugin.saveSettings(); 556 | this.plugin.reload(); 557 | this.display(); 558 | }) 559 | ); 560 | 561 | } 562 | 563 | displayCustomMarkerSettings() { 564 | const {containerEl} = this; 565 | 566 | containerEl.createEl('h2', {text: 'Custom markers'}); 567 | 568 | if (this.plugin.settings.dayMarker.style === 'emoji') { 569 | containerEl.createDiv({ 570 | attr: { 571 | style: ` 572 | white-space: pre-line; 573 | ` 574 | }, 575 | text: ( 576 | `Day marker is set to 'Emoji or symbol'. 577 | Currently, custom markers only work when the 'Marker' in 'Day marker settings' is set to 'Circle' or 'Line'. 578 | Support for this combination will be added later.` 579 | ), 580 | }); 581 | return; 582 | } 583 | 584 | if (this.plugin.settings.customMarkers.length) { 585 | this.plugin.settings.customMarkers.forEach((marker, index) => { 586 | const {date, character} = marker; 587 | 588 | new Setting(containerEl) 589 | .setName("#" + (index + 1)) 590 | .addText((component) => component 591 | .setValue(character) 592 | .onChange(async (value) => { 593 | this.plugin.settings.customMarkers[index].character = value; 594 | await this.plugin.saveSettings(); 595 | this.plugin.reload(); 596 | }) 597 | ) 598 | .addText((component) => { 599 | component.inputEl.type = 'date'; 600 | 601 | component 602 | .setValue(date) 603 | .onChange(async (value) => { 604 | this.plugin.settings.customMarkers[index].date = moment(value).format('YYYY-MM-DD'); 605 | await this.plugin.saveSettings(); 606 | this.plugin.reload(); 607 | }) 608 | }) 609 | .addExtraButton((component) => component 610 | .setIcon('lucide-trash-2') 611 | .setTooltip('Remove') 612 | .onClick(async () => { 613 | this.plugin.settings.customMarkers = ( 614 | this.plugin.settings.customMarkers.filter((someMarker) => someMarker != marker) 615 | ); 616 | await this.plugin.saveSettings(); 617 | this.plugin.reload(); 618 | this.display(); 619 | }) 620 | ); 621 | }) 622 | } else { 623 | containerEl.createEl('p', { 624 | text: 'No markers. Try to create one!', 625 | }); 626 | } 627 | 628 | containerEl 629 | .createDiv({ 630 | attr: { 631 | style: ` 632 | display: flex; 633 | justify-content: flex-end; 634 | gap: 0.25rem; 635 | flex-wrap: wrap; 636 | padding: 0.25rem 0; 637 | ` 638 | } 639 | }) 640 | .createEl('input', { 641 | attr: { 642 | type: 'button', 643 | value: 'Create new marker!' 644 | } 645 | }) 646 | .addEventListener('click', async (event) => { 647 | 648 | const date = moment().format('YYYY-MM-DD'); 649 | const character = '🎉'; 650 | 651 | this.plugin.settings.customMarkers = [ 652 | ...this.plugin.settings.customMarkers, 653 | { date, character } 654 | ]; 655 | 656 | await this.plugin.saveSettings(); 657 | this.plugin.reload(); 658 | this.display(); 659 | }) 660 | } 661 | 662 | displayDailyNotesIntegrationSettings() { 663 | const {containerEl} = this; 664 | 665 | containerEl.createEl('h2', {text: 'Daily Notes integration'}); 666 | 667 | new Setting(containerEl) 668 | .setName('Daily Notes integration') 669 | .setDesc('Navigate between daily notes by clicking on the timeline') 670 | .addToggle((component) => component 671 | .setValue(this.plugin.settings.dailyNoteIntegration.enabled) 672 | .onChange(async (value) => { 673 | this.plugin.settings.dailyNoteIntegration.enabled = value; 674 | await this.plugin.saveSettings(); 675 | this.plugin.reload(); 676 | }) 677 | ) 678 | } 679 | } 680 | 681 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | import Settings from "./models/settings"; 2 | 3 | export const DEFAULT_SETTINGS: Settings = { 4 | dayMarker: { 5 | style: 'line', 6 | 7 | line: { 8 | color: '#CC0000', 9 | width: 2, 10 | }, 11 | 12 | circle: { 13 | color: '#EE9900', 14 | border: '#000000', 15 | borderWidth: 2, 16 | radius: 20, 17 | }, 18 | 19 | emoji: { 20 | character: '🔻', 21 | offsetX: 0, 22 | offsetY: 0, 23 | scale: 1, 24 | } 25 | }, 26 | 27 | customMarkers: [], 28 | 29 | timeline: { 30 | style: "solid", 31 | solid: { 32 | january: { 33 | name: 'January', 34 | color: '#A7BFD4', 35 | }, 36 | february: { 37 | name: 'February', 38 | color: '#B3D1E6', 39 | }, 40 | march: { 41 | name: 'March', 42 | color: '#A5D5CD', 43 | }, 44 | april: { 45 | name: 'April', 46 | color: '#C4E1B9', 47 | }, 48 | may: { 49 | name: 'May', 50 | color: '#B8DCB6', 51 | }, 52 | june: { 53 | name: 'June', 54 | color: '#DBE5B6', 55 | }, 56 | july: { 57 | name: 'July', 58 | color: '#FFE080', 59 | }, 60 | august: { 61 | name: 'August', 62 | color: '#F6DAA1', 63 | }, 64 | september: { 65 | name: 'September', 66 | color: '#F5CDA7', 67 | }, 68 | october: { 69 | name: 'October', 70 | color: '#F5B57C', 71 | }, 72 | november: { 73 | name: 'November', 74 | color: '#CBAE99', 75 | }, 76 | december: { 77 | name: 'December', 78 | color: '#C7D8E6', 79 | }, 80 | }, 81 | 82 | gradient: { 83 | angle: 0, 84 | colors: [], 85 | }, 86 | 87 | custom: ` 90 | Timeline 2022 91 | 92 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | January 114 | February 115 | March 116 | April 117 | May 118 | June 119 | July 120 | August 121 | September 122 | October 123 | November 124 | December 125 | 126 | `, 127 | }, 128 | 129 | dailyNoteIntegration: { 130 | enabled: false, 131 | format: 'YYYY-MM-DD', 132 | directory: '', 133 | }, 134 | } 135 | 136 | export const snippets = [ 137 | { 138 | buttonLabel: 'For Daily Notes template', 139 | code: '', 140 | }, 141 | { 142 | buttonLabel: 'For Templater template', 143 | code: '">', 144 | }, 145 | { 146 | buttonLabel: 'For DataView (JavaScript)', 147 | code: '```dataviewjs\ndv.el("i", "", { attr: {\n "data-timeline": moment().format("DDD"),\n}})\n```', 148 | }, 149 | ] 150 | -------------------------------------------------------------------------------- /src/daily-notes-integration.ts: -------------------------------------------------------------------------------- 1 | import moment from 'moment'; 2 | import { App, TFile, TFolder, Vault, normalizePath } from 'obsidian'; 3 | import YearTimelinePlugin from './year-timeline-plugin'; 4 | 5 | let dailyNotesSettings: {folder: string, format: string} = { 6 | folder: '', 7 | format: 'YYYY-MM-DD', 8 | } 9 | 10 | let isHovering = false; 11 | let timelineTooltipEl: HTMLElement | undefined; 12 | 13 | export function registerEventListeners(app: App, plugin: YearTimelinePlugin) { 14 | let mouseMoveTimer: NodeJS.Timeout; 15 | 16 | plugin.registerDomEvent(document, 'mousemove', (e) => { 17 | if (!plugin.settings.dailyNoteIntegration.enabled) return; 18 | 19 | if (isHovering) endHover(); 20 | mouseMoveTimer && clearTimeout(mouseMoveTimer); 21 | mouseMoveTimer = setTimeout(() => startHover(e), 100); 22 | }); 23 | 24 | plugin.registerDomEvent(document, 'click', (e) => { 25 | if (!plugin.settings.dailyNoteIntegration.enabled) return; 26 | 27 | if ((e.target as HTMLElement)?.matches('[data-timeline]')) { 28 | e.preventDefault(); 29 | 30 | const activeDate = moment( 31 | app.workspace.getActiveFile()?.name.replace(/.md$/, ''), 32 | dailyNotesSettings.format 33 | ); 34 | 35 | const newDate = ( 36 | moment(activeDate, 'DDD') 37 | .dayOfYear(getMouseDayOfYear(e)) 38 | .format(dailyNotesSettings.format) 39 | ); 40 | 41 | const dailyNotesFolder = app.vault.getAbstractFileByPath( 42 | normalizePath(dailyNotesSettings.folder) 43 | ) as TFolder; 44 | 45 | let dailyNote: TFile | null = null; 46 | 47 | Vault.recurseChildren(dailyNotesFolder, (note) => { 48 | if (note instanceof TFile) { 49 | if (note.path.includes(dailyNotesSettings.folder) && note.name.includes(newDate)) { 50 | 51 | console.log('Settings folder:', dailyNotesSettings.folder) 52 | console.log('Note:', note) 53 | 54 | return dailyNote = note; 55 | } 56 | } 57 | }); 58 | 59 | if (dailyNote) { 60 | app.workspace.getLeaf().openFile(dailyNote); 61 | } else { 62 | hideTooltip(); 63 | isHovering = true; 64 | showTooltip('No note for date ' + newDate, e); 65 | } 66 | } 67 | }) 68 | } 69 | 70 | export async function setup(app: App, plugin: YearTimelinePlugin) { 71 | if (!plugin.settings.dailyNoteIntegration.enabled) return; 72 | 73 | await new Promise((resolve) => setTimeout(resolve, 2000)); 74 | 75 | const { folder, format } = ( 76 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 77 | (window.app as any).internalPlugins?.getPluginById('daily-notes')?.instance?.options || {} 78 | ); 79 | 80 | dailyNotesSettings = { 81 | folder: folder ?? '', 82 | format: format ?? 'YYYY-MM-DD', 83 | } as typeof dailyNotesSettings; 84 | 85 | console.log({ dailyNotesSettings }) 86 | } 87 | 88 | function startHover(e: MouseEvent) { 89 | if (!isHovering && (e.target as HTMLElement)?.matches('[data-timeline]')) { 90 | hideTooltip(); 91 | isHovering = true; 92 | const dayOfYear = moment(getMouseDayOfYear(e), "DDD"); 93 | 94 | if (dayOfYear.isValid()) { 95 | showTooltip(dayOfYear.format('YYYY-MM-DD'), e); 96 | } 97 | 98 | } 99 | } 100 | 101 | function endHover() { 102 | isHovering = false; 103 | hideTooltip(); 104 | } 105 | 106 | function showTooltip(message: string, e: MouseEvent) { 107 | timelineTooltipEl = document.createElement('div'); 108 | timelineTooltipEl.textContent = message; 109 | timelineTooltipEl.style.position = 'fixed'; 110 | timelineTooltipEl.style.left = e.clientX + 'px'; 111 | timelineTooltipEl.style.top = e.clientY + 'px'; 112 | timelineTooltipEl.style.color = '#000'; 113 | timelineTooltipEl.style.background = '#F0F0F0'; 114 | timelineTooltipEl.style.padding = '8px'; 115 | timelineTooltipEl.style.borderRadius = '4px'; 116 | timelineTooltipEl.style.fontSize = '10px'; 117 | timelineTooltipEl.style.fontWeight = '600'; 118 | timelineTooltipEl.style.zIndex = '100'; 119 | document.body.appendChild(timelineTooltipEl); 120 | } 121 | 122 | function hideTooltip() { 123 | timelineTooltipEl?.remove(); 124 | } 125 | 126 | function getMouseDayOfYear(e: MouseEvent) { 127 | const rect = (e.target as HTMLElement)?.getBoundingClientRect(); 128 | const yearWidth = rect.width; 129 | const x = e.clientX - rect.left; 130 | 131 | const daysInYear = 365; 132 | 133 | return Math.floor((x / yearWidth) * daysInYear) + 1; 134 | } 135 | -------------------------------------------------------------------------------- /src/generate-styles.ts: -------------------------------------------------------------------------------- 1 | import moment from "moment"; 2 | import Settings from "./models/settings"; 3 | 4 | export function generateStyles(settings: Settings) { 5 | const style = document.createElement('style'); 6 | 7 | style.id = 'timeline-plugin-style'; 8 | 9 | style.textContent = ` 10 | ${generateBaseStyle(settings)} 11 | `; 12 | 13 | return style; 14 | } 15 | 16 | function generateBaseStyle(settings: Settings) { 17 | const range = Array.from({ length: Number(moment('2023-12-31').format('DDD')) }, (_, i) => i); 18 | 19 | return ` 20 | [data-timeline] { 21 | position: relative; 22 | display: inline-block; 23 | width: 100%; 24 | aspect-ratio: 18/1; 25 | background-repeat: no-repeat; 26 | background-image: url("data:image/svg+xml,${ generateMainSvg(settings) }"); 27 | ${ settings.dailyNoteIntegration.enabled ? 'cursor: crosshair;' : '' } 28 | } 29 | 30 | [data-timeline]::after { 31 | content: ''; 32 | position: absolute; 33 | z-index: 1; 34 | top: 0; 35 | left: 0; 36 | right: 0; 37 | bottom: 0; 38 | display: block; 39 | background-repeat: no-repeat; 40 | } 41 | 42 | ${ range.map((dayIndex) => ` 43 | [data-timeline="${dayIndex}"]::after { 44 | background-image: url("data:image/svg+xml,${ generateMarkers(dayIndex, settings) }"); 45 | } 46 | `).join('') } 47 | `; 48 | } 49 | 50 | function generateMainSvg(settings: Settings) { 51 | switch (settings.timeline.style) { 52 | case 'solid': { 53 | return generateTimelineSolidSvg(settings); 54 | } 55 | case 'gradient': { 56 | return generateTimelineGradientSvg(settings); 57 | } 58 | case 'custom': { 59 | return generateTimelineCustomSvg(settings); 60 | } 61 | } 62 | } 63 | 64 | function generateTimelineSolidSvg(settings: Settings) { 65 | const computedBodyStyle = getComputedStyle(document.body); 66 | const textNormal = computedBodyStyle.getPropertyValue("--text-normal"); 67 | 68 | return encodeURIComponent(` 69 | 72 | Timeline 2022 73 | 74 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | ${ settings.timeline.solid.january.name } 97 | ${ settings.timeline.solid.february.name } 98 | ${ settings.timeline.solid.march.name } 99 | ${ settings.timeline.solid.april.name } 100 | ${ settings.timeline.solid.may.name } 101 | ${ settings.timeline.solid.june.name } 102 | ${ settings.timeline.solid.july.name } 103 | ${ settings.timeline.solid.august.name } 104 | ${ settings.timeline.solid.september.name } 105 | ${ settings.timeline.solid.october.name } 106 | ${ settings.timeline.solid.november.name } 107 | ${ settings.timeline.solid.december.name } 108 | 109 | 110 | `); 111 | } 112 | 113 | function generateTimelineGradientSvg(settings: Settings) { 114 | return encodeURIComponent(` 115 | 118 | Timeline 2022 119 | 120 | 121 | ${ settings.timeline.gradient.colors.map(({ offset, color }) => ` 122 | 123 | `)} 124 | 125 | 126 | 127 | 128 | 129 | 130 | `); 131 | } 132 | function generateTimelineCustomSvg(settings: Settings) { 133 | return encodeURIComponent(settings.timeline.custom); 134 | } 135 | 136 | function generateMarkers(dayIndex: number, settings: Settings) { 137 | switch (settings.dayMarker.style) { 138 | case 'line': { 139 | return encodeURIComponent(` 140 | 141 | ${ generateCustomMarkers(settings) } 142 | 143 | ${ settings.dayMarker.emoji.character } 148 | 149 | 150 | `); 151 | } 152 | 153 | case 'circle': { 154 | return encodeURIComponent(` 155 | 156 | ${ generateCustomMarkers(settings) } 157 | 158 | ${ settings.dayMarker.emoji.character } 164 | 165 | 166 | `); 167 | } 168 | 169 | case 'emoji': { 170 | return encodeURIComponent(` 171 | 175 | 176 | ${ 177 | settings.dayMarker.emoji.character 178 | } 179 | 180 | 181 | `); 182 | } 183 | } 184 | 185 | function generateCustomMarkers(settings: Settings) { 186 | return ` 187 | 188 | ${ settings.customMarkers.map(({date, character}) => ` 189 | ${character} 190 | `) } 191 | 192 | ` 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./year-timeline-plugin"; 2 | -------------------------------------------------------------------------------- /src/models/settings.ts: -------------------------------------------------------------------------------- 1 | export type Month 2 | = 'january' 3 | | 'february' 4 | | 'march' 5 | | 'april' 6 | | 'may' 7 | | 'june' 8 | | 'july' 9 | | 'august' 10 | | 'september' 11 | | 'october' 12 | | 'november' 13 | | 'december'; 14 | 15 | export interface MonthSettings { 16 | name: string; 17 | color: string; 18 | } 19 | 20 | export default interface Settings { 21 | dayMarker: { 22 | style: 'line' | 'circle' | 'emoji'; 23 | 24 | line: { 25 | color: string; 26 | width: number; 27 | }; 28 | 29 | circle: { 30 | color: string; 31 | border: string; 32 | borderWidth: number; 33 | radius: number; 34 | }; 35 | 36 | emoji: { 37 | character: string; 38 | offsetX: number; 39 | offsetY: number; 40 | scale: number; 41 | } 42 | }; 43 | 44 | timeline: { 45 | style: 'solid' | 'gradient' | 'custom'; 46 | 47 | solid: { 48 | [key in Month]: MonthSettings; 49 | }; 50 | 51 | gradient: { 52 | angle: number; 53 | colors: Array<{ 54 | offset: number; 55 | color: string; 56 | }>; 57 | }; 58 | 59 | custom: string; 60 | }; 61 | 62 | customMarkers: Array<{ 63 | character: string; 64 | date: string; 65 | }>; 66 | 67 | dailyNoteIntegration: { 68 | enabled: boolean; 69 | format: string; 70 | directory: string; 71 | }; 72 | } 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/year-timeline-plugin.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from 'obsidian'; 2 | 3 | import Settings from './models/settings'; 4 | import { SettingsTabComponent } from './components/settings-tab-component'; 5 | import { DEFAULT_SETTINGS } from './constants'; 6 | import { generateStyles } from './generate-styles'; 7 | import * as dailyNotesIntegration from './daily-notes-integration'; 8 | 9 | export default class YearTimelinePlugin extends Plugin { 10 | settings: Settings; 11 | 12 | async onload() { 13 | this.addSettingTab(new SettingsTabComponent(this.app, this)); 14 | await this.loadSettings(); 15 | document.head.appendChild(generateStyles(this.settings)); 16 | 17 | let cssChangeTimer: NodeJS.Timeout; 18 | 19 | this.app.workspace.on("css-change", () => { 20 | cssChangeTimer && clearTimeout(cssChangeTimer); 21 | cssChangeTimer = setTimeout(() => this.reload(), 1000); 22 | }); 23 | 24 | dailyNotesIntegration.setup(this.app, this); 25 | dailyNotesIntegration.registerEventListeners(this.app, this); 26 | } 27 | 28 | onunload() { 29 | document.getElementById('timeline-plugin-style')?.remove(); 30 | } 31 | 32 | reload() { 33 | this.onunload(); 34 | document.head.appendChild(generateStyles(this.settings)); 35 | dailyNotesIntegration.setup(this.app, this); 36 | } 37 | 38 | async loadSettings() { 39 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); 40 | } 41 | 42 | async saveSettings() { 43 | await this.saveData(this.settings); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /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 | "esModuleInterop": true, 21 | }, 22 | "include": [ 23 | "**/*.ts" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /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": "1.2.8" 3 | } 4 | --------------------------------------------------------------------------------