From 12da5c86c7e8041528c8789e4de360fe3e39c2de Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:46:56 +0300 Subject: [PATCH 01/63] chore(gitkeep): remove unecessary .gitkeep file --- source/.gitkeep | 1 - 1 file changed, 1 deletion(-) delete mode 100644 source/.gitkeep diff --git a/source/.gitkeep b/source/.gitkeep deleted file mode 100644 index e6e6ed7..0000000 --- a/source/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -# GITKEEP FILE FOR KEEPING FOLDER ON GIT HISTORY. From a9184889cf6072e6bccafed3ae8c087993876df8 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sat, 21 Sep 2024 11:49:42 +0300 Subject: [PATCH 02/63] feat(common): add support for default extensions and default views by default This means that now plugin forever remembers what are initial extenstions and views were registered and stored in the Obsidian Vault. --- source/utils/constants.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 source/utils/constants.ts diff --git a/source/utils/constants.ts b/source/utils/constants.ts new file mode 100644 index 0000000..de16319 --- /dev/null +++ b/source/utils/constants.ts @@ -0,0 +1,11 @@ +export default class CONSTANTS { + public static defaultExtensions: { + [id: string]: string[]; + } = { + 'audio': ['3gp', 'flac', 'm4a', 'mp3', 'oga', 'ogg', 'opus', 'wav'], + 'image': ['avif', 'bmp', 'gif', 'jpeg', 'jpg', 'png', 'webp'], + 'video': ['mkv', 'mov', 'mp4', 'ogv', 'webm'], + 'pdf': ['pdf'], + 'markdown': ['md'] + }; +} From ec9c5ccb170d8285c4151a20b9eb2fc256763e6f Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sat, 21 Sep 2024 11:50:23 +0300 Subject: [PATCH 03/63] feat(common): add button to "Reload" registries in soft way which saves default extensions --- source/main.ts | 7 +++++++ source/settings.ts | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/source/main.ts b/source/main.ts index 9c32e65..f6f112e 100644 --- a/source/main.ts +++ b/source/main.ts @@ -63,6 +63,7 @@ import { parsegroup } from './utils/functions'; import { TFilesRename } from './components/files-rename'; +import CONSTANTS from './utils/constants'; export default class UNITADE_PLUGIN extends Plugin { private _settings: UNITADE_SETTINGS = DEFAULT_SETTINGS; @@ -332,6 +333,12 @@ export default class UNITADE_PLUGIN extends Plugin { this.__apply(); } + public applyDefaults(): void { + for (let defaultView in CONSTANTS.defaultExtensions) { + this.registerExtensions(CONSTANTS.defaultExtensions[defaultView], defaultView); + } + } + public tryApply(filetype: string, view: string): void { this.__tryApply(filetype, view); } diff --git a/source/settings.ts b/source/settings.ts index 89f7f01..67cebce 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -273,6 +273,24 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return button; }); + new Setting(containerEl) + .setName('Reload registries') + .setDesc('Reloads views and registries extensions providing new settings and data to the app and keeping experience up-to-date with config.') + .addButton(button => { + button + .setButtonText('Reload') + .setIcon('reload') + .onClick(async (event) => { + if (this.plugin.settings.debug_mode) + console.info(`[${event.timeStamp}]: Caused reloading function!`); + + this.plugin.unapply(); + this.plugin.apply(); + + this.plugin.applyDefaults(); + }) + }) + containerEl.createEl('h2', { text: 'Errors' }); this._errors = containerEl.createEl('p', { text: 'None' }); this._errors.style.whiteSpace = 'pre-line'; From d43ec6eb9ed1d2f6a9b1f8ba1876b95877cf74ad Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sat, 21 Sep 2024 12:01:55 +0300 Subject: [PATCH 04/63] feat!(unloading): now "Unload" button fully deletes extensions registry, not just plugin's settings --- source/locales/settings.text.ts | 4 ++-- source/main.ts | 8 ++++++++ source/settings.ts | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/source/locales/settings.text.ts b/source/locales/settings.text.ts index 5435541..79311bd 100644 --- a/source/locales/settings.text.ts +++ b/source/locales/settings.text.ts @@ -49,14 +49,14 @@ export default class SETTING_LOCALES { static getUlrd(): { name: string, desc: string } { return { name: "Unload plugin's registry", - desc: "On click, causes imitation of disabling plugin, meaning, reloading registry of extensions in vault to default mode.", + desc: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug.", }; } static getHlrd(): { name: string, desc: string } { return { name: "Hard-load plugin's registry", - desc: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within user's settings." + desc: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." }; } diff --git a/source/main.ts b/source/main.ts index f6f112e..ac46173 100644 --- a/source/main.ts +++ b/source/main.ts @@ -405,6 +405,14 @@ export default class UNITADE_PLUGIN extends Plugin { this.__unapply(this.settings); } + public unapplyRegistry(): void { + /**@ts-expect-error */ + for (const extensionKey in this.app.viewRegistry.typeByExtension) { + /**@ts-expect-error */ + this.app.viewRegistry.unregisterExtensions([extensionKey]); + } + } + private __unapplyCfg(extensions: string, markdown_charge: boolean) { const ext_arr: string[] = extensions.split(';').map(s => s.trim()); diff --git a/source/settings.ts b/source/settings.ts index 67cebce..2da0f05 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -250,7 +250,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { if (this.plugin.settings.debug_mode) console.info(`[${event.timeStamp}]: Caused unloading function!`); - this.plugin.unapply(); + this.plugin.unapplyRegistry(); }); return button; From 28166e35cde4655488d4b9003c414bd74a4c1afc Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sat, 21 Sep 2024 12:05:46 +0300 Subject: [PATCH 05/63] feat!(unloading): differentiate "Hard-delete" (past Unload) and new "Unload" function --- source/locales/settings.text.ts | 2 +- source/settings.ts | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/source/locales/settings.text.ts b/source/locales/settings.text.ts index 79311bd..dd6f2f1 100644 --- a/source/locales/settings.text.ts +++ b/source/locales/settings.text.ts @@ -48,7 +48,7 @@ export default class SETTING_LOCALES { static getUlrd(): { name: string, desc: string } { return { - name: "Unload plugin's registry", + name: "Hard-delete registry", desc: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug.", }; } diff --git a/source/settings.ts b/source/settings.ts index 2da0f05..75c1d2e 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -244,11 +244,12 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setDesc(SETTING_LOCALE.getUlrd().desc) .addButton(button => { button - .setButtonText('Unload') + .setButtonText('Hard-delete') .setIcon('upload') + .setWarning() .onClick(async (event) => { if (this.plugin.settings.debug_mode) - console.info(`[${event.timeStamp}]: Caused unloading function!`); + console.info(`[${event.timeStamp}]: Caused force-deleting function!`); this.plugin.unapplyRegistry(); }); @@ -256,6 +257,21 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return button; }); + new Setting(containerEl) + .setName('Force-unload') + .setDesc('On click, causes imitation of disabling plugin, meaning, reloading registry of extensions in vault to default mode.') + .addButton(button => { + button + .setButtonText('Force-unload') + .setIcon('upload') + .onClick(async (event) => { + if (this.plugin.settings.debug_mode) + console.info(`[${event.timeStamp}]: Caused unloading function!`); + + this.plugin.unapply(); + }) + }) + new Setting(containerEl) .setName(SETTING_LOCALE.getHlrd().name) .setDesc(SETTING_LOCALE.getHlrd().desc) From 2a7ee5f0c436fbcea5a32048121450e3706af4df Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sat, 21 Sep 2024 16:18:53 +0300 Subject: [PATCH 06/63] feat!(error-silencing): add "Silence errors" function and add "Debug" toggle in the settings Now, when "Silence errors" mode is enabled, errors will be debugged in the console and no notifications would appear. Fix of #70 --- source/main.ts | 58 +++++++++++++++++++++++++++++++++++----------- source/settings.ts | 45 +++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 14 deletions(-) diff --git a/source/main.ts b/source/main.ts index ac46173..e45512c 100644 --- a/source/main.ts +++ b/source/main.ts @@ -96,7 +96,11 @@ export default class UNITADE_PLUGIN extends Plugin { return; } } catch (error) { - console.error('Error creating regular expression:', error); + if (!this.settings.silence_errors) { + console.error(error); + } else { + console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${error}`); + } } } } @@ -128,9 +132,13 @@ export default class UNITADE_PLUGIN extends Plugin { this.settings.mobile_settings.extensions = __mb_settings.join(';'); } } catch (err: any) { - new Notification('Error from UNITADE plugin:', { body: `Error with on-load registry of: ${filename.last()!}};` }); + if (!this.settings.silence_errors) { + new Notification('Error from UNITADE plugin:', { body: `Error with on-load registry of: ${err}` }); - console.error(err); + console.error(err); + } else { + console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${err}`); + } } } @@ -163,9 +171,13 @@ export default class UNITADE_PLUGIN extends Plugin { this.settings.mobile_settings.extensions = __mb_settings.join(';'); } } catch (err: any) { - new Notification('Error from UNITADE plugin:', { body: `Error with on-load registry of: ${extensions}` }); + if (!this.settings.silence_errors) { + new Notification('Error from UNITADE plugin:', { body: `Error with on-load registry of: ${extensions}` }); - console.error(err); + console.error(err); + } else { + console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${err}`); + } } } } @@ -270,7 +282,13 @@ export default class UNITADE_PLUGIN extends Plugin { try { this.registerExtensions(['.md'], 'markdown'); } catch (err: any) { - console.error(err); + if (!this.settings.silence_errors) { + new Notification('Error from UNITADE plugin:', { body: err }); + + console.error(err); + } else { + console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${err}`); + } this.settings.errors['markdown_override'] = `Error with reregistering extensions: ${err}`; } @@ -320,11 +338,15 @@ export default class UNITADE_PLUGIN extends Plugin { return new UNITADE_VIEW(leaf, extension); }); } catch (err: any) { - new Notification('Error from UNITADE plugin:', { body: `${err}` }); - this.settings.errors[extension] = `Error from UNITADE plugin: ${err}`; - console.error(err); + if (!this.settings.silence_errors) { + new Notification('Error from UNITADE plugin:', { body: `${err}` }); + + console.error(err); + } else { + console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${err}`); + } } } } @@ -365,9 +387,13 @@ export default class UNITADE_PLUGIN extends Plugin { _msg = `Could not register extension: ${filetype} to view as ${view}.\n${err}`; } - new Notification('Error from UNITADE plugin:', { body: _msg }); + if (!this.settings.silence_errors) { + new Notification('Error from UNITADE plugin:', { body: _msg }); - console.error(_msg); + console.error(_msg); + } else { + console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${_msg}`); + } this._settings.errors[filetype] = _msg; } @@ -425,11 +451,15 @@ export default class UNITADE_PLUGIN extends Plugin { } catch (err: any) { const _msg = `Couldn't unregistry extension: ${extension};` - new Notification('Error from UNITADE plugin:', { body: _msg }); - this.settings.errors[extension] = _msg; - console.error(_msg); + if (!this.settings.silence_errors) { + new Notification('Error from UNITADE plugin:', { body: _msg }); + + console.error(_msg); + } else { + console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${_msg}`); + } } } } diff --git a/source/settings.ts b/source/settings.ts index 75c1d2e..84e88d0 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -58,6 +58,7 @@ export interface UNITADE_SETTINGS { errors: Record, debug_mode: boolean, + silence_errors: boolean, } export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { @@ -84,6 +85,7 @@ export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { errors: {}, debug_mode: false, + silence_errors: false } export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { @@ -633,6 +635,49 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { groupExtInp.inputEl.style.width = '100%'; groupExtInp.inputEl.style.height = '48px'; groupExtInp.inputEl.style.minHeight = '36px'; + + containerEl.createEl('h3', { text: 'Additionals' }); + + new Setting(containerEl) + .setName('Debug mode:') + .setDesc('This mode starts output in application\'s console about actions you do.') + .setTooltip('Do not use this mode if you are not developer or familliar with console.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.debug_mode) + .onChange(async (value) => { + let next = { + ...this.plugin.settings, + debug_mode: value, + }; + + await this.plugin.uptSettings(next); + + this.__updateErrors(); + }); + + return toggle; + }); + + new Setting(containerEl) + .setName('Silence errors:') + .setDesc('This mode silences every error and disables notifications: could help in case of error spamming.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.silence_errors) + .onChange(async (value) => { + let next = { + ...this.plugin.settings, + silence_errors: value, + }; + + await this.plugin.uptSettings(next); + + this.__updateErrors(); + }); + + return toggle; + }); } private __uptMbConfig(mbConfigInput: TextAreaComponent, mbConfigEnabled: boolean): void { From 1b527afeca5f399fe0a73a5f91cc9409e0c385e0 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 24 Sep 2024 20:16:15 +0300 Subject: [PATCH 07/63] build(tracking): create script which allows to skip worktree of clone script and little refactoring of them --- clone-tracking.bat | 27 +++++++++++++++++++++++++++ clone.bat | 3 --- 2 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 clone-tracking.bat diff --git a/clone-tracking.bat b/clone-tracking.bat new file mode 100644 index 0000000..32fdfd9 --- /dev/null +++ b/clone-tracking.bat @@ -0,0 +1,27 @@ +@echo off + +SET "FILE_PATH=clone.bat" + +FOR /F "tokens=*" %%i IN ('git ls-files -v %FILE_PATH%') DO SET "CURRENT_STATUS=%%i" + +IF "%CURRENT_STATUS:~0,1%"=="S" ( + ECHO Currently, the file %FILE_PATH% is skipped. + ECHO Turning file tracking back ON... + git update-index --no-skip-worktree "%FILE_PATH%" + IF ERRORLEVEL 0 ( + ECHO File tracking turned on successfully. + ) ELSE ( + ECHO Error: Could not turn file tracking on. + ) +) ELSE ( + ECHO Currently, the file %FILE_PATH% is being tracked. + ECHO Turning file tracking OFF... + git update-index --skip-worktree "%FILE_PATH%" + IF ERRORLEVEL 0 ( + ECHO File tracking turned off successfully. + ) ELSE ( + ECHO Error: Could not turn file tracking off. + ) +) + +EXIT /B 0 diff --git a/clone.bat b/clone.bat index 5d629b6..15cca18 100644 --- a/clone.bat +++ b/clone.bat @@ -1,13 +1,10 @@ @echo off -REM Define the source and destination file paths SET "" SET "" -REM Copy the file COPY "%source_file%" "%target_file%" /Y -REM Check if the copy operation was successful IF ERRORLEVEL 0 ( ECHO File copied successfully. ) ELSE ( From 1badbbb159a5844fc3e0af2350cf9ca969487d2a Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 1 Oct 2024 14:07:46 +0300 Subject: [PATCH 08/63] feat!(locales): add localisation support for every language in plugin --- source/locales/core.ts | 99 +++++++++++++++++++++++ source/locales/langs/ar.ts | 70 ++++++++++++++++ source/locales/langs/cz.ts | 70 ++++++++++++++++ source/locales/langs/da.ts | 70 ++++++++++++++++ source/locales/langs/de.ts | 70 ++++++++++++++++ source/locales/langs/en.ts | 97 ++++++++++++++++++++++ source/locales/langs/es.ts | 70 ++++++++++++++++ source/locales/langs/fr.ts | 70 ++++++++++++++++ source/locales/langs/hi.ts | 70 ++++++++++++++++ source/locales/langs/id.ts | 70 ++++++++++++++++ source/locales/langs/it.ts | 70 ++++++++++++++++ source/locales/langs/ja.ts | 70 ++++++++++++++++ source/locales/langs/ko.ts | 70 ++++++++++++++++ source/locales/langs/nl.ts | 70 ++++++++++++++++ source/locales/langs/no.ts | 70 ++++++++++++++++ source/locales/langs/pl.ts | 70 ++++++++++++++++ source/locales/langs/pt-BR.ts | 70 ++++++++++++++++ source/locales/langs/pt.ts | 70 ++++++++++++++++ source/locales/langs/ro.ts | 70 ++++++++++++++++ source/locales/langs/ru.ts | 70 ++++++++++++++++ source/locales/langs/sq.ts | 70 ++++++++++++++++ source/locales/langs/tr.ts | 70 ++++++++++++++++ source/locales/langs/uk.ts | 70 ++++++++++++++++ source/locales/langs/zh-tw.ts | 70 ++++++++++++++++ source/locales/langs/zh.ts | 70 ++++++++++++++++ source/locales/modals.text.ts | 34 -------- source/locales/settings.text.ts | 139 -------------------------------- source/main.ts | 14 +++- source/settings.ts | 87 ++++++++++---------- 29 files changed, 1860 insertions(+), 220 deletions(-) create mode 100644 source/locales/core.ts create mode 100644 source/locales/langs/ar.ts create mode 100644 source/locales/langs/cz.ts create mode 100644 source/locales/langs/da.ts create mode 100644 source/locales/langs/de.ts create mode 100644 source/locales/langs/en.ts create mode 100644 source/locales/langs/es.ts create mode 100644 source/locales/langs/fr.ts create mode 100644 source/locales/langs/hi.ts create mode 100644 source/locales/langs/id.ts create mode 100644 source/locales/langs/it.ts create mode 100644 source/locales/langs/ja.ts create mode 100644 source/locales/langs/ko.ts create mode 100644 source/locales/langs/nl.ts create mode 100644 source/locales/langs/no.ts create mode 100644 source/locales/langs/pl.ts create mode 100644 source/locales/langs/pt-BR.ts create mode 100644 source/locales/langs/pt.ts create mode 100644 source/locales/langs/ro.ts create mode 100644 source/locales/langs/ru.ts create mode 100644 source/locales/langs/sq.ts create mode 100644 source/locales/langs/tr.ts create mode 100644 source/locales/langs/uk.ts create mode 100644 source/locales/langs/zh-tw.ts create mode 100644 source/locales/langs/zh.ts delete mode 100644 source/locales/modals.text.ts delete mode 100644 source/locales/settings.text.ts diff --git a/source/locales/core.ts b/source/locales/core.ts new file mode 100644 index 0000000..1506c77 --- /dev/null +++ b/source/locales/core.ts @@ -0,0 +1,99 @@ +import { LOCALES_AR } from "./langs/ar"; +import { LOCALES_CZ } from "./langs/cz"; +import { LOCALES_DA } from "./langs/da"; +import { LOCALES_DE } from "./langs/de"; +import { LOCALES_EN } from "./langs/en"; +import { LOCALES_ES } from "./langs/es"; +import { LOCALES_FR } from "./langs/fr"; +import { LOCALES_HI } from "./langs/hi"; +import { LOCALES_ID } from "./langs/id"; +import { LOCALES_IT } from "./langs/it"; +import { LOCALES_JA } from "./langs/ja"; +import { LOCALES_KO } from "./langs/ko"; +import { LOCALES_NL } from "./langs/nl"; +import { LOCALES_NO } from "./langs/no"; +import { LOCALES_PL } from "./langs/pl"; +import { LOCALES_PT } from "./langs/pt"; +import { LOCALES_PT_BR } from "./langs/pt-BR"; +import { LOCALES_RO } from "./langs/ro"; +import { LOCALES_RU } from "./langs/ru"; +import { LOCALES_SQ } from "./langs/sq"; +import { LOCALES_TR } from "./langs/tr"; +import { LOCALES_UK } from "./langs/uk"; +import { LOCALES_ZH } from "./langs/zh"; +import { LOCALES_ZH_TW } from "./langs/zh-tw"; + +interface LocaleTranslation { + 0?: string; + 1?: string; + 2?: string; + 3?: string; + 4?: string; +} + +interface Locales { + [key: string]: LocaleTranslation; +} + +export default class LocalesModule { + private _lang: string; + + static localesList: { [id: string]: Locales } = { + en: LOCALES_EN, + zh: LOCALES_ZH, + "zh-TW": LOCALES_ZH_TW, + ru: LOCALES_RU, + ko: LOCALES_KO, + it: LOCALES_IT, + id: LOCALES_ID, + ro: LOCALES_RO, + "pt-BR": LOCALES_PT_BR, + cz: LOCALES_CZ, + de: LOCALES_DE, + es: LOCALES_ES, + fr: LOCALES_FR, + no: LOCALES_NO, + pl: LOCALES_PL, + pt: LOCALES_PT, + ja: LOCALES_JA, + da: LOCALES_DA, + uk: LOCALES_UK, + sq: LOCALES_SQ, + tr: LOCALES_TR, + hi: LOCALES_HI, + nl: LOCALES_NL, + ar: LOCALES_AR, + }; + + constructor() { + this._lang = LocalesModule.getCurrentLocale(); + } + + public static getCurrentLocale(): string { + let lang = window.localStorage.getItem('language'); + + if (!lang) lang = 'en'; + + if (Object.keys(this.localesList).includes(lang)) return lang; + else throw Error('No correct language was found.'); + } + + getTranslation(): Locales { + return LocalesModule.localesList[this._lang]; + } + + getLocaleItem(locale_item: string): LocaleTranslation { + if (locale_item === undefined || typeof locale_item !== 'number') { + throw new Error('Locale key is undefined or invalid: access denied.'); + } + + const translation = this.getTranslation(); + + if (locale_item in translation) { + return translation[locale_item] || ''; + } else { + throw new Error(`Locale key ${locale_item} is out of bounds.`); + } + + } +} diff --git a/source/locales/langs/ar.ts b/source/locales/langs/ar.ts new file mode 100644 index 0000000..a1d99e1 --- /dev/null +++ b/source/locales/langs/ar.ts @@ -0,0 +1,70 @@ +export const LOCALES_AR = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/cz.ts b/source/locales/langs/cz.ts new file mode 100644 index 0000000..e604769 --- /dev/null +++ b/source/locales/langs/cz.ts @@ -0,0 +1,70 @@ +export const LOCALES_CZ = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/da.ts b/source/locales/langs/da.ts new file mode 100644 index 0000000..89cf523 --- /dev/null +++ b/source/locales/langs/da.ts @@ -0,0 +1,70 @@ +export const LOCALES_DA = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/de.ts b/source/locales/langs/de.ts new file mode 100644 index 0000000..40ec9a6 --- /dev/null +++ b/source/locales/langs/de.ts @@ -0,0 +1,70 @@ +export const LOCALES_DE = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts new file mode 100644 index 0000000..550502e --- /dev/null +++ b/source/locales/langs/en.ts @@ -0,0 +1,97 @@ +export const LOCALES_EN = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + 2: "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + 2: "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + }, + "SETTINGS_FORCE_UNLOAD": { + 0: "Force-unload", + 1: "'On click, causes imitation of disabling plugin, meaning, reloading registry of extensions in vault to default mode." + }, + "SETTINGS_RELOAD_REGISTRIES": { + 0: "Reload registries", + 1: "Reloads views and registries extensions providing new settings and data to the app and keeping experience up-to-date with config." + }, + "SETTINGS_DEBUG_MODE": { + 0: "Debug mode:", + 1: "This mode starts output in application\'s console about actions you do.", + 2: "Do not use this mode if you are not developer or familliar with console." + }, + "SETTINGS_SILENCE_ERRORS": { + 0: "Silence errors:", + 1: "This mode silences every error and disables notifications: could help in case of error spamming." + }, + "MODAL_EDIT_EXTENSION": { + 0: "Edit extension" + }, + "MODAL_CREATE_WITH_EXTENSION": { + 0: "Create with extension" + }, + "MODAL_EDIT_MULTIPLE": { + 0: "Edit multiple extensions", + 1: "Rename multiple files" + } +}; diff --git a/source/locales/langs/es.ts b/source/locales/langs/es.ts new file mode 100644 index 0000000..b156c70 --- /dev/null +++ b/source/locales/langs/es.ts @@ -0,0 +1,70 @@ +export const LOCALES_ES = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/fr.ts b/source/locales/langs/fr.ts new file mode 100644 index 0000000..8712035 --- /dev/null +++ b/source/locales/langs/fr.ts @@ -0,0 +1,70 @@ +export const LOCALES_FR = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/hi.ts b/source/locales/langs/hi.ts new file mode 100644 index 0000000..acd67ed --- /dev/null +++ b/source/locales/langs/hi.ts @@ -0,0 +1,70 @@ +export const LOCALES_HI = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/id.ts b/source/locales/langs/id.ts new file mode 100644 index 0000000..5c94eaf --- /dev/null +++ b/source/locales/langs/id.ts @@ -0,0 +1,70 @@ +export const LOCALES_ID = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/it.ts b/source/locales/langs/it.ts new file mode 100644 index 0000000..f845ef4 --- /dev/null +++ b/source/locales/langs/it.ts @@ -0,0 +1,70 @@ +export const LOCALES_IT = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/ja.ts b/source/locales/langs/ja.ts new file mode 100644 index 0000000..9a9a6e1 --- /dev/null +++ b/source/locales/langs/ja.ts @@ -0,0 +1,70 @@ +export const LOCALES_JA = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/ko.ts b/source/locales/langs/ko.ts new file mode 100644 index 0000000..2a0a868 --- /dev/null +++ b/source/locales/langs/ko.ts @@ -0,0 +1,70 @@ +export const LOCALES_KO = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/nl.ts b/source/locales/langs/nl.ts new file mode 100644 index 0000000..c789f29 --- /dev/null +++ b/source/locales/langs/nl.ts @@ -0,0 +1,70 @@ +export const LOCALES_NL = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/no.ts b/source/locales/langs/no.ts new file mode 100644 index 0000000..9ff986a --- /dev/null +++ b/source/locales/langs/no.ts @@ -0,0 +1,70 @@ +export const LOCALES_NO = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/pl.ts b/source/locales/langs/pl.ts new file mode 100644 index 0000000..7d103d2 --- /dev/null +++ b/source/locales/langs/pl.ts @@ -0,0 +1,70 @@ +export const LOCALES_PL = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/pt-BR.ts b/source/locales/langs/pt-BR.ts new file mode 100644 index 0000000..e7fe2bf --- /dev/null +++ b/source/locales/langs/pt-BR.ts @@ -0,0 +1,70 @@ +export const LOCALES_PT_BR = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/pt.ts b/source/locales/langs/pt.ts new file mode 100644 index 0000000..897d2e0 --- /dev/null +++ b/source/locales/langs/pt.ts @@ -0,0 +1,70 @@ +export const LOCALES_PT = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/ro.ts b/source/locales/langs/ro.ts new file mode 100644 index 0000000..3280d99 --- /dev/null +++ b/source/locales/langs/ro.ts @@ -0,0 +1,70 @@ +export const LOCALES_RO = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/ru.ts b/source/locales/langs/ru.ts new file mode 100644 index 0000000..c0b867f --- /dev/null +++ b/source/locales/langs/ru.ts @@ -0,0 +1,70 @@ +export const LOCALES_RU = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/sq.ts b/source/locales/langs/sq.ts new file mode 100644 index 0000000..49f55ec --- /dev/null +++ b/source/locales/langs/sq.ts @@ -0,0 +1,70 @@ +export const LOCALES_SQ = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/tr.ts b/source/locales/langs/tr.ts new file mode 100644 index 0000000..30e0d04 --- /dev/null +++ b/source/locales/langs/tr.ts @@ -0,0 +1,70 @@ +export const LOCALES_TR = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/uk.ts b/source/locales/langs/uk.ts new file mode 100644 index 0000000..883ebaa --- /dev/null +++ b/source/locales/langs/uk.ts @@ -0,0 +1,70 @@ +export const LOCALES_UK = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/zh-tw.ts b/source/locales/langs/zh-tw.ts new file mode 100644 index 0000000..bb7d113 --- /dev/null +++ b/source/locales/langs/zh-tw.ts @@ -0,0 +1,70 @@ +export const LOCALES_ZH_TW = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/langs/zh.ts b/source/locales/langs/zh.ts new file mode 100644 index 0000000..a08d513 --- /dev/null +++ b/source/locales/langs/zh.ts @@ -0,0 +1,70 @@ +export const LOCALES_ZH = { + "SETTINGS_EXTENSIONS": { + 0: "Extensions:", + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + }, + "SETTINGS_MOBILE_SPECIFIC": { + 0: "Mobile-specific:", + 1: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled." + }, + "SETTINGS_MD_OVERRIDE": { + 0: "Enable markdown override:", + 1: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." + }, + "SETTINGS_HARD_DELETE": { + 0: "Hard-delete registry", + 1: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug." + }, + "SETTINGS_HARD_LOAD": { + 0: "Hard-load plugin's registry", + 1: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." + }, + "SETTINGS_FORCED_EXTENSIONS": { + 0: "Forced-view extensions:", + 1: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", + 2: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices." + }, + "SETTINGS_ONLOAD_REGISTRY": { + 0: "On-load extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." + }, + "SETTINGS_ONLOAD_UNSAFE": { + 0: "On-load unsafe extension registry:", + 1: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", + "info": "This mode is interchangeable (that is, disabled) when a normal on-load registry is enabled." + }, + "SETTINGS_WARNING_MSG": { + 0: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality." + }, + "SETTINGS_IGNORE_MODE": { + 0: "Ignore mode:", + 1: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions." + }, + "SETTINGS_IGNORE_EXTENSIONS": { + 0: "Ignore extensions:", + 1: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry." + }, + "SETTINGS_IGNORE_FILES": { + 0: "Ignore files (regular expressions):", + 1: "Enter the file masks (regular expressions) by which files should be ignored by plugin." + }, + "SETTINGS_IGNORE_MSG": { + 0: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault." + }, + "SETTINGS_GROUP_EXTENSIONS": { + 0: "Grouped extensions:", + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + }, + "SETTINGS_GROUP_MSG": { + 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." + }, + "SETTINGS_BAREFILES": { + 0: "Barefiles on-load registry:", + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + }, + "MODALS_INCLUDE_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." + } +}; diff --git a/source/locales/modals.text.ts b/source/locales/modals.text.ts deleted file mode 100644 index bd0eb82..0000000 --- a/source/locales/modals.text.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2023-2024 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. - */ - -export default class MODALES_LOCALE { - static gtToggle1(): { name: string, desc: string } { - return { - name: "Include in extensions registry:", - desc: "If enabled, generated file's extension would be inserted in extensions array.", - }; - } -} diff --git a/source/locales/settings.text.ts b/source/locales/settings.text.ts deleted file mode 100644 index dd6f2f1..0000000 --- a/source/locales/settings.text.ts +++ /dev/null @@ -1,139 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2023-2024 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. - */ - -export default class SETTING_LOCALES { - static getCfgRt(): { name: string, desc: string } { - return { - name: "Extensions:", - desc: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';').", - }; - } - - static getCfgMb(): { name: string, desc: string } { - return { - name: "Mobile-specific:", - desc: "Both this module's extensions and default specific extensions (if mobile settings are not set up) will be used on mobile devices if this mode is enabled.", - }; - } - - static getMdOv(): { name: string, desc: string } { - return { - name: "Enable markdown override:", - desc: "If enabled, on plugin's initialization, disables markdown from OBSIDIAN's registry." - }; - } - - static getUlrd(): { name: string, desc: string } { - return { - name: "Hard-delete registry", - desc: "On click, causes full hot-deletion of entire registry of extensions, every extension which Obsidian could read will be deleted. Use with caution or for debug.", - }; - } - - static getHlrd(): { name: string, desc: string } { - return { - name: "Hard-load plugin's registry", - desc: "On click, causes imitation of enabling plugin, meaning, reloading registries which are defined and set up within plugin's settings." - }; - } - - static getFrcInf(): { name: string, desc: string, msg: string } { - return { - name: "Forced-view extenions:", - desc: "Entered extensions, would be tried to be initialized through codemirror setup of editors enabling extension's view in OBSIDIAN app.", - msg: "This functionality is in semi-demo because of OBSIDIAN's API unsupport for such features, it is more unstable on mobile devices.", - }; - } - - static getOnRf(): { name: string, desc: string, info: string } { - return { - name: "On-load extension registry:", - desc: "If enabled, plugin will now registry every file's extension (this setting: last part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", - info: "This mode is interchangeable (that is, disabled) when an unsafe on-load registry is enabled." - }; - } - - static getOnRu(): { name: string, desc: string, info: string } { - return { - name: "On-load unsafe extension registry:", - desc: "If enabled, plugin will now registry every file's extension (this setting: every part of extensions sequence) when OBSIDIAN catches event of new file appearing in vault.", - info: "This mode is interchangeable (that is, disabled) when an normal on-load registry is enabled." - }; - } - - static getOnMsg(): { msg: string } { - return { - msg: "ATTENTION: this setting can cause a “spam attack” with extensions in the OBSIDIAN extension registry and damage some files due to the editing format of the application itself, be careful when using this functionality.", - }; - } - - static getIgnInf(): { name: string, desc: string } { - return { - name: "Ignore mode:", - desc: "If enabled, plugin now would ignore specified type extensions by user input and files by regular expressions.", - }; - } - - static getIgnExt(): { name: string, desc: string } { - return { - name: "Ignore extensions:", - desc: "Enter the file extensions that should be ignored by plugin before add to registry by on-load registry.", - }; - } - - static getIgnMsk(): { name: string, desc: string } { - return { - name: "Ignore files (regular expressions):", - desc: "Enter the file masks (regular expressions) by which files should be ignored by plugin.", - }; - } - - static getIgnMsg(): { msg: string } { - return { - msg: "This settings works only for on-load registry functionality: meaning that ignoring extensions and files only works with only that functionality when the files are added to the vault.", - }; - } - - static getGrpInf(): { name: string, desc: string } { - return { - name: "Grouped extensions:", - desc: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas).", - }; - } - - static getGrpMsg(): { msg: string } { - return { - msg: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block.", - }; - } - - static getDbSp(): { name: string, desc: string } { - return { - name: "Barefiles on-load registry:", - desc: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry.", - } - } -} diff --git a/source/main.ts b/source/main.ts index e45512c..f612dc6 100644 --- a/source/main.ts +++ b/source/main.ts @@ -64,14 +64,20 @@ import { } from './utils/functions'; import { TFilesRename } from './components/files-rename'; import CONSTANTS from './utils/constants'; +import LocalesModule from './locales/core'; export default class UNITADE_PLUGIN extends Plugin { private _settings: UNITADE_SETTINGS = DEFAULT_SETTINGS; + private _locale: LocalesModule = new LocalesModule(); public get settings(): UNITADE_SETTINGS { return this._settings; } + public get locale(): LocalesModule { + return this._locale; + } + public get is_mobile(): boolean { return Platform.isMobile && this.settings.mobile_settings.enable; } @@ -201,7 +207,7 @@ export default class UNITADE_PLUGIN extends Plugin { return this.app.workspace.on('file-menu', (menu, file) => { menu .addItem((item) => { - item.setTitle('Edit extension'); + item.setTitle(this.locale.getLocaleItem('MODAL_EDIT_EXTENSION')[0]!); item .setIcon('pencil') .onClick(() => { @@ -215,7 +221,7 @@ export default class UNITADE_PLUGIN extends Plugin { }); }) .addItem((item) => { - item.setTitle('Create with extension'); + item.setTitle(this.locale.getLocaleItem('MODAL_CREATE_WITH_EXTENSION')[0]!); item .setIcon('pencil') .onClick(() => { @@ -235,7 +241,7 @@ export default class UNITADE_PLUGIN extends Plugin { return this.app.workspace.on('files-menu', (menu, files) => { menu .addItem((item) => { - item.setTitle('Edit multiple extensions'); + item.setTitle(this.locale.getLocaleItem('MODAL_EDIT_MULTIPLE')[0]!); item .setIcon('pencil') .onClick(() => { @@ -244,7 +250,7 @@ export default class UNITADE_PLUGIN extends Plugin { }); }) .addItem((item) => { - item.setTitle('Rename multiple files'); + item.setTitle(this.locale.getLocaleItem('MODAL_EDIT_MULTIPLE')[1]!); item .setIcon('pencil') .onClick(() => { diff --git a/source/settings.ts b/source/settings.ts index 84e88d0..d10f840 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -32,7 +32,7 @@ import { } from 'obsidian'; import UNITADE_PLUGIN from './main'; -import SETTING_LOCALE from './locales/settings.text'; +import LocalesModule from './locales/core'; export interface UNITADE_SETTINGS { markdown_overcharge: boolean, @@ -90,6 +90,7 @@ export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { plugin: UNITADE_PLUGIN; + locale: LocalesModule = new LocalesModule(); private _config: Setting | undefined; private _configMobile: Setting | undefined; @@ -119,8 +120,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { containerEl.createEl('h3', { text: 'UNITADE\'s settings:' }); new Setting(containerEl) - .setName(SETTING_LOCALE.getMdOv().name) - .setDesc(SETTING_LOCALE.getMdOv().desc) + .setName(this.locale.getLocaleItem('SETTINGS_MD_OVERRIDE')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_MD_OVERRIDE')[1]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.markdown_overcharge) @@ -137,8 +138,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); this._config = new Setting(containerEl) - .setName(SETTING_LOCALE.getCfgRt().name) - .setDesc(SETTING_LOCALE.getCfgRt().desc); + .setName(this.locale.getLocaleItem('SETTINGS_EXTENSIONS')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_EXTENSIONS')[1]!); let configInput = new TextAreaComponent(containerEl) .setPlaceholder('txt; conf; config; data; logs') @@ -176,8 +177,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { configInput.inputEl.style.minHeight = '36px'; this._configMobile = new Setting(containerEl) - .setName(SETTING_LOCALE.getCfgMb().name) - .setDesc(SETTING_LOCALE.getCfgMb().desc) + .setName(this.locale.getLocaleItem('SETTINGS_MOBILE_SPECIFIC')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_MOBILE_SPECIFIC')[1]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.mobile_settings.enable) @@ -242,8 +243,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { this.__uptMbConfig(mobileConfigInp, this.plugin.settings.mobile_settings.enable); new Setting(containerEl) - .setName(SETTING_LOCALE.getUlrd().name) - .setDesc(SETTING_LOCALE.getUlrd().desc) + .setName(this.locale.getLocaleItem('SETTINGS_HARD_DELETE')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_HARD_DELETE')[1]!) .addButton(button => { button .setButtonText('Hard-delete') @@ -260,8 +261,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); new Setting(containerEl) - .setName('Force-unload') - .setDesc('On click, causes imitation of disabling plugin, meaning, reloading registry of extensions in vault to default mode.') + .setName(this.locale.getLocaleItem('SETTINGS_FORCE_UNLOAD')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_FORCE_UNLOAD')[1]!) .addButton(button => { button .setButtonText('Force-unload') @@ -275,8 +276,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }) new Setting(containerEl) - .setName(SETTING_LOCALE.getHlrd().name) - .setDesc(SETTING_LOCALE.getHlrd().desc) + .setName(this.locale.getLocaleItem('SETTINGS_HARD_LOAD')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_HARD_LOAD')[1]!) .addButton(button => { button .setButtonText('Force-load') @@ -292,8 +293,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); new Setting(containerEl) - .setName('Reload registries') - .setDesc('Reloads views and registries extensions providing new settings and data to the app and keeping experience up-to-date with config.') + .setName(this.locale.getLocaleItem('SETTINGS_RELOAD_REGISTRIES')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_RELOAD_REGISTRIES')[1]!) .addButton(button => { button .setButtonText('Reload') @@ -318,14 +319,14 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { containerEl.createEl('h3', { text: 'Advanced block' }); let forcedMsg = new Setting(containerEl) - .setName(SETTING_LOCALE.getFrcInf().name) - .setDesc(SETTING_LOCALE.getFrcInf().desc) + .setName(this.locale.getLocaleItem('SETTINGS_FORCED_EXTENSIONS')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_FORCED_EXTENSIONS')[1]!) let forcedWarn = document.createElement('div'); forcedWarn.style.fontSize = '80%'; forcedWarn.style.margin = '10px'; forcedWarn.style.color = 'green'; - forcedWarn.innerHTML = SETTING_LOCALE.getFrcInf().msg; + forcedWarn.innerHTML = this.locale.getLocaleItem('SETTINGS_FORCED_EXTENSIONS')[2]! forcedMsg.nameEl.appendChild(forcedWarn); @@ -368,16 +369,16 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { onRfAttention.style.fontSize = '80%'; onRfAttention.style.margin = '10px'; onRfAttention.style.color = 'darkRed'; - onRfAttention.innerHTML = SETTING_LOCALE.getOnMsg().msg; + onRfAttention.innerHTML = this.locale.getLocaleItem('SETTINGS_WARNING_MSG')[0]!; let onRfInfo = document.createElement('div'); onRfInfo.style.fontWeight = 'bold'; onRfInfo.style.fontSize = '80%'; - onRfInfo.innerHTML = SETTING_LOCALE.getOnRf().info; + onRfInfo.innerHTML = this.locale.getLocaleItem('SETTINGS_ONLOAD_REGISTRY')[2]!; const onRfStg = new Setting(containerEl) - .setName(SETTING_LOCALE.getOnRf().name) - .setDesc(SETTING_LOCALE.getOnRf().desc) + .setName(this.locale.getLocaleItem('SETTINGS_ONLOAD_REGISTRY')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_ONLOAD_REGISTRY')[1]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.is_onload) @@ -401,16 +402,16 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { onRuAttention.style.fontSize = '80%'; onRuAttention.style.margin = '10px'; onRuAttention.style.color = 'darkRed'; - onRuAttention.innerHTML = SETTING_LOCALE.getOnMsg().msg; + onRuAttention.innerHTML = this.locale.getLocaleItem('SETTINGS_WARNING_MSG')[0]!; let onRuInfo = document.createElement('div'); onRuInfo.style.fontWeight = 'bold'; onRuInfo.style.fontSize = '80%'; - onRuInfo.innerHTML = SETTING_LOCALE.getOnRf().info; + onRuInfo.innerHTML = this.locale.getLocaleItem('SETTINGS_ONLOAD_UNSAFE')[2]! const onRuStg = new Setting(containerEl) - .setName(SETTING_LOCALE.getOnRu().name) - .setDesc(SETTING_LOCALE.getOnRu().desc) + .setName(this.locale.getLocaleItem('SETTINGS_ONLOAD_UNSAFE')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_ONLOAD_UNSAFE')[1]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.is_onload_unsafe) @@ -431,8 +432,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { onRuStg.nameEl.parentElement!.appendChild(onRuInfo); new Setting(containerEl) - .setName(SETTING_LOCALE.getDbSp().name) - .setDesc(SETTING_LOCALE.getDbSp().desc) + .setName(this.locale.getLocaleItem('SETTINGS_BAREFILES')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_BAREFILES')[1]!) .setTooltip('This settings registries empty extension, which could be done manually within extension settings block.') .addToggle(toggle => { toggle @@ -455,8 +456,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); this._configIgnore = new Setting(containerEl) - .setName(SETTING_LOCALE.getIgnInf().name) - .setDesc(SETTING_LOCALE.getIgnInf().desc) + .setName(this.locale.getLocaleItem('SETTINGS_IGNORE_MODE')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_IGNORE_MODE')[1]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.is_ignore) @@ -484,13 +485,13 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { ignoreWarn.style.fontSize = '80%'; ignoreWarn.style.margin = '10px'; ignoreWarn.style.color = 'yellow'; - ignoreWarn.innerHTML = SETTING_LOCALE.getIgnMsg().msg; + ignoreWarn.innerHTML = this.locale.getLocaleItem('SETTINGS_IGNORE_MSG')[0]!; this._configIgnore.nameEl.appendChild(ignoreWarn); let ignoreExtMsg = new Setting(containerEl) - .setName(SETTING_LOCALE.getIgnExt().name) - .setDesc(SETTING_LOCALE.getIgnExt().desc); + .setName(this.locale.getLocaleItem('SETTINGS_IGNORE_EXTENSIONS')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_IGNORE_EXTENSIONS')[1]!); let ignoreExtInp = new TextAreaComponent(containerEl) .setPlaceholder('txt; conf; config; data; logs') @@ -528,8 +529,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { ignoreExtInp.inputEl.style.minHeight = '36px'; let ignoreMskMsg = new Setting(containerEl) - .setName(SETTING_LOCALE.getIgnMsk().name) - .setDesc(SETTING_LOCALE.getIgnMsk().desc); + .setName(this.locale.getLocaleItem('SETTINGS_IGNORE_FILES')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_IGNORE_FILES')[1]!); let ignoreMskInp = new TextAreaComponent(containerEl) .setPlaceholder('\\.(txt|md)$; doc_[a-z]; file_\\d{3}; file1') @@ -573,8 +574,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { ); let groupMsg = new Setting(containerEl) - .setName(SETTING_LOCALE.getGrpInf().name) - .setDesc(SETTING_LOCALE.getGrpInf().desc) + .setName(this.locale.getLocaleItem('SETTINGS_GROUP_EXTENSIONS')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_GROUP_EXTENSIONS')[1]!) .setTooltip('For list of views view the docs of the plugin, more information on the wiki.') .addToggle(toggle => { toggle @@ -597,7 +598,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { groupedWarn.style.fontSize = '80%'; groupedWarn.style.margin = '10px'; groupedWarn.style.color = 'yellow'; - groupedWarn.innerHTML = SETTING_LOCALE.getGrpMsg().msg; + groupedWarn.innerHTML = this.locale.getLocaleItem('SETTINGS_GROUP_MSG')[0]!; groupMsg.nameEl.appendChild(groupedWarn); @@ -639,9 +640,9 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { containerEl.createEl('h3', { text: 'Additionals' }); new Setting(containerEl) - .setName('Debug mode:') - .setDesc('This mode starts output in application\'s console about actions you do.') - .setTooltip('Do not use this mode if you are not developer or familliar with console.') + .setName(this.locale.getLocaleItem('SETTINGS_DEBUG_MODE')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_DEBUG_MODE')[1]!) + .setTooltip(this.locale.getLocaleItem('SETTINGS_DEBUG_MODE')[2]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.debug_mode) @@ -660,8 +661,8 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); new Setting(containerEl) - .setName('Silence errors:') - .setDesc('This mode silences every error and disables notifications: could help in case of error spamming.') + .setName(this.locale.getLocaleItem('SETTINGS_SILENCE_ERRORS')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_SILENCE_ERRORS')[1]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.silence_errors) From 31ebca83a40c021a84646d066e0074badb39758a Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:56:14 +0300 Subject: [PATCH 09/63] build(licensing): update licensing information in every code --- source/locales/core.ts | 26 ++++++++++++++++++++++++++ source/locales/langs/ar.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/cz.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/da.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/de.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/en.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/es.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/fr.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/hi.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/id.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/it.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/ja.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/ko.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/nl.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/no.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/pl.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/pt-BR.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/pt.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/ro.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/ru.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/sq.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/tr.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/uk.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/zh-tw.ts | 30 ++++++++++++++++++++++++++++++ source/locales/langs/zh.ts | 30 ++++++++++++++++++++++++++++++ source/main.ts | 2 +- source/settings.ts | 2 +- 27 files changed, 748 insertions(+), 2 deletions(-) diff --git a/source/locales/core.ts b/source/locales/core.ts index 1506c77..f22b284 100644 --- a/source/locales/core.ts +++ b/source/locales/core.ts @@ -1,3 +1,29 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + import { LOCALES_AR } from "./langs/ar"; import { LOCALES_CZ } from "./langs/cz"; import { LOCALES_DA } from "./langs/da"; diff --git a/source/locales/langs/ar.ts b/source/locales/langs/ar.ts index a1d99e1..217f761 100644 --- a/source/locales/langs/ar.ts +++ b/source/locales/langs/ar.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `ar: "العربية (جزئي)"` + */ export const LOCALES_AR = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/cz.ts b/source/locales/langs/cz.ts index e604769..192f42b 100644 --- a/source/locales/langs/cz.ts +++ b/source/locales/langs/cz.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `cz: "čeština"` + */ export const LOCALES_CZ = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/da.ts b/source/locales/langs/da.ts index 89cf523..dc9e81b 100644 --- a/source/locales/langs/da.ts +++ b/source/locales/langs/da.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `da: "Dansk"` + */ export const LOCALES_DA = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/de.ts b/source/locales/langs/de.ts index 40ec9a6..ff2bed4 100644 --- a/source/locales/langs/de.ts +++ b/source/locales/langs/de.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `de: "Deutsch"` + */ export const LOCALES_DE = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index 550502e..0ff59e1 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `en: "English"` + */ export const LOCALES_EN = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/es.ts b/source/locales/langs/es.ts index b156c70..817aded 100644 --- a/source/locales/langs/es.ts +++ b/source/locales/langs/es.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `es: "Español"` + */ export const LOCALES_ES = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/fr.ts b/source/locales/langs/fr.ts index 8712035..3f85133 100644 --- a/source/locales/langs/fr.ts +++ b/source/locales/langs/fr.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `fr: "Français"` + */ export const LOCALES_FR = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/hi.ts b/source/locales/langs/hi.ts index acd67ed..fa7baf2 100644 --- a/source/locales/langs/hi.ts +++ b/source/locales/langs/hi.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `hi: "हिन्दी (आंशिक)"` + */ export const LOCALES_HI = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/id.ts b/source/locales/langs/id.ts index 5c94eaf..fdfce7d 100644 --- a/source/locales/langs/id.ts +++ b/source/locales/langs/id.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `id: "Bahasa Indonesia"` + */ export const LOCALES_ID = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/it.ts b/source/locales/langs/it.ts index f845ef4..7a0847a 100644 --- a/source/locales/langs/it.ts +++ b/source/locales/langs/it.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `it: "Italiano"` + */ export const LOCALES_IT = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/ja.ts b/source/locales/langs/ja.ts index 9a9a6e1..a178229 100644 --- a/source/locales/langs/ja.ts +++ b/source/locales/langs/ja.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `ja: "日本語"` + */ export const LOCALES_JA = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/ko.ts b/source/locales/langs/ko.ts index 2a0a868..3b4a498 100644 --- a/source/locales/langs/ko.ts +++ b/source/locales/langs/ko.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `ko: "한국어"` + */ export const LOCALES_KO = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/nl.ts b/source/locales/langs/nl.ts index c789f29..c808688 100644 --- a/source/locales/langs/nl.ts +++ b/source/locales/langs/nl.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `nl: "Nederlands (gedeeltelijk)"` + */ export const LOCALES_NL = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/no.ts b/source/locales/langs/no.ts index 9ff986a..9f7bf68 100644 --- a/source/locales/langs/no.ts +++ b/source/locales/langs/no.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `no: "Norsk"` + */ export const LOCALES_NO = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/pl.ts b/source/locales/langs/pl.ts index 7d103d2..0ab7187 100644 --- a/source/locales/langs/pl.ts +++ b/source/locales/langs/pl.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `pl: "język polski"` + */ export const LOCALES_PL = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/pt-BR.ts b/source/locales/langs/pt-BR.ts index e7fe2bf..b0cd37c 100644 --- a/source/locales/langs/pt-BR.ts +++ b/source/locales/langs/pt-BR.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `"pt-BR": "Portugues do Brasil"` + */ export const LOCALES_PT_BR = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/pt.ts b/source/locales/langs/pt.ts index 897d2e0..807de0d 100644 --- a/source/locales/langs/pt.ts +++ b/source/locales/langs/pt.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `pt: "Português"` + */ export const LOCALES_PT = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/ro.ts b/source/locales/langs/ro.ts index 3280d99..bd81207 100644 --- a/source/locales/langs/ro.ts +++ b/source/locales/langs/ro.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `ro: "Română"` + */ export const LOCALES_RO = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/ru.ts b/source/locales/langs/ru.ts index c0b867f..363389b 100644 --- a/source/locales/langs/ru.ts +++ b/source/locales/langs/ru.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `ru: "Pусский"` + */ export const LOCALES_RU = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/sq.ts b/source/locales/langs/sq.ts index 49f55ec..7433bc5 100644 --- a/source/locales/langs/sq.ts +++ b/source/locales/langs/sq.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `sq: "Shqip"` + */ export const LOCALES_SQ = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/tr.ts b/source/locales/langs/tr.ts index 30e0d04..0ce6e74 100644 --- a/source/locales/langs/tr.ts +++ b/source/locales/langs/tr.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `tr: "Türkçe (kısmi)"` + */ export const LOCALES_TR = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/uk.ts b/source/locales/langs/uk.ts index 883ebaa..944e5b6 100644 --- a/source/locales/langs/uk.ts +++ b/source/locales/langs/uk.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `uk: "Український"` + */ export const LOCALES_UK = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/zh-tw.ts b/source/locales/langs/zh-tw.ts index bb7d113..156f88e 100644 --- a/source/locales/langs/zh-tw.ts +++ b/source/locales/langs/zh-tw.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `"zh-TW": "繁體中文"` + */ export const LOCALES_ZH_TW = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/locales/langs/zh.ts b/source/locales/langs/zh.ts index a08d513..df7afeb 100644 --- a/source/locales/langs/zh.ts +++ b/source/locales/langs/zh.ts @@ -1,3 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 Falcion + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +/** + * JSON for translation of + * `zh: "简体中文"` + */ export const LOCALES_ZH = { "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/main.ts b/source/main.ts index f612dc6..fb24ec4 100644 --- a/source/main.ts +++ b/source/main.ts @@ -1,7 +1,7 @@ /* * MIT License * - * Copyright (c) 2023-2024 + * Copyright (c) 2023-2024 Falcion * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/source/settings.ts b/source/settings.ts index d10f840..3b5057f 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -1,7 +1,7 @@ /* * MIT License * - * Copyright (c) 2023-2024 + * Copyright (c) 2023-2024 Falcion * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal From 99fc3f9035be8e4369fca7fffa6a6ebadd76521e Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:59:38 +0300 Subject: [PATCH 10/63] feat!(grouped-extensions): now grouped extensions split by '>', now support files with commas and empty strings --- source/utils/functions.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/utils/functions.ts b/source/utils/functions.ts index c993e78..ab30dae 100644 --- a/source/utils/functions.ts +++ b/source/utils/functions.ts @@ -49,10 +49,10 @@ export function parsegroup(input: string): { [key: string]: string[] } { const settings_parsed = input.split(';'); for (const setting of settings_parsed) { - const [key, values] = setting.trim().split(':'); + const [key, values] = setting.trim().split(':').map(x => x.trimStart()); if (values !== undefined) { - const arr_values = values.split(',').map(value => value.trim()); + const arr_values = values.split('>'); settings[key.trim()] = arr_values; } else { From eb1786e4f65979d0ec754f7aa1b915b0742c542b Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:35:42 +0300 Subject: [PATCH 11/63] feat!(compatibility): add new compatibility module with older versions, feature fix of #63 Now plugin supports and will support (at future moment older versions) older versions and try to convert/adapt them in new format/config and saving old data. May be unstable, but allows user to easy update plugin without headaches. --- source/addons/compatibility.ts | 64 ++++++++++++++++++++++++++++++++++ source/locales/langs/en.ts | 11 ++++++ source/settings.ts | 58 +++++++++++++++++++++++++++--- 3 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 source/addons/compatibility.ts diff --git a/source/addons/compatibility.ts b/source/addons/compatibility.ts new file mode 100644 index 0000000..7bb3fc3 --- /dev/null +++ b/source/addons/compatibility.ts @@ -0,0 +1,64 @@ +import { App, PluginManifest } from "obsidian"; +import UNITADE_PLUGIN from "source/main"; +import { DEFAULT_SETTINGS } from "source/settings"; + +export default class CompatibilityModule { + private _app: App; + private _plugin: UNITADE_PLUGIN; + current_manifest: PluginManifest; + + constructor(app: App, plugin: UNITADE_PLUGIN) { + this._app = app; + this._plugin = plugin; + /**@ts-expect-error */ + this.current_manifest = this._app.plugins.manifests['unitade']; + } + + async start(): Promise { + const data = await this._plugin.loadData(); + const version = this.getVersion(data); + + if (version === this._plugin.settings.manifest_version) return; + + await this.convert(data, version); + } + + private getVersion(data: any): string { + if (data['version'] !== undefined) return `${data['version']}`; + if (data['barefiling'] !== undefined) return '2.4'; + if (data['debug_mode'] !== undefined) return '2.1'; + if (data['grouped_extensions'] !== undefined) return '2.0'; + return '1.*'; + } + + private async convert(data: any, version: string): Promise { + const settingsMap: { [key: string]: any } = { + '1.*': { + extensions: data['extensions'].replace(',', ';'), + forced_extensions: data['force_extensions'].replace(',', ';'), + is_onload: Boolean(data['is_dynamic_on']), + }, + '2.0': { + extensions: data['extensions'].replace(',', ';'), + grouped_extensions: data['grouped_extensions'].replace(',', '>'), + }, + '2.1': { + grouped_extensions: data['grouped_extensions'].replace(',', '>'), + }, + '2.4': { + grouped_extensions: data['grouped_extensions'].replace(',', '>'), + }, + }; + + const next = { + ...DEFAULT_SETTINGS, + ...this._plugin.settings, + ...settingsMap[version], + manifest_version: this.current_manifest.version, + }; + + await this._plugin.uptSettings(next); + + return true; + } +} diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index 0ff59e1..b0b0eed 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -123,5 +123,16 @@ export const LOCALES_EN = { "MODAL_EDIT_MULTIPLE": { 0: "Edit multiple extensions", 1: "Rename multiple files" + }, + "SETTINGS_COMPATIBILITY": { + 0: "Compatibility module:", + 1: "If turned on, plugin on it's start would try to parse configs of it's past versions to new config with old data: may be unstable, turned off by default." + }, + "SETTINGS_COMPATIBILITY_BUTTON": { + 0: "Make config compatible", + 1: "Upon click, plugin would try to make config compatible with it's new functionality and config iteration." + }, + "BUTTON_WIKI": { + 0: "Upon click, redirects to the GitHub's wiki page of project which contains documentation about entire plugin." } }; diff --git a/source/settings.ts b/source/settings.ts index 3b5057f..06ae7e8 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -33,6 +33,7 @@ import { import UNITADE_PLUGIN from './main'; import LocalesModule from './locales/core'; +import CompatibilityModule from './addons/compatibility'; export interface UNITADE_SETTINGS { markdown_overcharge: boolean, @@ -59,6 +60,8 @@ export interface UNITADE_SETTINGS { debug_mode: boolean, silence_errors: boolean, + manifest_version: string, + compatibility_module: boolean } export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { @@ -85,7 +88,9 @@ export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { errors: {}, debug_mode: false, - silence_errors: false + silence_errors: false, + manifest_version: '', + compatibility_module: false, } export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { @@ -108,6 +113,10 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { super(app, plugin); this.plugin = plugin; + + if (this.plugin.settings.compatibility_module) { + new CompatibilityModule(app, plugin).start(); + } } display(): void { @@ -272,7 +281,9 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { console.info(`[${event.timeStamp}]: Caused unloading function!`); this.plugin.unapply(); - }) + }); + + return button; }) new Setting(containerEl) @@ -307,8 +318,10 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { this.plugin.apply(); this.plugin.applyDefaults(); - }) - }) + }); + + return button; + }); containerEl.createEl('h2', { text: 'Errors' }); this._errors = containerEl.createEl('p', { text: 'None' }); @@ -679,6 +692,43 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return toggle; }); + + new Setting(containerEl) + .setName(this.locale.getLocaleItem('SETTINGS_COMPATIBILITY')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_COMPATIBILITY')[1]!) + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.compatibility_module) + .onChange(async (value) => { + let next = { + ...this.plugin.settings, + compatibility_module: value, + }; + + await this.plugin.uptSettings(next); + + this.__updateErrors(); + }); + + return toggle; + }); + + new Setting(containerEl) + .setName(this.locale.getLocaleItem('SETTINGS_COMPATIBILITY_BUTTON')[0]!) + .setDesc(this.locale.getLocaleItem('SETTINGS_COMPATIBILITY_BUTTON')[1]!) + .addButton(button => { + button + .setButtonText('Start') + .setIcon('arrow-up-down') + .onClick(async (event) => { + if (this.plugin.settings.debug_mode) + console.info(`[${event.timeStamp}]: STARTED COMPATIBILITY PROCESS.`); + + await new CompatibilityModule(this.app, this.plugin).start(); + }); + + return button; + }); } private __uptMbConfig(mbConfigInput: TextAreaComponent, mbConfigEnabled: boolean): void { From 99635a6971d871cb44bf2d148b0b507c9e5f7b68 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:45:51 +0300 Subject: [PATCH 12/63] feat!(wiki-button): add reference for wiki in plugin settings --- source/locales/langs/en.ts | 5 ++++- source/settings.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index b0b0eed..546ed12 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -133,6 +133,9 @@ export const LOCALES_EN = { 1: "Upon click, plugin would try to make config compatible with it's new functionality and config iteration." }, "BUTTON_WIKI": { - 0: "Upon click, redirects to the GitHub's wiki page of project which contains documentation about entire plugin." + 0: "Open plugin's wiki", + 1: "Upon click, redirects to the GitHub's wiki page of project which contains documentation about entire plugin.", + 2: "This would redirect you in external link. Internet access required.", + 3: "Open wiki" } }; diff --git a/source/settings.ts b/source/settings.ts index 06ae7e8..47cb1c8 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -729,6 +729,20 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return button; }); + + new Setting(containerEl) + .setName(this.locale.getLocaleItem('BUTTON_WIKI')[0]!) + .setDesc(this.locale.getLocaleItem('BUTTON_WIKI')[1]!) + .addButton(button => { + button + .setButtonText(this.locale.getLocaleItem('BUTTON_WIKI')[3]!) + .setTooltip(this.locale.getLocaleItem('BUTTON_WIKI')[2]!) + .onClick(async (event) => { + window.open('https://github.com/Falcion/UNITADE.md/wiki'); + }); + + return button; + }) } private __uptMbConfig(mbConfigInput: TextAreaComponent, mbConfigEnabled: boolean): void { From 2a96a386cde0db8199e6065f01297163b310b11f Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:50:12 +0300 Subject: [PATCH 13/63] feat(modals-locale): now modals are also localized --- source/components/file-create.ts | 5 ++--- source/components/file-edit.ts | 5 ++--- source/components/files-edit.ts | 5 ++--- source/components/files-rename.ts | 1 - source/locales/langs/en.ts | 4 ++++ 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/source/components/file-create.ts b/source/components/file-create.ts index b9f7a9b..b4bd5c5 100644 --- a/source/components/file-create.ts +++ b/source/components/file-create.ts @@ -33,7 +33,6 @@ import { } from "obsidian"; import UNITADE_PLUGIN from "./../main"; -import MODALES_LOCALE from "./../locales/modals.text"; export class TFileCreate extends Modal { private _filepath: string; @@ -113,8 +112,8 @@ export class TFileCreate extends Modal { .onClick(() => (this.__submit())); new Setting(contentEl) - .setName(MODALES_LOCALE.gtToggle1().name) - .setDesc(MODALES_LOCALE.gtToggle1().desc) + .setName(this.plugin.locale.getLocaleItem('MODAL_INCLUDE_IN_REGISTRY')[0]!) + .setDesc(this.plugin.locale.getLocaleItem('MODAL_INCLUDE_IN_REGISTRY')[1]!) .addToggle(toggle => { toggle .setValue(this._integration) diff --git a/source/components/file-edit.ts b/source/components/file-edit.ts index d44c7f8..345e8cd 100644 --- a/source/components/file-edit.ts +++ b/source/components/file-edit.ts @@ -33,7 +33,6 @@ import { } from "obsidian"; import UNITADE_PLUGIN from "./../main"; -import MODALES_LOCALE from "./../locales/modals.text"; export class TFileEdit extends Modal { private _filepath: string; @@ -120,8 +119,8 @@ export class TFileEdit extends Modal { .onClick(() => (this.__submit())); new Setting(contentEl) - .setName(MODALES_LOCALE.gtToggle1().name) - .setDesc(MODALES_LOCALE.gtToggle1().desc) + .setName(this.plugin.locale.getLocaleItem('MODAL_INCLUDE_IN_REGISTRY')[0]!) + .setDesc(this.plugin.locale.getLocaleItem('MODAL_INCLUDE_IN_REGISTRY')[1]!) .addToggle(toggle => { toggle .setValue(this._integration) diff --git a/source/components/files-edit.ts b/source/components/files-edit.ts index cec3dae..58b9409 100644 --- a/source/components/files-edit.ts +++ b/source/components/files-edit.ts @@ -33,7 +33,6 @@ import { } from "obsidian"; import UNITADE_PLUGIN from "./../main"; -import MODALES_LOCALE from "./../locales/modals.text"; export class TFilesEdit extends Modal { private _new_extension: string = 'md'; @@ -109,8 +108,8 @@ export class TFilesEdit extends Modal { .onClick(() => (this.__submit())); new Setting(contentEl) - .setName(MODALES_LOCALE.gtToggle1().name) - .setDesc(MODALES_LOCALE.gtToggle1().desc) + .setName(this.plugin.locale.getLocaleItem('MODAL_INCLUDE_IN_REGISTRY')[0]!) + .setDesc(this.plugin.locale.getLocaleItem('MODAL_INCLUDE_IN_REGISTRY')[1]!) .addToggle(toggle => { toggle .setValue(this._integration) diff --git a/source/components/files-rename.ts b/source/components/files-rename.ts index 4755dd9..6a522e3 100644 --- a/source/components/files-rename.ts +++ b/source/components/files-rename.ts @@ -33,7 +33,6 @@ import { } from "obsidian"; import UNITADE_PLUGIN from "./../main"; -import MODALES_LOCALE from "./../locales/modals.text"; export class TFilesRename extends Modal { private _new_name: string = ''; diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index 546ed12..91cbd6f 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -137,5 +137,9 @@ export const LOCALES_EN = { 1: "Upon click, redirects to the GitHub's wiki page of project which contains documentation about entire plugin.", 2: "This would redirect you in external link. Internet access required.", 3: "Open wiki" + }, + "MODAL_INCLUDE_IN_REGISTRY": { + 0: "Include in extensions registry:", + 1: "If enabled, generated file's extension would be inserted in extensions array." } }; From 30aa28328f1f1e5b39bb72e45dff2033d8a0a20d Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:01:08 +0300 Subject: [PATCH 14/63] fix(common): fix some localizations errors and common TS errors --- source/addons/compatibility.ts | 4 ++-- source/locales/core.ts | 8 ++++---- source/locales/langs/{pt-BR.ts => pt_br.ts} | 0 source/locales/langs/{zh-tw.ts => zh_tw.ts} | 0 4 files changed, 6 insertions(+), 6 deletions(-) rename source/locales/langs/{pt-BR.ts => pt_br.ts} (100%) rename source/locales/langs/{zh-tw.ts => zh_tw.ts} (100%) diff --git a/source/addons/compatibility.ts b/source/addons/compatibility.ts index 7bb3fc3..0361ce8 100644 --- a/source/addons/compatibility.ts +++ b/source/addons/compatibility.ts @@ -1,6 +1,6 @@ import { App, PluginManifest } from "obsidian"; -import UNITADE_PLUGIN from "source/main"; -import { DEFAULT_SETTINGS } from "source/settings"; +import UNITADE_PLUGIN from "../main"; +import { DEFAULT_SETTINGS } from "../settings"; export default class CompatibilityModule { private _app: App; diff --git a/source/locales/core.ts b/source/locales/core.ts index f22b284..2bf3520 100644 --- a/source/locales/core.ts +++ b/source/locales/core.ts @@ -40,14 +40,14 @@ import { LOCALES_NL } from "./langs/nl"; import { LOCALES_NO } from "./langs/no"; import { LOCALES_PL } from "./langs/pl"; import { LOCALES_PT } from "./langs/pt"; -import { LOCALES_PT_BR } from "./langs/pt-BR"; +import { LOCALES_PT_BR } from "./langs/pt_br"; import { LOCALES_RO } from "./langs/ro"; import { LOCALES_RU } from "./langs/ru"; import { LOCALES_SQ } from "./langs/sq"; import { LOCALES_TR } from "./langs/tr"; import { LOCALES_UK } from "./langs/uk"; import { LOCALES_ZH } from "./langs/zh"; -import { LOCALES_ZH_TW } from "./langs/zh-tw"; +import { LOCALES_ZH_TW } from "./langs/zh_tw"; interface LocaleTranslation { 0?: string; @@ -109,14 +109,14 @@ export default class LocalesModule { } getLocaleItem(locale_item: string): LocaleTranslation { - if (locale_item === undefined || typeof locale_item !== 'number') { + if (locale_item === undefined) { throw new Error('Locale key is undefined or invalid: access denied.'); } const translation = this.getTranslation(); if (locale_item in translation) { - return translation[locale_item] || ''; + return translation[locale_item]; } else { throw new Error(`Locale key ${locale_item} is out of bounds.`); } diff --git a/source/locales/langs/pt-BR.ts b/source/locales/langs/pt_br.ts similarity index 100% rename from source/locales/langs/pt-BR.ts rename to source/locales/langs/pt_br.ts diff --git a/source/locales/langs/zh-tw.ts b/source/locales/langs/zh_tw.ts similarity index 100% rename from source/locales/langs/zh-tw.ts rename to source/locales/langs/zh_tw.ts From 7d4557f01ca3377519de6525a3ba9d7728aa284a Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:56:28 +0300 Subject: [PATCH 15/63] feat!(localization): now almost every UI element of plugin is localized (except console) --- source/locales/langs/en.ts | 21 ++++++++++++++++++-- source/main.ts | 39 +++++++++++++++++++------------------- source/settings.ts | 23 ++++++++++++---------- source/utils/functions.ts | 6 ++++++ 4 files changed, 58 insertions(+), 31 deletions(-) diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index 91cbd6f..89e29a6 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -29,6 +29,12 @@ * `en: "English"` */ export const LOCALES_EN = { + "UNITADE_SETTINGS_COMMON": { + 0: "UNITADE's settings:", + 1: "Errors:", + 2: "Advanced block", + 3: "Additionals" + }, "SETTINGS_EXTENSIONS": { 0: "Extensions:", 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." @@ -84,14 +90,16 @@ export const LOCALES_EN = { }, "SETTINGS_GROUP_EXTENSIONS": { 0: "Grouped extensions:", - 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by (',') commas)." + 1: "Enter by specified syntax extensions which you want to treat as other custom extensions (groups are separated by (';') semicolons while values are separated by ('>') symbols).", + 2: "For list of views view the docs of the plugin, more information on the wiki." }, "SETTINGS_GROUP_MSG": { 0: "Keep in mind, this setting is unstable due entire infrastructure of plugin and OBSIDIAN's API, it is recommended to turn off every other setting and clear them if possible before using this module: you can setup every other module just in this block." }, "SETTINGS_BAREFILES": { 0: "Barefiles on-load registry:", - 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry." + 1: "If enabled, plugin will try to register files without extensions (so-called bare files): for files with only extension (so-called dot files) use on-load extension registry.", + 2: "This settings registries empty extension, which could be done manually within extension settings block." }, "MODALS_INCLUDE_REGISTRY": { 0: "Include in extensions registry:", @@ -141,5 +149,14 @@ export const LOCALES_EN = { "MODAL_INCLUDE_IN_REGISTRY": { 0: "Include in extensions registry:", 1: "If enabled, generated file's extension would be inserted in extensions array." + }, + "ERROR_REGISTRY_EXTENSION": { + 0: "Could not register extension: {0} to view as {1}.\nIt's already registered.", + 1: "Could not register extension: {0} to view as {1}.\n{2}", + 2: "Couldn't unregistry extension: {0}.", + 3: "Error with registering extensions:" + }, + "ERROR_COMMON_MESSAGE": { + 0: "Error from UNITADE plugin:" } }; diff --git a/source/main.ts b/source/main.ts index fb24ec4..8ccbcf0 100644 --- a/source/main.ts +++ b/source/main.ts @@ -59,6 +59,7 @@ import { isTFolder } from './utils/utils'; import { + formatString, gencase, parsegroup } from './utils/functions'; @@ -105,7 +106,7 @@ export default class UNITADE_PLUGIN extends Plugin { if (!this.settings.silence_errors) { console.error(error); } else { - console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${error}`); + console.debug(`[UNITADE-ERROR]: ERROR IS SILENCED, ERROR: ${error}`); } } } @@ -139,11 +140,11 @@ export default class UNITADE_PLUGIN extends Plugin { } } catch (err: any) { if (!this.settings.silence_errors) { - new Notification('Error from UNITADE plugin:', { body: `Error with on-load registry of: ${err}` }); + new Notification(this.locale.getLocaleItem('ERROR_COMMON_MESSAGE')[0]!, { body: `${err}` }); console.error(err); } else { - console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${err}`); + console.debug(`[UNITADE-ERROR]: ERROR IS SILENCED, ERROR: ${err}`); } } } @@ -178,11 +179,11 @@ export default class UNITADE_PLUGIN extends Plugin { } } catch (err: any) { if (!this.settings.silence_errors) { - new Notification('Error from UNITADE plugin:', { body: `Error with on-load registry of: ${extensions}` }); + new Notification(this.locale.getLocaleItem('ERROR_COMMON_MESSAGE')[0]!, { body: `${extensions}` }); console.error(err); } else { - console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${err}`); + console.debug(`[UNITADE-ERROR]: ERROR IS SILENCED, ERROR: ${err}`); } } } @@ -267,7 +268,7 @@ export default class UNITADE_PLUGIN extends Plugin { this.leafRef(_app); } catch (error) { - console.warn('Caught an error via LAYOUT-READY event.'); + console.warn('CAUGHT AN ERROR VIA LAYOUT-READY EVENT.'); } } @@ -276,7 +277,7 @@ export default class UNITADE_PLUGIN extends Plugin { /**@ts-expect-error */ _app.workspace.iterateCodeMirrors(cm => cm.setOption("mode", cm.getOption("mode"))); } catch (error) { - console.warn('Caught an error via LEAF-ITERATE event.'); + console.warn('CAUGHT AN ERROR VIA LEAF-ITERATE EVENT.'); } } @@ -289,14 +290,14 @@ export default class UNITADE_PLUGIN extends Plugin { this.registerExtensions(['.md'], 'markdown'); } catch (err: any) { if (!this.settings.silence_errors) { - new Notification('Error from UNITADE plugin:', { body: err }); + new Notification(this.locale.getLocaleItem('ERROR_COMMON_MESSAGE')[0]!, { body: err }); console.error(err); } else { - console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${err}`); + console.debug(`[UNITADE-ERROR]: ERROR IS SILENCED, ERROR: ${err}`); } - this.settings.errors['markdown_override'] = `Error with reregistering extensions: ${err}`; + this.settings.errors['markdown_override'] = formatString(this.locale.getLocaleItem('ERROR_REGISTRY_EXTENSION')[3]!, err); } for (const key in CodeMirror.modes) { @@ -347,11 +348,11 @@ export default class UNITADE_PLUGIN extends Plugin { this.settings.errors[extension] = `Error from UNITADE plugin: ${err}`; if (!this.settings.silence_errors) { - new Notification('Error from UNITADE plugin:', { body: `${err}` }); + new Notification(this.locale.getLocaleItem('ERROR_COMMON_MESSAGE')[0]!, { body: `${err}` }); console.error(err); } else { - console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${err}`); + console.debug(`[UNITADE-ERROR]: ERROR IS SILENCED, ERROR: ${err}`); } } } @@ -388,17 +389,17 @@ export default class UNITADE_PLUGIN extends Plugin { let _msg: string; if (curr) { - _msg = `Could not register extension: ${filetype} to view as ${view}.\nIt's already registered.`; + _msg = formatString(this.locale.getLocaleItem('ERROR_REGISTRY_EXTENSION')[0]!, filetype, view); } else { - _msg = `Could not register extension: ${filetype} to view as ${view}.\n${err}`; + _msg = formatString(this.locale.getLocaleItem('ERROR_REGISTRY_EXTENSION')[1]!, filetype, view, err); } if (!this.settings.silence_errors) { - new Notification('Error from UNITADE plugin:', { body: _msg }); + new Notification(this.locale.getLocaleItem('ERROR_COMMON_MESSAGE')[0]!, { body: _msg }); console.error(_msg); } else { - console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${_msg}`); + console.debug(`[UNITADE-ERROR]: ERROR IS SILENCED, ERROR: ${_msg}`); } this._settings.errors[filetype] = _msg; @@ -455,16 +456,16 @@ export default class UNITADE_PLUGIN extends Plugin { /**@ts-expect-error */ this.app.viewRegistry.unregisterExtensions([extension]); } catch (err: any) { - const _msg = `Couldn't unregistry extension: ${extension};` + const _msg = formatString(this.locale.getLocaleItem('ERROR_REGISTRY_EXTENSION')[2]!, extension); this.settings.errors[extension] = _msg; if (!this.settings.silence_errors) { - new Notification('Error from UNITADE plugin:', { body: _msg }); + new Notification(this.locale.getLocaleItem('ERROR_COMMON_MESSAGE')[0]!, { body: _msg }); console.error(_msg); } else { - console.debug(`[UNITADE-ERROR]: Error is silenced, error: ${_msg}`); + console.debug(`[UNITADE-ERROR]: ERROR IS SILENCED, ERROR: ${_msg}`); } } } diff --git a/source/settings.ts b/source/settings.ts index 47cb1c8..cab8847 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -126,7 +126,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { containerEl.empty(); - containerEl.createEl('h3', { text: 'UNITADE\'s settings:' }); + containerEl.createEl('h3', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[0]! }); new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_MD_OVERRIDE')[0]!) @@ -261,7 +261,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setWarning() .onClick(async (event) => { if (this.plugin.settings.debug_mode) - console.info(`[${event.timeStamp}]: Caused force-deleting function!`); + console.info(`[${event.timeStamp}]: CAUSED FORCE-DELETING FUNCTION!`); this.plugin.unapplyRegistry(); }); @@ -278,7 +278,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setIcon('upload') .onClick(async (event) => { if (this.plugin.settings.debug_mode) - console.info(`[${event.timeStamp}]: Caused unloading function!`); + console.info(`[${event.timeStamp}]: CAUSED UNLOADING FUNCTION!`); this.plugin.unapply(); }); @@ -295,7 +295,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setIcon('download') .onClick(async (event) => { if (this.plugin.settings.debug_mode) - console.info(`[${event.timeStamp}]: Caused loading function!`); + console.info(`[${event.timeStamp}]: CAUSED LOADING FUNCTION!`); this.plugin.apply(); }); @@ -312,7 +312,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setIcon('reload') .onClick(async (event) => { if (this.plugin.settings.debug_mode) - console.info(`[${event.timeStamp}]: Caused reloading function!`); + console.info(`[${event.timeStamp}]: CAUSED RELOADING FUNCTION!`); this.plugin.unapply(); this.plugin.apply(); @@ -323,13 +323,13 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return button; }); - containerEl.createEl('h2', { text: 'Errors' }); + containerEl.createEl('h2', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[1]! }); this._errors = containerEl.createEl('p', { text: 'None' }); this._errors.style.whiteSpace = 'pre-line'; this.__updateErrors(); - containerEl.createEl('h3', { text: 'Advanced block' }); + containerEl.createEl('h3', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[2]! }); let forcedMsg = new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_FORCED_EXTENSIONS')[0]!) @@ -447,7 +447,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_BAREFILES')[0]!) .setDesc(this.locale.getLocaleItem('SETTINGS_BAREFILES')[1]!) - .setTooltip('This settings registries empty extension, which could be done manually within extension settings block.') + .setTooltip(this.locale.getLocaleItem('SETTINGS_BAREFILES')[2]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.barefiling) @@ -589,7 +589,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { let groupMsg = new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_GROUP_EXTENSIONS')[0]!) .setDesc(this.locale.getLocaleItem('SETTINGS_GROUP_EXTENSIONS')[1]!) - .setTooltip('For list of views view the docs of the plugin, more information on the wiki.') + .setTooltip(this.locale.getLocaleItem('SETTINGS_GROUP_EXTENSIONS')[2]!) .addToggle(toggle => { toggle .setValue(this.plugin.settings.is_grouped) @@ -650,7 +650,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { groupExtInp.inputEl.style.height = '48px'; groupExtInp.inputEl.style.minHeight = '36px'; - containerEl.createEl('h3', { text: 'Additionals' }); + containerEl.createEl('h3', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[3]! }); new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_DEBUG_MODE')[0]!) @@ -738,6 +738,9 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setButtonText(this.locale.getLocaleItem('BUTTON_WIKI')[3]!) .setTooltip(this.locale.getLocaleItem('BUTTON_WIKI')[2]!) .onClick(async (event) => { + if (this.plugin.settings.debug_mode) + console.info(`[${event.timeStamp}]: REFER EXTERNAL LINK.`); + window.open('https://github.com/Falcion/UNITADE.md/wiki'); }); diff --git a/source/utils/functions.ts b/source/utils/functions.ts index ab30dae..f31e2cd 100644 --- a/source/utils/functions.ts +++ b/source/utils/functions.ts @@ -62,3 +62,9 @@ export function parsegroup(input: string): { [key: string]: string[] } { return settings; } + +export function formatString(template: string, ...args: string[]): string { + return template.replace(/{(\d+)}/g, (match, index) => { + return typeof args[index] !== 'undefined' ? args[index] : match; + }); +} From ea842ca1372b2c18d583fa1638713f5b64bd4982 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:50:42 +0300 Subject: [PATCH 16/63] build(build-env): add cloning script for debug in .SH variation --- clone.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 clone.sh diff --git a/clone.sh b/clone.sh new file mode 100644 index 0000000..ca41aed --- /dev/null +++ b/clone.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +source_file="" +target_file="" + +cp "$source_file" "$target_file" + +if [ $? -eq 0 ]; then + echo "File copied successfully." +else + echo "Error: File copy failed." + exit 1 +fi From ad01a35e84f71f0870135592f73b24d362937844 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 4 Oct 2024 13:54:13 +0300 Subject: [PATCH 17/63] build!(build-ci): add CI build script for checking instance and state of plugin --- .github/workflows/build_check.yml | 49 +++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/build_check.yml diff --git a/.github/workflows/build_check.yml b/.github/workflows/build_check.yml new file mode 100644 index 0000000..4967864 --- /dev/null +++ b/.github/workflows/build_check.yml @@ -0,0 +1,49 @@ +name: Node.js CI + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + install: + name: Install Dependencies + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "21.1.0" + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + + - name: Install dependencies + run: npm install + + build: + name: Build Project + runs-on: ubuntu-latest + needs: install + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "latest" + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + + - name: Install dependencies + run: npm install + - name: Build project + run: npm run build From 2d243da5892851c0da54d5d80eac6b2824519121 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 4 Oct 2024 14:04:28 +0300 Subject: [PATCH 18/63] build(build-deps): remove PY command from environment of plugin --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 02d1b51..4d8e5c3 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "preinstall": "node -e 'process.exit(0)'", "pretest": "npm run ct-typescript-definitions", "prepack": "check-for-leaks", - "prepare": "husky .husky/ && cd scripts/python && py -m venv venv", + "prepare": "husky .husky/ && cd scripts/python && python3 -m venv venv", "update-analytics": "ts-node scripts/js/analytics-workflow.ts", "test": "node ./script/spec-runner.js", "start": "tsc && node out/environment.js", From 8fba404d1c52d88211e57f74f67b7311e931fd60 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 4 Oct 2024 14:19:21 +0300 Subject: [PATCH 19/63] feat!(optimization): optimization of main module of plugin, reduce RAM usage --- source/utils/functions.ts | 58 ++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/source/utils/functions.ts b/source/utils/functions.ts index f31e2cd..f9e5406 100644 --- a/source/utils/functions.ts +++ b/source/utils/functions.ts @@ -24,25 +24,51 @@ * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. */ -export function gencase(input: string): string[] { - const variations: string[] = []; - - function gen(current: string, index: number) { +/** + * A generator function that returns all possible combinations of lower and upper case letters + * for a given input string. + * + * @generator + * @param {string} input - The input string for which to generate case combinations. + * @yields {string} - The next case combination of the input string. + * + * @example + * const generator = gencase("ab"); + * console.log(generator.next().value); // "ab" + * console.log(generator.next().value); // "aB" + * console.log(generator.next().value); // "Ab" + * console.log(generator.next().value); // "AB" + */ +export function* gencase(input: string): Generator { + function* gen(current: string, index: number): Generator { if (index === input.length) { - variations.push(current); + yield current; return; } const char = input[index]; - gen(current + char.toLowerCase(), index + 1); - gen(current + char.toUpperCase(), index + 1); + yield* gen(current + char.toLowerCase(), index + 1); + yield* gen(current + char.toUpperCase(), index + 1); } - gen('', 0); - - return variations; + yield* gen('', 0); } +/** + * Parses an input string into a key-value group structure, where each group is separated by a semicolon (`;`) + * and keys are separated from values by a colon (`:`). Values can be further split by the `>` character. + * + * @param {string} input - The input string to parse into key-value groups. + * @returns {{ [key: string]: string[] }} - An object where each key has an array of values. + * + * @example + * const result = parsegroup("group1:val1>val2;group2:val3"); + * console.log(result); + * // { + * // group1: ['val1', 'val2'], + * // group2: ['val3'] + * // } + */ export function parsegroup(input: string): { [key: string]: string[] } { const settings: { [key: string]: string[] } = {}; @@ -63,6 +89,18 @@ export function parsegroup(input: string): { [key: string]: string[] } { return settings; } +/** + * Formats a string by replacing placeholders in the form `{index}` with corresponding values + * from the `args` array. + * + * @param {string} template - The string template containing placeholders (e.g., `{0}`, `{1}`). + * @param {...string} args - The values to replace the placeholders in the template. + * @returns {string} - The formatted string with placeholders replaced by corresponding values. + * + * @example + * const result = formatString("Hello, {0} {1}!", "John", "Doe"); + * console.log(result); // "Hello, John Doe!" + */ export function formatString(template: string, ...args: string[]): string { return template.replace(/{(\d+)}/g, (match, index) => { return typeof args[index] !== 'undefined' ? args[index] : match; From 2ed530ec38d6fa9eead1909f1a2c488138423202 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 4 Oct 2024 14:31:07 +0300 Subject: [PATCH 20/63] fix!(codesmell): reduce common code smell, improve codebase quality --- source/addons/compatibility.ts | 2 +- source/components/file-create.ts | 5 +-- source/components/file-edit.ts | 4 +- source/components/files-edit.ts | 5 +-- source/components/files-rename.ts | 4 +- source/components/view.ts | 2 +- source/main.ts | 32 +++++++------- source/settings.ts | 70 +++++++++++++++---------------- source/utils/constants.ts | 35 +++++++++++++--- source/utils/utils.ts | 24 ++++++++++- 10 files changed, 111 insertions(+), 72 deletions(-) diff --git a/source/addons/compatibility.ts b/source/addons/compatibility.ts index 0361ce8..41ed019 100644 --- a/source/addons/compatibility.ts +++ b/source/addons/compatibility.ts @@ -10,7 +10,7 @@ export default class CompatibilityModule { constructor(app: App, plugin: UNITADE_PLUGIN) { this._app = app; this._plugin = plugin; - /**@ts-expect-error */ + /**@ts-expect-error: not part of public API, accessing through runtime. */ this.current_manifest = this._app.plugins.manifests['unitade']; } diff --git a/source/components/file-create.ts b/source/components/file-create.ts index b4bd5c5..4aec38f 100644 --- a/source/components/file-create.ts +++ b/source/components/file-create.ts @@ -28,7 +28,6 @@ import { Modal, ButtonComponent, TextComponent, - TAbstractFile, Setting, } from "obsidian"; @@ -135,11 +134,11 @@ export class TFileCreate extends Modal { this.close(); if (this._integration) { - let next = { + const next = { ...this.plugin.settings, }; - let extensions = this._name.split('.').slice(1).join(';'); + const extensions = this._name.split('.').slice(1).join(';'); next.extensions += `;${extensions}`; diff --git a/source/components/file-edit.ts b/source/components/file-edit.ts index 345e8cd..a46fb23 100644 --- a/source/components/file-edit.ts +++ b/source/components/file-edit.ts @@ -142,7 +142,7 @@ export class TFileEdit extends Modal { this.close(); if (this._integration) { - let next = { + const next = { ...this.plugin.settings, }; @@ -155,6 +155,6 @@ export class TFileEdit extends Modal { } private __pathgen(): string { - return this._filepath + "/" + this._name + (!!this._extension ? "." : "") + this._extension; + return this._filepath + "/" + this._name + (this._extension ? "." : "") + this._extension; } } diff --git a/source/components/files-edit.ts b/source/components/files-edit.ts index 58b9409..9808d60 100644 --- a/source/components/files-edit.ts +++ b/source/components/files-edit.ts @@ -131,7 +131,7 @@ export class TFilesEdit extends Modal { this.close(); if (this._integration) { - let next = { + const next = { ...this.plugin.settings, }; @@ -151,14 +151,13 @@ export class TFilesEdit extends Modal { } private __pathgen(path: string, name: string): string { - return path + "/" + name + (!!this._new_extension ? "." : "") + this._new_extension; + return path + "/" + name + (this._new_extension ? "." : "") + this._new_extension; } private __generateDisplayInfo(): string { return this.target.map(file => { const filename = file.path.split('/').last()!; const filepath = file.path.split('/').slice(0, -1).join('/'); - const extension = filename.split('.').slice(1).join('.')!; const name = filename.split('.').first()!; return `
${filepath}/${name}.${this._new_extension}
`; }).join(''); diff --git a/source/components/files-rename.ts b/source/components/files-rename.ts index 6a522e3..6862abe 100644 --- a/source/components/files-rename.ts +++ b/source/components/files-rename.ts @@ -29,7 +29,6 @@ import { ButtonComponent, TextComponent, TAbstractFile, - Setting, } from "obsidian"; import UNITADE_PLUGIN from "./../main"; @@ -140,7 +139,7 @@ export class TFilesRename extends Modal { fin_name = `${this._new_name} (${this._new_name_queue.length})`; } - return path + "/" + fin_name + (!!extension ? "." : "") + extension; + return path + "/" + fin_name + (extension ? "." : "") + extension; } private __generateDisplayInfo(): string { @@ -148,7 +147,6 @@ export class TFilesRename extends Modal { const filename = file.path.split('/').last()!; const filepath = file.path.split('/').slice(0, -1).join('/'); const extension = filename.split('.').slice(1).join('.')!; - const name = filename.split('.').first()!; return `
${filepath}/${this._new_name}.${extension}
`; }).join(''); } diff --git a/source/components/view.ts b/source/components/view.ts index 5e82fe7..279bbd1 100644 --- a/source/components/view.ts +++ b/source/components/view.ts @@ -53,7 +53,7 @@ export default class UNITADE_VIEW extends TextFileView { this._codemirror.refresh(); } - onChange = async (instance: CodeMirror.Editor, changes: CodeMirror.EditorChange[]) => { + onChange = async () => { this.requestSave(); } diff --git a/source/main.ts b/source/main.ts index 8ccbcf0..66e218d 100644 --- a/source/main.ts +++ b/source/main.ts @@ -55,9 +55,9 @@ import { } from './components/folder-edit'; import { - isTFile, isTFolder } from './utils/utils'; + import { formatString, gencase, @@ -124,7 +124,7 @@ export default class UNITADE_PLUGIN extends Plugin { try { this.__tryApply(filename.last()!, 'markdown'); - let __settings = this.settings.extensions.split(';'); + const __settings = this.settings.extensions.split(';'); __settings.push(`${filename.last()!}`); @@ -132,7 +132,7 @@ export default class UNITADE_PLUGIN extends Plugin { if (this.settings.mobile_settings.enable) { - let __mb_settings = this.settings.mobile_settings.extensions.split(';'); + const __mb_settings = this.settings.mobile_settings.extensions.split(';'); __mb_settings.push(`${filename.last()!}`); @@ -164,14 +164,14 @@ export default class UNITADE_PLUGIN extends Plugin { try { this.__tryApply(extension, 'markdown'); - let __settings = this.settings.extensions.split(';'); + const __settings = this.settings.extensions.split(';'); __settings.push(`${extension}`); this.settings.extensions = __settings.join(';'); if (this.settings.mobile_settings.enable) { - let __mb_settings = this.settings.mobile_settings.extensions.split(';'); + const __mb_settings = this.settings.mobile_settings.extensions.split(';'); __mb_settings.push(`${extension}`); @@ -191,7 +191,7 @@ export default class UNITADE_PLUGIN extends Plugin { }) if (this._settings.markdown_overcharge) - /**@ts-expect-error */ + /**@ts-expect-error: viewRegistry exists in runtime, but not in Obsidian's public API */ this.app.viewRegistry.unregisterExtensions(['md']); this.addSettingTab(new UNITADE_SETTINGS_TAB(this.app, this)); @@ -274,7 +274,7 @@ export default class UNITADE_PLUGIN extends Plugin { leafRef(_app: App): void { try { - /**@ts-expect-error */ + /**@ts-expect-error: not part of public API, accessing through runtime. */ _app.workspace.iterateCodeMirrors(cm => cm.setOption("mode", cm.getOption("mode"))); } catch (error) { console.warn('CAUGHT AN ERROR VIA LEAF-ITERATE EVENT.'); @@ -301,7 +301,7 @@ export default class UNITADE_PLUGIN extends Plugin { } for (const key in CodeMirror.modes) { - if (CodeMirror.modes.hasOwnProperty(key) && !['hypermd', 'markdown', 'null', 'xml'].includes(key)) + if (Object.prototype.hasOwnProperty.call(CodeMirror.modes, key) && !['hypermd', 'markdown', 'null', 'xml'].includes(key)) delete CodeMirror.modes[key]; } @@ -363,7 +363,7 @@ export default class UNITADE_PLUGIN extends Plugin { } public applyDefaults(): void { - for (let defaultView in CONSTANTS.defaultExtensions) { + for (const defaultView in CONSTANTS.defaultExtensions) { this.registerExtensions(CONSTANTS.defaultExtensions[defaultView], defaultView); } } @@ -376,15 +376,15 @@ export default class UNITADE_PLUGIN extends Plugin { if (!this.settings.markdown_overcharge && ['md', 'mdown', 'markdown'].includes(filetype)) return; - /**@ts-expect-error */ + /**@ts-expect-error: not part of public API, accessing through runtime. */ if (this.app.viewRegistry.isExtensionRegistered(filetype)) return; try { this.registerExtensions([filetype], view); } catch (err: any) { - /**@ts-expect-error */ - let curr: string = this.app.viewRegistry.getTypeByExtension(filetype); + /**@ts-expect-error: not part of public API, accessing through runtime. */ + const curr: string = this.app.viewRegistry.getTypeByExtension(filetype); let _msg: string; @@ -410,7 +410,7 @@ export default class UNITADE_PLUGIN extends Plugin { this.settings.errors = {}; if (this.settings.debug_mode) - //@ts-expect-error + /**@ts-expect-error: not part of public API, accessing through runtime. */ console.info(this.app.viewRegistry.typeByExtension); const extensions_arr: string[] = extensions.split(';').map(s => s.trim()); @@ -439,9 +439,9 @@ export default class UNITADE_PLUGIN extends Plugin { } public unapplyRegistry(): void { - /**@ts-expect-error */ + /**@ts-expect-error: not part of public API, accessing through runtime. */ for (const extensionKey in this.app.viewRegistry.typeByExtension) { - /**@ts-expect-error */ + /**@ts-expect-error: not part of public API, accessing through runtime. */ this.app.viewRegistry.unregisterExtensions([extensionKey]); } } @@ -453,7 +453,7 @@ export default class UNITADE_PLUGIN extends Plugin { if (markdown_charge || extension !== 'md') if (!this._settings.errors[extension]) { try { - /**@ts-expect-error */ + /**@ts-expect-error: not part of public API, accessing through runtime. */ this.app.viewRegistry.unregisterExtensions([extension]); } catch (err: any) { const _msg = formatString(this.locale.getLocaleItem('ERROR_REGISTRY_EXTENSION')[2]!, extension); diff --git a/source/settings.ts b/source/settings.ts index cab8847..22c0695 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -120,7 +120,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { } display(): void { - let { + const { containerEl } = this; @@ -135,7 +135,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.markdown_overcharge) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, markdown_overcharge: value, }; @@ -150,11 +150,11 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setName(this.locale.getLocaleItem('SETTINGS_EXTENSIONS')[0]!) .setDesc(this.locale.getLocaleItem('SETTINGS_EXTENSIONS')[1]!); - let configInput = new TextAreaComponent(containerEl) + const configInput = new TextAreaComponent(containerEl) .setPlaceholder('txt; conf; config; data; logs') .setValue(this.plugin.settings.extensions) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, }; @@ -192,7 +192,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.mobile_settings.enable) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, mobile_settings: { ...this.plugin.settings.mobile_settings, @@ -210,11 +210,11 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return toggle; }); - let mobileConfigInp = new TextAreaComponent(containerEl) + const mobileConfigInp = new TextAreaComponent(containerEl) .setPlaceholder('txt; conf; config; data; logs') .setValue(this.plugin.settings.mobile_settings.extensions ? this.plugin.settings.mobile_settings.extensions : '') .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, mobile_settings: { ...this.plugin.settings.mobile_settings, @@ -331,11 +331,11 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { containerEl.createEl('h3', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[2]! }); - let forcedMsg = new Setting(containerEl) + const forcedMsg = new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_FORCED_EXTENSIONS')[0]!) .setDesc(this.locale.getLocaleItem('SETTINGS_FORCED_EXTENSIONS')[1]!) - let forcedWarn = document.createElement('div'); + const forcedWarn = document.createElement('div'); forcedWarn.style.fontSize = '80%'; forcedWarn.style.margin = '10px'; forcedWarn.style.color = 'green'; @@ -343,11 +343,11 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { forcedMsg.nameEl.appendChild(forcedWarn); - let frcExtInp = new TextAreaComponent(containerEl) + const frcExtInp = new TextAreaComponent(containerEl) .setPlaceholder('txt; md; ; data; db;') .setValue(this.plugin.settings.forced_extensions) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, }; @@ -378,13 +378,13 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { frcExtInp.inputEl.style.height = '48px'; frcExtInp.inputEl.style.minHeight = '36px'; - let onRfAttention = document.createElement('div'); + const onRfAttention = document.createElement('div'); onRfAttention.style.fontSize = '80%'; onRfAttention.style.margin = '10px'; onRfAttention.style.color = 'darkRed'; onRfAttention.innerHTML = this.locale.getLocaleItem('SETTINGS_WARNING_MSG')[0]!; - let onRfInfo = document.createElement('div'); + const onRfInfo = document.createElement('div'); onRfInfo.style.fontWeight = 'bold'; onRfInfo.style.fontSize = '80%'; onRfInfo.innerHTML = this.locale.getLocaleItem('SETTINGS_ONLOAD_REGISTRY')[2]!; @@ -396,7 +396,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.is_onload) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, is_onload: value, is_onload_unsafe: this.plugin.settings.is_onload_unsafe ? false : this.plugin.settings.is_onload_unsafe, @@ -411,13 +411,13 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { onRfStg.nameEl.parentElement!.appendChild(onRfAttention); onRfStg.nameEl.parentElement!.appendChild(onRfInfo); - let onRuAttention = document.createElement('div'); + const onRuAttention = document.createElement('div'); onRuAttention.style.fontSize = '80%'; onRuAttention.style.margin = '10px'; onRuAttention.style.color = 'darkRed'; onRuAttention.innerHTML = this.locale.getLocaleItem('SETTINGS_WARNING_MSG')[0]!; - let onRuInfo = document.createElement('div'); + const onRuInfo = document.createElement('div'); onRuInfo.style.fontWeight = 'bold'; onRuInfo.style.fontSize = '80%'; onRuInfo.innerHTML = this.locale.getLocaleItem('SETTINGS_ONLOAD_UNSAFE')[2]! @@ -429,7 +429,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.is_onload_unsafe) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, is_onload_unsafe: value, is_onload: this.plugin.settings.is_onload ? false : this.plugin.settings.is_onload, @@ -452,7 +452,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.barefiling) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, barefiling: value }; @@ -462,7 +462,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { if (this.plugin.settings.barefiling) { this.plugin.tryApply('', 'markdown'); } else { - /**@ts-expect-error */ + /**@ts-expect-error: not part of public API, accessing through runtime. */ this.plugin.app.viewRegistry.unregisterExtensions(['']); } }) @@ -475,7 +475,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.is_ignore) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, is_ignore: value, }; @@ -494,7 +494,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return toggle; }); - let ignoreWarn = document.createElement('div'); + const ignoreWarn = document.createElement('div'); ignoreWarn.style.fontSize = '80%'; ignoreWarn.style.margin = '10px'; ignoreWarn.style.color = 'yellow'; @@ -502,15 +502,15 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { this._configIgnore.nameEl.appendChild(ignoreWarn); - let ignoreExtMsg = new Setting(containerEl) + const ignoreExtMsg = new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_IGNORE_EXTENSIONS')[0]!) .setDesc(this.locale.getLocaleItem('SETTINGS_IGNORE_EXTENSIONS')[1]!); - let ignoreExtInp = new TextAreaComponent(containerEl) + const ignoreExtInp = new TextAreaComponent(containerEl) .setPlaceholder('txt; conf; config; data; logs') .setValue(this.plugin.settings.ignore_extensions) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, }; @@ -541,15 +541,15 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { ignoreExtInp.inputEl.style.height = '48px'; ignoreExtInp.inputEl.style.minHeight = '36px'; - let ignoreMskMsg = new Setting(containerEl) + const ignoreMskMsg = new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_IGNORE_FILES')[0]!) .setDesc(this.locale.getLocaleItem('SETTINGS_IGNORE_FILES')[1]!); - let ignoreMskInp = new TextAreaComponent(containerEl) + const ignoreMskInp = new TextAreaComponent(containerEl) .setPlaceholder('\\.(txt|md)$; doc_[a-z]; file_\\d{3}; file1') .setValue(this.plugin.settings.ignore_masks) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, }; @@ -586,7 +586,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { this.plugin.settings.is_ignore, ); - let groupMsg = new Setting(containerEl) + const groupMsg = new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_GROUP_EXTENSIONS')[0]!) .setDesc(this.locale.getLocaleItem('SETTINGS_GROUP_EXTENSIONS')[1]!) .setTooltip(this.locale.getLocaleItem('SETTINGS_GROUP_EXTENSIONS')[2]!) @@ -594,7 +594,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.is_grouped) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, is_grouped: value, }; @@ -607,7 +607,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return toggle; }); - let groupedWarn = document.createElement('div'); + const groupedWarn = document.createElement('div'); groupedWarn.style.fontSize = '80%'; groupedWarn.style.margin = '10px'; groupedWarn.style.color = 'yellow'; @@ -615,11 +615,11 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { groupMsg.nameEl.appendChild(groupedWarn); - let groupExtInp = new TextAreaComponent(containerEl) + const groupExtInp = new TextAreaComponent(containerEl) .setPlaceholder('md: json, txt, pgb; json: data, md, txt;') .setValue(this.plugin.settings.grouped_extensions) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, }; @@ -660,7 +660,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.debug_mode) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, debug_mode: value, }; @@ -680,7 +680,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.silence_errors) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, silence_errors: value, }; @@ -700,7 +700,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { toggle .setValue(this.plugin.settings.compatibility_module) .onChange(async (value) => { - let next = { + const next = { ...this.plugin.settings, compatibility_module: value, }; diff --git a/source/utils/constants.ts b/source/utils/constants.ts index de16319..3cdfa10 100644 --- a/source/utils/constants.ts +++ b/source/utils/constants.ts @@ -1,11 +1,34 @@ +/** + * A class containing constants used for default file extensions by type (audio, image, video, etc.). + * + * @class + * @example + * const audioExtensions = CONSTANTS.defaultExtensions['audio']; + * console.log(audioExtensions); // ['3gp', 'flac', 'm4a', 'mp3', 'oga', 'ogg', 'opus', 'wav'] + */ export default class CONSTANTS { + + /** + * A static object that maps file types to their default extensions. + * + * - **audio**: ['3gp', 'flac', 'm4a', 'mp3', 'oga', 'ogg', 'opus', 'wav'] + * - **image**: ['avif', 'bmp', 'gif', 'jpeg', 'jpg', 'png', 'webp'] + * - **video**: ['mkv', 'mov', 'mp4', 'ogv', 'webm'] + * - **pdf**: ['pdf'] + * - **markdown**: ['md'] + * + * @type {{ [id: string]: string[] }} + * @example + * const videoExtensions = CONSTANTS.defaultExtensions['video']; + * console.log(videoExtensions); // ['mkv', 'mov', 'mp4', 'ogv', 'webm'] + */ public static defaultExtensions: { [id: string]: string[]; } = { - 'audio': ['3gp', 'flac', 'm4a', 'mp3', 'oga', 'ogg', 'opus', 'wav'], - 'image': ['avif', 'bmp', 'gif', 'jpeg', 'jpg', 'png', 'webp'], - 'video': ['mkv', 'mov', 'mp4', 'ogv', 'webm'], - 'pdf': ['pdf'], - 'markdown': ['md'] - }; + 'audio': ['3gp', 'flac', 'm4a', 'mp3', 'oga', 'ogg', 'opus', 'wav'], + 'image': ['avif', 'bmp', 'gif', 'jpeg', 'jpg', 'png', 'webp'], + 'video': ['mkv', 'mov', 'mp4', 'ogv', 'webm'], + 'pdf': ['pdf'], + 'markdown': ['md'] + }; } diff --git a/source/utils/utils.ts b/source/utils/utils.ts index 31f73a5..5fb24ce 100644 --- a/source/utils/utils.ts +++ b/source/utils/utils.ts @@ -30,10 +30,30 @@ import { TAbstractFile, } from "obsidian"; -export function isTFile(file: TAbstractFile) { +/** + * Determines whether the provided file is an instance of `TFile` from the Obsidian API. + * + * @param {TAbstractFile} file - The file to check, which can be either a `TFile`, `TFolder`, or other `TAbstractFile` type. + * @returns {boolean} - Returns `true` if the file is an instance of `TFile`, otherwise `false`. + * + * @example + * const isFile = isTFile(someFile); + * console.log(isFile); // true if someFile is a TFile, false otherwise + */ +export function isTFile(file: TAbstractFile): boolean { return (file instanceof TFile); } -export function isTFolder(file: TAbstractFile) { +/** + * Determines whether the provided file is an instance of `TFolder` from the Obsidian API. + * + * @param {TAbstractFile} file - The file to check, which can be either a `TFile`, `TFolder`, or other `TAbstractFile` type. + * @returns {boolean} - Returns `true` if the file is an instance of `TFolder`, otherwise `false`. + * + * @example + * const isFolder = isTFolder(someFile); + * console.log(isFolder); // true if someFile is a TFolder, false otherwise + */ +export function isTFolder(file: TAbstractFile): boolean { return (file instanceof TFolder); } From 8bf5e0fef1c6ae4dc23a4b039f8fa10f7e52ea45 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 4 Oct 2024 14:57:22 +0300 Subject: [PATCH 21/63] fix(build): fix typescript shenanigans and implement clone .SH script for UNIX-systems --- clone-tracking.bat | 36 ++++++++++++++++++++++++++++++------ package.json | 2 +- tsconfig.json | 3 ++- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/clone-tracking.bat b/clone-tracking.bat index 32fdfd9..4b9ba4e 100644 --- a/clone-tracking.bat +++ b/clone-tracking.bat @@ -1,22 +1,46 @@ @echo off -SET "FILE_PATH=clone.bat" +SET "CLONEBAT=clone.bat" -FOR /F "tokens=*" %%i IN ('git ls-files -v %FILE_PATH%') DO SET "CURRENT_STATUS=%%i" +FOR /F "tokens=*" %%i IN ('git ls-files -v %CLONEBAT%') DO SET "CURRENT_STATUS=%%i" IF "%CURRENT_STATUS:~0,1%"=="S" ( - ECHO Currently, the file %FILE_PATH% is skipped. + ECHO Currently, the file %CLONEBAT% is skipped. ECHO Turning file tracking back ON... - git update-index --no-skip-worktree "%FILE_PATH%" + git update-index --no-skip-worktree "%CLONEBAT%" IF ERRORLEVEL 0 ( ECHO File tracking turned on successfully. ) ELSE ( ECHO Error: Could not turn file tracking on. ) ) ELSE ( - ECHO Currently, the file %FILE_PATH% is being tracked. + ECHO Currently, the file %CLONEBAT% is being tracked. ECHO Turning file tracking OFF... - git update-index --skip-worktree "%FILE_PATH%" + git update-index --skip-worktree "%CLONEBAT%" + IF ERRORLEVEL 0 ( + ECHO File tracking turned off successfully. + ) ELSE ( + ECHO Error: Could not turn file tracking off. + ) +) + +SET "CLONESH=clone.sh" + +FOR /F "tokens=*" %%i IN ('git ls-files -v %CLONESH%') DO SET "CURRENT_STATUS=%%i" + +IF "%CURRENT_STATUS:~0,1%"=="S" ( + ECHO Currently, the file %CLONESH% is skipped. + ECHO Turning file tracking back ON... + git update-index --no-skip-worktree "%CLONESH%" + IF ERRORLEVEL 0 ( + ECHO File tracking turned on successfully. + ) ELSE ( + ECHO Error: Could not turn file tracking on. + ) +) ELSE ( + ECHO Currently, the file %CLONESH% is being tracked. + ECHO Turning file tracking OFF... + git update-index --skip-worktree "%CLONESH%" IF ERRORLEVEL 0 ( ECHO File tracking turned off successfully. ) ELSE ( diff --git a/package.json b/package.json index 4d8e5c3..8b2084a 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "release:major": "standard-version --release-as major", "generate-version-json": "node scripts/js/generate-version-json.js", "cli": ".\\gh.cli.sh", - "build": "tsc -noEmit -skipLibCheck --esModuleInterop source/main.ts && node esbuild.config.mjs production && clone.bat" + "build": "tsc -noEmit -skipLibCheck --esModuleInterop --downlevelIteration source/main.ts && node esbuild.config.mjs production" }, "repository": { "type": "git", diff --git a/tsconfig.json b/tsconfig.json index a200b12..2672787 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,7 @@ "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "skipLibCheck": true, + "downlevelIteration": true, "target": "es6", "lib": [ "es2022", @@ -31,4 +32,4 @@ "include": [ "**/*.ts" ] -} \ No newline at end of file +} From c1035b64844491a7944108f67d998e26be403a90 Mon Sep 17 00:00:00 2001 From: Falcion Date: Fri, 4 Oct 2024 15:04:37 +0300 Subject: [PATCH 22/63] Update clone.bat --- clone.bat | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clone.bat b/clone.bat index 15cca18..3a66b71 100644 --- a/clone.bat +++ b/clone.bat @@ -1,7 +1,8 @@ @echo off -SET "" -SET "" +REM If you include quotes in path, it wouldn't work: keep path default without any external symbols +SET source_file= +SET target_file= COPY "%source_file%" "%target_file%" /Y From 6477cc386bfdc2e6f330c173d2e795ae2c5b8efa Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 4 Oct 2024 15:35:09 +0300 Subject: [PATCH 23/63] feat!(settings): add toggle for case insensitive mode for extensions --- source/locales/langs/en.ts | 7 ++++++- source/settings.ts | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index 89e29a6..c45c318 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -115,7 +115,7 @@ export const LOCALES_EN = { }, "SETTINGS_DEBUG_MODE": { 0: "Debug mode:", - 1: "This mode starts output in application\'s console about actions you do.", + 1: "This mode starts output in application's console about actions you do.", 2: "Do not use this mode if you are not developer or familliar with console." }, "SETTINGS_SILENCE_ERRORS": { @@ -158,5 +158,10 @@ export const LOCALES_EN = { }, "ERROR_COMMON_MESSAGE": { 0: "Error from UNITADE plugin:" + }, + "SETTINGS_CASE_INSENSITIVE": { + 0: "Case insensitive mode:", + 1: "If turned on, plugin would registry every upper and lower case variations of extension to provide Windows-like experience for extension.", + 2: "Unstable on UNIX-systems." } }; diff --git a/source/settings.ts b/source/settings.ts index 22c0695..9292265 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -38,6 +38,7 @@ import CompatibilityModule from './addons/compatibility'; export interface UNITADE_SETTINGS { markdown_overcharge: boolean, extensions: string, + is_case_insensitive: boolean, is_onload: boolean, is_onload_unsafe: boolean, forced_extensions: string, @@ -67,6 +68,7 @@ export interface UNITADE_SETTINGS { export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { markdown_overcharge: false, extensions: 'txt', + is_case_insensitive: true, is_onload: false, is_onload_unsafe: false, forced_extensions: '', @@ -181,6 +183,27 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { this.__updateErrors(); }); + new Setting(containerEl) + .setName(this.plugin.locale.getLocaleItem('SETTINGS_CASE_INSENSITIVE')[0]!) + .setDesc(this.plugin.locale.getLocaleItem('SETTINGS_CASE_INSENSITIVE')[1]!) + .setTooltip(this.plugin.locale.getLocaleItem('SETTINGS_CASE_INSENSITIVE')[2]!) + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.is_case_insensitive) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + is_case_insensitive: value, + }; + + await this.plugin.uptSettings(next); + + this.__updateErrors(); + }); + + return toggle; + }); + configInput.inputEl.style.width = '100%'; configInput.inputEl.style.height = '48px'; configInput.inputEl.style.minHeight = '36px'; From 7091114eddfb04d832b40e7bf3ac6952d045383e Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:41:59 +0300 Subject: [PATCH 24/63] build(build-deps): include monaco-editor and terser as main dependencies Preparation for code editing integration within syntax highlighting --- package-lock.json | 44 ++++++++++++++++---------------------------- package.json | 4 +++- 2 files changed, 19 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 140d2ef..b4bf048 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,9 @@ "esbuild": "^0.20.2", "esbuild-plugin-glsl": "^1.2.2", "esbuild-sass-plugin": "^3.3.1", - "obsidian": "^1.5.7-1" + "monaco-editor": "^0.52.0", + "obsidian": "^1.5.7-1", + "terser": "^5.34.1" }, "devDependencies": { "@commitlint/cli": "^19.3.0", @@ -1178,8 +1180,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "peer": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1193,8 +1193,6 @@ "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1204,7 +1202,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1213,8 +1210,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "peer": true, "engines": { "node": ">=6.0.0" } @@ -1223,8 +1218,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -1234,8 +1227,6 @@ "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1244,8 +1235,7 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", @@ -2094,7 +2084,6 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -2809,8 +2798,7 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtin-modules": { "version": "3.3.0", @@ -10639,6 +10627,12 @@ "node": "*" } }, + "node_modules/monaco-editor": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.0.tgz", + "integrity": "sha512-OeWhNpABLCeTqubfqLMXGsqf6OmPU6pHM85kF3dhy6kq5hnhuVS1p3VrEW/XhWHc71P2tHyS5JFySD8mgs1crw==", + "license": "MIT" + }, "node_modules/mout": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.4.tgz", @@ -13422,7 +13416,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -13439,8 +13432,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14450,11 +14441,10 @@ "dev": true }, "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", - "dev": true, - "peer": true, + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -14527,9 +14517,7 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/text-extensions": { "version": "2.4.0", diff --git a/package.json b/package.json index 8b2084a..e8c0aeb 100644 --- a/package.json +++ b/package.json @@ -201,7 +201,9 @@ "esbuild": "^0.20.2", "esbuild-plugin-glsl": "^1.2.2", "esbuild-sass-plugin": "^3.3.1", - "obsidian": "^1.5.7-1" + "monaco-editor": "^0.52.0", + "obsidian": "^1.5.7-1", + "terser": "^5.34.1" }, "capabilities": { "untrustedWorkspaces": { From 3105825a1df8de3b6cf832235caa5717a4045d87 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:07:40 +0300 Subject: [PATCH 25/63] feat(settings): add block about code editor settings and implement them in code --- source/locales/langs/en.ts | 3 +- source/settings.ts | 388 ++++++++++++++++++++++++++++++++++++- source/utils/constants.ts | 8 +- 3 files changed, 391 insertions(+), 8 deletions(-) diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index c45c318..b7cab67 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -33,7 +33,8 @@ export const LOCALES_EN = { 0: "UNITADE's settings:", 1: "Errors:", 2: "Advanced block", - 3: "Additionals" + 3: "Code editor block:", + 4: "Additionals", }, "SETTINGS_EXTENSIONS": { 0: "Extensions:", diff --git a/source/settings.ts b/source/settings.ts index 9292265..16cfc16 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -34,6 +34,7 @@ import { import UNITADE_PLUGIN from './main'; import LocalesModule from './locales/core'; import CompatibilityModule from './addons/compatibility'; +import CONSTANTS from './utils/constants'; export interface UNITADE_SETTINGS { markdown_overcharge: boolean, @@ -62,7 +63,26 @@ export interface UNITADE_SETTINGS { debug_mode: boolean, silence_errors: boolean, manifest_version: string, - compatibility_module: boolean + compatibility_module: boolean, + + code_editor_settings: { + enabled: boolean, + use_default_extensions: boolean, + extensions: string, + folding: boolean, + line_numbers: boolean, + word_wrapping: boolean, + minimapping: boolean, + validation_semantic: boolean, + validation_syntax: boolean, + theme: string, + font_size: number, + font_family: string, + font_ligatures: boolean; + }, + + SYS_FONTSIZE_MAX: number, + SYS_FONTSIZE_MIN: number, } export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { @@ -92,7 +112,27 @@ export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { debug_mode: false, silence_errors: false, manifest_version: '', - compatibility_module: false, + + compatibility_module: true, + + code_editor_settings: { + enabled: true, + use_default_extensions: true, + extensions: '', + folding: true, + line_numbers: true, + word_wrapping: false, + minimapping: true, + validation_semantic: true, + validation_syntax: true, + theme: 'AUTO', + font_size: 14, + font_family: "'Cascadia Code', 'Fira Code', Consolas, 'Courier New', monospace", + font_ligatures: true, + }, + + SYS_FONTSIZE_MAX: 32, + SYS_FONTSIZE_MIN: 5, } export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { @@ -128,6 +168,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { containerEl.empty(); + //#region Basic settings (initial page) containerEl.createEl('h3', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[0]! }); new Setting(containerEl) @@ -332,7 +373,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .addButton(button => { button .setButtonText('Reload') - .setIcon('reload') + .setIcon('refresh-ccw') .onClick(async (event) => { if (this.plugin.settings.debug_mode) console.info(`[${event.timeStamp}]: CAUSED RELOADING FUNCTION!`); @@ -345,13 +386,15 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { return button; }); - + //#endregion + //#region Errors containerEl.createEl('h2', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[1]! }); this._errors = containerEl.createEl('p', { text: 'None' }); this._errors.style.whiteSpace = 'pre-line'; this.__updateErrors(); - + //#endregion + //#region Advanced settings tab containerEl.createEl('h3', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[2]! }); const forcedMsg = new Setting(containerEl) @@ -672,9 +715,327 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { groupExtInp.inputEl.style.width = '100%'; groupExtInp.inputEl.style.height = '48px'; groupExtInp.inputEl.style.minHeight = '36px'; + //#endregion + //#region Code editor settings tab containerEl.createEl('h3', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[3]! }); + new Setting(containerEl) + .setName('Enable code editor module:') + .setDesc('This mode will enable code editor functionalities like syntax highlighting, IntelliSence and etc.') + .setTooltip('May cause lags and other issues.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.enabled) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + enabled: value + }, + }; + + await this.plugin.uptSettings(next); + + await this.__updateErrors(); + + this.__uptCEConfig([ + useDefaultExtensions, editorExtensionsInput, editorTheme, + editorFolding, editorWordWrapping, editorLineNumbers, editorMinimapping, + editorValidationSemantic, editorValidationSyntax, editorFontSize, + editorFontFamily, editorFontLigatures + ], value); + }) + + return toggle; + }); + + const useDefaultExtensions = new Setting(containerEl) + .setName('Use default extensions:') + .setDesc('If disabled, code editor module will require to input its own extensions, otherwise, it would use "simple" extensions from config.') + .setTooltip('This block also can be replaced by grouped extensions.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.use_default_extensions) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + use_default_extensions: value, + }, + } + + await this.plugin.uptSettings(next); + + editorExtensionsInput.inputEl.style.display = toggle ? 'block' : 'none'; + }); + + return toggle; + }); + + const editorExtensionsInput = new TextAreaComponent(containerEl) + .setPlaceholder('txt; conf; config; data; logs') + .setValue(this.plugin.settings.code_editor_settings.extensions) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + extensions: '', + }, + }; + + if (value !== "" && value !== null && value !== undefined) { + try { + next.stable = true; + next.code_editor_settings.extensions = value; + } catch { + next.stable = false; + } + } else { + next.stable = false; + next.code_editor_settings.extensions = value; + } + + this.__uptState( + editorExtensionsInput, + this.plugin.settings.stable, + next.stable + ); + + await this.plugin.uptSettings(next); + + this.__updateErrors(); + }); + + editorExtensionsInput.inputEl.style.width = '100%'; + editorExtensionsInput.inputEl.style.height = '48px'; + editorExtensionsInput.inputEl.style.minHeight = '36px'; + + const editorFolding = new Setting(containerEl) + .setName('Enable folding:') + .setDesc('A feature that allows you to hide (collapse) parts of your code to improve readability.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.folding) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + folding: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return toggle; + }); + + const editorLineNumbers = new Setting(containerEl) + .setName('Line numbers:') + .setDesc('Feature to display line numbers in the editor.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.line_numbers) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + line_numbers: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return toggle; + }); + + const editorWordWrapping = new Setting(containerEl) + .setName('Word wrapping:') + .setDesc('Feature that allows text to automatically wrap to the next line if it exceeds the width of the editor.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.word_wrapping) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + word_wrapping: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return toggle; + }); + + const editorMinimapping = new Setting(containerEl) + .setName('Enable minimapping:') + .setDesc('Feature that provides a thumbnail view of the entire document.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.minimapping) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + minimapping: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return toggle; + }); + + const editorValidationSemantic = new Setting(containerEl) + .setName('Enable semantic validation:') + .setDesc('This process checks the code for logical errors and the correct use of variables, functions, and other elements. Semantic validation takes into account the context and meaning of the code.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.validation_semantic) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + validation_semantic: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return toggle; + }); + + const editorValidationSyntax = new Setting(containerEl) + .setName('Enable syntax validation:') + .setDesc('This process checks code for errors related to its structure and syntax. It analyzes whether the code follows the rules of the programming language.') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.validation_syntax) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + validation_syntax: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return toggle; + }); + + const editorTheme = new Setting(containerEl) + .setName('Editor theme:') + .setDesc('Choose specific theme for code editor, visually affects syntax highlighting.') + .addDropdown(dropdown => { + dropdown + .addOptions(CONSTANTS.themes) + .setValue(this.plugin.settings.code_editor_settings.theme) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + theme: value, + }, + }; + + await this.plugin.uptSettings(next); + + this.__updateErrors(); + + }); + + return dropdown; + }); + + containerEl.createEl('h4', { text: 'Font settings for code editor:' }); + + const editorFontSize = new Setting(containerEl) + .setName('Font size:') + .addSlider(slider => { + slider + .setValue(this.plugin.settings.code_editor_settings.font_size) + .setLimits(this.plugin.settings.SYS_FONTSIZE_MIN, this.plugin.settings.SYS_FONTSIZE_MAX, 1) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + font_size: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return slider; + }); + + const editorFontFamily = new Setting(containerEl) + .setName('Font family:') + .setDesc('Write here existing font families and fonts themselves: input format like in any code editor.') + .addTextArea(text => { + text + .setValue(this.plugin.settings.code_editor_settings.font_family) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + font_family: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return text; + }); + + const editorFontLigatures = new Setting(containerEl) + .setName('Font ligatures:') + .setDesc('If your font supports ligatures, you can turn them on.') + .setTooltip('If ligatures are not supported by font, this would not work') + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.code_editor_settings.font_ligatures) + .onChange(async (value) => { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + font_ligatures: value, + }, + }; + + await this.plugin.uptSettings(next); + }); + + return toggle; + }); + + //#endregion + //#region Additionals settings tab + + containerEl.createEl('h3', { text: this.locale.getLocaleItem('UNITADE_SETTINGS_COMMON')[4]! }); + new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_DEBUG_MODE')[0]!) .setDesc(this.locale.getLocaleItem('SETTINGS_DEBUG_MODE')[1]!) @@ -768,13 +1129,28 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); return button; - }) + }); + + //#endregion } private __uptMbConfig(mbConfigInput: TextAreaComponent, mbConfigEnabled: boolean): void { mbConfigInput.inputEl.style.display = mbConfigEnabled ? 'block' : 'none'; } + private __uptCEConfig(configCodeEditorElements: (TextAreaComponent|Setting)[], configCodeEditorEnabled: boolean): void { + for(const configCodeEditorElement of configCodeEditorElements) { + if(configCodeEditorElement instanceof TextAreaComponent) { + configCodeEditorElement.inputEl.style.display = configCodeEditorEnabled ? 'block' : 'none'; + } else if(configCodeEditorElement instanceof Setting) { + configCodeEditorElement.settingEl.style.display = configCodeEditorEnabled ? 'block' : 'none'; + } else { + throw new Error('Unknown type of throwable entity.'); + } + + } + } + private __uptIgnConfig(ignInps: TextAreaComponent[], ignMsgs: Setting[], ignConfigEnabled: boolean): void { ignInps[0].inputEl.style.display = ignConfigEnabled ? 'block' : 'none'; ignMsgs[0].settingEl.style.display = ignConfigEnabled ? 'block' : 'none'; diff --git a/source/utils/constants.ts b/source/utils/constants.ts index 3cdfa10..125e15d 100644 --- a/source/utils/constants.ts +++ b/source/utils/constants.ts @@ -1,5 +1,5 @@ /** - * A class containing constants used for default file extensions by type (audio, image, video, etc.). + * A class containing constants. * * @class * @example @@ -31,4 +31,10 @@ export default class CONSTANTS { 'pdf': ['pdf'], 'markdown': ['md'] }; + + public static themes = { + 'AUTO': 'AUTO', + 'LIGHT': 'LIGHT', + 'DARK': 'DARK' + }; } From b8a3bf0d58549b35d1d8adf0fc25b4a4e21c1460 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:09:16 +0300 Subject: [PATCH 26/63] docs(wiki): create a sidebar for wiki of project --- docs/.gitkeep | 0 docs/_sidebar.md | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) delete mode 100644 docs/.gitkeep create mode 100644 docs/_sidebar.md diff --git a/docs/.gitkeep b/docs/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 0000000..9fa42f3 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,35 @@ +1. Introduction +2. Common settings + 1. Markdown overcharge + 2. Extensions + 3. Mobile extensions + 4. Case-insensitive extensions mode +3. Working with registries of Obsidian + 1. Hard-deleting registries + 2. Unloading registries + 3. Hard-loading registries + 4. Reloading registries +4. Error handling + 1. Silencing errors +5. Advanced settings + 1. Forced extensions + 2. On-load registry + 3. On-load unsafe registry + 4. Barefiling (barefiles support) + 5. Ignore mode + 1. Ignoring extensions + 2. Ignoring files by regexp + 6. Grouped extensions +6. Code editor module + 1. Working with extensions + 2. Visual parameters + 3. Minimapping + 4. Validations + 5. Working with fonts +7. Additionals + 1. Debug mode +8. Compatibility module +9. API + 1. Plugin's open API for integrations + 2. About views and registries + 3. About files and workspaces From 5c64d721986a5ad628118860e58c887f7cff97dc Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:54:57 +0300 Subject: [PATCH 27/63] docs(wiki): create an introduction page --- docs/introduction.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/introduction.md diff --git a/docs/introduction.md b/docs/introduction.md new file mode 100644 index 0000000..413f945 --- /dev/null +++ b/docs/introduction.md @@ -0,0 +1,11 @@ +Welcome to the UNITADE.md (or just "UNITADE") plugin’s Wikipedia page. Here you will find comprehensive documentation and detailed information about the plugin's features, including insights into file views and registries. + +*This wiki is a living document and may be periodically updated as new features and improvements are added.* + +**UNITADE**, derived from the Latin term for "united" or "unity," is a plugin developed for [Obsidian](https://obsidian.md). It extends the capabilities of Obsidian by enabling users to work with non-markdown files, including those that are not natively supported by the software. Initially, UNITADE.md started as a small project designed to bypass the need to open external editors, such as VS Code or IDEs, to view code and write documentation for projects. Over time, it has grown into a powerful tool that offers users an experience similar to working within a code editor, allowing for much greater flexibility and functionality within Obsidian. + +The plugin supports any language that Obsidian itself supports, although certain translations may not be available yet. + +Users are encouraged to contribute translations, not only for the plugin but also for this wiki, which will benefit from the community’s input. For guidelines on how to contribute, please refer to the [Contribution Policy of UNITADE](https://github.com/Falcion/UNITADE.md/blob/main/.github/CONTRIBUTING.md) and the general [GitHub Documentation on Contributing to a Project](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project). + +By contributing to UNITADE.md, you help build a more inclusive and comprehensive experience for all users. From 958cc1eceb88a3fa75f43dcde87272155248d9ca Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:26:58 +0300 Subject: [PATCH 28/63] docs(wiki): create a page about extensions processing in plugin on wiki --- docs/common_settings/extensions.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 docs/common_settings/extensions.md diff --git a/docs/common_settings/extensions.md b/docs/common_settings/extensions.md new file mode 100644 index 0000000..a268706 --- /dev/null +++ b/docs/common_settings/extensions.md @@ -0,0 +1,28 @@ +UNITADE supports showing any file just as it is in Obsidian Vault and allows you to "read" it, but this setting has it own prerequisites: + +1. While it is the fastest way to implement file reading to your Vault, you need to understand that this setting reads every extensions as Markdown file (`markdown` view in Obsidian registry), meaning Obsidian's behaviour with some symbols may interfere with working with extensions. + - Examples: [issue #73](https://github.com/Falcion/UNITADE.md/issues/73) +2. Theorethically, Obsidian with this setting turned on, Obsidian would try to "parse" file as Markdown, so any binaries files ARE NOT RECOMMENDED to be included in this setting; although this issue could not be replicated and not on the plugin side, still proceed with caution; + +**Input example and how plugin it reads:** + +```bash +# Example of input from UI (String: type) +data; txt; json; js; data.json; ;; m,d + +# Output (String[]: type) +['data', 'txt', 'json', 'js', 'data.json', ' ', '', 'm,d'] +``` + +Strings are split by `;` symbol because it is not supported in any filenames on Window systems and is bad gesture for naming files in UNIX. + +> [!Warning] +> Keep in mind not writing `;` at the end of the input, program would try to parse "empty" extensions again, because program splits input string and iterates through every param. + +### Minor features + +Default extensions setting has it minor feature, or if you call, "hacks", for example as it was stated in example before: + +1. If you type `;;` in input, it would support files without any extensions, in plugin environment, they are called "barefiles" and their support are called "barefiling", so, your Vault after this input would accept files, for example, like `data` or `config`; +2. Input splitter for extensions, trims extensions ONLY AT START, so you could enter spaces and "differ" visually your inputs; + - If the input is `' '` (or by user input of `; ;`) won't be trimmed and remained same. From 2b46b2fc518404962254c0eb540b9fd7af766b91 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:37:42 +0300 Subject: [PATCH 29/63] docs(wiki): create a page about markdown overcharge of plugin on wiki --- docs/_sidebar.md | 1 + docs/common_settings/markdown_overcharge.md | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 docs/common_settings/markdown_overcharge.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 9fa42f3..14aa9d3 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -33,3 +33,4 @@ 1. Plugin's open API for integrations 2. About views and registries 3. About files and workspaces + 4. Phantom views and extensions diff --git a/docs/common_settings/markdown_overcharge.md b/docs/common_settings/markdown_overcharge.md new file mode 100644 index 0000000..15af4f9 --- /dev/null +++ b/docs/common_settings/markdown_overcharge.md @@ -0,0 +1,7 @@ +Markdown overcharge toggle allows you to disable markdown reading and staging in Obsidian Vault, this feature upon turning on, removes `md` extensions from view registry of app. + +> [!Note] +> Markdown files after toggling on would still remain in the Vault, but if you would try to open it, you will be redirected to other editors or system would ask you with which app you want to open this file. +> +> More about behaviour is written in:\ +> **"Phantom views and extensions"** of this wiki. From 0497f51d9ad7939f9fa260998ebdf520b9a91b8d Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:44:32 +0300 Subject: [PATCH 30/63] docs(wiki): create a page about mobile extensions config --- docs/common_settings/mobile_extensions.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/common_settings/mobile_extensions.md diff --git a/docs/common_settings/mobile_extensions.md b/docs/common_settings/mobile_extensions.md new file mode 100644 index 0000000..a80fe2b --- /dev/null +++ b/docs/common_settings/mobile_extensions.md @@ -0,0 +1,8 @@ +Mobile extensions are a sub-configuration of the extension settings within the UNITADE plugin, specifically activated when Obsidian is used on a mobile device. + +These mobile extensions mimic the default extension settings but are tailored for mobile-specific configurations and plugin instances. This can be especially useful when you access your Vault via Obsidian Sync on your phone. + +> [!Note] +> In cases where the configuration is corrupted or encounters unforeseen issues, the plugin will attempt to initialize the default configuration. Therefore, when working with mobile devices, it’s recommended to sync both the default and mobile extension configurations to avoid potential conflicts. + +This module is only displayed on mobile devices, or when manually enabled through a special toggle button on the settings page. From ad347c729171869fca17df7a1efe1067a55362f4 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:46:17 +0300 Subject: [PATCH 31/63] chore(refactor): grammar and visual refactor for "Introduction" page of wiki --- docs/introduction.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/introduction.md b/docs/introduction.md index 413f945..0066f17 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -1,8 +1,8 @@ -Welcome to the UNITADE.md (or just "UNITADE") plugin’s Wikipedia page. Here you will find comprehensive documentation and detailed information about the plugin's features, including insights into file views and registries. +Welcome to the UNITADE.md (or just "UNITADE") plugin’s wikipedia page. Here you will find comprehensive documentation and detailed information about the plugin's features, including insights into file views and registries. -*This wiki is a living document and may be periodically updated as new features and improvements are added.* +> This wiki is a living document and may be periodically updated as new features and improvements are added. -**UNITADE**, derived from the Latin term for "united" or "unity," is a plugin developed for [Obsidian](https://obsidian.md). It extends the capabilities of Obsidian by enabling users to work with non-markdown files, including those that are not natively supported by the software. Initially, UNITADE.md started as a small project designed to bypass the need to open external editors, such as VS Code or IDEs, to view code and write documentation for projects. Over time, it has grown into a powerful tool that offers users an experience similar to working within a code editor, allowing for much greater flexibility and functionality within Obsidian. +UNITADE, derived from the Latin term for "united" or "unity," is a plugin developed for [Obsidian](https://obsidian.md). It extends the capabilities of Obsidian by enabling users to work with non-markdown files, including those that are not natively supported by the software. Initially, UNITADE.md started as a small project designed to bypass the need to open external editors, such as VS Code or IDEs, to view code and write documentation for projects. Over time, it has grown into a powerful tool that offers users an experience similar to working within a code editor, allowing for much greater flexibility and functionality within Obsidian. The plugin supports any language that Obsidian itself supports, although certain translations may not be available yet. From 2a23573ae1cfa4e9659f0628b8ed7a55576b9bb0 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:47:47 +0300 Subject: [PATCH 32/63] chore(refactor): grammar and visual refactor for page of wiki Page "Markdown overcharge" --- docs/common_settings/markdown_overcharge.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/common_settings/markdown_overcharge.md b/docs/common_settings/markdown_overcharge.md index 15af4f9..aca9b7c 100644 --- a/docs/common_settings/markdown_overcharge.md +++ b/docs/common_settings/markdown_overcharge.md @@ -1,7 +1,7 @@ -Markdown overcharge toggle allows you to disable markdown reading and staging in Obsidian Vault, this feature upon turning on, removes `md` extensions from view registry of app. +Markdown Overcharge toggle allows you to disable markdown reading and staging in your Obsidian Vault. When enabled, this feature removes `.md` file extensions from the app’s view registry. > [!Note] -> Markdown files after toggling on would still remain in the Vault, but if you would try to open it, you will be redirected to other editors or system would ask you with which app you want to open this file. +> Markdown files will still remain in the Vault after enabling the toggle. However, if you try to open them, you will be redirected to other editors, or the system will prompt you to choose which app to use for opening the file. > -> More about behaviour is written in:\ -> **"Phantom views and extensions"** of this wiki. +> For more details about this behavior, refer to the section: +> **"Phantom Views and Extensions"** in this wiki. From 97314f1d747de322427d569c8bc0e99afdd72b61 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:49:17 +0300 Subject: [PATCH 33/63] chore(refactor): grammar and visual refactor for page of wiki Page "Extensions" --- docs/common_settings/extensions.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/common_settings/extensions.md b/docs/common_settings/extensions.md index a268706..74d6ccb 100644 --- a/docs/common_settings/extensions.md +++ b/docs/common_settings/extensions.md @@ -1,10 +1,10 @@ -UNITADE supports showing any file just as it is in Obsidian Vault and allows you to "read" it, but this setting has it own prerequisites: +UNITADE supports displaying any file as it is in your Obsidian Vault and allows you to "read" it, but this setting has its own prerequisites: -1. While it is the fastest way to implement file reading to your Vault, you need to understand that this setting reads every extensions as Markdown file (`markdown` view in Obsidian registry), meaning Obsidian's behaviour with some symbols may interfere with working with extensions. - - Examples: [issue #73](https://github.com/Falcion/UNITADE.md/issues/73) -2. Theorethically, Obsidian with this setting turned on, Obsidian would try to "parse" file as Markdown, so any binaries files ARE NOT RECOMMENDED to be included in this setting; although this issue could not be replicated and not on the plugin side, still proceed with caution; +1. While it is the fastest way to enable file reading in your Vault, you need to understand that this setting treats every extension as a Markdown file (`markdown` view in the Obsidian registry). This means that Obsidian's behavior with certain symbols may interfere with how extensions function. + - Example: [issue #73](https://github.com/Falcion/UNITADE.md/issues/73) +2. Theoretically, with this setting enabled, Obsidian would try to "parse" every file as Markdown. Therefore, binary files ARE NOT RECOMMENDED to be included in this setting. Although this issue has not been replicated and is not due to the plugin, it is still advised to proceed with caution. -**Input example and how plugin it reads:** +**Input example and how the plugin reads it:** ```bash # Example of input from UI (String: type) @@ -14,15 +14,15 @@ data; txt; json; js; data.json; ;; m,d ['data', 'txt', 'json', 'js', 'data.json', ' ', '', 'm,d'] ``` -Strings are split by `;` symbol because it is not supported in any filenames on Window systems and is bad gesture for naming files in UNIX. +Strings are split by the `;` symbol because it is not supported in filenames on Windows systems and is considered bad practice for naming files in UNIX. > [!Warning] -> Keep in mind not writing `;` at the end of the input, program would try to parse "empty" extensions again, because program splits input string and iterates through every param. +> Keep in mind, if you include a `;` at the end of the input, the program will try to parse "empty" extensions again. This is because the program splits the input string and iterates through each parameter. -### Minor features +### Minor Features -Default extensions setting has it minor feature, or if you call, "hacks", for example as it was stated in example before: +The default extensions setting has minor features, or "hacks," as mentioned in the example above: -1. If you type `;;` in input, it would support files without any extensions, in plugin environment, they are called "barefiles" and their support are called "barefiling", so, your Vault after this input would accept files, for example, like `data` or `config`; -2. Input splitter for extensions, trims extensions ONLY AT START, so you could enter spaces and "differ" visually your inputs; - - If the input is `' '` (or by user input of `; ;`) won't be trimmed and remained same. +1. If you type `;;` in the input, it will support files without extensions. In the plugin environment, these are called "barefiles," and their support is referred to as "barefiling." After this input, your Vault will accept files like `data` or `config` with no extensions. +2. The input splitter for extensions trims extensions ONLY AT THE START, so you can include spaces to visually "separate" your inputs. + - If the input is `' '` (or entered as `; ;` by the user), it won't be trimmed and will remain the same. From a7c66d39af96537effd580c23d3f83c5655e84f8 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:47:44 +0300 Subject: [PATCH 34/63] docs(wiki): create a page about case insenstivity mode in plugin --- .../case_insensitive_extensions_mode.md | 47 ++++++++++++++++++ docs/res/image/image001.png | Bin 0 -> 279605 bytes docs/res/image/image002.png | Bin 0 -> 29213 bytes docs/res/image/image003.png | Bin 0 -> 27568 bytes 4 files changed, 47 insertions(+) create mode 100644 docs/common_settings/case_insensitive_extensions_mode.md create mode 100644 docs/res/image/image001.png create mode 100644 docs/res/image/image002.png create mode 100644 docs/res/image/image003.png diff --git a/docs/common_settings/case_insensitive_extensions_mode.md b/docs/common_settings/case_insensitive_extensions_mode.md new file mode 100644 index 0000000..410a788 --- /dev/null +++ b/docs/common_settings/case_insensitive_extensions_mode.md @@ -0,0 +1,47 @@ +Obsidian, because of it's crossplatform support, does not treat extensions as case-insensitive, meaning both variations of `txt` and `TxT` are different extensions for the app. + +This is the same problem for both VS Code and Obsidian any many other applications if they simultaionasly support both Windows and UNIX-like system (e.g. Linux): this happens because in Windows, even if disk supports this feature, all the extensions are case-insensitive, meaning you can (only if not exceptional cases) write same extensions with differents between case and they would coexist, but treated as equals. + +> POSIX takes advantage of the full case sensitive mode, while MS-DOS, WOW, and Win32 subsystems use the case insensitive mode. + +Linux not only provides any symbol available in the extensions of the filename, but also is a case-sensitive and because of this "strange" for common user behaviour occurs. + +**You can read more about this topic:** +- https://superuser.com/questions/881804/case-sensitive-file-extensions-in-windows-and-linux + +### Practice + +So, plugin supports both case-insensitive and case-sensitive extensions system, and if it TURNED ON, every extension typed in every setting would be put through generator-function which creates $n*2^n$ combinations of upper- and lower-cases symbols for the extension, meaning: + +```bash +txt -> [txT, tXt, Txt, tXT... TXT]; +``` + +This feature is not turned on by default because of it's RAM usage and common algorithm complexity of $O(n*2^n)$ which can take humongous amounts of device computational resources. + +**Little graphs to visualize computational differences:** + +![graph1](./../res/image/image001.png) +![graph2](./../res/image/image003.png) + +> [!Important] +> Note how in the second graph the data is not in sync with the math graph defined by functions. + +Second graph shows exact reason why case-insensitive mode can be dangerous, lets dive in the data behind the graph to understand what is happening. + +Graphs datasets are defined by "appending" values by linear rule, meaning their output looks like this: + +1. Output of the $O(n)$: + +```shell +[...16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] +``` + +2. Output of the $O(n*2^n)$ of the same range: + +```shell +[1048576, 2228224, 4718592, 9961472, 20971520, 44040192, 92274688, 192937984, 402653184, 838860800, 1744830464, 3623878656, 7516192768, 15569256448, 32212254720] +``` + +> [!Note] +> This row of numbers can't even be visualized correctly by Python's library `matploblib` for visualization because it breaks the scales, in case of JavaScript (TypeScript) numbers and collections behaviour would be worse, because Python deals with them better. diff --git a/docs/res/image/image001.png b/docs/res/image/image001.png new file mode 100644 index 0000000000000000000000000000000000000000..c3db517f4e0ccdb7b6a146851f9ae28f44047ea8 GIT binary patch literal 279605 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⋘ETk$ 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 Y+nKHDmE&qlD=UL(WU-FFX2-FA0=%Xd2LJ#7 literal 0 HcmV?d00001 diff --git a/docs/res/image/image003.png b/docs/res/image/image003.png new file mode 100644 index 0000000000000000000000000000000000000000..a869b53a710fe7ad5c03d263babc95427b8fc9fb GIT binary patch literal 27568 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 literal 0 HcmV?d00001 From 66ae483598c4d94793c5efe6efe04b0f83013694 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:48:10 +0300 Subject: [PATCH 35/63] chore(refactor): now case insensitive mode disabled by default --- source/settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/settings.ts b/source/settings.ts index 16cfc16..aa7d017 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -88,7 +88,7 @@ export interface UNITADE_SETTINGS { export const DEFAULT_SETTINGS: UNITADE_SETTINGS = { markdown_overcharge: false, extensions: 'txt', - is_case_insensitive: true, + is_case_insensitive: false, is_onload: false, is_onload_unsafe: false, forced_extensions: '', From 0b73d9a9a6089e78a19d48f73c9febc43f20e502 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:26:51 +0300 Subject: [PATCH 36/63] chore(refactor): refactor wiki according to markdownlint --- docs/common_settings/markdown_overcharge.md | 4 ++-- docs/common_settings/mobile_extensions.md | 2 +- docs/introduction.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/common_settings/markdown_overcharge.md b/docs/common_settings/markdown_overcharge.md index aca9b7c..e859c7d 100644 --- a/docs/common_settings/markdown_overcharge.md +++ b/docs/common_settings/markdown_overcharge.md @@ -1,7 +1,7 @@ Markdown Overcharge toggle allows you to disable markdown reading and staging in your Obsidian Vault. When enabled, this feature removes `.md` file extensions from the app’s view registry. > [!Note] -> Markdown files will still remain in the Vault after enabling the toggle. However, if you try to open them, you will be redirected to other editors, or the system will prompt you to choose which app to use for opening the file. +> Markdown files will still remain in the Vault after enabling the toggle. However, if you try to open them, you will be redirected to other editors, or the system will prompt you to choose which app to use for opening the file. > -> For more details about this behavior, refer to the section: +> For more details about this behavior, refer to the section:\ > **"Phantom Views and Extensions"** in this wiki. diff --git a/docs/common_settings/mobile_extensions.md b/docs/common_settings/mobile_extensions.md index a80fe2b..ca6419f 100644 --- a/docs/common_settings/mobile_extensions.md +++ b/docs/common_settings/mobile_extensions.md @@ -5,4 +5,4 @@ These mobile extensions mimic the default extension settings but are tailored fo > [!Note] > In cases where the configuration is corrupted or encounters unforeseen issues, the plugin will attempt to initialize the default configuration. Therefore, when working with mobile devices, it’s recommended to sync both the default and mobile extension configurations to avoid potential conflicts. -This module is only displayed on mobile devices, or when manually enabled through a special toggle button on the settings page. +This module is only displayed on mobile devices, or when manually enabled through a special toggle button on the settings page. diff --git a/docs/introduction.md b/docs/introduction.md index 0066f17..58f1a03 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -1,4 +1,4 @@ -Welcome to the UNITADE.md (or just "UNITADE") plugin’s wikipedia page. Here you will find comprehensive documentation and detailed information about the plugin's features, including insights into file views and registries. +Welcome to the UNITADE.md (or just "UNITADE") plugin’s wikipedia page. Here you will find comprehensive documentation and detailed information about the plugin's features, including insights into file views and registries. > This wiki is a living document and may be periodically updated as new features and improvements are added. From 9728df5e9f18af0e3e1a1e4ac01e0802c2751f9f Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:27:38 +0300 Subject: [PATCH 37/63] chore(refactor): little code and locale text refactor to fix visual or semantic issues --- source/locales/langs/en.ts | 2 +- source/settings.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index b7cab67..0143692 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -108,7 +108,7 @@ export const LOCALES_EN = { }, "SETTINGS_FORCE_UNLOAD": { 0: "Force-unload", - 1: "'On click, causes imitation of disabling plugin, meaning, reloading registry of extensions in vault to default mode." + 1: "On click, causes imitation of disabling plugin, meaning, reloading registry of extensions in vault to default mode." }, "SETTINGS_RELOAD_REGISTRIES": { 0: "Reload registries", diff --git a/source/settings.ts b/source/settings.ts index aa7d017..8d83436 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -348,7 +348,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); return button; - }) + }); new Setting(containerEl) .setName(this.locale.getLocaleItem('SETTINGS_HARD_LOAD')[0]!) From 515495f8f40ac050f5adb30f36483a98687df103 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:28:29 +0300 Subject: [PATCH 38/63] docs(wiki): create a page about hard-deleting registry by plugin --- .../hard_deleting_registries.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docs/working_with_registries_of_obsidian/hard_deleting_registries.md diff --git a/docs/working_with_registries_of_obsidian/hard_deleting_registries.md b/docs/working_with_registries_of_obsidian/hard_deleting_registries.md new file mode 100644 index 0000000..7af2f4f --- /dev/null +++ b/docs/working_with_registries_of_obsidian/hard_deleting_registries.md @@ -0,0 +1,18 @@ +UNITADE provides several functionalities to work with Obsidian's registry: one of them is the so-called "Hard-delete" functionality. + +Upon clicking, this button launches a special method, which reads every extension registered in the Obsidian Vault and then unregisters them by a specified private API method of Obsidian. + +Here is an example code of this method (it may differ in the source code): + +```typescript +public unapplyRegistry(): void { + /**@ts-expect-error: not part of public API, accessing through runtime. */ + for (const extensionKey in this.app.viewRegistry.typeByExtension) { + /**@ts-expect-error: not part of public API, accessing through runtime. */ + this.app.viewRegistry.unregisterExtensions([extensionKey]); + } + } +``` + +> [!Note] +> Since this is a public API of UNITADE's core, you can call this method from other places, like a custom plugin or the developer console. From 1a9d4b0ce206eadbe8ba0f8a4801c1d89be1c1d4 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:31:45 +0300 Subject: [PATCH 39/63] chore(fix): code semantics fix in wiki docs --- .../hard_deleting_registries.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/working_with_registries_of_obsidian/hard_deleting_registries.md b/docs/working_with_registries_of_obsidian/hard_deleting_registries.md index 7af2f4f..75ae21a 100644 --- a/docs/working_with_registries_of_obsidian/hard_deleting_registries.md +++ b/docs/working_with_registries_of_obsidian/hard_deleting_registries.md @@ -6,12 +6,12 @@ Here is an example code of this method (it may differ in the source code): ```typescript public unapplyRegistry(): void { + /**@ts-expect-error: not part of public API, accessing through runtime. */ + for (const extensionKey in this.app.viewRegistry.typeByExtension) { /**@ts-expect-error: not part of public API, accessing through runtime. */ - for (const extensionKey in this.app.viewRegistry.typeByExtension) { - /**@ts-expect-error: not part of public API, accessing through runtime. */ - this.app.viewRegistry.unregisterExtensions([extensionKey]); - } + this.app.viewRegistry.unregisterExtensions([extensionKey]); } +} ``` > [!Note] From 2e9f961056de69949e0ae5b157fa155717d5003b Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:33:43 +0300 Subject: [PATCH 40/63] docs(wiki): create a page about unloading registry by plugin --- .../unloading_registries.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/working_with_registries_of_obsidian/unloading_registries.md diff --git a/docs/working_with_registries_of_obsidian/unloading_registries.md b/docs/working_with_registries_of_obsidian/unloading_registries.md new file mode 100644 index 0000000..fea5b59 --- /dev/null +++ b/docs/working_with_registries_of_obsidian/unloading_registries.md @@ -0,0 +1,25 @@ +UNITADE provides a variety of functionalities to manage Obsidian's registry, one of which is the "Force-unload" functionality. This feature simulates disabling a plugin by reloading the registry of extensions in the vault to its default state. + +Upon clicking, this button causes the plugin to imitate the process of disabling extensions without actually removing them. Instead, it triggers a method that reloads the registry, restoring the default configuration of extensions. + +> [!Important] +> If you type default extensions, like mp4 or pdf, in any setting of UNITADE, they will be treated like custom extensions, not default ones. This means they will also be deleted from Obsidian's registry. + +Here is an example code of this trigger-method (it may differ in the source code): + +```typescript +private __unapply(upt_settings: UNITADE_SETTINGS): void { + if (this.is_mobile) { + this.__unapplyCfg(this.settings.mobile_settings.extensions ?? this.settings.extensions, upt_settings.markdown_overcharge); + } else { + this.__unapplyCfg(this.settings.extensions, upt_settings.markdown_overcharge); + } +} + +public unapply(): void { + this.__unapply(this.settings); +} +``` + +> [!Note] +> Since this is a public API of UNITADE's core, you can call this method from other places, like a custom plugin or the developer console. From 18a7a665494e76f8924e9e7806320c582854c532 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:53:38 +0300 Subject: [PATCH 41/63] chore(refactor): refactor wiki according to markdownlint --- docs/common_settings/case_insensitive_extensions_mode.md | 7 ++++--- docs/common_settings/markdown_overcharge.md | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/common_settings/case_insensitive_extensions_mode.md b/docs/common_settings/case_insensitive_extensions_mode.md index 410a788..c1a5287 100644 --- a/docs/common_settings/case_insensitive_extensions_mode.md +++ b/docs/common_settings/case_insensitive_extensions_mode.md @@ -7,6 +7,7 @@ This is the same problem for both VS Code and Obsidian any many other applicatio Linux not only provides any symbol available in the extensions of the filename, but also is a case-sensitive and because of this "strange" for common user behaviour occurs. **You can read more about this topic:** + - https://superuser.com/questions/881804/case-sensitive-file-extensions-in-windows-and-linux ### Practice @@ -33,9 +34,9 @@ Graphs datasets are defined by "appending" values by linear rule, meaning their 1. Output of the $O(n)$: -```shell -[...16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] -``` + ```shell + [...16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] + ``` 2. Output of the $O(n*2^n)$ of the same range: diff --git a/docs/common_settings/markdown_overcharge.md b/docs/common_settings/markdown_overcharge.md index e859c7d..39059dc 100644 --- a/docs/common_settings/markdown_overcharge.md +++ b/docs/common_settings/markdown_overcharge.md @@ -3,5 +3,4 @@ Markdown Overcharge toggle allows you to disable markdown reading and staging in > [!Note] > Markdown files will still remain in the Vault after enabling the toggle. However, if you try to open them, you will be redirected to other editors, or the system will prompt you to choose which app to use for opening the file. > -> For more details about this behavior, refer to the section:\ -> **"Phantom Views and Extensions"** in this wiki. +> For more information about this, read the wiki's page about phantom views and registries. From e0afb95642372a05aa68301d364ff0a87794556b Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:07:04 +0300 Subject: [PATCH 42/63] chore(wiki-move): remove wikipedia for escaping repetative files Wikipedia will be reimported after it is done on it's own repository. --- docs/_sidebar.md | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 docs/_sidebar.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index 14aa9d3..0000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,36 +0,0 @@ -1. Introduction -2. Common settings - 1. Markdown overcharge - 2. Extensions - 3. Mobile extensions - 4. Case-insensitive extensions mode -3. Working with registries of Obsidian - 1. Hard-deleting registries - 2. Unloading registries - 3. Hard-loading registries - 4. Reloading registries -4. Error handling - 1. Silencing errors -5. Advanced settings - 1. Forced extensions - 2. On-load registry - 3. On-load unsafe registry - 4. Barefiling (barefiles support) - 5. Ignore mode - 1. Ignoring extensions - 2. Ignoring files by regexp - 6. Grouped extensions -6. Code editor module - 1. Working with extensions - 2. Visual parameters - 3. Minimapping - 4. Validations - 5. Working with fonts -7. Additionals - 1. Debug mode -8. Compatibility module -9. API - 1. Plugin's open API for integrations - 2. About views and registries - 3. About files and workspaces - 4. Phantom views and extensions From 2ebee880ab09445e25ad2a169916ff1aaa6149d7 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:07:23 +0300 Subject: [PATCH 43/63] * --- .../case_insensitive_extensions_mode.md | 48 ------------------ docs/common_settings/extensions.md | 28 ---------- docs/common_settings/markdown_overcharge.md | 6 --- docs/common_settings/mobile_extensions.md | 8 --- docs/{res/image => images}/image001.png | Bin docs/{res/image => images}/image002.png | Bin docs/{res/image => images}/image003.png | Bin docs/introduction.md | 11 ---- .../hard_deleting_registries.md | 18 ------- .../unloading_registries.md | 25 --------- 10 files changed, 144 deletions(-) delete mode 100644 docs/common_settings/case_insensitive_extensions_mode.md delete mode 100644 docs/common_settings/extensions.md delete mode 100644 docs/common_settings/markdown_overcharge.md delete mode 100644 docs/common_settings/mobile_extensions.md rename docs/{res/image => images}/image001.png (100%) rename docs/{res/image => images}/image002.png (100%) rename docs/{res/image => images}/image003.png (100%) delete mode 100644 docs/introduction.md delete mode 100644 docs/working_with_registries_of_obsidian/hard_deleting_registries.md delete mode 100644 docs/working_with_registries_of_obsidian/unloading_registries.md diff --git a/docs/common_settings/case_insensitive_extensions_mode.md b/docs/common_settings/case_insensitive_extensions_mode.md deleted file mode 100644 index c1a5287..0000000 --- a/docs/common_settings/case_insensitive_extensions_mode.md +++ /dev/null @@ -1,48 +0,0 @@ -Obsidian, because of it's crossplatform support, does not treat extensions as case-insensitive, meaning both variations of `txt` and `TxT` are different extensions for the app. - -This is the same problem for both VS Code and Obsidian any many other applications if they simultaionasly support both Windows and UNIX-like system (e.g. Linux): this happens because in Windows, even if disk supports this feature, all the extensions are case-insensitive, meaning you can (only if not exceptional cases) write same extensions with differents between case and they would coexist, but treated as equals. - -> POSIX takes advantage of the full case sensitive mode, while MS-DOS, WOW, and Win32 subsystems use the case insensitive mode. - -Linux not only provides any symbol available in the extensions of the filename, but also is a case-sensitive and because of this "strange" for common user behaviour occurs. - -**You can read more about this topic:** - -- https://superuser.com/questions/881804/case-sensitive-file-extensions-in-windows-and-linux - -### Practice - -So, plugin supports both case-insensitive and case-sensitive extensions system, and if it TURNED ON, every extension typed in every setting would be put through generator-function which creates $n*2^n$ combinations of upper- and lower-cases symbols for the extension, meaning: - -```bash -txt -> [txT, tXt, Txt, tXT... TXT]; -``` - -This feature is not turned on by default because of it's RAM usage and common algorithm complexity of $O(n*2^n)$ which can take humongous amounts of device computational resources. - -**Little graphs to visualize computational differences:** - -![graph1](./../res/image/image001.png) -![graph2](./../res/image/image003.png) - -> [!Important] -> Note how in the second graph the data is not in sync with the math graph defined by functions. - -Second graph shows exact reason why case-insensitive mode can be dangerous, lets dive in the data behind the graph to understand what is happening. - -Graphs datasets are defined by "appending" values by linear rule, meaning their output looks like this: - -1. Output of the $O(n)$: - - ```shell - [...16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] - ``` - -2. Output of the $O(n*2^n)$ of the same range: - -```shell -[1048576, 2228224, 4718592, 9961472, 20971520, 44040192, 92274688, 192937984, 402653184, 838860800, 1744830464, 3623878656, 7516192768, 15569256448, 32212254720] -``` - -> [!Note] -> This row of numbers can't even be visualized correctly by Python's library `matploblib` for visualization because it breaks the scales, in case of JavaScript (TypeScript) numbers and collections behaviour would be worse, because Python deals with them better. diff --git a/docs/common_settings/extensions.md b/docs/common_settings/extensions.md deleted file mode 100644 index 74d6ccb..0000000 --- a/docs/common_settings/extensions.md +++ /dev/null @@ -1,28 +0,0 @@ -UNITADE supports displaying any file as it is in your Obsidian Vault and allows you to "read" it, but this setting has its own prerequisites: - -1. While it is the fastest way to enable file reading in your Vault, you need to understand that this setting treats every extension as a Markdown file (`markdown` view in the Obsidian registry). This means that Obsidian's behavior with certain symbols may interfere with how extensions function. - - Example: [issue #73](https://github.com/Falcion/UNITADE.md/issues/73) -2. Theoretically, with this setting enabled, Obsidian would try to "parse" every file as Markdown. Therefore, binary files ARE NOT RECOMMENDED to be included in this setting. Although this issue has not been replicated and is not due to the plugin, it is still advised to proceed with caution. - -**Input example and how the plugin reads it:** - -```bash -# Example of input from UI (String: type) -data; txt; json; js; data.json; ;; m,d - -# Output (String[]: type) -['data', 'txt', 'json', 'js', 'data.json', ' ', '', 'm,d'] -``` - -Strings are split by the `;` symbol because it is not supported in filenames on Windows systems and is considered bad practice for naming files in UNIX. - -> [!Warning] -> Keep in mind, if you include a `;` at the end of the input, the program will try to parse "empty" extensions again. This is because the program splits the input string and iterates through each parameter. - -### Minor Features - -The default extensions setting has minor features, or "hacks," as mentioned in the example above: - -1. If you type `;;` in the input, it will support files without extensions. In the plugin environment, these are called "barefiles," and their support is referred to as "barefiling." After this input, your Vault will accept files like `data` or `config` with no extensions. -2. The input splitter for extensions trims extensions ONLY AT THE START, so you can include spaces to visually "separate" your inputs. - - If the input is `' '` (or entered as `; ;` by the user), it won't be trimmed and will remain the same. diff --git a/docs/common_settings/markdown_overcharge.md b/docs/common_settings/markdown_overcharge.md deleted file mode 100644 index 39059dc..0000000 --- a/docs/common_settings/markdown_overcharge.md +++ /dev/null @@ -1,6 +0,0 @@ -Markdown Overcharge toggle allows you to disable markdown reading and staging in your Obsidian Vault. When enabled, this feature removes `.md` file extensions from the app’s view registry. - -> [!Note] -> Markdown files will still remain in the Vault after enabling the toggle. However, if you try to open them, you will be redirected to other editors, or the system will prompt you to choose which app to use for opening the file. -> -> For more information about this, read the wiki's page about phantom views and registries. diff --git a/docs/common_settings/mobile_extensions.md b/docs/common_settings/mobile_extensions.md deleted file mode 100644 index ca6419f..0000000 --- a/docs/common_settings/mobile_extensions.md +++ /dev/null @@ -1,8 +0,0 @@ -Mobile extensions are a sub-configuration of the extension settings within the UNITADE plugin, specifically activated when Obsidian is used on a mobile device. - -These mobile extensions mimic the default extension settings but are tailored for mobile-specific configurations and plugin instances. This can be especially useful when you access your Vault via Obsidian Sync on your phone. - -> [!Note] -> In cases where the configuration is corrupted or encounters unforeseen issues, the plugin will attempt to initialize the default configuration. Therefore, when working with mobile devices, it’s recommended to sync both the default and mobile extension configurations to avoid potential conflicts. - -This module is only displayed on mobile devices, or when manually enabled through a special toggle button on the settings page. diff --git a/docs/res/image/image001.png b/docs/images/image001.png similarity index 100% rename from docs/res/image/image001.png rename to docs/images/image001.png diff --git a/docs/res/image/image002.png b/docs/images/image002.png similarity index 100% rename from docs/res/image/image002.png rename to docs/images/image002.png diff --git a/docs/res/image/image003.png b/docs/images/image003.png similarity index 100% rename from docs/res/image/image003.png rename to docs/images/image003.png diff --git a/docs/introduction.md b/docs/introduction.md deleted file mode 100644 index 58f1a03..0000000 --- a/docs/introduction.md +++ /dev/null @@ -1,11 +0,0 @@ -Welcome to the UNITADE.md (or just "UNITADE") plugin’s wikipedia page. Here you will find comprehensive documentation and detailed information about the plugin's features, including insights into file views and registries. - -> This wiki is a living document and may be periodically updated as new features and improvements are added. - -UNITADE, derived from the Latin term for "united" or "unity," is a plugin developed for [Obsidian](https://obsidian.md). It extends the capabilities of Obsidian by enabling users to work with non-markdown files, including those that are not natively supported by the software. Initially, UNITADE.md started as a small project designed to bypass the need to open external editors, such as VS Code or IDEs, to view code and write documentation for projects. Over time, it has grown into a powerful tool that offers users an experience similar to working within a code editor, allowing for much greater flexibility and functionality within Obsidian. - -The plugin supports any language that Obsidian itself supports, although certain translations may not be available yet. - -Users are encouraged to contribute translations, not only for the plugin but also for this wiki, which will benefit from the community’s input. For guidelines on how to contribute, please refer to the [Contribution Policy of UNITADE](https://github.com/Falcion/UNITADE.md/blob/main/.github/CONTRIBUTING.md) and the general [GitHub Documentation on Contributing to a Project](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project). - -By contributing to UNITADE.md, you help build a more inclusive and comprehensive experience for all users. diff --git a/docs/working_with_registries_of_obsidian/hard_deleting_registries.md b/docs/working_with_registries_of_obsidian/hard_deleting_registries.md deleted file mode 100644 index 75ae21a..0000000 --- a/docs/working_with_registries_of_obsidian/hard_deleting_registries.md +++ /dev/null @@ -1,18 +0,0 @@ -UNITADE provides several functionalities to work with Obsidian's registry: one of them is the so-called "Hard-delete" functionality. - -Upon clicking, this button launches a special method, which reads every extension registered in the Obsidian Vault and then unregisters them by a specified private API method of Obsidian. - -Here is an example code of this method (it may differ in the source code): - -```typescript -public unapplyRegistry(): void { - /**@ts-expect-error: not part of public API, accessing through runtime. */ - for (const extensionKey in this.app.viewRegistry.typeByExtension) { - /**@ts-expect-error: not part of public API, accessing through runtime. */ - this.app.viewRegistry.unregisterExtensions([extensionKey]); - } -} -``` - -> [!Note] -> Since this is a public API of UNITADE's core, you can call this method from other places, like a custom plugin or the developer console. diff --git a/docs/working_with_registries_of_obsidian/unloading_registries.md b/docs/working_with_registries_of_obsidian/unloading_registries.md deleted file mode 100644 index fea5b59..0000000 --- a/docs/working_with_registries_of_obsidian/unloading_registries.md +++ /dev/null @@ -1,25 +0,0 @@ -UNITADE provides a variety of functionalities to manage Obsidian's registry, one of which is the "Force-unload" functionality. This feature simulates disabling a plugin by reloading the registry of extensions in the vault to its default state. - -Upon clicking, this button causes the plugin to imitate the process of disabling extensions without actually removing them. Instead, it triggers a method that reloads the registry, restoring the default configuration of extensions. - -> [!Important] -> If you type default extensions, like mp4 or pdf, in any setting of UNITADE, they will be treated like custom extensions, not default ones. This means they will also be deleted from Obsidian's registry. - -Here is an example code of this trigger-method (it may differ in the source code): - -```typescript -private __unapply(upt_settings: UNITADE_SETTINGS): void { - if (this.is_mobile) { - this.__unapplyCfg(this.settings.mobile_settings.extensions ?? this.settings.extensions, upt_settings.markdown_overcharge); - } else { - this.__unapplyCfg(this.settings.extensions, upt_settings.markdown_overcharge); - } -} - -public unapply(): void { - this.__unapply(this.settings); -} -``` - -> [!Note] -> Since this is a public API of UNITADE's core, you can call this method from other places, like a custom plugin or the developer console. From b85563ec47f46537877d9b996bfdded59590febb Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:21:41 +0300 Subject: [PATCH 44/63] feat(locale): implement localization for errors --- source/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/main.ts b/source/main.ts index 66e218d..b2ed163 100644 --- a/source/main.ts +++ b/source/main.ts @@ -345,7 +345,7 @@ export default class UNITADE_PLUGIN extends Plugin { return new UNITADE_VIEW(leaf, extension); }); } catch (err: any) { - this.settings.errors[extension] = `Error from UNITADE plugin: ${err}`; + this.settings.errors[extension] = `${this.locale.getLocaleItem('ERROR_COMMON_MESSAGE')[0]!} ${err}`; if (!this.settings.silence_errors) { new Notification(this.locale.getLocaleItem('ERROR_COMMON_MESSAGE')[0]!, { body: `${err}` }); From 03f70dd1760565c66bc502f6147e35d4118f35c2 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:28:15 +0300 Subject: [PATCH 45/63] fix(registry): fix OLR system reading only last, fix of #75 --- source/main.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/source/main.ts b/source/main.ts index b2ed163..ff170f9 100644 --- a/source/main.ts +++ b/source/main.ts @@ -113,20 +113,22 @@ export default class UNITADE_PLUGIN extends Plugin { } if (this.settings.is_onload) { - if (this.settings.ignore_extensions.split(';').includes(filename.last()!) && this.settings.is_ignore) + const total_extension = filename.join('.'); + + if (this.settings.ignore_extensions.split(';').includes(total_extension!) && this.settings.is_ignore) return; - if (this.settings.extensions.split(';').includes(filename.last()!)) + if (this.settings.extensions.split(';').includes(total_extension!)) return; if (this.settings.mobile_settings.enable && - this.settings.mobile_settings.extensions.split(';').includes(filename.last()!)) + this.settings.mobile_settings.extensions.split(';').includes(total_extension!)) return; try { - this.__tryApply(filename.last()!, 'markdown'); + this.__tryApply(total_extension!, 'markdown'); const __settings = this.settings.extensions.split(';'); - __settings.push(`${filename.last()!}`); + __settings.push(`${total_extension!}`); this.settings.extensions = __settings.join(';'); @@ -134,7 +136,7 @@ export default class UNITADE_PLUGIN extends Plugin { const __mb_settings = this.settings.mobile_settings.extensions.split(';'); - __mb_settings.push(`${filename.last()!}`); + __mb_settings.push(`${total_extension!}`); this.settings.mobile_settings.extensions = __mb_settings.join(';'); } From 7a38b2c280fd041640e117b4afd8125d511bda5f Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:40:18 +0300 Subject: [PATCH 46/63] fix(settings): fix example in settings to new grouped extensions config --- source/settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/settings.ts b/source/settings.ts index 8d83436..933a15d 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -682,7 +682,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { groupMsg.nameEl.appendChild(groupedWarn); const groupExtInp = new TextAreaComponent(containerEl) - .setPlaceholder('md: json, txt, pgb; json: data, md, txt;') + .setPlaceholder('markdown: json> txt> pgb; pdf: pdf; video: webm;') .setValue(this.plugin.settings.grouped_extensions) .onChange(async (value) => { const next = { From 270eac202a75721afaf2906ff61451034a712c37 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:55:42 +0300 Subject: [PATCH 47/63] chore(codebase): mark apply method within JSDocs and `//!` --- source/main.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/main.ts b/source/main.ts index ff170f9..2c8084f 100644 --- a/source/main.ts +++ b/source/main.ts @@ -324,6 +324,32 @@ export default class UNITADE_PLUGIN extends Plugin { this.__apply(); } + //! MAIN METHOD OF ENTIRE PLUGIN: + //! Configures and applies everything from the settings. + /** + * This method configures and applies the settings for grouped extensions, mobile settings, + * and forced extensions in the UNITADE plugin. It parses and applies configurations based on + * the current plugin settings. The method works differently for grouped extensions, mobile extensions, + * and forced extensions, handling each case according to the settings provided by the user. + * + * ### Grouped Extensions: + * If the `is_grouped` setting is enabled, it parses the `grouped_extensions` string into key-value pairs + * where each key is a view (such as 'markdown', 'pdf') and each value is an array of extensions. The method + * applies these configurations for each view by calling `__applyCfg`. + * + * ### Mobile Settings: + * If the plugin is running in a mobile environment (`is_mobile` is true), the mobile extensions are configured. + * It applies either the mobile-specific extensions or falls back to the default extensions, then configures + * the 'markdown' view for those extensions. + * + * ### Forced Extensions: + * The method also processes forced extensions, registering custom views for each forced extension defined + * in the settings. If an error occurs during this registration, it logs the error in the `errors` object and + * optionally displays a notification or logs a debug message if `silence_errors` is enabled. + * + * @private + * @returns {void} + */ private __apply(): void { if (this.settings.is_grouped) { const data: { [key: string]: string[] } = parsegroup(this.settings.grouped_extensions); From 433c61b5c980350b728cf5caf2fe8e484f1f9821 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:06:56 +0300 Subject: [PATCH 48/63] feat!(settings): moving semantics towards `>` instead `;` --- source/settings.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/settings.ts b/source/settings.ts index 933a15d..b7789ed 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -194,7 +194,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setDesc(this.locale.getLocaleItem('SETTINGS_EXTENSIONS')[1]!); const configInput = new TextAreaComponent(containerEl) - .setPlaceholder('txt; conf; config; data; logs') + .setPlaceholder('txt> conf> config> data> logs') .setValue(this.plugin.settings.extensions) .onChange(async (value) => { const next = { @@ -275,7 +275,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); const mobileConfigInp = new TextAreaComponent(containerEl) - .setPlaceholder('txt; conf; config; data; logs') + .setPlaceholder('txt> conf> config> data> logs') .setValue(this.plugin.settings.mobile_settings.extensions ? this.plugin.settings.mobile_settings.extensions : '') .onChange(async (value) => { const next = { @@ -410,7 +410,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { forcedMsg.nameEl.appendChild(forcedWarn); const frcExtInp = new TextAreaComponent(containerEl) - .setPlaceholder('txt; md; ; data; db;') + .setPlaceholder('txt> md> > data> db') .setValue(this.plugin.settings.forced_extensions) .onChange(async (value) => { const next = { @@ -573,7 +573,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setDesc(this.locale.getLocaleItem('SETTINGS_IGNORE_EXTENSIONS')[1]!); const ignoreExtInp = new TextAreaComponent(containerEl) - .setPlaceholder('txt; conf; config; data; logs') + .setPlaceholder('txt> conf> config> data> logs') .setValue(this.plugin.settings.ignore_extensions) .onChange(async (value) => { const next = { @@ -612,7 +612,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { .setDesc(this.locale.getLocaleItem('SETTINGS_IGNORE_FILES')[1]!); const ignoreMskInp = new TextAreaComponent(containerEl) - .setPlaceholder('\\.(txt|md)$; doc_[a-z]; file_\\d{3}; file1') + .setPlaceholder('\\.(txt|md)$> doc_[a-z]> file_\\d{3}> file1') .setValue(this.plugin.settings.ignore_masks) .onChange(async (value) => { const next = { @@ -776,7 +776,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }); const editorExtensionsInput = new TextAreaComponent(containerEl) - .setPlaceholder('txt; conf; config; data; logs') + .setPlaceholder('txt> conf> config> data> logs') .setValue(this.plugin.settings.code_editor_settings.extensions) .onChange(async (value) => { const next = { From 492802c2e3f4b8d37b07ce94b1296b8424038aef Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:07:47 +0300 Subject: [PATCH 49/63] feat!(settings): moving semantics towards `>` instead `;` --- source/main.ts | 70 ++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/source/main.ts b/source/main.ts index 2c8084f..4a26b71 100644 --- a/source/main.ts +++ b/source/main.ts @@ -94,7 +94,7 @@ export default class UNITADE_PLUGIN extends Plugin { if (isTFolder(file)) return; if (this.settings.is_ignore) { - for (const mask of this.settings.ignore_masks.split(';')) { + for (const mask of this.settings.ignore_masks.split('>')) { const _mask = mask.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); try { @@ -115,30 +115,30 @@ export default class UNITADE_PLUGIN extends Plugin { if (this.settings.is_onload) { const total_extension = filename.join('.'); - if (this.settings.ignore_extensions.split(';').includes(total_extension!) && this.settings.is_ignore) + if (this.settings.ignore_extensions.split('>').includes(total_extension!) && this.settings.is_ignore) return; - if (this.settings.extensions.split(';').includes(total_extension!)) + if (this.settings.extensions.split('>').includes(total_extension!)) return; if (this.settings.mobile_settings.enable && - this.settings.mobile_settings.extensions.split(';').includes(total_extension!)) + this.settings.mobile_settings.extensions.split('>').includes(total_extension!)) return; try { this.__tryApply(total_extension!, 'markdown'); - const __settings = this.settings.extensions.split(';'); + const __settings = this.settings.extensions.split('>'); __settings.push(`${total_extension!}`); - this.settings.extensions = __settings.join(';'); + this.settings.extensions = __settings.join('>'); if (this.settings.mobile_settings.enable) { - const __mb_settings = this.settings.mobile_settings.extensions.split(';'); + const __mb_settings = this.settings.mobile_settings.extensions.split('>'); __mb_settings.push(`${total_extension!}`); - this.settings.mobile_settings.extensions = __mb_settings.join(';'); + this.settings.mobile_settings.extensions = __mb_settings.join('>'); } } catch (err: any) { if (!this.settings.silence_errors) { @@ -155,29 +155,29 @@ export default class UNITADE_PLUGIN extends Plugin { const extensions: string[] = filename; for (const extension of extensions) { - if (this.settings.ignore_extensions.split(';').includes(extension) && this.settings.is_ignore) + if (this.settings.ignore_extensions.split('>').includes(extension) && this.settings.is_ignore) return; - if (this.settings.extensions.split(';').includes(extension)) + if (this.settings.extensions.split('>').includes(extension)) return; if (this.settings.mobile_settings.enable && - this.settings.mobile_settings.extensions.split(';').includes(extension)) + this.settings.mobile_settings.extensions.split('>').includes(extension)) return; try { this.__tryApply(extension, 'markdown'); - const __settings = this.settings.extensions.split(';'); + const __settings = this.settings.extensions.split('>'); __settings.push(`${extension}`); - this.settings.extensions = __settings.join(';'); + this.settings.extensions = __settings.join('>'); if (this.settings.mobile_settings.enable) { - const __mb_settings = this.settings.mobile_settings.extensions.split(';'); + const __mb_settings = this.settings.mobile_settings.extensions.split('>'); __mb_settings.push(`${extension}`); - this.settings.mobile_settings.extensions = __mb_settings.join(';'); + this.settings.mobile_settings.extensions = __mb_settings.join('>'); } } catch (err: any) { if (!this.settings.silence_errors) { @@ -330,23 +330,7 @@ export default class UNITADE_PLUGIN extends Plugin { * This method configures and applies the settings for grouped extensions, mobile settings, * and forced extensions in the UNITADE plugin. It parses and applies configurations based on * the current plugin settings. The method works differently for grouped extensions, mobile extensions, - * and forced extensions, handling each case according to the settings provided by the user. - * - * ### Grouped Extensions: - * If the `is_grouped` setting is enabled, it parses the `grouped_extensions` string into key-value pairs - * where each key is a view (such as 'markdown', 'pdf') and each value is an array of extensions. The method - * applies these configurations for each view by calling `__applyCfg`. - * - * ### Mobile Settings: - * If the plugin is running in a mobile environment (`is_mobile` is true), the mobile extensions are configured. - * It applies either the mobile-specific extensions or falls back to the default extensions, then configures - * the 'markdown' view for those extensions. - * - * ### Forced Extensions: - * The method also processes forced extensions, registering custom views for each forced extension defined - * in the settings. If an error occurs during this registration, it logs the error in the `errors` object and - * optionally displays a notification or logs a debug message if `silence_errors` is enabled. - * + * and forced extensions and etc, handling each case according to the settings provided by the user. * @private * @returns {void} */ @@ -355,7 +339,7 @@ export default class UNITADE_PLUGIN extends Plugin { const data: { [key: string]: string[] } = parsegroup(this.settings.grouped_extensions); for (const view in data) { - this.__applyCfg(data[view].join(';'), view); + this.__applyCfg(data[view].join('>'), view); } } @@ -365,7 +349,7 @@ export default class UNITADE_PLUGIN extends Plugin { this.__applyCfg(this.settings.extensions, 'markdown'); } - const forced_extensions = this.settings.forced_extensions.split(';').map(s => s.trim()); + const forced_extensions = this.settings.forced_extensions.split('>').map(s => s.trim()); for (const extension of forced_extensions) { try { @@ -441,16 +425,22 @@ export default class UNITADE_PLUGIN extends Plugin { /**@ts-expect-error: not part of public API, accessing through runtime. */ console.info(this.app.viewRegistry.typeByExtension); - const extensions_arr: string[] = extensions.split(';').map(s => s.trim()); + const extensions_arr: string[] = extensions.split('>').map(s => s.trim()); for (const extension of extensions_arr) { - if (this.settings.is_ignore && this.settings.ignore_extensions.split(';').includes(extension)) + if (this.settings.is_ignore && this.settings.ignore_extensions.split('>').includes(extension)) continue; - const rnd_filetype = gencase(extension); + // If we ignore case difference (example: Windows systems) + if(this.settings.is_case_insensitive) { + const rnd_filetype = gencase(extension); - for (const type of rnd_filetype) - this.__tryApply(type, view); + for (const type of rnd_filetype) + this.__tryApply(type, view); + } // Case sensitive (UNIX-like) + else { + this.__tryApply(extension, view); + } } } @@ -475,7 +465,7 @@ export default class UNITADE_PLUGIN extends Plugin { } private __unapplyCfg(extensions: string, markdown_charge: boolean) { - const ext_arr: string[] = extensions.split(';').map(s => s.trim()); + const ext_arr: string[] = extensions.split('>').map(s => s.trim()); for (const extension of ext_arr) if (markdown_charge || extension !== 'md') From 47b5f80f6ed34cf5652ba997676669c5332aeab5 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:10:45 +0300 Subject: [PATCH 50/63] feat(compatibility): adapt compatibility module to new `>` semantics --- source/addons/compatibility.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/addons/compatibility.ts b/source/addons/compatibility.ts index 41ed019..9649b9d 100644 --- a/source/addons/compatibility.ts +++ b/source/addons/compatibility.ts @@ -34,19 +34,27 @@ export default class CompatibilityModule { private async convert(data: any, version: string): Promise { const settingsMap: { [key: string]: any } = { '1.*': { - extensions: data['extensions'].replace(',', ';'), - forced_extensions: data['force_extensions'].replace(',', ';'), + extensions: data['extensions'].replace(',', '>'), + forced_extensions: data['force_extensions'].replace(',', '>'), is_onload: Boolean(data['is_dynamic_on']), }, '2.0': { - extensions: data['extensions'].replace(',', ';'), + extensions: data['extensions'].replace(',', '>'), grouped_extensions: data['grouped_extensions'].replace(',', '>'), }, '2.1': { grouped_extensions: data['grouped_extensions'].replace(',', '>'), + extensions: data['extensions'].replace(';', '>'), + forced_extensions: data['forced_extensions'].replace(';', '>'), + ignore_extensions: data['ignore_extensions'].replace(';', '>'), + ignore_masks: data['ignore_masks'].replace(';', '>'), }, '2.4': { grouped_extensions: data['grouped_extensions'].replace(',', '>'), + extensions: data['extensions'].replace(';', '>'), + forced_extensions: data['forced_extensions'].replace(';', '>'), + ignore_extensions: data['ignore_extensions'].replace(';', '>'), + ignore_masks: data['ignore_masks'].replace(';', '>'), }, }; From 36144de0ddb62aad98f6adf469e947b8d77aab43 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 18:04:53 +0300 Subject: [PATCH 51/63] refactor(naming): now UNITADE's view names correspondingly to stack it uses --- source/components/view.ts | 90 --------------------------------------- source/main.ts | 2 +- 2 files changed, 1 insertion(+), 91 deletions(-) delete mode 100644 source/components/view.ts diff --git a/source/components/view.ts b/source/components/view.ts deleted file mode 100644 index 279bbd1..0000000 --- a/source/components/view.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2023-2024 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. - */ - -import { - TextFileView, - WorkspaceLeaf, -} from "obsidian"; - -import CodeMirror from './../../lib/codemirror'; - -export default class UNITADE_VIEW extends TextFileView { - private _codemirror: CodeMirror.Editor; - - private _extension: string = ''; - - constructor(leaf: WorkspaceLeaf, extension: string) { - super(leaf); - - this._extension = extension; - - - this._codemirror = CodeMirror(this.contentEl, { - theme: 'obsidian', - }); - - this._codemirror.on('changes', this.onChange); - } - - onResize(): void { - this._codemirror.refresh(); - } - - onChange = async () => { - this.requestSave(); - } - - getViewData(): string { - return this._codemirror.getValue(); - } - - setViewData(data: string, clear: boolean): void { - if (clear) - this._codemirror.swapDoc(CodeMirror.Doc(data, `text/x-${this._extension}`)); - else - this._codemirror.setValue(data); - } - - clear(): void { - this._codemirror.setValue(''); - this._codemirror.clearHistory(); - } - - getDisplayText(): string { - if (this.file) - return this.file.basename; - else - return 'no file'; - } - - canAcceptExtension(extension: string): boolean { - return extension === this._extension; - } - - getViewType(): string { - return this._extension; - } -} diff --git a/source/main.ts b/source/main.ts index 4a26b71..e6ea706 100644 --- a/source/main.ts +++ b/source/main.ts @@ -37,7 +37,7 @@ import UNITADE_SETTINGS_TAB, { DEFAULT_SETTINGS, } from './settings'; -import UNITADE_VIEW from './components/view'; +import UNITADE_VIEW from './components/views/view_codemirror'; import CodeMirror from './../lib/codemirror'; From d24fc8207235c037dd4ca030edad8bf967ac73c2 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:19:36 +0300 Subject: [PATCH 52/63] feat(settings): add some little graphics and additions to the settings tab --- source/settings.ts | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/source/settings.ts b/source/settings.ts index b7789ed..f363bcf 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -741,7 +741,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { await this.__updateErrors(); this.__uptCEConfig([ - useDefaultExtensions, editorExtensionsInput, editorTheme, + useDefaultExtensions, editorExtensionsInput, codeExtensionsWarn, editorTheme, editorFolding, editorWordWrapping, editorLineNumbers, editorMinimapping, editorValidationSemantic, editorValidationSyntax, editorFontSize, editorFontFamily, editorFontLigatures @@ -769,7 +769,10 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { await this.plugin.uptSettings(next); - editorExtensionsInput.inputEl.style.display = toggle ? 'block' : 'none'; + this.__uptCEConfig([editorExtensionsInput, codeExtensionsWarn], !value); + + if(this.plugin.settings.debug_mode) + console.debug(`HIDE EDITOR EXTENSIONS? =${value ? 'NO.' : 'YES.'}`); }); return toggle; @@ -810,6 +813,18 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { this.__updateErrors(); }); + const codeExtensionsWarn = new Setting(containerEl) + .setName('') + .setDesc(''); + + const codeExtensionsText = document.createElement('div'); + codeExtensionsText.style.fontSize = '80%'; + codeExtensionsText.style.margin = '10px'; + codeExtensionsText.style.color = 'green'; + codeExtensionsText.innerHTML = 'Be aware, this extensions must be excluding from every other, otherwise error with rendering may occure, to "clone" extensions, use specified feature.'; + + codeExtensionsWarn.infoEl.appendChild(codeExtensionsText); + editorExtensionsInput.inputEl.style.width = '100%'; editorExtensionsInput.inputEl.style.height = '48px'; editorExtensionsInput.inputEl.style.minHeight = '36px'; @@ -956,6 +971,9 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { }, }; + if(this.plugin.settings.debug_mode) + console.debug('CAUGHT THEME FOR THE EDITOR:' + `${value};`); + await this.plugin.uptSettings(next); this.__updateErrors(); @@ -1184,7 +1202,7 @@ export default class UNITADE_SETTINGS_TAB extends PluginSettingTab { this._errors!.innerHTML = 'None'; this._errors!.style.color = 'green'; } else { - this._errors!.innerHTML = `Errors:
    ${Object.keys(this.plugin.settings.errors) + this._errors!.innerHTML = `
      ${Object.keys(this.plugin.settings.errors) .map((k) => `
    • ${k}: ${this.plugin.settings.errors[k]}
    • `) .join('')}
    `; this._errors!.style.color = 'red'; From 473591f4568cd3462fb2248f75a26e3a2f1a7ea1 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:19:58 +0300 Subject: [PATCH 53/63] feat!(common): add code editor in the plugin --- source/components/views/view_monaco.ts | 209 +++++++++++++++++++++++++ source/main.ts | 116 +++++++++++++- 2 files changed, 319 insertions(+), 6 deletions(-) create mode 100644 source/components/views/view_monaco.ts diff --git a/source/components/views/view_monaco.ts b/source/components/views/view_monaco.ts new file mode 100644 index 0000000..b3a6463 --- /dev/null +++ b/source/components/views/view_monaco.ts @@ -0,0 +1,209 @@ +import { TextFileView, TFile, WorkspaceLeaf } from "obsidian"; +import * as monaco from 'monaco-editor'; +import { genEditorSettings } from "../../utils/utils"; +import UNITADE_PLUGIN from "../../main"; + +/** + * The `UNITADE_VIEW_CODE` class provides a code editor view powered by the Monaco Editor. + * It is designed for the UNITADE plugin and is responsible for handling file loading, saving, + * and providing an enhanced code editing experience within Obsidian. + */ +export class UNITADE_VIEW_CODE extends TextFileView { + + value = ""; + monacoEditor: monaco.editor.IStandaloneCodeEditor | undefined; + + /** + * Creates an instance of the `UNITADE_VIEW_CODE`. + * + * @param leaf - The workspace leaf associated with this view. + * @param plugin - Reference to the `CodeFilesPlugin` instance. + */ + constructor(leaf: WorkspaceLeaf, private plugin: UNITADE_PLUGIN) { + super(leaf); + } + + /** + * Executes when the view is opened. Initializes necessary components. + */ + async onOpen() { + await super.onOpen(); + } + + /** + * Loads a file into the Monaco editor. + * + * @param file - The TFile instance representing the file to be loaded. + */ + async onLoadFile(file: TFile) { + // Generate editor settings based on the plugin's configuration and file extension + const setting = genEditorSettings(this.plugin.settings, this.file?.extension ?? ""); + this.monacoEditor = monaco.editor.create(this.contentEl, setting); + + // Trigger file save when editor content changes + this.monacoEditor.onDidChangeModelContent(() => { + this.requestSave(); + }); + + this.addCtrlKeyWheelEvents(); + this.addKeyEvents(); + + await super.onLoadFile(file); + } + + /** + * Unloads the current file, removes event listeners, and disposes of the Monaco editor. + * + * @param file - The TFile instance representing the file being unloaded. + */ + async onUnloadFile(file: TFile) { + window.removeEventListener('keydown', this.keyHandle, true); + await super.onUnloadFile(file); + + this.monacoEditor!.dispose(); + } + + /** + * Executes when the view is closed. + */ + async onClose() { + await super.onClose(); + } + + /** + * Recalculates the layout of the Monaco editor when the view is resized. + */ + onResize() { + this.monacoEditor!.layout(); + } + + /** + * Retrieves the view type for this instance. + * + * @returns The view type as a string. + */ + getViewType(): string { + return 'codeview'; + } + + /** + * Retrieves the file path for the current context. + * + * @param file - Optional TFile instance representing the current file. + * @returns The file path or undefined if no file is loaded. + */ + getContext(file?: TFile) { + return file?.path ?? this.file?.path; + } + + /** + * Retrieves the current content of the editor. + * + * @returns The current editor content as a string. + */ + getViewData = (): string => { + return this.monacoEditor!.getValue(); + } + + /** + * Sets the content of the editor. + * + * @param data - The string content to be set in the editor. + * @param clear - If true, clears the current content before setting the new data. + */ + setViewData = (data: string, clear: boolean) => { + if (clear) { + this.monacoEditor!.getModel()?.setValue(data); + } else { + this.monacoEditor!.setValue(data); + } + } + + /** + * Clears the editor's content. + */ + clear = () => { + this.monacoEditor!.setValue(''); + } + + /** + * Adds event listeners for keyboard shortcuts in the editor. + */ + private addKeyEvents = () => { + window.addEventListener('keydown', this.keyHandle, true); + } + + /** + * Adds event listeners for handling `Ctrl` + mouse wheel events to adjust font size. + */ + private addCtrlKeyWheelEvents = () => { + this.containerEl.addEventListener('wheel', this.mousewheelHandle, true); + } + + /** + * Handles specific key events such as `Ctrl + f` for search or `Alt + z` for toggling word wrap. + * + * @param event - The keyboard event. + */ + private keyHandle = (event: KeyboardEvent) => { + const ctrlMap = new Map([ + ['f', 'actions.find'], + ['h', 'editor.action.startFindReplaceAction'], + ['/', 'editor.action.commentLine'], + ['Enter', 'editor.action.insertLineAfter'], + ['[', 'editor.action.outdentLines'], + [']', 'editor.action.indentLines'], + ['d', 'editor.action.copyLinesDownAction'], + ]); + + if (event.ctrlKey) { + const triggerName = ctrlMap.get(event.key); + if (triggerName) { + this.monacoEditor!.trigger('', triggerName, null); + } + } + + if (event.altKey) { + if (event.key === 'z') { + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + word_wrapping: !this.plugin.settings.code_editor_settings.word_wrapping, + }, + }; + + this.plugin.uptSettings(next); + this.monacoEditor!.updateOptions({ + wordWrap: this.plugin.settings.code_editor_settings.word_wrapping ? "on" : "off", + }); + } + } + } + + /** + * Handles `Ctrl + mouse wheel` events to adjust font size in the editor. + * + * @param event - The wheel event. + */ + private mousewheelHandle = (event: WheelEvent) => { + if (event.ctrlKey) { + const delta = event.deltaY > 0 ? 1 : -1; + + const next = { + ...this.plugin.settings, + code_editor_settings: { + ...this.plugin.settings.code_editor_settings, + font_size: this.plugin.settings.code_editor_settings.font_size += delta, + }, + } + + this.plugin.uptSettings(next); + this.monacoEditor!.updateOptions({ + fontSize: this.plugin.settings.code_editor_settings.font_size, + }); + + event.stopPropagation(); + } + } +} diff --git a/source/main.ts b/source/main.ts index e6ea706..2069cb9 100644 --- a/source/main.ts +++ b/source/main.ts @@ -43,16 +43,16 @@ import CodeMirror from './../lib/codemirror'; import { TFileEdit -} from './components/file-edit'; +} from './components/modals/file-edit'; import { TFileCreate -} from './components/file-create'; +} from './components/modals/file-create'; import { TFilesEdit -} from './components/files-edit'; +} from './components/modals/files-edit'; import { TFolderEdit -} from './components/folder-edit'; +} from './components/modals/folder-edit'; import { isTFolder @@ -63,13 +63,38 @@ import { gencase, parsegroup } from './utils/functions'; -import { TFilesRename } from './components/files-rename'; +import { TFilesRename } from './components/modals/files-rename'; import CONSTANTS from './utils/constants'; import LocalesModule from './locales/core'; +import { UNITADE_VIEW_CODE } from './components/views/view_monaco'; +import { ContextEditor } from './components/contexts/contextEditor'; +import { FenceEditModal } from './components/modals/codeblock-edit'; +import { ContextEditCodeblocks } from './components/contextEditCodeblock'; + +declare module "obsidian" { + interface Workspace { + on( + name: "hover-link", + callback: (e: MouseEvent) => any, + ctx?: any, + ): EventRef; + } +} export default class UNITADE_PLUGIN extends Plugin { private _settings: UNITADE_SETTINGS = DEFAULT_SETTINGS; private _locale: LocalesModule = new LocalesModule(); + private _observer!: MutationObserver; + + public hover: { + linkText: string; + sourcePath: string; + event: MouseEvent; + } = { + linkText: "", + sourcePath: "", + event: new MouseEvent(""), + }; public get settings(): UNITADE_SETTINGS { return this._settings; @@ -202,6 +227,65 @@ export default class UNITADE_PLUGIN extends Plugin { this.registerEvent(this.__ctxEditExt()); this.registerEvent(this.__ctxEditExts()); + this.registerEvent(this.__ctxFence()); + + this._observer = new MutationObserver(async (mutations) => { + const mutation = mutations[0]; + if (mutations.length !== 1 || mutation.addedNodes.length !== 1 || !this.hover.linkText) return; + + const addedNode = mutation.addedNodes[0] as HTMLElement; + if (addedNode.className !== "popover hover-popover") return; + + const file = this.app.metadataCache.getFirstLinkpathDest(this.hover.linkText, this.hover.sourcePath); + if (!file || !this.settings.extensions.includes(file.extension)) return; + + const fileContent = await this.app.vault.read(file); + const contentEl = createDiv(); + + new ContextEditor(contentEl, this, fileContent, file.extension, false, true); + + const w = 700, h = 500, gep = 10; + const x = this.hover.event.clientX, y = this.hover.event.clientY; + const target = this.hover.event.target as HTMLElement; + const targetRect = target.getBoundingClientRect(); + + if (addedNode instanceof HTMLDivElement) { + addedNode.style.position = "absolute"; + addedNode.style.left = `${x + gep}px`; + + const spaceBelow = window.innerHeight - y - gep * 3; + const spaceAbove = y - gep * 3; + + if (spaceBelow > h) { + addedNode.style.top = `${targetRect.bottom + gep}px`; + } else if (spaceAbove > h) { + addedNode.style.top = `${targetRect.top - h - gep}px`; + } else { + addedNode.style.top = `${targetRect.top - h / 2 - gep}px`; + addedNode.style.left = `${targetRect.right + gep * 2}px`; + } + } + + contentEl.setCssProps({ + "width": `${w}px`, + "height": `${h}px`, + "padding-top": "10px", + "padding-bottom": "10px", + }); + + addedNode.empty(); + addedNode.appendChild(contentEl); + }); + + this.registerEvent(this.app.workspace.on("hover-link", async (event: any) => { + const { linktext: linkText, sourcePath, event: hoverEvent } = event; + if (!linkText || !sourcePath) return; + + Object.assign(this.hover, { linkText, sourcePath, event: hoverEvent }); + })); + + this._observer.observe(document, { childList: true, subtree: true }); + this.__apply(); } @@ -264,6 +348,21 @@ export default class UNITADE_PLUGIN extends Plugin { }); } + private __ctxFence(): EventRef { + return this.app.workspace.on("editor-menu", (menu) => { + if (!ContextEditCodeblocks.create(this).isInFence()) { + return; + } + menu.addItem((item) => { + item.setTitle(this.locale.getLocaleItem("MODAL_EDIT_FENCE")[0]!) + .setIcon("code") + .onClick(() => { + FenceEditModal.openOnCurrentCode(this); + }); + }); + }); + } + ltReady(_app: App): void { try { _app.workspace.off('layout-ready', () => { this.ltReady(_app); }); @@ -286,6 +385,8 @@ export default class UNITADE_PLUGIN extends Plugin { async onunload(): Promise { super.onunload(); + this._observer!.disconnect(); + this.__unapply(this.settings); try { @@ -334,7 +435,10 @@ export default class UNITADE_PLUGIN extends Plugin { * @private * @returns {void} */ - private __apply(): void { + private __apply(): void + { + this.registerView('codeview', leaf => new UNITADE_VIEW_CODE(leaf, this)); + if (this.settings.is_grouped) { const data: { [key: string]: string[] } = parsegroup(this.settings.grouped_extensions); From 9e0f2df88cd7ebec978deed4f5b9f65217915d13 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:20:16 +0300 Subject: [PATCH 54/63] feat!(common): add context editor for code editor in plugin --- source/components/contexts/contextEditor.ts | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 source/components/contexts/contextEditor.ts diff --git a/source/components/contexts/contextEditor.ts b/source/components/contexts/contextEditor.ts new file mode 100644 index 0000000..230345f --- /dev/null +++ b/source/components/contexts/contextEditor.ts @@ -0,0 +1,27 @@ + +import * as monaco from 'monaco-editor'; + +import UNITADE_PLUGIN from './../../main'; +import { genEditorSettings } from './../../utils/utils'; + +export class ContextEditor { + contentEl: HTMLElement; + value = ""; + monacoEditor: monaco.editor.IStandaloneCodeEditor; + plugin: UNITADE_PLUGIN; + + constructor(contentEl: HTMLElement, plugin: UNITADE_PLUGIN, code: string, language: string, miniMap: boolean = true, wordWrap: boolean = false) { + this.contentEl = contentEl; + this.plugin = plugin; + this.value = code; + + const setting = genEditorSettings(this.plugin.settings, language, miniMap, wordWrap); + + this.monacoEditor = monaco.editor.create(this.contentEl, setting); + this.monacoEditor.setValue(this.value); + } + + getValue() { + return this.monacoEditor.getValue(); + } +} From d2bc94a1cb7638e69594ed431bdaa2e9058e46a9 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:22:34 +0300 Subject: [PATCH 55/63] feat!(common): add codeblock editor in plugin --- source/components/modals/codeblock-edit.ts | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 source/components/modals/codeblock-edit.ts diff --git a/source/components/modals/codeblock-edit.ts b/source/components/modals/codeblock-edit.ts new file mode 100644 index 0000000..8efaa34 --- /dev/null +++ b/source/components/modals/codeblock-edit.ts @@ -0,0 +1,70 @@ +import { Modal, Notice } from "obsidian"; +import { ContextEditor } from "../contexts/contextEditor"; +import { ContextEditCodeblocks } from "../contextEditCodeblock"; +import UNITADE_PLUGIN from "../../main"; + +export class FenceEditModal extends Modal { + private codeEditor!: ContextEditor; + + private constructor( + private plugin: UNITADE_PLUGIN, + private code: string, + private language: string, + private onSave: (changedCode: string) => void + ) { + super(plugin.app); + } + + onOpen() { + super.onOpen(); + + this.codeEditor = new ContextEditor( + this.contentEl, + this.plugin, + this.code, + this.language, + ); + + this.modalEl.setCssProps({ + "--dialog-width": "90vw", + "--dialog-height": "90vh", + }); + + this.modalEl.style.height = "var(--dialog-height)"; + + const closeButton = this.modalEl.querySelector(".modal-close-button"); + + closeButton!.style.background = "var(--modal-background)"; + closeButton!.style.zIndex = `${Number.MAX_SAFE_INTEGER}`; + } + + onClose() { + super.onClose(); + + this.onSave(this.codeEditor.getValue()); + } + + static openOnCurrentCode(plugin: UNITADE_PLUGIN) { + const context = ContextEditCodeblocks.create(plugin); + + if (!context.isInFence()) { + if(plugin.settings.silence_errors) + console.debug('SILENCED ERROR: Notice("Not valid codeblock");'); + else + new Notice("Not valid codeblock"); + + return; + } + + const fenceData = context.getFenceData(); + + if (!fenceData) return; + else + new FenceEditModal( + plugin, + fenceData.content, + fenceData.language, + (value) => context.replaceFenceContent(value) + ).open(); + } +} From f37a46d4d34bc203ed9799e3b7d0f2ebf70193d4 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Tue, 22 Oct 2024 21:08:02 +0300 Subject: [PATCH 56/63] feat(architecture): create architecture for code editor and other things --- source/components/contextEditCodeblock.ts | 107 ++++++ source/components/{ => modals}/file-create.ts | 2 +- source/components/{ => modals}/file-edit.ts | 2 +- source/components/{ => modals}/files-edit.ts | 2 +- .../components/{ => modals}/files-rename.ts | 2 +- source/components/{ => modals}/folder-edit.ts | 2 +- source/components/views/view_codemirror.ts | 90 +++++ source/locales/langs/en.ts | 5 +- source/utils/constants.ts | 13 +- source/utils/utils.ts | 353 ++++++++++++++++++ 10 files changed, 568 insertions(+), 10 deletions(-) create mode 100644 source/components/contextEditCodeblock.ts rename source/components/{ => modals}/file-create.ts (99%) rename source/components/{ => modals}/file-edit.ts (99%) rename source/components/{ => modals}/files-edit.ts (99%) rename source/components/{ => modals}/files-rename.ts (99%) rename source/components/{ => modals}/folder-edit.ts (98%) create mode 100644 source/components/views/view_codemirror.ts diff --git a/source/components/contextEditCodeblock.ts b/source/components/contextEditCodeblock.ts new file mode 100644 index 0000000..687a76c --- /dev/null +++ b/source/components/contextEditCodeblock.ts @@ -0,0 +1,107 @@ +import { Editor } from "obsidian"; +import UNITADE_PLUGIN from "../main"; +import { getLanguage } from "../utils/utils"; + +export class ContextEditCodeblocks { + private start = 0; + + private end = 0; + + private editor?: Editor; + + private isInValidFence = false; + + private constructor(private plugin: UNITADE_PLUGIN) { + this.initializeStartAndEnd(); + + this.validateFence(); + } + + static create(plugin: UNITADE_PLUGIN) { + return new ContextEditCodeblocks(plugin); + } + + private initializeStartAndEnd() { + this.editor = this.plugin.app.workspace.activeEditor?.editor; + + const cursor = this.editor?.getCursor(); + + if (!this.editor || !cursor) return; + + this.start = cursor.line; + this.end = cursor.line; + do { + this.start--; + } while ( + this.start >= 0 && + !this.editor.getLine(this.start).startsWith("```") + ); + do { + this.end++; + } while ( + this.end < this.editor.lineCount() && + !this.editor.getLine(this.end).startsWith("```") + ); + } + + private validateFence() { + if (!this.editor) { + return; + } + + if (this.start < 0 || this.end >= this.editor.lineCount()) { + return; + } + + let fenceLines = 0; + + // Сheck in front the current аence, + // if there is an uneven number of fences, we are not in a valid fence. + for (let i = 0; i < this.start; i++) { + if (this.editor.getLine(i).startsWith("```")) { + fenceLines++; + } + } + + if (fenceLines % 2 === 1) { + return; + } + + this.isInValidFence = true; + } + + isInFence() { + return this.isInValidFence; + } + + getFenceData() { + if (!this.editor || !this.isInValidFence) return null; + + let editorContent = ""; + for (let i = this.start + 1; i < this.end; i++) { + editorContent += `${this.editor.getLine(i)}\n`; + } + + const content = editorContent.slice(0, editorContent.length - 1); + const langKey = this.editor.getLine(this.start).slice(3).trim(); + const language = getLanguage(langKey); + + return { content, language }; + } + + getEditor() { + return this.editor; + } + + getBounds() { + return [this.start, this.end]; + } + + replaceFenceContent(value: string) { + this.editor?.replaceRange( + `${value}\n`, + { line: this.start + 1, ch: 0 }, + { line: this.end, ch: 0 } + ); + } +} diff --git a/source/components/file-create.ts b/source/components/modals/file-create.ts similarity index 99% rename from source/components/file-create.ts rename to source/components/modals/file-create.ts index 4aec38f..d7a09d1 100644 --- a/source/components/file-create.ts +++ b/source/components/modals/file-create.ts @@ -31,7 +31,7 @@ import { Setting, } from "obsidian"; -import UNITADE_PLUGIN from "./../main"; +import UNITADE_PLUGIN from "../../main"; export class TFileCreate extends Modal { private _filepath: string; diff --git a/source/components/file-edit.ts b/source/components/modals/file-edit.ts similarity index 99% rename from source/components/file-edit.ts rename to source/components/modals/file-edit.ts index a46fb23..0e59696 100644 --- a/source/components/file-edit.ts +++ b/source/components/modals/file-edit.ts @@ -32,7 +32,7 @@ import { Setting, } from "obsidian"; -import UNITADE_PLUGIN from "./../main"; +import UNITADE_PLUGIN from "../../main"; export class TFileEdit extends Modal { private _filepath: string; diff --git a/source/components/files-edit.ts b/source/components/modals/files-edit.ts similarity index 99% rename from source/components/files-edit.ts rename to source/components/modals/files-edit.ts index 9808d60..9f2709d 100644 --- a/source/components/files-edit.ts +++ b/source/components/modals/files-edit.ts @@ -32,7 +32,7 @@ import { Setting, } from "obsidian"; -import UNITADE_PLUGIN from "./../main"; +import UNITADE_PLUGIN from "../../main"; export class TFilesEdit extends Modal { private _new_extension: string = 'md'; diff --git a/source/components/files-rename.ts b/source/components/modals/files-rename.ts similarity index 99% rename from source/components/files-rename.ts rename to source/components/modals/files-rename.ts index 6862abe..11fa788 100644 --- a/source/components/files-rename.ts +++ b/source/components/modals/files-rename.ts @@ -31,7 +31,7 @@ import { TAbstractFile, } from "obsidian"; -import UNITADE_PLUGIN from "./../main"; +import UNITADE_PLUGIN from "../../main"; export class TFilesRename extends Modal { private _new_name: string = ''; diff --git a/source/components/folder-edit.ts b/source/components/modals/folder-edit.ts similarity index 98% rename from source/components/folder-edit.ts rename to source/components/modals/folder-edit.ts index 8f39c27..beaed8f 100644 --- a/source/components/folder-edit.ts +++ b/source/components/modals/folder-edit.ts @@ -31,7 +31,7 @@ import { TAbstractFile, } from "obsidian"; -import UNITADE_PLUGIN from "./../main"; +import UNITADE_PLUGIN from "../../main"; export class TFolderEdit extends Modal { private _foldername: string; diff --git a/source/components/views/view_codemirror.ts b/source/components/views/view_codemirror.ts new file mode 100644 index 0000000..47be8db --- /dev/null +++ b/source/components/views/view_codemirror.ts @@ -0,0 +1,90 @@ +/* + * MIT License + * + * Copyright (c) 2023-2024 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Any code and/or API associated with OBSIDIAN behaves as stated in their distribution policy. + */ + +import { + TextFileView, + WorkspaceLeaf, +} from "obsidian"; + +import CodeMirror from '../../../lib/codemirror'; + +export default class UNITADE_VIEW extends TextFileView { + private _codemirror: CodeMirror.Editor; + + private _extension: string = ''; + + constructor(leaf: WorkspaceLeaf, extension: string) { + super(leaf); + + this._extension = extension; + + + this._codemirror = CodeMirror(this.contentEl, { + theme: 'obsidian', + }); + + this._codemirror.on('changes', this.onChange); + } + + onResize(): void { + this._codemirror.refresh(); + } + + onChange = async () => { + this.requestSave(); + } + + getViewData(): string { + return this._codemirror.getValue(); + } + + setViewData(data: string, clear: boolean): void { + if (clear) + this._codemirror.swapDoc(CodeMirror.Doc(data, `text/x-${this._extension}`)); + else + this._codemirror.setValue(data); + } + + clear(): void { + this._codemirror.setValue(''); + this._codemirror.clearHistory(); + } + + getDisplayText(): string { + if (this.file) + return this.file.basename; + else + return 'no file'; + } + + canAcceptExtension(extension: string): boolean { + return extension === this._extension; + } + + getViewType(): string { + return this._extension; + } +} diff --git a/source/locales/langs/en.ts b/source/locales/langs/en.ts index 0143692..b30ba0c 100644 --- a/source/locales/langs/en.ts +++ b/source/locales/langs/en.ts @@ -38,7 +38,7 @@ export const LOCALES_EN = { }, "SETTINGS_EXTENSIONS": { 0: "Extensions:", - 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons (';')." + 1: "Enter the file extensions that should be registered with the vault and with which the application should start registering (taking into account): input must be separated by semicolons ('>')." }, "SETTINGS_MOBILE_SPECIFIC": { 0: "Mobile-specific:", @@ -164,5 +164,8 @@ export const LOCALES_EN = { 0: "Case insensitive mode:", 1: "If turned on, plugin would registry every upper and lower case variations of extension to provide Windows-like experience for extension.", 2: "Unstable on UNIX-systems." + }, + "MODAL_EDIT_FENCE": { + 0: "Edit code fence" } }; diff --git a/source/utils/constants.ts b/source/utils/constants.ts index 125e15d..f336a45 100644 --- a/source/utils/constants.ts +++ b/source/utils/constants.ts @@ -32,9 +32,14 @@ export default class CONSTANTS { 'markdown': ['md'] }; - public static themes = { - 'AUTO': 'AUTO', - 'LIGHT': 'LIGHT', - 'DARK': 'DARK' + /** + * Initial theme to be used for rendering. + * The current out-of-the-box available themes are: 'vs' (default), 'vs-dark', 'hc-black', 'hc-light.**/ + public static themes: Record = { + 'vs-dark': 'DARK', + 'vs': 'LIGHT', + 'hc-black': 'PITCH-BLACK', + 'hc-light': 'PITCH-LIGHT', + 'auto': 'AUTO' }; } diff --git a/source/utils/utils.ts b/source/utils/utils.ts index 5fb24ce..e76e3c7 100644 --- a/source/utils/utils.ts +++ b/source/utils/utils.ts @@ -30,6 +30,10 @@ import { TAbstractFile, } from "obsidian"; +import { UNITADE_SETTINGS } from "./../settings"; + +import * as monaco from 'monaco-editor' + /** * Determines whether the provided file is an instance of `TFile` from the Obsidian API. * @@ -57,3 +61,352 @@ export function isTFile(file: TAbstractFile): boolean { export function isTFolder(file: TAbstractFile): boolean { return (file instanceof TFolder); } + +/** + * Determines the programming or markup language associated with a given file extension. + * + * The function maps file extensions to their respective language names that are used in code + * editors or syntax highlighting systems. If the provided extension doesn't match any predefined + * extensions, the function returns `"plaintext"` as the default language. + * + * ### Supported Languages: + * - JavaScript, TypeScript, Python, HTML, CSS, C++, SQL, and many more. + * - Handles various file extensions for each language (e.g., `.js`, `.jsx`, `.ts`, `.tsx`, etc.). + * + * ### Example: + * ```typescript + * const lang = getLanguage('js'); + * console.log(lang); // Outputs: "javascript" + * ``` + * + * @param {string} extension - The file extension (without the leading dot) to check. + * @returns {string} - The name of the programming or markup language corresponding to the extension. + */ +export function getLanguage(extension: string): string { + switch (extension) { + case "js": + case "es6": + case "jsx": + case "cjs": + case "mjs": + return "javascript"; + case "ts": + case "tsx": + case "cts": + case "mts": + return "typescript"; + case "json": + return "json"; + case "py": + case "rpy": + case "pyu": + case "cpy": + case "gyp": + case "gypi": + return "python"; + case "css": + return "css"; + case "html": + case "htm": + case "shtml": + case "xhtml": + case "mdoc": + case "jsp": + case "asp": + case "aspx": + case "jshtm": + return "html"; + case "cpp": + case "c++": + case "cc": + case "cxx": + case "hpp": + case "hh": + case "hxx": + return "cpp"; + case "graphql": + case "gql": + return "graphql"; + case "java": + case "jav": + return "java"; + case "php": + case "php4": + case "php5": + case "phtml": + case "ctp": + return "php"; + case "sql": + return "sql"; + case "yaml": + case "yml": + return "yaml"; + case "bat": + case "batch": + return "bat"; + case "lua": + return "lua"; + case "rb": + case "rbx": + case "rjs": + case "gemspec": + return "ruby"; + case "markdown": + case "mdown": + case "mkdn": + case "mkd": + case "mdwn": + case "mdtxt": + case "mdtext": + case "mdx": + return "markdown"; + case "r": + case "rhistory": + case "rmd": + case "rprofile": + case "rt": + return "r"; + case "ftl": + case "ftlh": + case "ftlx": + return "freemarker2"; + case "rst": + return "restructuredtext"; + case "hcl": + case "tf": + case "tfvars": + return "hcl"; + case "ini": + case "properties": + case "gitconfig": + return "ini"; + case "pug": + case "jade": + return "pug"; + case "dart": + return "dart"; + case "rs": + case "rlib": + return "rust"; + case "less": + return "less"; + case "cls": + return "apex"; + case "tcl": + return "tcl"; + case "abap": + return "abap"; + case "ecl": + return "ecl"; + case "pla": + return "pla"; + case "cmd": + return "bat"; + case "vb": + return "vb"; + case "sb": + return "sb"; + case "m3": + case "i3": + case "mg": + case "ig": + return "m3"; + case "go": + return "go"; + case "s": + return "mips"; + case "pl": + case "pm": + return "perl"; + case "wgsl": + return "wgsl"; + case "twig": + return "twig"; + case "scss": + return "scss"; + case "redis": + return "redis"; + case "sh": + case "bash": + return "shell"; + case "scala": + case "sc": + case "sbt": + return "scala"; + case "jl": + return "julia"; + case "dax": + case "msdax": + return "msdax"; + case "lex": + return "lexon"; + case "cshtml": + return "razor"; + case "bicep": + return "bicep"; + case "azcli": + return "azcli"; + case "swift": + case "Swift": + return "swift"; + case "flow": + return "flow9"; + case "xml": + case "xsd": + case "dtd": + case "ascx": + case "csproj": + case "config": + case "props": + case "targets": + case "wxi": + case "wxl": + case "wxs": + case "xaml": + case "svgz": + case "opf": + case "xslt": + case "xsl": + return "xml"; + case "kt": + case "kts": + return "kotlin"; + case "cypher": + case "cyp": + return "cypher"; + case "coffee": + return "coffeescript"; + case "fs": + case "fsi": + case "ml": + case "mli": + case "fsx": + case "fsscript": + return "fsharp"; + case "scm": + case "ss": + case "sch": + case "rkt": + return "scheme"; + case "rq": + return "sparql"; + case "aes": + return "aes"; + case "liquid": + case "html.liquid": + return "liquid"; + case "pas": + case "p": + case "pp": + return "pascal"; + case "ex": + case "exs": + return "elixir"; + case "qs": + return "qsharp"; + case "cs": + case "csx": + case "cake": + return "csharp"; + case "clj": + case "cljs": + case "cljc": + case "edn": + return "clojure"; + case "mligo": + return "cameligo"; + case "sol": + return "sol"; + case "proto": + return "proto"; + case "dats": + case "sats": + case "hats": + return "postiats"; + case "ligo": + return "pascaligo"; + case "dockerfile": + return "dockerfile"; + case "handlebars": + case "hbs": + return "handlebars"; + case "pq": + case "pqm": + return "powerquery"; + case "m": + return "objective-c"; + case "sv": + case "svh": + return "systemverilog"; + case "v": + case "vh": + return "verilog"; + case "st": + case "iecst": + case "iecplc": + case "lc3lib": + return "st"; + case "c": + case "h": + return "c"; + default: + return "plaintext"; + } +} + +/** + * Generates editor settings for the Monaco editor based on user preferences and provided options. + * + * The function configures various editor settings such as language, theme, line numbers, word wrap, + * minimap, font settings, and additional options like semantic highlighting and folding. + * + * ### Example: + * ```typescript + * const editorSettings = genEditorSettings(userSettings, 'ts', true, true); + * ``` + * + * @param {EditorSettings} setting - The base editor settings defined by the user or system. + * @param {string} language - The language to set for the editor (e.g., 'javascript', 'typescript'). + * @param {boolean} [minimap=true] - Whether the minimap is enabled or disabled in the editor. + * @param {boolean} [wordwrap=false] - Whether word wrap is enabled or disabled in the editor. + * @returns {monaco.editor.IStandaloneEditorConstructionOptions} - The constructed editor configuration options. + */ +export function genEditorSettings( + setting: UNITADE_SETTINGS, + language: string, + minimap: boolean = true, + wordwrap: boolean = false +): monaco.editor.IStandaloneEditorConstructionOptions { + + // Set the minimap flag based on the provided argument or the setting. + const minimapFlag = minimap === false ? false : setting.code_editor_settings.minimapping; + + const minimapOptions: monaco.editor.IEditorMinimapOptions = { + enabled: minimapFlag, + }; + + const wordwrapFlag = wordwrap === true ? wordwrap : setting.code_editor_settings.word_wrapping; + + const settings: monaco.editor.IStandaloneEditorConstructionOptions = { + automaticLayout: true, + language: getLanguage(language), + theme: setting.code_editor_settings.theme !== 'auto' ? setting.code_editor_settings.theme : getTheme(), + lineNumbers: setting.code_editor_settings.line_numbers ? "on" : "off", + wordWrap: wordwrapFlag ? "on" : "off", + minimap: minimapOptions, + folding: setting.code_editor_settings.folding, + fontSize: setting.code_editor_settings.font_size, + fontFamily: setting.code_editor_settings.font_family, + fontLigatures: setting.code_editor_settings.font_ligatures, + // Controls whether characters that can be confused with basic ASCII are highlighted + unicodeHighlight: { ambiguousCharacters: false, invisibleCharacters: false }, + scrollBeyondLastLine: false, + 'semanticHighlighting.enabled': true, + }; + + return settings; +} + +export function getTheme(): string { + return document.body.classList.contains("theme-dark") === true ? "vs-dark" : "vs"; +} From d9a0395c0d2b0bc0959aadb8963f8ff35dd935af Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Wed, 23 Oct 2024 19:58:02 +0300 Subject: [PATCH 57/63] fix(global): fix dependencies of codemirror and monaco from being externals Prevents plugin to work sometimes and may cause entire app to crash if something wents really wrong. --- esbuild.config.mjs | 14 +- package-lock.json | 3821 +++++++++++++++++++++++++++++++------------- package.json | 38 +- 3 files changed, 2701 insertions(+), 1172 deletions(-) diff --git a/esbuild.config.mjs b/esbuild.config.mjs index 9064877..031508e 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -3,8 +3,6 @@ import { sassPlugin } from 'esbuild-sass-plugin' import process from "process"; import builtins from "builtin-modules"; import glsl from "esbuild-plugin-glsl"; -import nodeExternals from "esbuild-plugin-node-externals"; - const banner = `/* @@ -25,20 +23,11 @@ const context = await esbuild.context({ glsl({ minify: true, }), - nodeExternals({ - packagePaths: 'package.json', - include: [ - './lib/*', - './mode/*', - './addon/*', - ], - }), ], bundle: true, external: [ "obsidian", "electron", - "codemirror", "@codemirror/autocomplete", "@codemirror/collab", "@codemirror/commands", @@ -57,6 +46,9 @@ const context = await esbuild.context({ sourcemap: prod ? false : "inline", treeShaking: true, outfile: "out/main.js", + loader: { + '.ttf': 'base64', + }, }); if (prod) { diff --git a/package-lock.json b/package-lock.json index b4bf048..e8b5854 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,58 +19,58 @@ "esbuild": "^0.20.2", "esbuild-plugin-glsl": "^1.2.2", "esbuild-sass-plugin": "^3.3.1", - "monaco-editor": "^0.52.0", - "obsidian": "^1.5.7-1", - "terser": "^5.34.1" + "monaco-editor": "^0.43.0", + "obsidian": "^1.7.2", + "terser": "^5.36.0" }, "devDependencies": { - "@commitlint/cli": "^19.3.0", - "@commitlint/config-conventional": "^19.2.2", + "@commitlint/cli": "^19.5.0", + "@commitlint/config-conventional": "^19.5.0", "@electron/lint-roller": "^1.13.0", - "@npmcli/package-json": "^5.2.0", + "@npmcli/package-json": "^5.2.1", "@octokit/rest": "^20.1.1", "@types/codemirror": "^5.60.15", "@types/extend": "^3.0.4", "@types/fs-extra": "^11.0.4", "@types/minimist": "^1.2.5", - "@types/node": "^20.14.8", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", - "axios": "^1.7.4", + "@types/node": "^20.16.14", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", + "axios": "^1.7.7", "chai": "^5.1.1", "check-for-leaks": "^1.2.1", "colors": "^1.4.0", "dotenv": "^16.4.5", "dotenv-safe": "^9.1.0", "esbuild-plugin-node-externals": "^1.0.1", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-standard": "^17.1.0", "eslint-plugin": "^1.0.1", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-markdownlint": "^0.5.0", "eslint-plugin-node": "^11.1.0", "extend": "^3.0.2", "folder-hash": "^4.0.4", "fs-extra": "^11.2.0", - "husky": "^9.0.11", - "inquirer": "^9.2.23", + "husky": "^9.1.6", + "inquirer": "^9.3.7", "lint": "^1.1.2", - "lint-staged": "^15.2.7", + "lint-staged": "^15.2.10", "markdownlint": "^0.33.0", "markdownlint-cli2": "^0.14.0", "minimist": "^1.2.8", - "mocha": "^10.4.0", + "mocha": "^10.7.3", "npm-update": "^3.0.1", - "prettier": "^3.3.2", + "prettier": "^3.3.3", "remark": "^15.0.1", "standard-version": "^9.5.0", "temp": "^0.9.4", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.5.2", + "typescript": "^5.6.3", "unicorn": "^0.0.1", - "url": "^0.11.3" + "url": "^0.11.4" }, "engines": { "node": ">=16.0.0", @@ -78,12 +78,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.9.tgz", + "integrity": "sha512-z88xeGxnzehn2sqZ8UdGQEvYErF1odv2CftxInpSYJt6uHuPe9YjahKZITGs3l5LeI9d2ROG+obuDAoSlqbNfQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.9", "picocolors": "^1.0.0" }, "engines": { @@ -91,21 +92,23 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", + "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -119,6 +122,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -131,6 +135,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -145,6 +150,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -154,6 +160,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -163,6 +170,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -171,15 +179,17 @@ } }, "node_modules/@bufbuild/protobuf": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", - "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.0.tgz", + "integrity": "sha512-+imAQkHf7U/Rwvu0wk1XWgsP3WnpCWmK7B48f0XqSNzgk64+grljTKC7pnO/xBiEMUziF7vKRfbBnOQhg126qQ==", + "license": "(Apache-2.0 AND BSD-3-Clause)", "peer": true }, "node_modules/@codemirror/autocomplete": { - "version": "6.16.3", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.16.3.tgz", - "integrity": "sha512-Vl/tIeRVVUCRDuOG48lttBasNQu8usGgXQawBXI7WJAiUDSFOfzflmEsZFZo48mAvAaa4FZ/4/yLLxFtdJaKYA==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.1.tgz", + "integrity": "sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==", + "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -194,9 +204,10 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.6.0.tgz", - "integrity": "sha512-qnY+b7j1UNcTS31Eenuc/5YJB6gQOzkUoNmJQc0rznwqSRpeaWWpjkWy2C/MPTcePpsKJEM26hXrOXl1+nceXg==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.7.1.tgz", + "integrity": "sha512-llTrboQYw5H4THfhN4U3qCnSZ1SOJ60ohhz+SzU0ADGtwlc533DtklQP0vSFaQuCPDn3BPpOd1GbbnUtwNjsrw==", + "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", @@ -205,9 +216,10 @@ } }, "node_modules/@codemirror/language": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.2.tgz", - "integrity": "sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.3.tgz", + "integrity": "sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==", + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -218,9 +230,10 @@ } }, "node_modules/@codemirror/lint": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz", - "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.2.tgz", + "integrity": "sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==", + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -231,6 +244,7 @@ "version": "6.5.6", "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -240,12 +254,14 @@ "node_modules/@codemirror/state": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", - "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==" + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "license": "MIT" }, "node_modules/@codemirror/view": { - "version": "6.28.2", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.28.2.tgz", - "integrity": "sha512-A3DmyVfjgPsGIjiJqM/zvODUAPQdQl3ci0ghehYNnbt5x+o76xq+dL5+mMBuysDXnI3kapgOkoeJ0sbtL/3qPw==", + "version": "6.34.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.1.tgz", + "integrity": "sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==", + "license": "MIT", "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", @@ -253,17 +269,18 @@ } }, "node_modules/@commitlint/cli": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.3.0.tgz", - "integrity": "sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.5.0.tgz", + "integrity": "sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/format": "^19.3.0", - "@commitlint/lint": "^19.2.2", - "@commitlint/load": "^19.2.0", - "@commitlint/read": "^19.2.1", - "@commitlint/types": "^19.0.3", - "execa": "^8.0.1", + "@commitlint/format": "^19.5.0", + "@commitlint/lint": "^19.5.0", + "@commitlint/load": "^19.5.0", + "@commitlint/read": "^19.5.0", + "@commitlint/types": "^19.5.0", + "tinyexec": "^0.3.0", "yargs": "^17.0.0" }, "bin": { @@ -274,12 +291,13 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz", - "integrity": "sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.5.0.tgz", + "integrity": "sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/types": "^19.0.3", + "@commitlint/types": "^19.5.0", "conventional-changelog-conventionalcommits": "^7.0.2" }, "engines": { @@ -287,12 +305,13 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.0.3.tgz", - "integrity": "sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.5.0.tgz", + "integrity": "sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/types": "^19.0.3", + "@commitlint/types": "^19.5.0", "ajv": "^8.11.0" }, "engines": { @@ -300,12 +319,13 @@ } }, "node_modules/@commitlint/ensure": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.0.3.tgz", - "integrity": "sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.5.0.tgz", + "integrity": "sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/types": "^19.0.3", + "@commitlint/types": "^19.5.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -317,21 +337,23 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz", - "integrity": "sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.5.0.tgz", + "integrity": "sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==", "dev": true, + "license": "MIT", "engines": { "node": ">=v18" } }, "node_modules/@commitlint/format": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.3.0.tgz", - "integrity": "sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.5.0.tgz", + "integrity": "sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/types": "^19.0.3", + "@commitlint/types": "^19.5.0", "chalk": "^5.3.0" }, "engines": { @@ -339,12 +361,13 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz", - "integrity": "sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.5.0.tgz", + "integrity": "sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/types": "^19.0.3", + "@commitlint/types": "^19.5.0", "semver": "^7.6.0" }, "engines": { @@ -352,30 +375,32 @@ } }, "node_modules/@commitlint/lint": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.2.2.tgz", - "integrity": "sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.5.0.tgz", + "integrity": "sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^19.2.2", - "@commitlint/parse": "^19.0.3", - "@commitlint/rules": "^19.0.3", - "@commitlint/types": "^19.0.3" + "@commitlint/is-ignored": "^19.5.0", + "@commitlint/parse": "^19.5.0", + "@commitlint/rules": "^19.5.0", + "@commitlint/types": "^19.5.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.2.0.tgz", - "integrity": "sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.5.0.tgz", + "integrity": "sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.0.3", - "@commitlint/execute-rule": "^19.0.0", - "@commitlint/resolve-extends": "^19.1.0", - "@commitlint/types": "^19.0.3", + "@commitlint/config-validator": "^19.5.0", + "@commitlint/execute-rule": "^19.5.0", + "@commitlint/resolve-extends": "^19.5.0", + "@commitlint/types": "^19.5.0", "chalk": "^5.3.0", "cosmiconfig": "^9.0.0", "cosmiconfig-typescript-loader": "^5.0.0", @@ -388,21 +413,23 @@ } }, "node_modules/@commitlint/message": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.0.0.tgz", - "integrity": "sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.5.0.tgz", + "integrity": "sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=v18" } }, "node_modules/@commitlint/parse": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.0.3.tgz", - "integrity": "sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.5.0.tgz", + "integrity": "sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/types": "^19.0.3", + "@commitlint/types": "^19.5.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -411,29 +438,31 @@ } }, "node_modules/@commitlint/read": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.2.1.tgz", - "integrity": "sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.5.0.tgz", + "integrity": "sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/top-level": "^19.0.0", - "@commitlint/types": "^19.0.3", - "execa": "^8.0.1", + "@commitlint/top-level": "^19.5.0", + "@commitlint/types": "^19.5.0", "git-raw-commits": "^4.0.0", - "minimist": "^1.2.8" + "minimist": "^1.2.8", + "tinyexec": "^0.3.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/resolve-extends": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz", - "integrity": "sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.5.0.tgz", + "integrity": "sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.0.3", - "@commitlint/types": "^19.0.3", + "@commitlint/config-validator": "^19.5.0", + "@commitlint/types": "^19.5.0", "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", @@ -444,35 +473,37 @@ } }, "node_modules/@commitlint/rules": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.0.3.tgz", - "integrity": "sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.5.0.tgz", + "integrity": "sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw==", "dev": true, + "license": "MIT", "dependencies": { - "@commitlint/ensure": "^19.0.3", - "@commitlint/message": "^19.0.0", - "@commitlint/to-lines": "^19.0.0", - "@commitlint/types": "^19.0.3", - "execa": "^8.0.1" + "@commitlint/ensure": "^19.5.0", + "@commitlint/message": "^19.5.0", + "@commitlint/to-lines": "^19.5.0", + "@commitlint/types": "^19.5.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/to-lines": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.0.0.tgz", - "integrity": "sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.5.0.tgz", + "integrity": "sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.0.0.tgz", - "integrity": "sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.5.0.tgz", + "integrity": "sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^7.0.0" }, @@ -481,10 +512,11 @@ } }, "node_modules/@commitlint/types": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.0.3.tgz", - "integrity": "sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.5.0.tgz", + "integrity": "sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==", "dev": true, + "license": "MIT", "dependencies": { "@types/conventional-commits-parser": "^5.0.0", "chalk": "^5.3.0" @@ -498,6 +530,7 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -505,11 +538,23 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@dsanders11/vscode-markdown-languageservice": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@dsanders11/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.3.0.tgz", "integrity": "sha512-aFNWtK23dNicyLczBwIKkGUSVuMoZMzUovlwqj/hVZ3zRIBlXWYunByDxI67Pf1maA0TbxPjVfRqBQFALWjVHg==", "dev": true, + "license": "MIT", "dependencies": { "@vscode/l10n": "^0.0.10", "picomatch": "^2.3.1", @@ -526,6 +571,7 @@ "resolved": "https://registry.npmjs.org/@electron/lint-roller/-/lint-roller-1.13.0.tgz", "integrity": "sha512-See/NNRyTeYQcnKh01sy1FC51MPYe/erhfq+cCiP/yeN2S4QiD8i28NYwER/hOC2JlWyhgGLPNx7bRDyiet2CA==", "dev": true, + "license": "MIT", "dependencies": { "@dsanders11/vscode-markdown-languageservice": "^0.3.0", "balanced-match": "^2.0.0", @@ -567,6 +613,7 @@ "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "aix" @@ -582,6 +629,7 @@ "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -597,6 +645,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -612,6 +661,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -627,6 +677,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -642,6 +693,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -657,6 +709,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -672,6 +725,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -687,6 +741,7 @@ "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -702,6 +757,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -717,6 +773,7 @@ "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -732,6 +789,7 @@ "cpu": [ "loong64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -747,6 +805,7 @@ "cpu": [ "mips64el" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -762,6 +821,7 @@ "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -777,6 +837,7 @@ "cpu": [ "riscv64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -792,6 +853,7 @@ "cpu": [ "s390x" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -807,6 +869,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -822,6 +885,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -837,6 +901,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -852,6 +917,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "sunos" @@ -867,6 +933,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -882,6 +949,7 @@ "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -897,6 +965,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -910,6 +979,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -921,10 +991,11 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", - "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -934,6 +1005,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -957,6 +1029,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -972,13 +1045,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -988,13 +1063,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1003,22 +1080,24 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -1030,13 +1109,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1047,6 +1128,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1059,6 +1141,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1072,22 +1155,25 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=6.9.0" } }, "node_modules/@inquirer/figures": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.3.tgz", - "integrity": "sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz", + "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -1097,6 +1183,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1110,10 +1197,11 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1125,13 +1213,15 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1149,6 +1239,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1164,6 +1255,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1180,6 +1272,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1189,19 +1282,11 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1210,6 +1295,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1218,73 +1304,58 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@lezer/common": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", - "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", + "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "license": "MIT" }, "node_modules/@lezer/highlight": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.0.tgz", - "integrity": "sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", + "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" } }, "node_modules/@lezer/lr": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.1.tgz", - "integrity": "sha512-CHsKq8DMKBf9b3yXPDIU4DbH+ZJd/sJdYOW2llbW/HudP5u0VS6Bfq1hLYfgU7uAYGFIyGGQIsSOXGPEErZiJw==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" } }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1298,6 +1369,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -1307,6 +1379,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1316,12 +1389,14 @@ } }, "node_modules/@npmcli/git": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", - "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", "proc-log": "^4.0.0", @@ -1335,10 +1410,11 @@ } }, "node_modules/@npmcli/package-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", - "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", + "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -1353,10 +1429,11 @@ } }, "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -1368,9 +1445,6 @@ "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -1380,6 +1454,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, + "license": "ISC", "dependencies": { "which": "^4.0.0" }, @@ -1392,6 +1467,7 @@ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } @@ -1401,6 +1477,7 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -1419,6 +1496,7 @@ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" @@ -1432,6 +1510,7 @@ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request": "^8.3.0", "@octokit/types": "^13.0.0", @@ -1445,13 +1524,15 @@ "version": "22.2.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "11.3.1", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.5.0" }, @@ -1467,6 +1548,7 @@ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" }, @@ -1479,6 +1561,7 @@ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.5.0" }, @@ -1494,6 +1577,7 @@ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/endpoint": "^9.0.1", "@octokit/request-error": "^5.1.0", @@ -1509,6 +1593,7 @@ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", @@ -1523,6 +1608,7 @@ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz", "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/core": "^5.0.2", "@octokit/plugin-paginate-rest": "11.3.1", @@ -1534,29 +1620,312 @@ } }, "node_modules/@octokit/types": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.1.tgz", + "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^22.2.0" } }, + "node_modules/@parcel/watcher": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -1568,31 +1937,36 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/codemirror": { "version": "5.60.15", "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.15.tgz", "integrity": "sha512-dTOvwEQ+ouKJ/rE9LT1Ue2hmP6H1mZv5+CCnNWu2qtiOe2LQa9lCprEY20HxiDmV/Bxh+dXjywmy5aKvoGjULA==", "dev": true, + "license": "MIT", "dependencies": { "@types/tern": "*" } @@ -1602,6 +1976,7 @@ "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1611,26 +1986,30 @@ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" }, "node_modules/@types/extend": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/extend/-/extend-3.0.4.tgz", "integrity": "sha512-ArMouDUTJEz1SQRpFsT2rIw7DeqICFv5aaVzLSIYMYQSLcwcGOfT3VyglQs/p7K3F7fT4zxr0NWxYZIdifD6dA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/fs-extra": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/jsonfile": "*", "@types/node": "*" @@ -1641,19 +2020,22 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/jsonfile": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1663,6 +2045,7 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2" } @@ -1671,54 +2054,61 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz", - "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==", + "version": "20.16.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.14.tgz", + "integrity": "sha512-vtgGzjxLF7QT88qRHtXMzCWpAAmwonE7fwgVjFtXosUva2oSpnIEc3gNO9P7uIfOxKnii2f79/xtOnfreYtDaA==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/tern": { "version": "0.23.9", "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz", "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==", + "license": "MIT", "dependencies": { "@types/estree": "*" } }, "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz", - "integrity": "sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/type-utils": "7.13.1", - "@typescript-eslint/utils": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1742,15 +2132,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -1770,13 +2161,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1787,13 +2179,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz", - "integrity": "sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/utils": "7.13.1", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1814,10 +2207,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -1827,13 +2221,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1855,15 +2250,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz", - "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1877,12 +2273,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1897,19 +2294,22 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@vscode/l10n": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.10.tgz", "integrity": "sha512-E1OCmDcDWa0Ya7vtSjp/XfHFGqYJfh+YPC1RkATU71fTac+j1JjCcB3qwSzmlKAighx2WxhLlfhS0RwAN++PFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -1921,6 +2321,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { @@ -1928,6 +2329,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { @@ -1935,6 +2337,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -1942,6 +2345,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", @@ -1954,6 +2358,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { @@ -1961,6 +2366,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -1974,6 +2380,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -1984,6 +2391,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" @@ -1994,6 +2402,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { @@ -2001,6 +2410,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -2018,6 +2428,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -2032,6 +2443,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -2045,6 +2457,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -2060,6 +2473,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", @@ -2071,6 +2485,7 @@ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, + "license": "BSD-3-Clause", "peer": true }, "node_modules/@xtuc/long": { @@ -2078,12 +2493,14 @@ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, + "license": "Apache-2.0", "peer": true }, "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2096,6 +2513,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, + "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^8" @@ -2106,15 +2524,17 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -2126,18 +2546,20 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -2149,6 +2571,7 @@ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^2.0.0" } @@ -2158,6 +2581,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2167,6 +2591,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2176,6 +2601,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -2189,6 +2615,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -2197,10 +2624,11 @@ } }, "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2210,6 +2638,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -2225,6 +2654,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -2237,6 +2667,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2246,6 +2677,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2257,12 +2689,15 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2275,19 +2710,22 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -2303,13 +2741,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2330,6 +2770,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2339,6 +2780,7 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2348,6 +2790,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2368,6 +2811,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2388,6 +2832,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2406,6 +2851,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2419,23 +2865,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2452,6 +2887,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -2474,6 +2910,7 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2483,6 +2920,7 @@ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } @@ -2491,13 +2929,15 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -2509,10 +2949,11 @@ } }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2524,6 +2965,7 @@ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2533,7 +2975,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -2553,18 +2996,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2577,6 +3024,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -2588,6 +3036,7 @@ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-align": "^2.0.0", "camelcase": "^4.0.0", @@ -2606,6 +3055,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2615,6 +3065,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -2627,6 +3078,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2641,6 +3093,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2650,6 +3103,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2659,6 +3113,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2668,6 +3123,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -2681,6 +3137,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -2693,6 +3150,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -2705,6 +3163,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2713,12 +3172,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -2730,12 +3191,13 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -2751,12 +3213,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -2784,6 +3247,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -2793,18 +3257,21 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "license": "MIT/X11", "peer": true }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -2818,6 +3285,7 @@ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.0.0" } @@ -2827,6 +3295,7 @@ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2846,6 +3315,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2855,6 +3325,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2864,6 +3335,7 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -2881,14 +3353,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001636", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", - "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", + "version": "1.0.30001669", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", + "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", "dev": true, "funding": [ { @@ -2904,6 +3377,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "CC-BY-4.0", "peer": true }, "node_modules/chai": { @@ -2911,6 +3385,7 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -2927,6 +3402,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2939,6 +3415,7 @@ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2948,13 +3425,15 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/check-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" } @@ -2964,6 +3443,7 @@ "resolved": "https://registry.npmjs.org/check-for-leaks/-/check-for-leaks-1.2.1.tgz", "integrity": "sha512-9OdOSRZY6N0w5JCdJpqsC5MkD6EPGYpHmhtf4l5nl3DRETDZshP6C1EGN/vVhHDTY6AsOK3NhdFfrMe3NWZl7g==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "^3.0.2", "minimist": "^1.2.0", @@ -2978,15 +3458,11 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2999,6 +3475,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -3007,6 +3486,8 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3019,6 +3500,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6.0" @@ -3029,20 +3511,25 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, + "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-spinners": { @@ -3050,6 +3537,7 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -3062,6 +3550,7 @@ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" @@ -3074,10 +3563,11 @@ } }, "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3086,16 +3576,18 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -3113,6 +3605,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -3128,6 +3621,7 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, + "license": "ISC", "engines": { "node": ">= 12" } @@ -3137,6 +3631,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3151,6 +3646,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3166,6 +3662,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3177,13 +3674,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3201,6 +3700,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -3209,6 +3709,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", @@ -3224,6 +3725,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -3232,19 +3734,29 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "license": "MIT", + "peer": true }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -3254,6 +3766,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3266,6 +3779,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -3275,6 +3789,7 @@ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -3284,7 +3799,8 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "2.0.0", @@ -3294,6 +3810,7 @@ "engines": [ "node >= 6.0" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3306,6 +3823,7 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3315,6 +3833,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^5.0.12", "conventional-changelog-atom": "^2.0.8", @@ -3337,6 +3856,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -3349,6 +3869,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -3361,6 +3882,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -3372,13 +3894,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/conventional-changelog-conventionalcommits": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -3391,6 +3915,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, + "license": "MIT", "dependencies": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^5.0.0", @@ -3416,6 +3941,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -3436,6 +3962,7 @@ "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3445,6 +3972,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3458,6 +3986,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", @@ -3477,6 +4006,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3489,6 +4019,7 @@ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -3501,6 +4032,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3513,6 +4045,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3525,6 +4058,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -3549,13 +4083,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -3571,6 +4107,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -3588,6 +4125,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -3597,6 +4135,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -3609,6 +4148,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -3618,6 +4158,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -3627,6 +4168,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -3642,6 +4184,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3657,6 +4200,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3669,6 +4213,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3678,6 +4223,7 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, + "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } @@ -3687,6 +4233,7 @@ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -3696,6 +4243,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3708,6 +4256,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -3720,6 +4269,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -3732,6 +4282,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -3744,6 +4295,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -3756,6 +4308,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -3769,6 +4322,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -3778,6 +4332,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", @@ -3801,6 +4356,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3814,6 +4370,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3826,6 +4383,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3838,6 +4396,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3850,6 +4409,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -3875,6 +4435,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -3886,10 +4447,11 @@ } }, "node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3902,6 +4464,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3917,6 +4480,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3929,6 +4493,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3938,6 +4503,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -3953,6 +4519,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -3970,6 +4537,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -3978,13 +4546,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -3997,6 +4567,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -4006,6 +4577,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -4015,6 +4587,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -4024,6 +4597,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4036,6 +4610,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -4049,6 +4624,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "lodash": "^4.17.15", @@ -4063,6 +4639,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, + "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" @@ -4076,6 +4653,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^2.0.0", "JSONStream": "^1.3.5", @@ -4094,6 +4672,7 @@ "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, + "license": "MIT", "dependencies": { "concat-stream": "^2.0.0", "conventional-changelog-preset-loader": "^2.3.4", @@ -4116,6 +4695,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -4136,6 +4716,7 @@ "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4145,6 +4726,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -4158,6 +4740,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", @@ -4177,6 +4760,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4189,6 +4773,7 @@ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -4201,6 +4786,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4213,6 +4799,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -4225,6 +4812,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -4250,6 +4838,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -4265,6 +4854,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4280,6 +4870,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -4292,6 +4883,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4301,6 +4893,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -4316,6 +4909,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -4333,6 +4927,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -4341,13 +4936,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -4360,6 +4957,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -4369,6 +4967,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -4378,6 +4977,7 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, + "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } @@ -4387,6 +4987,7 @@ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -4396,6 +4997,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4407,19 +5009,22 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -4442,12 +5047,13 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz", - "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.1.0.tgz", + "integrity": "sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==", "dev": true, + "license": "MIT", "dependencies": { - "jiti": "^1.19.1" + "jiti": "^1.21.6" }, "engines": { "node": ">=v16" @@ -4462,18 +5068,21 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4487,13 +5096,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4509,6 +5120,7 @@ "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4521,6 +5133,7 @@ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4538,6 +5151,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -4555,6 +5169,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4572,17 +5187,19 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -4598,6 +5215,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4610,6 +5228,7 @@ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -4626,6 +5245,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4635,6 +5255,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4644,6 +5265,7 @@ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dev": true, + "license": "MIT", "dependencies": { "character-entities": "^2.0.0" }, @@ -4657,6 +5279,7 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4666,6 +5289,7 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -4674,13 +5298,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/default-user-agent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==", "dev": true, + "license": "MIT", "dependencies": { "os-name": "~1.0.3" }, @@ -4693,6 +5319,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -4705,6 +5332,7 @@ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4722,6 +5350,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -4739,6 +5368,7 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -4747,13 +5377,15 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4763,6 +5395,7 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -4773,15 +5406,29 @@ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4791,6 +5438,7 @@ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, + "license": "MIT", "dependencies": { "dequal": "^2.0.0" }, @@ -4800,10 +5448,11 @@ } }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -4813,6 +5462,7 @@ "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-1.1.0.tgz", "integrity": "sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8.0.0" } @@ -4822,6 +5472,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -4834,6 +5485,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4846,6 +5498,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -4858,6 +5511,7 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -4870,6 +5524,7 @@ "resolved": "https://registry.npmjs.org/dotenv-safe/-/dotenv-safe-9.1.0.tgz", "integrity": "sha512-2qwVAnUN+EDpu41pIK1XiJpHXKHV9Dnti3cE1EnUXT1/BV5+B7xuSZtgZ/4LExkCpp5F6BGikraezQL+8hKCOA==", "dev": true, + "license": "MIT", "peerDependencies": { "dotenv": ">= 8.2.0" } @@ -4879,6 +5534,7 @@ "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", "dev": true, + "license": "ISC", "dependencies": { "find-up": "^3.0.0", "minimatch": "^3.0.4" @@ -4891,13 +5547,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dotgitignore/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4908,6 +5566,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -4920,6 +5579,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -4933,6 +5593,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4945,6 +5606,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4960,6 +5622,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -4972,6 +5635,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -4980,32 +5644,37 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.810", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz", - "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==", + "version": "1.5.42", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.42.tgz", + "integrity": "sha512-gIfKavKDw1mhvic9nbzA5lZw8QSHpdMwLwXc0cWidQz9B15pDoDdDH4boIatuFfeoCatb3a/NGL6CYRVFxGZ9g==", "dev": true, + "license": "ISC", "peer": true }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -5015,6 +5684,7 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -5027,13 +5697,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/entities": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -5046,21 +5718,37 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -5070,6 +5758,7 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -5130,6 +5819,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -5142,15 +5832,17 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", + "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -5159,12 +5851,12 @@ "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", + "iterator.prototype": "^1.1.3", "safe-array-concat": "^1.1.2" }, "engines": { @@ -5172,10 +5864,11 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/es-object-atoms": { @@ -5183,6 +5876,7 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -5195,6 +5889,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -5209,6 +5904,7 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } @@ -5218,6 +5914,7 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5235,6 +5932,7 @@ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -5271,6 +5969,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esbuild-plugin-glsl/-/esbuild-plugin-glsl-1.2.2.tgz", "integrity": "sha512-HqRe6qf+9q3U4ugce7EXnXf+c+bRGZZWNkUSiJBYCKRLkA5ThhklNxlc1Z/rcBM8DIAKAdZGk+j6nTBaA5SV6A==", + "license": "Zlib", "engines": { "node": ">= 0.10.18" }, @@ -5283,6 +5982,7 @@ "resolved": "https://registry.npmjs.org/esbuild-plugin-node-externals/-/esbuild-plugin-node-externals-1.0.1.tgz", "integrity": "sha512-USzpK87OpVT21TsDfzPg8THB876GCFFMvSlY3Tg8y+ZBG+imiTkz7AchNgJIPUWKdI+0z1WXyX9QVWJCFxH7sg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "5.0.0", "jsonfile": "^6.1.0" @@ -5296,6 +5996,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5312,6 +6013,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -5327,6 +6029,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5342,6 +6045,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -5357,6 +6061,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5366,6 +6071,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5377,6 +6083,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-3.3.1.tgz", "integrity": "sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==", + "license": "MIT", "dependencies": { "resolve": "^1.22.8", "safe-identifier": "^0.4.2", @@ -5388,10 +6095,11 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5400,13 +6108,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5415,16 +6125,18 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -5474,6 +6186,7 @@ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "semver": "^7.5.4" @@ -5504,6 +6217,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=12.0.0" }, @@ -5533,6 +6247,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "peerDependencies": { "eslint": "^8.8.0", "eslint-plugin-react": "^7.28.0" @@ -5543,6 +6258,7 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -5554,15 +6270,17 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -5580,6 +6298,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5589,6 +6308,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin/-/eslint-plugin-1.0.1.tgz", "integrity": "sha512-ervp8C09On0fLA258TvE08AqAr/bhRYgHVZd3BrJjD4JfOA2JGANDLGs06j51oWqfPd7Feoo3OoqHD+fuI2sFQ==", "dev": true, + "license": "ISC", "dependencies": { "requireindex": "~1.1.0" }, @@ -5601,6 +6321,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, + "license": "MIT", "dependencies": { "eslint-utils": "^2.0.0", "regexpp": "^3.0.0" @@ -5616,18 +6337,19 @@ } }, "node_modules/eslint-plugin-es-x": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.7.0.tgz", - "integrity": "sha512-aP3qj8BwiEDPttxQkZdI221DLKq9sI/qHolE2YSQL1/9+xk7dTV+tB1Fz8/IaCA+lnLA1bDEnvaS2LKs0k2Uig==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, "funding": [ "https://github.com/sponsors/ota-meshi", "https://opencollective.com/eslint" ], + "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", + "@eslint-community/regexpp": "^4.11.0", "eslint-compat-utils": "^0.5.1" }, "engines": { @@ -5638,47 +6360,52 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5689,6 +6416,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5698,6 +6426,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5710,6 +6439,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -5722,6 +6452,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5734,6 +6465,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5743,6 +6475,7 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -5755,6 +6488,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-markdownlint/-/eslint-plugin-markdownlint-0.5.0.tgz", "integrity": "sha512-1wkjRz9hNgdM6kLLaxnFxfWf5e/y8lFjptN9aGj3Jfa8o3dC0lYgEkHOHWDEkuMBKYlHGShJlvIsaUs0JIFg5g==", "dev": true, + "license": "MIT", "dependencies": { "markdownlint": "0.29.0" }, @@ -5770,6 +6504,7 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "~3.0.1", @@ -5786,6 +6521,7 @@ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.29.0.tgz", "integrity": "sha512-ASAzqpODstu/Qsk0xW5BPgWnK/qjpBQ4e7IpsSvvFXcfYIjanLTdwFRJK1SIEEh0fGSMKXcJf/qhaZYHyME0wA==", "dev": true, + "license": "MIT", "dependencies": { "markdown-it": "13.0.1", "markdownlint-micromark": "0.1.5" @@ -5799,6 +6535,7 @@ "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.5.tgz", "integrity": "sha512-HvofNU4QCvfUCWnocQP1IAWaqop5wpWrB0mKB6SSh0fcpV0PdmQNS6tdUuFew1utpYlUvYYzz84oDkrD76GB9A==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" } @@ -5808,6 +6545,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", @@ -5837,6 +6575,7 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/eslint-plugin-n/node_modules/brace-expansion": { @@ -5844,6 +6583,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -5855,6 +6595,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -5868,6 +6609,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, + "license": "MIT", "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", @@ -5887,13 +6629,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint-plugin-node/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5904,6 +6648,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5916,15 +6661,17 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-promise": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz", - "integrity": "sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", "dev": true, + "license": "ISC", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5936,48 +6683,51 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", - "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", + "version": "7.37.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", + "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.hasown": "^1.1.4", "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5988,6 +6738,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -6000,6 +6751,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6012,6 +6764,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -6029,6 +6782,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -6038,6 +6792,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6054,6 +6809,7 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -6069,6 +6825,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=4" } @@ -6078,6 +6835,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6090,6 +6848,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -6106,6 +6865,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6120,13 +6880,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6137,6 +6899,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6153,6 +6916,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6164,13 +6928,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6186,13 +6952,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -6208,6 +6976,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6220,6 +6989,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -6235,6 +7005,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -6250,6 +7021,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6259,6 +7031,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6271,6 +7044,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6283,6 +7057,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -6296,10 +7071,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6312,6 +7088,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6324,6 +7101,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -6333,6 +7111,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -6341,13 +7120,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=0.8.x" @@ -6358,6 +7139,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -6380,13 +7162,15 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6399,6 +7183,7 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -6412,13 +7197,15 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6435,6 +7222,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6446,19 +7234,29 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -6468,6 +7266,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -6483,6 +7282,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -6492,6 +7292,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -6503,6 +7304,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6515,6 +7317,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.2.0", "path-exists": "^5.0.0", @@ -6532,6 +7335,7 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -6541,6 +7345,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -6554,13 +7359,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/flat-cache/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6572,6 +7379,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6592,6 +7400,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6605,6 +7414,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6619,13 +7429,15 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/folder-hash": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-4.0.4.tgz", "integrity": "sha512-zEyYH+UsHEfJJcCRSf9ai5I4CTZwZ8ObONRuEI5hcEmJY5pS0FUWKruX9mMnYJrgC7MlPFDYnGsK1R+WFYjLlQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.3", "minimatch": "~5.1.2" @@ -6642,6 +7454,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6650,9 +7463,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -6660,6 +7473,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -6674,15 +7488,17 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6695,10 +7511,11 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -6713,6 +7530,7 @@ "resolved": "https://registry.npmjs.org/formstream/-/formstream-1.5.1.tgz", "integrity": "sha512-q7ORzFqotpwn3Y/GBK2lK7PjtZZwJHz9QE9Phv8zb5IrL9ftGLyi2zjGURON3voK8TaZ+mqJKERYN4lrHYTkUQ==", "dev": true, + "license": "MIT", "dependencies": { "destroy": "^1.0.4", "mime": "^2.5.2", @@ -6725,6 +7543,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6738,13 +7557,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -6757,6 +7579,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6766,6 +7589,7 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6784,6 +7608,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6793,15 +7618,17 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -6809,20 +7636,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -6842,6 +7661,7 @@ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, + "license": "MIT", "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", @@ -6860,6 +7680,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6875,6 +7696,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -6886,6 +7708,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6897,13 +7720,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/get-pkg-repo/node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -6915,13 +7740,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/get-pkg-repo/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -6934,6 +7761,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6948,13 +7776,15 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/get-pkg-repo/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -6964,6 +7794,7 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -6974,6 +7805,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6991,6 +7823,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -7009,6 +7842,7 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7021,6 +7855,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -7033,6 +7868,7 @@ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -7046,10 +7882,11 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -7063,6 +7900,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^8.0.0", "meow": "^12.0.1", @@ -7080,6 +7918,7 @@ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, + "license": "MIT", "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" @@ -7093,6 +7932,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7102,6 +7942,7 @@ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^8.0.0", "semver": "^6.0.0" @@ -7118,6 +7959,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -7131,6 +7973,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -7143,6 +7986,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -7155,6 +7999,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -7167,6 +8012,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -7192,6 +8038,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -7203,10 +8050,11 @@ } }, "node_modules/git-semver-tags/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7219,6 +8067,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -7234,6 +8083,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -7246,6 +8096,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7255,6 +8106,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -7270,6 +8122,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -7287,6 +8140,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -7295,13 +8149,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -7314,6 +8170,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -7323,6 +8180,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -7332,6 +8190,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -7341,6 +8200,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -7353,6 +8213,7 @@ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, + "license": "BSD", "dependencies": { "ini": "^1.3.2" } @@ -7361,7 +8222,8 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/glob": { "version": "8.1.0", @@ -7369,6 +8231,7 @@ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7388,6 +8251,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -7400,6 +8264,7 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, + "license": "BSD-2-Clause", "peer": true }, "node_modules/glob/node_modules/minimatch": { @@ -7407,6 +8272,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7419,6 +8285,7 @@ "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, + "license": "MIT", "dependencies": { "ini": "4.1.1" }, @@ -7429,11 +8296,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -7449,6 +8327,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -7465,6 +8344,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -7485,6 +8365,7 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -7496,19 +8377,22 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -7530,6 +8414,7 @@ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7539,6 +8424,7 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7547,6 +8433,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -7556,6 +8443,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -7568,6 +8456,7 @@ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7580,6 +8469,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7592,6 +8482,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -7606,6 +8497,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -7618,6 +8510,7 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -7627,6 +8520,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -7639,6 +8533,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } @@ -7648,17 +8543,19 @@ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.0.0" } }, "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", + "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", "dev": true, + "license": "MIT", "bin": { - "husky": "bin.mjs" + "husky": "bin.js" }, "engines": { "node": ">=18" @@ -7672,6 +8569,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7697,27 +8595,31 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==" + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7734,6 +8636,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7743,6 +8646,7 @@ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7753,6 +8657,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -7762,6 +8667,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7772,6 +8678,7 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7781,38 +8688,38 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/inquirer": { - "version": "9.2.23", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.23.tgz", - "integrity": "sha512-kod5s+FBPIDM2xiy9fu+6wdU/SkK5le5GS9lh4FEBjBHqiMgD9lLFbCbuqFNAjNL2ZOy9Wd9F694IOzN9pZHBA==", + "version": "9.3.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.7.tgz", + "integrity": "sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/figures": "^1.0.3", - "@ljharb/through": "^2.3.13", "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", "cli-width": "^4.1.0", "external-editor": "^3.1.0", - "lodash": "^4.17.21", "mute-stream": "1.0.0", "ora": "^5.4.1", "run-async": "^3.0.0", "rxjs": "^7.8.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" @@ -7823,6 +8730,7 @@ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -7837,6 +8745,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -7852,13 +8761,15 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7874,6 +8785,7 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -7885,6 +8797,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7897,6 +8811,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7913,6 +8828,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "builtin-modules": "^3.3.0" @@ -7929,6 +8845,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7937,9 +8854,10 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -7955,6 +8873,7 @@ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -7970,6 +8889,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7985,6 +8905,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7993,6 +8914,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8002,6 +8924,7 @@ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -8014,6 +8937,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8026,6 +8950,7 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8040,6 +8965,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -8052,6 +8978,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8061,6 +8988,7 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8073,6 +9001,7 @@ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8084,6 +9013,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -8093,6 +9023,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8108,6 +9039,7 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8117,6 +9049,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8126,6 +9059,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8138,6 +9072,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8154,6 +9089,7 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8166,6 +9102,7 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -8181,6 +9118,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -8193,6 +9131,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8208,6 +9147,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -8223,6 +9163,7 @@ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^2.0.0" }, @@ -8235,6 +9176,7 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -8250,6 +9192,7 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8262,6 +9205,7 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8274,6 +9218,7 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -8286,6 +9231,7 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -8301,41 +9247,45 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -8348,6 +9298,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -8363,6 +9314,7 @@ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } @@ -8371,13 +9323,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -8389,19 +9343,22 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -8410,25 +9367,29 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -8440,13 +9401,15 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -8461,13 +9424,15 @@ "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -8484,6 +9449,7 @@ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -8499,6 +9465,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -8508,6 +9475,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8517,6 +9485,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -8526,6 +9495,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8539,6 +9509,7 @@ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -8550,13 +9521,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/linkify-it": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", "dev": true, + "license": "MIT", "dependencies": { "uc.micro": "^1.0.1" } @@ -8574,21 +9547,22 @@ } }, "node_modules/lint-staged": { - "version": "15.2.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", - "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.4", + "debug": "~4.3.6", "execa": "~8.0.1", - "lilconfig": "~3.1.1", - "listr2": "~8.2.1", - "micromatch": "~4.0.7", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", + "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.4.2" + "yaml": "~2.5.0" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -8601,15 +9575,16 @@ } }, "node_modules/listr2": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.3.tgz", - "integrity": "sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", + "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, @@ -8618,10 +9593,11 @@ } }, "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8630,16 +9606,18 @@ } }, "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -8657,6 +9635,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -8672,6 +9651,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -8689,6 +9669,7 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.15", "parse-json": "^4.0.0", @@ -8705,6 +9686,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -8718,6 +9700,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=6" } @@ -8727,6 +9710,7 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" @@ -8737,6 +9721,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -8751,73 +9736,85 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.mergewith": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.upperfirst": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -8834,6 +9831,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8849,6 +9847,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8865,6 +9864,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8876,13 +9876,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8891,14 +9893,15 @@ } }, "node_modules/log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, @@ -8910,22 +9913,27 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8933,32 +9941,19 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, + "license": "MIT", "dependencies": { "get-east-asian-width": "^1.0.0" }, @@ -8969,57 +9964,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -9032,10 +9982,11 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -9053,6 +10004,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -9068,6 +10020,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -9085,6 +10038,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9095,6 +10049,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -9103,34 +10058,32 @@ } }, "node_modules/loupe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } + "license": "MIT" }, "node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "license": "ISC" }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -9143,6 +10096,7 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "~3.0.1", @@ -9159,6 +10113,7 @@ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.33.0.tgz", "integrity": "sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==", "dev": true, + "license": "MIT", "dependencies": { "markdown-it": "14.0.0", "markdownlint-micromark": "0.1.8" @@ -9175,6 +10130,7 @@ "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.33.0.tgz", "integrity": "sha512-zMK1oHpjYkhjO+94+ngARiBBrRDEUMzooDHBAHtmEIJ9oYddd9l3chCReY2mPlecwH7gflQp1ApilTo+o0zopQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "~9.4.1", "get-stdin": "~9.0.0", @@ -9198,6 +10154,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } @@ -9208,6 +10165,7 @@ "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9227,6 +10185,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -9236,6 +10195,7 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "~3.0.1", @@ -9252,6 +10212,7 @@ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.27.0.tgz", "integrity": "sha512-HtfVr/hzJJmE0C198F99JLaeada+646B5SaG2pVoEakLFI6iRGsvMqrnnrflq8hm1zQgwskEgqSnhDW11JBp0w==", "dev": true, + "license": "MIT", "dependencies": { "markdown-it": "13.0.1" }, @@ -9264,6 +10225,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9276,6 +10238,7 @@ "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.14.0.tgz", "integrity": "sha512-2cqdWy56frU2FTpbuGb83mEWWYuUIYv6xS8RVEoUAuKNw/hXPar2UYGpuzUhlFMngE8Omaz4RBH52MzfRbGshw==", "dev": true, + "license": "MIT", "dependencies": { "globby": "14.0.2", "js-yaml": "4.1.0", @@ -9299,6 +10262,7 @@ "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.5.tgz", "integrity": "sha512-4XKTwQ5m1+Txo2kuQ3Jgpo/KmnG+X90dWt4acufg6HVGadTUG5hzHF/wssp9b5MBYOMCnZ9RMPaU//uHsszF8Q==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/DavidAnson" }, @@ -9311,6 +10275,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -9323,6 +10288,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -9342,13 +10308,15 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/markdownlint-cli2/node_modules/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, + "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } @@ -9358,6 +10326,7 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -9375,6 +10344,7 @@ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.35.0.tgz", "integrity": "sha512-wgp8yesWjFBL7bycA3hxwHRdsZGJhjhyP1dSxKVKrza0EPFYtn+mHtkVy6dvP1kGSjovyG5B8yNP6Frj0UFUJg==", "dev": true, + "license": "MIT", "dependencies": { "markdown-it": "14.1.0", "markdownlint-micromark": "0.1.10" @@ -9391,6 +10361,7 @@ "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.10.tgz", "integrity": "sha512-no5ZfdqAdWGxftCLlySHSgddEjyW4kui4z7amQcGsSKfYC5v/ou+8mIQVyg9KQMeEZLNtz9OPDTj7nnTnoR4FQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -9402,13 +10373,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/markdownlint-cli2/node_modules/path-type": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9421,6 +10394,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -9432,13 +10406,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/markdownlint-micromark": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.8.tgz", "integrity": "sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -9451,6 +10427,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -9463,6 +10440,7 @@ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, + "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } @@ -9472,6 +10450,7 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz", "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -9488,19 +10467,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/markdownlint/node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/matcher-collection": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.1.2.tgz", "integrity": "sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^3.0.2" } @@ -9509,13 +10491,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/matcher-collection/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9526,6 +10510,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9538,6 +10523,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -9562,6 +10548,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" @@ -9576,6 +10563,7 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "*" } @@ -9585,6 +10573,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -9605,21 +10594,24 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "*" } }, "node_modules/mdast-util-to-markdown/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" }, "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0" }, @@ -9643,6 +10635,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -9663,6 +10656,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -9682,6 +10676,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -9703,7 +10698,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/mdast-util-to-markdown/node_modules/micromark-util-types": { "version": "2.0.0", @@ -9719,13 +10715,15 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", @@ -9741,6 +10739,7 @@ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -9755,6 +10754,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0" }, @@ -9767,13 +10767,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/meow": { "version": "12.1.1", "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16.10" }, @@ -9785,13 +10787,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -9811,6 +10815,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -9846,6 +10851,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-factory-destination": "^1.0.0", @@ -9880,6 +10886,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-symbol": "^1.0.0", @@ -9901,6 +10908,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-symbol": "^1.0.0", @@ -9923,6 +10931,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-types": "^1.0.0" @@ -9943,6 +10952,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -9965,6 +10975,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -9987,6 +10998,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0", "micromark-util-types": "^1.0.0" @@ -10007,6 +11019,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0" } @@ -10026,6 +11039,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-symbol": "^1.0.0", @@ -10047,6 +11061,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-chunked": "^1.0.0", "micromark-util-types": "^1.0.0" @@ -10067,6 +11082,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0" } @@ -10086,6 +11102,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -10107,7 +11124,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-html-tag-name": { "version": "1.2.0", @@ -10123,7 +11141,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-normalize-identifier": { "version": "1.1.0", @@ -10140,6 +11159,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0" } @@ -10159,6 +11179,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-types": "^1.0.0" } @@ -10178,6 +11199,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-encode": "^1.0.0", @@ -10199,6 +11221,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-chunked": "^1.0.0", "micromark-util-symbol": "^1.0.0", @@ -10220,7 +11243,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-types": { "version": "1.1.0", @@ -10236,13 +11260,14 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -10256,6 +11281,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -10268,6 +11294,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10277,6 +11304,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -10289,8 +11317,22 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10301,15 +11343,17 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10325,6 +11369,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10334,6 +11379,7 @@ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -10348,6 +11394,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10357,6 +11404,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -10366,6 +11414,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -10374,31 +11423,32 @@ } }, "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "8.1.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", @@ -10413,6 +11463,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10428,6 +11479,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -10439,6 +11491,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10450,36 +11503,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "license": "MIT" }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -10496,6 +11528,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -10507,10 +11540,11 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10518,17 +11552,12 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10544,6 +11573,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -10559,6 +11589,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10568,6 +11599,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10585,6 +11617,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -10603,6 +11636,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10615,6 +11649,7 @@ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10623,42 +11658,47 @@ "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/monaco-editor": { - "version": "0.52.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.0.tgz", - "integrity": "sha512-OeWhNpABLCeTqubfqLMXGsqf6OmPU6pHM85kF3dhy6kq5hnhuVS1p3VrEW/XhWHc71P2tHyS5JFySD8mgs1crw==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.43.0.tgz", + "integrity": "sha512-cnoqwQi/9fml2Szamv1XbSJieGJ1Dc8tENVMD26Kcfl7xGQWp7OBKMjlwKVGYFJ3/AXJjSOGvcqK7Ry/j9BM1Q==", "license": "MIT" }, "node_modules/mout": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.4.tgz", "integrity": "sha512-mZb9uOruMWgn/fw28DG4/yE3Kehfk1zKCLhuDU2O3vlKdnBBr4XaOCqVTflJ5aODavGUPqFHZgrFX3NJVuxGhQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/mute-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -10668,6 +11708,7 @@ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -10678,19 +11719,28 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -10711,25 +11761,27 @@ "resolved": "https://registry.npmjs.org/node-hex/-/node-hex-1.0.1.tgz", "integrity": "sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/normalize-package-data": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz", - "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, @@ -10741,6 +11793,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10750,6 +11804,7 @@ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -10762,15 +11817,17 @@ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", @@ -10782,10 +11839,11 @@ } }, "node_modules/npm-pick-manifest": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz", - "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", "dev": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -10801,6 +11859,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -10816,6 +11875,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10828,6 +11888,7 @@ "resolved": "https://registry.npmjs.org/npm-update/-/npm-update-3.0.1.tgz", "integrity": "sha512-dODuSopdQJbiXcBx6QZmIuctGjvuo68PwfiRnJhUjIYjlfcxmPvwzQKVsK3vUJJtS9yLvf3VFKl4EvgH2r1iSg==", "dev": true, + "license": "MIT", "dependencies": { "boxen": "^1.3.0", "chalk": "^2.4.1", @@ -10840,6 +11901,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -10852,6 +11914,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -10866,6 +11929,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -10875,6 +11939,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -10884,6 +11949,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -10893,6 +11959,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -10905,6 +11972,7 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10914,6 +11982,7 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10926,6 +11995,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -10935,6 +12005,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -10953,6 +12024,7 @@ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10967,6 +12039,7 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10985,6 +12058,7 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10994,28 +12068,12 @@ "node": ">= 0.4" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -11029,9 +12087,10 @@ } }, "node_modules/obsidian": { - "version": "1.5.7-1", - "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.5.7-1.tgz", - "integrity": "sha512-T5ZRuQ1FnfXqEoakTTHVDYvzUEEoT8zSPnQCW31PVgYwG4D4tZCQfKHN2hTz1ifnCe8upvwa6mBTAP2WUA5Vng==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.7.2.tgz", + "integrity": "sha512-k9hN9brdknJC+afKr5FQzDRuEFGDKbDjfCazJwpgibwCAoZNYHYV8p/s3mM8I6AsnKrPKNXf8xGuMZ4enWelZQ==", + "license": "MIT", "dependencies": { "@types/codemirror": "5.60.8", "moment": "2.29.4" @@ -11045,6 +12104,7 @@ "version": "5.60.8", "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz", "integrity": "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==", + "license": "MIT", "dependencies": { "@types/tern": "*" } @@ -11054,6 +12114,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -11063,6 +12124,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -11078,6 +12140,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -11095,6 +12158,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -11118,6 +12182,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11133,6 +12198,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11144,11 +12210,25 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11160,13 +12240,62 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11179,6 +12308,7 @@ "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==", "dev": true, + "license": "MIT", "dependencies": { "osx-release": "^1.0.0", "win-release": "^1.0.0" @@ -11195,6 +12325,7 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11204,6 +12335,7 @@ "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.1.0" }, @@ -11219,6 +12351,7 @@ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11228,6 +12361,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -11243,6 +12377,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -11258,21 +12393,24 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -11285,6 +12423,7 @@ "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-0.4.0.tgz", "integrity": "sha512-D7ihy03eLEIDWOY1YHY3w6I/l00M+3V5HBytBId9OcdVY9w3thE0uAPtRftdIpKrSsinYNb+/DpEFZygdB+J2g==", "dev": true, + "license": "MIT", "dependencies": { "array-unique": "^0.3.2", "is-glob": "^3.1.0" @@ -11298,6 +12437,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -11310,6 +12450,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -11327,13 +12468,15 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -11343,6 +12486,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11352,6 +12496,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11359,13 +12504,15 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -11382,6 +12529,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11391,6 +12539,7 @@ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.16" } @@ -11400,20 +12549,26 @@ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, + "license": [ + "MIT", + "Apache2" + ], "dependencies": { "through": "~2.3" } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -11426,6 +12581,7 @@ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, + "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -11438,6 +12594,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -11447,6 +12604,7 @@ "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^3.0.0", "load-json-file": "^5.2.0" @@ -11460,6 +12618,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -11472,6 +12631,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -11485,6 +12645,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -11500,6 +12661,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -11512,6 +12674,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11521,6 +12684,7 @@ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -11530,15 +12694,17 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -11554,6 +12720,7 @@ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -11562,19 +12729,22 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -11588,6 +12758,7 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -11598,38 +12769,40 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, "node_modules/punycode.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -11640,16 +12813,18 @@ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" } }, "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -11678,13 +12853,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11694,6 +12871,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -11702,13 +12880,15 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -11723,6 +12903,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" @@ -11736,6 +12917,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -11748,6 +12930,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -11761,6 +12944,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -11773,6 +12957,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -11785,6 +12970,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11794,6 +12980,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11802,13 +12989,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -11824,6 +13013,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -11836,6 +13026,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -11849,6 +13040,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -11861,6 +13053,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11870,6 +13063,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -11879,6 +13073,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11892,6 +13087,8 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -11904,6 +13101,7 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -11917,6 +13115,7 @@ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -11934,15 +13133,16 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -11956,6 +13156,7 @@ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -11968,6 +13169,7 @@ "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "remark-parse": "^11.0.0", @@ -11984,6 +13186,7 @@ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", @@ -12000,21 +13203,24 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "*" } }, "node_modules/remark-parse/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" }, "node_modules/remark-parse/node_modules/mdast-util-from-markdown": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -12039,6 +13245,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0" }, @@ -12062,6 +13269,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -12097,6 +13305,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", @@ -12131,6 +13340,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -12152,6 +13362,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -12174,6 +13385,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -12194,6 +13406,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -12216,6 +13429,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -12238,6 +13452,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -12258,6 +13473,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -12277,6 +13493,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -12298,6 +13515,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -12318,6 +13536,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -12337,6 +13556,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -12358,7 +13578,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/remark-parse/node_modules/micromark-util-html-tag-name": { "version": "2.0.0", @@ -12374,7 +13595,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/remark-parse/node_modules/micromark-util-normalize-identifier": { "version": "2.0.0", @@ -12391,6 +13613,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -12410,6 +13633,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" } @@ -12429,6 +13653,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", @@ -12450,6 +13675,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -12471,7 +13697,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/remark-parse/node_modules/micromark-util-types": { "version": "2.0.0", @@ -12487,13 +13714,15 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/remark-parse/node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" }, @@ -12507,6 +13736,7 @@ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", @@ -12522,6 +13752,7 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "*" } @@ -12531,6 +13762,7 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "*" } @@ -12540,6 +13772,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12549,6 +13782,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12558,6 +13792,7 @@ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.5" } @@ -12566,6 +13801,7 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -12583,6 +13819,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12592,59 +13829,51 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, + "license": "MIT", "peer": true, "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, + "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -12654,6 +13883,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -12663,13 +13893,15 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^9.2.0" }, @@ -12688,6 +13920,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -12706,6 +13939,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12721,6 +13955,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } @@ -12730,6 +13965,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -12739,6 +13975,7 @@ "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.12.tgz", "integrity": "sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~3.0.0", @@ -12754,6 +13991,7 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", "dev": true, + "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -12777,6 +14015,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -12785,6 +14024,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -12794,6 +14034,7 @@ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dev": true, + "license": "MIT", "dependencies": { "mri": "^1.1.0" }, @@ -12806,6 +14047,7 @@ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -12837,18 +14079,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-identifier": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", - "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "license": "ISC" }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -12865,14 +14110,17 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.3.tgz", + "integrity": "sha512-ptDWyVmDMVielpz/oWy3YP3nfs7LpJTHIJZboMVs8GEC9eUmtZTZhMHlTW98wY4aEorDfjN38+Wr/XjskFWcfA==", + "license": "MIT", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, @@ -12884,219 +14132,227 @@ } }, "node_modules/sass-embedded": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.77.5.tgz", - "integrity": "sha512-JQI8aprHDRSNK5exXsbusswTENQPJxW1QWUcLdwuyESoJClT1zo8e+4cmaV5OAU4abcRC6Av4/RmLocPdjcR3A==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.80.3.tgz", + "integrity": "sha512-aTxTl4ToSAWg7ILFgAe+kMenj+zNlwHmHK/ZNPrOM8+HTef1Q6zuxolptYLijmHdZHKSMOkWYHgo5MMN6+GIyg==", + "license": "MIT", "peer": true, "dependencies": { - "@bufbuild/protobuf": "^1.0.0", + "@bufbuild/protobuf": "^2.0.0", "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", "immutable": "^4.0.0", "rxjs": "^7.4.0", "supports-color": "^8.1.1", "varint": "^6.0.0" }, + "bin": { + "sass": "dist/bin/sass.js" + }, "engines": { "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.77.5", - "sass-embedded-android-arm64": "1.77.5", - "sass-embedded-android-ia32": "1.77.5", - "sass-embedded-android-x64": "1.77.5", - "sass-embedded-darwin-arm64": "1.77.5", - "sass-embedded-darwin-x64": "1.77.5", - "sass-embedded-linux-arm": "1.77.5", - "sass-embedded-linux-arm64": "1.77.5", - "sass-embedded-linux-ia32": "1.77.5", - "sass-embedded-linux-musl-arm": "1.77.5", - "sass-embedded-linux-musl-arm64": "1.77.5", - "sass-embedded-linux-musl-ia32": "1.77.5", - "sass-embedded-linux-musl-x64": "1.77.5", - "sass-embedded-linux-x64": "1.77.5", - "sass-embedded-win32-arm64": "1.77.5", - "sass-embedded-win32-ia32": "1.77.5", - "sass-embedded-win32-x64": "1.77.5" + "sass-embedded-android-arm": "1.80.3", + "sass-embedded-android-arm64": "1.80.3", + "sass-embedded-android-ia32": "1.80.3", + "sass-embedded-android-riscv64": "1.80.3", + "sass-embedded-android-x64": "1.80.3", + "sass-embedded-darwin-arm64": "1.80.3", + "sass-embedded-darwin-x64": "1.80.3", + "sass-embedded-linux-arm": "1.80.3", + "sass-embedded-linux-arm64": "1.80.3", + "sass-embedded-linux-ia32": "1.80.3", + "sass-embedded-linux-musl-arm": "1.80.3", + "sass-embedded-linux-musl-arm64": "1.80.3", + "sass-embedded-linux-musl-ia32": "1.80.3", + "sass-embedded-linux-musl-riscv64": "1.80.3", + "sass-embedded-linux-musl-x64": "1.80.3", + "sass-embedded-linux-riscv64": "1.80.3", + "sass-embedded-linux-x64": "1.80.3", + "sass-embedded-win32-arm64": "1.80.3", + "sass-embedded-win32-ia32": "1.80.3", + "sass-embedded-win32-x64": "1.80.3" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.77.5.tgz", - "integrity": "sha512-/DfNYoykqwMFduecqa8n0NH+cS6oLdCPFjwhe92efsOOt5WDYEOlolnhoOENZxqdzvSV+8axL+mHQ1Ypl4MLtg==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.80.3.tgz", + "integrity": "sha512-i87crav7sfShzY7AyUneXvs4SWdJ93QlYIpo/2OQPTJV5MjJF8wUp0o9NT8Oo6sUJ26kfgsb64FwqQh1wO5uBg==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.77.5.tgz", - "integrity": "sha512-t4yIhK5OUpg1coZxFpDo3BhI2YVj21JxEd5SVI6FfcWD2ESroQWsC4cbq3ejw5aun8R1Kx6xH1EKxO8bSMvn1g==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.80.3.tgz", + "integrity": "sha512-uaEKdi+PaFc1V87vj2eCUB8B2ThNvEYYu9Qs5sCtx1atEQDtvp/smHYlXOVrg2M4+g2YASkDBQewyk+auZtG0g==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.77.5.tgz", - "integrity": "sha512-92dWhEbR0Z2kpjbpfOx4LM9wlNBSnDsRtwpkMUK8udQIE7uF3E4/Fsf/88IJk0MrRkk4iwrsxxiCb1bz2tWnHQ==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.80.3.tgz", + "integrity": "sha512-XCa4Se7vqWuV5tFLZuYWidPLUCeK7n1AgugircJl/9QPThCGZ2mSRF0Ipj3lv+Qw4GG9kkhCqJIrksTGbSFypw==", "cpu": [ "ia32" ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.80.3.tgz", + "integrity": "sha512-Dn3hYh5rchfivnPrHoff2pWutuFYJRddzEXcjfb0JhgF7JmTA/6Dxaym0pqVpS1RmYDiAYnmoX5OeFtEkdVytA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", "optional": true, "os": [ "android" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-android-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.77.5.tgz", - "integrity": "sha512-lFnXz9lRnjRLJ8Y28ONJViID3rDq4p6LJ/9ByPk2ZnSpx5ouUjsu4AfrXKJ0jgHWBaDvSKSxq2fPpt5aMQAEZA==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.80.3.tgz", + "integrity": "sha512-QWOTHKPznYJnrP3HrlFYnAQOZ/c2am4ctK1cFIMtjQNGaFra8z94LZSQzAd6eeu6mITKwQbJuff36RpICZpgHA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "android" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.77.5.tgz", - "integrity": "sha512-J3yP6w+xqPrGQE0+sO4Gam6kBDJL5ivgkFNxR0fVlvKeN5qVFYhymp/xGRRMxBrKjohEQtBGP431EzrtvUMFow==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.80.3.tgz", + "integrity": "sha512-NqJXHzZGqVOarr36X5MIv0UCQHYVhOFXGe7kDhNqMQCiNApkVydseB5TM1C2lVaiWy2JaseRD/dUNS/o2ICKXw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.77.5.tgz", - "integrity": "sha512-A9fh5tg4s0FidMTG31Vs8TzYZ3Mam/I/tfqvN0g512OhBajp/p2DJvBY+0Br2r+TNH1yGUXf2ZfULuTBFj5u8w==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.80.3.tgz", + "integrity": "sha512-6dmNn+oNxXE5uGThfAsHgz7Jg1oDhXHHQyPAnIIaMOM5dXv0D/nLmrlFbFajK0HtbzGaTVBTE6wkJwjASuP0Uw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.77.5.tgz", - "integrity": "sha512-O7gbOWJloxITBZNkpwChFltxofsnDUf+3pz7+q2ETQKvZQ3kUfFENAF37slo0bsHJ7IEpwJK3ZJlnhZvIgfhgw==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.80.3.tgz", + "integrity": "sha512-nZ7Y8gZgr+/fYrbsX3L8BfIafWXGVBcc0gKLoujad+axlFGv1MetO17S3vzrOQ1wuhjvDLVxceA/jtcta1qxoA==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.77.5.tgz", - "integrity": "sha512-LoN804X7QsyvT/h8UGcgBMfV1SdT4JRRNV+slBICxoXPKBLXbZm9KyLRCBQcMLLdlXSZdOfZilxUN1Bd2az6OA==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.80.3.tgz", + "integrity": "sha512-a9IILen4I6oFFb5qMHOiFqIAoztPuvJ6VHNaFbktP8SUvH4FX63ZutR/qKisN9DoudzSXMZijv/aG/bTh0Kccw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.77.5.tgz", - "integrity": "sha512-KHNJymlEmjyJbhGfB34zowohjgMvv/qKVsDX5hPlar+qMh+cxJwfgPln1Zl9bfe9qLObmEV2zFA1rpVBWy4xGQ==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.80.3.tgz", + "integrity": "sha512-yKy4N0L9WfGokpBMHOhxzaS3jyzrHUg1+5Idi6J88onwxfpEhqOgdMcoqgOqvryMPrmKN7kW5d3iNpUYOniPnw==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.77.5.tgz", - "integrity": "sha512-TLhJzd1TJ0oX1oULobkWLMDLeErD27WbhdZqxtFvIqzyO+1TZPMwojhRX4YNWmHdmmYhIuXTR9foWxwL3Xjgsg==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.80.3.tgz", + "integrity": "sha512-yB7iSoS/phNHKFsZRW0rTRwoCTtOBELG/UYpIa2qATWZsDASSjdBitGsKS3nEliweveuGIVlUqG2kUKaq9M39g==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -13107,12 +14363,13 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.77.5.tgz", - "integrity": "sha512-ZWl8K8rCL4/phm3IPWDADwjnYAiohoaKg7BKjGo+36zv8P0ocoA0A3j4xx7/kjUJWagOmmoTyYxoOu+lo1NaKw==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.80.3.tgz", + "integrity": "sha512-mw4BPe42wlAwg6vgmGkg+MDDyXZBexvAWC+QigtfMjTVHuSAB527UVWhIyv4jAkKLp71mPowsXXsfa4UHzyBaA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -13123,12 +14380,30 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.77.5.tgz", - "integrity": "sha512-83zNSgsIIc+tYQFKepFIlvAvAHnbWSpZ824MjqXJLeCbfzcMO8SZ/q6OA0Zd2SIrf79lCWI4OfPHqp1PI6M7HQ==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.80.3.tgz", + "integrity": "sha512-eyg5L9IFisCYYMXEZ/56X8k8wdhpfK06/j9MFAINE9U4C5NxQXrVWmMTEqgyfpmca8hziBlvbRrjdquteyXWfw==", "cpu": [ "ia32" ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.80.3.tgz", + "integrity": "sha512-0VThiW7Gwo5UNgKyETYID6F2prHvOCH8fQQKM0sS/JSbTu1poTwD35yEptVxBpiTvyWwxI7K5Cbn0gtxobaqzA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -13139,12 +14414,30 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.77.5.tgz", - "integrity": "sha512-/SW9ggXZJilbRbKvRHAxEuQM6Yr9piEpvK7/aDevFL2XFvBW9x+dTzpH5jPVEmM0qWdJisS1r5mEv8AXUUdQZg==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.80.3.tgz", + "integrity": "sha512-ALSKlhTQdNS0cayyaXD8huNd+DRjWgCjDqyjvwSgemfLL+wtmVCO8h9rGu1MCwR8GHP6ceZCT2fBmjfcGHk0DQ==", "cpu": [ "x64" ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.80.3.tgz", + "integrity": "sha512-/1JvuQi137BNO7iTvNNraGYEt9mh3ch44cabJBTxLn3IZV5vNblENI+Hrj9J8/VWIsJumwPQGZSUrMbZcgB0tg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -13155,86 +14448,107 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.77.5.tgz", - "integrity": "sha512-3EmYeY+K8nMwIy1El9C+mPuONMQyXSCD6Yyztn3G7moPdZTqXrTL7kTJIl+SRq1tCcnOMMGXnBRE7Kpou1wd+w==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.80.3.tgz", + "integrity": "sha512-ISQUnl9oFA0PFPtgOpgotfKQ8guUBIYcTpkHEF9lQ4PyFIxkXppk5CwQ8l0VQcQaKhOD2HQAucoqM51U7FABqA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true, - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.77.5.tgz", - "integrity": "sha512-dwVFOqkyfCRQgQB8CByH+MG93fp7IsfFaPDDCQVzVFAT00+HXk/dWFPMnv65XDDndGwsUE1KlZnjg8iOBDlRdw==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.80.3.tgz", + "integrity": "sha512-RFT/OsWHVagPYa/9v+KfVM99QgzwzwnT2maapRfulEH39v0uPGOIFNXmnhaN3E5gNLIjIn3CTnR9KjTC145E8Q==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" ], "peer": true, - "bin": { - "sass": "dart-sass/sass.bat" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.77.5.tgz", - "integrity": "sha512-1ij/K5d2sHPJkytWiPJLoUOVHJOB6cSWXq7jmedeuGooWnBmqnWycmGkhBAEK/t6t1XgzMPsiJMGiHKh7fnBuA==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.80.3.tgz", + "integrity": "sha512-Is0eeX+UlWW7yPfDqc2Z2n9ql2rkA1uDaAkbHWWx5APc8CKYtds1w4B3Tyoy6lHnopEifgzgsnp6QSyOHHzPBg==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" ], "peer": true, - "bin": { - "sass": "dart-sass/sass.bat" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.77.5", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.77.5.tgz", - "integrity": "sha512-Pn6j0jDGeEAhuuVY0CaZaBa7yNkqimEsbUDYYuQ9xh+XdGvZ86SZf6HXHUVIyQUjHORLwQ5f0XoKYYzKfC0y9w==", + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.80.3.tgz", + "integrity": "sha512-wehVA0atPloc6NKof/ctpW0agM+k7kiBLIpQs3/mi9FAlmTjxNnvntBPZIbl8n7AAExiLEir+x/LHC0yGhTfkg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" ], "peer": true, - "bin": { - "sass": "dart-sass/sass.bat" - }, "engines": { "node": ">=14.0.0" } }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -13254,6 +14568,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -13271,6 +14586,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -13281,13 +14597,15 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -13296,10 +14614,11 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -13309,6 +14628,7 @@ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -13326,6 +14646,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -13341,6 +14662,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -13353,6 +14675,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13362,6 +14685,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -13380,6 +14704,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -13392,6 +14717,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13401,6 +14727,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -13416,14 +14743,16 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -13432,6 +14761,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -13442,6 +14772,7 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -13451,29 +14782,33 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dev": true + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -13486,14 +14821,15 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/standard/-/standard-17.1.0.tgz", - "integrity": "sha512-jaDqlNSzLtWYW4lvQmU0EnxWMUGQiwHasZl5ZEIwx3S/ijZDjZOzs1y1QqKwKs5vqnFpGtizo4NOYX2s0Voq/g==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/standard/-/standard-17.1.2.tgz", + "integrity": "sha512-WLm12WoXveKkvnPnPnaFUUHuOB2cUdAsJ4AiGHL2G0UNMrcRAWY2WriQaV8IQ3oRmYr0AWUbLNr94ekYFAHOrA==", "dev": true, "funding": [ { @@ -13509,6 +14845,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "eslint": "^8.41.0", "eslint-config-standard": "17.1.0", @@ -13516,8 +14853,8 @@ "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^15.7.0", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.32.2", - "standard-engine": "^15.0.0", + "eslint-plugin-react": "^7.36.1", + "standard-engine": "^15.1.0", "version-guard": "^1.1.1" }, "bin": { @@ -13546,6 +14883,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "get-stdin": "^8.0.0", "minimist": "^1.2.6", @@ -13561,6 +14899,7 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -13573,6 +14912,7 @@ "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz", "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==", "dev": true, + "license": "ISC", "dependencies": { "chalk": "^2.4.2", "conventional-changelog": "3.1.25", @@ -13601,6 +14941,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -13613,6 +14954,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -13627,6 +14969,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -13637,13 +14980,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/standard-version/node_modules/conventional-changelog-conventionalcommits": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "lodash": "^4.17.15", @@ -13658,6 +15003,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -13667,6 +15013,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -13683,6 +15030,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13692,6 +15040,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -13707,6 +15056,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -13722,6 +15072,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -13737,6 +15088,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13746,6 +15098,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -13758,6 +15111,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13775,6 +15129,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13790,6 +15145,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13802,6 +15158,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -13820,6 +15177,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -13831,13 +15189,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/standard/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13848,6 +15208,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", "dev": true, + "license": "MIT", "dependencies": { "builtins": "^5.0.1", "eslint-plugin-es": "^4.1.0", @@ -13873,6 +15234,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", "dev": true, + "license": "MIT", "dependencies": { "eslint-utils": "^2.0.0", "regexpp": "^3.0.0" @@ -13892,6 +15254,7 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -13907,6 +15270,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=4" } @@ -13916,6 +15280,7 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -13934,6 +15299,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } @@ -13943,6 +15309,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13955,6 +15322,7 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -13964,6 +15332,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -13973,6 +15342,7 @@ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.19" } @@ -13982,6 +15352,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13997,6 +15368,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14011,6 +15383,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14020,6 +15393,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14029,6 +15403,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14050,11 +15425,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14073,6 +15460,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14087,6 +15475,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14104,13 +15493,15 @@ "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14124,6 +15515,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14136,6 +15528,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -14145,6 +15538,7 @@ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14154,6 +15548,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -14166,6 +15561,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -14178,6 +15574,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -14188,12 +15585,14 @@ "node_modules/style-mod": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==" + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "license": "MIT" }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14208,6 +15607,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14220,6 +15620,7 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -14229,6 +15630,7 @@ "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, + "license": "MIT", "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" @@ -14241,13 +15643,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/temp/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14259,6 +15663,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14279,6 +15684,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14292,6 +15698,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -14304,6 +15711,7 @@ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^0.7.0" }, @@ -14316,6 +15724,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, + "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -14327,6 +15736,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -14345,6 +15755,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -14354,6 +15765,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14362,13 +15774,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/term-size/node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, + "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -14379,6 +15793,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -14391,6 +15806,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -14400,6 +15816,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -14412,6 +15829,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14420,13 +15838,15 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/term-size/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -14438,12 +15858,13 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/terser": { - "version": "5.34.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", - "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -14463,6 +15884,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", @@ -14493,37 +15915,18 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/text-extensions": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -14535,13 +15938,15 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } @@ -14551,6 +15956,7 @@ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -14562,22 +15968,32 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -14589,6 +16005,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -14600,13 +16017,15 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14616,6 +16035,7 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -14626,6 +16046,7 @@ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -14638,6 +16059,7 @@ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -14658,6 +16080,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14673,6 +16096,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14689,6 +16113,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14700,13 +16125,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -14716,6 +16143,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14728,6 +16156,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -14771,6 +16200,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -14780,6 +16210,7 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -14790,15 +16221,17 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -14811,6 +16244,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -14823,6 +16257,7 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -14837,6 +16272,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -14856,6 +16292,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -14876,6 +16313,7 @@ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -14895,13 +16333,15 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14914,13 +16354,15 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -14934,6 +16376,7 @@ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -14945,16 +16388,18 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" }, "node_modules/unescape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1" }, @@ -14976,6 +16421,7 @@ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -14988,6 +16434,7 @@ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -15003,16 +16450,18 @@ } }, "node_modules/unified/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" }, "node_modules/unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" }, @@ -15022,16 +16471,18 @@ } }, "node_modules/unist-util-is/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" }, "node_modules/unist-util-stringify-position": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0" }, @@ -15045,6 +16496,7 @@ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0", @@ -15060,6 +16512,7 @@ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" @@ -15074,6 +16527,7 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0" }, @@ -15087,6 +16541,7 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0" }, @@ -15099,21 +16554,23 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -15129,10 +16586,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "peer": true, "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -15146,31 +16604,41 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/url": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", - "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^1.4.1", - "qs": "^6.11.2" + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, "node_modules/urllib": { - "version": "2.43.0", - "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.43.0.tgz", - "integrity": "sha512-ZMCjseCiIFu7jnWYx8wOF/bHXk3UbV1dceMq5JafYEhkwKNOX0tsA0Me3/KhUBvq4jJMs+wfLErRoz+sihUfQQ==", + "version": "2.44.0", + "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.44.0.tgz", + "integrity": "sha512-zRCJqdfYllRDA9bXUtx+vccyRqtJPKsw85f44zH7zPD28PIvjMqIgw9VwoTLV7xTBWZsbebUFVHU5ghQcWku2A==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.3.0", "content-type": "^1.0.2", @@ -15202,6 +16670,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -15213,13 +16682,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utility": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/utility/-/utility-1.18.0.tgz", "integrity": "sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==", "dev": true, + "license": "MIT", "dependencies": { "copy-to": "^2.0.1", "escape-html": "^1.0.3", @@ -15236,6 +16707,7 @@ "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "dev": true, + "license": "MIT", "dependencies": { "dequal": "^2.0.0", "diff": "^5.0.0", @@ -15253,13 +16725,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -15270,6 +16744,7 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -15278,25 +16753,27 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "license": "MIT", "peer": true }, "node_modules/version-guard": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/version-guard/-/version-guard-1.1.2.tgz", - "integrity": "sha512-D8d+YxCUpoqtCnQzDxm6SF7DLU3gr2535T4khAtMq4osBahsQnmSxuwXFdrbAdDGG8Uokzfis/jvyeFPdmlc7w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/version-guard/-/version-guard-1.1.3.tgz", + "integrity": "sha512-JwPr6erhX53EWH/HCSzfy1tTFrtPXUe927wdM1jqBBeYp1OM+qPHjWbsvv6pIBduqdgxxS+ScfG7S28pzyr2DQ==", "dev": true, + "license": "0BSD", "engines": { "node": ">=0.10.48" } }, "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" }, "funding": { @@ -15309,6 +16786,7 @@ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" @@ -15319,16 +16797,18 @@ } }, "node_modules/vfile-message/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" }, "node_modules/vfile-message/node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" }, @@ -15338,29 +16818,18 @@ } }, "node_modules/vfile/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true - }, - "node_modules/vfile/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT" }, "node_modules/vscode-jsonrpc": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -15370,6 +16839,7 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", "dev": true, + "license": "MIT", "dependencies": { "vscode-languageserver-protocol": "3.17.3" }, @@ -15382,6 +16852,7 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", "dev": true, + "license": "MIT", "dependencies": { "vscode-jsonrpc": "8.1.0", "vscode-languageserver-types": "3.17.3" @@ -15391,46 +16862,53 @@ "version": "3.17.3", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", - "dev": true + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT" }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" }, "node_modules/walk-sync": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.4.tgz", "integrity": "sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==", "dev": true, + "license": "MIT", "dependencies": { "ensure-posix-path": "^1.0.0", "matcher-collection": "^1.0.0" } }, "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -15445,6 +16923,7 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -15453,13 +16932,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "version": "5.95.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/estree": "^1.0.5", @@ -15507,6 +16988,7 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=10.13.0" @@ -15517,6 +16999,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", @@ -15531,6 +17014,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -15541,6 +17025,7 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/whatwg-url": { @@ -15548,6 +17033,7 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -15558,6 +17044,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -15573,6 +17060,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -15585,13 +17073,14 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", "dev": true, + "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", @@ -15600,8 +17089,8 @@ "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -15615,6 +17104,7 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -15633,6 +17123,7 @@ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -15652,6 +17143,7 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^2.1.1" }, @@ -15664,6 +17156,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -15673,6 +17166,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -15682,6 +17176,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -15695,6 +17190,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -15707,6 +17203,7 @@ "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", "integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^5.0.1" }, @@ -15719,6 +17216,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -15728,6 +17226,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -15736,19 +17235,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -15764,6 +17266,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -15781,6 +17284,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15796,6 +17300,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15807,13 +17312,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15829,6 +17336,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15840,19 +17348,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15862,6 +17373,7 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } @@ -15871,6 +17383,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -15879,13 +17392,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -15898,6 +17413,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -15912,10 +17428,11 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -15925,6 +17442,7 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -15940,6 +17458,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15952,6 +17471,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15961,6 +17481,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -15970,15 +17491,17 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -15986,11 +17509,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" diff --git a/package.json b/package.json index e8c0aeb..17b4246 100644 --- a/package.json +++ b/package.json @@ -121,53 +121,53 @@ } }, "devDependencies": { - "@commitlint/cli": "^19.3.0", - "@commitlint/config-conventional": "^19.2.2", + "@commitlint/cli": "^19.5.0", + "@commitlint/config-conventional": "^19.5.0", "@electron/lint-roller": "^1.13.0", - "@npmcli/package-json": "^5.2.0", + "@npmcli/package-json": "^5.2.1", "@octokit/rest": "^20.1.1", "@types/codemirror": "^5.60.15", "@types/extend": "^3.0.4", "@types/fs-extra": "^11.0.4", "@types/minimist": "^1.2.5", - "@types/node": "^20.14.8", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", - "axios": "^1.7.4", + "@types/node": "^20.16.14", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", + "axios": "^1.7.7", "chai": "^5.1.1", "check-for-leaks": "^1.2.1", "colors": "^1.4.0", "dotenv": "^16.4.5", "dotenv-safe": "^9.1.0", "esbuild-plugin-node-externals": "^1.0.1", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-standard": "^17.1.0", "eslint-plugin": "^1.0.1", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-markdownlint": "^0.5.0", "eslint-plugin-node": "^11.1.0", "extend": "^3.0.2", "folder-hash": "^4.0.4", "fs-extra": "^11.2.0", - "husky": "^9.0.11", - "inquirer": "^9.2.23", + "husky": "^9.1.6", + "inquirer": "^9.3.7", "lint": "^1.1.2", - "lint-staged": "^15.2.7", + "lint-staged": "^15.2.10", "markdownlint": "^0.33.0", "markdownlint-cli2": "^0.14.0", "minimist": "^1.2.8", - "mocha": "^10.4.0", + "mocha": "^10.7.3", "npm-update": "^3.0.1", - "prettier": "^3.3.2", + "prettier": "^3.3.3", "remark": "^15.0.1", "standard-version": "^9.5.0", "temp": "^0.9.4", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.5.2", + "typescript": "^5.6.3", "unicorn": "^0.0.1", - "url": "^0.11.3" + "url": "^0.11.4" }, "badges": [ { @@ -201,9 +201,9 @@ "esbuild": "^0.20.2", "esbuild-plugin-glsl": "^1.2.2", "esbuild-sass-plugin": "^3.3.1", - "monaco-editor": "^0.52.0", - "obsidian": "^1.5.7-1", - "terser": "^5.34.1" + "monaco-editor": "^0.43.0", + "obsidian": "^1.7.2", + "terser": "^5.36.0" }, "capabilities": { "untrustedWorkspaces": { From dd15f3107f518b8630f6ba700ae65053e2afaa7f Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 25 Oct 2024 16:31:06 +0300 Subject: [PATCH 58/63] feat(monaco-editor): integrate workers from monaco to fix visuals of code view --- esbuild.config.mjs | 15 +++ package.json | 2 +- source/components/views/view_codemirror.ts | 2 +- source/components/views/view_monaco.ts | 105 +++++---------------- source/utils/utils.ts | 102 ++++++++++++++++++++ source/worker.d.ts | 24 +++++ tsconfig.json | 3 +- 7 files changed, 169 insertions(+), 84 deletions(-) create mode 100644 source/worker.d.ts diff --git a/esbuild.config.mjs b/esbuild.config.mjs index 031508e..bf703f7 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -23,6 +23,21 @@ const context = await esbuild.context({ glsl({ minify: true, }), + { + name: 'worker-plugin', + setup(build) { + build.onResolve({ filter: /\.worker$/ }, args => { + return { path: args.path, namespace: 'worker' }; + }); + + build.onLoad({ filter: /.*/, namespace: 'worker' }, async (args) => { + return { + contents: `export default function WorkerWrapper() { return new Worker(new URL("${args.path}", import.meta.url)) }`, + loader: 'js', + }; + }); + }, + }, ], bundle: true, external: [ diff --git a/package.json b/package.json index 17b4246..5e1771e 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,4 @@ -{ +{ "name": "unitade", "displayName": "UNITADE.md", "private": true, diff --git a/source/components/views/view_codemirror.ts b/source/components/views/view_codemirror.ts index 47be8db..20f88be 100644 --- a/source/components/views/view_codemirror.ts +++ b/source/components/views/view_codemirror.ts @@ -85,6 +85,6 @@ export default class UNITADE_VIEW extends TextFileView { } getViewType(): string { - return this._extension; + return 'mirrorview'; } } diff --git a/source/components/views/view_monaco.ts b/source/components/views/view_monaco.ts index b3a6463..4e4db85 100644 --- a/source/components/views/view_monaco.ts +++ b/source/components/views/view_monaco.ts @@ -11,14 +11,8 @@ import UNITADE_PLUGIN from "../../main"; export class UNITADE_VIEW_CODE extends TextFileView { value = ""; - monacoEditor: monaco.editor.IStandaloneCodeEditor | undefined; + monacoEditor!: monaco.editor.IStandaloneCodeEditor; - /** - * Creates an instance of the `UNITADE_VIEW_CODE`. - * - * @param leaf - The workspace leaf associated with this view. - * @param plugin - Reference to the `CodeFilesPlugin` instance. - */ constructor(leaf: WorkspaceLeaf, private plugin: UNITADE_PLUGIN) { super(leaf); } @@ -30,17 +24,10 @@ export class UNITADE_VIEW_CODE extends TextFileView { await super.onOpen(); } - /** - * Loads a file into the Monaco editor. - * - * @param file - The TFile instance representing the file to be loaded. - */ async onLoadFile(file: TFile) { - // Generate editor settings based on the plugin's configuration and file extension const setting = genEditorSettings(this.plugin.settings, this.file?.extension ?? ""); - this.monacoEditor = monaco.editor.create(this.contentEl, setting); - // Trigger file save when editor content changes + this.monacoEditor = monaco.editor.create(this.contentEl, setting); this.monacoEditor.onDidChangeModelContent(() => { this.requestSave(); }); @@ -51,30 +38,20 @@ export class UNITADE_VIEW_CODE extends TextFileView { await super.onLoadFile(file); } - /** - * Unloads the current file, removes event listeners, and disposes of the Monaco editor. - * - * @param file - The TFile instance representing the file being unloaded. - */ async onUnloadFile(file: TFile) { - window.removeEventListener('keydown', this.keyHandle, true); + window.removeEventListener('keydown', this.__keyHandler, true); + await super.onUnloadFile(file); - this.monacoEditor!.dispose(); + this.monacoEditor.dispose(); } - /** - * Executes when the view is closed. - */ async onClose() { await super.onClose(); } - /** - * Recalculates the layout of the Monaco editor when the view is resized. - */ onResize() { - this.monacoEditor!.layout(); + this.monacoEditor.layout(); } /** @@ -86,67 +63,36 @@ export class UNITADE_VIEW_CODE extends TextFileView { return 'codeview'; } - /** - * Retrieves the file path for the current context. - * - * @param file - Optional TFile instance representing the current file. - * @returns The file path or undefined if no file is loaded. - */ getContext(file?: TFile) { return file?.path ?? this.file?.path; } - /** - * Retrieves the current content of the editor. - * - * @returns The current editor content as a string. - */ getViewData = (): string => { - return this.monacoEditor!.getValue(); + return this.monacoEditor.getValue(); } - /** - * Sets the content of the editor. - * - * @param data - The string content to be set in the editor. - * @param clear - If true, clears the current content before setting the new data. - */ setViewData = (data: string, clear: boolean) => { if (clear) { - this.monacoEditor!.getModel()?.setValue(data); + this.monacoEditor.getModel()?.setValue(data); } else { - this.monacoEditor!.setValue(data); + this.monacoEditor.setValue(data); } } - /** - * Clears the editor's content. - */ clear = () => { - this.monacoEditor!.setValue(''); + this.monacoEditor.setValue(''); } - /** - * Adds event listeners for keyboard shortcuts in the editor. - */ private addKeyEvents = () => { - window.addEventListener('keydown', this.keyHandle, true); + window.addEventListener('keydown', this.__keyHandler, true); } - /** - * Adds event listeners for handling `Ctrl` + mouse wheel events to adjust font size. - */ private addCtrlKeyWheelEvents = () => { - this.containerEl.addEventListener('wheel', this.mousewheelHandle, true); + this.containerEl.addEventListener('wheel', this.__mousewheelHandler, true); } - /** - * Handles specific key events such as `Ctrl + f` for search or `Alt + z` for toggling word wrap. - * - * @param event - The keyboard event. - */ - private keyHandle = (event: KeyboardEvent) => { - const ctrlMap = new Map([ + private __keyHandler = async (event: KeyboardEvent) => { + const KEYMAP = new Map([ ['f', 'actions.find'], ['h', 'editor.action.startFindReplaceAction'], ['/', 'editor.action.commentLine'], @@ -157,10 +103,10 @@ export class UNITADE_VIEW_CODE extends TextFileView { ]); if (event.ctrlKey) { - const triggerName = ctrlMap.get(event.key); - if (triggerName) { - this.monacoEditor!.trigger('', triggerName, null); - } + const trigger_name = KEYMAP.get(event.key); + + if (trigger_name) + this.monacoEditor.trigger('', trigger_name, null); } if (event.altKey) { @@ -173,20 +119,16 @@ export class UNITADE_VIEW_CODE extends TextFileView { }, }; - this.plugin.uptSettings(next); - this.monacoEditor!.updateOptions({ + await this.plugin.uptSettings(next); + + this.monacoEditor.updateOptions({ wordWrap: this.plugin.settings.code_editor_settings.word_wrapping ? "on" : "off", }); } } } - /** - * Handles `Ctrl + mouse wheel` events to adjust font size in the editor. - * - * @param event - The wheel event. - */ - private mousewheelHandle = (event: WheelEvent) => { + private __mousewheelHandler = async (event: WheelEvent) => { if (event.ctrlKey) { const delta = event.deltaY > 0 ? 1 : -1; @@ -198,7 +140,8 @@ export class UNITADE_VIEW_CODE extends TextFileView { }, } - this.plugin.uptSettings(next); + await this.plugin.uptSettings(next); + this.monacoEditor!.updateOptions({ fontSize: this.plugin.settings.code_editor_settings.font_size, }); diff --git a/source/utils/utils.ts b/source/utils/utils.ts index e76e3c7..3380359 100644 --- a/source/utils/utils.ts +++ b/source/utils/utils.ts @@ -354,6 +354,105 @@ export function getLanguage(extension: string): string { } } +import 'monaco-editor/esm/vs/basic-languages/css/css.contribution' +import 'monaco-editor/esm/vs/basic-languages/xml/xml.contribution' +import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution' + +import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker'; +import TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker'; +import JsonWorker from 'monaco-editor/esm/vs/language/json/json.worker'; +import CssWorker from 'monaco-editor/esm/vs/language/css/css.worker'; +import HtmlWorker from 'monaco-editor/esm/vs/language/html/html.worker'; + +export function getWorker(language: string): Worker { + switch (language) { + case "javascript": + case "typescript": + return new TsWorker(); + case "css": + return new CssWorker(); + case "html": + return new HtmlWorker(); + case "json": + return new JsonWorker(); + // Additional languages mapped to a general editor worker + case "cpp": + case "python": + case "java": + case "php": + case "sql": + case "yaml": + case "bat": + case "lua": + case "ruby": + case "markdown": + case "r": + case "freemarker2": + case "restructuredtext": + case "hcl": + case "ini": + case "pug": + case "dart": + case "rust": + case "less": + case "apex": + case "tcl": + case "abap": + case "ecl": + case "pla": + case "vb": + case "sb": + case "m3": + case "go": + case "mips": + case "perl": + case "wgsl": + case "twig": + case "scss": + case "redis": + case "shell": + case "scala": + case "julia": + case "msdax": + case "lexon": + case "razor": + case "bicep": + case "azcli": + case "swift": + case "flow9": + case "xml": + case "kotlin": + case "cypher": + case "coffeescript": + case "fsharp": + case "scheme": + case "sparql": + case "aes": + case "liquid": + case "pascal": + case "elixir": + case "qsharp": + case "csharp": + case "clojure": + case "cameligo": + case "sol": + case "proto": + case "postiats": + case "pascaligo": + case "dockerfile": + case "handlebars": + case "powerquery": + case "objective-c": + case "systemverilog": + case "verilog": + case "st": + case "c": + return new EditorWorker(); + default: + return new EditorWorker(); // Default worker for unsupported languages + } +} + /** * Generates editor settings for the Monaco editor based on user preferences and provided options. * @@ -404,6 +503,9 @@ export function genEditorSettings( 'semanticHighlighting.enabled': true, }; + if(setting.debug_mode) + console.debug(settings); + return settings; } diff --git a/source/worker.d.ts b/source/worker.d.ts new file mode 100644 index 0000000..604ccbb --- /dev/null +++ b/source/worker.d.ts @@ -0,0 +1,24 @@ +declare module 'monaco-editor/esm/vs/editor/editor.worker' { + const WorkerFactory: new () => Worker; + export default WorkerFactory; +} + +declare module 'monaco-editor/esm/vs/language/typescript/ts.worker' { + const WorkerFactory: new () => Worker; + export default WorkerFactory; +} + +declare module 'monaco-editor/esm/vs/language/json/json.worker' { + const WorkerFactory: new () => Worker; + export default WorkerFactory; +} + +declare module 'monaco-editor/esm/vs/language/css/css.worker' { + const WorkerFactory: new () => Worker; + export default WorkerFactory; +} + +declare module 'monaco-editor/esm/vs/language/html/html.worker' { + const WorkerFactory: new () => Worker; + export default WorkerFactory; +} diff --git a/tsconfig.json b/tsconfig.json index 2672787..c7fa5de 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,6 +30,7 @@ "venv" ], "include": [ - "**/*.ts" + "**/*.ts", + "**/*.d.ts" ] } From 9f5ba743a18826a01fa76b53c7691e4cee464382 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Fri, 25 Oct 2024 16:31:34 +0300 Subject: [PATCH 59/63] feat(monaco-editor): implement monaco view in the main codebase --- source/main.ts | 159 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 103 insertions(+), 56 deletions(-) diff --git a/source/main.ts b/source/main.ts index 2069cb9..d1ae609 100644 --- a/source/main.ts +++ b/source/main.ts @@ -55,6 +55,7 @@ import { } from './components/modals/folder-edit'; import { + getWorker, isTFolder } from './utils/utils'; @@ -113,6 +114,12 @@ export default class UNITADE_PLUGIN extends Plugin { await this.ldSettings(); + window.MonacoEnvironment = { + getWorker (_: string, label: string) { + return getWorker(label); + } + } + this.app.vault.on('create', async (file) => { const filename: string[] = file.name.split('.').splice(1); @@ -229,64 +236,88 @@ export default class UNITADE_PLUGIN extends Plugin { this.registerEvent(this.__ctxEditExts()); this.registerEvent(this.__ctxFence()); - this._observer = new MutationObserver(async (mutations) => { - const mutation = mutations[0]; - if (mutations.length !== 1 || mutation.addedNodes.length !== 1 || !this.hover.linkText) return; - - const addedNode = mutation.addedNodes[0] as HTMLElement; - if (addedNode.className !== "popover hover-popover") return; - - const file = this.app.metadataCache.getFirstLinkpathDest(this.hover.linkText, this.hover.sourcePath); - if (!file || !this.settings.extensions.includes(file.extension)) return; - - const fileContent = await this.app.vault.read(file); - const contentEl = createDiv(); - - new ContextEditor(contentEl, this, fileContent, file.extension, false, true); - - const w = 700, h = 500, gep = 10; - const x = this.hover.event.clientX, y = this.hover.event.clientY; - const target = this.hover.event.target as HTMLElement; - const targetRect = target.getBoundingClientRect(); - - if (addedNode instanceof HTMLDivElement) { - addedNode.style.position = "absolute"; - addedNode.style.left = `${x + gep}px`; - - const spaceBelow = window.innerHeight - y - gep * 3; - const spaceAbove = y - gep * 3; - - if (spaceBelow > h) { - addedNode.style.top = `${targetRect.bottom + gep}px`; - } else if (spaceAbove > h) { - addedNode.style.top = `${targetRect.top - h - gep}px`; - } else { - addedNode.style.top = `${targetRect.top - h / 2 - gep}px`; - addedNode.style.left = `${targetRect.right + gep * 2}px`; - } - } - - contentEl.setCssProps({ - "width": `${w}px`, - "height": `${h}px`, - "padding-top": "10px", - "padding-bottom": "10px", - }); - - addedNode.empty(); - addedNode.appendChild(contentEl); - }); + this._observer = new MutationObserver(async (mutation) => { + if (mutation.length !== 1) return; + if (mutation[0].addedNodes.length !== 1) return; + if (this.hover.linkText === null) return; + + //@ts-expect-error Accessing runtime API + if (mutation[0].addedNodes[0].className !== "popover hover-popover") return; + const file = this.app.metadataCache.getFirstLinkpathDest(this.hover.linkText, this.hover.sourcePath); + if (!file) return; + + let valid: boolean = false; + + if(!this.settings.code_editor_settings.use_default_extensions) + valid = this.settings.code_editor_settings.extensions.includes(file.extension); + else + valid = this.settings.extensions.includes(file.extension); + + if (valid === false) return; + const fileContent = await this.app.vault.read(file); + + const node: Node = mutation[0].addedNodes[0]; + const contentEl = createDiv(); + + new ContextEditor( + contentEl, + this, + fileContent, + file.extension, + false, + true + ); + + const w = 700; + const h = 500; + const gep = 10; + if (node instanceof HTMLDivElement) { + const x = this.hover.event.clientX; + const y = this.hover.event.clientY; + const target = this.hover.event.target as HTMLElement; + const targetRect = target.getBoundingClientRect(); + const targetTop = targetRect.top; + const targetBottom = targetRect.bottom; + const targeRight = targetRect.right + node.style.position = "absolute"; + node.style.left = `${x + gep}px`; + + const spaceBelow = window.innerHeight - y - gep * 3; + const spaceAbove = y - gep * 3; + if (spaceBelow > h) { + node.style.top = `${targetBottom + gep}px`; + } else if (spaceAbove > h) { + node.style.top = `${targetTop - h - gep}px`; + } else { + node.style.top = `${targetTop - (h / 2) - gep}px`; + node.style.left = `${targeRight + gep * 2}px`; + } + } + + contentEl.setCssProps({ + "width": `${w}px`, + "height": `${h}px`, + "padding-top": "10px", + "padding-bottom": "10px", + }); + + node.empty(); + node.appendChild(contentEl); + }); this.registerEvent(this.app.workspace.on("hover-link", async (event: any) => { - const { linktext: linkText, sourcePath, event: hoverEvent } = event; - if (!linkText || !sourcePath) return; - - Object.assign(this.hover, { linkText, sourcePath, event: hoverEvent }); - })); + const linkText: string = event.linktext; + const sourcePath: string = event.sourcePath; + + if (!linkText || !sourcePath) return; + + this.hover.linkText = linkText; + this.hover.sourcePath = sourcePath; + this.hover.event = event.event; + })); this._observer.observe(document, { childList: true, subtree: true }); - this.__apply(); } @@ -385,7 +416,7 @@ export default class UNITADE_PLUGIN extends Plugin { async onunload(): Promise { super.onunload(); - this._observer!.disconnect(); + this._observer.disconnect(); this.__unapply(this.settings); @@ -437,7 +468,11 @@ export default class UNITADE_PLUGIN extends Plugin { */ private __apply(): void { - this.registerView('codeview', leaf => new UNITADE_VIEW_CODE(leaf, this)); + /**@ts-expect-error: not part of public API, accessing through runtime. */ + if (this.app.viewRegistry.viewByType['codeview'] === undefined || + /**@ts-expect-error: not part of public API, accessing through runtime. */ + this.app.viewRegistry.viewByType['codeview'] === null) + this.registerView('codeview', leaf => new UNITADE_VIEW_CODE(leaf, this)); if (this.settings.is_grouped) { const data: { [key: string]: string[] } = parsegroup(this.settings.grouped_extensions); @@ -448,11 +483,23 @@ export default class UNITADE_PLUGIN extends Plugin { } if (this.is_mobile) { - this.__applyCfg(this.settings.mobile_settings.extensions ?? this.settings.extensions, 'markdown'); + this.__applyCfg(this.settings.mobile_settings.extensions ?? this.settings.extensions, 'markdown'); } else { this.__applyCfg(this.settings.extensions, 'markdown'); } + if(this.settings.code_editor_settings.enabled) { + if(this.settings.code_editor_settings.use_default_extensions) { + if(this.is_mobile) + this.__applyCfg(this.settings.mobile_settings.extensions ?? this.settings.extensions, 'codeview'); + else + this.__applyCfg(this.settings.extensions, 'codeview'); + } + else { + this.__applyCfg(this.settings.code_editor_settings.extensions, 'codeview'); + } + } + const forced_extensions = this.settings.forced_extensions.split('>').map(s => s.trim()); for (const extension of forced_extensions) { From ba59d5b06d99517709acbcb65bfa54a46aaf9aea Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sun, 3 Nov 2024 20:32:47 +0300 Subject: [PATCH 60/63] fix!(styles): add styling for monaco-editor --- custom.css | 0 esbuild.config.mjs | 26 + main.css | 4590 ++++++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 20 +- 4 files changed, 4620 insertions(+), 16 deletions(-) create mode 100644 custom.css create mode 100644 main.css diff --git a/custom.css b/custom.css new file mode 100644 index 0000000..e69de29 diff --git a/esbuild.config.mjs b/esbuild.config.mjs index bf703f7..f8f243d 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -3,6 +3,7 @@ import { sassPlugin } from 'esbuild-sass-plugin' import process from "process"; import builtins from "builtin-modules"; import glsl from "esbuild-plugin-glsl"; +import fs from 'fs'; const banner = `/* @@ -11,6 +12,29 @@ if you want to view the source, please visit the github repository of this plugi */ `; +let assigner = { + name: 'main', + setup(build) { + build.onEnd(() => { + const main = fs.readFileSync('main.css', 'utf8'); + const custom = fs.readFileSync('custom.css', 'utf8'); + + const combined = main + '\n' + custom; + + fs.writeFileSync('out/styles.css', combined, 'utf8'); + }); + } +} + +let manifest = { + name: 'main', + setup(build) { + build.onEnd(() => { + fs.writeFileSync('out/manifest.json', fs.readFileSync('manifest.json'), 'utf8'); + }); + } +} + const prod = (process.argv[2] === "production"); const context = await esbuild.context({ @@ -38,6 +62,8 @@ const context = await esbuild.context({ }); }, }, + assigner, + manifest ], bundle: true, external: [ diff --git a/main.css b/main.css new file mode 100644 index 0000000..2d52870 --- /dev/null +++ b/main.css @@ -0,0 +1,4590 @@ +/* node_modules/monaco-editor/esm/vs/editor/standalone/browser/standalone-tokens.css */ +.monaco-editor { + font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "HelveticaNeue-Light", system-ui, "Ubuntu", "Droid Sans", sans-serif; + --monaco-monospace-font: "SF Mono", Monaco, Menlo, Consolas, "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace; +} +.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label { + stroke-width: 1.2px; +} +.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label, +.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label, +.monaco-editor.hc-light .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label { + stroke-width: 1.2px; +} +.monaco-hover p { + margin: 0; +} +.monaco-aria-container { + position: absolute !important; + top: 0; + height: 1px; + width: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/aria/aria.css */ +.monaco-aria-container { + position: absolute; + left: -999em; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/widget/media/editor.css */ +::-ms-clear { + display: none; +} +.monaco-editor .editor-widget input { + color: inherit; +} +.monaco-editor { + position: relative; + overflow: visible; + -webkit-text-size-adjust: 100%; + color: var(--vscode-editor-foreground); + background-color: var(--vscode-editor-background); +} +.monaco-editor-background { + background-color: var(--vscode-editor-background); +} +.monaco-editor .rangeHighlight { + background-color: var(--vscode-editor-rangeHighlightBackground); + box-sizing: border-box; + border: 1px solid var(--vscode-editor-rangeHighlightBorder); +} +.monaco-editor.hc-black .rangeHighlight, +.monaco-editor.hc-light .rangeHighlight { + border-style: dotted; +} +.monaco-editor .symbolHighlight { + background-color: var(--vscode-editor-symbolHighlightBackground); + box-sizing: border-box; + border: 1px solid var(--vscode-editor-symbolHighlightBorder); +} +.monaco-editor.hc-black .symbolHighlight, +.monaco-editor.hc-light .symbolHighlight { + border-style: dotted; +} +.monaco-editor .overflow-guard { + position: relative; + overflow: hidden; +} +.monaco-editor .view-overlays { + position: absolute; + top: 0; +} +.monaco-editor .squiggly-error { + border-bottom: 4px double var(--vscode-editorError-border); +} +.monaco-editor .squiggly-error::before { + display: block; + content: ""; + width: 100%; + height: 100%; + background: var(--vscode-editorError-background); +} +.monaco-editor .squiggly-warning { + border-bottom: 4px double var(--vscode-editorWarning-border); +} +.monaco-editor .squiggly-warning::before { + display: block; + content: ""; + width: 100%; + height: 100%; + background: var(--vscode-editorWarning-background); +} +.monaco-editor .squiggly-info { + border-bottom: 4px double var(--vscode-editorInfo-border); +} +.monaco-editor .squiggly-info::before { + display: block; + content: ""; + width: 100%; + height: 100%; + background: var(--vscode-editorInfo-background); +} +.monaco-editor .squiggly-hint { + border-bottom: 2px dotted var(--vscode-editorHint-border); +} +.monaco-editor.showUnused .squiggly-unnecessary { + border-bottom: 2px dashed var(--vscode-editorUnnecessaryCode-border); +} +.monaco-editor.showDeprecated .squiggly-inline-deprecated { + text-decoration: line-through; + text-decoration-color: var(--vscode-editor-foreground, inherit); +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/media/scrollbars.css */ +.monaco-scrollable-element > .scrollbar > .scra { + cursor: pointer; + font-size: 11px !important; +} +.monaco-scrollable-element > .visible { + opacity: 1; + background: rgba(0, 0, 0, 0); + transition: opacity 100ms linear; + z-index: 11; +} +.monaco-scrollable-element > .invisible { + opacity: 0; + pointer-events: none; +} +.monaco-scrollable-element > .invisible.fade { + transition: opacity 800ms linear; +} +.monaco-scrollable-element > .shadow { + position: absolute; + display: none; +} +.monaco-scrollable-element > .shadow.top { + display: block; + top: 0; + left: 3px; + height: 3px; + width: 100%; + box-shadow: var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset; +} +.monaco-scrollable-element > .shadow.left { + display: block; + top: 3px; + left: 0; + height: 100%; + width: 3px; + box-shadow: var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset; +} +.monaco-scrollable-element > .shadow.top-left-corner { + display: block; + top: 0; + left: 0; + height: 3px; + width: 3px; +} +.monaco-scrollable-element > .shadow.top.left { + box-shadow: var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset; +} +.monaco-scrollable-element > .scrollbar > .slider { + background: var(--vscode-scrollbarSlider-background); +} +.monaco-scrollable-element > .scrollbar > .slider:hover { + background: var(--vscode-scrollbarSlider-hoverBackground); +} +.monaco-scrollable-element > .scrollbar > .slider.active { + background: var(--vscode-scrollbarSlider-activeBackground); +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaHandler.css */ +.monaco-editor .inputarea { + min-width: 0; + min-height: 0; + margin: 0; + padding: 0; + position: absolute; + outline: none !important; + resize: none; + border: none; + overflow: hidden; + color: transparent; + background-color: transparent; + z-index: -10; +} +.monaco-editor .inputarea.ime-input { + z-index: 10; + caret-color: var(--vscode-editorCursor-foreground); + color: var(--vscode-editor-foreground); +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.css */ +.monaco-editor .margin-view-overlays .line-numbers { + font-variant-numeric: tabular-nums; + position: absolute; + text-align: right; + display: inline-block; + vertical-align: middle; + box-sizing: border-box; + cursor: default; + height: 100%; +} +.monaco-editor .relative-current-line-number { + text-align: left; + display: inline-block; + width: 100%; +} +.monaco-editor .margin-view-overlays .line-numbers.lh-odd { + margin-top: 1px; +} +.monaco-editor .line-numbers { + color: var(--vscode-editorLineNumber-foreground); +} +.monaco-editor .line-numbers.active-line-number { + color: var(--vscode-editorLineNumber-activeForeground); +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/margin/margin.css */ +.monaco-editor .margin { + background-color: var(--vscode-editorGutter-background); +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/mouseCursor/mouseCursor.css */ +.monaco-mouse-cursor-text { + cursor: text; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.css */ +.monaco-editor .view-overlays .current-line { + display: block; + position: absolute; + left: 0; + top: 0; + box-sizing: border-box; +} +.monaco-editor .margin-view-overlays .current-line { + display: block; + position: absolute; + left: 0; + top: 0; + box-sizing: border-box; +} +.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both { + border-right: 0; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/decorations/decorations.css */ +.monaco-editor .lines-content .cdr { + position: absolute; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.css */ +.monaco-editor .lines-content .core-guide { + position: absolute; + box-sizing: border-box; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLines.css */ +.mtkcontrol { + color: rgb(255, 255, 255) !important; + background: rgb(150, 0, 0) !important; +} +.mtkoverflow { + background-color: var(--vscode-button-background, var(--vscode-editor-background)); + color: var(--vscode-button-foreground, var(--vscode-editor-foreground)); + border-width: 1px; + border-style: solid; + border-color: var(--vscode-contrastBorder); + border-radius: 2px; + padding: 4px; + cursor: pointer; +} +.mtkoverflow:hover { + background-color: var(--vscode-button-hoverBackground); +} +.monaco-editor.no-user-select .lines-content, +.monaco-editor.no-user-select .view-line, +.monaco-editor.no-user-select .view-lines { + user-select: none; + -webkit-user-select: none; +} +.monaco-editor.mac .lines-content:hover, +.monaco-editor.mac .view-line:hover, +.monaco-editor.mac .view-lines:hover { + user-select: text; + -webkit-user-select: text; + -ms-user-select: text; +} +.monaco-editor.enable-user-select { + user-select: initial; + -webkit-user-select: initial; +} +.monaco-editor .view-lines { + white-space: nowrap; +} +.monaco-editor .view-line { + position: absolute; + width: 100%; +} +.monaco-editor .mtkw { + color: var(--vscode-editorWhitespace-foreground) !important; +} +.monaco-editor .mtkz { + display: inline-block; + color: var(--vscode-editorWhitespace-foreground) !important; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.css */ +.monaco-editor .lines-decorations { + position: absolute; + top: 0; + background: white; +} +.monaco-editor .margin-view-overlays .cldr { + position: absolute; + height: 100%; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.css */ +.monaco-editor .glyph-margin { + position: absolute; + top: 0; +} +.monaco-editor .glyph-margin-widgets .cgmr { + position: absolute; + display: flex; + align-items: center; + justify-content: center; +} +.monaco-editor .glyph-margin-widgets .cgmr.codicon-modifier-spin::before { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/marginDecorations/marginDecorations.css */ +.monaco-editor .margin-view-overlays .cmdr { + position: absolute; + left: 0; + width: 100%; + height: 100%; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimap.css */ +.monaco-editor .minimap.slider-mouseover .minimap-slider { + opacity: 0; + transition: opacity 100ms linear; +} +.monaco-editor .minimap.slider-mouseover:hover .minimap-slider { + opacity: 1; +} +.monaco-editor .minimap.slider-mouseover .minimap-slider.active { + opacity: 1; +} +.monaco-editor .minimap-slider .minimap-slider-horizontal { + background: var(--vscode-minimapSlider-background); +} +.monaco-editor .minimap-slider:hover .minimap-slider-horizontal { + background: var(--vscode-minimapSlider-hoverBackground); +} +.monaco-editor .minimap-slider.active .minimap-slider-horizontal { + background: var(--vscode-minimapSlider-activeBackground); +} +.monaco-editor .minimap-shadow-visible { + box-shadow: var(--vscode-scrollbar-shadow) -6px 0 6px -6px inset; +} +.monaco-editor .minimap-shadow-hidden { + position: absolute; + width: 0; +} +.monaco-editor .minimap-shadow-visible { + position: absolute; + left: -6px; + width: 6px; +} +.monaco-editor.no-minimap-shadow .minimap-shadow-visible { + position: absolute; + left: -1px; + width: 1px; +} +.minimap.autohide { + opacity: 0; + transition: opacity 0.5s; +} +.minimap.autohide:hover { + opacity: 1; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.css */ +.monaco-editor .overlayWidgets { + position: absolute; + top: 0; + left: 0; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/rulers/rulers.css */ +.monaco-editor .view-ruler { + position: absolute; + top: 0; + box-shadow: 1px 0 0 0 var(--vscode-editorRuler-foreground) inset; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.css */ +.monaco-editor .scroll-decoration { + position: absolute; + top: 0; + left: 0; + height: 6px; + box-shadow: var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/selections/selections.css */ +.monaco-editor .lines-content .cslr { + position: absolute; +} +.monaco-editor .focused .selected-text { + background-color: var(--vscode-editor-selectionBackground); +} +.monaco-editor .selected-text { + background-color: var(--vscode-editor-inactiveSelectionBackground); +} +.monaco-editor .top-left-radius { + border-top-left-radius: 3px; +} +.monaco-editor .bottom-left-radius { + border-bottom-left-radius: 3px; +} +.monaco-editor .top-right-radius { + border-top-right-radius: 3px; +} +.monaco-editor .bottom-right-radius { + border-bottom-right-radius: 3px; +} +.monaco-editor.hc-black .top-left-radius { + border-top-left-radius: 0; +} +.monaco-editor.hc-black .bottom-left-radius { + border-bottom-left-radius: 0; +} +.monaco-editor.hc-black .top-right-radius { + border-top-right-radius: 0; +} +.monaco-editor.hc-black .bottom-right-radius { + border-bottom-right-radius: 0; +} +.monaco-editor.hc-light .top-left-radius { + border-top-left-radius: 0; +} +.monaco-editor.hc-light .bottom-left-radius { + border-bottom-left-radius: 0; +} +.monaco-editor.hc-light .top-right-radius { + border-top-right-radius: 0; +} +.monaco-editor.hc-light .bottom-right-radius { + border-bottom-right-radius: 0; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.css */ +.monaco-editor .cursors-layer { + position: absolute; + top: 0; +} +.monaco-editor .cursors-layer > .cursor { + position: absolute; + overflow: hidden; + box-sizing: border-box; +} +.monaco-editor .cursors-layer.cursor-smooth-caret-animation > .cursor { + transition: all 80ms; +} +.monaco-editor .cursors-layer.cursor-block-outline-style > .cursor { + background: transparent !important; + border-style: solid; + border-width: 1px; +} +.monaco-editor .cursors-layer.cursor-underline-style > .cursor { + border-bottom-width: 2px; + border-bottom-style: solid; + background: transparent !important; +} +.monaco-editor .cursors-layer.cursor-underline-thin-style > .cursor { + border-bottom-width: 1px; + border-bottom-style: solid; + background: transparent !important; +} +@keyframes monaco-cursor-smooth { + 0%, + 20% { + opacity: 1; + } + 60%, + 100% { + opacity: 0; + } +} +@keyframes monaco-cursor-phase { + 0%, + 20% { + opacity: 1; + } + 90%, + 100% { + opacity: 0; + } +} +@keyframes monaco-cursor-expand { + 0%, + 20% { + transform: scaleY(1); + } + 80%, + 100% { + transform: scaleY(0); + } +} +.cursor-smooth { + animation: monaco-cursor-smooth 0.5s ease-in-out 0s 20 alternate; +} +.cursor-phase { + animation: monaco-cursor-phase 0.5s ease-in-out 0s 20 alternate; +} +.cursor-expand > .cursor { + animation: monaco-cursor-expand 0.5s ease-in-out 0s 20 alternate; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/blockDecorations/blockDecorations.css */ +.monaco-editor .blockDecorations-container { + position: absolute; + top: 0; + pointer-events: none; +} +.monaco-editor .blockDecorations-block { + position: absolute; + box-sizing: border-box; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/viewParts/whitespace/whitespace.css */ +.monaco-editor .mwh { + position: absolute; + color: var(--vscode-editorWhitespace-foreground) !important; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/sash/sash.css */ +:root { + --vscode-sash-size: 4px; +} +.monaco-sash { + position: absolute; + z-index: 35; + touch-action: none; +} +.monaco-sash.disabled { + pointer-events: none; +} +.monaco-sash.mac.vertical { + cursor: col-resize; +} +.monaco-sash.vertical.minimum { + cursor: e-resize; +} +.monaco-sash.vertical.maximum { + cursor: w-resize; +} +.monaco-sash.mac.horizontal { + cursor: row-resize; +} +.monaco-sash.horizontal.minimum { + cursor: s-resize; +} +.monaco-sash.horizontal.maximum { + cursor: n-resize; +} +.monaco-sash.disabled { + cursor: default !important; + pointer-events: none !important; +} +.monaco-sash.vertical { + cursor: ew-resize; + top: 0; + width: var(--vscode-sash-size); + height: 100%; +} +.monaco-sash.horizontal { + cursor: ns-resize; + left: 0; + width: 100%; + height: var(--vscode-sash-size); +} +.monaco-sash:not(.disabled) > .orthogonal-drag-handle { + content: " "; + height: calc(var(--vscode-sash-size) * 2); + width: calc(var(--vscode-sash-size) * 2); + z-index: 100; + display: block; + cursor: all-scroll; + position: absolute; +} +.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled) > .orthogonal-drag-handle.start, +.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled) > .orthogonal-drag-handle.end { + cursor: nwse-resize; +} +.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled) > .orthogonal-drag-handle.end, +.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled) > .orthogonal-drag-handle.start { + cursor: nesw-resize; +} +.monaco-sash.vertical > .orthogonal-drag-handle.start { + left: calc(var(--vscode-sash-size) * -0.5); + top: calc(var(--vscode-sash-size) * -1); +} +.monaco-sash.vertical > .orthogonal-drag-handle.end { + left: calc(var(--vscode-sash-size) * -0.5); + bottom: calc(var(--vscode-sash-size) * -1); +} +.monaco-sash.horizontal > .orthogonal-drag-handle.start { + top: calc(var(--vscode-sash-size) * -0.5); + left: calc(var(--vscode-sash-size) * -1); +} +.monaco-sash.horizontal > .orthogonal-drag-handle.end { + top: calc(var(--vscode-sash-size) * -0.5); + right: calc(var(--vscode-sash-size) * -1); +} +.monaco-sash:before { + content: ""; + pointer-events: none; + position: absolute; + width: 100%; + height: 100%; + background: transparent; +} +.monaco-workbench:not(.reduce-motion) .monaco-sash:before { + transition: background-color 0.1s ease-out; +} +.monaco-sash.hover:before, +.monaco-sash.active:before { + background: var(--vscode-sash-hoverBorder); +} +.monaco-sash.vertical:before { + width: var(--vscode-sash-hover-size); + left: calc(50% - (var(--vscode-sash-hover-size) / 2)); +} +.monaco-sash.horizontal:before { + height: var(--vscode-sash-hover-size); + top: calc(50% - (var(--vscode-sash-hover-size) / 2)); +} +.pointer-events-disabled { + pointer-events: none !important; +} +.monaco-sash.debug { + background: cyan; +} +.monaco-sash.debug.disabled { + background: rgba(0, 255, 255, 0.2); +} +.monaco-sash.debug:not(.disabled) > .orthogonal-drag-handle { + background: red; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/widget/media/diffEditor.css */ +.monaco-diff-editor .diffOverview { + z-index: 9; +} +.monaco-diff-editor .diffOverview .diffViewport { + z-index: 10; +} +.monaco-diff-editor.vs .diffOverview { + background: rgba(0, 0, 0, 0.03); +} +.monaco-diff-editor.vs-dark .diffOverview { + background: rgba(255, 255, 255, 0.01); +} +.monaco-scrollable-element.modified-in-monaco-diff-editor.vs .scrollbar { + background: rgba(0, 0, 0, 0); +} +.monaco-scrollable-element.modified-in-monaco-diff-editor.vs-dark .scrollbar { + background: rgba(0, 0, 0, 0); +} +.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-black .scrollbar { + background: none; +} +.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-light .scrollbar { + background: none; +} +.monaco-scrollable-element.modified-in-monaco-diff-editor .slider { + z-index: 10; +} +.modified-in-monaco-diff-editor .slider.active { + background: rgba(171, 171, 171, 0.4); +} +.modified-in-monaco-diff-editor.hc-black .slider.active { + background: none; +} +.modified-in-monaco-diff-editor.hc-light .slider.active { + background: none; +} +.monaco-editor .insert-sign, +.monaco-diff-editor .insert-sign, +.monaco-editor .delete-sign, +.monaco-diff-editor .delete-sign { + font-size: 11px !important; + opacity: 0.7 !important; + display: flex !important; + align-items: center; +} +.monaco-editor.hc-black .insert-sign, +.monaco-diff-editor.hc-black .insert-sign, +.monaco-editor.hc-black .delete-sign, +.monaco-diff-editor.hc-black .delete-sign, +.monaco-editor.hc-light .insert-sign, +.monaco-diff-editor.hc-light .insert-sign, +.monaco-editor.hc-light .delete-sign, +.monaco-diff-editor.hc-light .delete-sign { + opacity: 1; +} +.monaco-editor .inline-deleted-margin-view-zone { + text-align: right; +} +.monaco-editor .inline-added-margin-view-zone { + text-align: right; +} +.monaco-editor .arrow-revert-change { + z-index: 10; + position: absolute; +} +.monaco-editor .arrow-revert-change:hover { + cursor: pointer; +} +.monaco-editor .view-zones .view-lines .view-line span { + display: inline-block; +} +.monaco-editor .margin-view-zones .lightbulb-glyph:hover { + cursor: pointer; +} +.monaco-editor .char-insert, +.monaco-diff-editor .char-insert { + background-color: var(--vscode-diffEditor-insertedTextBackground); +} +.monaco-editor .line-insert, +.monaco-diff-editor .line-insert { + background-color: var(--vscode-diffEditor-insertedLineBackground, var(--vscode-diffEditor-insertedTextBackground)); +} +.monaco-editor .line-insert, +.monaco-editor .char-insert { + box-sizing: border-box; + border: 1px solid var(--vscode-diffEditor-insertedTextBorder); +} +.monaco-editor.hc-black .line-insert, +.monaco-editor.hc-light .line-insert, +.monaco-editor.hc-black .char-insert, +.monaco-editor.hc-light .char-insert { + border-style: dashed; +} +.monaco-editor .line-delete, +.monaco-editor .char-delete { + box-sizing: border-box; + border: 1px solid var(--vscode-diffEditor-removedTextBorder); +} +.monaco-editor.hc-black .line-delete, +.monaco-editor.hc-light .line-delete, +.monaco-editor.hc-black .char-delete, +.monaco-editor.hc-light .char-delete { + border-style: dashed; +} +.monaco-editor .inline-added-margin-view-zone, +.monaco-editor .gutter-insert, +.monaco-diff-editor .gutter-insert { + background-color: var(--vscode-diffEditorGutter-insertedLineBackground, var(--vscode-diffEditor-insertedLineBackground), var(--vscode-diffEditor-insertedTextBackground)); +} +.monaco-editor .char-delete, +.monaco-diff-editor .char-delete { + background-color: var(--vscode-diffEditor-removedTextBackground); +} +.monaco-editor .line-delete, +.monaco-diff-editor .line-delete { + background-color: var(--vscode-diffEditor-removedLineBackground, var(--vscode-diffEditor-removedTextBackground)); +} +.monaco-editor .inline-deleted-margin-view-zone, +.monaco-editor .gutter-delete, +.monaco-diff-editor .gutter-delete { + background-color: var(--vscode-diffEditorGutter-removedLineBackground, var(--vscode-diffEditor-removedLineBackground), var(--vscode-diffEditor-removedTextBackground)); +} +.monaco-diff-editor.side-by-side .editor.modified { + box-shadow: -6px 0 5px -5px var(--vscode-scrollbar-shadow); + border-left: 1px solid var(--vscode-diffEditor-border); +} +.monaco-diff-editor .diffViewport { + background: var(--vscode-scrollbarSlider-background); +} +.monaco-diff-editor .diffViewport:hover { + background: var(--vscode-scrollbarSlider-hoverBackground); +} +.monaco-diff-editor .diffViewport:active { + background: var(--vscode-scrollbarSlider-activeBackground); +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/list/list.css */ +.monaco-list { + position: relative; + height: 100%; + width: 100%; + white-space: nowrap; +} +.monaco-list.mouse-support { + user-select: none; + -webkit-user-select: none; +} +.monaco-list > .monaco-scrollable-element { + height: 100%; +} +.monaco-list-rows { + position: relative; + width: 100%; + height: 100%; +} +.monaco-list.horizontal-scrolling .monaco-list-rows { + width: auto; + min-width: 100%; +} +.monaco-list-row { + position: absolute; + box-sizing: border-box; + overflow: hidden; + width: 100%; +} +.monaco-list.mouse-support .monaco-list-row { + cursor: pointer; + touch-action: none; +} +.monaco-list-row.scrolling { + display: none !important; +} +.monaco-list.element-focused, +.monaco-list.selection-single, +.monaco-list.selection-multiple { + outline: 0 !important; +} +.monaco-drag-image { + display: inline-block; + padding: 1px 7px; + border-radius: 10px; + font-size: 12px; + position: absolute; + z-index: 1000; +} +.monaco-list-type-filter-message { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + padding: 40px 1em 1em 1em; + text-align: center; + white-space: normal; + opacity: 0.7; + pointer-events: none; +} +.monaco-list-type-filter-message:empty { + display: none; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/selectBox/selectBoxCustom.css */ +.monaco-select-box-dropdown-padding { + --dropdown-padding-top: 1px; + --dropdown-padding-bottom: 1px; +} +.hc-black .monaco-select-box-dropdown-padding, +.hc-light .monaco-select-box-dropdown-padding { + --dropdown-padding-top: 3px; + --dropdown-padding-bottom: 4px; +} +.monaco-select-box-dropdown-container { + display: none; + box-sizing: border-box; +} +.monaco-select-box-dropdown-container > .select-box-details-pane > .select-box-description-markdown * { + margin: 0; +} +.monaco-select-box-dropdown-container > .select-box-details-pane > .select-box-description-markdown a:focus { + outline: 1px solid -webkit-focus-ring-color; + outline-offset: -1px; +} +.monaco-select-box-dropdown-container > .select-box-details-pane > .select-box-description-markdown code { + line-height: 15px; + font-family: var(--monaco-monospace-font); +} +.monaco-select-box-dropdown-container.visible { + display: flex; + flex-direction: column; + text-align: left; + width: 1px; + overflow: hidden; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +.monaco-select-box-dropdown-container > .select-box-dropdown-list-container { + flex: 0 0 auto; + align-self: flex-start; + padding-top: var(--dropdown-padding-top); + padding-bottom: var(--dropdown-padding-bottom); + padding-left: 1px; + padding-right: 1px; + width: 100%; + overflow: hidden; + box-sizing: border-box; +} +.monaco-select-box-dropdown-container > .select-box-details-pane { + padding: 5px; +} +.hc-black .monaco-select-box-dropdown-container > .select-box-dropdown-list-container { + padding-top: var(--dropdown-padding-top); + padding-bottom: var(--dropdown-padding-bottom); +} +.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row { + cursor: pointer; +} +.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row > .option-text { + text-overflow: ellipsis; + overflow: hidden; + padding-left: 3.5px; + white-space: nowrap; + float: left; +} +.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row > .option-detail { + text-overflow: ellipsis; + overflow: hidden; + padding-left: 3.5px; + white-space: nowrap; + float: left; + opacity: 0.7; +} +.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row > .option-decorator-right { + text-overflow: ellipsis; + overflow: hidden; + padding-right: 10px; + white-space: nowrap; + float: right; +} +.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row > .visually-hidden { + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +.monaco-select-box-dropdown-container > .select-box-dropdown-container-width-control { + flex: 1 1 auto; + align-self: flex-start; + opacity: 0; +} +.monaco-select-box-dropdown-container > .select-box-dropdown-container-width-control > .width-control-div { + overflow: hidden; + max-height: 0px; +} +.monaco-select-box-dropdown-container > .select-box-dropdown-container-width-control > .width-control-div > .option-text-width-control { + padding-left: 4px; + padding-right: 8px; + white-space: nowrap; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/selectBox/selectBox.css */ +.monaco-select-box { + width: 100%; + cursor: pointer; + border-radius: 2px; +} +.monaco-select-box-dropdown-container { + font-size: 13px; + font-weight: normal; + text-transform: none; +} +.monaco-action-bar .action-item.select-container { + cursor: default; +} +.monaco-action-bar .action-item .monaco-select-box { + cursor: pointer; + min-width: 100px; + min-height: 18px; + padding: 2px 23px 2px 8px; +} +.mac .monaco-action-bar .action-item .monaco-select-box { + font-size: 11px; + border-radius: 5px; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.css */ +.monaco-action-bar { + white-space: nowrap; + height: 100%; +} +.monaco-action-bar .actions-container { + display: flex; + margin: 0 auto; + padding: 0; + height: 100%; + width: 100%; + align-items: center; +} +.monaco-action-bar.vertical .actions-container { + display: inline-block; +} +.monaco-action-bar .action-item { + display: block; + align-items: center; + justify-content: center; + cursor: pointer; + position: relative; +} +.monaco-action-bar .action-item.disabled { + cursor: default; +} +.monaco-action-bar .action-item .icon, +.monaco-action-bar .action-item .codicon { + display: block; +} +.monaco-action-bar .action-item .codicon { + display: flex; + align-items: center; + width: 16px; + height: 16px; +} +.monaco-action-bar .action-label { + display: flex; + font-size: 11px; + padding: 3px; + border-radius: 5px; +} +.monaco-action-bar .action-item.disabled .action-label, +.monaco-action-bar .action-item.disabled .action-label::before, +.monaco-action-bar .action-item.disabled .action-label:hover { + opacity: 0.6; +} +.monaco-action-bar.vertical { + text-align: left; +} +.monaco-action-bar.vertical .action-item { + display: block; +} +.monaco-action-bar.vertical .action-label.separator { + display: block; + border-bottom: 1px solid #bbb; + padding-top: 1px; + margin-left: 0.8em; + margin-right: 0.8em; +} +.monaco-action-bar .action-item .action-label.separator { + width: 1px; + height: 16px; + margin: 5px 4px !important; + cursor: default; + min-width: 1px; + padding: 0; + background-color: #bbb; +} +.secondary-actions .monaco-action-bar .action-label { + margin-left: 6px; +} +.monaco-action-bar .action-item.select-container { + overflow: hidden; + flex: 1; + max-width: 170px; + min-width: 60px; + display: flex; + align-items: center; + justify-content: center; + margin-right: 10px; +} +.monaco-action-bar .action-item.action-dropdown-item { + display: flex; +} +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator { + display: flex; + align-items: center; + cursor: default; +} +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator > div { + width: 1px; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/widget/media/diffReview.css */ +.monaco-diff-editor .diff-review-line-number { + text-align: right; + display: inline-block; + color: var(--vscode-editorLineNumber-foreground); +} +.monaco-diff-editor .diff-review { + position: absolute; + user-select: none; + -webkit-user-select: none; + z-index: 99; +} +.monaco-diff-editor .diff-review-summary { + padding-left: 10px; +} +.monaco-diff-editor .diff-review-shadow { + position: absolute; + box-shadow: var(--vscode-scrollbar-shadow) 0 -6px 6px -6px inset; +} +.monaco-diff-editor .diff-review-row { + white-space: pre; +} +.monaco-diff-editor .diff-review-table { + display: table; + min-width: 100%; +} +.monaco-diff-editor .diff-review-row { + display: table-row; + width: 100%; +} +.monaco-diff-editor .diff-review-spacer { + display: inline-block; + width: 10px; + vertical-align: middle; +} +.monaco-diff-editor .diff-review-spacer > .codicon { + font-size: 9px !important; +} +.monaco-diff-editor .diff-review-actions { + display: inline-block; + position: absolute; + right: 10px; + top: 2px; + z-index: 100; +} +.monaco-diff-editor .diff-review-actions .action-label { + width: 16px; + height: 16px; + margin: 2px 0; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/contextview/contextview.css */ +.context-view { + position: absolute; +} +.context-view.fixed { + all: initial; + font-family: inherit; + font-size: 13px; + position: fixed; + color: inherit; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/dropdown/dropdown.css */ +.monaco-dropdown { + height: 100%; + padding: 0; +} +.monaco-dropdown > .dropdown-label { + cursor: pointer; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} +.monaco-dropdown > .dropdown-label > .action-label.disabled { + cursor: default; +} +.monaco-dropdown-with-primary { + display: flex !important; + flex-direction: row; + border-radius: 5px; +} +.monaco-dropdown-with-primary > .action-container > .action-label { + margin-right: 0; +} +.monaco-dropdown-with-primary > .dropdown-action-container > .monaco-dropdown > .dropdown-label .codicon[class*="codicon-"] { + font-size: 12px; + padding-left: 0px; + padding-right: 0px; + line-height: 16px; + margin-left: -3px; +} +.monaco-dropdown-with-primary > .dropdown-action-container > .monaco-dropdown > .dropdown-label > .action-label { + display: block; + background-size: 16px; + background-position: center center; + background-repeat: no-repeat; +} + +/* node_modules/monaco-editor/esm/vs/platform/actions/browser/menuEntryActionViewItem.css */ +.monaco-action-bar .action-item.menu-entry .action-label.icon { + width: 16px; + height: 16px; + background-repeat: no-repeat; + background-position: 50%; + background-size: 16px; +} +.monaco-dropdown-with-default { + display: flex !important; + flex-direction: row; + border-radius: 5px; +} +.monaco-dropdown-with-default > .action-container > .action-label { + margin-right: 0; +} +.monaco-dropdown-with-default > .action-container.menu-entry > .action-label.icon { + width: 16px; + height: 16px; + background-repeat: no-repeat; + background-position: 50%; + background-size: 16px; +} +.monaco-dropdown-with-default > .dropdown-action-container > .monaco-dropdown > .dropdown-label .codicon[class*="codicon-"] { + font-size: 12px; + padding-left: 0px; + padding-right: 0px; + line-height: 16px; + margin-left: -3px; +} +.monaco-dropdown-with-default > .dropdown-action-container > .monaco-dropdown > .dropdown-label > .action-label { + display: block; + background-size: 16px; + background-position: center center; + background-repeat: no-repeat; +} + +/* node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInput.css */ +.quick-input-widget { + font-size: 13px; +} +.quick-input-widget .monaco-highlighted-label .highlight, +.quick-input-widget .monaco-highlighted-label .highlight { + color: #0066bf; +} +.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight, +.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight { + color: #9dddff; +} +.vs-dark .quick-input-widget .monaco-highlighted-label .highlight, +.vs-dark .quick-input-widget .monaco-highlighted-label .highlight { + color: #0097fb; +} +.hc-black .quick-input-widget .monaco-highlighted-label .highlight, +.hc-black .quick-input-widget .monaco-highlighted-label .highlight { + color: #f38518; +} +.hc-light .quick-input-widget .monaco-highlighted-label .highlight, +.hc-light .quick-input-widget .monaco-highlighted-label .highlight { + color: #0f4a85; +} +.monaco-keybinding > .monaco-keybinding-key { + background-color: rgba(221, 221, 221, 0.4); + border: solid 1px rgba(204, 204, 204, 0.4); + border-bottom-color: rgba(187, 187, 187, 0.4); + box-shadow: inset 0 -1px 0 rgba(187, 187, 187, 0.4); + color: #555; +} +.hc-black .monaco-keybinding > .monaco-keybinding-key { + background-color: transparent; + border: solid 1px rgb(111, 195, 223); + box-shadow: none; + color: #fff; +} +.hc-light .monaco-keybinding > .monaco-keybinding-key { + background-color: transparent; + border: solid 1px #0f4a85; + box-shadow: none; + color: #292929; +} +.vs-dark .monaco-keybinding > .monaco-keybinding-key { + background-color: rgba(128, 128, 128, 0.17); + border: solid 1px rgba(51, 51, 51, 0.6); + border-bottom-color: rgba(68, 68, 68, 0.6); + box-shadow: inset 0 -1px 0 rgba(68, 68, 68, 0.6); + color: #ccc; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/splitview/splitview.css */ +.monaco-split-view2 { + position: relative; + width: 100%; + height: 100%; +} +.monaco-split-view2 > .sash-container { + position: absolute; + width: 100%; + height: 100%; + pointer-events: none; +} +.monaco-split-view2 > .sash-container > .monaco-sash { + pointer-events: initial; +} +.monaco-split-view2 > .monaco-scrollable-element { + width: 100%; + height: 100%; +} +.monaco-split-view2 > .monaco-scrollable-element > .split-view-container { + width: 100%; + height: 100%; + white-space: nowrap; + position: relative; +} +.monaco-split-view2 > .monaco-scrollable-element > .split-view-container > .split-view-view { + white-space: initial; + position: absolute; +} +.monaco-split-view2 > .monaco-scrollable-element > .split-view-container > .split-view-view:not(.visible) { + display: none; +} +.monaco-split-view2.vertical > .monaco-scrollable-element > .split-view-container > .split-view-view { + width: 100%; +} +.monaco-split-view2.horizontal > .monaco-scrollable-element > .split-view-container > .split-view-view { + height: 100%; +} +.monaco-split-view2.separator-border > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before { + content: " "; + position: absolute; + top: 0; + left: 0; + z-index: 5; + pointer-events: none; + background-color: var(--separator-border); +} +.monaco-split-view2.separator-border.horizontal > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before { + height: 100%; + width: 1px; +} +.monaco-split-view2.separator-border.vertical > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before { + height: 1px; + width: 100%; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/table/table.css */ +.monaco-table { + display: flex; + flex-direction: column; + position: relative; + height: 100%; + width: 100%; + white-space: nowrap; + overflow: hidden; +} +.monaco-table > .monaco-split-view2 { + border-bottom: 1px solid transparent; +} +.monaco-table > .monaco-list { + flex: 1; +} +.monaco-table-tr { + display: flex; + height: 100%; +} +.monaco-table-th { + width: 100%; + height: 100%; + font-weight: bold; + overflow: hidden; + text-overflow: ellipsis; +} +.monaco-table-th, +.monaco-table-td { + box-sizing: border-box; + flex-shrink: 0; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before { + content: ""; + position: absolute; + left: calc(var(--vscode-sash-size) / 2); + width: 0; + border-left: 1px solid transparent; +} +.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2, +.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2 .monaco-sash.vertical::before { + transition: border-color 0.2s ease-out; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/toggle/toggle.css */ +.monaco-custom-toggle { + margin-left: 2px; + float: left; + cursor: pointer; + overflow: hidden; + width: 20px; + height: 20px; + border-radius: 3px; + border: 1px solid transparent; + padding: 1px; + box-sizing: border-box; + user-select: none; + -webkit-user-select: none; +} +.monaco-custom-toggle:hover { + background-color: var(--vscode-inputOption-hoverBackground); +} +.hc-black .monaco-custom-toggle:hover, +.hc-light .monaco-custom-toggle:hover { + border: 1px dashed var(--vscode-focusBorder); +} +.hc-black .monaco-custom-toggle, +.hc-light .monaco-custom-toggle { + background: none; +} +.hc-black .monaco-custom-toggle:hover, +.hc-light .monaco-custom-toggle:hover { + background: none; +} +.monaco-custom-toggle.monaco-checkbox { + height: 18px; + width: 18px; + border: 1px solid transparent; + border-radius: 3px; + margin-right: 9px; + margin-left: 0px; + padding: 0px; + opacity: 1; + background-size: 16px !important; +} +.monaco-custom-toggle.monaco-checkbox:not(.checked)::before { + visibility: hidden; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/inputbox/inputBox.css */ +.monaco-inputbox { + position: relative; + display: block; + padding: 0; + box-sizing: border-box; + border-radius: 2px; + font-size: inherit; +} +.monaco-inputbox > .ibwrapper > .input, +.monaco-inputbox > .ibwrapper > .mirror { + padding: 4px 6px; +} +.monaco-inputbox > .ibwrapper { + position: relative; + width: 100%; + height: 100%; +} +.monaco-inputbox > .ibwrapper > .input { + display: inline-block; + box-sizing: border-box; + width: 100%; + height: 100%; + line-height: inherit; + border: none; + font-family: inherit; + font-size: inherit; + resize: none; + color: inherit; +} +.monaco-inputbox > .ibwrapper > input { + text-overflow: ellipsis; +} +.monaco-inputbox > .ibwrapper > textarea.input { + display: block; + scrollbar-width: none; + outline: none; +} +.monaco-inputbox > .ibwrapper > textarea.input::-webkit-scrollbar { + display: none; +} +.monaco-inputbox > .ibwrapper > textarea.input.empty { + white-space: nowrap; +} +.monaco-inputbox > .ibwrapper > .mirror { + position: absolute; + display: inline-block; + width: 100%; + top: 0; + left: 0; + box-sizing: border-box; + white-space: pre-wrap; + visibility: hidden; + word-wrap: break-word; +} +.monaco-inputbox-container { + text-align: right; +} +.monaco-inputbox-container .monaco-inputbox-message { + display: inline-block; + overflow: hidden; + text-align: left; + width: 100%; + box-sizing: border-box; + padding: 0.4em; + font-size: 12px; + line-height: 17px; + margin-top: -1px; + word-wrap: break-word; +} +.monaco-inputbox .monaco-action-bar { + position: absolute; + right: 2px; + top: 4px; +} +.monaco-inputbox .monaco-action-bar .action-item { + margin-left: 2px; +} +.monaco-inputbox .monaco-action-bar .action-item .codicon { + background-repeat: no-repeat; + width: 16px; + height: 16px; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/findInput.css */ +.monaco-findInput { + position: relative; +} +.monaco-findInput .monaco-inputbox { + font-size: 13px; + width: 100%; +} +.monaco-findInput > .controls { + position: absolute; + top: 3px; + right: 2px; +} +.vs .monaco-findInput.disabled { + background-color: #e1e1e1; +} +.vs-dark .monaco-findInput.disabled { + background-color: #333; +} +.monaco-findInput.highlight-0 .controls, +.hc-light .monaco-findInput.highlight-0 .controls { + animation: monaco-findInput-highlight-0 100ms linear 0s; +} +.monaco-findInput.highlight-1 .controls, +.hc-light .monaco-findInput.highlight-1 .controls { + animation: monaco-findInput-highlight-1 100ms linear 0s; +} +.hc-black .monaco-findInput.highlight-0 .controls, +.vs-dark .monaco-findInput.highlight-0 .controls { + animation: monaco-findInput-highlight-dark-0 100ms linear 0s; +} +.hc-black .monaco-findInput.highlight-1 .controls, +.vs-dark .monaco-findInput.highlight-1 .controls { + animation: monaco-findInput-highlight-dark-1 100ms linear 0s; +} +@keyframes monaco-findInput-highlight-0 { + 0% { + background: rgba(253, 255, 0, 0.8); + } + 100% { + background: transparent; + } +} +@keyframes monaco-findInput-highlight-1 { + 0% { + background: rgba(253, 255, 0, 0.8); + } + 99% { + background: transparent; + } +} +@keyframes monaco-findInput-highlight-dark-0 { + 0% { + background: rgba(255, 255, 255, 0.44); + } + 100% { + background: transparent; + } +} +@keyframes monaco-findInput-highlight-dark-1 { + 0% { + background: rgba(255, 255, 255, 0.44); + } + 99% { + background: transparent; + } +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/tree/media/tree.css */ +.monaco-tl-row { + display: flex; + height: 100%; + align-items: center; + position: relative; +} +.monaco-tl-row.disabled { + cursor: default; +} +.monaco-tl-indent { + height: 100%; + position: absolute; + top: 0; + left: 16px; + pointer-events: none; +} +.hide-arrows .monaco-tl-indent { + left: 12px; +} +.monaco-tl-indent > .indent-guide { + display: inline-block; + box-sizing: border-box; + height: 100%; + border-left: 1px solid transparent; +} +.monaco-workbench:not(.reduce-motion) .monaco-tl-indent > .indent-guide { + transition: border-color 0.1s linear; +} +.monaco-tl-twistie, +.monaco-tl-contents { + height: 100%; +} +.monaco-tl-twistie { + font-size: 10px; + text-align: right; + padding-right: 6px; + flex-shrink: 0; + width: 16px; + display: flex !important; + align-items: center; + justify-content: center; + transform: translateX(3px); +} +.monaco-tl-contents { + flex: 1; + overflow: hidden; +} +.monaco-tl-twistie::before { + border-radius: 20px; +} +.monaco-tl-twistie.collapsed::before { + transform: rotate(-90deg); +} +.monaco-tl-twistie.codicon-tree-item-loading::before { + animation: codicon-spin 1.25s steps(30) infinite; +} +.monaco-tree-type-filter { + position: absolute; + top: 0; + display: flex; + padding: 3px; + max-width: 200px; + z-index: 100; + margin: 0 6px; + border: 1px solid var(--vscode-widget-border); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} +.monaco-workbench:not(.reduce-motion) .monaco-tree-type-filter { + transition: top 0.3s; +} +.monaco-tree-type-filter.disabled { + top: -40px !important; +} +.monaco-tree-type-filter-grab { + display: flex !important; + align-items: center; + justify-content: center; + cursor: grab; + margin-right: 2px; +} +.monaco-tree-type-filter-grab.grabbing { + cursor: grabbing; +} +.monaco-tree-type-filter-input { + flex: 1; +} +.monaco-tree-type-filter-input .monaco-inputbox { + height: 23px; +} +.monaco-tree-type-filter-input .monaco-inputbox > .ibwrapper > .input, +.monaco-tree-type-filter-input .monaco-inputbox > .ibwrapper > .mirror { + padding: 2px 4px; +} +.monaco-tree-type-filter-input .monaco-findInput > .controls { + top: 2px; +} +.monaco-tree-type-filter-actionbar { + margin-left: 4px; +} +.monaco-tree-type-filter-actionbar .monaco-action-bar .action-label { + padding: 2px; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/button/button.css */ +.monaco-text-button { + box-sizing: border-box; + display: flex; + width: 100%; + padding: 4px; + border-radius: 2px; + text-align: center; + cursor: pointer; + justify-content: center; + align-items: center; + border: 1px solid var(--vscode-button-border, transparent); + line-height: 18px; +} +.monaco-text-button:focus { + outline-offset: 2px !important; +} +.monaco-text-button:hover { + text-decoration: none !important; +} +.monaco-button.disabled:focus, +.monaco-button.disabled { + opacity: 0.4 !important; + cursor: default; +} +.monaco-text-button .codicon { + margin: 0 0.2em; + color: inherit !important; +} +.monaco-text-button.monaco-text-button-with-short-label { + flex-direction: row; + flex-wrap: wrap; + padding: 0 4px; + overflow: hidden; + height: 28px; +} +.monaco-text-button.monaco-text-button-with-short-label > .monaco-button-label { + flex-basis: 100%; +} +.monaco-text-button.monaco-text-button-with-short-label > .monaco-button-label-short { + flex-grow: 1; + width: 0; + overflow: hidden; +} +.monaco-text-button.monaco-text-button-with-short-label > .monaco-button-label, +.monaco-text-button.monaco-text-button-with-short-label > .monaco-button-label-short { + display: flex; + justify-content: center; + align-items: center; + font-weight: normal; + font-style: inherit; + padding: 4px 0; +} +.monaco-button-dropdown { + display: flex; + cursor: pointer; +} +.monaco-button-dropdown.disabled { + cursor: default; +} +.monaco-button-dropdown > .monaco-button:focus { + outline-offset: -1px !important; +} +.monaco-button-dropdown.disabled > .monaco-button.disabled, +.monaco-button-dropdown.disabled > .monaco-button.disabled:focus, +.monaco-button-dropdown.disabled > .monaco-button-dropdown-separator { + opacity: 0.4 !important; +} +.monaco-button-dropdown > .monaco-button.monaco-text-button { + border-right-width: 0 !important; +} +.monaco-button-dropdown .monaco-button-dropdown-separator { + padding: 4px 0; + cursor: default; +} +.monaco-button-dropdown .monaco-button-dropdown-separator > div { + height: 100%; + width: 1px; +} +.monaco-button-dropdown > .monaco-button.monaco-dropdown-button { + border: 1px solid var(--vscode-button-border, transparent); + border-left-width: 0 !important; + border-radius: 0 2px 2px 0; +} +.monaco-button-dropdown > .monaco-button.monaco-text-button { + border-radius: 2px 0 0 2px; +} +.monaco-description-button { + display: flex; + flex-direction: column; + align-items: center; + margin: 4px 5px; +} +.monaco-description-button .monaco-button-description { + font-style: italic; + font-size: 11px; + padding: 4px 20px; +} +.monaco-description-button .monaco-button-label, +.monaco-description-button .monaco-button-description { + display: flex; + justify-content: center; + align-items: center; +} +.monaco-description-button .monaco-button-label > .codicon, +.monaco-description-button .monaco-button-description > .codicon { + margin: 0 0.2em; + color: inherit !important; +} +.monaco-button.default-colors, +.monaco-button-dropdown.default-colors > .monaco-button { + color: var(--vscode-button-foreground); + background-color: var(--vscode-button-background); +} +.monaco-button.default-colors:hover, +.monaco-button-dropdown.default-colors > .monaco-button:hover { + background-color: var(--vscode-button-hoverBackground); +} +.monaco-button.default-colors.secondary, +.monaco-button-dropdown.default-colors > .monaco-button.secondary { + color: var(--vscode-button-secondaryForeground); + background-color: var(--vscode-button-secondaryBackground); +} +.monaco-button.default-colors.secondary:hover, +.monaco-button-dropdown.default-colors > .monaco-button.secondary:hover { + background-color: var(--vscode-button-secondaryHoverBackground); +} +.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator { + background-color: var(--vscode-button-background); + border-top: 1px solid var(--vscode-button-border); + border-bottom: 1px solid var(--vscode-button-border); +} +.monaco-button-dropdown.default-colors .monaco-button.secondary + .monaco-button-dropdown-separator { + background-color: var(--vscode-button-secondaryBackground); +} +.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator > div { + background-color: var(--vscode-button-separator); +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/countBadge/countBadge.css */ +.monaco-count-badge { + padding: 3px 6px; + border-radius: 11px; + font-size: 11px; + min-width: 18px; + min-height: 18px; + line-height: 11px; + font-weight: normal; + text-align: center; + display: inline-block; + box-sizing: border-box; +} +.monaco-count-badge.long { + padding: 2px 3px; + border-radius: 2px; + min-height: auto; + line-height: normal; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/progressbar/progressbar.css */ +.monaco-progress-container { + width: 100%; + height: 5px; + overflow: hidden; +} +.monaco-progress-container .progress-bit { + width: 2%; + height: 5px; + position: absolute; + left: 0; + display: none; +} +.monaco-progress-container.active .progress-bit { + display: inherit; +} +.monaco-progress-container.discrete .progress-bit { + left: 0; + transition: width 100ms linear; +} +.monaco-progress-container.discrete.done .progress-bit { + width: 100%; +} +.monaco-progress-container.infinite .progress-bit { + animation-name: progress; + animation-duration: 4s; + animation-iteration-count: infinite; + transform: translate3d(0px, 0px, 0px); + animation-timing-function: linear; +} +.monaco-progress-container.infinite.infinite-long-running .progress-bit { + animation-timing-function: steps(100); +} +@keyframes progress { + from { + transform: translateX(0%) scaleX(1); + } + 50% { + transform: translateX(2500%) scaleX(3); + } + to { + transform: translateX(4900%) scaleX(1); + } +} + +/* node_modules/monaco-editor/esm/vs/platform/quickinput/browser/media/quickInput.css */ +.quick-input-widget { + position: absolute; + width: 600px; + z-index: 2550; + left: 50%; + margin-left: -300px; + -webkit-app-region: no-drag; + border-radius: 6px; +} +.quick-input-titlebar { + display: flex; + align-items: center; + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +.quick-input-left-action-bar { + display: flex; + margin-left: 4px; + flex: 1; +} +.quick-input-title { + padding: 3px 0px; + text-align: center; + text-overflow: ellipsis; + overflow: hidden; +} +.quick-input-right-action-bar { + display: flex; + margin-right: 4px; + flex: 1; +} +.quick-input-right-action-bar > .actions-container { + justify-content: flex-end; +} +.quick-input-titlebar .monaco-action-bar .action-label.codicon { + background-position: center; + background-repeat: no-repeat; + padding: 2px; +} +.quick-input-description { + margin: 6px 6px 6px 11px; +} +.quick-input-header .quick-input-description { + margin: 4px 2px; + flex: 1; +} +.quick-input-header { + display: flex; + padding: 8px 6px 6px 6px; +} +.quick-input-widget.hidden-input .quick-input-header { + padding: 0; + margin-bottom: 0; +} +.quick-input-and-message { + display: flex; + flex-direction: column; + flex-grow: 1; + min-width: 0; + position: relative; +} +.quick-input-check-all { + align-self: center; + margin: 0; +} +.quick-input-filter { + flex-grow: 1; + display: flex; + position: relative; +} +.quick-input-box { + flex-grow: 1; +} +.quick-input-widget.show-checkboxes .quick-input-box, +.quick-input-widget.show-checkboxes .quick-input-message { + margin-left: 5px; +} +.quick-input-visible-count { + position: absolute; + left: -10000px; +} +.quick-input-count { + align-self: center; + position: absolute; + right: 4px; + display: flex; + align-items: center; +} +.quick-input-count .monaco-count-badge { + vertical-align: middle; + padding: 2px 4px; + border-radius: 2px; + min-height: auto; + line-height: normal; +} +.quick-input-action { + margin-left: 6px; +} +.quick-input-action .monaco-text-button { + font-size: 11px; + padding: 0 6px; + display: flex; + height: 25px; + align-items: center; +} +.quick-input-message { + margin-top: -1px; + padding: 5px; + overflow-wrap: break-word; +} +.quick-input-message > .codicon { + margin: 0 0.2em; + vertical-align: text-bottom; +} +.quick-input-message a { + color: inherit; +} +.quick-input-progress.monaco-progress-container { + position: relative; +} +.quick-input-progress.monaco-progress-container, +.quick-input-progress.monaco-progress-container .progress-bit { + height: 2px; +} +.quick-input-list { + line-height: 22px; +} +.quick-input-widget.hidden-input .quick-input-list { + margin-top: 4px; + padding-bottom: 4px; +} +.quick-input-list .monaco-list { + overflow: hidden; + max-height: calc(20 * 22px); + padding-bottom: 5px; +} +.quick-input-list .monaco-scrollable-element { + padding: 0px 5px; +} +.quick-input-list .quick-input-list-entry { + box-sizing: border-box; + overflow: hidden; + display: flex; + height: 100%; + padding: 0 6px; +} +.quick-input-list .quick-input-list-entry.quick-input-list-separator-border { + border-top-width: 1px; + border-top-style: solid; +} +.quick-input-list .monaco-list-row { + border-radius: 3px; +} +.quick-input-list .monaco-list-row[data-index="0"] .quick-input-list-entry.quick-input-list-separator-border { + border-top-style: none; +} +.quick-input-list .quick-input-list-label { + overflow: hidden; + display: flex; + height: 100%; + flex: 1; +} +.quick-input-list .quick-input-list-checkbox { + align-self: center; + margin: 0; +} +.quick-input-list .quick-input-list-icon { + background-size: 16px; + background-position: left center; + background-repeat: no-repeat; + padding-right: 6px; + width: 16px; + height: 22px; + display: flex; + align-items: center; + justify-content: center; +} +.quick-input-list .quick-input-list-rows { + overflow: hidden; + text-overflow: ellipsis; + display: flex; + flex-direction: column; + height: 100%; + flex: 1; + margin-left: 5px; +} +.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows { + margin-left: 10px; +} +.quick-input-widget .quick-input-list .quick-input-list-checkbox { + display: none; +} +.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox { + display: inline; +} +.quick-input-list .quick-input-list-rows > .quick-input-list-row { + display: flex; + align-items: center; +} +.quick-input-list .quick-input-list-rows > .quick-input-list-row .monaco-icon-label, +.quick-input-list .quick-input-list-rows > .quick-input-list-row .monaco-icon-label .monaco-icon-label-container > .monaco-icon-name-container { + flex: 1; +} +.quick-input-list .quick-input-list-rows > .quick-input-list-row .codicon[class*="codicon-"] { + vertical-align: text-bottom; +} +.quick-input-list .quick-input-list-rows .monaco-highlighted-label > span { + opacity: 1; +} +.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding { + margin-right: 8px; +} +.quick-input-list .quick-input-list-label-meta { + opacity: 0.7; + line-height: normal; + text-overflow: ellipsis; + overflow: hidden; +} +.quick-input-list .monaco-highlighted-label .highlight { + font-weight: bold; +} +.quick-input-list .quick-input-list-entry .quick-input-list-separator { + margin-right: 4px; +} +.quick-input-list .quick-input-list-entry-action-bar { + display: flex; + flex: 0; + overflow: visible; +} +.quick-input-list .quick-input-list-entry-action-bar .action-label { + display: none; +} +.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon { + margin-right: 4px; + padding: 0px 2px 2px 2px; +} +.quick-input-list .quick-input-list-entry-action-bar { + margin-top: 1px; +} +.quick-input-list .quick-input-list-entry-action-bar { + margin-right: 4px; +} +.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible, +.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label, +.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label { + display: flex; +} +.quick-input-list .monaco-list-row.focused .monaco-keybinding-key, +.quick-input-list .monaco-list-row.focused .quick-input-list-entry .quick-input-list-separator { + color: inherit; +} +.quick-input-list .monaco-list-row.focused .monaco-keybinding-key { + background: none; +} +.quick-input-list .quick-input-list-separator-as-item { + font-weight: 600; + font-size: 12px; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconlabel.css */ +.monaco-icon-label { + display: flex; + overflow: hidden; + text-overflow: ellipsis; +} +.monaco-icon-label::before { + background-size: 16px; + background-position: left center; + background-repeat: no-repeat; + padding-right: 6px; + width: 16px; + height: 22px; + line-height: inherit !important; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; + flex-shrink: 0; +} +.monaco-icon-label-container.disabled { + color: var(--vscode-disabledForeground); +} +.monaco-icon-label > .monaco-icon-label-container { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + flex: 1; +} +.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name { + color: inherit; + white-space: pre; +} +.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name > .label-separator { + margin: 0 2px; + opacity: 0.5; +} +.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-description-container > .label-description { + opacity: 0.7; + margin-left: 0.5em; + font-size: 0.9em; + white-space: pre; +} +.monaco-icon-label.nowrap > .monaco-icon-label-container > .monaco-icon-description-container > .label-description { + white-space: nowrap; +} +.vs .monaco-icon-label > .monaco-icon-label-container > .monaco-icon-description-container > .label-description { + opacity: 0.95; +} +.monaco-icon-label.italic > .monaco-icon-label-container > .monaco-icon-name-container > .label-name, +.monaco-icon-label.italic > .monaco-icon-label-container > .monaco-icon-description-container > .label-description { + font-style: italic; +} +.monaco-icon-label.deprecated { + text-decoration: line-through; + opacity: 0.66; +} +.monaco-icon-label.italic::after { + font-style: italic; +} +.monaco-icon-label.strikethrough > .monaco-icon-label-container > .monaco-icon-name-container > .label-name, +.monaco-icon-label.strikethrough > .monaco-icon-label-container > .monaco-icon-description-container > .label-description { + text-decoration: line-through; +} +.monaco-icon-label::after { + opacity: 0.75; + font-size: 90%; + font-weight: 600; + margin: auto 16px 0 5px; + text-align: center; +} +.monaco-list:focus .selected .monaco-icon-label, +.monaco-list:focus .selected .monaco-icon-label::after { + color: inherit !important; +} +.monaco-list-row.focused.selected .label-description, +.monaco-list-row.selected .label-description { + opacity: 0.8; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/keybindingLabel/keybindingLabel.css */ +.monaco-keybinding { + display: flex; + align-items: center; + line-height: 10px; +} +.monaco-keybinding > .monaco-keybinding-key { + display: inline-block; + border-style: solid; + border-width: 1px; + border-radius: 3px; + vertical-align: middle; + font-size: 11px; + padding: 3px 5px; + margin: 0 2px; +} +.monaco-keybinding > .monaco-keybinding-key:first-child { + margin-left: 0; +} +.monaco-keybinding > .monaco-keybinding-key:last-child { + margin-right: 0; +} +.monaco-keybinding > .monaco-keybinding-key-separator { + display: inline-block; +} +.monaco-keybinding > .monaco-keybinding-key-chord-separator { + width: 6px; +} + +/* node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditorWidget2/style.css */ +.monaco-editor .diff-hidden-lines-widget { + width: 100%; +} +.monaco-editor .diff-hidden-lines { + height: 0px; + transform: translate(0px, -10px); + font-size: 13px; + line-height: 14px; +} +.monaco-editor .diff-hidden-lines:not(.dragging) .top:hover, +.monaco-editor .diff-hidden-lines:not(.dragging) .bottom:hover, +.monaco-editor .diff-hidden-lines .top.dragging, +.monaco-editor .diff-hidden-lines .bottom.dragging { + background-color: var(--vscode-focusBorder); +} +.monaco-editor .diff-hidden-lines .top, +.monaco-editor .diff-hidden-lines .bottom { + transition: background-color 0.1s ease-out; + height: 4px; + background-color: transparent; + background-clip: padding-box; + border-bottom: 2px solid transparent; + border-top: 4px solid transparent; + cursor: ns-resize; +} +.monaco-editor .diff-hidden-lines .top { + transform: translate(0px, 4px); +} +.monaco-editor .diff-hidden-lines .bottom { + transform: translate(0px, -6px); +} +.monaco-editor .diff-unchanged-lines { + background: var(--vscode-diffEditor-unchangedCodeBackground); +} +.monaco-editor .noModificationsOverlay { + z-index: 1; + background: var(--vscode-editor-background); + display: flex; + justify-content: center; + align-items: center; +} +.monaco-editor .diff-hidden-lines .center { + background: var(--vscode-diffEditor-unchangedRegionBackground); + color: var(--vscode-diffEditor-unchangedRegionForeground); + overflow: hidden; + display: block; + text-overflow: ellipsis; + white-space: nowrap; + height: 24px; +} +.monaco-editor .diff-hidden-lines .center span.codicon { + vertical-align: middle; +} +.monaco-editor .diff-hidden-lines .center a:hover .codicon { + cursor: pointer; + color: var(--vscode-editorLink-activeForeground) !important; +} +.monaco-editor .diff-hidden-lines div.breadcrumb-item { + cursor: pointer; +} +.monaco-editor .diff-hidden-lines div.breadcrumb-item:hover { + color: var(--vscode-editorLink-activeForeground); +} +.monaco-editor .movedOriginal { + border: 2px solid var(--vscode-diffEditor-move-border); +} +.monaco-editor .movedModified { + border: 2px solid var(--vscode-diffEditor-move-border); +} +.monaco-editor .movedOriginal.currentMove, +.monaco-editor .movedModified.currentMove { + border: 2px solid var(--vscode-diffEditor-moveActive-border); +} +.monaco-diff-editor .moved-blocks-lines path.currentMove { + stroke: var(--vscode-diffEditor-moveActive-border); +} +.monaco-diff-editor .moved-blocks-lines path { + pointer-events: visiblestroke; +} +.monaco-diff-editor .moved-blocks-lines .arrow { + fill: var(--vscode-diffEditor-move-border); +} +.monaco-diff-editor .moved-blocks-lines .arrow.currentMove { + fill: var(--vscode-diffEditor-moveActive-border); +} +.monaco-diff-editor .moved-blocks-lines .arrow-rectangle { + fill: var(--vscode-editor-background); +} +.monaco-diff-editor .moved-blocks-lines { + position: absolute; + pointer-events: none; +} +.monaco-diff-editor .moved-blocks-lines path { + fill: none; + stroke: var(--vscode-diffEditor-move-border); + stroke-width: 2; +} +.monaco-editor .char-delete.diff-range-empty { + margin-left: -1px; + border-left: solid var(--vscode-diffEditor-removedTextBackground) 3px; +} +.monaco-editor .char-insert.diff-range-empty { + border-left: solid var(--vscode-diffEditor-insertedTextBackground) 3px; +} +.monaco-editor .fold-unchanged { + cursor: pointer; +} +.monaco-diff-editor .diff-moved-code-block { + display: flex; + justify-content: flex-end; + margin-top: -4px; +} +.monaco-diff-editor .diff-moved-code-block .action-bar .action-label.codicon { + width: 12px; + height: 12px; + font-size: 12px; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.css */ +.monaco-editor .selection-anchor { + background-color: #007acc; + width: 2px !important; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.css */ +.monaco-editor .bracket-match { + box-sizing: border-box; + background-color: var(--vscode-editorBracketMatch-background); + border: 1px solid var(--vscode-editorBracketMatch-border); +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/codicons/codicon/codicon.css */ +@font-face { + font-family: "codicon"; + font-display: block; + src: url(data:font/ttf;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI3T0Y+AAABjAAAAGBjbWFwJFpkEQAACJgAABjsZ2x5ZgwNh4oAACTcAADhaGhlYWRYl6BTAAAA4AAAADZoaGVhAlsC1gAAALwAAAAkaG10ePM8//sAAAHsAAAGrGxvY2FuKaViAAAhhAAAA1htYXhwAswBgQAAARgAAAAgbmFtZZP2uUoAAQZEAAAB+HBvc3QHWyqcAAEIPAAAF1sAAQAAASwAAAAAASz////+AS4AAQAAAAAAAAAAAAAAAAAAAasAAQAAAAEAAJjNyaRfDzz1AAsBLAAAAAB8JbCAAAAAAHwlsID////9AS4BLQAAAAgAAgAAAAAAAAABAAABqwF1ABcAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAQBKwGQAAUAAAC+ANIAAAAqAL4A0gAAAJAADgBNAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAwOpg7BIBLAAAABsBRwADAAAAAQAAAAAAAAAAAAAAAAACAAAAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASz//wEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASz//wEsAAABLAAAASwAAAEsAAABLP//ASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASz//wEsAAABLAAAASwAAAEs//8BLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAAAAAUAAAADAAAALAAAAAQAAATYAAEAAAAAA9IAAwABAAAALAADAAoAAATYAAQDpgAAABAAEAADAADqiOqM6sfqyesJ607sEv//AADqYOqK6o/qyerM6wvrUP//AAAAAAAAAAAAAAAAAAAAAQAQAGAAZADUANQBTgHUAAAAAwDhATMBMACqASEBdwEQAVIA+wFXAEoBoAFGAU8BTgCJADQBGgB+AMAA7gA/AXUAcwAWAZ4AkwCAAS0BCQEAAQEBiAC6AJ4ArgGCAWIAgwFzAVsBagFoAVwBawFyAW0BZgCwAWEBbwACAAQABQAKAAsADAANAA4ADwAQABIAGgAcAB0AHgBWAFcAWABZAFwAXQAhACIAIwAkACUAKAAqACsALAAtAC4ALwAwADEAMgAzADoANwA7ADwAPQA+AEAAQQBDAEQARQBHAE8AUABRAFIAYQBjAGUAaABsAG4AbwBwAHEAcgB0AHUAdgB3AHgAeQB6AHsAfAB9AH8AgQCEAIcAiACLAIwAjQCOAI8AkACRAJIAlACWAJcAmACZAJoAmwCdAJ8AoAChAIwAogCjAKQAqwCsAK8AsQC1ALYAuQC7ALwAvQC+AMQAxQDGAMcAyADJAMoAywDgAOIA4wDmAOkA6gDrAOwA8ADxAPQA9QD2APoA/AD9AP4A/wEDAQQBBwEIAQsBDAESARYBFwEYARkBGwEcAR0BHgEfASABJQEmAScBKAEpASoBKwEsAS4BLwExATIBNAE1ATYBNwE4ATkBOgE/AUABQQFCAUMBRQFKAUsBTAFNAVABUQFUAVUBVgFYAVkBXQFeAV8BYAFjAWQBZQFnAWkBbAFuAXABeQF6AYMBhAGFAYYBhwGJAYoBiwGMAY0BkQGTAZQBlQGYAZkBmgGcAZ0BoQGiAaMBpAGlAakBqgDkAOUA5wDoAFoAWwBqADgAawBeAXEAaQBtAGcAVQAmACcA9wCFAIoAtwGSAAEAFwBfAN8BCgE8AXQBFACtAUkBSAEOAVoBFQEjAFQBmwBCAPgAhgCyAO8BBgEkACkBEwENADUANgBGAXYBlgGQAY4BjwCmATsBPQEFAGYBpgGoAacBfAF9AX4BfwGAAYEBewARAE4BDwCVAZ8AZADCAM4AzQDMAE0ATABLABQAwwClAKcAUwBiAT4AnABgABUAswC0AREAHwAgAO0AEwGXAQIA3gDPANAA1QDTANQA1wDYANoA3ADdANIA0QF4AL8BIgCCAAYABwAIAAkA2wDWANkAGwC4APMA8gA5ABkAGABJAKgAqQFEAEgBRwFTAMEA+QAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAUFAAAAAAAAAGrAADqYAAA6mAAAAADAADqYQAA6mEAAADhAADqYgAA6mIAAAEzAADqYwAA6mMAAAEwAADqZAAA6mQAAACqAADqZQAA6mUAAAEhAADqZgAA6mYAAAF3AADqZwAA6mcAAAEQAADqaAAA6mgAAAFSAADqaQAA6mkAAAD7AADqagAA6moAAAFXAADqawAA6msAAABKAADqbAAA6mwAAAGgAADqbQAA6m0AAAFGAADqbgAA6m4AAAFPAADqbwAA6m8AAAFOAADqcAAA6nAAAACJAADqcQAA6nEAAAA0AADqcgAA6nIAAAEaAADqcwAA6nMAAAB+AADqdAAA6nQAAADAAADqdQAA6nUAAADuAADqdgAA6nYAAAA/AADqdwAA6ncAAAF1AADqeAAA6ngAAABzAADqeQAA6nkAAAAWAADqegAA6noAAAGeAADqewAA6nsAAACTAADqfAAA6nwAAACAAADqfQAA6n0AAAEtAADqfgAA6n4AAAEJAADqfwAA6n8AAAEAAADqgAAA6oAAAAEBAADqgQAA6oEAAAGIAADqggAA6oIAAAC6AADqgwAA6oMAAACeAADqhAAA6oQAAACuAADqhQAA6oUAAAGCAADqhgAA6oYAAAFiAADqhwAA6ocAAACDAADqiAAA6ogAAAFzAADqigAA6ooAAAFbAADqiwAA6osAAAFqAADqjAAA6owAAAFoAADqjwAA6o8AAAFcAADqkAAA6pAAAAFrAADqkQAA6pEAAAFyAADqkgAA6pIAAAFtAADqkwAA6pMAAAFmAADqlAAA6pQAAACwAADqlQAA6pUAAAFhAADqlgAA6pYAAAFvAADqlwAA6pcAAAACAADqmAAA6pgAAAAEAADqmQAA6pkAAAAFAADqmgAA6poAAAAKAADqmwAA6psAAAALAADqnAAA6pwAAAAMAADqnQAA6p0AAAANAADqngAA6p4AAAAOAADqnwAA6p8AAAAPAADqoAAA6qAAAAAQAADqoQAA6qEAAAASAADqogAA6qIAAAAaAADqowAA6qMAAAAcAADqpAAA6qQAAAAdAADqpQAA6qUAAAAeAADqpgAA6qYAAABWAADqpwAA6qcAAABXAADqqAAA6qgAAABYAADqqQAA6qkAAABZAADqqgAA6qoAAABcAADqqwAA6qsAAABdAADqrAAA6qwAAAAhAADqrQAA6q0AAAAiAADqrgAA6q4AAAAjAADqrwAA6q8AAAAkAADqsAAA6rAAAAAlAADqsQAA6rEAAAAoAADqsgAA6rIAAAAqAADqswAA6rMAAAArAADqtAAA6rQAAAAsAADqtQAA6rUAAAAtAADqtgAA6rYAAAAuAADqtwAA6rcAAAAvAADquAAA6rgAAAAwAADquQAA6rkAAAAxAADqugAA6roAAAAyAADquwAA6rsAAAAzAADqvAAA6rwAAAA6AADqvQAA6r0AAAA3AADqvgAA6r4AAAA7AADqvwAA6r8AAAA8AADqwAAA6sAAAAA9AADqwQAA6sEAAAA+AADqwgAA6sIAAABAAADqwwAA6sMAAABBAADqxAAA6sQAAABDAADqxQAA6sUAAABEAADqxgAA6sYAAABFAADqxwAA6scAAABHAADqyQAA6skAAABPAADqzAAA6swAAABQAADqzQAA6s0AAABRAADqzgAA6s4AAABSAADqzwAA6s8AAABhAADq0AAA6tAAAABjAADq0QAA6tEAAABlAADq0gAA6tIAAABoAADq0wAA6tMAAABsAADq1AAA6tQAAABuAADq1QAA6tUAAABvAADq1gAA6tYAAABwAADq1wAA6tcAAABxAADq2AAA6tgAAAByAADq2QAA6tkAAAB0AADq2gAA6toAAAB1AADq2wAA6tsAAAB2AADq3AAA6twAAAB3AADq3QAA6t0AAAB4AADq3gAA6t4AAAB5AADq3wAA6t8AAAB6AADq4AAA6uAAAAB7AADq4QAA6uEAAAB8AADq4gAA6uIAAAB9AADq4wAA6uMAAAB/AADq5AAA6uQAAACBAADq5QAA6uUAAACEAADq5gAA6uYAAACHAADq5wAA6ucAAACIAADq6AAA6ugAAACLAADq6QAA6ukAAACMAADq6gAA6uoAAACNAADq6wAA6usAAACOAADq7AAA6uwAAACPAADq7QAA6u0AAACQAADq7gAA6u4AAACRAADq7wAA6u8AAACSAADq8AAA6vAAAACUAADq8QAA6vEAAACWAADq8gAA6vIAAACXAADq8wAA6vMAAACYAADq9AAA6vQAAACZAADq9QAA6vUAAACaAADq9gAA6vYAAACbAADq9wAA6vcAAACdAADq+AAA6vgAAACfAADq+QAA6vkAAACgAADq+gAA6voAAAChAADq+wAA6vsAAACMAADq/AAA6vwAAACiAADq/QAA6v0AAACjAADq/gAA6v4AAACkAADq/wAA6v8AAACrAADrAAAA6wAAAACsAADrAQAA6wEAAACvAADrAgAA6wIAAACxAADrAwAA6wMAAAC1AADrBAAA6wQAAAC2AADrBQAA6wUAAAC5AADrBgAA6wYAAAC7AADrBwAA6wcAAAC8AADrCAAA6wgAAAC9AADrCQAA6wkAAAC+AADrCwAA6wsAAADEAADrDAAA6wwAAADFAADrDQAA6w0AAADGAADrDgAA6w4AAADHAADrDwAA6w8AAADIAADrEAAA6xAAAADJAADrEQAA6xEAAADKAADrEgAA6xIAAADLAADrEwAA6xMAAADgAADrFAAA6xQAAADiAADrFQAA6xUAAADjAADrFgAA6xYAAADmAADrFwAA6xcAAADpAADrGAAA6xgAAADqAADrGQAA6xkAAADrAADrGgAA6xoAAADsAADrGwAA6xsAAADwAADrHAAA6xwAAADxAADrHQAA6x0AAAD0AADrHgAA6x4AAAD1AADrHwAA6x8AAAD2AADrIAAA6yAAAAD6AADrIQAA6yEAAAD8AADrIgAA6yIAAAD9AADrIwAA6yMAAAD+AADrJAAA6yQAAAD/AADrJQAA6yUAAAEDAADrJgAA6yYAAAEEAADrJwAA6ycAAAEHAADrKAAA6ygAAAEIAADrKQAA6ykAAAELAADrKgAA6yoAAAEMAADrKwAA6ysAAAESAADrLAAA6ywAAAEWAADrLQAA6y0AAAEXAADrLgAA6y4AAAEYAADrLwAA6y8AAAEZAADrMAAA6zAAAAEbAADrMQAA6zEAAAEcAADrMgAA6zIAAAEdAADrMwAA6zMAAAEeAADrNAAA6zQAAAEfAADrNQAA6zUAAAEgAADrNgAA6zYAAAElAADrNwAA6zcAAAEmAADrOAAA6zgAAAEnAADrOQAA6zkAAAEoAADrOgAA6zoAAAEpAADrOwAA6zsAAAEqAADrPAAA6zwAAAErAADrPQAA6z0AAAEsAADrPgAA6z4AAAEuAADrPwAA6z8AAAEvAADrQAAA60AAAAExAADrQQAA60EAAAEyAADrQgAA60IAAAE0AADrQwAA60MAAAE1AADrRAAA60QAAAE2AADrRQAA60UAAAE3AADrRgAA60YAAAE4AADrRwAA60cAAAE5AADrSAAA60gAAAE6AADrSQAA60kAAAE/AADrSgAA60oAAAFAAADrSwAA60sAAAFBAADrTAAA60wAAAFCAADrTQAA600AAAFDAADrTgAA604AAAFFAADrUAAA61AAAAFKAADrUQAA61EAAAFLAADrUgAA61IAAAFMAADrUwAA61MAAAFNAADrVAAA61QAAAFQAADrVQAA61UAAAFRAADrVgAA61YAAAFUAADrVwAA61cAAAFVAADrWAAA61gAAAFWAADrWQAA61kAAAFYAADrWgAA61oAAAFZAADrWwAA61sAAAFdAADrXAAA61wAAAFeAADrXQAA610AAAFfAADrXgAA614AAAFgAADrXwAA618AAAFjAADrYAAA62AAAAFkAADrYQAA62EAAAFlAADrYgAA62IAAAFnAADrYwAA62MAAAFpAADrZAAA62QAAAFsAADrZQAA62UAAAFuAADrZgAA62YAAAFwAADrZwAA62cAAAF5AADraAAA62gAAAF6AADraQAA62kAAAGDAADragAA62oAAAGEAADrawAA62sAAAGFAADrbAAA62wAAAGGAADrbQAA620AAAGHAADrbgAA624AAAGJAADrbwAA628AAAGKAADrcAAA63AAAAGLAADrcQAA63EAAAGMAADrcgAA63IAAAGNAADrcwAA63MAAAGRAADrdAAA63QAAAGTAADrdQAA63UAAAGUAADrdgAA63YAAAGVAADrdwAA63cAAAGYAADreAAA63gAAAGZAADreQAA63kAAAGaAADregAA63oAAAGcAADrewAA63sAAAGdAADrfAAA63wAAAGhAADrfQAA630AAAGiAADrfgAA634AAAGjAADrfwAA638AAAGkAADrgAAA64AAAAGlAADrgQAA64EAAAGpAADrggAA64IAAAGqAADrgwAA64MAAADkAADrhAAA64QAAADlAADrhQAA64UAAADnAADrhgAA64YAAADoAADrhwAA64cAAABaAADriAAA64gAAABbAADriQAA64kAAABqAADrigAA64oAAAA4AADriwAA64sAAABrAADrjAAA64wAAABeAADrjQAA640AAAFxAADrjgAA644AAABpAADrjwAA648AAABtAADrkAAA65AAAABnAADrkQAA65EAAABVAADrkgAA65IAAAAmAADrkwAA65MAAAAnAADrlAAA65QAAAD3AADrlQAA65UAAACFAADrlgAA65YAAACKAADrlwAA65cAAAC3AADrmAAA65gAAAGSAADrmQAA65kAAAABAADrmgAA65oAAAAXAADrmwAA65sAAABfAADrnAAA65wAAADfAADrnQAA650AAAEKAADrngAA654AAAE8AADrnwAA658AAAF0AADroAAA66AAAAEUAADroQAA66EAAACtAADrogAA66IAAAFJAADrowAA66MAAAFIAADrpAAA66QAAAEOAADrpQAA66UAAAFaAADrpgAA66YAAAEVAADrpwAA66cAAAEjAADrqAAA66gAAABUAADrqQAA66kAAAGbAADrqgAA66oAAABCAADrqwAA66sAAAD4AADrrAAA66wAAACGAADrrQAA660AAACyAADrrgAA664AAADvAADrrwAA668AAAEGAADrsAAA67AAAAEkAADrsQAA67EAAAApAADrsgAA67IAAAETAADrswAA67MAAAENAADrtAAA67QAAAA1AADrtQAA67UAAAA2AADrtgAA67YAAABGAADrtwAA67cAAAF2AADruAAA67gAAAGWAADruQAA67kAAAGQAADrugAA67oAAAGOAADruwAA67sAAAGPAADrvAAA67wAAACmAADrvQAA670AAAE7AADrvgAA674AAAE9AADrvwAA678AAAEFAADrwAAA68AAAABmAADrwQAA68EAAAGmAADrwgAA68IAAAGoAADrwwAA68MAAAGnAADrxAAA68QAAAF8AADrxQAA68UAAAF9AADrxgAA68YAAAF+AADrxwAA68cAAAF/AADryAAA68gAAAGAAADryQAA68kAAAGBAADrygAA68oAAAF7AADrywAA68sAAAARAADrzAAA68wAAABOAADrzQAA680AAAEPAADrzgAA684AAACVAADrzwAA688AAAGfAADr0AAA69AAAABkAADr0QAA69EAAADCAADr0gAA69IAAADOAADr0wAA69MAAADNAADr1AAA69QAAADMAADr1QAA69UAAABNAADr1gAA69YAAABMAADr1wAA69cAAABLAADr2AAA69gAAAAUAADr2QAA69kAAADDAADr2gAA69oAAAClAADr2wAA69sAAACnAADr3AAA69wAAABTAADr3QAA690AAABiAADr3gAA694AAAE+AADr3wAA698AAACcAADr4AAA6+AAAABgAADr4QAA6+EAAAAVAADr4gAA6+IAAACzAADr4wAA6+MAAAC0AADr5AAA6+QAAAERAADr5QAA6+UAAAAfAADr5gAA6+YAAAAgAADr5wAA6+cAAADtAADr6AAA6+gAAAATAADr6QAA6+kAAAGXAADr6gAA6+oAAAEC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AHIAcwBpAG8AbgAgADEALgAxADAAYwBvAGQAaQBjAG8AbgBUAGgAZQAgAGkAYwBvAG4AIABmAG8AbgB0ACAAZgBvAHIAIABWAGkAcwB1AGEAbAAgAFMAdAB1AGQAaQBvACAAQwBvAGQAZQBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAIAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqwECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAAdhY2NvdW50FGFjdGl2YXRlLWJyZWFrcG9pbnRzA2FkZAdhcmNoaXZlCmFycm93LWJvdGgRYXJyb3ctY2lyY2xlLWRvd24RYXJyb3ctY2lyY2xlLWxlZnQSYXJyb3ctY2lyY2xlLXJpZ2h0D2Fycm93LWNpcmNsZS11cAphcnJvdy1kb3duCmFycm93LWxlZnQLYXJyb3ctcmlnaHQQYXJyb3ctc21hbGwtZG93bhBhcnJvdy1zbWFsbC1sZWZ0EWFycm93LXNtYWxsLXJpZ2h0DmFycm93LXNtYWxsLXVwCmFycm93LXN3YXAIYXJyb3ctdXAMYXp1cmUtZGV2b3BzBWF6dXJlC2JlYWtlci1zdG9wBmJlYWtlcghiZWxsLWRvdA5iZWxsLXNsYXNoLWRvdApiZWxsLXNsYXNoBGJlbGwFYmxhbmsEYm9sZARib29rCGJvb2ttYXJrC2JyYWNrZXQtZG90DWJyYWNrZXQtZXJyb3IJYnJpZWZjYXNlCWJyb2FkY2FzdAdicm93c2VyA2J1ZwhjYWxlbmRhcg1jYWxsLWluY29taW5nDWNhbGwtb3V0Z29pbmcOY2FzZS1zZW5zaXRpdmUJY2hlY2stYWxsBWNoZWNrCWNoZWNrbGlzdAxjaGV2cm9uLWRvd24MY2hldnJvbi1sZWZ0DWNoZXZyb24tcmlnaHQKY2hldnJvbi11cAxjaHJvbWUtY2xvc2UPY2hyb21lLW1heGltaXplD2Nocm9tZS1taW5pbWl6ZQ5jaHJvbWUtcmVzdG9yZQ1jaXJjbGUtZmlsbGVkE2NpcmNsZS1sYXJnZS1maWxsZWQMY2lyY2xlLWxhcmdlDGNpcmNsZS1zbGFzaBNjaXJjbGUtc21hbGwtZmlsbGVkDGNpcmNsZS1zbWFsbAZjaXJjbGUNY2lyY3VpdC1ib2FyZAljbGVhci1hbGwGY2xpcHB5CWNsb3NlLWFsbAVjbG9zZQ5jbG91ZC1kb3dubG9hZAxjbG91ZC11cGxvYWQFY2xvdWQEY29kZQxjb2xsYXBzZS1hbGwKY29sb3ItbW9kZQdjb21iaW5lEmNvbW1lbnQtZGlzY3Vzc2lvbg1jb21tZW50LWRyYWZ0EmNvbW1lbnQtdW5yZXNvbHZlZAdjb21tZW50DmNvbXBhc3MtYWN0aXZlC2NvbXBhc3MtZG90B2NvbXBhc3MEY29weQtjcmVkaXQtY2FyZARkYXNoCWRhc2hib2FyZAhkYXRhYmFzZQlkZWJ1Zy1hbGwPZGVidWctYWx0LXNtYWxsCWRlYnVnLWFsdCdkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLXVudmVyaWZpZWQcZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCBkZWJ1Zy1icmVha3BvaW50LWRhdGEtdW52ZXJpZmllZBVkZWJ1Zy1icmVha3BvaW50LWRhdGEkZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi11bnZlcmlmaWVkGWRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24fZGVidWctYnJlYWtwb2ludC1sb2ctdW52ZXJpZmllZBRkZWJ1Zy1icmVha3BvaW50LWxvZxxkZWJ1Zy1icmVha3BvaW50LXVuc3VwcG9ydGVkDWRlYnVnLWNvbnNvbGUUZGVidWctY29udGludWUtc21hbGwOZGVidWctY29udGludWUOZGVidWctY292ZXJhZ2UQZGVidWctZGlzY29ubmVjdBJkZWJ1Zy1saW5lLWJ5LWxpbmULZGVidWctcGF1c2ULZGVidWctcmVydW4TZGVidWctcmVzdGFydC1mcmFtZQ1kZWJ1Zy1yZXN0YXJ0FmRlYnVnLXJldmVyc2UtY29udGludWUXZGVidWctc3RhY2tmcmFtZS1hY3RpdmUQZGVidWctc3RhY2tmcmFtZQtkZWJ1Zy1zdGFydA9kZWJ1Zy1zdGVwLWJhY2sPZGVidWctc3RlcC1pbnRvDmRlYnVnLXN0ZXAtb3V0D2RlYnVnLXN0ZXAtb3ZlcgpkZWJ1Zy1zdG9wBWRlYnVnEGRlc2t0b3AtZG93bmxvYWQTZGV2aWNlLWNhbWVyYS12aWRlbw1kZXZpY2UtY2FtZXJhDWRldmljZS1tb2JpbGUKZGlmZi1hZGRlZAxkaWZmLWlnbm9yZWQNZGlmZi1tb2RpZmllZAxkaWZmLXJlbW92ZWQMZGlmZi1yZW5hbWVkBGRpZmYHZGlzY2FyZARlZGl0DWVkaXRvci1sYXlvdXQIZWxsaXBzaXMMZW1wdHktd2luZG93C2Vycm9yLXNtYWxsBWVycm9yB2V4Y2x1ZGUKZXhwYW5kLWFsbAZleHBvcnQKZXh0ZW5zaW9ucwpleWUtY2xvc2VkA2V5ZQhmZWVkYmFjawtmaWxlLWJpbmFyeQlmaWxlLWNvZGUKZmlsZS1tZWRpYQhmaWxlLXBkZg5maWxlLXN1Ym1vZHVsZRZmaWxlLXN5bWxpbmstZGlyZWN0b3J5EWZpbGUtc3ltbGluay1maWxlCGZpbGUtemlwBGZpbGUFZmlsZXMNZmlsdGVyLWZpbGxlZAZmaWx0ZXIFZmxhbWUJZm9sZC1kb3duB2ZvbGQtdXAEZm9sZA1mb2xkZXItYWN0aXZlDmZvbGRlci1saWJyYXJ5DWZvbGRlci1vcGVuZWQGZm9sZGVyBGdlYXIEZ2lmdAtnaXN0LXNlY3JldApnaXQtY29tbWl0C2dpdC1jb21wYXJlCWdpdC1tZXJnZRdnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZBdnaXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZRZnaXQtcHVsbC1yZXF1ZXN0LWRyYWZ0HmdpdC1wdWxsLXJlcXVlc3QtZ28tdG8tY2hhbmdlcxxnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzEGdpdC1wdWxsLXJlcXVlc3QNZ2l0aHViLWFjdGlvbgpnaXRodWItYWx0D2dpdGh1Yi1pbnZlcnRlZAZnaXRodWIFZ2xvYmUKZ28tdG8tZmlsZQdncmFiYmVyCmdyYXBoLWxlZnQKZ3JhcGgtbGluZQ1ncmFwaC1zY2F0dGVyBWdyYXBoB2dyaXBwZXIRZ3JvdXAtYnktcmVmLXR5cGUMaGVhcnQtZmlsbGVkBWhlYXJ0B2hpc3RvcnkEaG9tZQ9ob3Jpem9udGFsLXJ1bGUFaHVib3QFaW5ib3gGaW5kZW50BGluZm8GaW5zZXJ0B2luc3BlY3QLaXNzdWUtZHJhZnQOaXNzdWUtcmVvcGVuZWQGaXNzdWVzBml0YWxpYwZqZXJzZXkEanNvbg5rZWJhYi12ZXJ0aWNhbANrZXkDbGF3DWxheWVycy1hY3RpdmUKbGF5ZXJzLWRvdAZsYXllcnMXbGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQYbGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0D2xheW91dC1jZW50ZXJlZA5sYXlvdXQtbWVudWJhchNsYXlvdXQtcGFuZWwtY2VudGVyFGxheW91dC1wYW5lbC1qdXN0aWZ5EWxheW91dC1wYW5lbC1sZWZ0EGxheW91dC1wYW5lbC1vZmYSbGF5b3V0LXBhbmVsLXJpZ2h0DGxheW91dC1wYW5lbBdsYXlvdXQtc2lkZWJhci1sZWZ0LW9mZhNsYXlvdXQtc2lkZWJhci1sZWZ0GGxheW91dC1zaWRlYmFyLXJpZ2h0LW9mZhRsYXlvdXQtc2lkZWJhci1yaWdodBBsYXlvdXQtc3RhdHVzYmFyBmxheW91dAdsaWJyYXJ5EWxpZ2h0YnVsYi1hdXRvZml4CWxpZ2h0YnVsYg1saW5rLWV4dGVybmFsBGxpbmsLbGlzdC1maWx0ZXIJbGlzdC1mbGF0DGxpc3Qtb3JkZXJlZA5saXN0LXNlbGVjdGlvbglsaXN0LXRyZWUObGlzdC11bm9yZGVyZWQKbGl2ZS1zaGFyZQdsb2FkaW5nCGxvY2F0aW9uCmxvY2stc21hbGwEbG9jawZtYWduZXQJbWFpbC1yZWFkBG1haWwKbWFwLWZpbGxlZANtYXAIbWFya2Rvd24JbWVnYXBob25lB21lbnRpb24EbWVudQVtZXJnZQNtaWMJbWlsZXN0b25lBm1pcnJvcgxtb3J0YXItYm9hcmQEbW92ZRBtdWx0aXBsZS13aW5kb3dzBG11dGUIbmV3LWZpbGUKbmV3LWZvbGRlcgduZXdsaW5lCm5vLW5ld2xpbmUEbm90ZRFub3RlYm9vay10ZW1wbGF0ZQhub3RlYm9vawhvY3RvZmFjZQxvcGVuLXByZXZpZXcMb3JnYW5pemF0aW9uBm91dHB1dAdwYWNrYWdlCHBhaW50Y2FuC3Bhc3MtZmlsbGVkBHBhc3MKcGVyc29uLWFkZAZwZXJzb24JcGllLWNoYXJ0A3BpbgxwaW5uZWQtZGlydHkGcGlubmVkC3BsYXktY2lyY2xlBHBsYXkEcGx1Zw1wcmVzZXJ2ZS1jYXNlB3ByZXZpZXcQcHJpbWl0aXZlLXNxdWFyZQdwcm9qZWN0BXB1bHNlCHF1ZXN0aW9uBXF1b3RlC3JhZGlvLXRvd2VyCXJlYWN0aW9ucwtyZWNvcmQta2V5cwxyZWNvcmQtc21hbGwGcmVjb3JkBHJlZG8KcmVmZXJlbmNlcwdyZWZyZXNoBXJlZ2V4D3JlbW90ZS1leHBsb3JlcgZyZW1vdGUGcmVtb3ZlC3JlcGxhY2UtYWxsB3JlcGxhY2UFcmVwbHkKcmVwby1jbG9uZQ9yZXBvLWZvcmNlLXB1c2gLcmVwby1mb3JrZWQJcmVwby1wdWxsCXJlcG8tcHVzaARyZXBvBnJlcG9ydA9yZXF1ZXN0LWNoYW5nZXMGcm9ja2V0EnJvb3QtZm9sZGVyLW9wZW5lZAtyb290LWZvbGRlcgNyc3MEcnVieQlydW4tYWJvdmUHcnVuLWFsbAlydW4tYmVsb3cKcnVuLWVycm9ycwhzYXZlLWFsbAdzYXZlLWFzBHNhdmULc2NyZWVuLWZ1bGwNc2NyZWVuLW5vcm1hbAxzZWFyY2gtZnV6enkLc2VhcmNoLXN0b3AGc2VhcmNoBHNlbmQSc2VydmVyLWVudmlyb25tZW50DnNlcnZlci1wcm9jZXNzBnNlcnZlcg1zZXR0aW5ncy1nZWFyCHNldHRpbmdzBnNoaWVsZAdzaWduLWluCHNpZ24tb3V0BnNtaWxleQ9zb3J0LXByZWNlZGVuY2UOc291cmNlLWNvbnRyb2wHc3BhcmtsZRBzcGxpdC1ob3Jpem9udGFsDnNwbGl0LXZlcnRpY2FsCHNxdWlycmVsCnN0YXItZW1wdHkJc3Rhci1mdWxsCXN0YXItaGFsZgtzdG9wLWNpcmNsZQxzeW1ib2wtYXJyYXkOc3ltYm9sLWJvb2xlYW4Mc3ltYm9sLWNsYXNzDHN5bWJvbC1jb2xvcg9zeW1ib2wtY29uc3RhbnQSc3ltYm9sLWVudW0tbWVtYmVyC3N5bWJvbC1lbnVtDHN5bWJvbC1ldmVudAxzeW1ib2wtZmllbGQLc3ltYm9sLWZpbGUQc3ltYm9sLWludGVyZmFjZQpzeW1ib2wta2V5DnN5bWJvbC1rZXl3b3JkDXN5bWJvbC1tZXRob2QLc3ltYm9sLW1pc2MQc3ltYm9sLW5hbWVzcGFjZQ5zeW1ib2wtbnVtZXJpYw9zeW1ib2wtb3BlcmF0b3IQc3ltYm9sLXBhcmFtZXRlcg9zeW1ib2wtcHJvcGVydHkMc3ltYm9sLXJ1bGVyDnN5bWJvbC1zbmlwcGV0DXN5bWJvbC1zdHJpbmcQc3ltYm9sLXN0cnVjdHVyZQ9zeW1ib2wtdmFyaWFibGUMc3luYy1pZ25vcmVkBHN5bmMFdGFibGUDdGFnBnRhcmdldAh0YXNrbGlzdAl0ZWxlc2NvcGUNdGVybWluYWwtYmFzaAx0ZXJtaW5hbC1jbWQPdGVybWluYWwtZGViaWFuDnRlcm1pbmFsLWxpbnV4E3Rlcm1pbmFsLXBvd2Vyc2hlbGwNdGVybWluYWwtdG11eA90ZXJtaW5hbC11YnVudHUIdGVybWluYWwJdGV4dC1zaXplCnRocmVlLWJhcnMKdGh1bWJzZG93bgh0aHVtYnN1cAV0b29scwV0cmFzaA10cmlhbmdsZS1kb3duDXRyaWFuZ2xlLWxlZnQOdHJpYW5nbGUtcmlnaHQLdHJpYW5nbGUtdXAHdHdpdHRlchJ0eXBlLWhpZXJhcmNoeS1zdWIUdHlwZS1oaWVyYXJjaHktc3VwZXIOdHlwZS1oaWVyYXJjaHkGdW5mb2xkE3VuZ3JvdXAtYnktcmVmLXR5cGUGdW5sb2NrBnVubXV0ZQp1bnZlcmlmaWVkDnZhcmlhYmxlLWdyb3VwD3ZlcmlmaWVkLWZpbGxlZAh2ZXJpZmllZAh2ZXJzaW9ucwl2bS1hY3RpdmUKdm0tY29ubmVjdAp2bS1vdXRsaW5lCnZtLXJ1bm5pbmcCdm0Ed2FuZAd3YXJuaW5nBXdhdGNoCndoaXRlc3BhY2UKd2hvbGUtd29yZAZ3aW5kb3cJd29yZC13cmFwEXdvcmtzcGFjZS10cnVzdGVkEXdvcmtzcGFjZS11bmtub3duE3dvcmtzcGFjZS11bnRydXN0ZWQHem9vbS1pbgh6b29tLW91dAAAAA==) + format("truetype"); +} +.codicon[class*="codicon-"] { + font: normal normal normal 16px/1 codicon; + display: inline-block; + text-decoration: none; + text-rendering: auto; + text-align: center; + text-transform: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + user-select: none; + -webkit-user-select: none; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/codicons/codicon/codicon-modifiers.css */ +.codicon-wrench-subaction { + opacity: 0.5; +} +@keyframes codicon-spin { + 100% { + transform: rotate(360deg); + } +} +.codicon-sync.codicon-modifier-spin, +.codicon-loading.codicon-modifier-spin, +.codicon-gear.codicon-modifier-spin, +.codicon-notebook-state-executing.codicon-modifier-spin { + animation: codicon-spin 1.5s steps(30) infinite; +} +.codicon-modifier-disabled { + opacity: 0.4; +} +.codicon-loading, +.codicon-tree-item-loading::before { + animation-duration: 1s !important; + animation-timing-function: cubic-bezier(0.53, 0.21, 0.29, 0.67) !important; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.css */ +.monaco-editor .codicon.codicon-symbol-array, +.monaco-workbench .codicon.codicon-symbol-array { + color: var(--vscode-symbolIcon-arrayForeground); +} +.monaco-editor .codicon.codicon-symbol-boolean, +.monaco-workbench .codicon.codicon-symbol-boolean { + color: var(--vscode-symbolIcon-booleanForeground); +} +.monaco-editor .codicon.codicon-symbol-class, +.monaco-workbench .codicon.codicon-symbol-class { + color: var(--vscode-symbolIcon-classForeground); +} +.monaco-editor .codicon.codicon-symbol-method, +.monaco-workbench .codicon.codicon-symbol-method { + color: var(--vscode-symbolIcon-methodForeground); +} +.monaco-editor .codicon.codicon-symbol-color, +.monaco-workbench .codicon.codicon-symbol-color { + color: var(--vscode-symbolIcon-colorForeground); +} +.monaco-editor .codicon.codicon-symbol-constant, +.monaco-workbench .codicon.codicon-symbol-constant { + color: var(--vscode-symbolIcon-constantForeground); +} +.monaco-editor .codicon.codicon-symbol-constructor, +.monaco-workbench .codicon.codicon-symbol-constructor { + color: var(--vscode-symbolIcon-constructorForeground); +} +.monaco-editor .codicon.codicon-symbol-value, +.monaco-workbench .codicon.codicon-symbol-value, +.monaco-editor .codicon.codicon-symbol-enum, +.monaco-workbench .codicon.codicon-symbol-enum { + color: var(--vscode-symbolIcon-enumeratorForeground); +} +.monaco-editor .codicon.codicon-symbol-enum-member, +.monaco-workbench .codicon.codicon-symbol-enum-member { + color: var(--vscode-symbolIcon-enumeratorMemberForeground); +} +.monaco-editor .codicon.codicon-symbol-event, +.monaco-workbench .codicon.codicon-symbol-event { + color: var(--vscode-symbolIcon-eventForeground); +} +.monaco-editor .codicon.codicon-symbol-field, +.monaco-workbench .codicon.codicon-symbol-field { + color: var(--vscode-symbolIcon-fieldForeground); +} +.monaco-editor .codicon.codicon-symbol-file, +.monaco-workbench .codicon.codicon-symbol-file { + color: var(--vscode-symbolIcon-fileForeground); +} +.monaco-editor .codicon.codicon-symbol-folder, +.monaco-workbench .codicon.codicon-symbol-folder { + color: var(--vscode-symbolIcon-folderForeground); +} +.monaco-editor .codicon.codicon-symbol-function, +.monaco-workbench .codicon.codicon-symbol-function { + color: var(--vscode-symbolIcon-functionForeground); +} +.monaco-editor .codicon.codicon-symbol-interface, +.monaco-workbench .codicon.codicon-symbol-interface { + color: var(--vscode-symbolIcon-interfaceForeground); +} +.monaco-editor .codicon.codicon-symbol-key, +.monaco-workbench .codicon.codicon-symbol-key { + color: var(--vscode-symbolIcon-keyForeground); +} +.monaco-editor .codicon.codicon-symbol-keyword, +.monaco-workbench .codicon.codicon-symbol-keyword { + color: var(--vscode-symbolIcon-keywordForeground); +} +.monaco-editor .codicon.codicon-symbol-module, +.monaco-workbench .codicon.codicon-symbol-module { + color: var(--vscode-symbolIcon-moduleForeground); +} +.monaco-editor .codicon.codicon-symbol-namespace, +.monaco-workbench .codicon.codicon-symbol-namespace { + color: var(--vscode-symbolIcon-namespaceForeground); +} +.monaco-editor .codicon.codicon-symbol-null, +.monaco-workbench .codicon.codicon-symbol-null { + color: var(--vscode-symbolIcon-nullForeground); +} +.monaco-editor .codicon.codicon-symbol-number, +.monaco-workbench .codicon.codicon-symbol-number { + color: var(--vscode-symbolIcon-numberForeground); +} +.monaco-editor .codicon.codicon-symbol-object, +.monaco-workbench .codicon.codicon-symbol-object { + color: var(--vscode-symbolIcon-objectForeground); +} +.monaco-editor .codicon.codicon-symbol-operator, +.monaco-workbench .codicon.codicon-symbol-operator { + color: var(--vscode-symbolIcon-operatorForeground); +} +.monaco-editor .codicon.codicon-symbol-package, +.monaco-workbench .codicon.codicon-symbol-package { + color: var(--vscode-symbolIcon-packageForeground); +} +.monaco-editor .codicon.codicon-symbol-property, +.monaco-workbench .codicon.codicon-symbol-property { + color: var(--vscode-symbolIcon-propertyForeground); +} +.monaco-editor .codicon.codicon-symbol-reference, +.monaco-workbench .codicon.codicon-symbol-reference { + color: var(--vscode-symbolIcon-referenceForeground); +} +.monaco-editor .codicon.codicon-symbol-snippet, +.monaco-workbench .codicon.codicon-symbol-snippet { + color: var(--vscode-symbolIcon-snippetForeground); +} +.monaco-editor .codicon.codicon-symbol-string, +.monaco-workbench .codicon.codicon-symbol-string { + color: var(--vscode-symbolIcon-stringForeground); +} +.monaco-editor .codicon.codicon-symbol-struct, +.monaco-workbench .codicon.codicon-symbol-struct { + color: var(--vscode-symbolIcon-structForeground); +} +.monaco-editor .codicon.codicon-symbol-text, +.monaco-workbench .codicon.codicon-symbol-text { + color: var(--vscode-symbolIcon-textForeground); +} +.monaco-editor .codicon.codicon-symbol-type-parameter, +.monaco-workbench .codicon.codicon-symbol-type-parameter { + color: var(--vscode-symbolIcon-typeParameterForeground); +} +.monaco-editor .codicon.codicon-symbol-unit, +.monaco-workbench .codicon.codicon-symbol-unit { + color: var(--vscode-symbolIcon-unitForeground); +} +.monaco-editor .codicon.codicon-symbol-variable, +.monaco-workbench .codicon.codicon-symbol-variable { + color: var(--vscode-symbolIcon-variableForeground); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.css */ +.monaco-editor .lightBulbWidget { + display: flex; + align-items: center; + justify-content: center; +} +.monaco-editor .lightBulbWidget:hover { + cursor: pointer; +} +.monaco-editor .lightBulbWidget.codicon-light-bulb { + color: var(--vscode-editorLightBulb-foreground); +} +.monaco-editor .lightBulbWidget.codicon-lightbulb-autofix { + color: var(--vscode-editorLightBulbAutoFix-foreground, var(--vscode-editorLightBulb-foreground)); +} +.monaco-editor .lightBulbWidget:before { + position: relative; + z-index: 2; +} +.monaco-editor .lightBulbWidget:after { + position: absolute; + top: 0; + left: 0; + content: ""; + display: block; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: var(--vscode-editor-background); + z-index: 1; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/message/browser/messageController.css */ +.monaco-editor .monaco-editor-overlaymessage { + padding-bottom: 8px; + z-index: 10000; +} +.monaco-editor .monaco-editor-overlaymessage.below { + padding-bottom: 0; + padding-top: 8px; + z-index: 10000; +} +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +.monaco-editor .monaco-editor-overlaymessage.fadeIn { + animation: fadeIn 150ms ease-out; +} +@keyframes fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} +.monaco-editor .monaco-editor-overlaymessage.fadeOut { + animation: fadeOut 100ms ease-out; +} +.monaco-editor .monaco-editor-overlaymessage .message { + padding: 2px 4px; + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-inputValidation-infoBorder); + border-radius: 3px; +} +.monaco-editor .monaco-editor-overlaymessage .message p { + margin-block: 0px; +} +.monaco-editor .monaco-editor-overlaymessage .message a { + color: var(--vscode-textLink-foreground); +} +.monaco-editor .monaco-editor-overlaymessage .message a:hover { + color: var(--vscode-textLink-activeForeground); +} +.monaco-editor.hc-black .monaco-editor-overlaymessage .message, +.monaco-editor.hc-light .monaco-editor-overlaymessage .message { + border-width: 2px; +} +.monaco-editor .monaco-editor-overlaymessage .anchor { + width: 0 !important; + height: 0 !important; + border-color: transparent; + border-style: solid; + z-index: 1000; + border-width: 8px; + position: absolute; + left: 2px; +} +.monaco-editor .monaco-editor-overlaymessage .anchor.top { + border-bottom-color: var(--vscode-inputValidation-infoBorder); +} +.monaco-editor .monaco-editor-overlaymessage .anchor.below { + border-top-color: var(--vscode-inputValidation-infoBorder); +} +.monaco-editor .monaco-editor-overlaymessage:not(.below) .anchor.top, +.monaco-editor .monaco-editor-overlaymessage.below .anchor.below { + display: none; +} +.monaco-editor .monaco-editor-overlaymessage.below .anchor.top { + display: inherit; + top: -8px; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/markdownRenderer/browser/renderedMarkdown.css */ +.monaco-editor .rendered-markdown kbd { + background-color: var(--vscode-keybindingLabel-background); + color: var(--vscode-keybindingLabel-foreground); + border-style: solid; + border-width: 1px; + border-radius: 3px; + border-color: var(--vscode-keybindingLabel-border); + border-bottom-color: var(--vscode-keybindingLabel-bottomBorder); + box-shadow: inset 0 -1px 0 var(--vscode-widget-shadow); + vertical-align: middle; + padding: 1px 3px; +} + +/* node_modules/monaco-editor/esm/vs/platform/actionWidget/browser/actionWidget.css */ +.action-widget { + font-size: 13px; + border-radius: 0; + min-width: 160px; + max-width: 80vw; + z-index: 40; + display: block; + width: 100%; + border: 1px solid var(--vscode-editorWidget-border) !important; + border-radius: 2px; + background-color: var(--vscode-editorWidget-background); + color: var(--vscode-editorWidget-foreground); +} +.context-view-block { + position: fixed; + cursor: initial; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: -1; +} +.context-view-pointerBlock { + position: fixed; + cursor: initial; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 2; +} +.action-widget .monaco-list { + user-select: none; + -webkit-user-select: none; + border: none !important; + border-width: 0 !important; +} +.action-widget .monaco-list:focus:before { + outline: 0 !important; +} +.action-widget .monaco-list .monaco-scrollable-element { + overflow: visible; +} +.action-widget .monaco-list .monaco-list-row { + padding: 0 10px; + white-space: nowrap; + cursor: pointer; + touch-action: none; + width: 100%; +} +.action-widget .monaco-list .monaco-list-row.action.focused:not(.option-disabled) { + background-color: var(--vscode-quickInputList-focusBackground) !important; + color: var(--vscode-quickInputList-focusForeground); + outline: 1px solid var(--vscode-menu-selectionBorder, transparent); + outline-offset: -1px; +} +.action-widget .monaco-list-row.group-header { + color: var(--vscode-descriptionForeground) !important; + font-weight: 600; +} +.action-widget .monaco-list .group-header, +.action-widget .monaco-list .option-disabled, +.action-widget .monaco-list .option-disabled:before, +.action-widget .monaco-list .option-disabled .focused, +.action-widget .monaco-list .option-disabled .focused:before { + cursor: default !important; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; + background-color: transparent !important; + outline: 0 solid !important; +} +.action-widget .monaco-list-row.action { + display: flex; + gap: 6px; + align-items: center; +} +.action-widget .monaco-list-row.action.option-disabled, +.action-widget .monaco-list:focus .monaco-list-row.focused.action.option-disabled, +.action-widget .monaco-list-row.action.option-disabled .codicon, +.action-widget .monaco-list:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused).option-disabled { + color: var(--vscode-disabledForeground); +} +.action-widget .monaco-list-row.action:not(.option-disabled) .codicon { + color: inherit; +} +.action-widget .monaco-list-row.action .title { + flex: 1; + overflow: hidden; + text-overflow: ellipsis; +} +.action-widget .action-widget-action-bar { + background-color: var(--vscode-editorHoverWidget-statusBarBackground); + border-top: 1px solid var(--vscode-editorHoverWidget-border); +} +.action-widget .action-widget-action-bar::before { + display: block; + content: ""; + width: 100%; +} +.action-widget .action-widget-action-bar .actions-container { + padding: 0 8px; +} +.action-widget-action-bar .action-label { + color: var(--vscode-textLink-activeForeground); + font-size: 12px; + line-height: 22px; + padding: 0; + pointer-events: all; +} +.action-widget-action-bar .action-item { + margin-right: 16px; + pointer-events: none; +} +.action-widget-action-bar .action-label:hover { + background-color: transparent !important; +} +.monaco-action-bar .actions-container.highlight-toggled .action-label.checked { + background: var(--vscode-actionBar-toggledBackground) !important; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/codelens/browser/codelensWidget.css */ +.monaco-editor .codelens-decoration { + overflow: hidden; + display: inline-block; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--vscode-editorCodeLens-foreground); + line-height: var(--vscode-editorCodeLens-lineHeight); + font-size: var(--vscode-editorCodeLens-fontSize); + padding-right: calc(var(--vscode-editorCodeLens-fontSize) * 0.5); + font-feature-settings: var(--vscode-editorCodeLens-fontFeatureSettings); + font-family: var(--vscode-editorCodeLens-fontFamily), var(--vscode-editorCodeLens-fontFamilyDefault); +} +.monaco-editor .codelens-decoration > span, +.monaco-editor .codelens-decoration > a { + user-select: none; + -webkit-user-select: none; + white-space: nowrap; + vertical-align: sub; +} +.monaco-editor .codelens-decoration > a { + text-decoration: none; +} +.monaco-editor .codelens-decoration > a:hover { + cursor: pointer; + color: var(--vscode-editorLink-activeForeground) !important; +} +.monaco-editor .codelens-decoration > a:hover .codicon { + color: var(--vscode-editorLink-activeForeground) !important; +} +.monaco-editor .codelens-decoration .codicon { + vertical-align: middle; + color: currentColor !important; + color: var(--vscode-editorCodeLens-foreground); + line-height: var(--vscode-editorCodeLens-lineHeight); + font-size: var(--vscode-editorCodeLens-fontSize); +} +.monaco-editor .codelens-decoration > a:hover .codicon::before { + cursor: pointer; +} +@keyframes fadein { + 0% { + opacity: 0; + visibility: visible; + } + 100% { + opacity: 1; + } +} +.monaco-editor .codelens-decoration.fadein { + animation: fadein 0.1s linear; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/colorPicker/browser/colorPicker.css */ +.colorpicker-widget { + height: 190px; + user-select: none; + -webkit-user-select: none; +} +.colorpicker-color-decoration, +.hc-light .colorpicker-color-decoration { + border: solid 0.1em #000; + box-sizing: border-box; + margin: 0.1em 0.2em 0 0.2em; + width: 0.8em; + height: 0.8em; + line-height: 0.8em; + display: inline-block; + cursor: pointer; +} +.hc-black .colorpicker-color-decoration, +.vs-dark .colorpicker-color-decoration { + border: solid 0.1em #eee; +} +.colorpicker-header { + display: flex; + height: 24px; + position: relative; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=); + background-size: 9px 9px; + image-rendering: pixelated; +} +.colorpicker-header .picked-color { + width: 240px; + display: flex; + align-items: center; + justify-content: center; + line-height: 24px; + cursor: pointer; + color: white; + flex: 1; + white-space: nowrap; + overflow: hidden; +} +.colorpicker-header .picked-color .picked-color-presentation { + white-space: nowrap; + margin-left: 5px; + margin-right: 5px; +} +.colorpicker-header .picked-color .codicon { + color: inherit; + font-size: 14px; +} +.colorpicker-header .picked-color.light { + color: black; +} +.colorpicker-header .original-color { + width: 74px; + z-index: inherit; + cursor: pointer; +} +.standalone-colorpicker { + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-editorHoverWidget-border); +} +.colorpicker-header.standalone-colorpicker { + border-bottom: none; +} +.colorpicker-header .close-button { + cursor: pointer; + background-color: var(--vscode-editorHoverWidget-background); + border-left: 1px solid var(--vscode-editorHoverWidget-border); +} +.colorpicker-header .close-button-inner-div { + width: 100%; + height: 100%; + text-align: center; +} +.colorpicker-header .close-button-inner-div:hover { + background-color: var(--vscode-toolbar-hoverBackground); +} +.colorpicker-header .close-icon { + padding: 3px; +} +.colorpicker-body { + display: flex; + padding: 8px; + position: relative; +} +.colorpicker-body .saturation-wrap { + overflow: hidden; + height: 150px; + position: relative; + min-width: 220px; + flex: 1; +} +.colorpicker-body .saturation-box { + height: 150px; + position: absolute; +} +.colorpicker-body .saturation-selection { + width: 9px; + height: 9px; + margin: -5px 0 0 -5px; + border: 1px solid rgb(255, 255, 255); + border-radius: 100%; + box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.8); + position: absolute; +} +.colorpicker-body .strip { + width: 25px; + height: 150px; +} +.colorpicker-body .standalone-strip { + width: 25px; + height: 122px; +} +.colorpicker-body .hue-strip { + position: relative; + margin-left: 8px; + cursor: grab; + background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); +} +.colorpicker-body .opacity-strip { + position: relative; + margin-left: 8px; + cursor: grab; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=); + background-size: 9px 9px; + image-rendering: pixelated; +} +.colorpicker-body .strip.grabbing { + cursor: grabbing; +} +.colorpicker-body .slider { + position: absolute; + top: 0; + left: -2px; + width: calc(100% + 4px); + height: 4px; + box-sizing: border-box; + border: 1px solid rgba(255, 255, 255, 0.71); + box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.85); +} +.colorpicker-body .strip .overlay { + height: 150px; + pointer-events: none; +} +.colorpicker-body .standalone-strip .standalone-overlay { + height: 122px; + pointer-events: none; +} +.standalone-colorpicker-body { + display: block; + border: 1px solid transparent; + border-bottom: 1px solid var(--vscode-editorHoverWidget-border); + overflow: hidden; +} +.colorpicker-body .insert-button { + position: absolute; + height: 20px; + width: 58px; + padding: 0px; + right: 8px; + bottom: 8px; + background: var(--vscode-button-background); + color: var(--vscode-button-foreground); + border-radius: 2px; + border: none; + cursor: pointer; +} +.colorpicker-body .insert-button:hover { + background: var(--vscode-button-hoverBackground); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.css */ +.monaco-editor .goto-definition-link { + text-decoration: underline; + cursor: pointer; + color: var(--vscode-editorLink-activeForeground) !important; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/peekView/browser/media/peekViewWidget.css */ +.monaco-editor .peekview-widget .head { + box-sizing: border-box; + display: flex; + justify-content: space-between; + flex-wrap: nowrap; +} +.monaco-editor .peekview-widget .head .peekview-title { + display: flex; + align-items: baseline; + font-size: 13px; + margin-left: 20px; + min-width: 0; + text-overflow: ellipsis; + overflow: hidden; +} +.monaco-editor .peekview-widget .head .peekview-title.clickable { + cursor: pointer; +} +.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty) { + font-size: 0.9em; + margin-left: 0.5em; +} +.monaco-editor .peekview-widget .head .peekview-title .meta { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.monaco-editor .peekview-widget .head .peekview-title .dirname { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.monaco-editor .peekview-widget .head .peekview-title .filename { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.monaco-editor .peekview-widget .head .peekview-title .meta:not(:empty)::before { + content: "-"; + padding: 0 0.3em; +} +.monaco-editor .peekview-widget .head .peekview-actions { + flex: 1; + text-align: right; + padding-right: 2px; +} +.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar { + display: inline-block; +} +.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar, +.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar > .actions-container { + height: 100%; +} +.monaco-editor .peekview-widget > .body { + border-top: 1px solid; + position: relative; +} +.monaco-editor .peekview-widget .head .peekview-title .codicon { + margin-right: 4px; + align-self: center; +} +.monaco-editor .peekview-widget .monaco-list .monaco-list-row.focused .codicon { + color: inherit !important; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/zoneWidget/browser/zoneWidget.css */ +.monaco-editor .zone-widget { + position: absolute; + z-index: 10; +} +.monaco-editor .zone-widget .zone-widget-container { + border-top-style: solid; + border-bottom-style: solid; + border-top-width: 0; + border-bottom-width: 0; + position: relative; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.css */ +.monaco-editor .zone-widget .zone-widget-container.reference-zone-widget { + border-top-width: 1px; + border-bottom-width: 1px; +} +.monaco-editor .reference-zone-widget .inline { + display: inline-block; + vertical-align: top; +} +.monaco-editor .reference-zone-widget .messages { + height: 100%; + width: 100%; + text-align: center; + padding: 3em 0; +} +.monaco-editor .reference-zone-widget .ref-tree { + line-height: 23px; + background-color: var(--vscode-peekViewResult-background); + color: var(--vscode-peekViewResult-lineForeground); +} +.monaco-editor .reference-zone-widget .ref-tree .reference { + text-overflow: ellipsis; + overflow: hidden; +} +.monaco-editor .reference-zone-widget .ref-tree .reference-file { + display: inline-flex; + width: 100%; + height: 100%; + color: var(--vscode-peekViewResult-fileForeground); +} +.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .selected .reference-file { + color: inherit !important; +} +.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { + background-color: var(--vscode-peekViewResult-selectionBackground); + color: var(--vscode-peekViewResult-selectionForeground) !important; +} +.monaco-editor .reference-zone-widget .ref-tree .reference-file .count { + margin-right: 12px; + margin-left: auto; +} +.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { + background-color: var(--vscode-peekViewResult-matchHighlightBackground); +} +.monaco-editor .reference-zone-widget .preview .reference-decoration { + background-color: var(--vscode-peekViewEditor-matchHighlightBackground); + border: 2px solid var(--vscode-peekViewEditor-matchHighlightBorder); + box-sizing: border-box; +} +.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background, +.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input { + background-color: var(--vscode-peekViewEditor-background); +} +.monaco-editor .reference-zone-widget .preview .monaco-editor .margin { + background-color: var(--vscode-peekViewEditorGutter-background); +} +.monaco-editor.hc-black .reference-zone-widget .ref-tree .reference-file, +.monaco-editor.hc-light .reference-zone-widget .ref-tree .reference-file { + font-weight: bold; +} +.monaco-editor.hc-black .reference-zone-widget .ref-tree .referenceMatch .highlight, +.monaco-editor.hc-light .reference-zone-widget .ref-tree .referenceMatch .highlight { + border: 1px dotted var(--vscode-contrastActiveBorder, transparent); + box-sizing: border-box; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/hover/hover.css */ +.monaco-hover { + cursor: default; + position: absolute; + overflow: hidden; + user-select: text; + -webkit-user-select: text; + box-sizing: border-box; + animation: fadein 100ms linear; + line-height: 1.5em; + white-space: var(--vscode-hover-whiteSpace, normal); +} +.monaco-hover.hidden { + display: none; +} +.monaco-hover a:hover:not(.disabled) { + cursor: pointer; +} +.monaco-hover .hover-contents:not(.html-hover-contents) { + padding: 4px 8px; +} +.monaco-hover .markdown-hover > .hover-contents:not(.code-hover-contents) { + max-width: var(--vscode-hover-maxWidth, 500px); + word-wrap: break-word; +} +.monaco-hover .markdown-hover > .hover-contents:not(.code-hover-contents) hr { + min-width: 100%; +} +.monaco-hover p, +.monaco-hover .code, +.monaco-hover ul, +.monaco-hover h1, +.monaco-hover h2, +.monaco-hover h3, +.monaco-hover h4, +.monaco-hover h5, +.monaco-hover h6 { + margin: 8px 0; +} +.monaco-hover h1, +.monaco-hover h2, +.monaco-hover h3, +.monaco-hover h4, +.monaco-hover h5, +.monaco-hover h6 { + line-height: 1.1; +} +.monaco-hover code { + font-family: var(--monaco-monospace-font); +} +.monaco-hover hr { + box-sizing: border-box; + border-left: 0px; + border-right: 0px; + margin-top: 4px; + margin-bottom: -4px; + margin-left: -8px; + margin-right: -8px; + height: 1px; +} +.monaco-hover p:first-child, +.monaco-hover .code:first-child, +.monaco-hover ul:first-child { + margin-top: 0; +} +.monaco-hover p:last-child, +.monaco-hover .code:last-child, +.monaco-hover ul:last-child { + margin-bottom: 0; +} +.monaco-hover ul { + padding-left: 20px; +} +.monaco-hover ol { + padding-left: 20px; +} +.monaco-hover li > p { + margin-bottom: 0; +} +.monaco-hover li > ul { + margin-top: 0; +} +.monaco-hover code { + border-radius: 3px; + padding: 0 0.4em; +} +.monaco-hover .monaco-tokenized-source { + white-space: var(--vscode-hover-sourceWhiteSpace, pre-wrap); +} +.monaco-hover .hover-row.status-bar { + font-size: 12px; + line-height: 22px; +} +.monaco-hover .hover-row.status-bar .info { + font-style: italic; + padding: 0px 8px; +} +.monaco-hover .hover-row.status-bar .actions { + display: flex; + padding: 0px 8px; +} +.monaco-hover .hover-row.status-bar .actions .action-container { + margin-right: 16px; + cursor: pointer; +} +.monaco-hover .hover-row.status-bar .actions .action-container .action .icon { + padding-right: 4px; +} +.monaco-hover .markdown-hover .hover-contents .codicon { + color: inherit; + font-size: inherit; + vertical-align: middle; +} +.monaco-hover .hover-contents a.code-link:hover, +.monaco-hover .hover-contents a.code-link { + color: inherit; +} +.monaco-hover .hover-contents a.code-link:before { + content: "("; +} +.monaco-hover .hover-contents a.code-link:after { + content: ")"; +} +.monaco-hover .hover-contents a.code-link > span { + text-decoration: underline; + border-bottom: 1px solid transparent; + text-underline-position: under; + color: var(--vscode-textLink-foreground); +} +.monaco-hover .hover-contents a.code-link > span:hover { + color: var(--vscode-textLink-activeForeground); +} +.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span { + margin-bottom: 4px; + display: inline-block; +} +.monaco-hover-content .action-container a { + -webkit-user-select: none; + user-select: none; +} +.monaco-hover-content .action-container.disabled { + pointer-events: none; + opacity: 0.4; + cursor: default; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css */ +.monaco-editor .peekview-widget .head .peekview-title .severity-icon { + display: inline-block; + vertical-align: text-top; + margin-right: 4px; +} +.monaco-editor .marker-widget { + text-overflow: ellipsis; + white-space: nowrap; +} +.monaco-editor .marker-widget > .stale { + opacity: 0.6; + font-style: italic; +} +.monaco-editor .marker-widget .title { + display: inline-block; + padding-right: 5px; +} +.monaco-editor .marker-widget .descriptioncontainer { + position: absolute; + white-space: pre; + user-select: text; + -webkit-user-select: text; + padding: 8px 12px 0 20px; +} +.monaco-editor .marker-widget .descriptioncontainer .message { + display: flex; + flex-direction: column; +} +.monaco-editor .marker-widget .descriptioncontainer .message .details { + padding-left: 6px; +} +.monaco-editor .marker-widget .descriptioncontainer .message .source, +.monaco-editor .marker-widget .descriptioncontainer .message span.code { + opacity: 0.6; +} +.monaco-editor .marker-widget .descriptioncontainer .message a.code-link { + opacity: 0.6; + color: inherit; +} +.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:before { + content: "("; +} +.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:after { + content: ")"; +} +.monaco-editor .marker-widget .descriptioncontainer .message a.code-link > span { + text-decoration: underline; + border-bottom: 1px solid transparent; + text-underline-position: under; + color: var(--vscode-textLink-foreground); +} +.monaco-editor .marker-widget .descriptioncontainer .message a.code-link > span { + color: var(--vscode-textLink-activeForeground); +} +.monaco-editor .marker-widget .descriptioncontainer .filename { + cursor: pointer; +} + +/* node_modules/monaco-editor/esm/vs/platform/severityIcon/browser/media/severityIcon.css */ +.monaco-editor .zone-widget .codicon.codicon-error, +.markers-panel .marker-icon.error, +.markers-panel .marker-icon .codicon.codicon-error, +.text-search-provider-messages .providerMessage .codicon.codicon-error, +.extensions-viewlet > .extensions .codicon.codicon-error, +.extension-editor .codicon.codicon-error, +.preferences-editor .codicon.codicon-error { + color: var(--vscode-problemsErrorIcon-foreground); +} +.monaco-editor .zone-widget .codicon.codicon-warning, +.markers-panel .marker-icon.warning, +.markers-panel .marker-icon .codicon.codicon-warning, +.text-search-provider-messages .providerMessage .codicon.codicon-warning, +.extensions-viewlet > .extensions .codicon.codicon-warning, +.extension-editor .codicon.codicon-warning, +.preferences-editor .codicon.codicon-warning { + color: var(--vscode-problemsWarningIcon-foreground); +} +.monaco-editor .zone-widget .codicon.codicon-info, +.markers-panel .marker-icon.info, +.markers-panel .marker-icon .codicon.codicon-info, +.text-search-provider-messages .providerMessage .codicon.codicon-info, +.extensions-viewlet > .extensions .codicon.codicon-info, +.extension-editor .codicon.codicon-info, +.preferences-editor .codicon.codicon-info { + color: var(--vscode-problemsInfoIcon-foreground); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget.css */ +.monaco-editor .inlineSuggestionsHints.withBorder { + z-index: 39; + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-editorHoverWidget-border); +} +.monaco-editor .inlineSuggestionsHints a { + color: var(--vscode-foreground); +} +.monaco-editor .inlineSuggestionsHints a:hover { + color: var(--vscode-foreground); +} +.monaco-editor .inlineSuggestionsHints .keybinding { + display: flex; + margin-left: 4px; + opacity: 0.6; +} +.monaco-editor .inlineSuggestionsHints .keybinding .monaco-keybinding-key { + font-size: 8px; + padding: 2px 3px; +} +.monaco-editor .inlineSuggestionsHints .availableSuggestionCount a { + display: flex; + min-width: 19px; + justify-content: center; +} +.monaco-editor .inlineSuggestionStatusBarItemLabel { + margin-right: 2px; +} + +/* node_modules/monaco-editor/esm/vs/base/browser/ui/toolbar/toolbar.css */ +.monaco-toolbar { + height: 100%; +} +.monaco-toolbar .toolbar-toggle-more { + display: inline-block; + padding: 0; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/hover/browser/hover.css */ +.monaco-editor .hoverHighlight { + background-color: var(--vscode-editor-hoverHighlightBackground); +} +.monaco-editor .monaco-hover { + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-editorHoverWidget-border); + border-radius: 3px; +} +.monaco-editor .monaco-hover a { + color: var(--vscode-textLink-foreground); +} +.monaco-editor .monaco-hover a:hover { + color: var(--vscode-textLink-activeForeground); +} +.monaco-editor .monaco-hover .hover-row .actions { + background-color: var(--vscode-editorHoverWidget-statusBarBackground); +} +.monaco-editor .monaco-hover code { + background-color: var(--vscode-textCodeBlock-background); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/dnd/browser/dnd.css */ +.monaco-editor.vs .dnd-target, +.monaco-editor.hc-light .dnd-target { + border-right: 2px dotted black; + color: white; +} +.monaco-editor.vs-dark .dnd-target { + border-right: 2px dotted #aeafad; + color: #51504f; +} +.monaco-editor.hc-black .dnd-target { + border-right: 2px dotted #fff; + color: #000; +} +.monaco-editor.mouse-default .view-lines, +.monaco-editor.vs-dark.mac.mouse-default .view-lines, +.monaco-editor.hc-black.mac.mouse-default .view-lines, +.monaco-editor.hc-light.mac.mouse-default .view-lines { + cursor: default; +} +.monaco-editor.mouse-copy .view-lines, +.monaco-editor.vs-dark.mac.mouse-copy .view-lines, +.monaco-editor.hc-black.mac.mouse-copy .view-lines, +.monaco-editor.hc-light.mac.mouse-copy .view-lines { + cursor: copy; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/inlineProgress/browser/inlineProgressWidget.css */ +.inline-editor-progress-decoration { + display: inline-block; + width: 1em; + height: 1em; +} +.inline-progress-widget { + display: flex !important; + justify-content: center; + align-items: center; +} +.inline-progress-widget .icon { + font-size: 80% !important; +} +.inline-progress-widget:hover .icon { + font-size: 90% !important; + animation: none; +} +.inline-progress-widget:hover .icon::before { + content: "\ea76"; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.css */ +.post-edit-widget { + box-shadow: 0 0 8px 2px var(--vscode-widget-shadow); + border: 1px solid var(--vscode-widget-border, transparent); + border-radius: 4px; + background-color: var(--vscode-editorWidget-background); + overflow: hidden; +} +.post-edit-widget .monaco-button { + padding: 2px; + border: none; + border-radius: 0; +} +.post-edit-widget .monaco-button:hover { + background-color: var(--vscode-button-secondaryHoverBackground) !important; +} +.post-edit-widget .monaco-button .codicon { + margin: 0; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/find/browser/findOptionsWidget.css */ +.monaco-editor .findOptionsWidget { + background-color: var(--vscode-editorWidget-background); + color: var(--vscode-editorWidget-foreground); + box-shadow: 0 0 8px 2px var(--vscode-widget-shadow); + border: 2px solid var(--vscode-contrastBorder); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/find/browser/findWidget.css */ +.monaco-editor .find-widget { + position: absolute; + z-index: 35; + height: 33px; + overflow: hidden; + line-height: 19px; + transition: transform 200ms linear; + padding: 0 4px; + box-sizing: border-box; + transform: translateY(calc(-100% - 10px)); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} +.monaco-workbench.reduce-motion .monaco-editor .find-widget { + transition: transform 0ms linear; +} +.monaco-editor .find-widget textarea { + margin: 0px; +} +.monaco-editor .find-widget.hiddenEditor { + display: none; +} +.monaco-editor .find-widget.replaceToggled > .replace-part { + display: flex; +} +.monaco-editor .find-widget.visible { + transform: translateY(0); +} +.monaco-editor .find-widget .monaco-inputbox.synthetic-focus { + outline: 1px solid -webkit-focus-ring-color; + outline-offset: -1px; +} +.monaco-editor .find-widget .monaco-inputbox .input { + background-color: transparent; + min-height: 0; +} +.monaco-editor .find-widget .monaco-findInput .input { + font-size: 13px; +} +.monaco-editor .find-widget > .find-part, +.monaco-editor .find-widget > .replace-part { + margin: 3px 25px 0 17px; + font-size: 12px; + display: flex; +} +.monaco-editor .find-widget > .find-part .monaco-inputbox, +.monaco-editor .find-widget > .replace-part .monaco-inputbox { + min-height: 25px; +} +.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .mirror { + padding-right: 22px; +} +.monaco-editor .find-widget > .find-part .monaco-inputbox > .ibwrapper > .input, +.monaco-editor .find-widget > .find-part .monaco-inputbox > .ibwrapper > .mirror, +.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .input, +.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .mirror { + padding-top: 2px; + padding-bottom: 2px; +} +.monaco-editor .find-widget > .find-part .find-actions { + height: 25px; + display: flex; + align-items: center; +} +.monaco-editor .find-widget > .replace-part .replace-actions { + height: 25px; + display: flex; + align-items: center; +} +.monaco-editor .find-widget .monaco-findInput { + vertical-align: middle; + display: flex; + flex: 1; +} +.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element { + width: 100%; +} +.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element .scrollbar.vertical { + opacity: 0; +} +.monaco-editor .find-widget .matchesCount { + display: flex; + flex: initial; + margin: 0 0 0 3px; + padding: 2px 0 0 2px; + height: 25px; + vertical-align: middle; + box-sizing: border-box; + text-align: center; + line-height: 23px; +} +.monaco-editor .find-widget .button { + width: 16px; + height: 16px; + padding: 3px; + border-radius: 5px; + display: flex; + flex: initial; + margin-left: 3px; + background-position: center center; + background-repeat: no-repeat; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; +} +.monaco-editor .find-widget .codicon-find-selection { + width: 22px; + height: 22px; + padding: 3px; + border-radius: 5px; +} +.monaco-editor .find-widget .button.left { + margin-left: 0; + margin-right: 3px; +} +.monaco-editor .find-widget .button.wide { + width: auto; + padding: 1px 6px; + top: -1px; +} +.monaco-editor .find-widget .button.toggle { + position: absolute; + top: 0; + left: 3px; + width: 18px; + height: 100%; + border-radius: 0; + box-sizing: border-box; +} +.monaco-editor .find-widget .button.toggle.disabled { + display: none; +} +.monaco-editor .find-widget .disabled { + color: var(--vscode-disabledForeground); + cursor: default; +} +.monaco-editor .find-widget > .replace-part { + display: none; +} +.monaco-editor .find-widget > .replace-part > .monaco-findInput { + position: relative; + display: flex; + vertical-align: middle; + flex: auto; + flex-grow: 0; + flex-shrink: 0; +} +.monaco-editor .find-widget > .replace-part > .monaco-findInput > .controls { + position: absolute; + top: 3px; + right: 2px; +} +.monaco-editor .find-widget.reduced-find-widget .matchesCount { + display: none; +} +.monaco-editor .find-widget.narrow-find-widget { + max-width: 257px !important; +} +.monaco-editor .find-widget.collapsed-find-widget { + max-width: 170px !important; +} +.monaco-editor .find-widget.collapsed-find-widget .button.previous, +.monaco-editor .find-widget.collapsed-find-widget .button.next, +.monaco-editor .find-widget.collapsed-find-widget .button.replace, +.monaco-editor .find-widget.collapsed-find-widget .button.replace-all, +.monaco-editor .find-widget.collapsed-find-widget > .find-part .monaco-findInput .controls { + display: none; +} +.monaco-editor .findMatch { + animation-duration: 0; + animation-name: inherit !important; +} +.monaco-editor .find-widget .monaco-sash { + left: 0 !important; +} +.monaco-editor.hc-black .find-widget .button:before { + position: relative; + top: 1px; + left: 2px; +} +.monaco-editor .find-widget > .button.codicon-widget-close { + position: absolute; + top: 5px; + right: 4px; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/folding/browser/folding.css */ +.monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed, +.monaco-editor .margin-view-overlays .codicon-folding-manual-expanded, +.monaco-editor .margin-view-overlays .codicon-folding-expanded, +.monaco-editor .margin-view-overlays .codicon-folding-collapsed { + cursor: pointer; + opacity: 0; + transition: opacity 0.5s; + display: flex; + align-items: center; + justify-content: center; + font-size: 140%; + margin-left: 2px; +} +.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed, +.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-expanded, +.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-expanded, +.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-collapsed { + transition: initial; +} +.monaco-editor .margin-view-overlays:hover .codicon, +.monaco-editor .margin-view-overlays .codicon.codicon-folding-collapsed, +.monaco-editor .margin-view-overlays .codicon.codicon-folding-manual-collapsed, +.monaco-editor .margin-view-overlays .codicon.alwaysShowFoldIcons { + opacity: 1; +} +.monaco-editor .inline-folded:after { + color: grey; + margin: 0.1em 0.2em 0 0.2em; + content: "\22ef"; + display: inline; + line-height: 1em; + cursor: pointer; +} +.monaco-editor .folded-background { + background-color: var(--vscode-editor-foldBackground); +} +.monaco-editor .cldr.codicon.codicon-folding-expanded, +.monaco-editor .cldr.codicon.codicon-folding-collapsed, +.monaco-editor .cldr.codicon.codicon-folding-manual-expanded, +.monaco-editor .cldr.codicon.codicon-folding-manual-collapsed { + color: var(--vscode-editorGutter-foldingControlForeground) !important; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/inlineCompletions/browser/ghostText.css */ +.monaco-editor .suggest-preview-additional-widget { + white-space: nowrap; +} +.monaco-editor .suggest-preview-additional-widget .content-spacer { + color: transparent; + white-space: pre; +} +.monaco-editor .suggest-preview-additional-widget .button { + display: inline-block; + cursor: pointer; + text-decoration: underline; + text-underline-position: under; +} +.monaco-editor .ghost-text-hidden { + opacity: 0; + font-size: 0; +} +.monaco-editor .ghost-text-decoration, +.monaco-editor .suggest-preview-text .ghost-text { + font-style: italic; +} +.monaco-editor .inline-completion-text-to-replace { + text-decoration: underline; + text-underline-position: under; +} +.monaco-editor .ghost-text-decoration, +.monaco-editor .ghost-text-decoration-preview, +.monaco-editor .suggest-preview-text .ghost-text { + color: var(--vscode-editorGhostText-foreground) !important; + background-color: var(--vscode-editorGhostText-background); + border: 1px solid var(--vscode-editorGhostText-border); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/snippet/browser/snippetSession.css */ +.monaco-editor .snippet-placeholder { + min-width: 2px; + outline-style: solid; + outline-width: 1px; + background-color: var(--vscode-editor-snippetTabstopHighlightBackground, transparent); + outline-color: var(--vscode-editor-snippetTabstopHighlightBorder, transparent); +} +.monaco-editor .finish-snippet-placeholder { + outline-style: solid; + outline-width: 1px; + background-color: var(--vscode-editor-snippetFinalTabstopHighlightBackground, transparent); + outline-color: var(--vscode-editor-snippetFinalTabstopHighlightBorder, transparent); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/media/suggest.css */ +.monaco-editor .suggest-widget { + width: 430px; + z-index: 40; + display: flex; + flex-direction: column; + border-radius: 3px; +} +.monaco-editor .suggest-widget.message { + flex-direction: row; + align-items: center; +} +.monaco-editor .suggest-widget, +.monaco-editor .suggest-details { + flex: 0 1 auto; + width: 100%; + border-style: solid; + border-width: 1px; + border-color: var(--vscode-editorSuggestWidget-border); + background-color: var(--vscode-editorSuggestWidget-background); +} +.monaco-editor.hc-black .suggest-widget, +.monaco-editor.hc-black .suggest-details, +.monaco-editor.hc-light .suggest-widget, +.monaco-editor.hc-light .suggest-details { + border-width: 2px; +} +.monaco-editor .suggest-widget .suggest-status-bar { + box-sizing: border-box; + display: none; + flex-flow: row nowrap; + justify-content: space-between; + width: 100%; + font-size: 80%; + padding: 0 4px 0 4px; + border-top: 1px solid var(--vscode-editorSuggestWidget-border); + overflow: hidden; +} +.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar { + display: flex; +} +.monaco-editor .suggest-widget .suggest-status-bar .left { + padding-right: 8px; +} +.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-label { + color: var(--vscode-editorSuggestWidgetStatus-foreground); +} +.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label { + margin-right: 0; +} +.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label::after { + content: ", "; + margin-right: 0.3em; +} +.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row > .contents > .main > .right > .readMore, +.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label > .contents > .main > .right > .readMore { + display: none; +} +.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover > .contents > .main > .right.can-expand-details > .details-label { + width: 100%; +} +.monaco-editor .suggest-widget > .message { + padding-left: 22px; +} +.monaco-editor .suggest-widget > .tree { + height: 100%; + width: 100%; +} +.monaco-editor .suggest-widget .monaco-list { + user-select: none; + -webkit-user-select: none; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row { + display: flex; + -mox-box-sizing: border-box; + box-sizing: border-box; + padding-right: 10px; + background-repeat: no-repeat; + background-position: 2px 2px; + white-space: nowrap; + cursor: pointer; + touch-action: none; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused { + color: var(--vscode-editorSuggestWidget-selectedForeground); +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused .codicon { + color: var(--vscode-editorSuggestWidget-selectedIconForeground); +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents { + flex: 1; + height: 100%; + overflow: hidden; + padding-left: 2px; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main { + display: flex; + overflow: hidden; + text-overflow: ellipsis; + white-space: pre; + justify-content: space-between; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { + display: flex; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused) > .contents > .main .monaco-icon-label { + color: var(--vscode-editorSuggestWidget-foreground); +} +.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight { + font-weight: bold; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main .monaco-highlighted-label .highlight { + color: var(--vscode-editorSuggestWidget-highlightForeground); +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused > .contents > .main .monaco-highlighted-label .highlight { + color: var(--vscode-editorSuggestWidget-focusHighlightForeground); +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore::before { + color: inherit; + opacity: 1; + font-size: 14px; + cursor: pointer; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close { + position: absolute; + top: 6px; + right: 2px; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close:hover, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore:hover { + opacity: 1; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { + opacity: 0.7; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .signature-label { + overflow: hidden; + text-overflow: ellipsis; + opacity: 0.6; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .qualifier-label { + margin-left: 12px; + opacity: 0.4; + font-size: 85%; + line-height: initial; + text-overflow: ellipsis; + overflow: hidden; + align-self: center; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { + font-size: 85%; + margin-left: 1.1em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label > .monaco-tokenized-source { + display: inline; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { + display: none; +} +.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused > .contents > .main > .right > .details-label { + display: inline; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .right > .details-label, +.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label) > .contents > .main > .right > .details-label { + display: inline; +} +.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover > .contents > .main > .right.can-expand-details > .details-label { + width: calc(100% - 26px); +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left { + flex-shrink: 1; + flex-grow: 1; + overflow: hidden; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .monaco-icon-label { + flex-shrink: 0; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .left > .monaco-icon-label { + max-width: 100%; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label > .contents > .main > .left > .monaco-icon-label { + flex-shrink: 1; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { + overflow: hidden; + flex-shrink: 4; + max-width: 70%; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore { + display: inline-block; + position: absolute; + right: 10px; + width: 18px; + height: 18px; + visibility: hidden; +} +.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row > .contents > .main > .right > .readMore { + display: none !important; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label > .contents > .main > .right > .readMore { + display: none; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label > .contents > .main > .right > .readMore { + display: inline-block; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover > .contents > .main > .right > .readMore { + visibility: visible; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated { + opacity: 0.66; + text-decoration: unset; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated > .monaco-icon-label-container > .monaco-icon-name-container { + text-decoration: line-through; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label::before { + height: 100%; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon { + display: block; + height: 16px; + width: 16px; + margin-left: 2px; + background-repeat: no-repeat; + background-size: 80%; + background-position: center; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.hide { + display: none; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .suggest-icon { + display: flex; + align-items: center; + margin-right: 4px; +} +.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .icon, +.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon::before { + display: none; +} +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan { + margin: 0 0 0 0.3em; + border: 0.1em solid #000; + width: 0.7em; + height: 0.7em; + display: inline-block; +} +.monaco-editor .suggest-details-container { + z-index: 41; +} +.monaco-editor .suggest-details { + display: flex; + flex-direction: column; + cursor: default; + color: var(--vscode-editorSuggestWidget-foreground); +} +.monaco-editor .suggest-details.focused { + border-color: var(--vscode-focusBorder); +} +.monaco-editor .suggest-details a { + color: var(--vscode-textLink-foreground); +} +.monaco-editor .suggest-details a:hover { + color: var(--vscode-textLink-activeForeground); +} +.monaco-editor .suggest-details code { + background-color: var(--vscode-textCodeBlock-background); +} +.monaco-editor .suggest-details.no-docs { + display: none; +} +.monaco-editor .suggest-details > .monaco-scrollable-element { + flex: 1; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body { + box-sizing: border-box; + height: 100%; + width: 100%; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .type { + flex: 2; + overflow: hidden; + text-overflow: ellipsis; + opacity: 0.7; + white-space: pre; + margin: 0 24px 0 0; + padding: 4px 0 12px 5px; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .type.auto-wrap { + white-space: normal; + word-break: break-all; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs { + margin: 0; + padding: 4px 5px; + white-space: pre-wrap; +} +.monaco-editor .suggest-details.no-type > .monaco-scrollable-element > .body > .docs { + margin-right: 24px; + overflow: hidden; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs { + padding: 0; + white-space: initial; + min-height: calc(1rem + 8px); +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div, +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > span:not(:empty) { + padding: 4px 5px; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div > p:first-child { + margin-top: 0; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div > p:last-child { + margin-bottom: 0; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs .monaco-tokenized-source { + white-space: pre; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs .code { + white-space: pre-wrap; + word-wrap: break-word; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs .codicon { + vertical-align: sub; +} +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > p:empty { + display: none; +} +.monaco-editor .suggest-details code { + border-radius: 3px; + padding: 0 0.4em; +} +.monaco-editor .suggest-details ul { + padding-left: 20px; +} +.monaco-editor .suggest-details ol { + padding-left: 20px; +} +.monaco-editor .suggest-details p code { + font-family: var(--monaco-monospace-font); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.css */ +.monaco-editor.vs .valueSetReplacement { + outline: solid 2px var(--vscode-editorBracketMatch-border); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.css */ +.monaco-editor .linked-editing-decoration { + background-color: var(--vscode-editor-linkedEditingBackground); + min-width: 1px; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/links/browser/links.css */ +.monaco-editor .detected-link, +.monaco-editor .detected-link-active { + text-decoration: underline; + text-underline-position: under; +} +.monaco-editor .detected-link-active { + cursor: pointer; + color: var(--vscode-editorLink-activeForeground) !important; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.css */ +.monaco-editor .focused .selectionHighlight { + background-color: var(--vscode-editor-selectionHighlightBackground); + box-sizing: border-box; + border: 1px solid var(--vscode-editor-selectionHighlightBorder); +} +.monaco-editor.hc-black .focused .selectionHighlight, +.monaco-editor.hc-light .focused .selectionHighlight { + border-style: dotted; +} +.monaco-editor .wordHighlight { + background-color: var(--vscode-editor-wordHighlightBackground); + box-sizing: border-box; + border: 1px solid var(--vscode-editor-wordHighlightBorder); +} +.monaco-editor.hc-black .wordHighlight, +.monaco-editor.hc-light .wordHighlight { + border-style: dotted; +} +.monaco-editor .wordHighlightStrong { + background-color: var(--vscode-editor-wordHighlightStrongBackground); + box-sizing: border-box; + border: 1px solid var(--vscode-editor-wordHighlightStrongBorder); +} +.monaco-editor.hc-black .wordHighlightStrong, +.monaco-editor.hc-light .wordHighlightStrong { + border-style: dotted; +} +.monaco-editor .wordHighlightText { + background-color: var(--vscode-editor-wordHighlightTextBackground); + box-sizing: border-box; + border: 1px solid var(--vscode-editor-wordHighlightTextBorder); +} +.monaco-editor.hc-black .wordHighlightText, +.monaco-editor.hc-light .wordHighlightText { + border-style: dotted; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/parameterHints/browser/parameterHints.css */ +.monaco-editor .parameter-hints-widget { + z-index: 39; + display: flex; + flex-direction: column; + line-height: 1.5em; + cursor: default; + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-editorHoverWidget-border); +} +.hc-black .monaco-editor .parameter-hints-widget, +.hc-light .monaco-editor .parameter-hints-widget { + border-width: 2px; +} +.monaco-editor .parameter-hints-widget > .phwrapper { + max-width: 440px; + display: flex; + flex-direction: row; +} +.monaco-editor .parameter-hints-widget.multiple { + min-height: 3.3em; + padding: 0; +} +.monaco-editor .parameter-hints-widget.multiple .body::before { + content: ""; + display: block; + height: 100%; + position: absolute; + opacity: 0.5; + border-left: 1px solid var(--vscode-editorHoverWidget-border); +} +.monaco-editor .parameter-hints-widget p, +.monaco-editor .parameter-hints-widget ul { + margin: 8px 0; +} +.monaco-editor .parameter-hints-widget .monaco-scrollable-element, +.monaco-editor .parameter-hints-widget .body { + display: flex; + flex: 1; + flex-direction: column; + min-height: 100%; +} +.monaco-editor .parameter-hints-widget .signature { + padding: 4px 5px; + position: relative; +} +.monaco-editor .parameter-hints-widget .signature.has-docs::after { + content: ""; + display: block; + position: absolute; + left: 0; + width: 100%; + padding-top: 4px; + opacity: 0.5; + border-bottom: 1px solid var(--vscode-editorHoverWidget-border); +} +.monaco-editor .parameter-hints-widget .docs { + padding: 0 10px 0 5px; + white-space: pre-wrap; +} +.monaco-editor .parameter-hints-widget .docs.empty { + display: none; +} +.monaco-editor .parameter-hints-widget .docs a { + color: var(--vscode-textLink-foreground); +} +.monaco-editor .parameter-hints-widget .docs a:hover { + color: var(--vscode-textLink-activeForeground); + cursor: pointer; +} +.monaco-editor .parameter-hints-widget .docs .markdown-docs { + white-space: initial; +} +.monaco-editor .parameter-hints-widget .docs code { + font-family: var(--monaco-monospace-font); + border-radius: 3px; + padding: 0 0.4em; + background-color: var(--vscode-textCodeBlock-background); +} +.monaco-editor .parameter-hints-widget .docs .monaco-tokenized-source, +.monaco-editor .parameter-hints-widget .docs .code { + white-space: pre-wrap; +} +.monaco-editor .parameter-hints-widget .controls { + display: none; + flex-direction: column; + align-items: center; + min-width: 22px; + justify-content: flex-end; +} +.monaco-editor .parameter-hints-widget.multiple .controls { + display: flex; + padding: 0 2px; +} +.monaco-editor .parameter-hints-widget.multiple .button { + width: 16px; + height: 16px; + background-repeat: no-repeat; + cursor: pointer; +} +.monaco-editor .parameter-hints-widget .button.previous { + bottom: 24px; +} +.monaco-editor .parameter-hints-widget .overloads { + text-align: center; + height: 12px; + line-height: 12px; + font-family: var(--monaco-monospace-font); +} +.monaco-editor .parameter-hints-widget .signature .parameter.active { + color: var(--vscode-editorHoverWidget-highlightForeground); + font-weight: bold; +} +.monaco-editor .parameter-hints-widget .documentation-parameter > .parameter { + font-weight: bold; + margin-right: 0.5em; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/rename/browser/renameInputField.css */ +.monaco-editor .rename-box { + z-index: 100; + color: inherit; + border-radius: 4px; +} +.monaco-editor .rename-box.preview { + padding: 4px 4px 0 4px; +} +.monaco-editor .rename-box .rename-input { + padding: 3px; + border-radius: 2px; +} +.monaco-editor .rename-box .rename-label { + display: none; + opacity: 0.8; +} +.monaco-editor .rename-box.preview .rename-label { + display: inherit; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/stickyScroll/browser/stickyScroll.css */ +.monaco-editor .sticky-widget { + overflow: hidden; +} +.monaco-editor .sticky-widget-line-numbers { + float: left; + background-color: inherit; +} +.monaco-editor .sticky-widget-lines-scrollable { + display: inline-block; + position: absolute; + overflow: hidden; + width: var(--vscode-editorStickyScroll-scrollableWidth); + background-color: inherit; +} +.monaco-editor .sticky-widget-lines { + position: absolute; + background-color: inherit; +} +.monaco-editor .sticky-line-number, +.monaco-editor .sticky-line-content { + color: var(--vscode-editorLineNumber-foreground); + white-space: nowrap; + display: inline-block; + position: absolute; + background-color: inherit; +} +.monaco-editor .sticky-line-number .codicon { + float: right; + transition: var(--vscode-editorStickyScroll-foldingOpacityTransition); +} +.monaco-editor .sticky-line-content { + width: var(--vscode-editorStickyScroll-scrollableWidth); + background-color: inherit; + white-space: nowrap; +} +.monaco-editor .sticky-line-number-inner { + display: block; + text-align: right; +} +.monaco-editor.hc-black .sticky-widget, +.monaco-editor.hc-light .sticky-widget { + border-bottom: 1px solid var(--vscode-contrastBorder); +} +.monaco-editor .sticky-line-content:hover { + background-color: var(--vscode-editorStickyScrollHover-background); + cursor: pointer; +} +.monaco-editor .sticky-widget { + width: 100%; + box-shadow: var(--vscode-scrollbar-shadow) 0 3px 2px -2px; + z-index: 4; + background-color: var(--vscode-editorStickyScroll-background); +} +.monaco-editor .sticky-widget.peek { + background-color: var(--vscode-peekViewEditorStickyScroll-background); +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.css */ +.monaco-editor .unicode-highlight { + border: 1px solid var(--vscode-editorUnicodeHighlight-border); + background-color: var(--vscode-editorUnicodeHighlight-background); + box-sizing: border-box; +} + +/* node_modules/monaco-editor/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.css */ +.editor-banner { + box-sizing: border-box; + cursor: default; + width: 100%; + font-size: 12px; + display: flex; + overflow: visible; + height: 26px; + background: var(--vscode-banner-background); +} +.editor-banner .icon-container { + display: flex; + flex-shrink: 0; + align-items: center; + padding: 0 6px 0 10px; +} +.editor-banner .icon-container.custom-icon { + background-repeat: no-repeat; + background-position: center center; + background-size: 16px; + width: 16px; + padding: 0; + margin: 0 6px 0 10px; +} +.editor-banner .message-container { + display: flex; + align-items: center; + line-height: 26px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.editor-banner .message-container p { + margin-block-start: 0; + margin-block-end: 0; +} +.editor-banner .message-actions-container { + flex-grow: 1; + flex-shrink: 0; + line-height: 26px; + margin: 0 4px; +} +.editor-banner .message-actions-container a.monaco-button { + width: inherit; + margin: 2px 8px; + padding: 0px 12px; +} +.editor-banner .message-actions-container a { + padding: 3px; + margin-left: 12px; + text-decoration: underline; +} +.editor-banner .action-container { + padding: 0 10px 0 6px; +} +.editor-banner { + background-color: var(--vscode-banner-background); +} +.editor-banner, +.editor-banner .action-container .codicon, +.editor-banner .message-actions-container .monaco-link { + color: var(--vscode-banner-foreground); +} +.editor-banner .icon-container .codicon { + color: var(--vscode-banner-iconForeground); +} + +/* node_modules/monaco-editor/esm/vs/platform/opener/browser/link.css */ +.monaco-link { + color: var(--vscode-textLink-foreground); +} +.monaco-link:hover { + color: var(--vscode-textLink-activeForeground); +} + +/* node_modules/monaco-editor/esm/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.css */ +.monaco-editor .iPadShowKeyboard { + width: 58px; + min-width: 0; + height: 36px; + min-height: 0; + margin: 0; + padding: 0; + position: absolute; + resize: none; + overflow: hidden; + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjNDI0MjQyIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) + center center no-repeat; + border: 4px solid #f6f6f6; + border-radius: 4px; +} +.monaco-editor.vs-dark .iPadShowKeyboard { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjQzVDNUM1Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) + center center no-repeat; + border: 4px solid #252526; +} + +/* node_modules/monaco-editor/esm/vs/editor/standalone/browser/inspectTokens/inspectTokens.css */ +.monaco-editor .tokens-inspect-widget { + z-index: 50; + user-select: text; + -webkit-user-select: text; + padding: 10px; + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-editorHoverWidget-border); +} +.monaco-editor.hc-black .tokens-inspect-widget, +.monaco-editor.hc-light .tokens-inspect-widget { + border-width: 2px; +} +.monaco-editor .tokens-inspect-widget .tokens-inspect-separator { + height: 1px; + border: 0; + background-color: var(--vscode-editorHoverWidget-border); +} +.monaco-editor .tokens-inspect-widget .tm-token { + font-family: var(--monaco-monospace-font); +} +.monaco-editor .tokens-inspect-widget .tm-token-length { + font-weight: normal; + font-size: 60%; + float: right; +} +.monaco-editor .tokens-inspect-widget .tm-metadata-table { + width: 100%; +} +.monaco-editor .tokens-inspect-widget .tm-metadata-value { + font-family: var(--monaco-monospace-font); + text-align: right; +} +.monaco-editor .tokens-inspect-widget .tm-token-type { + font-family: var(--monaco-monospace-font); +} diff --git a/tsconfig.json b/tsconfig.json index c7fa5de..0620fea 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,12 +8,8 @@ "allowSyntheticDefaultImports": true, "skipLibCheck": true, "downlevelIteration": true, - "target": "es6", - "lib": [ - "es2022", - "dom", - "dom.iterable" - ], + "target": "ES2023", + "lib": ["es2022", "dom", "dom.iterable"], "outDir": "out", "baseUrl": "./", "incremental": true, @@ -23,14 +19,6 @@ "sourceMap": false, "allowJs": true }, - "exclude": [ - "node_modules", - "out", - "git", - "venv" - ], - "include": [ - "**/*.ts", - "**/*.d.ts" - ] + "exclude": ["node_modules", "out", "git", "venv"], + "include": ["**/*.ts", "**/*.d.ts"] } From 020f3d471bd4dcc0e3aa7b87303daf236798dc34 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sun, 3 Nov 2024 20:41:21 +0300 Subject: [PATCH 61/63] fix!(compatibility): fix of data implementation in compatibility module --- source/addons/compatibility.ts | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/source/addons/compatibility.ts b/source/addons/compatibility.ts index 9649b9d..b6a595b 100644 --- a/source/addons/compatibility.ts +++ b/source/addons/compatibility.ts @@ -24,37 +24,37 @@ export default class CompatibilityModule { } private getVersion(data: any): string { - if (data['version'] !== undefined) return `${data['version']}`; - if (data['barefiling'] !== undefined) return '2.4'; - if (data['debug_mode'] !== undefined) return '2.1'; - if (data['grouped_extensions'] !== undefined) return '2.0'; + if (data.version !== undefined) return `${data.version}`; + if (data.barefiling !== undefined) return '2.4'; + if (data.debug_mode !== undefined) return '2.1'; + if (data.grouped_extensions !== undefined) return '2.0'; return '1.*'; } private async convert(data: any, version: string): Promise { const settingsMap: { [key: string]: any } = { '1.*': { - extensions: data['extensions'].replace(',', '>'), - forced_extensions: data['force_extensions'].replace(',', '>'), - is_onload: Boolean(data['is_dynamic_on']), + extensions: data.extensions.replace(',', '>'), + forced_extensions: data.force_extensions.replace(',', '>'), + is_onload: Boolean(data.is_dynamic_on), }, '2.0': { - extensions: data['extensions'].replace(',', '>'), - grouped_extensions: data['grouped_extensions'].replace(',', '>'), + extensions: data.extensions.replace(',', '>'), + grouped_extensions: data.grouped_extensions.replace(',', '>'), }, '2.1': { - grouped_extensions: data['grouped_extensions'].replace(',', '>'), - extensions: data['extensions'].replace(';', '>'), - forced_extensions: data['forced_extensions'].replace(';', '>'), - ignore_extensions: data['ignore_extensions'].replace(';', '>'), - ignore_masks: data['ignore_masks'].replace(';', '>'), + grouped_extensions: data.grouped_extensions.replace(',', '>'), + extensions: data.extensions.replace(';', '>'), + forced_extensions: data.forced_extensions.replace(';', '>'), + ignore_extensions: data.ignore_extensions.replace(';', '>'), + ignore_masks: data.ignore_masks.replace(';', '>'), }, '2.4': { - grouped_extensions: data['grouped_extensions'].replace(',', '>'), - extensions: data['extensions'].replace(';', '>'), - forced_extensions: data['forced_extensions'].replace(';', '>'), - ignore_extensions: data['ignore_extensions'].replace(';', '>'), - ignore_masks: data['ignore_masks'].replace(';', '>'), + grouped_extensions: data.grouped_extensions.replace(',', '>'), + extensions: data.extensions.replace(';', '>'), + forced_extensions: data.forced_extensions.replace(';', '>'), + ignore_extensions: data.ignore_extensions.replace(';', '>'), + ignore_masks: data.ignore_masks.replace(';', '>'), }, }; From 7322bad0ef7116bee779c3ec7b081cff7bd49dc3 Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sun, 3 Nov 2024 20:45:20 +0300 Subject: [PATCH 62/63] chore(release): 3.0.0 --- CHANGELOG.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++ manifest.json | 2 +- package-lock.json | 4 ++-- package.json | 4 ++-- 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dfdf235..7864c29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,59 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [3.0.0](https://github.com/mokkapps/changelog-generator-demo/compare/v2.4.0...v3.0.0) (2024-11-03) + + +### Features + +* **architecture:** create architecture for code editor and other things ([f37a46d](https://github.com/mokkapps/changelog-generator-demo/commits/f37a46d4d34bc203ed9799e3b7d0f2ebf70193d4)) +* **common:** add button to "Reload" registries in soft way which saves default extensions ([ec9c5cc](https://github.com/mokkapps/changelog-generator-demo/commits/ec9c5ccb170d8285c4151a20b9eb2fc256763e6f)) +* **common:** add support for default extensions and default views by default ([a918488](https://github.com/mokkapps/changelog-generator-demo/commits/a9184889cf6072e6bccafed3ae8c087993876df8)) +* **compatibility:** adapt compatibility module to new `>` semantics ([47b5f80](https://github.com/mokkapps/changelog-generator-demo/commits/47b5f80f6ed34cf5652ba997676669c5332aeab5)) +* **locale:** implement localization for errors ([b85563e](https://github.com/mokkapps/changelog-generator-demo/commits/b85563ec47f46537877d9b996bfdded59590febb)) +* **modals-locale:** now modals are also localized ([2a96a38](https://github.com/mokkapps/changelog-generator-demo/commits/2a96a386cde0db8199e6065f01297163b310b11f)) +* **monaco-editor:** implement monaco view in the main codebase ([9f5ba74](https://github.com/mokkapps/changelog-generator-demo/commits/9f5ba743a18826a01fa76b53c7691e4cee464382)) +* **monaco-editor:** integrate workers from monaco to fix visuals of code view ([dd15f31](https://github.com/mokkapps/changelog-generator-demo/commits/dd15f3107f518b8630f6ba700ae65053e2afaa7f)) +* **settings:** add block about code editor settings and implement them in code ([3105825](https://github.com/mokkapps/changelog-generator-demo/commits/3105825a1df8de3b6cf832235caa5717a4045d87)) +* **settings:** add some little graphics and additions to the settings tab ([d24fc82](https://github.com/mokkapps/changelog-generator-demo/commits/d24fc8207235c037dd4ca030edad8bf967ac73c2)) + + +### Build system + +* **build-deps:** include monaco-editor and terser as main dependencies ([7091114](https://github.com/mokkapps/changelog-generator-demo/commits/7091114eddfb04d832b40e7bf3ac6952d045383e)) +* **build-deps:** remove PY command from environment of plugin ([2d243da](https://github.com/mokkapps/changelog-generator-demo/commits/2d243da5892851c0da54d5d80eac6b2824519121)) +* **build-env:** add cloning script for debug in .SH variation ([ea842ca](https://github.com/mokkapps/changelog-generator-demo/commits/ea842ca1372b2c18d583fa1638713f5b64bd4982)) +* **deps-dev:** bump the npm_and_yarn group across 1 directory with 2 updates ([286be59](https://github.com/mokkapps/changelog-generator-demo/commits/286be5960565ececd8fcfedd98fa1e18615f732d)) +* **deps:** bump the npm_and_yarn group across 1 directory with 2 updates ([5007fe8](https://github.com/mokkapps/changelog-generator-demo/commits/5007fe82400f8f23918f01f61d958d234230a541)) +* **licensing:** update licensing information in every code ([31ebca8](https://github.com/mokkapps/changelog-generator-demo/commits/31ebca83a40c021a84646d066e0074badb39758a)) +* **tracking:** create script which allows to skip worktree of clone script and little refactoring of them ([1b527af](https://github.com/mokkapps/changelog-generator-demo/commits/1b527afeca5f399fe0a73a5f91cc9409e0c385e0)) + + +### Documentation + +* **wiki:** create a page about case insenstivity mode in plugin ([a7c66d3](https://github.com/mokkapps/changelog-generator-demo/commits/a7c66d39af96537effd580c23d3f83c5655e84f8)) +* **wiki:** create a page about extensions processing in plugin on wiki ([958cc1e](https://github.com/mokkapps/changelog-generator-demo/commits/958cc1eceb88a3fa75f43dcde87272155248d9ca)) +* **wiki:** create a page about hard-deleting registry by plugin ([515495f](https://github.com/mokkapps/changelog-generator-demo/commits/515495f8f40ac050f5adb30f36483a98687df103)) +* **wiki:** create a page about markdown overcharge of plugin on wiki ([2b46b2f](https://github.com/mokkapps/changelog-generator-demo/commits/2b46b2fc518404962254c0eb540b9fd7af766b91)) +* **wiki:** create a page about mobile extensions config ([0497f51](https://github.com/mokkapps/changelog-generator-demo/commits/0497f51d9ad7939f9fa260998ebdf520b9a91b8d)) +* **wiki:** create a page about unloading registry by plugin ([2e9f961](https://github.com/mokkapps/changelog-generator-demo/commits/2e9f961056de69949e0ae5b157fa155717d5003b)) +* **wiki:** create a sidebar for wiki of project ([b8a3bf0](https://github.com/mokkapps/changelog-generator-demo/commits/b8a3bf0d58549b35d1d8adf0fc25b4a4e21c1460)) +* **wiki:** create an introduction page ([5c64d72](https://github.com/mokkapps/changelog-generator-demo/commits/5c64d721986a5ad628118860e58c887f7cff97dc)) + + +### Refactoring + +* **naming:** now UNITADE's view names correspondingly to stack it uses ([36144de](https://github.com/mokkapps/changelog-generator-demo/commits/36144de0ddb62aad98f6adf469e947b8d77aab43)) + + +### Fixes + +* **build:** fix typescript shenanigans and implement clone .SH script for UNIX-systems ([8bf5e0f](https://github.com/mokkapps/changelog-generator-demo/commits/8bf5e0fef1c6ae4dc23a4b039f8fa10f7e52ea45)) +* **common:** fix some localizations errors and common TS errors ([30aa283](https://github.com/mokkapps/changelog-generator-demo/commits/30aa28328f1f1e5b39bb72e45dff2033d8a0a20d)) +* **global:** fix dependencies of codemirror and monaco from being externals ([d9a0395](https://github.com/mokkapps/changelog-generator-demo/commits/d9a0395c0d2b0bc0959aadb8963f8ff35dd935af)) +* **registry:** fix OLR system reading only last, fix of [#75](https://github.com/Falcion/UNITADE.md/issues/75) ([03f70dd](https://github.com/mokkapps/changelog-generator-demo/commits/03f70dd1760565c66bc502f6147e35d4118f35c2)) +* **settings:** fix example in settings to new grouped extensions config ([7a38b2c](https://github.com/mokkapps/changelog-generator-demo/commits/7a38b2c280fd041640e117b4afd8125d511bda5f)) + ## [2.4.0](https://github.com/mokkapps/changelog-generator-demo/compare/v2.3.1...v2.4.0) (2024-07-02) diff --git a/manifest.json b/manifest.json index 528fafb..f41315a 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "unitade", "name": "UNITADE.md", - "version": "2.4.0", + "version": "3.0.0", "minAppVersion": "1.0.0", "description": "Effortlessly treat any file extension as note, organize diverse file formats in your vault and take advancements in control of extension system even with custom modals.", "author": "Falcion", diff --git a/package-lock.json b/package-lock.json index e8b5854..7f3fe6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "unitade", - "version": "2.4.0", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "unitade", - "version": "2.4.0", + "version": "3.0.0", "hasInstallScript": true, "license": "MIT", "os": [ diff --git a/package.json b/package.json index 5e1771e..11e8e10 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ -{ +{ "name": "unitade", "displayName": "UNITADE.md", "private": true, - "version": "2.4.0", + "version": "3.0.0", "description": "A plugin for note-taking app Obsidian™ which allows you to treat any file extension as markdown note-file", "main": "main.ts", "markdown": "github", From b5f1dd3071a1fac713ae914cace91e2d9210827d Mon Sep 17 00:00:00 2001 From: Falcion <57592842+Falcion@users.noreply.github.com> Date: Sun, 3 Nov 2024 21:22:35 +0300 Subject: [PATCH 63/63] chore: add release note for 3.0.0 --- data/release/v3.0.0.md | 103 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 data/release/v3.0.0.md diff --git a/data/release/v3.0.0.md b/data/release/v3.0.0.md new file mode 100644 index 0000000..babe535 --- /dev/null +++ b/data/release/v3.0.0.md @@ -0,0 +1,103 @@ +### UNITADE.md Plugin for Obsidian v3.0.0 - Release Patch Notes + +**New Features and Enhancements:** + +- **Backward Compatibility:** Ensures that previous versions of configurations remain functional and adaptable to new updates. +- **Setting Tooltips:** Added detailed tooltips for all plugin settings, enhancing user guidance and configuration clarity. +- **Localization Support:** Full localization functionality now available, with included localization files to support multi-language use across the entire plugin. +- **Code Editor Functionality:** Integrated a versatile code editor supporting all VS Code themes, customizable font settings, and ligature support, enabling a smooth coding experience within Obsidian. +- **Documentation and Online Wiki:** Complete documentation provided on GitBook/GitHub, offering a centralized knowledge base with detailed usage, configuration, and feature information. +- **Registry Reload Feature:** New registry reload options for plugin management: + - *Standard Unload:* Similar to previous versions, offering a light, quick reload. + - *Heavy Unload:* Full registry reset, recommended for significant plugin adjustments. + +**Bug Fixes:** + +- **Error Spam Fix (#70):** Resolved a recurring error message issue that caused message spam, improving stability and user experience. +- **OLR Event Update:** Fixed an issue in the "on-load registry" (OLR) where only the last registered extension was recognized due to a `last()` function in the `create()` event within `main.ts`. OLR now correctly registers all extensions listed after the first comma, ensuring complete extension support. + +**Unexpected Additions:** + +- **Standard Extension and View Registry:** Introduced native support for standard extensions and views, facilitating broader compatibility across different formats. +- **Universal Plugin Compatibility:** Achieved a "universal" plugin status, with mechanisms to adapt older and future configuration versions to unified formats. This allows updates to the plugin without altering local data. +- **Case-Insensitive Extension Mode:** Users can enable case-insensitive mode (e.g., TXT = txt = tXT), useful for Windows systems. Not recommended for UNIX systems due to case sensitivity. +- **Separator Semantics Update:** Input separator updated from `;` to `>`, refining input parsing and improving consistency across functions. +- **Ignore Mode Enhancement:** Enhanced ignore mode to handle raw data effectively, optimizing resource use. + +**Optimization:** + +- **Case-Insensitive Extension Generation Algorithm:** Optimized the case-insensitive extension generation algorithm to maintain complexity at $O(n*2^n)$ while reducing RAM usage. +- **Overall Codebase Quality Improvement:** Refined and streamlined the codebase for better readability, maintainability, and performance. + +## [3.0.0](https://github.com/mokkapps/changelog-generator-demo/compare/v2.4.0...v3.0.0) (2024-11-03) + +### BREAKING CHANGES: + +* **fix!(compatibility):** fix of data implementation in compatibility module; ([020f3d4](https://github.com/mokkapps/changelog-generator-demo/commits/020f3d471bd4dcc0e3aa7b87303daf236798dc34)) +* **fix!(styles):** add styling for monaco-editor; ([ba59d5b](https://github.com/mokkapps/changelog-generator-demo/commits/ba59d5b06d99517709acbcb65bfa54a46aaf9aea)) +* **feat!(common):** add codeblock editor in plugin; ([d2bc94a](https://github.com/mokkapps/changelog-generator-demo/commits/d2bc94a1cb7638e69594ed431bdaa2e9058e46a9)) +* **feat!(common):** add context editor for code editor in plugin; ([9e0f2df](https://github.com/mokkapps/changelog-generator-demo/commits/9e0f2df88cd7ebec978deed4f5b9f65217915d13)) +* **feat!(common):** add code editor in the plugin; ([473591f](https://github.com/mokkapps/changelog-generator-demo/commits/473591f4568cd3462fb2248f75a26e3a2f1a7ea1)) +* **feat!(settings):** moving semantics towards `>` instead `;`; ([492802c](https://github.com/mokkapps/changelog-generator-demo/commits/492802c2e3f4b8d37b07ce94b1296b8424038aef)) +* **feat!(settings):** add toggle for case insensitive mode for extensions; ([433c61b](https://github.com/mokkapps/changelog-generator-demo/commits/433c61b5c980350b728cf5caf2fe8e484f1f9821)) +* **fix!(codesmell):** reduce common code smell, improve codebase quality; ([2ed530e](https://github.com/mokkapps/changelog-generator-demo/commits/2ed530ec38d6fa9eead1909f1a2c488138423202)) +* **feat!(optimization):** optimization of main module of plugin, reduce RAM usage; ([8fba404])(https://github.com/mokkapps/changelog-generator-demo/commits/8fba404d1c52d88211e57f74f67b7311e931fd60) +* **build!(build-ci):** add CI build script for checking instance and state of plugin; ([ad01a35](https://github.com/mokkapps/changelog-generator-demo/commits/ad01a35e84f71f0870135592f73b24d362937844)) +* **feat!(localization):** now almost every UI element of plugin is localized …(except console); ([7d4557f](https://github.com/mokkapps/changelog-generator-demo/commits/7d4557f01ca3377519de6525a3ba9d7728aa284a)) +* **feat!(wiki-button):** add reference for wiki in plugin settings ([99635a6](https://github.com/mokkapps/changelog-generator-demo/commits/99635a6971d871cb44bf2d148b0b507c9e5f7b68)) +* **feat!(compatibility):** add new compatibility module with older versions, feature fix of #63; ([eb1786e](https://github.com/mokkapps/changelog-generator-demo/commits/eb1786e4f65979d0ec754f7aa1b915b0742c542b)) +* **feat!(grouped-extensions):** now grouped extensions split by '>', now support files with commas and empty strings; ([99fc3f9](99fc3f9035be8e4369fca7fffa6a6ebadd76521e)) +* **feat!(locales):** add localisation support for every language in plugin; ([1badbbb](https://github.com/mokkapps/changelog-generator-demo/commits/1badbbb159a5844fc3e0af2350cf9ca969487d2a)) +* **feat!(error-silencing):** add "Silence errors" function and add "Debug" toggle in the settings; ([2a7ee5f](https://github.com/mokkapps/changelog-generator-demo/commits/2a7ee5f0c436fbcea5a32048121450e3706af4df)) +* **feat!(unloading):** differentiate "Hard-delete" (past Unload) and new "Unload" function; ([28166e3](https://github.com/mokkapps/changelog-generator-demo/commits/28166e35cde4655488d4b9003c414bd74a4c1afc)) +* **feat!(unloading):** now "Unload" button fully deletes extensions registry, not just plugin's settings; ([d43ec6e](https://github.com/mokkapps/changelog-generator-demo/commits/d43ec6eb9ed1d2f6a9b1f8ba1876b95877cf74ad)) + +### Features + +* **architecture:** create architecture for code editor and other things ([f37a46d](https://github.com/mokkapps/changelog-generator-demo/commits/f37a46d4d34bc203ed9799e3b7d0f2ebf70193d4)) +* **common:** add button to "Reload" registries in soft way which saves default extensions ([ec9c5cc](https://github.com/mokkapps/changelog-generator-demo/commits/ec9c5ccb170d8285c4151a20b9eb2fc256763e6f)) +* **common:** add support for default extensions and default views by default ([a918488](https://github.com/mokkapps/changelog-generator-demo/commits/a9184889cf6072e6bccafed3ae8c087993876df8)) +* **compatibility:** adapt compatibility module to new `>` semantics ([47b5f80](https://github.com/mokkapps/changelog-generator-demo/commits/47b5f80f6ed34cf5652ba997676669c5332aeab5)) +* **locale:** implement localization for errors ([b85563e](https://github.com/mokkapps/changelog-generator-demo/commits/b85563ec47f46537877d9b996bfdded59590febb)) +* **modals-locale:** now modals are also localized ([2a96a38](https://github.com/mokkapps/changelog-generator-demo/commits/2a96a386cde0db8199e6065f01297163b310b11f)) +* **monaco-editor:** implement monaco view in the main codebase ([9f5ba74](https://github.com/mokkapps/changelog-generator-demo/commits/9f5ba743a18826a01fa76b53c7691e4cee464382)) +* **monaco-editor:** integrate workers from monaco to fix visuals of code view ([dd15f31](https://github.com/mokkapps/changelog-generator-demo/commits/dd15f3107f518b8630f6ba700ae65053e2afaa7f)) +* **settings:** add block about code editor settings and implement them in code ([3105825](https://github.com/mokkapps/changelog-generator-demo/commits/3105825a1df8de3b6cf832235caa5717a4045d87)) +* **settings:** add some little graphics and additions to the settings tab ([d24fc82](https://github.com/mokkapps/changelog-generator-demo/commits/d24fc8207235c037dd4ca030edad8bf967ac73c2)) + + +### Build system + +* **build-deps:** include monaco-editor and terser as main dependencies ([7091114](https://github.com/mokkapps/changelog-generator-demo/commits/7091114eddfb04d832b40e7bf3ac6952d045383e)) +* **build-deps:** remove PY command from environment of plugin ([2d243da](https://github.com/mokkapps/changelog-generator-demo/commits/2d243da5892851c0da54d5d80eac6b2824519121)) +* **build-env:** add cloning script for debug in .SH variation ([ea842ca](https://github.com/mokkapps/changelog-generator-demo/commits/ea842ca1372b2c18d583fa1638713f5b64bd4982)) +* **deps-dev:** bump the npm_and_yarn group across 1 directory with 2 updates ([286be59](https://github.com/mokkapps/changelog-generator-demo/commits/286be5960565ececd8fcfedd98fa1e18615f732d)) +* **deps:** bump the npm_and_yarn group across 1 directory with 2 updates ([5007fe8](https://github.com/mokkapps/changelog-generator-demo/commits/5007fe82400f8f23918f01f61d958d234230a541)) +* **licensing:** update licensing information in every code ([31ebca8](https://github.com/mokkapps/changelog-generator-demo/commits/31ebca83a40c021a84646d066e0074badb39758a)) +* **tracking:** create script which allows to skip worktree of clone script and little refactoring of them ([1b527af](https://github.com/mokkapps/changelog-generator-demo/commits/1b527afeca5f399fe0a73a5f91cc9409e0c385e0)) + + +### Documentation + +* **wiki:** create a page about case insenstivity mode in plugin ([a7c66d3](https://github.com/mokkapps/changelog-generator-demo/commits/a7c66d39af96537effd580c23d3f83c5655e84f8)) +* **wiki:** create a page about extensions processing in plugin on wiki ([958cc1e](https://github.com/mokkapps/changelog-generator-demo/commits/958cc1eceb88a3fa75f43dcde87272155248d9ca)) +* **wiki:** create a page about hard-deleting registry by plugin ([515495f](https://github.com/mokkapps/changelog-generator-demo/commits/515495f8f40ac050f5adb30f36483a98687df103)) +* **wiki:** create a page about markdown overcharge of plugin on wiki ([2b46b2f](https://github.com/mokkapps/changelog-generator-demo/commits/2b46b2fc518404962254c0eb540b9fd7af766b91)) +* **wiki:** create a page about mobile extensions config ([0497f51](https://github.com/mokkapps/changelog-generator-demo/commits/0497f51d9ad7939f9fa260998ebdf520b9a91b8d)) +* **wiki:** create a page about unloading registry by plugin ([2e9f961](https://github.com/mokkapps/changelog-generator-demo/commits/2e9f961056de69949e0ae5b157fa155717d5003b)) +* **wiki:** create a sidebar for wiki of project ([b8a3bf0](https://github.com/mokkapps/changelog-generator-demo/commits/b8a3bf0d58549b35d1d8adf0fc25b4a4e21c1460)) +* **wiki:** create an introduction page ([5c64d72](https://github.com/mokkapps/changelog-generator-demo/commits/5c64d721986a5ad628118860e58c887f7cff97dc)) + + +### Refactoring + +* **naming:** now UNITADE's view names correspondingly to stack it uses ([36144de](https://github.com/mokkapps/changelog-generator-demo/commits/36144de0ddb62aad98f6adf469e947b8d77aab43)) + + +### Fixes + +* **build:** fix typescript shenanigans and implement clone .SH script for UNIX-systems ([8bf5e0f](https://github.com/mokkapps/changelog-generator-demo/commits/8bf5e0fef1c6ae4dc23a4b039f8fa10f7e52ea45)) +* **common:** fix some localizations errors and common TS errors ([30aa283](https://github.com/mokkapps/changelog-generator-demo/commits/30aa28328f1f1e5b39bb72e45dff2033d8a0a20d)) +* **global:** fix dependencies of codemirror and monaco from being externals ([d9a0395](https://github.com/mokkapps/changelog-generator-demo/commits/d9a0395c0d2b0bc0959aadb8963f8ff35dd935af)) +* **registry:** fix OLR system reading only last, fix of [#75](https://github.com/Falcion/UNITADE.md/issues/75) ([03f70dd](https://github.com/mokkapps/changelog-generator-demo/commits/03f70dd1760565c66bc502f6147e35d4118f35c2)) +* **settings:** fix example in settings to new grouped extensions config ([7a38b2c](https://github.com/mokkapps/changelog-generator-demo/commits/7a38b2c280fd041640e117b4afd8125d511bda5f))