├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .gitignore ├── .npmrc ├── .prettierrc.yaml ├── LICENSE ├── README.md ├── esbuild.config.mjs ├── main.ts ├── manifest.json ├── package-lock.json ├── package.json ├── src ├── Clients │ ├── AzureDevopsClient.ts │ ├── ITfsClient.ts │ └── JiraClient.ts ├── Task.ts └── VaultHelper.ts ├── styles.css ├── tsconfig.json ├── version-bump.mjs ├── versions.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | insert_final_newline = true 8 | indent_style = tab 9 | indent_size = 4 10 | tab_width = 4 11 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | npm node_modules 2 | build -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "env": { "node": true }, 5 | "plugins": [ 6 | "@typescript-eslint" 7 | ], 8 | "extends": [ 9 | "eslint:recommended", 10 | "plugin:@typescript-eslint/eslint-recommended", 11 | "plugin:@typescript-eslint/recommended" 12 | ], 13 | "parserOptions": { 14 | "sourceType": "module" 15 | }, 16 | "rules": { 17 | "no-unused-vars": "off", 18 | "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], 19 | "@typescript-eslint/ban-ts-comment": "off", 20 | "no-prototype-builtins": "off", 21 | "@typescript-eslint/no-empty-function": "off" 22 | } 23 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # vscode 2 | .vscode 3 | 4 | # Intellij 5 | *.iml 6 | .idea 7 | 8 | # npm 9 | node_modules 10 | 11 | # Don't include the compiled main.js file in the repo. 12 | # They should be uploaded to GitHub releases instead. 13 | main.js 14 | 15 | # Exclude sourcemaps 16 | *.map 17 | 18 | # obsidian 19 | data.json 20 | 21 | # Exclude macOS Finder (System Explorer) View States 22 | .DS_Store 23 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /.prettierrc.yaml: -------------------------------------------------------------------------------- 1 | # Prettier (Code Formatter) Configuration 2 | printWidth: 120 3 | singleQuote: true 4 | useTabs: false 5 | tabWidth: 2 6 | semi: true 7 | bracketSpacing: true 8 | endOfLine: auto -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Aaron Buitenwerf 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Stay on top of your tasks with Agile-Task-Notes! 3 | 4 | Import your tasks from your TFS to take notes on them and make todo-lists! 5 | This plugin currently supports these TFS systems: {**Jira**, **Azure Devops**} 6 | 7 | ### Kanban Board generation: 8 | ![Kanban](https://user-images.githubusercontent.com/28713093/187089414-e6c6788c-d2e2-428f-bb8e-ed3c9edc21c5.gif) 9 | 10 | ### Task notes generation: 11 | ![OpenLinks](https://user-images.githubusercontent.com/28713093/187089532-7c4f665d-f5c3-4729-918f-8bdba97f4739.gif) 12 | 13 | ### Task todo lists: 14 | ![Todo](https://user-images.githubusercontent.com/28713093/187089536-6789cd8f-e503-470f-a1bd-016d95df20bc.gif) 15 | 16 | 17 | ## Features: 18 | - Generates local copy of Kanban board with only tasks assigned to you for easy task navigation in Obsidian 19 | - Automatically creates all your tasks as files where you can add notes and todo lists for your tasks 20 | - Customize starter content of the generated task notes in settings 21 | 22 | ## Important: 23 | This plugin works best with these other community plugins (I take no credit for these great plugins): 24 | - \"Kanban\" by mgmeyers 25 | - \"Checklist\" by delashum (Less important but works nicely alongside this plugin) 26 | If Kanban is not installed, there will be no UI for the Kanban board. However, the board generation can be toggled in settings. 27 | 28 | **Warning**: The settings are NOT encrypted, they are stored in plain text, so put your API key/ Personal Access Token in at your own risk 29 | 30 | ## Usage 31 | There are 3 options for updating your tasks from TFS: 32 | - Using the Update Interval setting to grab updates every x minutes automatically 33 | - Using the left-hand button 34 | - Using the command palette "Update Current Sprint" 35 | 36 | Notes: 37 | - The generated kanban board for the sprint is destroyed and replaced each time updates are pulled from TFS. This has the following implications: 38 | - Any manual changes to the kanban board of the current sprint will be deleted on each update of the board 39 | - The Time Interval setting should not be too low since when the kanban board note is openned when it is updated, it will close since it is deleted and replaced 40 | - Please make backups of task notes since there may be bugs in this code and they could be removed. 41 | 42 | ## Installation 43 | 44 | ### From within Obsidian 45 | From Obsidian v0.9.8, you can activate this plugin within Obsidian by doing the following: 46 | - Open Settings > Third-party plugin 47 | - Make sure Restricted mode is **off** 48 | - Click Browse community plugins 49 | - Search for this plugin 50 | - Click Install 51 | - Once installed, close the community plugins window and activate the newly installed plugin 52 | #### Updates 53 | You can follow the same procedure to update the plugin 54 | 55 | ### From GitHub 56 | - Download the Latest Release from the Releases section of the GitHub Repository 57 | - Extract the plugin folder from the zip to your vault's plugins folder: `/.obsidian/plugins/` 58 | Note: On some machines the `.obsidian` folder may be hidden. On MacOS you should be able to press `Command+Shift+Dot` to show the folder in Finder. 59 | - Reload Obsidian 60 | - If prompted about Safe Mode, you can disable safe mode and enable the plugin. 61 | Otherwise head to Settings, third-party plugins, make sure safe mode is off and 62 | enable the plugin from there. 63 | 64 | ## Development 65 | 66 | If you want to contribute to development and/or just customize it with your own 67 | tweaks, you can do the following: 68 | - Clone this repo. 69 | - `npm i` or `yarn` to install dependencies 70 | - `npm run build` to compile. 71 | - Copy `manifest.json`, `main.js` and `styles.css` to a subfolder of your plugins 72 | folder (e.g, `/.obsidian/plugins//`) 73 | - Reload obsidian to see changes 74 | 75 | Alternately, you can clone the repo directly into your plugins folder and once 76 | dependencies are installed use `npm run dev` to start compilation in watch mode. 77 | You may have to reload obsidian (`ctrl+R`) to see changes. 78 | 79 | Note: feel free to add a new TFS backend that the plugin does not currently support and make a pull request. Simply follow the example of the current TfsClient implmentations and add it to the list of implementations in main.ts 80 | 81 | ## Pricing 82 | This plugin is free to enjoy! However, if you wish to support my work, I would really appretiate it. You can do so here: 83 | 84 | [BuyMeACoffee](https://www.buymeacoffee.com/BoxThatBeat) 85 | 86 | -------------------------------------------------------------------------------- /esbuild.config.mjs: -------------------------------------------------------------------------------- 1 | import esbuild from "esbuild"; 2 | import process from "process"; 3 | import builtins from 'builtin-modules' 4 | 5 | const banner = 6 | `/* 7 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 8 | if you want to view the source, please visit the github repository of this plugin 9 | */ 10 | `; 11 | 12 | const prod = (process.argv[2] === 'production'); 13 | 14 | esbuild.build({ 15 | banner: { 16 | js: banner, 17 | }, 18 | entryPoints: ['main.ts'], 19 | bundle: true, 20 | external: [ 21 | 'obsidian', 22 | 'electron', 23 | '@codemirror/autocomplete', 24 | '@codemirror/closebrackets', 25 | '@codemirror/collab', 26 | '@codemirror/commands', 27 | '@codemirror/comment', 28 | '@codemirror/fold', 29 | '@codemirror/gutter', 30 | '@codemirror/highlight', 31 | '@codemirror/history', 32 | '@codemirror/language', 33 | '@codemirror/lint', 34 | '@codemirror/matchbrackets', 35 | '@codemirror/panel', 36 | '@codemirror/rangeset', 37 | '@codemirror/rectangular-selection', 38 | '@codemirror/search', 39 | '@codemirror/state', 40 | '@codemirror/stream-parser', 41 | '@codemirror/text', 42 | '@codemirror/tooltip', 43 | '@codemirror/view', 44 | '@lezer/common', 45 | '@lezer/highlight', 46 | '@lezer/lr', 47 | ...builtins], 48 | format: 'cjs', 49 | watch: !prod, 50 | target: 'es2016', 51 | logLevel: "info", 52 | sourcemap: prod ? false : 'inline', 53 | treeShaking: true, 54 | outfile: 'main.js', 55 | }).catch(() => process.exit(1)); 56 | -------------------------------------------------------------------------------- /main.ts: -------------------------------------------------------------------------------- 1 | import { App, Notice, Plugin, PluginSettingTab, Setting } from 'obsidian'; 2 | import { AzureDevopsClient, AzureDevopsSettings, AZURE_DEVOPS_DEFAULT_SETTINGS } from 'src/Clients/AzureDevopsClient'; 3 | import { ITfsClient } from './src/Clients/ITfsClient'; 4 | import { JiraClient, JiraSettings, JIRA_DEFAULT_SETTINGS } from './src/Clients/JiraClient'; 5 | 6 | export interface AgileTaskNotesSettings { 7 | selectedTfsClient: string; 8 | targetFolder: string; 9 | noteTemplate: string; 10 | noteName: string; 11 | intervalMinutes: number; 12 | createKanban: boolean; 13 | teamLeaderMode: boolean; 14 | azureDevopsSettings: AzureDevopsSettings; 15 | jiraSettings: JiraSettings; 16 | } 17 | 18 | const DEFAULT_SETTINGS: AgileTaskNotesSettings = { 19 | selectedTfsClient: 'AzureDevops', 20 | targetFolder: '', 21 | noteTemplate: 22 | '# {{TASK_TITLE}}\n#{{TASK_TYPE}}\n\nid: {{TASK_ID}}\nstate: {{TASK_STATE}}\nAssignedTo: {{TASK_ASSIGNEDTO}}\n\nLink: {{TASK_LINK}}\n\n{{TASK_DESCRIPTION}}\n\n#todo:\n- [ ] Create todo list\n- [ ] \n\n## Notes:\n', 23 | noteName: '{{TASK_TYPE}} - {{TASK_ID}}', 24 | intervalMinutes: 0, 25 | createKanban: true, 26 | teamLeaderMode: false, 27 | azureDevopsSettings: AZURE_DEVOPS_DEFAULT_SETTINGS, 28 | jiraSettings: JIRA_DEFAULT_SETTINGS, 29 | }; 30 | 31 | export default class AgileTaskNotesPlugin extends Plugin { 32 | settings: AgileTaskNotesSettings; 33 | 34 | tfsClientImplementations: { [key: string]: ITfsClient } = {}; 35 | 36 | async onload() { 37 | // Add TFS backend implmentations 38 | const azureDevopsClient: ITfsClient = new AzureDevopsClient(this.app); 39 | const jiraClient: ITfsClient = new JiraClient(this.app); 40 | 41 | this.tfsClientImplementations[azureDevopsClient.clientName] = azureDevopsClient; 42 | this.tfsClientImplementations[jiraClient.clientName] = jiraClient; 43 | 44 | await this.loadSettings(); 45 | 46 | // This creates an icon in the left ribbon for updating boards. 47 | this.addRibbonIcon('dice', 'Update TFS Tasks', () => { 48 | this.tfsClientImplementations[this.settings.selectedTfsClient].update(this.settings); 49 | new Notice('Updated current tasks successfully!'); 50 | }); 51 | 52 | this.addCommand({ 53 | id: 'update-tfs-tasks', 54 | name: 'Update TFS Tasks', 55 | callback: () => { 56 | this.tfsClientImplementations[this.settings.selectedTfsClient].update(this.settings); 57 | new Notice('Updated current tasks successfully!'); 58 | }, 59 | }); 60 | 61 | this.addSettingTab(new AgileTaskNotesPluginSettingTab(this.app, this)); 62 | 63 | if (this.settings.intervalMinutes > 0) { 64 | this.registerInterval( 65 | window.setInterval( 66 | () => this.tfsClientImplementations[this.settings.selectedTfsClient].update(this.settings), 67 | this.settings.intervalMinutes * 60000 68 | ) 69 | ); 70 | } 71 | } 72 | 73 | async loadSettings() { 74 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); 75 | } 76 | 77 | async saveSettings() { 78 | await this.saveData(this.settings); 79 | } 80 | } 81 | 82 | export class AgileTaskNotesPluginSettingTab extends PluginSettingTab { 83 | plugin: AgileTaskNotesPlugin; 84 | 85 | constructor(app: App, plugin: AgileTaskNotesPlugin) { 86 | super(app, plugin); 87 | this.plugin = plugin; 88 | } 89 | 90 | display(): void { 91 | const { containerEl, plugin } = this; 92 | 93 | containerEl.empty(); 94 | 95 | new Setting(containerEl) 96 | .setName('Backend TFS') 97 | .setDesc('The type of TFS you use.') 98 | .addDropdown((dropdown) => { 99 | for (const client in plugin.tfsClientImplementations) { 100 | dropdown.addOption(client, client); 101 | } 102 | dropdown.setValue(plugin.settings.selectedTfsClient).onChange(async (value) => { 103 | plugin.settings.selectedTfsClient = value; 104 | await plugin.saveSettings(); 105 | this.display(); 106 | }); 107 | }); 108 | 109 | new Setting(containerEl) 110 | .setName('Team Leader Mode') 111 | .setDesc('Pulls tasks of entire team and shows usernames in generated Kanban board. (ignores username list)') 112 | .addToggle((toggle) => 113 | toggle.setValue(plugin.settings.teamLeaderMode).onChange(async (value) => { 114 | plugin.settings.teamLeaderMode = value; 115 | await plugin.saveSettings(); 116 | }) 117 | ); 118 | 119 | plugin.tfsClientImplementations[plugin.settings.selectedTfsClient].setupSettings(containerEl, plugin, this); 120 | 121 | containerEl.createEl('h2', { text: 'Vault Settings' }); 122 | 123 | new Setting(containerEl) 124 | .setName('Target Folder (Optional)') 125 | .setDesc('The relative path to the parent folder in which to create/update Kanban boards') 126 | .addText((text) => 127 | text 128 | .setPlaceholder('Enter target folder') 129 | .setValue(plugin.settings.targetFolder) 130 | .onChange(async (value) => { 131 | plugin.settings.targetFolder = value; 132 | await plugin.saveSettings(); 133 | }) 134 | ); 135 | 136 | new Setting(containerEl) 137 | .setName('Inital Task Content') 138 | .setDesc( 139 | 'Set the inital content for each new task note. Available variables: {{TASK_ID}}, {{TASK_TITLE}}, {{TASK_TYPE}}, {{TASK_STATE}}, {{TASK_ASSIGNEDTO}}, {{TASK_LINK}}, {{TASK_DESCRIPTION}} Only For Azure: {{TASK_DUEDATE}} {{TASK_TAGS}} {{TASK_CRITERIA}} {{TASK_TESTS}}' 140 | ) 141 | .addTextArea((text) => { 142 | text 143 | .setPlaceholder('Initial content in raw markdown format') 144 | .setValue(this.plugin.settings.noteTemplate) 145 | .onChange(async (value) => { 146 | try { 147 | this.plugin.settings.noteTemplate = value; 148 | await this.plugin.saveSettings(); 149 | } catch (e) { 150 | return false; 151 | } 152 | }); 153 | text.inputEl.rows = 8; 154 | text.inputEl.cols = 50; 155 | }); 156 | new Setting(containerEl) 157 | .setName('Note Name') 158 | .setDesc( 159 | 'Set the format of the file name for each task note. Available variables: {{TASK_ID}}, {{TASK_TYPE}}, {{TASK_STATE}}, {{TASK_ASSIGNEDTO}}' 160 | ) 161 | .addText((text) => 162 | text 163 | .setPlaceholder('{{TASK_TYPE}} - {{TASK_ID}}') 164 | .setValue(plugin.settings.noteName) 165 | .onChange(async (value) => { 166 | plugin.settings.noteName = value; 167 | await plugin.saveSettings(); 168 | }) 169 | ); 170 | 171 | new Setting(containerEl) 172 | .setName('Update interval') 173 | .setDesc( 174 | "Interval (in minutes) to periodically update the kanban board and notes. Set to 0 for only manual updating. You'll need to restart Obsidian for this to take effect. Note: when an update occurs it will close the kanban board if it is open thus a number over 10 mins is recommended." 175 | ) 176 | .addText((text) => 177 | text 178 | .setPlaceholder('Enter number in minutes') 179 | .setValue(plugin.settings.intervalMinutes.toString()) 180 | .onChange(async (value) => { 181 | plugin.settings.intervalMinutes = parseInt(value); 182 | await plugin.saveSettings(); 183 | }) 184 | ); 185 | 186 | new Setting(containerEl) 187 | .setName('Create Kanban board?') 188 | .setDesc( 189 | 'Should a Kanban board be generated for the current sprint (requires the Kanban board plugin in addition to this one)' 190 | ) 191 | .addToggle((toggle) => 192 | toggle.setValue(plugin.settings.createKanban).onChange(async (value) => { 193 | plugin.settings.createKanban = value; 194 | await plugin.saveSettings(); 195 | }) 196 | ); 197 | } 198 | } 199 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-agile-task-notes", 3 | "name": "Agile Task Notes", 4 | "version": "1.4.0", 5 | "minAppVersion": "0.12.0", 6 | "description": "Import your tasks from your TFS (Azure or Jira) to take notes on them and make todo-lists!", 7 | "author": "BoxThatBeat", 8 | "authorUrl": "https://github.com/BoxThatBeat", 9 | "isDesktopOnly": false 10 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-agile-task-notes", 3 | "version": "1.4.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "obsidian-agile-task-notes", 9 | "version": "1.4.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "sanitizer": "^0.1.3" 13 | }, 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.14.47", 20 | "obsidian": "latest", 21 | "tslib": "2.4.0", 22 | "typescript": "4.7.4" 23 | } 24 | }, 25 | "node_modules/@codemirror/state": { 26 | "version": "6.1.0", 27 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.0.tgz", 28 | "integrity": "sha512-qbUr94DZTe6/V1VS7LDLz11rM/1t/nJxR1El4I6UaxDEdc0aZZvq6JCLJWiRmUf95NRAnDH6fhXn+PWp9wGCIg==", 29 | "dev": true, 30 | "peer": true 31 | }, 32 | "node_modules/@codemirror/view": { 33 | "version": "6.1.0", 34 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.1.0.tgz", 35 | "integrity": "sha512-T5QTuzwxbQ+KnZzz1ef3e3QCNH2qMdTmQhA4tbsK62lJGyCMZHSaSAJpFAr67c6Wl34IBgx2M7ue6WxJpWPOPg==", 36 | "dev": true, 37 | "peer": true, 38 | "dependencies": { 39 | "@codemirror/state": "^6.0.0", 40 | "style-mod": "^4.0.0", 41 | "w3c-keyname": "^2.2.4" 42 | } 43 | }, 44 | "node_modules/@eslint/eslintrc": { 45 | "version": "1.3.0", 46 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", 47 | "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", 48 | "dev": true, 49 | "peer": true, 50 | "dependencies": { 51 | "ajv": "^6.12.4", 52 | "debug": "^4.3.2", 53 | "espree": "^9.3.2", 54 | "globals": "^13.15.0", 55 | "ignore": "^5.2.0", 56 | "import-fresh": "^3.2.1", 57 | "js-yaml": "^4.1.0", 58 | "minimatch": "^3.1.2", 59 | "strip-json-comments": "^3.1.1" 60 | }, 61 | "engines": { 62 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 63 | } 64 | }, 65 | "node_modules/@humanwhocodes/config-array": { 66 | "version": "0.9.5", 67 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", 68 | "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", 69 | "dev": true, 70 | "peer": true, 71 | "dependencies": { 72 | "@humanwhocodes/object-schema": "^1.2.1", 73 | "debug": "^4.1.1", 74 | "minimatch": "^3.0.4" 75 | }, 76 | "engines": { 77 | "node": ">=10.10.0" 78 | } 79 | }, 80 | "node_modules/@humanwhocodes/object-schema": { 81 | "version": "1.2.1", 82 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 83 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 84 | "dev": true, 85 | "peer": true 86 | }, 87 | "node_modules/@nodelib/fs.scandir": { 88 | "version": "2.1.5", 89 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 90 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 91 | "dev": true, 92 | "dependencies": { 93 | "@nodelib/fs.stat": "2.0.5", 94 | "run-parallel": "^1.1.9" 95 | }, 96 | "engines": { 97 | "node": ">= 8" 98 | } 99 | }, 100 | "node_modules/@nodelib/fs.stat": { 101 | "version": "2.0.5", 102 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 103 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 104 | "dev": true, 105 | "engines": { 106 | "node": ">= 8" 107 | } 108 | }, 109 | "node_modules/@nodelib/fs.walk": { 110 | "version": "1.2.8", 111 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 112 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 113 | "dev": true, 114 | "dependencies": { 115 | "@nodelib/fs.scandir": "2.1.5", 116 | "fastq": "^1.6.0" 117 | }, 118 | "engines": { 119 | "node": ">= 8" 120 | } 121 | }, 122 | "node_modules/@types/codemirror": { 123 | "version": "0.0.108", 124 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz", 125 | "integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==", 126 | "dev": true, 127 | "dependencies": { 128 | "@types/tern": "*" 129 | } 130 | }, 131 | "node_modules/@types/estree": { 132 | "version": "1.0.0", 133 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", 134 | "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", 135 | "dev": true 136 | }, 137 | "node_modules/@types/json-schema": { 138 | "version": "7.0.11", 139 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", 140 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", 141 | "dev": true 142 | }, 143 | "node_modules/@types/node": { 144 | "version": "16.11.45", 145 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz", 146 | "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==", 147 | "dev": true 148 | }, 149 | "node_modules/@types/tern": { 150 | "version": "0.23.4", 151 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", 152 | "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", 153 | "dev": true, 154 | "dependencies": { 155 | "@types/estree": "*" 156 | } 157 | }, 158 | "node_modules/@typescript-eslint/eslint-plugin": { 159 | "version": "5.29.0", 160 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", 161 | "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", 162 | "dev": true, 163 | "dependencies": { 164 | "@typescript-eslint/scope-manager": "5.29.0", 165 | "@typescript-eslint/type-utils": "5.29.0", 166 | "@typescript-eslint/utils": "5.29.0", 167 | "debug": "^4.3.4", 168 | "functional-red-black-tree": "^1.0.1", 169 | "ignore": "^5.2.0", 170 | "regexpp": "^3.2.0", 171 | "semver": "^7.3.7", 172 | "tsutils": "^3.21.0" 173 | }, 174 | "engines": { 175 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 176 | }, 177 | "funding": { 178 | "type": "opencollective", 179 | "url": "https://opencollective.com/typescript-eslint" 180 | }, 181 | "peerDependencies": { 182 | "@typescript-eslint/parser": "^5.0.0", 183 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 184 | }, 185 | "peerDependenciesMeta": { 186 | "typescript": { 187 | "optional": true 188 | } 189 | } 190 | }, 191 | "node_modules/@typescript-eslint/parser": { 192 | "version": "5.29.0", 193 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", 194 | "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", 195 | "dev": true, 196 | "dependencies": { 197 | "@typescript-eslint/scope-manager": "5.29.0", 198 | "@typescript-eslint/types": "5.29.0", 199 | "@typescript-eslint/typescript-estree": "5.29.0", 200 | "debug": "^4.3.4" 201 | }, 202 | "engines": { 203 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 204 | }, 205 | "funding": { 206 | "type": "opencollective", 207 | "url": "https://opencollective.com/typescript-eslint" 208 | }, 209 | "peerDependencies": { 210 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 211 | }, 212 | "peerDependenciesMeta": { 213 | "typescript": { 214 | "optional": true 215 | } 216 | } 217 | }, 218 | "node_modules/@typescript-eslint/scope-manager": { 219 | "version": "5.29.0", 220 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", 221 | "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", 222 | "dev": true, 223 | "dependencies": { 224 | "@typescript-eslint/types": "5.29.0", 225 | "@typescript-eslint/visitor-keys": "5.29.0" 226 | }, 227 | "engines": { 228 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 229 | }, 230 | "funding": { 231 | "type": "opencollective", 232 | "url": "https://opencollective.com/typescript-eslint" 233 | } 234 | }, 235 | "node_modules/@typescript-eslint/type-utils": { 236 | "version": "5.29.0", 237 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", 238 | "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", 239 | "dev": true, 240 | "dependencies": { 241 | "@typescript-eslint/utils": "5.29.0", 242 | "debug": "^4.3.4", 243 | "tsutils": "^3.21.0" 244 | }, 245 | "engines": { 246 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 247 | }, 248 | "funding": { 249 | "type": "opencollective", 250 | "url": "https://opencollective.com/typescript-eslint" 251 | }, 252 | "peerDependencies": { 253 | "eslint": "*" 254 | }, 255 | "peerDependenciesMeta": { 256 | "typescript": { 257 | "optional": true 258 | } 259 | } 260 | }, 261 | "node_modules/@typescript-eslint/types": { 262 | "version": "5.29.0", 263 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", 264 | "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", 265 | "dev": true, 266 | "engines": { 267 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 268 | }, 269 | "funding": { 270 | "type": "opencollective", 271 | "url": "https://opencollective.com/typescript-eslint" 272 | } 273 | }, 274 | "node_modules/@typescript-eslint/typescript-estree": { 275 | "version": "5.29.0", 276 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", 277 | "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", 278 | "dev": true, 279 | "dependencies": { 280 | "@typescript-eslint/types": "5.29.0", 281 | "@typescript-eslint/visitor-keys": "5.29.0", 282 | "debug": "^4.3.4", 283 | "globby": "^11.1.0", 284 | "is-glob": "^4.0.3", 285 | "semver": "^7.3.7", 286 | "tsutils": "^3.21.0" 287 | }, 288 | "engines": { 289 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 290 | }, 291 | "funding": { 292 | "type": "opencollective", 293 | "url": "https://opencollective.com/typescript-eslint" 294 | }, 295 | "peerDependenciesMeta": { 296 | "typescript": { 297 | "optional": true 298 | } 299 | } 300 | }, 301 | "node_modules/@typescript-eslint/utils": { 302 | "version": "5.29.0", 303 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", 304 | "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", 305 | "dev": true, 306 | "dependencies": { 307 | "@types/json-schema": "^7.0.9", 308 | "@typescript-eslint/scope-manager": "5.29.0", 309 | "@typescript-eslint/types": "5.29.0", 310 | "@typescript-eslint/typescript-estree": "5.29.0", 311 | "eslint-scope": "^5.1.1", 312 | "eslint-utils": "^3.0.0" 313 | }, 314 | "engines": { 315 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 316 | }, 317 | "funding": { 318 | "type": "opencollective", 319 | "url": "https://opencollective.com/typescript-eslint" 320 | }, 321 | "peerDependencies": { 322 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 323 | } 324 | }, 325 | "node_modules/@typescript-eslint/visitor-keys": { 326 | "version": "5.29.0", 327 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", 328 | "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", 329 | "dev": true, 330 | "dependencies": { 331 | "@typescript-eslint/types": "5.29.0", 332 | "eslint-visitor-keys": "^3.3.0" 333 | }, 334 | "engines": { 335 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 336 | }, 337 | "funding": { 338 | "type": "opencollective", 339 | "url": "https://opencollective.com/typescript-eslint" 340 | } 341 | }, 342 | "node_modules/acorn": { 343 | "version": "8.8.0", 344 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", 345 | "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", 346 | "dev": true, 347 | "peer": true, 348 | "bin": { 349 | "acorn": "bin/acorn" 350 | }, 351 | "engines": { 352 | "node": ">=0.4.0" 353 | } 354 | }, 355 | "node_modules/acorn-jsx": { 356 | "version": "5.3.2", 357 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 358 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 359 | "dev": true, 360 | "peer": true, 361 | "peerDependencies": { 362 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 363 | } 364 | }, 365 | "node_modules/ajv": { 366 | "version": "6.12.6", 367 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 368 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 369 | "dev": true, 370 | "peer": true, 371 | "dependencies": { 372 | "fast-deep-equal": "^3.1.1", 373 | "fast-json-stable-stringify": "^2.0.0", 374 | "json-schema-traverse": "^0.4.1", 375 | "uri-js": "^4.2.2" 376 | }, 377 | "funding": { 378 | "type": "github", 379 | "url": "https://github.com/sponsors/epoberezkin" 380 | } 381 | }, 382 | "node_modules/ansi-regex": { 383 | "version": "5.0.1", 384 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 385 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 386 | "dev": true, 387 | "peer": true, 388 | "engines": { 389 | "node": ">=8" 390 | } 391 | }, 392 | "node_modules/ansi-styles": { 393 | "version": "4.3.0", 394 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 395 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 396 | "dev": true, 397 | "peer": true, 398 | "dependencies": { 399 | "color-convert": "^2.0.1" 400 | }, 401 | "engines": { 402 | "node": ">=8" 403 | }, 404 | "funding": { 405 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 406 | } 407 | }, 408 | "node_modules/argparse": { 409 | "version": "2.0.1", 410 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 411 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 412 | "dev": true, 413 | "peer": true 414 | }, 415 | "node_modules/array-union": { 416 | "version": "2.1.0", 417 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 418 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 419 | "dev": true, 420 | "engines": { 421 | "node": ">=8" 422 | } 423 | }, 424 | "node_modules/balanced-match": { 425 | "version": "1.0.2", 426 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 427 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 428 | "dev": true, 429 | "peer": true 430 | }, 431 | "node_modules/brace-expansion": { 432 | "version": "1.1.11", 433 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 434 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 435 | "dev": true, 436 | "peer": true, 437 | "dependencies": { 438 | "balanced-match": "^1.0.0", 439 | "concat-map": "0.0.1" 440 | } 441 | }, 442 | "node_modules/braces": { 443 | "version": "3.0.2", 444 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 445 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 446 | "dev": true, 447 | "dependencies": { 448 | "fill-range": "^7.0.1" 449 | }, 450 | "engines": { 451 | "node": ">=8" 452 | } 453 | }, 454 | "node_modules/builtin-modules": { 455 | "version": "3.3.0", 456 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 457 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 458 | "dev": true, 459 | "engines": { 460 | "node": ">=6" 461 | }, 462 | "funding": { 463 | "url": "https://github.com/sponsors/sindresorhus" 464 | } 465 | }, 466 | "node_modules/callsites": { 467 | "version": "3.1.0", 468 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 469 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 470 | "dev": true, 471 | "peer": true, 472 | "engines": { 473 | "node": ">=6" 474 | } 475 | }, 476 | "node_modules/chalk": { 477 | "version": "4.1.2", 478 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 479 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 480 | "dev": true, 481 | "peer": true, 482 | "dependencies": { 483 | "ansi-styles": "^4.1.0", 484 | "supports-color": "^7.1.0" 485 | }, 486 | "engines": { 487 | "node": ">=10" 488 | }, 489 | "funding": { 490 | "url": "https://github.com/chalk/chalk?sponsor=1" 491 | } 492 | }, 493 | "node_modules/color-convert": { 494 | "version": "2.0.1", 495 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 496 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 497 | "dev": true, 498 | "peer": true, 499 | "dependencies": { 500 | "color-name": "~1.1.4" 501 | }, 502 | "engines": { 503 | "node": ">=7.0.0" 504 | } 505 | }, 506 | "node_modules/color-name": { 507 | "version": "1.1.4", 508 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 509 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 510 | "dev": true, 511 | "peer": true 512 | }, 513 | "node_modules/concat-map": { 514 | "version": "0.0.1", 515 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 516 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 517 | "dev": true, 518 | "peer": true 519 | }, 520 | "node_modules/cross-spawn": { 521 | "version": "7.0.3", 522 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 523 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 524 | "dev": true, 525 | "peer": true, 526 | "dependencies": { 527 | "path-key": "^3.1.0", 528 | "shebang-command": "^2.0.0", 529 | "which": "^2.0.1" 530 | }, 531 | "engines": { 532 | "node": ">= 8" 533 | } 534 | }, 535 | "node_modules/debug": { 536 | "version": "4.3.4", 537 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 538 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 539 | "dev": true, 540 | "dependencies": { 541 | "ms": "2.1.2" 542 | }, 543 | "engines": { 544 | "node": ">=6.0" 545 | }, 546 | "peerDependenciesMeta": { 547 | "supports-color": { 548 | "optional": true 549 | } 550 | } 551 | }, 552 | "node_modules/deep-is": { 553 | "version": "0.1.4", 554 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 555 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 556 | "dev": true, 557 | "peer": true 558 | }, 559 | "node_modules/dir-glob": { 560 | "version": "3.0.1", 561 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 562 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 563 | "dev": true, 564 | "dependencies": { 565 | "path-type": "^4.0.0" 566 | }, 567 | "engines": { 568 | "node": ">=8" 569 | } 570 | }, 571 | "node_modules/doctrine": { 572 | "version": "3.0.0", 573 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 574 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 575 | "dev": true, 576 | "peer": true, 577 | "dependencies": { 578 | "esutils": "^2.0.2" 579 | }, 580 | "engines": { 581 | "node": ">=6.0.0" 582 | } 583 | }, 584 | "node_modules/esbuild": { 585 | "version": "0.14.47", 586 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", 587 | "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", 588 | "dev": true, 589 | "hasInstallScript": true, 590 | "bin": { 591 | "esbuild": "bin/esbuild" 592 | }, 593 | "engines": { 594 | "node": ">=12" 595 | }, 596 | "optionalDependencies": { 597 | "esbuild-android-64": "0.14.47", 598 | "esbuild-android-arm64": "0.14.47", 599 | "esbuild-darwin-64": "0.14.47", 600 | "esbuild-darwin-arm64": "0.14.47", 601 | "esbuild-freebsd-64": "0.14.47", 602 | "esbuild-freebsd-arm64": "0.14.47", 603 | "esbuild-linux-32": "0.14.47", 604 | "esbuild-linux-64": "0.14.47", 605 | "esbuild-linux-arm": "0.14.47", 606 | "esbuild-linux-arm64": "0.14.47", 607 | "esbuild-linux-mips64le": "0.14.47", 608 | "esbuild-linux-ppc64le": "0.14.47", 609 | "esbuild-linux-riscv64": "0.14.47", 610 | "esbuild-linux-s390x": "0.14.47", 611 | "esbuild-netbsd-64": "0.14.47", 612 | "esbuild-openbsd-64": "0.14.47", 613 | "esbuild-sunos-64": "0.14.47", 614 | "esbuild-windows-32": "0.14.47", 615 | "esbuild-windows-64": "0.14.47", 616 | "esbuild-windows-arm64": "0.14.47" 617 | } 618 | }, 619 | "node_modules/esbuild-android-64": { 620 | "version": "0.14.47", 621 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", 622 | "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", 623 | "cpu": [ 624 | "x64" 625 | ], 626 | "dev": true, 627 | "optional": true, 628 | "os": [ 629 | "android" 630 | ], 631 | "engines": { 632 | "node": ">=12" 633 | } 634 | }, 635 | "node_modules/esbuild-android-arm64": { 636 | "version": "0.14.47", 637 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", 638 | "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", 639 | "cpu": [ 640 | "arm64" 641 | ], 642 | "dev": true, 643 | "optional": true, 644 | "os": [ 645 | "android" 646 | ], 647 | "engines": { 648 | "node": ">=12" 649 | } 650 | }, 651 | "node_modules/esbuild-darwin-64": { 652 | "version": "0.14.47", 653 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", 654 | "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", 655 | "cpu": [ 656 | "x64" 657 | ], 658 | "dev": true, 659 | "optional": true, 660 | "os": [ 661 | "darwin" 662 | ], 663 | "engines": { 664 | "node": ">=12" 665 | } 666 | }, 667 | "node_modules/esbuild-darwin-arm64": { 668 | "version": "0.14.47", 669 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", 670 | "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", 671 | "cpu": [ 672 | "arm64" 673 | ], 674 | "dev": true, 675 | "optional": true, 676 | "os": [ 677 | "darwin" 678 | ], 679 | "engines": { 680 | "node": ">=12" 681 | } 682 | }, 683 | "node_modules/esbuild-freebsd-64": { 684 | "version": "0.14.47", 685 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", 686 | "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", 687 | "cpu": [ 688 | "x64" 689 | ], 690 | "dev": true, 691 | "optional": true, 692 | "os": [ 693 | "freebsd" 694 | ], 695 | "engines": { 696 | "node": ">=12" 697 | } 698 | }, 699 | "node_modules/esbuild-freebsd-arm64": { 700 | "version": "0.14.47", 701 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", 702 | "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", 703 | "cpu": [ 704 | "arm64" 705 | ], 706 | "dev": true, 707 | "optional": true, 708 | "os": [ 709 | "freebsd" 710 | ], 711 | "engines": { 712 | "node": ">=12" 713 | } 714 | }, 715 | "node_modules/esbuild-linux-32": { 716 | "version": "0.14.47", 717 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", 718 | "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", 719 | "cpu": [ 720 | "ia32" 721 | ], 722 | "dev": true, 723 | "optional": true, 724 | "os": [ 725 | "linux" 726 | ], 727 | "engines": { 728 | "node": ">=12" 729 | } 730 | }, 731 | "node_modules/esbuild-linux-64": { 732 | "version": "0.14.47", 733 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", 734 | "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", 735 | "cpu": [ 736 | "x64" 737 | ], 738 | "dev": true, 739 | "optional": true, 740 | "os": [ 741 | "linux" 742 | ], 743 | "engines": { 744 | "node": ">=12" 745 | } 746 | }, 747 | "node_modules/esbuild-linux-arm": { 748 | "version": "0.14.47", 749 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", 750 | "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", 751 | "cpu": [ 752 | "arm" 753 | ], 754 | "dev": true, 755 | "optional": true, 756 | "os": [ 757 | "linux" 758 | ], 759 | "engines": { 760 | "node": ">=12" 761 | } 762 | }, 763 | "node_modules/esbuild-linux-arm64": { 764 | "version": "0.14.47", 765 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", 766 | "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", 767 | "cpu": [ 768 | "arm64" 769 | ], 770 | "dev": true, 771 | "optional": true, 772 | "os": [ 773 | "linux" 774 | ], 775 | "engines": { 776 | "node": ">=12" 777 | } 778 | }, 779 | "node_modules/esbuild-linux-mips64le": { 780 | "version": "0.14.47", 781 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", 782 | "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", 783 | "cpu": [ 784 | "mips64el" 785 | ], 786 | "dev": true, 787 | "optional": true, 788 | "os": [ 789 | "linux" 790 | ], 791 | "engines": { 792 | "node": ">=12" 793 | } 794 | }, 795 | "node_modules/esbuild-linux-ppc64le": { 796 | "version": "0.14.47", 797 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", 798 | "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", 799 | "cpu": [ 800 | "ppc64" 801 | ], 802 | "dev": true, 803 | "optional": true, 804 | "os": [ 805 | "linux" 806 | ], 807 | "engines": { 808 | "node": ">=12" 809 | } 810 | }, 811 | "node_modules/esbuild-linux-riscv64": { 812 | "version": "0.14.47", 813 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", 814 | "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", 815 | "cpu": [ 816 | "riscv64" 817 | ], 818 | "dev": true, 819 | "optional": true, 820 | "os": [ 821 | "linux" 822 | ], 823 | "engines": { 824 | "node": ">=12" 825 | } 826 | }, 827 | "node_modules/esbuild-linux-s390x": { 828 | "version": "0.14.47", 829 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", 830 | "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", 831 | "cpu": [ 832 | "s390x" 833 | ], 834 | "dev": true, 835 | "optional": true, 836 | "os": [ 837 | "linux" 838 | ], 839 | "engines": { 840 | "node": ">=12" 841 | } 842 | }, 843 | "node_modules/esbuild-netbsd-64": { 844 | "version": "0.14.47", 845 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", 846 | "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", 847 | "cpu": [ 848 | "x64" 849 | ], 850 | "dev": true, 851 | "optional": true, 852 | "os": [ 853 | "netbsd" 854 | ], 855 | "engines": { 856 | "node": ">=12" 857 | } 858 | }, 859 | "node_modules/esbuild-openbsd-64": { 860 | "version": "0.14.47", 861 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", 862 | "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", 863 | "cpu": [ 864 | "x64" 865 | ], 866 | "dev": true, 867 | "optional": true, 868 | "os": [ 869 | "openbsd" 870 | ], 871 | "engines": { 872 | "node": ">=12" 873 | } 874 | }, 875 | "node_modules/esbuild-sunos-64": { 876 | "version": "0.14.47", 877 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", 878 | "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", 879 | "cpu": [ 880 | "x64" 881 | ], 882 | "dev": true, 883 | "optional": true, 884 | "os": [ 885 | "sunos" 886 | ], 887 | "engines": { 888 | "node": ">=12" 889 | } 890 | }, 891 | "node_modules/esbuild-windows-32": { 892 | "version": "0.14.47", 893 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", 894 | "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", 895 | "cpu": [ 896 | "ia32" 897 | ], 898 | "dev": true, 899 | "optional": true, 900 | "os": [ 901 | "win32" 902 | ], 903 | "engines": { 904 | "node": ">=12" 905 | } 906 | }, 907 | "node_modules/esbuild-windows-64": { 908 | "version": "0.14.47", 909 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", 910 | "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", 911 | "cpu": [ 912 | "x64" 913 | ], 914 | "dev": true, 915 | "optional": true, 916 | "os": [ 917 | "win32" 918 | ], 919 | "engines": { 920 | "node": ">=12" 921 | } 922 | }, 923 | "node_modules/esbuild-windows-arm64": { 924 | "version": "0.14.47", 925 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", 926 | "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", 927 | "cpu": [ 928 | "arm64" 929 | ], 930 | "dev": true, 931 | "optional": true, 932 | "os": [ 933 | "win32" 934 | ], 935 | "engines": { 936 | "node": ">=12" 937 | } 938 | }, 939 | "node_modules/escape-string-regexp": { 940 | "version": "4.0.0", 941 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 942 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 943 | "dev": true, 944 | "peer": true, 945 | "engines": { 946 | "node": ">=10" 947 | }, 948 | "funding": { 949 | "url": "https://github.com/sponsors/sindresorhus" 950 | } 951 | }, 952 | "node_modules/eslint": { 953 | "version": "8.20.0", 954 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", 955 | "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", 956 | "dev": true, 957 | "peer": true, 958 | "dependencies": { 959 | "@eslint/eslintrc": "^1.3.0", 960 | "@humanwhocodes/config-array": "^0.9.2", 961 | "ajv": "^6.10.0", 962 | "chalk": "^4.0.0", 963 | "cross-spawn": "^7.0.2", 964 | "debug": "^4.3.2", 965 | "doctrine": "^3.0.0", 966 | "escape-string-regexp": "^4.0.0", 967 | "eslint-scope": "^7.1.1", 968 | "eslint-utils": "^3.0.0", 969 | "eslint-visitor-keys": "^3.3.0", 970 | "espree": "^9.3.2", 971 | "esquery": "^1.4.0", 972 | "esutils": "^2.0.2", 973 | "fast-deep-equal": "^3.1.3", 974 | "file-entry-cache": "^6.0.1", 975 | "functional-red-black-tree": "^1.0.1", 976 | "glob-parent": "^6.0.1", 977 | "globals": "^13.15.0", 978 | "ignore": "^5.2.0", 979 | "import-fresh": "^3.0.0", 980 | "imurmurhash": "^0.1.4", 981 | "is-glob": "^4.0.0", 982 | "js-yaml": "^4.1.0", 983 | "json-stable-stringify-without-jsonify": "^1.0.1", 984 | "levn": "^0.4.1", 985 | "lodash.merge": "^4.6.2", 986 | "minimatch": "^3.1.2", 987 | "natural-compare": "^1.4.0", 988 | "optionator": "^0.9.1", 989 | "regexpp": "^3.2.0", 990 | "strip-ansi": "^6.0.1", 991 | "strip-json-comments": "^3.1.0", 992 | "text-table": "^0.2.0", 993 | "v8-compile-cache": "^2.0.3" 994 | }, 995 | "bin": { 996 | "eslint": "bin/eslint.js" 997 | }, 998 | "engines": { 999 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1000 | }, 1001 | "funding": { 1002 | "url": "https://opencollective.com/eslint" 1003 | } 1004 | }, 1005 | "node_modules/eslint-scope": { 1006 | "version": "5.1.1", 1007 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 1008 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 1009 | "dev": true, 1010 | "dependencies": { 1011 | "esrecurse": "^4.3.0", 1012 | "estraverse": "^4.1.1" 1013 | }, 1014 | "engines": { 1015 | "node": ">=8.0.0" 1016 | } 1017 | }, 1018 | "node_modules/eslint-utils": { 1019 | "version": "3.0.0", 1020 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1021 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1022 | "dev": true, 1023 | "dependencies": { 1024 | "eslint-visitor-keys": "^2.0.0" 1025 | }, 1026 | "engines": { 1027 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 1028 | }, 1029 | "funding": { 1030 | "url": "https://github.com/sponsors/mysticatea" 1031 | }, 1032 | "peerDependencies": { 1033 | "eslint": ">=5" 1034 | } 1035 | }, 1036 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 1037 | "version": "2.1.0", 1038 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1039 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1040 | "dev": true, 1041 | "engines": { 1042 | "node": ">=10" 1043 | } 1044 | }, 1045 | "node_modules/eslint-visitor-keys": { 1046 | "version": "3.3.0", 1047 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 1048 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 1049 | "dev": true, 1050 | "engines": { 1051 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1052 | } 1053 | }, 1054 | "node_modules/eslint/node_modules/eslint-scope": { 1055 | "version": "7.1.1", 1056 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 1057 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 1058 | "dev": true, 1059 | "peer": true, 1060 | "dependencies": { 1061 | "esrecurse": "^4.3.0", 1062 | "estraverse": "^5.2.0" 1063 | }, 1064 | "engines": { 1065 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1066 | } 1067 | }, 1068 | "node_modules/eslint/node_modules/estraverse": { 1069 | "version": "5.3.0", 1070 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1071 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1072 | "dev": true, 1073 | "peer": true, 1074 | "engines": { 1075 | "node": ">=4.0" 1076 | } 1077 | }, 1078 | "node_modules/espree": { 1079 | "version": "9.3.2", 1080 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", 1081 | "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", 1082 | "dev": true, 1083 | "peer": true, 1084 | "dependencies": { 1085 | "acorn": "^8.7.1", 1086 | "acorn-jsx": "^5.3.2", 1087 | "eslint-visitor-keys": "^3.3.0" 1088 | }, 1089 | "engines": { 1090 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1091 | } 1092 | }, 1093 | "node_modules/esquery": { 1094 | "version": "1.4.0", 1095 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 1096 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 1097 | "dev": true, 1098 | "peer": true, 1099 | "dependencies": { 1100 | "estraverse": "^5.1.0" 1101 | }, 1102 | "engines": { 1103 | "node": ">=0.10" 1104 | } 1105 | }, 1106 | "node_modules/esquery/node_modules/estraverse": { 1107 | "version": "5.3.0", 1108 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1109 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1110 | "dev": true, 1111 | "peer": true, 1112 | "engines": { 1113 | "node": ">=4.0" 1114 | } 1115 | }, 1116 | "node_modules/esrecurse": { 1117 | "version": "4.3.0", 1118 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1119 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1120 | "dev": true, 1121 | "dependencies": { 1122 | "estraverse": "^5.2.0" 1123 | }, 1124 | "engines": { 1125 | "node": ">=4.0" 1126 | } 1127 | }, 1128 | "node_modules/esrecurse/node_modules/estraverse": { 1129 | "version": "5.3.0", 1130 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1131 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1132 | "dev": true, 1133 | "engines": { 1134 | "node": ">=4.0" 1135 | } 1136 | }, 1137 | "node_modules/estraverse": { 1138 | "version": "4.3.0", 1139 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1140 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1141 | "dev": true, 1142 | "engines": { 1143 | "node": ">=4.0" 1144 | } 1145 | }, 1146 | "node_modules/esutils": { 1147 | "version": "2.0.3", 1148 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1149 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1150 | "dev": true, 1151 | "peer": true, 1152 | "engines": { 1153 | "node": ">=0.10.0" 1154 | } 1155 | }, 1156 | "node_modules/fast-deep-equal": { 1157 | "version": "3.1.3", 1158 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1159 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1160 | "dev": true, 1161 | "peer": true 1162 | }, 1163 | "node_modules/fast-glob": { 1164 | "version": "3.2.11", 1165 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 1166 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 1167 | "dev": true, 1168 | "dependencies": { 1169 | "@nodelib/fs.stat": "^2.0.2", 1170 | "@nodelib/fs.walk": "^1.2.3", 1171 | "glob-parent": "^5.1.2", 1172 | "merge2": "^1.3.0", 1173 | "micromatch": "^4.0.4" 1174 | }, 1175 | "engines": { 1176 | "node": ">=8.6.0" 1177 | } 1178 | }, 1179 | "node_modules/fast-glob/node_modules/glob-parent": { 1180 | "version": "5.1.2", 1181 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1182 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1183 | "dev": true, 1184 | "dependencies": { 1185 | "is-glob": "^4.0.1" 1186 | }, 1187 | "engines": { 1188 | "node": ">= 6" 1189 | } 1190 | }, 1191 | "node_modules/fast-json-stable-stringify": { 1192 | "version": "2.1.0", 1193 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1194 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1195 | "dev": true, 1196 | "peer": true 1197 | }, 1198 | "node_modules/fast-levenshtein": { 1199 | "version": "2.0.6", 1200 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1201 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1202 | "dev": true, 1203 | "peer": true 1204 | }, 1205 | "node_modules/fastq": { 1206 | "version": "1.13.0", 1207 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1208 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1209 | "dev": true, 1210 | "dependencies": { 1211 | "reusify": "^1.0.4" 1212 | } 1213 | }, 1214 | "node_modules/file-entry-cache": { 1215 | "version": "6.0.1", 1216 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1217 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1218 | "dev": true, 1219 | "peer": true, 1220 | "dependencies": { 1221 | "flat-cache": "^3.0.4" 1222 | }, 1223 | "engines": { 1224 | "node": "^10.12.0 || >=12.0.0" 1225 | } 1226 | }, 1227 | "node_modules/fill-range": { 1228 | "version": "7.0.1", 1229 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1230 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1231 | "dev": true, 1232 | "dependencies": { 1233 | "to-regex-range": "^5.0.1" 1234 | }, 1235 | "engines": { 1236 | "node": ">=8" 1237 | } 1238 | }, 1239 | "node_modules/flat-cache": { 1240 | "version": "3.0.4", 1241 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1242 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1243 | "dev": true, 1244 | "peer": true, 1245 | "dependencies": { 1246 | "flatted": "^3.1.0", 1247 | "rimraf": "^3.0.2" 1248 | }, 1249 | "engines": { 1250 | "node": "^10.12.0 || >=12.0.0" 1251 | } 1252 | }, 1253 | "node_modules/flatted": { 1254 | "version": "3.2.6", 1255 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", 1256 | "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", 1257 | "dev": true, 1258 | "peer": true 1259 | }, 1260 | "node_modules/fs.realpath": { 1261 | "version": "1.0.0", 1262 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1263 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1264 | "dev": true, 1265 | "peer": true 1266 | }, 1267 | "node_modules/functional-red-black-tree": { 1268 | "version": "1.0.1", 1269 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1270 | "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", 1271 | "dev": true 1272 | }, 1273 | "node_modules/glob": { 1274 | "version": "7.2.3", 1275 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1276 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1277 | "dev": true, 1278 | "peer": true, 1279 | "dependencies": { 1280 | "fs.realpath": "^1.0.0", 1281 | "inflight": "^1.0.4", 1282 | "inherits": "2", 1283 | "minimatch": "^3.1.1", 1284 | "once": "^1.3.0", 1285 | "path-is-absolute": "^1.0.0" 1286 | }, 1287 | "engines": { 1288 | "node": "*" 1289 | }, 1290 | "funding": { 1291 | "url": "https://github.com/sponsors/isaacs" 1292 | } 1293 | }, 1294 | "node_modules/glob-parent": { 1295 | "version": "6.0.2", 1296 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1297 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1298 | "dev": true, 1299 | "peer": true, 1300 | "dependencies": { 1301 | "is-glob": "^4.0.3" 1302 | }, 1303 | "engines": { 1304 | "node": ">=10.13.0" 1305 | } 1306 | }, 1307 | "node_modules/globals": { 1308 | "version": "13.17.0", 1309 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", 1310 | "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", 1311 | "dev": true, 1312 | "peer": true, 1313 | "dependencies": { 1314 | "type-fest": "^0.20.2" 1315 | }, 1316 | "engines": { 1317 | "node": ">=8" 1318 | }, 1319 | "funding": { 1320 | "url": "https://github.com/sponsors/sindresorhus" 1321 | } 1322 | }, 1323 | "node_modules/globby": { 1324 | "version": "11.1.0", 1325 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1326 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1327 | "dev": true, 1328 | "dependencies": { 1329 | "array-union": "^2.1.0", 1330 | "dir-glob": "^3.0.1", 1331 | "fast-glob": "^3.2.9", 1332 | "ignore": "^5.2.0", 1333 | "merge2": "^1.4.1", 1334 | "slash": "^3.0.0" 1335 | }, 1336 | "engines": { 1337 | "node": ">=10" 1338 | }, 1339 | "funding": { 1340 | "url": "https://github.com/sponsors/sindresorhus" 1341 | } 1342 | }, 1343 | "node_modules/has-flag": { 1344 | "version": "4.0.0", 1345 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1346 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1347 | "dev": true, 1348 | "peer": true, 1349 | "engines": { 1350 | "node": ">=8" 1351 | } 1352 | }, 1353 | "node_modules/ignore": { 1354 | "version": "5.2.0", 1355 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", 1356 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", 1357 | "dev": true, 1358 | "engines": { 1359 | "node": ">= 4" 1360 | } 1361 | }, 1362 | "node_modules/import-fresh": { 1363 | "version": "3.3.0", 1364 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1365 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1366 | "dev": true, 1367 | "peer": true, 1368 | "dependencies": { 1369 | "parent-module": "^1.0.0", 1370 | "resolve-from": "^4.0.0" 1371 | }, 1372 | "engines": { 1373 | "node": ">=6" 1374 | }, 1375 | "funding": { 1376 | "url": "https://github.com/sponsors/sindresorhus" 1377 | } 1378 | }, 1379 | "node_modules/imurmurhash": { 1380 | "version": "0.1.4", 1381 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1382 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1383 | "dev": true, 1384 | "peer": true, 1385 | "engines": { 1386 | "node": ">=0.8.19" 1387 | } 1388 | }, 1389 | "node_modules/inflight": { 1390 | "version": "1.0.6", 1391 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1392 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1393 | "dev": true, 1394 | "peer": true, 1395 | "dependencies": { 1396 | "once": "^1.3.0", 1397 | "wrappy": "1" 1398 | } 1399 | }, 1400 | "node_modules/inherits": { 1401 | "version": "2.0.4", 1402 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1403 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1404 | "dev": true, 1405 | "peer": true 1406 | }, 1407 | "node_modules/is-extglob": { 1408 | "version": "2.1.1", 1409 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1410 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1411 | "dev": true, 1412 | "engines": { 1413 | "node": ">=0.10.0" 1414 | } 1415 | }, 1416 | "node_modules/is-glob": { 1417 | "version": "4.0.3", 1418 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1419 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1420 | "dev": true, 1421 | "dependencies": { 1422 | "is-extglob": "^2.1.1" 1423 | }, 1424 | "engines": { 1425 | "node": ">=0.10.0" 1426 | } 1427 | }, 1428 | "node_modules/is-number": { 1429 | "version": "7.0.0", 1430 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1431 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1432 | "dev": true, 1433 | "engines": { 1434 | "node": ">=0.12.0" 1435 | } 1436 | }, 1437 | "node_modules/isexe": { 1438 | "version": "2.0.0", 1439 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1440 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1441 | "dev": true, 1442 | "peer": true 1443 | }, 1444 | "node_modules/js-yaml": { 1445 | "version": "4.1.0", 1446 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1447 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1448 | "dev": true, 1449 | "peer": true, 1450 | "dependencies": { 1451 | "argparse": "^2.0.1" 1452 | }, 1453 | "bin": { 1454 | "js-yaml": "bin/js-yaml.js" 1455 | } 1456 | }, 1457 | "node_modules/json-schema-traverse": { 1458 | "version": "0.4.1", 1459 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1460 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1461 | "dev": true, 1462 | "peer": true 1463 | }, 1464 | "node_modules/json-stable-stringify-without-jsonify": { 1465 | "version": "1.0.1", 1466 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1467 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1468 | "dev": true, 1469 | "peer": true 1470 | }, 1471 | "node_modules/levn": { 1472 | "version": "0.4.1", 1473 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1474 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1475 | "dev": true, 1476 | "peer": true, 1477 | "dependencies": { 1478 | "prelude-ls": "^1.2.1", 1479 | "type-check": "~0.4.0" 1480 | }, 1481 | "engines": { 1482 | "node": ">= 0.8.0" 1483 | } 1484 | }, 1485 | "node_modules/lodash.merge": { 1486 | "version": "4.6.2", 1487 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1488 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1489 | "dev": true, 1490 | "peer": true 1491 | }, 1492 | "node_modules/lru-cache": { 1493 | "version": "6.0.0", 1494 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1495 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1496 | "dev": true, 1497 | "dependencies": { 1498 | "yallist": "^4.0.0" 1499 | }, 1500 | "engines": { 1501 | "node": ">=10" 1502 | } 1503 | }, 1504 | "node_modules/merge2": { 1505 | "version": "1.4.1", 1506 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1507 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1508 | "dev": true, 1509 | "engines": { 1510 | "node": ">= 8" 1511 | } 1512 | }, 1513 | "node_modules/micromatch": { 1514 | "version": "4.0.5", 1515 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1516 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1517 | "dev": true, 1518 | "dependencies": { 1519 | "braces": "^3.0.2", 1520 | "picomatch": "^2.3.1" 1521 | }, 1522 | "engines": { 1523 | "node": ">=8.6" 1524 | } 1525 | }, 1526 | "node_modules/minimatch": { 1527 | "version": "3.1.2", 1528 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1529 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1530 | "dev": true, 1531 | "peer": true, 1532 | "dependencies": { 1533 | "brace-expansion": "^1.1.7" 1534 | }, 1535 | "engines": { 1536 | "node": "*" 1537 | } 1538 | }, 1539 | "node_modules/moment": { 1540 | "version": "2.29.3", 1541 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", 1542 | "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", 1543 | "dev": true, 1544 | "engines": { 1545 | "node": "*" 1546 | } 1547 | }, 1548 | "node_modules/ms": { 1549 | "version": "2.1.2", 1550 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1551 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1552 | "dev": true 1553 | }, 1554 | "node_modules/natural-compare": { 1555 | "version": "1.4.0", 1556 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1557 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1558 | "dev": true, 1559 | "peer": true 1560 | }, 1561 | "node_modules/obsidian": { 1562 | "version": "0.15.4", 1563 | "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-0.15.4.tgz", 1564 | "integrity": "sha512-FE11CxxpVD6t/DBvjLvlT7q7YYW91ubTqPKIIp286LdnyLipS8Xi3Tif8i8ALPv87Vg9obKM43aWcPsYLxLllQ==", 1565 | "dev": true, 1566 | "dependencies": { 1567 | "@types/codemirror": "0.0.108", 1568 | "moment": "2.29.3" 1569 | }, 1570 | "peerDependencies": { 1571 | "@codemirror/state": "^6.0.0", 1572 | "@codemirror/view": "^6.0.0" 1573 | } 1574 | }, 1575 | "node_modules/once": { 1576 | "version": "1.4.0", 1577 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1578 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1579 | "dev": true, 1580 | "peer": true, 1581 | "dependencies": { 1582 | "wrappy": "1" 1583 | } 1584 | }, 1585 | "node_modules/optionator": { 1586 | "version": "0.9.1", 1587 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1588 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1589 | "dev": true, 1590 | "peer": true, 1591 | "dependencies": { 1592 | "deep-is": "^0.1.3", 1593 | "fast-levenshtein": "^2.0.6", 1594 | "levn": "^0.4.1", 1595 | "prelude-ls": "^1.2.1", 1596 | "type-check": "^0.4.0", 1597 | "word-wrap": "^1.2.3" 1598 | }, 1599 | "engines": { 1600 | "node": ">= 0.8.0" 1601 | } 1602 | }, 1603 | "node_modules/parent-module": { 1604 | "version": "1.0.1", 1605 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1606 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1607 | "dev": true, 1608 | "peer": true, 1609 | "dependencies": { 1610 | "callsites": "^3.0.0" 1611 | }, 1612 | "engines": { 1613 | "node": ">=6" 1614 | } 1615 | }, 1616 | "node_modules/path-is-absolute": { 1617 | "version": "1.0.1", 1618 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1619 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1620 | "dev": true, 1621 | "peer": true, 1622 | "engines": { 1623 | "node": ">=0.10.0" 1624 | } 1625 | }, 1626 | "node_modules/path-key": { 1627 | "version": "3.1.1", 1628 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1629 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1630 | "dev": true, 1631 | "peer": true, 1632 | "engines": { 1633 | "node": ">=8" 1634 | } 1635 | }, 1636 | "node_modules/path-type": { 1637 | "version": "4.0.0", 1638 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1639 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1640 | "dev": true, 1641 | "engines": { 1642 | "node": ">=8" 1643 | } 1644 | }, 1645 | "node_modules/picomatch": { 1646 | "version": "2.3.1", 1647 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1648 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1649 | "dev": true, 1650 | "engines": { 1651 | "node": ">=8.6" 1652 | }, 1653 | "funding": { 1654 | "url": "https://github.com/sponsors/jonschlinkert" 1655 | } 1656 | }, 1657 | "node_modules/prelude-ls": { 1658 | "version": "1.2.1", 1659 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1660 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1661 | "dev": true, 1662 | "peer": true, 1663 | "engines": { 1664 | "node": ">= 0.8.0" 1665 | } 1666 | }, 1667 | "node_modules/punycode": { 1668 | "version": "2.1.1", 1669 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1670 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1671 | "dev": true, 1672 | "peer": true, 1673 | "engines": { 1674 | "node": ">=6" 1675 | } 1676 | }, 1677 | "node_modules/queue-microtask": { 1678 | "version": "1.2.3", 1679 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1680 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1681 | "dev": true, 1682 | "funding": [ 1683 | { 1684 | "type": "github", 1685 | "url": "https://github.com/sponsors/feross" 1686 | }, 1687 | { 1688 | "type": "patreon", 1689 | "url": "https://www.patreon.com/feross" 1690 | }, 1691 | { 1692 | "type": "consulting", 1693 | "url": "https://feross.org/support" 1694 | } 1695 | ] 1696 | }, 1697 | "node_modules/regexpp": { 1698 | "version": "3.2.0", 1699 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1700 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1701 | "dev": true, 1702 | "engines": { 1703 | "node": ">=8" 1704 | }, 1705 | "funding": { 1706 | "url": "https://github.com/sponsors/mysticatea" 1707 | } 1708 | }, 1709 | "node_modules/resolve-from": { 1710 | "version": "4.0.0", 1711 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1712 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1713 | "dev": true, 1714 | "peer": true, 1715 | "engines": { 1716 | "node": ">=4" 1717 | } 1718 | }, 1719 | "node_modules/reusify": { 1720 | "version": "1.0.4", 1721 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1722 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1723 | "dev": true, 1724 | "engines": { 1725 | "iojs": ">=1.0.0", 1726 | "node": ">=0.10.0" 1727 | } 1728 | }, 1729 | "node_modules/rimraf": { 1730 | "version": "3.0.2", 1731 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1732 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1733 | "dev": true, 1734 | "peer": true, 1735 | "dependencies": { 1736 | "glob": "^7.1.3" 1737 | }, 1738 | "bin": { 1739 | "rimraf": "bin.js" 1740 | }, 1741 | "funding": { 1742 | "url": "https://github.com/sponsors/isaacs" 1743 | } 1744 | }, 1745 | "node_modules/run-parallel": { 1746 | "version": "1.2.0", 1747 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1748 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1749 | "dev": true, 1750 | "funding": [ 1751 | { 1752 | "type": "github", 1753 | "url": "https://github.com/sponsors/feross" 1754 | }, 1755 | { 1756 | "type": "patreon", 1757 | "url": "https://www.patreon.com/feross" 1758 | }, 1759 | { 1760 | "type": "consulting", 1761 | "url": "https://feross.org/support" 1762 | } 1763 | ], 1764 | "dependencies": { 1765 | "queue-microtask": "^1.2.2" 1766 | } 1767 | }, 1768 | "node_modules/sanitizer": { 1769 | "version": "0.1.3", 1770 | "resolved": "https://registry.npmjs.org/sanitizer/-/sanitizer-0.1.3.tgz", 1771 | "integrity": "sha512-j05vL56tR90rsYqm9ZD05v6K4HI7t4yMDEvvU0x4f+IADXM9Jx1x9mzatxOs5drJq6dGhugxDW99mcPvXVLl+Q==" 1772 | }, 1773 | "node_modules/semver": { 1774 | "version": "7.3.7", 1775 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", 1776 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", 1777 | "dev": true, 1778 | "dependencies": { 1779 | "lru-cache": "^6.0.0" 1780 | }, 1781 | "bin": { 1782 | "semver": "bin/semver.js" 1783 | }, 1784 | "engines": { 1785 | "node": ">=10" 1786 | } 1787 | }, 1788 | "node_modules/shebang-command": { 1789 | "version": "2.0.0", 1790 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1791 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1792 | "dev": true, 1793 | "peer": true, 1794 | "dependencies": { 1795 | "shebang-regex": "^3.0.0" 1796 | }, 1797 | "engines": { 1798 | "node": ">=8" 1799 | } 1800 | }, 1801 | "node_modules/shebang-regex": { 1802 | "version": "3.0.0", 1803 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1804 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1805 | "dev": true, 1806 | "peer": true, 1807 | "engines": { 1808 | "node": ">=8" 1809 | } 1810 | }, 1811 | "node_modules/slash": { 1812 | "version": "3.0.0", 1813 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1814 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1815 | "dev": true, 1816 | "engines": { 1817 | "node": ">=8" 1818 | } 1819 | }, 1820 | "node_modules/strip-ansi": { 1821 | "version": "6.0.1", 1822 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1823 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1824 | "dev": true, 1825 | "peer": true, 1826 | "dependencies": { 1827 | "ansi-regex": "^5.0.1" 1828 | }, 1829 | "engines": { 1830 | "node": ">=8" 1831 | } 1832 | }, 1833 | "node_modules/strip-json-comments": { 1834 | "version": "3.1.1", 1835 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1836 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1837 | "dev": true, 1838 | "peer": true, 1839 | "engines": { 1840 | "node": ">=8" 1841 | }, 1842 | "funding": { 1843 | "url": "https://github.com/sponsors/sindresorhus" 1844 | } 1845 | }, 1846 | "node_modules/style-mod": { 1847 | "version": "4.0.0", 1848 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz", 1849 | "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", 1850 | "dev": true, 1851 | "peer": true 1852 | }, 1853 | "node_modules/supports-color": { 1854 | "version": "7.2.0", 1855 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1856 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1857 | "dev": true, 1858 | "peer": true, 1859 | "dependencies": { 1860 | "has-flag": "^4.0.0" 1861 | }, 1862 | "engines": { 1863 | "node": ">=8" 1864 | } 1865 | }, 1866 | "node_modules/text-table": { 1867 | "version": "0.2.0", 1868 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1869 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 1870 | "dev": true, 1871 | "peer": true 1872 | }, 1873 | "node_modules/to-regex-range": { 1874 | "version": "5.0.1", 1875 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1876 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1877 | "dev": true, 1878 | "dependencies": { 1879 | "is-number": "^7.0.0" 1880 | }, 1881 | "engines": { 1882 | "node": ">=8.0" 1883 | } 1884 | }, 1885 | "node_modules/tslib": { 1886 | "version": "2.4.0", 1887 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 1888 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 1889 | "dev": true 1890 | }, 1891 | "node_modules/tsutils": { 1892 | "version": "3.21.0", 1893 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", 1894 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", 1895 | "dev": true, 1896 | "dependencies": { 1897 | "tslib": "^1.8.1" 1898 | }, 1899 | "engines": { 1900 | "node": ">= 6" 1901 | }, 1902 | "peerDependencies": { 1903 | "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" 1904 | } 1905 | }, 1906 | "node_modules/tsutils/node_modules/tslib": { 1907 | "version": "1.14.1", 1908 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1909 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1910 | "dev": true 1911 | }, 1912 | "node_modules/type-check": { 1913 | "version": "0.4.0", 1914 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1915 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1916 | "dev": true, 1917 | "peer": true, 1918 | "dependencies": { 1919 | "prelude-ls": "^1.2.1" 1920 | }, 1921 | "engines": { 1922 | "node": ">= 0.8.0" 1923 | } 1924 | }, 1925 | "node_modules/type-fest": { 1926 | "version": "0.20.2", 1927 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1928 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1929 | "dev": true, 1930 | "peer": true, 1931 | "engines": { 1932 | "node": ">=10" 1933 | }, 1934 | "funding": { 1935 | "url": "https://github.com/sponsors/sindresorhus" 1936 | } 1937 | }, 1938 | "node_modules/typescript": { 1939 | "version": "4.7.4", 1940 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 1941 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 1942 | "dev": true, 1943 | "bin": { 1944 | "tsc": "bin/tsc", 1945 | "tsserver": "bin/tsserver" 1946 | }, 1947 | "engines": { 1948 | "node": ">=4.2.0" 1949 | } 1950 | }, 1951 | "node_modules/uri-js": { 1952 | "version": "4.4.1", 1953 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1954 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1955 | "dev": true, 1956 | "peer": true, 1957 | "dependencies": { 1958 | "punycode": "^2.1.0" 1959 | } 1960 | }, 1961 | "node_modules/v8-compile-cache": { 1962 | "version": "2.3.0", 1963 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 1964 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 1965 | "dev": true, 1966 | "peer": true 1967 | }, 1968 | "node_modules/w3c-keyname": { 1969 | "version": "2.2.4", 1970 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", 1971 | "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==", 1972 | "dev": true, 1973 | "peer": true 1974 | }, 1975 | "node_modules/which": { 1976 | "version": "2.0.2", 1977 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1978 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1979 | "dev": true, 1980 | "peer": true, 1981 | "dependencies": { 1982 | "isexe": "^2.0.0" 1983 | }, 1984 | "bin": { 1985 | "node-which": "bin/node-which" 1986 | }, 1987 | "engines": { 1988 | "node": ">= 8" 1989 | } 1990 | }, 1991 | "node_modules/word-wrap": { 1992 | "version": "1.2.3", 1993 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1994 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1995 | "dev": true, 1996 | "peer": true, 1997 | "engines": { 1998 | "node": ">=0.10.0" 1999 | } 2000 | }, 2001 | "node_modules/wrappy": { 2002 | "version": "1.0.2", 2003 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2004 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2005 | "dev": true, 2006 | "peer": true 2007 | }, 2008 | "node_modules/yallist": { 2009 | "version": "4.0.0", 2010 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2011 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2012 | "dev": true 2013 | } 2014 | }, 2015 | "dependencies": { 2016 | "@codemirror/state": { 2017 | "version": "6.1.0", 2018 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.0.tgz", 2019 | "integrity": "sha512-qbUr94DZTe6/V1VS7LDLz11rM/1t/nJxR1El4I6UaxDEdc0aZZvq6JCLJWiRmUf95NRAnDH6fhXn+PWp9wGCIg==", 2020 | "dev": true, 2021 | "peer": true 2022 | }, 2023 | "@codemirror/view": { 2024 | "version": "6.1.0", 2025 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.1.0.tgz", 2026 | "integrity": "sha512-T5QTuzwxbQ+KnZzz1ef3e3QCNH2qMdTmQhA4tbsK62lJGyCMZHSaSAJpFAr67c6Wl34IBgx2M7ue6WxJpWPOPg==", 2027 | "dev": true, 2028 | "peer": true, 2029 | "requires": { 2030 | "@codemirror/state": "^6.0.0", 2031 | "style-mod": "^4.0.0", 2032 | "w3c-keyname": "^2.2.4" 2033 | } 2034 | }, 2035 | "@eslint/eslintrc": { 2036 | "version": "1.3.0", 2037 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", 2038 | "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", 2039 | "dev": true, 2040 | "peer": true, 2041 | "requires": { 2042 | "ajv": "^6.12.4", 2043 | "debug": "^4.3.2", 2044 | "espree": "^9.3.2", 2045 | "globals": "^13.15.0", 2046 | "ignore": "^5.2.0", 2047 | "import-fresh": "^3.2.1", 2048 | "js-yaml": "^4.1.0", 2049 | "minimatch": "^3.1.2", 2050 | "strip-json-comments": "^3.1.1" 2051 | } 2052 | }, 2053 | "@humanwhocodes/config-array": { 2054 | "version": "0.9.5", 2055 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", 2056 | "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", 2057 | "dev": true, 2058 | "peer": true, 2059 | "requires": { 2060 | "@humanwhocodes/object-schema": "^1.2.1", 2061 | "debug": "^4.1.1", 2062 | "minimatch": "^3.0.4" 2063 | } 2064 | }, 2065 | "@humanwhocodes/object-schema": { 2066 | "version": "1.2.1", 2067 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 2068 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 2069 | "dev": true, 2070 | "peer": true 2071 | }, 2072 | "@nodelib/fs.scandir": { 2073 | "version": "2.1.5", 2074 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 2075 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 2076 | "dev": true, 2077 | "requires": { 2078 | "@nodelib/fs.stat": "2.0.5", 2079 | "run-parallel": "^1.1.9" 2080 | } 2081 | }, 2082 | "@nodelib/fs.stat": { 2083 | "version": "2.0.5", 2084 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 2085 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 2086 | "dev": true 2087 | }, 2088 | "@nodelib/fs.walk": { 2089 | "version": "1.2.8", 2090 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 2091 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 2092 | "dev": true, 2093 | "requires": { 2094 | "@nodelib/fs.scandir": "2.1.5", 2095 | "fastq": "^1.6.0" 2096 | } 2097 | }, 2098 | "@types/codemirror": { 2099 | "version": "0.0.108", 2100 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz", 2101 | "integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==", 2102 | "dev": true, 2103 | "requires": { 2104 | "@types/tern": "*" 2105 | } 2106 | }, 2107 | "@types/estree": { 2108 | "version": "1.0.0", 2109 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", 2110 | "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", 2111 | "dev": true 2112 | }, 2113 | "@types/json-schema": { 2114 | "version": "7.0.11", 2115 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", 2116 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", 2117 | "dev": true 2118 | }, 2119 | "@types/node": { 2120 | "version": "16.11.45", 2121 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz", 2122 | "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==", 2123 | "dev": true 2124 | }, 2125 | "@types/tern": { 2126 | "version": "0.23.4", 2127 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", 2128 | "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", 2129 | "dev": true, 2130 | "requires": { 2131 | "@types/estree": "*" 2132 | } 2133 | }, 2134 | "@typescript-eslint/eslint-plugin": { 2135 | "version": "5.29.0", 2136 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", 2137 | "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", 2138 | "dev": true, 2139 | "requires": { 2140 | "@typescript-eslint/scope-manager": "5.29.0", 2141 | "@typescript-eslint/type-utils": "5.29.0", 2142 | "@typescript-eslint/utils": "5.29.0", 2143 | "debug": "^4.3.4", 2144 | "functional-red-black-tree": "^1.0.1", 2145 | "ignore": "^5.2.0", 2146 | "regexpp": "^3.2.0", 2147 | "semver": "^7.3.7", 2148 | "tsutils": "^3.21.0" 2149 | } 2150 | }, 2151 | "@typescript-eslint/parser": { 2152 | "version": "5.29.0", 2153 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", 2154 | "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", 2155 | "dev": true, 2156 | "requires": { 2157 | "@typescript-eslint/scope-manager": "5.29.0", 2158 | "@typescript-eslint/types": "5.29.0", 2159 | "@typescript-eslint/typescript-estree": "5.29.0", 2160 | "debug": "^4.3.4" 2161 | } 2162 | }, 2163 | "@typescript-eslint/scope-manager": { 2164 | "version": "5.29.0", 2165 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", 2166 | "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", 2167 | "dev": true, 2168 | "requires": { 2169 | "@typescript-eslint/types": "5.29.0", 2170 | "@typescript-eslint/visitor-keys": "5.29.0" 2171 | } 2172 | }, 2173 | "@typescript-eslint/type-utils": { 2174 | "version": "5.29.0", 2175 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", 2176 | "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", 2177 | "dev": true, 2178 | "requires": { 2179 | "@typescript-eslint/utils": "5.29.0", 2180 | "debug": "^4.3.4", 2181 | "tsutils": "^3.21.0" 2182 | } 2183 | }, 2184 | "@typescript-eslint/types": { 2185 | "version": "5.29.0", 2186 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", 2187 | "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", 2188 | "dev": true 2189 | }, 2190 | "@typescript-eslint/typescript-estree": { 2191 | "version": "5.29.0", 2192 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", 2193 | "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", 2194 | "dev": true, 2195 | "requires": { 2196 | "@typescript-eslint/types": "5.29.0", 2197 | "@typescript-eslint/visitor-keys": "5.29.0", 2198 | "debug": "^4.3.4", 2199 | "globby": "^11.1.0", 2200 | "is-glob": "^4.0.3", 2201 | "semver": "^7.3.7", 2202 | "tsutils": "^3.21.0" 2203 | } 2204 | }, 2205 | "@typescript-eslint/utils": { 2206 | "version": "5.29.0", 2207 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", 2208 | "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", 2209 | "dev": true, 2210 | "requires": { 2211 | "@types/json-schema": "^7.0.9", 2212 | "@typescript-eslint/scope-manager": "5.29.0", 2213 | "@typescript-eslint/types": "5.29.0", 2214 | "@typescript-eslint/typescript-estree": "5.29.0", 2215 | "eslint-scope": "^5.1.1", 2216 | "eslint-utils": "^3.0.0" 2217 | } 2218 | }, 2219 | "@typescript-eslint/visitor-keys": { 2220 | "version": "5.29.0", 2221 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", 2222 | "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", 2223 | "dev": true, 2224 | "requires": { 2225 | "@typescript-eslint/types": "5.29.0", 2226 | "eslint-visitor-keys": "^3.3.0" 2227 | } 2228 | }, 2229 | "acorn": { 2230 | "version": "8.8.0", 2231 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", 2232 | "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", 2233 | "dev": true, 2234 | "peer": true 2235 | }, 2236 | "acorn-jsx": { 2237 | "version": "5.3.2", 2238 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 2239 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 2240 | "dev": true, 2241 | "peer": true, 2242 | "requires": {} 2243 | }, 2244 | "ajv": { 2245 | "version": "6.12.6", 2246 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2247 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2248 | "dev": true, 2249 | "peer": true, 2250 | "requires": { 2251 | "fast-deep-equal": "^3.1.1", 2252 | "fast-json-stable-stringify": "^2.0.0", 2253 | "json-schema-traverse": "^0.4.1", 2254 | "uri-js": "^4.2.2" 2255 | } 2256 | }, 2257 | "ansi-regex": { 2258 | "version": "5.0.1", 2259 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2260 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2261 | "dev": true, 2262 | "peer": true 2263 | }, 2264 | "ansi-styles": { 2265 | "version": "4.3.0", 2266 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2267 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2268 | "dev": true, 2269 | "peer": true, 2270 | "requires": { 2271 | "color-convert": "^2.0.1" 2272 | } 2273 | }, 2274 | "argparse": { 2275 | "version": "2.0.1", 2276 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2277 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2278 | "dev": true, 2279 | "peer": true 2280 | }, 2281 | "array-union": { 2282 | "version": "2.1.0", 2283 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 2284 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 2285 | "dev": true 2286 | }, 2287 | "balanced-match": { 2288 | "version": "1.0.2", 2289 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2290 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2291 | "dev": true, 2292 | "peer": true 2293 | }, 2294 | "brace-expansion": { 2295 | "version": "1.1.11", 2296 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2297 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2298 | "dev": true, 2299 | "peer": true, 2300 | "requires": { 2301 | "balanced-match": "^1.0.0", 2302 | "concat-map": "0.0.1" 2303 | } 2304 | }, 2305 | "braces": { 2306 | "version": "3.0.2", 2307 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2308 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2309 | "dev": true, 2310 | "requires": { 2311 | "fill-range": "^7.0.1" 2312 | } 2313 | }, 2314 | "builtin-modules": { 2315 | "version": "3.3.0", 2316 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 2317 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 2318 | "dev": true 2319 | }, 2320 | "callsites": { 2321 | "version": "3.1.0", 2322 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 2323 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 2324 | "dev": true, 2325 | "peer": true 2326 | }, 2327 | "chalk": { 2328 | "version": "4.1.2", 2329 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2330 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2331 | "dev": true, 2332 | "peer": true, 2333 | "requires": { 2334 | "ansi-styles": "^4.1.0", 2335 | "supports-color": "^7.1.0" 2336 | } 2337 | }, 2338 | "color-convert": { 2339 | "version": "2.0.1", 2340 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2341 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2342 | "dev": true, 2343 | "peer": true, 2344 | "requires": { 2345 | "color-name": "~1.1.4" 2346 | } 2347 | }, 2348 | "color-name": { 2349 | "version": "1.1.4", 2350 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2351 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2352 | "dev": true, 2353 | "peer": true 2354 | }, 2355 | "concat-map": { 2356 | "version": "0.0.1", 2357 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2358 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 2359 | "dev": true, 2360 | "peer": true 2361 | }, 2362 | "cross-spawn": { 2363 | "version": "7.0.3", 2364 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 2365 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 2366 | "dev": true, 2367 | "peer": true, 2368 | "requires": { 2369 | "path-key": "^3.1.0", 2370 | "shebang-command": "^2.0.0", 2371 | "which": "^2.0.1" 2372 | } 2373 | }, 2374 | "debug": { 2375 | "version": "4.3.4", 2376 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2377 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2378 | "dev": true, 2379 | "requires": { 2380 | "ms": "2.1.2" 2381 | } 2382 | }, 2383 | "deep-is": { 2384 | "version": "0.1.4", 2385 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2386 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2387 | "dev": true, 2388 | "peer": true 2389 | }, 2390 | "dir-glob": { 2391 | "version": "3.0.1", 2392 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 2393 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 2394 | "dev": true, 2395 | "requires": { 2396 | "path-type": "^4.0.0" 2397 | } 2398 | }, 2399 | "doctrine": { 2400 | "version": "3.0.0", 2401 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 2402 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 2403 | "dev": true, 2404 | "peer": true, 2405 | "requires": { 2406 | "esutils": "^2.0.2" 2407 | } 2408 | }, 2409 | "esbuild": { 2410 | "version": "0.14.47", 2411 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", 2412 | "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", 2413 | "dev": true, 2414 | "requires": { 2415 | "esbuild-android-64": "0.14.47", 2416 | "esbuild-android-arm64": "0.14.47", 2417 | "esbuild-darwin-64": "0.14.47", 2418 | "esbuild-darwin-arm64": "0.14.47", 2419 | "esbuild-freebsd-64": "0.14.47", 2420 | "esbuild-freebsd-arm64": "0.14.47", 2421 | "esbuild-linux-32": "0.14.47", 2422 | "esbuild-linux-64": "0.14.47", 2423 | "esbuild-linux-arm": "0.14.47", 2424 | "esbuild-linux-arm64": "0.14.47", 2425 | "esbuild-linux-mips64le": "0.14.47", 2426 | "esbuild-linux-ppc64le": "0.14.47", 2427 | "esbuild-linux-riscv64": "0.14.47", 2428 | "esbuild-linux-s390x": "0.14.47", 2429 | "esbuild-netbsd-64": "0.14.47", 2430 | "esbuild-openbsd-64": "0.14.47", 2431 | "esbuild-sunos-64": "0.14.47", 2432 | "esbuild-windows-32": "0.14.47", 2433 | "esbuild-windows-64": "0.14.47", 2434 | "esbuild-windows-arm64": "0.14.47" 2435 | } 2436 | }, 2437 | "esbuild-android-64": { 2438 | "version": "0.14.47", 2439 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", 2440 | "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", 2441 | "dev": true, 2442 | "optional": true 2443 | }, 2444 | "esbuild-android-arm64": { 2445 | "version": "0.14.47", 2446 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", 2447 | "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", 2448 | "dev": true, 2449 | "optional": true 2450 | }, 2451 | "esbuild-darwin-64": { 2452 | "version": "0.14.47", 2453 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", 2454 | "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", 2455 | "dev": true, 2456 | "optional": true 2457 | }, 2458 | "esbuild-darwin-arm64": { 2459 | "version": "0.14.47", 2460 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", 2461 | "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", 2462 | "dev": true, 2463 | "optional": true 2464 | }, 2465 | "esbuild-freebsd-64": { 2466 | "version": "0.14.47", 2467 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", 2468 | "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", 2469 | "dev": true, 2470 | "optional": true 2471 | }, 2472 | "esbuild-freebsd-arm64": { 2473 | "version": "0.14.47", 2474 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", 2475 | "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", 2476 | "dev": true, 2477 | "optional": true 2478 | }, 2479 | "esbuild-linux-32": { 2480 | "version": "0.14.47", 2481 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", 2482 | "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", 2483 | "dev": true, 2484 | "optional": true 2485 | }, 2486 | "esbuild-linux-64": { 2487 | "version": "0.14.47", 2488 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", 2489 | "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", 2490 | "dev": true, 2491 | "optional": true 2492 | }, 2493 | "esbuild-linux-arm": { 2494 | "version": "0.14.47", 2495 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", 2496 | "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", 2497 | "dev": true, 2498 | "optional": true 2499 | }, 2500 | "esbuild-linux-arm64": { 2501 | "version": "0.14.47", 2502 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", 2503 | "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", 2504 | "dev": true, 2505 | "optional": true 2506 | }, 2507 | "esbuild-linux-mips64le": { 2508 | "version": "0.14.47", 2509 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", 2510 | "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", 2511 | "dev": true, 2512 | "optional": true 2513 | }, 2514 | "esbuild-linux-ppc64le": { 2515 | "version": "0.14.47", 2516 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", 2517 | "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", 2518 | "dev": true, 2519 | "optional": true 2520 | }, 2521 | "esbuild-linux-riscv64": { 2522 | "version": "0.14.47", 2523 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", 2524 | "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", 2525 | "dev": true, 2526 | "optional": true 2527 | }, 2528 | "esbuild-linux-s390x": { 2529 | "version": "0.14.47", 2530 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", 2531 | "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", 2532 | "dev": true, 2533 | "optional": true 2534 | }, 2535 | "esbuild-netbsd-64": { 2536 | "version": "0.14.47", 2537 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", 2538 | "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", 2539 | "dev": true, 2540 | "optional": true 2541 | }, 2542 | "esbuild-openbsd-64": { 2543 | "version": "0.14.47", 2544 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", 2545 | "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", 2546 | "dev": true, 2547 | "optional": true 2548 | }, 2549 | "esbuild-sunos-64": { 2550 | "version": "0.14.47", 2551 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", 2552 | "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", 2553 | "dev": true, 2554 | "optional": true 2555 | }, 2556 | "esbuild-windows-32": { 2557 | "version": "0.14.47", 2558 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", 2559 | "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", 2560 | "dev": true, 2561 | "optional": true 2562 | }, 2563 | "esbuild-windows-64": { 2564 | "version": "0.14.47", 2565 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", 2566 | "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", 2567 | "dev": true, 2568 | "optional": true 2569 | }, 2570 | "esbuild-windows-arm64": { 2571 | "version": "0.14.47", 2572 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", 2573 | "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", 2574 | "dev": true, 2575 | "optional": true 2576 | }, 2577 | "escape-string-regexp": { 2578 | "version": "4.0.0", 2579 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2580 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2581 | "dev": true, 2582 | "peer": true 2583 | }, 2584 | "eslint": { 2585 | "version": "8.20.0", 2586 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", 2587 | "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", 2588 | "dev": true, 2589 | "peer": true, 2590 | "requires": { 2591 | "@eslint/eslintrc": "^1.3.0", 2592 | "@humanwhocodes/config-array": "^0.9.2", 2593 | "ajv": "^6.10.0", 2594 | "chalk": "^4.0.0", 2595 | "cross-spawn": "^7.0.2", 2596 | "debug": "^4.3.2", 2597 | "doctrine": "^3.0.0", 2598 | "escape-string-regexp": "^4.0.0", 2599 | "eslint-scope": "^7.1.1", 2600 | "eslint-utils": "^3.0.0", 2601 | "eslint-visitor-keys": "^3.3.0", 2602 | "espree": "^9.3.2", 2603 | "esquery": "^1.4.0", 2604 | "esutils": "^2.0.2", 2605 | "fast-deep-equal": "^3.1.3", 2606 | "file-entry-cache": "^6.0.1", 2607 | "functional-red-black-tree": "^1.0.1", 2608 | "glob-parent": "^6.0.1", 2609 | "globals": "^13.15.0", 2610 | "ignore": "^5.2.0", 2611 | "import-fresh": "^3.0.0", 2612 | "imurmurhash": "^0.1.4", 2613 | "is-glob": "^4.0.0", 2614 | "js-yaml": "^4.1.0", 2615 | "json-stable-stringify-without-jsonify": "^1.0.1", 2616 | "levn": "^0.4.1", 2617 | "lodash.merge": "^4.6.2", 2618 | "minimatch": "^3.1.2", 2619 | "natural-compare": "^1.4.0", 2620 | "optionator": "^0.9.1", 2621 | "regexpp": "^3.2.0", 2622 | "strip-ansi": "^6.0.1", 2623 | "strip-json-comments": "^3.1.0", 2624 | "text-table": "^0.2.0", 2625 | "v8-compile-cache": "^2.0.3" 2626 | }, 2627 | "dependencies": { 2628 | "eslint-scope": { 2629 | "version": "7.1.1", 2630 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 2631 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 2632 | "dev": true, 2633 | "peer": true, 2634 | "requires": { 2635 | "esrecurse": "^4.3.0", 2636 | "estraverse": "^5.2.0" 2637 | } 2638 | }, 2639 | "estraverse": { 2640 | "version": "5.3.0", 2641 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2642 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2643 | "dev": true, 2644 | "peer": true 2645 | } 2646 | } 2647 | }, 2648 | "eslint-scope": { 2649 | "version": "5.1.1", 2650 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 2651 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 2652 | "dev": true, 2653 | "requires": { 2654 | "esrecurse": "^4.3.0", 2655 | "estraverse": "^4.1.1" 2656 | } 2657 | }, 2658 | "eslint-utils": { 2659 | "version": "3.0.0", 2660 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 2661 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 2662 | "dev": true, 2663 | "requires": { 2664 | "eslint-visitor-keys": "^2.0.0" 2665 | }, 2666 | "dependencies": { 2667 | "eslint-visitor-keys": { 2668 | "version": "2.1.0", 2669 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 2670 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 2671 | "dev": true 2672 | } 2673 | } 2674 | }, 2675 | "eslint-visitor-keys": { 2676 | "version": "3.3.0", 2677 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 2678 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 2679 | "dev": true 2680 | }, 2681 | "espree": { 2682 | "version": "9.3.2", 2683 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", 2684 | "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", 2685 | "dev": true, 2686 | "peer": true, 2687 | "requires": { 2688 | "acorn": "^8.7.1", 2689 | "acorn-jsx": "^5.3.2", 2690 | "eslint-visitor-keys": "^3.3.0" 2691 | } 2692 | }, 2693 | "esquery": { 2694 | "version": "1.4.0", 2695 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 2696 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 2697 | "dev": true, 2698 | "peer": true, 2699 | "requires": { 2700 | "estraverse": "^5.1.0" 2701 | }, 2702 | "dependencies": { 2703 | "estraverse": { 2704 | "version": "5.3.0", 2705 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2706 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2707 | "dev": true, 2708 | "peer": true 2709 | } 2710 | } 2711 | }, 2712 | "esrecurse": { 2713 | "version": "4.3.0", 2714 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2715 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2716 | "dev": true, 2717 | "requires": { 2718 | "estraverse": "^5.2.0" 2719 | }, 2720 | "dependencies": { 2721 | "estraverse": { 2722 | "version": "5.3.0", 2723 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2724 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2725 | "dev": true 2726 | } 2727 | } 2728 | }, 2729 | "estraverse": { 2730 | "version": "4.3.0", 2731 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 2732 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 2733 | "dev": true 2734 | }, 2735 | "esutils": { 2736 | "version": "2.0.3", 2737 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2738 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2739 | "dev": true, 2740 | "peer": true 2741 | }, 2742 | "fast-deep-equal": { 2743 | "version": "3.1.3", 2744 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2745 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2746 | "dev": true, 2747 | "peer": true 2748 | }, 2749 | "fast-glob": { 2750 | "version": "3.2.11", 2751 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 2752 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 2753 | "dev": true, 2754 | "requires": { 2755 | "@nodelib/fs.stat": "^2.0.2", 2756 | "@nodelib/fs.walk": "^1.2.3", 2757 | "glob-parent": "^5.1.2", 2758 | "merge2": "^1.3.0", 2759 | "micromatch": "^4.0.4" 2760 | }, 2761 | "dependencies": { 2762 | "glob-parent": { 2763 | "version": "5.1.2", 2764 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2765 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2766 | "dev": true, 2767 | "requires": { 2768 | "is-glob": "^4.0.1" 2769 | } 2770 | } 2771 | } 2772 | }, 2773 | "fast-json-stable-stringify": { 2774 | "version": "2.1.0", 2775 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2776 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2777 | "dev": true, 2778 | "peer": true 2779 | }, 2780 | "fast-levenshtein": { 2781 | "version": "2.0.6", 2782 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2783 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2784 | "dev": true, 2785 | "peer": true 2786 | }, 2787 | "fastq": { 2788 | "version": "1.13.0", 2789 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 2790 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 2791 | "dev": true, 2792 | "requires": { 2793 | "reusify": "^1.0.4" 2794 | } 2795 | }, 2796 | "file-entry-cache": { 2797 | "version": "6.0.1", 2798 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 2799 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 2800 | "dev": true, 2801 | "peer": true, 2802 | "requires": { 2803 | "flat-cache": "^3.0.4" 2804 | } 2805 | }, 2806 | "fill-range": { 2807 | "version": "7.0.1", 2808 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2809 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2810 | "dev": true, 2811 | "requires": { 2812 | "to-regex-range": "^5.0.1" 2813 | } 2814 | }, 2815 | "flat-cache": { 2816 | "version": "3.0.4", 2817 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 2818 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 2819 | "dev": true, 2820 | "peer": true, 2821 | "requires": { 2822 | "flatted": "^3.1.0", 2823 | "rimraf": "^3.0.2" 2824 | } 2825 | }, 2826 | "flatted": { 2827 | "version": "3.2.6", 2828 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", 2829 | "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", 2830 | "dev": true, 2831 | "peer": true 2832 | }, 2833 | "fs.realpath": { 2834 | "version": "1.0.0", 2835 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2836 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2837 | "dev": true, 2838 | "peer": true 2839 | }, 2840 | "functional-red-black-tree": { 2841 | "version": "1.0.1", 2842 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 2843 | "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", 2844 | "dev": true 2845 | }, 2846 | "glob": { 2847 | "version": "7.2.3", 2848 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2849 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2850 | "dev": true, 2851 | "peer": true, 2852 | "requires": { 2853 | "fs.realpath": "^1.0.0", 2854 | "inflight": "^1.0.4", 2855 | "inherits": "2", 2856 | "minimatch": "^3.1.1", 2857 | "once": "^1.3.0", 2858 | "path-is-absolute": "^1.0.0" 2859 | } 2860 | }, 2861 | "glob-parent": { 2862 | "version": "6.0.2", 2863 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2864 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2865 | "dev": true, 2866 | "peer": true, 2867 | "requires": { 2868 | "is-glob": "^4.0.3" 2869 | } 2870 | }, 2871 | "globals": { 2872 | "version": "13.17.0", 2873 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", 2874 | "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", 2875 | "dev": true, 2876 | "peer": true, 2877 | "requires": { 2878 | "type-fest": "^0.20.2" 2879 | } 2880 | }, 2881 | "globby": { 2882 | "version": "11.1.0", 2883 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 2884 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 2885 | "dev": true, 2886 | "requires": { 2887 | "array-union": "^2.1.0", 2888 | "dir-glob": "^3.0.1", 2889 | "fast-glob": "^3.2.9", 2890 | "ignore": "^5.2.0", 2891 | "merge2": "^1.4.1", 2892 | "slash": "^3.0.0" 2893 | } 2894 | }, 2895 | "has-flag": { 2896 | "version": "4.0.0", 2897 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2898 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2899 | "dev": true, 2900 | "peer": true 2901 | }, 2902 | "ignore": { 2903 | "version": "5.2.0", 2904 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", 2905 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", 2906 | "dev": true 2907 | }, 2908 | "import-fresh": { 2909 | "version": "3.3.0", 2910 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2911 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2912 | "dev": true, 2913 | "peer": true, 2914 | "requires": { 2915 | "parent-module": "^1.0.0", 2916 | "resolve-from": "^4.0.0" 2917 | } 2918 | }, 2919 | "imurmurhash": { 2920 | "version": "0.1.4", 2921 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2922 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2923 | "dev": true, 2924 | "peer": true 2925 | }, 2926 | "inflight": { 2927 | "version": "1.0.6", 2928 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2929 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2930 | "dev": true, 2931 | "peer": true, 2932 | "requires": { 2933 | "once": "^1.3.0", 2934 | "wrappy": "1" 2935 | } 2936 | }, 2937 | "inherits": { 2938 | "version": "2.0.4", 2939 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2940 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2941 | "dev": true, 2942 | "peer": true 2943 | }, 2944 | "is-extglob": { 2945 | "version": "2.1.1", 2946 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2947 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2948 | "dev": true 2949 | }, 2950 | "is-glob": { 2951 | "version": "4.0.3", 2952 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2953 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2954 | "dev": true, 2955 | "requires": { 2956 | "is-extglob": "^2.1.1" 2957 | } 2958 | }, 2959 | "is-number": { 2960 | "version": "7.0.0", 2961 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2962 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2963 | "dev": true 2964 | }, 2965 | "isexe": { 2966 | "version": "2.0.0", 2967 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2968 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2969 | "dev": true, 2970 | "peer": true 2971 | }, 2972 | "js-yaml": { 2973 | "version": "4.1.0", 2974 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2975 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2976 | "dev": true, 2977 | "peer": true, 2978 | "requires": { 2979 | "argparse": "^2.0.1" 2980 | } 2981 | }, 2982 | "json-schema-traverse": { 2983 | "version": "0.4.1", 2984 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2985 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2986 | "dev": true, 2987 | "peer": true 2988 | }, 2989 | "json-stable-stringify-without-jsonify": { 2990 | "version": "1.0.1", 2991 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2992 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2993 | "dev": true, 2994 | "peer": true 2995 | }, 2996 | "levn": { 2997 | "version": "0.4.1", 2998 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2999 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 3000 | "dev": true, 3001 | "peer": true, 3002 | "requires": { 3003 | "prelude-ls": "^1.2.1", 3004 | "type-check": "~0.4.0" 3005 | } 3006 | }, 3007 | "lodash.merge": { 3008 | "version": "4.6.2", 3009 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 3010 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 3011 | "dev": true, 3012 | "peer": true 3013 | }, 3014 | "lru-cache": { 3015 | "version": "6.0.0", 3016 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3017 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3018 | "dev": true, 3019 | "requires": { 3020 | "yallist": "^4.0.0" 3021 | } 3022 | }, 3023 | "merge2": { 3024 | "version": "1.4.1", 3025 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 3026 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 3027 | "dev": true 3028 | }, 3029 | "micromatch": { 3030 | "version": "4.0.5", 3031 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 3032 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 3033 | "dev": true, 3034 | "requires": { 3035 | "braces": "^3.0.2", 3036 | "picomatch": "^2.3.1" 3037 | } 3038 | }, 3039 | "minimatch": { 3040 | "version": "3.1.2", 3041 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3042 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3043 | "dev": true, 3044 | "peer": true, 3045 | "requires": { 3046 | "brace-expansion": "^1.1.7" 3047 | } 3048 | }, 3049 | "moment": { 3050 | "version": "2.29.3", 3051 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", 3052 | "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", 3053 | "dev": true 3054 | }, 3055 | "ms": { 3056 | "version": "2.1.2", 3057 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3058 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3059 | "dev": true 3060 | }, 3061 | "natural-compare": { 3062 | "version": "1.4.0", 3063 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3064 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 3065 | "dev": true, 3066 | "peer": true 3067 | }, 3068 | "obsidian": { 3069 | "version": "0.15.4", 3070 | "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-0.15.4.tgz", 3071 | "integrity": "sha512-FE11CxxpVD6t/DBvjLvlT7q7YYW91ubTqPKIIp286LdnyLipS8Xi3Tif8i8ALPv87Vg9obKM43aWcPsYLxLllQ==", 3072 | "dev": true, 3073 | "requires": { 3074 | "@types/codemirror": "0.0.108", 3075 | "moment": "2.29.3" 3076 | } 3077 | }, 3078 | "once": { 3079 | "version": "1.4.0", 3080 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3081 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 3082 | "dev": true, 3083 | "peer": true, 3084 | "requires": { 3085 | "wrappy": "1" 3086 | } 3087 | }, 3088 | "optionator": { 3089 | "version": "0.9.1", 3090 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 3091 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 3092 | "dev": true, 3093 | "peer": true, 3094 | "requires": { 3095 | "deep-is": "^0.1.3", 3096 | "fast-levenshtein": "^2.0.6", 3097 | "levn": "^0.4.1", 3098 | "prelude-ls": "^1.2.1", 3099 | "type-check": "^0.4.0", 3100 | "word-wrap": "^1.2.3" 3101 | } 3102 | }, 3103 | "parent-module": { 3104 | "version": "1.0.1", 3105 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3106 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3107 | "dev": true, 3108 | "peer": true, 3109 | "requires": { 3110 | "callsites": "^3.0.0" 3111 | } 3112 | }, 3113 | "path-is-absolute": { 3114 | "version": "1.0.1", 3115 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3116 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 3117 | "dev": true, 3118 | "peer": true 3119 | }, 3120 | "path-key": { 3121 | "version": "3.1.1", 3122 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3123 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3124 | "dev": true, 3125 | "peer": true 3126 | }, 3127 | "path-type": { 3128 | "version": "4.0.0", 3129 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 3130 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 3131 | "dev": true 3132 | }, 3133 | "picomatch": { 3134 | "version": "2.3.1", 3135 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3136 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3137 | "dev": true 3138 | }, 3139 | "prelude-ls": { 3140 | "version": "1.2.1", 3141 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3142 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3143 | "dev": true, 3144 | "peer": true 3145 | }, 3146 | "punycode": { 3147 | "version": "2.1.1", 3148 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 3149 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 3150 | "dev": true, 3151 | "peer": true 3152 | }, 3153 | "queue-microtask": { 3154 | "version": "1.2.3", 3155 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3156 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3157 | "dev": true 3158 | }, 3159 | "regexpp": { 3160 | "version": "3.2.0", 3161 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 3162 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 3163 | "dev": true 3164 | }, 3165 | "resolve-from": { 3166 | "version": "4.0.0", 3167 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3168 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3169 | "dev": true, 3170 | "peer": true 3171 | }, 3172 | "reusify": { 3173 | "version": "1.0.4", 3174 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3175 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3176 | "dev": true 3177 | }, 3178 | "rimraf": { 3179 | "version": "3.0.2", 3180 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3181 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3182 | "dev": true, 3183 | "peer": true, 3184 | "requires": { 3185 | "glob": "^7.1.3" 3186 | } 3187 | }, 3188 | "run-parallel": { 3189 | "version": "1.2.0", 3190 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3191 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3192 | "dev": true, 3193 | "requires": { 3194 | "queue-microtask": "^1.2.2" 3195 | } 3196 | }, 3197 | "sanitizer": { 3198 | "version": "0.1.3", 3199 | "resolved": "https://registry.npmjs.org/sanitizer/-/sanitizer-0.1.3.tgz", 3200 | "integrity": "sha512-j05vL56tR90rsYqm9ZD05v6K4HI7t4yMDEvvU0x4f+IADXM9Jx1x9mzatxOs5drJq6dGhugxDW99mcPvXVLl+Q==" 3201 | }, 3202 | "semver": { 3203 | "version": "7.3.7", 3204 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", 3205 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", 3206 | "dev": true, 3207 | "requires": { 3208 | "lru-cache": "^6.0.0" 3209 | } 3210 | }, 3211 | "shebang-command": { 3212 | "version": "2.0.0", 3213 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3214 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3215 | "dev": true, 3216 | "peer": true, 3217 | "requires": { 3218 | "shebang-regex": "^3.0.0" 3219 | } 3220 | }, 3221 | "shebang-regex": { 3222 | "version": "3.0.0", 3223 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3224 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3225 | "dev": true, 3226 | "peer": true 3227 | }, 3228 | "slash": { 3229 | "version": "3.0.0", 3230 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3231 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3232 | "dev": true 3233 | }, 3234 | "strip-ansi": { 3235 | "version": "6.0.1", 3236 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3237 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3238 | "dev": true, 3239 | "peer": true, 3240 | "requires": { 3241 | "ansi-regex": "^5.0.1" 3242 | } 3243 | }, 3244 | "strip-json-comments": { 3245 | "version": "3.1.1", 3246 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3247 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3248 | "dev": true, 3249 | "peer": true 3250 | }, 3251 | "style-mod": { 3252 | "version": "4.0.0", 3253 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz", 3254 | "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", 3255 | "dev": true, 3256 | "peer": true 3257 | }, 3258 | "supports-color": { 3259 | "version": "7.2.0", 3260 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3261 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3262 | "dev": true, 3263 | "peer": true, 3264 | "requires": { 3265 | "has-flag": "^4.0.0" 3266 | } 3267 | }, 3268 | "text-table": { 3269 | "version": "0.2.0", 3270 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3271 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3272 | "dev": true, 3273 | "peer": true 3274 | }, 3275 | "to-regex-range": { 3276 | "version": "5.0.1", 3277 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3278 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3279 | "dev": true, 3280 | "requires": { 3281 | "is-number": "^7.0.0" 3282 | } 3283 | }, 3284 | "tslib": { 3285 | "version": "2.4.0", 3286 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 3287 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 3288 | "dev": true 3289 | }, 3290 | "tsutils": { 3291 | "version": "3.21.0", 3292 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", 3293 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", 3294 | "dev": true, 3295 | "requires": { 3296 | "tslib": "^1.8.1" 3297 | }, 3298 | "dependencies": { 3299 | "tslib": { 3300 | "version": "1.14.1", 3301 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 3302 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 3303 | "dev": true 3304 | } 3305 | } 3306 | }, 3307 | "type-check": { 3308 | "version": "0.4.0", 3309 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3310 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3311 | "dev": true, 3312 | "peer": true, 3313 | "requires": { 3314 | "prelude-ls": "^1.2.1" 3315 | } 3316 | }, 3317 | "type-fest": { 3318 | "version": "0.20.2", 3319 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3320 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3321 | "dev": true, 3322 | "peer": true 3323 | }, 3324 | "typescript": { 3325 | "version": "4.7.4", 3326 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 3327 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 3328 | "dev": true 3329 | }, 3330 | "uri-js": { 3331 | "version": "4.4.1", 3332 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3333 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3334 | "dev": true, 3335 | "peer": true, 3336 | "requires": { 3337 | "punycode": "^2.1.0" 3338 | } 3339 | }, 3340 | "v8-compile-cache": { 3341 | "version": "2.3.0", 3342 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 3343 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 3344 | "dev": true, 3345 | "peer": true 3346 | }, 3347 | "w3c-keyname": { 3348 | "version": "2.2.4", 3349 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", 3350 | "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==", 3351 | "dev": true, 3352 | "peer": true 3353 | }, 3354 | "which": { 3355 | "version": "2.0.2", 3356 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3357 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3358 | "dev": true, 3359 | "peer": true, 3360 | "requires": { 3361 | "isexe": "^2.0.0" 3362 | } 3363 | }, 3364 | "word-wrap": { 3365 | "version": "1.2.3", 3366 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 3367 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 3368 | "dev": true, 3369 | "peer": true 3370 | }, 3371 | "wrappy": { 3372 | "version": "1.0.2", 3373 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3374 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3375 | "dev": true, 3376 | "peer": true 3377 | }, 3378 | "yallist": { 3379 | "version": "4.0.0", 3380 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3381 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3382 | "dev": true 3383 | } 3384 | } 3385 | } 3386 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-agile-task-notes", 3 | "version": "1.4.0", 4 | "description": "Automated grabbing of tasks from TFS (AzureDevops or Jira)", 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": "BoxThatBeat", 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/BoxThatBeat/obsidian-agile-task-notes" 16 | }, 17 | "license": "MIT", 18 | "devDependencies": { 19 | "@types/node": "^16.11.6", 20 | "@typescript-eslint/eslint-plugin": "5.29.0", 21 | "@typescript-eslint/parser": "5.29.0", 22 | "builtin-modules": "3.3.0", 23 | "esbuild": "0.14.47", 24 | "obsidian": "latest", 25 | "tslib": "2.4.0", 26 | "typescript": "4.7.4" 27 | }, 28 | "dependencies": { 29 | "sanitizer": "^0.1.3" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/Clients/AzureDevopsClient.ts: -------------------------------------------------------------------------------- 1 | import AgileTaskNotesPlugin, { AgileTaskNotesPluginSettingTab, AgileTaskNotesSettings } from 'main'; 2 | import { App, normalizePath, requestUrl, Setting } from 'obsidian'; 3 | import { VaultHelper } from 'src/VaultHelper'; 4 | import { ITfsClient } from './ITfsClient'; 5 | import { Task } from 'src/Task'; 6 | 7 | export interface AzureDevopsSettings { 8 | instance: string; 9 | collection: string; 10 | project: string; 11 | team: string; 12 | usernames: string; 13 | accessToken: string; 14 | columns: string; 15 | } 16 | 17 | export const AZURE_DEVOPS_DEFAULT_SETTINGS: AzureDevopsSettings = { 18 | instance: '', 19 | collection: '', 20 | project: '', 21 | team: '', 22 | usernames: '', 23 | accessToken: '', 24 | columns: 'Pending,In Progress,In Merge,In Verification,Closed', 25 | }; 26 | 27 | const TASKS_QUERY: string = 28 | '{"query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.IterationPath] UNDER \\"{0}\\"{1}"}'; // iteration path, other(usernames) 29 | const USER_OPERAND: string = '[Assigned to] = \\"{0}\\"'; 30 | 31 | export class AzureDevopsClient implements ITfsClient { 32 | clientName: string = 'AzureDevops'; 33 | 34 | constructor(private app: App) {} 35 | 36 | public async update(settings: AgileTaskNotesSettings): Promise { 37 | const encoded64PAT = Buffer.from(`:${settings.azureDevopsSettings.accessToken}`).toString('base64'); 38 | 39 | const headers = { 40 | Authorization: `Basic ${encoded64PAT}`, 41 | 'Content-Type': 'application/json', 42 | }; 43 | 44 | let BaseURL = ''; 45 | 46 | if (settings.azureDevopsSettings.collection) { 47 | BaseURL = `https://${settings.azureDevopsSettings.instance}/${settings.azureDevopsSettings.collection}/${settings.azureDevopsSettings.project}`; 48 | } else { 49 | BaseURL = `https://${settings.azureDevopsSettings.instance}/${settings.azureDevopsSettings.project}`; 50 | } 51 | 52 | try { 53 | const iterationResponse = await requestUrl({ 54 | method: 'GET', 55 | headers: headers, 56 | url: `${BaseURL}/${settings.azureDevopsSettings.team}/_apis/work/teamsettings/iterations?$timeframe=current&api-version=6.0`, 57 | }); 58 | const currentSprint = iterationResponse.json.value[0]; 59 | const normalizeIterationPath = currentSprint.path.normalize().replace(/\\/g, '\\\\'); 60 | 61 | let taskIds: any; 62 | 63 | if (settings.teamLeaderMode) { 64 | const tasksReponse = await requestUrl({ 65 | method: 'POST', 66 | body: TASKS_QUERY.format(normalizeIterationPath, ''), 67 | headers: headers, 68 | url: `${BaseURL}/${settings.azureDevopsSettings.team}/_apis/wit/wiql?api-version=6.0`, 69 | }); 70 | 71 | taskIds = tasksReponse.json.workItems; 72 | } else { 73 | const usernames = settings.azureDevopsSettings.usernames 74 | .split(',') 75 | .map((username: string) => username.trim().replace("'", "\\'")); 76 | 77 | // Put query together dynamically based on number of usernames requested 78 | let multiUserOperands = ' AND '; 79 | for (let i = 0; i < usernames.length; i++) { 80 | multiUserOperands += USER_OPERAND.format(usernames[i]); 81 | 82 | if (i < usernames.length - 1) { 83 | multiUserOperands += ' OR '; 84 | } 85 | } 86 | 87 | const tasksReponse = await requestUrl({ 88 | method: 'POST', 89 | body: TASKS_QUERY.format(normalizeIterationPath, multiUserOperands), 90 | headers: headers, 91 | url: `${BaseURL}/${settings.azureDevopsSettings.team}/_apis/wit/wiql?api-version=6.0`, 92 | }); 93 | 94 | taskIds = tasksReponse.json.workItems; 95 | } 96 | 97 | const normalizedFolderPath = normalizePath(settings.targetFolder + '/' + currentSprint.path); 98 | 99 | // Ensure folder structure created 100 | VaultHelper.createFolders(normalizedFolderPath, this.app); 101 | 102 | // Get assigned tasks 103 | const assignedTasks = await Promise.all( 104 | taskIds.map((task: any) => 105 | requestUrl({ 106 | method: 'GET', 107 | headers: headers, 108 | url: task.url, 109 | }).then((r) => r.json) 110 | ) 111 | ); 112 | 113 | let tasks: Array = []; 114 | assignedTasks.forEach((task: any) => { 115 | let assigneeName = 'Unassigned'; 116 | const assignee = task.fields['System.AssignedTo'] ?? null; 117 | if (assignee !== null) { 118 | assigneeName = assignee['displayName']; 119 | } 120 | 121 | let tags = task.fields['System.Tags'] || ''; 122 | let replacedTags = tags 123 | .split(';') 124 | .map((part: string) => 125 | part 126 | .trim() 127 | .split(' ') 128 | .map((word) => word.replace(/\s+/g, '-')) 129 | .join('-') 130 | ) 131 | .filter(Boolean) 132 | .join(' '); 133 | 134 | const tempDate = new Date(task.fields['Microsoft.VSTS.Scheduling.DueDate']); 135 | const dueDate = tempDate && !isNaN(tempDate.getTime()) ? tempDate.toLocaleDateString('en-GB') : ''; 136 | 137 | const testScenarios = task.fields['Custom.Testscenarios'] 138 | ? task.fields['Custom.Testscenarios'] 139 | : 'No test scenarios provided'; 140 | const acceptanceCriteria = task.fields['Microsoft.VSTS.Common.AcceptanceCriteria'] 141 | ? task.fields['Microsoft.VSTS.Common.AcceptanceCriteria'] 142 | : 'No acceptance criteria provided'; 143 | const description = task.fields['System.Description'] 144 | ? task.fields['System.Description'] 145 | : 'No description provided'; 146 | 147 | tasks.push( 148 | new Task( 149 | task.id, 150 | task.fields['System.State'], 151 | task.fields['System.Title'], 152 | task.fields['System.WorkItemType'], 153 | assigneeName, 154 | `https://${settings.azureDevopsSettings.instance}/${settings.azureDevopsSettings.collection}/${settings.azureDevopsSettings.project}/_workitems/edit/${task.id}`, 155 | description, 156 | acceptanceCriteria, 157 | testScenarios, 158 | dueDate, 159 | replacedTags 160 | ) 161 | ); 162 | }); 163 | 164 | // Create markdown files based on remote task in current sprint 165 | await Promise.all( 166 | VaultHelper.createTaskNotes(normalizedFolderPath, tasks, settings.noteTemplate, settings.noteName, this.app) 167 | ).catch((e) => VaultHelper.logError(e)); 168 | 169 | if (settings.createKanban) { 170 | // Create or replace Kanban board of current sprint 171 | const columnIds = settings.azureDevopsSettings.columns 172 | .split(',') 173 | .map((columnName: string) => columnName.trim()); 174 | await VaultHelper.createKanbanBoard( 175 | normalizedFolderPath, 176 | tasks, 177 | columnIds, 178 | currentSprint.name, 179 | settings.teamLeaderMode, 180 | this.app 181 | ).catch((e) => VaultHelper.logError(e)); 182 | } 183 | } catch (e) { 184 | VaultHelper.logError(e); 185 | } 186 | } 187 | 188 | public setupSettings( 189 | container: HTMLElement, 190 | plugin: AgileTaskNotesPlugin, 191 | settingsTab: AgileTaskNotesPluginSettingTab 192 | ): any { 193 | container.createEl('h2', { text: 'AzureDevops Remote Repo Settings' }); 194 | 195 | new Setting(container) 196 | .setName('Instance') 197 | .setDesc('TFS server name (ex: dev.azure.com/OrgName)') 198 | .addText((text) => 199 | text 200 | .setPlaceholder('Enter instance base url') 201 | .setValue(plugin.settings.azureDevopsSettings.instance) 202 | .onChange(async (value) => { 203 | plugin.settings.azureDevopsSettings.instance = value; 204 | await plugin.saveSettings(); 205 | }) 206 | ); 207 | 208 | new Setting(container) 209 | .setName('Collection') 210 | .setDesc('The name of the Azure DevOps collection (leave empty if it does not apply)') 211 | .addText((text) => 212 | text 213 | .setPlaceholder('Enter Collection Name') 214 | .setValue(plugin.settings.azureDevopsSettings.collection) 215 | .onChange(async (value) => { 216 | plugin.settings.azureDevopsSettings.collection = value; 217 | await plugin.saveSettings(); 218 | }) 219 | ); 220 | 221 | new Setting(container) 222 | .setName('Project') 223 | .setDesc('AzureDevops Project ID or project name') 224 | .addText((text) => 225 | text 226 | .setPlaceholder('Enter project name') 227 | .setValue(plugin.settings.azureDevopsSettings.project) 228 | .onChange(async (value) => { 229 | plugin.settings.azureDevopsSettings.project = value; 230 | await plugin.saveSettings(); 231 | }) 232 | ); 233 | 234 | new Setting(container) 235 | .setName('Team') 236 | .setDesc('AzureDevops Team ID or team name') 237 | .addText((text) => 238 | text 239 | .setPlaceholder('Enter team name') 240 | .setValue(plugin.settings.azureDevopsSettings.team) 241 | .onChange(async (value) => { 242 | plugin.settings.azureDevopsSettings.team = value; 243 | await plugin.saveSettings(); 244 | }) 245 | ); 246 | 247 | new Setting(container) 248 | .setName('Usernames') 249 | .setDesc( 250 | 'A comma-separated list of usernames you want the tasks of. Simply put your username if you only need your own.' 251 | ) 252 | .addText((text) => 253 | text 254 | .setPlaceholder('Enter usernames') 255 | .setValue(plugin.settings.azureDevopsSettings.usernames) 256 | .onChange(async (value) => { 257 | plugin.settings.azureDevopsSettings.usernames = value; 258 | await plugin.saveSettings(); 259 | }) 260 | ); 261 | 262 | new Setting(container) 263 | .setName('Personal Access Token') 264 | .setDesc('Your AzureDevops PAT with full access') 265 | .addText((text) => 266 | text 267 | .setPlaceholder('Enter your PAT') 268 | .setValue(plugin.settings.azureDevopsSettings.accessToken) 269 | .onChange(async (value) => { 270 | plugin.settings.azureDevopsSettings.accessToken = value; 271 | await plugin.saveSettings(); 272 | }) 273 | ); 274 | 275 | new Setting(container) 276 | .setName('Column Names') 277 | .setDesc('Line-separated list of column key names from your team sprint board to be used in Kanban board') 278 | .addText((text) => 279 | text 280 | .setPlaceholder('Enter comma-separated list') 281 | .setValue(plugin.settings.azureDevopsSettings.columns) 282 | .onChange(async (value) => { 283 | plugin.settings.azureDevopsSettings.columns = value; 284 | await plugin.saveSettings(); 285 | }) 286 | ); 287 | } 288 | } 289 | -------------------------------------------------------------------------------- /src/Clients/ITfsClient.ts: -------------------------------------------------------------------------------- 1 | import AgileTaskNotesPlugin, { AgileTaskNotesPluginSettingTab } from 'main'; 2 | import { App } from 'obsidian'; 3 | 4 | /** 5 | * An interface describing a TFS backend implementation 6 | */ 7 | export interface ITfsClient { 8 | /** 9 | * The title of the client in string format 10 | */ 11 | clientName: string; 12 | 13 | /** 14 | * Creates all the user's assigned tasks in the current sprint as markdown notes with the globally defined template 15 | * Also creates the Kanban board that links to the new files 16 | * @param settings - The plugin settings 17 | * @public 18 | */ 19 | update(settings: any): Promise; 20 | 21 | /** 22 | * Creates all the required UI elements for this client's settings 23 | * @param container - The HTML container to build off of 24 | * @param plugin - The plugin itself 25 | * @public 26 | */ 27 | setupSettings(container: HTMLElement, plugin: AgileTaskNotesPlugin, settingsTab: AgileTaskNotesPluginSettingTab): any; 28 | } 29 | -------------------------------------------------------------------------------- /src/Clients/JiraClient.ts: -------------------------------------------------------------------------------- 1 | import AgileTaskNotesPlugin, { AgileTaskNotesPluginSettingTab, AgileTaskNotesSettings } from 'main'; 2 | import { App, normalizePath, requestUrl, RequestUrlResponse, Setting, TFile } from 'obsidian'; 3 | import { Task } from 'src/Task'; 4 | import { VaultHelper } from 'src/VaultHelper'; 5 | import { ITfsClient } from './ITfsClient'; 6 | 7 | export interface JiraSettings { 8 | baseUrl: string; 9 | usernames: string; 10 | email: string; 11 | authmode: string; 12 | apiToken: string; 13 | boardId: string; 14 | useSprintName: boolean; 15 | mode: string; 16 | excludeBacklog: boolean; 17 | } 18 | 19 | export const JIRA_DEFAULT_SETTINGS: JiraSettings = { 20 | baseUrl: '{yourserver}.atlassian.net', 21 | usernames: '', 22 | email: '', 23 | authmode: 'basic', 24 | apiToken: '', 25 | boardId: '', 26 | useSprintName: true, 27 | mode: 'sprints', 28 | excludeBacklog: false, 29 | }; 30 | 31 | export class JiraClient implements ITfsClient { 32 | clientName: string = 'Jira'; 33 | 34 | constructor(private app: App) {} 35 | 36 | public async update(settings: AgileTaskNotesSettings): Promise { 37 | let headers = { 38 | Authorization: '', 39 | 'Content-Type': 'application/json', 40 | }; 41 | if (settings.jiraSettings.authmode == 'basic') { 42 | const encoded64Key = Buffer.from(`${settings.jiraSettings.email}:${settings.jiraSettings.apiToken}`).toString( 43 | 'base64' 44 | ); 45 | headers.Authorization = `Basic ${encoded64Key}`; 46 | } else if ((settings.jiraSettings.authmode = 'bearer')) { 47 | headers.Authorization = `Bearer ${settings.jiraSettings.apiToken}`; 48 | } 49 | 50 | const BaseURL = `https://${settings.jiraSettings.baseUrl}/rest/agile/1.0`; 51 | 52 | try { 53 | if (settings.jiraSettings.mode == 'sprints') { 54 | const sprintsResponse = await requestUrl({ 55 | method: 'GET', 56 | headers: headers, 57 | url: `${BaseURL}/board/${settings.jiraSettings.boardId}/sprint?state=active`, 58 | }); 59 | const currentSprintId = sprintsResponse.json.values[0].id; 60 | const currentSprintName = sprintsResponse.json.values[0].name 61 | .replace(/Sprint/, '') 62 | .replace(/Board/, '') 63 | .replace(/^\s+|\s+$/g, '') 64 | .replace(/[^a-zA-Z0-9 -]/g, '') 65 | .replace(/\s+/g, '-') 66 | .replace(/-+/g, '-'); 67 | 68 | const sprintIdentifier = settings.jiraSettings.useSprintName ? currentSprintName : currentSprintId; 69 | 70 | const normalizedFolderPath = normalizePath(settings.targetFolder + '/sprint-' + sprintIdentifier); 71 | 72 | // Ensure folder structure created 73 | VaultHelper.createFolders(normalizedFolderPath, this.app); 74 | 75 | let tasks: Array = []; 76 | let issueResponseList: Array = []; 77 | 78 | if (settings.teamLeaderMode) { 79 | issueResponseList[0] = await requestUrl({ 80 | method: 'GET', 81 | headers: headers, 82 | url: `${BaseURL}/board/${settings.jiraSettings.boardId}/sprint/${currentSprintId}/issue?maxResults=1000`, 83 | }); 84 | } else { 85 | let usernames = settings.jiraSettings.usernames 86 | .split(',') 87 | .map((username: string) => username.trim().replace("'", "\\'")); 88 | 89 | issueResponseList = await Promise.all( 90 | usernames.map((username: string) => 91 | requestUrl({ 92 | method: 'GET', 93 | headers: headers, 94 | url: `${BaseURL}/board/${settings.jiraSettings.boardId}/sprint/${currentSprintId}/issue?jql=assignee="${username}"&maxResults=1000`, 95 | }) 96 | ) 97 | ); 98 | } 99 | 100 | issueResponseList.forEach((issueResponse: any) => { 101 | issueResponse.json.issues.forEach((issue: any) => { 102 | let assigneeName = 'Unassigned'; 103 | let assignee = issue.fields['assignee']; 104 | if (assignee !== null) { 105 | assigneeName = assignee['displayName']; 106 | } 107 | 108 | tasks.push( 109 | new Task( 110 | issue.key, 111 | issue.fields['status']['name'], 112 | issue.fields['summary'], 113 | issue.fields['issuetype']['name'], 114 | assigneeName, 115 | `https://${settings.jiraSettings.baseUrl}/browse/${issue.key}`, 116 | issue.fields['description'] 117 | ) 118 | ); 119 | }); 120 | }); 121 | 122 | // Create markdown files based on remote task in current sprint 123 | await Promise.all( 124 | VaultHelper.createTaskNotes(normalizedFolderPath, tasks, settings.noteTemplate, settings.noteName, this.app) 125 | ); 126 | 127 | if (settings.createKanban) { 128 | // Get the column names from the Jira board 129 | const boardConfigResponse = await requestUrl({ 130 | method: 'GET', 131 | headers: headers, 132 | url: `${BaseURL}/board/${settings.jiraSettings.boardId}/configuration`, 133 | }); 134 | const columnIds = boardConfigResponse.json.columnConfig.columns.map((column: any) => column.name); 135 | 136 | await VaultHelper.createKanbanBoard( 137 | normalizedFolderPath, 138 | tasks, 139 | columnIds, 140 | sprintIdentifier, 141 | settings.teamLeaderMode, 142 | this.app 143 | ); 144 | } 145 | } else if (settings.jiraSettings.mode == 'kanban') { 146 | const completedFolder = settings.targetFolder + '/Completed/'; 147 | const normalizedBaseFolderPath = normalizePath(settings.targetFolder); 148 | const normalizedCompletedfolderPath = normalizePath(completedFolder); 149 | 150 | // Ensure folder structures created 151 | VaultHelper.createFoldersFromList([normalizedBaseFolderPath, normalizedCompletedfolderPath], this.app); 152 | 153 | let activeTasks: Array = []; 154 | let completedTasks: Array = []; 155 | let issueResponseList: Array = []; 156 | 157 | if (settings.teamLeaderMode) { 158 | issueResponseList[0] = await requestUrl({ 159 | method: 'GET', 160 | headers: headers, 161 | url: `${BaseURL}/board/${settings.jiraSettings.boardId}/issue?maxResults=1000`, 162 | }); 163 | } else { 164 | let usernames = settings.jiraSettings.usernames 165 | .split(',') 166 | .map((username: string) => username.trim().replace("'", "\\'")); 167 | issueResponseList = await Promise.all( 168 | usernames.map((username: string) => 169 | requestUrl({ 170 | method: 'GET', 171 | headers: headers, 172 | url: `${BaseURL}/board/${settings.jiraSettings.boardId}/issue?jql=assignee="${username}"&maxResults=1000`, 173 | }) 174 | ) 175 | ); 176 | } 177 | 178 | issueResponseList.forEach((issueResponse: RequestUrlResponse) => { 179 | issueResponse.json.issues.forEach((issue: any) => { 180 | if ( 181 | !settings.jiraSettings.excludeBacklog || 182 | (settings.jiraSettings.excludeBacklog && issue.fields['status']['name'] !== 'Backlog') 183 | ) { 184 | let assigneeName = 'Unassigned'; 185 | let assignee = issue.fields['assignee']; 186 | if (assignee !== null) { 187 | assigneeName = assignee['displayName']; 188 | } 189 | 190 | let taskObj = new Task( 191 | issue.key, 192 | issue.fields['status']['name'], 193 | issue.fields['summary'], 194 | issue.fields['issuetype']['name'], 195 | assigneeName, 196 | `https://${settings.jiraSettings.baseUrl}/browse/${issue.key}`, 197 | issue.fields['description'] 198 | ); 199 | 200 | if (issue.fields['resolution'] != null) { 201 | completedTasks.push(taskObj); 202 | } else { 203 | activeTasks.push(taskObj); 204 | } 205 | } 206 | }); 207 | }); 208 | 209 | // Create markdown files 210 | await Promise.all( 211 | VaultHelper.createTaskNotes( 212 | normalizedBaseFolderPath, 213 | activeTasks, 214 | settings.noteTemplate, 215 | settings.noteName, 216 | this.app 217 | ) 218 | ); 219 | await Promise.all( 220 | VaultHelper.createTaskNotes( 221 | normalizedCompletedfolderPath, 222 | completedTasks, 223 | settings.noteTemplate, 224 | settings.noteName, 225 | this.app 226 | ) 227 | ); 228 | 229 | // Move pre-existing notes that became resolved state into the Completed folder and vise versa 230 | const completedTaskNoteFiles = completedTasks 231 | .map((task) => VaultHelper.getFileByTaskId(settings.targetFolder, task.id, this.app)) 232 | .filter((file): file is TFile => !!file); 233 | completedTaskNoteFiles.forEach((file) => 234 | this.app.vault.rename(file, normalizePath(completedFolder + file.name)) 235 | ); 236 | const activeTaskNoteFiles = activeTasks 237 | .map((task) => VaultHelper.getFileByTaskId(settings.targetFolder, task.id, this.app)) 238 | .filter((file): file is TFile => !!file); 239 | activeTaskNoteFiles.forEach((file) => 240 | this.app.vault.rename(file, normalizePath(settings.targetFolder + '/' + file.name)) 241 | ); 242 | 243 | if (settings.createKanban) { 244 | // Get the column names from the Jira board 245 | const boardConfigResponse = await requestUrl({ 246 | method: 'GET', 247 | headers: headers, 248 | url: `${BaseURL}/board/${settings.jiraSettings.boardId}/configuration`, 249 | }); 250 | let columnIds = boardConfigResponse.json.columnConfig.columns.map((column: any) => column.name); 251 | 252 | if (settings.jiraSettings.excludeBacklog) { 253 | columnIds = columnIds.filter((columnName: string) => columnName !== 'Backlog'); 254 | } 255 | 256 | await VaultHelper.createKanbanBoard( 257 | normalizedBaseFolderPath, 258 | activeTasks.concat(completedTasks), 259 | columnIds, 260 | settings.jiraSettings.boardId, 261 | settings.teamLeaderMode, 262 | this.app 263 | ); 264 | } 265 | } 266 | } catch (e) { 267 | VaultHelper.logError(e); 268 | } 269 | } 270 | 271 | public setupSettings( 272 | container: HTMLElement, 273 | plugin: AgileTaskNotesPlugin, 274 | settingsTab: AgileTaskNotesPluginSettingTab 275 | ): any { 276 | container.createEl('h2', { text: 'Jira Remote Repo Settings' }); 277 | 278 | new Setting(container) 279 | .setName('URL') 280 | .setDesc('The base URL of your Jira server or {ip:port}') 281 | .addText((text) => 282 | text 283 | .setPlaceholder('Enter Jira base URL') 284 | .setValue(plugin.settings.jiraSettings.baseUrl) 285 | .onChange(async (value) => { 286 | plugin.settings.jiraSettings.baseUrl = value; 287 | await plugin.saveSettings(); 288 | }) 289 | ); 290 | 291 | new Setting(container) 292 | .setName('Usernames') 293 | .setDesc( 294 | 'A comma-separated list of usernames you want the tasks of. Simply put your username if you only need your own.' 295 | ) 296 | .addText((text) => 297 | text 298 | .setPlaceholder('Enter usernames') 299 | .setValue(plugin.settings.jiraSettings.usernames) 300 | .onChange(async (value) => { 301 | plugin.settings.jiraSettings.usernames = value; 302 | await plugin.saveSettings(); 303 | }) 304 | ); 305 | 306 | new Setting(container) 307 | .setName('Email') 308 | .setDesc('The email of your Atlassian account for Jira') 309 | .addText((text) => 310 | text 311 | .setPlaceholder('Enter Atlassian email') 312 | .setValue(plugin.settings.jiraSettings.email) 313 | .onChange(async (value) => { 314 | plugin.settings.jiraSettings.email = value; 315 | await plugin.saveSettings(); 316 | }) 317 | ); 318 | 319 | new Setting(container) 320 | .setName('Authorization mode') 321 | .setDesc('Set the mode of authorization to be used') 322 | .addDropdown((dropdown) => { 323 | dropdown.addOption('basic', 'Basic Auth'); 324 | dropdown.addOption('bearer', 'Personal Access Token'); 325 | dropdown.setValue(plugin.settings.jiraSettings.authmode).onChange(async (value) => { 326 | plugin.settings.jiraSettings.authmode = value; 327 | await plugin.saveSettings(); 328 | }); 329 | }); 330 | 331 | new Setting(container) 332 | .setName('API Token') 333 | .setDesc('The API token generated with your account') 334 | .addText((text) => 335 | text 336 | .setPlaceholder('Enter API token') 337 | .setValue(plugin.settings.jiraSettings.apiToken) 338 | .onChange(async (value) => { 339 | plugin.settings.jiraSettings.apiToken = value; 340 | await plugin.saveSettings(); 341 | }) 342 | ); 343 | 344 | new Setting(container) 345 | .setName('Board ID') 346 | .setDesc('The ID of your Scrum board (the number in the URL when viewing scrum board in browser) ') 347 | .addText((text) => 348 | text 349 | .setPlaceholder('Enter Board ID') 350 | .setValue(plugin.settings.jiraSettings.boardId) 351 | .onChange(async (value) => { 352 | plugin.settings.jiraSettings.boardId = value; 353 | await plugin.saveSettings(); 354 | }) 355 | ); 356 | 357 | new Setting(container) 358 | .setName('Mode') 359 | .setDesc('Set the mode corresponding to how you use Jira') 360 | .addDropdown((dropdown) => { 361 | dropdown.addOption('sprints', 'Sprints'); 362 | dropdown.addOption('kanban', 'Kanban'); 363 | dropdown.setValue(plugin.settings.jiraSettings.mode).onChange(async (value) => { 364 | plugin.settings.jiraSettings.mode = value; 365 | await plugin.saveSettings(); 366 | settingsTab.display(); // Refresh settings to update view 367 | }); 368 | }); 369 | 370 | if (plugin.settings.jiraSettings.mode === 'sprints') { 371 | new Setting(container) 372 | .setName('Use Sprint Name (rather than id)') 373 | .setDesc("Uses the Sprint's human assigned name") 374 | .addToggle((text) => 375 | text.setValue(plugin.settings.jiraSettings.useSprintName).onChange(async (value) => { 376 | plugin.settings.jiraSettings.useSprintName = value; 377 | await plugin.saveSettings(); 378 | }) 379 | ); 380 | } else if (plugin.settings.jiraSettings.mode === 'kanban') { 381 | new Setting(container) 382 | .setName('Exclude Backlog') 383 | .setDesc('Enable to prevent creation of issues from the backlog') 384 | .addToggle((toggle) => 385 | toggle.setValue(plugin.settings.jiraSettings.excludeBacklog).onChange(async (value) => { 386 | plugin.settings.jiraSettings.excludeBacklog = value; 387 | await plugin.saveSettings(); 388 | }) 389 | ); 390 | } 391 | } 392 | } 393 | -------------------------------------------------------------------------------- /src/Task.ts: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Simple data class that allows for generalization of a task from any TFS 4 | * Optional fields are only available in Azure for now. 5 | * @public 6 | */ 7 | export class Task { 8 | public id: string; 9 | public state: string; 10 | public title: string; 11 | public type: string; 12 | public assignedTo: string; 13 | public link: string; 14 | public desc: string; 15 | public criteria?: string; 16 | public testScenarios?: string; 17 | public dueDate?: string; 18 | public tags?: string; 19 | 20 | constructor(id: string, state: string, title: string, type: string, assignedTo: string, link: string, desc: string, criteria?: string, testScenarios?: string, dueDate?: string, tags?: string) { 21 | this.id = id; 22 | this.state = state; 23 | this.title = title; 24 | this.type = type; 25 | this.assignedTo = assignedTo; 26 | this.link = link; 27 | this.desc = desc; 28 | this.criteria = criteria; 29 | this.testScenarios = testScenarios; 30 | this.dueDate = dueDate; 31 | this.tags = tags; 32 | } 33 | } -------------------------------------------------------------------------------- /src/VaultHelper.ts: -------------------------------------------------------------------------------- 1 | import { App, Notice, TFile } from 'obsidian'; 2 | import { Task } from './Task'; 3 | 4 | export class VaultHelper { 5 | private static BOARD_TEMPLATE_START: string = '---\n\nkanban-plugin: basic\n\n---\n\n'; 6 | private static BOARD_TEMPLATE_END: string = '\n%% kanban:settings\n```\n{"kanban-plugin":"basic"}\n```%%"'; 7 | 8 | /** 9 | * Logs an error and notifies user that an error occured 10 | * @param error - The error message to log 11 | * @public 12 | */ 13 | public static logError(error: string): void { 14 | console.log(error); 15 | new Notice('Error occured, see console logs for details. (ctrl+shift+i) to open'); 16 | } 17 | 18 | /** 19 | * Creates all folders in a given path if they are non-existant 20 | * @param path - The path of folders to creates 21 | * @public 22 | */ 23 | public static createFolders(path: string, app: App): void { 24 | if (app.vault.getAbstractFileByPath(path) == null) { 25 | app.vault.createFolder(path).catch((err) => console.log(err)); 26 | } 27 | } 28 | 29 | /** 30 | * Creates all folders for all given paths if they are non-existent 31 | * @param paths - The list of paths of folders to creates 32 | * @public 33 | */ 34 | public static createFoldersFromList(paths: string[], app: App): void { 35 | paths.forEach((path) => this.createFolders(path, app)); 36 | } 37 | 38 | /** 39 | * Will return a filehandle if the provided id is in the folder of the provided path 40 | * @param path - The vault path to search in 41 | * @param id - The string to search for in the path folder 42 | * @public 43 | */ 44 | public static getFileByTaskId(path: string, id: string, app: App): TFile | undefined { 45 | const files = app.vault.getMarkdownFiles(); 46 | 47 | const projectPath = path.slice(0, path.lastIndexOf('/')); // Remove the specific sprint since files can be in old sprints 48 | 49 | for (let i = 0; i < files.length; i++) { 50 | let filePath = files[i].path; 51 | if (filePath.startsWith(projectPath) && filePath.contains(id)) { 52 | return files[i]; 53 | } 54 | } 55 | 56 | return undefined; 57 | } 58 | 59 | /** 60 | * Creates all task notes given the provided array of Tasks" 61 | * @param path - The path to create each task at 62 | * @param tasks - An array of Tasks 63 | * @public 64 | */ 65 | public static createTaskNotes( 66 | path: string, 67 | tasks: Array, 68 | template: string, 69 | notename: string, 70 | app: App 71 | ): Promise[] { 72 | let promisesToCreateNotes: Promise[] = []; 73 | tasks.forEach((task) => { 74 | if (this.getFileByTaskId(path, task.id, app) == undefined) { 75 | promisesToCreateNotes.push(this.createTaskNote(path, task, template, notename, app)); 76 | } 77 | }); 78 | 79 | return promisesToCreateNotes; 80 | } 81 | 82 | /** 83 | * Builds up a markdown file that represents a Kanban board for the sprint. Utilizes the format for the Kanban plugin" 84 | * @param path - The path to create each task at 85 | * @param tasks - An array of Tasks 86 | * @param columns - An array of column names to match state of the tasks with 87 | * @param prefix - The prefix to add to the kanban board name 88 | * @public 89 | */ 90 | public static createKanbanBoard( 91 | path: string, 92 | tasks: Array, 93 | columns: Array, 94 | prefix: string, 95 | teamLeaderMode: boolean, 96 | app: App 97 | ): Promise { 98 | const filename = `${prefix}-Board`; 99 | const filepath = path + `/${filename}.md`; 100 | 101 | let boardMD = this.BOARD_TEMPLATE_START; 102 | 103 | // Create Kanban board with specified columns matching the state of each task 104 | columns.forEach((column: string) => { 105 | boardMD += '## '; 106 | boardMD += column; 107 | boardMD += '\n'; 108 | 109 | tasks.forEach((task: Task) => { 110 | if (task.state === column) { 111 | let file = this.getFileByTaskId(path, task.id, app); 112 | if (file != undefined) { 113 | if (teamLeaderMode) { 114 | boardMD += `- [ ] [[${file.basename}]] \n ${task.assignedTo} \n ${task.title}\n`; 115 | } else { 116 | boardMD += `- [ ] [[${file.basename}]] \n ${task.title}\n`; 117 | } 118 | } 119 | } 120 | }); 121 | 122 | boardMD += '\n'; 123 | }); 124 | 125 | boardMD += this.BOARD_TEMPLATE_END; 126 | 127 | return app.vault.adapter.write(filepath, boardMD); 128 | } 129 | 130 | private static async createTaskNote( 131 | path: string, 132 | task: Task, 133 | template: string, 134 | notename: string, 135 | app: App 136 | ): Promise { 137 | let filename = notename 138 | .replace(/{{TASK_ID}}/g, task.id) 139 | .replace(/{{TASK_STATE}}/g, task.state) 140 | .replace(/{{TASK_TYPE}}/g, task.type.replace(/ /g, '')) 141 | .replace(/{{TASK_ASSIGNEDTO}}/g, task.assignedTo); 142 | 143 | const filepath = path + `/${filename}.md`; 144 | 145 | let content = template 146 | .replace(/{{TASK_ID}}/g, task.id) 147 | .replace(/{{TASK_TITLE}}/g, task.title) 148 | .replace(/{{TASK_STATE}}/g, task.state) 149 | .replace(/{{TASK_TYPE}}/g, task.type.replace(/ /g, '')) 150 | .replace(/{{TASK_ASSIGNEDTO}}/g, task.assignedTo) 151 | .replace(/{{TASK_LINK}}/g, task.link); 152 | 153 | if (task.dueDate != null) { 154 | content = content.replace(/{{TASK_DUEDATE}}/g, task.dueDate); 155 | } else { 156 | content = content.replace(/{{TASK_DUEDATE}}/g, ''); 157 | } 158 | 159 | if (task.tags != null) { 160 | content = content.replace(/{{TASK_TAGS}}/g, task.tags); 161 | } else { 162 | content = content.replace(/{{TASK_TAGS}}/g, ''); 163 | } 164 | 165 | if (task.desc != null) { 166 | content = content.replace(/{{TASK_DESCRIPTION}}/g, task.desc); 167 | } else { 168 | content = content.replace(/{{TASK_DESCRIPTION}}/g, ''); 169 | } 170 | 171 | if (task.criteria != null) { 172 | content = content.replace(/{{TASK_CRITERIA}}/g, task.criteria); 173 | } else { 174 | content = content.replace(/{{TASK_CRITERIA}}/g, ''); 175 | } 176 | 177 | if (task.testScenarios != null) { 178 | content = content.replace(/{{TASK_TESTS}}/g, task.testScenarios); 179 | } else { 180 | content = content.replace(/{{TASK_TESTS}}/g, ''); 181 | } 182 | 183 | return app.vault.create(filepath, content); 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BoxThatBeat/obsidian-agile-task-notes/120b184fcf1cef57d62c14809f681df5675df72e/styles.css -------------------------------------------------------------------------------- /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 | }, 21 | "include": [ 22 | "**/*.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /version-bump.mjs: -------------------------------------------------------------------------------- 1 | import { readFileSync, writeFileSync } from "fs"; 2 | 3 | const targetVersion = process.env.npm_package_version; 4 | 5 | // read minAppVersion from manifest.json and bump version to target version 6 | let manifest = JSON.parse(readFileSync("manifest.json", "utf8")); 7 | const { minAppVersion } = manifest; 8 | manifest.version = targetVersion; 9 | writeFileSync("manifest.json", JSON.stringify(manifest, null, "\t")); 10 | 11 | // update versions.json with target version and minAppVersion from manifest.json 12 | let versions = JSON.parse(readFileSync("versions.json", "utf8")); 13 | versions[targetVersion] = minAppVersion; 14 | writeFileSync("versions.json", JSON.stringify(versions, null, "\t")); 15 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.0.0": "0.12.0", 3 | "1.0.1": "0.12.0", 4 | "1.0.2": "0.12.0", 5 | "1.0.3": "0.12.0", 6 | "1.0.4": "0.12.0", 7 | "1.0.5": "0.12.0", 8 | "1.1.0": "0.12.0", 9 | "1.2.0": "0.12.0", 10 | "1.3.0": "0.12.0", 11 | "1.3.1": "0.12.0", 12 | "1.3.2": "0.12.0", 13 | "1.4.0": "0.12.0" 14 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@nodelib/fs.scandir@2.1.5": 6 | version "2.1.5" 7 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 8 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 9 | dependencies: 10 | "@nodelib/fs.stat" "2.0.5" 11 | run-parallel "^1.1.9" 12 | 13 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 14 | version "2.0.5" 15 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 16 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 17 | 18 | "@nodelib/fs.walk@^1.2.3": 19 | version "1.2.8" 20 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 21 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 22 | dependencies: 23 | "@nodelib/fs.scandir" "2.1.5" 24 | fastq "^1.6.0" 25 | 26 | "@types/codemirror@5.60.8": 27 | version "5.60.8" 28 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@types/codemirror/-/codemirror-5.60.8.tgz#b647d04b470e8e1836dd84b2879988fc55c9de68" 29 | integrity sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw== 30 | dependencies: 31 | "@types/tern" "*" 32 | 33 | "@types/estree@*": 34 | version "1.0.5" 35 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" 36 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== 37 | 38 | "@types/json-schema@^7.0.9": 39 | version "7.0.15" 40 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" 41 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== 42 | 43 | "@types/node@^16.11.6": 44 | version "16.18.106" 45 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@types/node/-/node-16.18.106.tgz#62228200da6d98365d2de5601f7230cdf041f0e2" 46 | integrity sha512-YTgQUcpdXRc7iiEMutkkXl9WUx5lGUCVYvnfRg9CV+IA4l9epctEhCTbaw4KgzXaKYv8emvFJkEM65+MkNUhsQ== 47 | 48 | "@types/tern@*": 49 | version "0.23.9" 50 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@types/tern/-/tern-0.23.9.tgz#6f6093a4a9af3e6bb8dde528e024924d196b367c" 51 | integrity sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw== 52 | dependencies: 53 | "@types/estree" "*" 54 | 55 | "@typescript-eslint/eslint-plugin@5.29.0": 56 | version "5.29.0" 57 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" 58 | integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== 59 | dependencies: 60 | "@typescript-eslint/scope-manager" "5.29.0" 61 | "@typescript-eslint/type-utils" "5.29.0" 62 | "@typescript-eslint/utils" "5.29.0" 63 | debug "^4.3.4" 64 | functional-red-black-tree "^1.0.1" 65 | ignore "^5.2.0" 66 | regexpp "^3.2.0" 67 | semver "^7.3.7" 68 | tsutils "^3.21.0" 69 | 70 | "@typescript-eslint/parser@5.29.0": 71 | version "5.29.0" 72 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" 73 | integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== 74 | dependencies: 75 | "@typescript-eslint/scope-manager" "5.29.0" 76 | "@typescript-eslint/types" "5.29.0" 77 | "@typescript-eslint/typescript-estree" "5.29.0" 78 | debug "^4.3.4" 79 | 80 | "@typescript-eslint/scope-manager@5.29.0": 81 | version "5.29.0" 82 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" 83 | integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== 84 | dependencies: 85 | "@typescript-eslint/types" "5.29.0" 86 | "@typescript-eslint/visitor-keys" "5.29.0" 87 | 88 | "@typescript-eslint/type-utils@5.29.0": 89 | version "5.29.0" 90 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" 91 | integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== 92 | dependencies: 93 | "@typescript-eslint/utils" "5.29.0" 94 | debug "^4.3.4" 95 | tsutils "^3.21.0" 96 | 97 | "@typescript-eslint/types@5.29.0": 98 | version "5.29.0" 99 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" 100 | integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== 101 | 102 | "@typescript-eslint/typescript-estree@5.29.0": 103 | version "5.29.0" 104 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" 105 | integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== 106 | dependencies: 107 | "@typescript-eslint/types" "5.29.0" 108 | "@typescript-eslint/visitor-keys" "5.29.0" 109 | debug "^4.3.4" 110 | globby "^11.1.0" 111 | is-glob "^4.0.3" 112 | semver "^7.3.7" 113 | tsutils "^3.21.0" 114 | 115 | "@typescript-eslint/utils@5.29.0": 116 | version "5.29.0" 117 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" 118 | integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== 119 | dependencies: 120 | "@types/json-schema" "^7.0.9" 121 | "@typescript-eslint/scope-manager" "5.29.0" 122 | "@typescript-eslint/types" "5.29.0" 123 | "@typescript-eslint/typescript-estree" "5.29.0" 124 | eslint-scope "^5.1.1" 125 | eslint-utils "^3.0.0" 126 | 127 | "@typescript-eslint/visitor-keys@5.29.0": 128 | version "5.29.0" 129 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" 130 | integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== 131 | dependencies: 132 | "@typescript-eslint/types" "5.29.0" 133 | eslint-visitor-keys "^3.3.0" 134 | 135 | array-union@^2.1.0: 136 | version "2.1.0" 137 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 138 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 139 | 140 | braces@^3.0.3: 141 | version "3.0.3" 142 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 143 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 144 | dependencies: 145 | fill-range "^7.1.1" 146 | 147 | builtin-modules@3.3.0: 148 | version "3.3.0" 149 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" 150 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== 151 | 152 | debug@^4.3.4: 153 | version "4.3.6" 154 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" 155 | integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== 156 | dependencies: 157 | ms "2.1.2" 158 | 159 | dir-glob@^3.0.1: 160 | version "3.0.1" 161 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 162 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 163 | dependencies: 164 | path-type "^4.0.0" 165 | 166 | esbuild-android-64@0.14.47: 167 | version "0.14.47" 168 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz#ef95b42c67bcf4268c869153fa3ad1466c4cea6b" 169 | integrity sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g== 170 | 171 | esbuild-android-arm64@0.14.47: 172 | version "0.14.47" 173 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz#4ebd7ce9fb250b4695faa3ee46fd3b0754ecd9e6" 174 | integrity sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ== 175 | 176 | esbuild-darwin-64@0.14.47: 177 | version "0.14.47" 178 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz#e0da6c244f497192f951807f003f6a423ed23188" 179 | integrity sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA== 180 | 181 | esbuild-darwin-arm64@0.14.47: 182 | version "0.14.47" 183 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz#cd40fd49a672fca581ed202834239dfe540a9028" 184 | integrity sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw== 185 | 186 | esbuild-freebsd-64@0.14.47: 187 | version "0.14.47" 188 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz#8da6a14c095b29c01fc8087a16cb7906debc2d67" 189 | integrity sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ== 190 | 191 | esbuild-freebsd-arm64@0.14.47: 192 | version "0.14.47" 193 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz#ad31f9c92817ff8f33fd253af7ab5122dc1b83f6" 194 | integrity sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ== 195 | 196 | esbuild-linux-32@0.14.47: 197 | version "0.14.47" 198 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz#de085e4db2e692ea30c71208ccc23fdcf5196c58" 199 | integrity sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw== 200 | 201 | esbuild-linux-64@0.14.47: 202 | version "0.14.47" 203 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz#2a9321bbccb01f01b04cebfcfccbabeba3658ba1" 204 | integrity sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw== 205 | 206 | esbuild-linux-arm64@0.14.47: 207 | version "0.14.47" 208 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz#b9da7b6fc4b0ca7a13363a0c5b7bb927e4bc535a" 209 | integrity sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw== 210 | 211 | esbuild-linux-arm@0.14.47: 212 | version "0.14.47" 213 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz#56fec2a09b9561c337059d4af53625142aded853" 214 | integrity sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA== 215 | 216 | esbuild-linux-mips64le@0.14.47: 217 | version "0.14.47" 218 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz#9db21561f8f22ed79ef2aedb7bbef082b46cf823" 219 | integrity sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg== 220 | 221 | esbuild-linux-ppc64le@0.14.47: 222 | version "0.14.47" 223 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz#dc3a3da321222b11e96e50efafec9d2de408198b" 224 | integrity sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w== 225 | 226 | esbuild-linux-riscv64@0.14.47: 227 | version "0.14.47" 228 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz#9bd6dcd3dca6c0357084ecd06e1d2d4bf105335f" 229 | integrity sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g== 230 | 231 | esbuild-linux-s390x@0.14.47: 232 | version "0.14.47" 233 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz#a458af939b52f2cd32fc561410d441a51f69d41f" 234 | integrity sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw== 235 | 236 | esbuild-netbsd-64@0.14.47: 237 | version "0.14.47" 238 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz#6388e785d7e7e4420cb01348d7483ab511b16aa8" 239 | integrity sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ== 240 | 241 | esbuild-openbsd-64@0.14.47: 242 | version "0.14.47" 243 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz#309af806db561aa886c445344d1aacab850dbdc5" 244 | integrity sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw== 245 | 246 | esbuild-sunos-64@0.14.47: 247 | version "0.14.47" 248 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz#3f19612dcdb89ba6c65283a7ff6e16f8afbf8aaa" 249 | integrity sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ== 250 | 251 | esbuild-windows-32@0.14.47: 252 | version "0.14.47" 253 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz#a92d279c8458d5dc319abcfeb30aa49e8f2e6f7f" 254 | integrity sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ== 255 | 256 | esbuild-windows-64@0.14.47: 257 | version "0.14.47" 258 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz#2564c3fcf0c23d701edb71af8c52d3be4cec5f8a" 259 | integrity sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ== 260 | 261 | esbuild-windows-arm64@0.14.47: 262 | version "0.14.47" 263 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz#86d9db1a22d83360f726ac5fba41c2f625db6878" 264 | integrity sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ== 265 | 266 | esbuild@0.14.47: 267 | version "0.14.47" 268 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esbuild/-/esbuild-0.14.47.tgz#0d6415f6bd8eb9e73a58f7f9ae04c5276cda0e4d" 269 | integrity sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA== 270 | optionalDependencies: 271 | esbuild-android-64 "0.14.47" 272 | esbuild-android-arm64 "0.14.47" 273 | esbuild-darwin-64 "0.14.47" 274 | esbuild-darwin-arm64 "0.14.47" 275 | esbuild-freebsd-64 "0.14.47" 276 | esbuild-freebsd-arm64 "0.14.47" 277 | esbuild-linux-32 "0.14.47" 278 | esbuild-linux-64 "0.14.47" 279 | esbuild-linux-arm "0.14.47" 280 | esbuild-linux-arm64 "0.14.47" 281 | esbuild-linux-mips64le "0.14.47" 282 | esbuild-linux-ppc64le "0.14.47" 283 | esbuild-linux-riscv64 "0.14.47" 284 | esbuild-linux-s390x "0.14.47" 285 | esbuild-netbsd-64 "0.14.47" 286 | esbuild-openbsd-64 "0.14.47" 287 | esbuild-sunos-64 "0.14.47" 288 | esbuild-windows-32 "0.14.47" 289 | esbuild-windows-64 "0.14.47" 290 | esbuild-windows-arm64 "0.14.47" 291 | 292 | eslint-scope@^5.1.1: 293 | version "5.1.1" 294 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 295 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 296 | dependencies: 297 | esrecurse "^4.3.0" 298 | estraverse "^4.1.1" 299 | 300 | eslint-utils@^3.0.0: 301 | version "3.0.0" 302 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 303 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 304 | dependencies: 305 | eslint-visitor-keys "^2.0.0" 306 | 307 | eslint-visitor-keys@^2.0.0: 308 | version "2.1.0" 309 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 310 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 311 | 312 | eslint-visitor-keys@^3.3.0: 313 | version "3.4.3" 314 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" 315 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 316 | 317 | esrecurse@^4.3.0: 318 | version "4.3.0" 319 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 320 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 321 | dependencies: 322 | estraverse "^5.2.0" 323 | 324 | estraverse@^4.1.1: 325 | version "4.3.0" 326 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 327 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 328 | 329 | estraverse@^5.2.0: 330 | version "5.3.0" 331 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 332 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 333 | 334 | fast-glob@^3.2.9: 335 | version "3.3.2" 336 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" 337 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 338 | dependencies: 339 | "@nodelib/fs.stat" "^2.0.2" 340 | "@nodelib/fs.walk" "^1.2.3" 341 | glob-parent "^5.1.2" 342 | merge2 "^1.3.0" 343 | micromatch "^4.0.4" 344 | 345 | fastq@^1.6.0: 346 | version "1.17.1" 347 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" 348 | integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== 349 | dependencies: 350 | reusify "^1.0.4" 351 | 352 | fill-range@^7.1.1: 353 | version "7.1.1" 354 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 355 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 356 | dependencies: 357 | to-regex-range "^5.0.1" 358 | 359 | functional-red-black-tree@^1.0.1: 360 | version "1.0.1" 361 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 362 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 363 | 364 | glob-parent@^5.1.2: 365 | version "5.1.2" 366 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 367 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 368 | dependencies: 369 | is-glob "^4.0.1" 370 | 371 | globby@^11.1.0: 372 | version "11.1.0" 373 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 374 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 375 | dependencies: 376 | array-union "^2.1.0" 377 | dir-glob "^3.0.1" 378 | fast-glob "^3.2.9" 379 | ignore "^5.2.0" 380 | merge2 "^1.4.1" 381 | slash "^3.0.0" 382 | 383 | ignore@^5.2.0: 384 | version "5.3.2" 385 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" 386 | integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== 387 | 388 | is-extglob@^2.1.1: 389 | version "2.1.1" 390 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 391 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 392 | 393 | is-glob@^4.0.1, is-glob@^4.0.3: 394 | version "4.0.3" 395 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 396 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 397 | dependencies: 398 | is-extglob "^2.1.1" 399 | 400 | is-number@^7.0.0: 401 | version "7.0.0" 402 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 403 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 404 | 405 | merge2@^1.3.0, merge2@^1.4.1: 406 | version "1.4.1" 407 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 408 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 409 | 410 | micromatch@^4.0.4: 411 | version "4.0.8" 412 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 413 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 414 | dependencies: 415 | braces "^3.0.3" 416 | picomatch "^2.3.1" 417 | 418 | moment@2.29.4: 419 | version "2.29.4" 420 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" 421 | integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== 422 | 423 | ms@2.1.2: 424 | version "2.1.2" 425 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 426 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 427 | 428 | obsidian@latest: 429 | version "1.6.6" 430 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/obsidian/-/obsidian-1.6.6.tgz#d45c4021c291765e1b77ed4a1c645e562ff6e77f" 431 | integrity sha512-GZHzeOiwmw/wBjB5JwrsxAZBLqxGQmqtEKSvJJvT0LtTcqeOFnV8jv0ZK5kO7hBb44WxJc+LdS7mZgLXbb+qXQ== 432 | dependencies: 433 | "@types/codemirror" "5.60.8" 434 | moment "2.29.4" 435 | 436 | path-type@^4.0.0: 437 | version "4.0.0" 438 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 439 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 440 | 441 | picomatch@^2.3.1: 442 | version "2.3.1" 443 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 444 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 445 | 446 | queue-microtask@^1.2.2: 447 | version "1.2.3" 448 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 449 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 450 | 451 | regexpp@^3.2.0: 452 | version "3.2.0" 453 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 454 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 455 | 456 | reusify@^1.0.4: 457 | version "1.0.4" 458 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 459 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 460 | 461 | run-parallel@^1.1.9: 462 | version "1.2.0" 463 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 464 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 465 | dependencies: 466 | queue-microtask "^1.2.2" 467 | 468 | sanitizer@^0.1.3: 469 | version "0.1.3" 470 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/sanitizer/-/sanitizer-0.1.3.tgz#d4f0af7475d9a7baf2a9e5a611718baa178a39e1" 471 | integrity sha512-j05vL56tR90rsYqm9ZD05v6K4HI7t4yMDEvvU0x4f+IADXM9Jx1x9mzatxOs5drJq6dGhugxDW99mcPvXVLl+Q== 472 | 473 | semver@^7.3.7: 474 | version "7.6.3" 475 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" 476 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 477 | 478 | slash@^3.0.0: 479 | version "3.0.0" 480 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 481 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 482 | 483 | to-regex-range@^5.0.1: 484 | version "5.0.1" 485 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 486 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 487 | dependencies: 488 | is-number "^7.0.0" 489 | 490 | tslib@2.4.0: 491 | version "2.4.0" 492 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 493 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 494 | 495 | tslib@^1.8.1: 496 | version "1.14.1" 497 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 498 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 499 | 500 | tsutils@^3.21.0: 501 | version "3.21.0" 502 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 503 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 504 | dependencies: 505 | tslib "^1.8.1" 506 | 507 | typescript@4.7.4: 508 | version "4.7.4" 509 | resolved "https://artifactory.jsitelecom.com:443/artifactory/api/npm/npm-virtual/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 510 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 511 | --------------------------------------------------------------------------------