commit f524d63cd93b704744e76f136dcdd311a71001ea Author: knicolas22 Date: Thu Jun 19 10:00:16 2025 +0200 First Start First Start base 3.0.1 diff --git a/.github/workflows/companion-module-checks.yaml b/.github/workflows/companion-module-checks.yaml new file mode 100644 index 0000000..bc8d44e --- /dev/null +++ b/.github/workflows/companion-module-checks.yaml @@ -0,0 +1,18 @@ +name: Companion Module Checks + +on: + push: + +jobs: + check: + name: Check module + + if: ${{ !contains(github.repository, 'companion-module-template-') }} + + permissions: + packages: read + + uses: bitfocus/actions/.github/workflows/module-checks.yaml@main + # with: + # upload-artifact: true # uncomment this to upload the built package as an artifact to this workflow that you can download and share with others + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..002f89c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz new file mode 100644 index 0000000..0f09fc8 Binary files /dev/null and b/.yarn/install-state.gz differ diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0f6be20 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Bitfocus AS - Open Source + +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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8e8335d --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# companion-module-pixap-pixtimerpro + +See [HELP.md](./companion/HELP.md) and [LICENSE](./LICENSE) \ No newline at end of file diff --git a/actions.js b/actions.js new file mode 100644 index 0000000..f2f6353 --- /dev/null +++ b/actions.js @@ -0,0 +1,395 @@ +const { Regex } = require('@companion-module/base') +module.exports = { + getActions() { + const actions = {} + + let CHOICES_TIMER_PRESETS = [] + Object.keys(this.pixtimerdata.presets).forEach((key) => { + // console.log(key, this.pixtimerdata.presets[key]) + CHOICES_TIMER_PRESETS.push({ + label: this.pixtimerdata.presets[key].name, + id: this.pixtimerdata.presets[key].id, + sort: this.pixtimerdata.presets[key].id, + }) + }) + + let CHOICES_MESSAGE_PRESETS = [] + Object.keys(this.pixtimerdata.messages).forEach((key) => { + // console.log(key, this.pixtimerdata.messages[key]) + CHOICES_MESSAGE_PRESETS.push({ + label: this.pixtimerdata.messages[key].name, + id: this.pixtimerdata.messages[key].id, + sort: this.pixtimerdata.messages[key].id, + }) + }) + + // BLACKOUT + let CHOICES_BLACKOUT = [] + Object.keys(this.pixtimerdata.blackoutArray).forEach((key) => { + CHOICES_BLACKOUT.push({ + label: this.pixtimerdata.blackoutArray[key].name, + id: this.pixtimerdata.blackoutArray[key].id, + sort: this.pixtimerdata.blackoutArray[key].id, + }) + }) + + // PBP GOTO + let CHOICES_PBP_GOTO = [] + Object.keys(this.pixtimerdata.gotoArray).forEach((key) => { + CHOICES_PBP_GOTO.push({ + label: this.pixtimerdata.gotoArray[key].name, + id: this.pixtimerdata.gotoArray[key].id, + sort: this.pixtimerdata.gotoArray[key].id, + }) + }) + + // TIMER + actions['recall_timer_preset'] = { + name: 'Recall timer preset', + options: [ + { + id: 'recall_timer_preset', + type: 'dropdown', + label: 'Cue', + minChoicesForSearch: 5, + choices: CHOICES_TIMER_PRESETS.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: async (event) => { + this.log('info', 'Recall timer preset >>>', event.options.recall_timer_preset) + await this.sendCommand('PST ' + event.options.recall_timer_preset) + }, + } + actions['speaker_timer_play'] = { + name: 'Speaker Timer Play', + options: [], + callback: async (event) => { + this.log('info', 'Timer speaker play !') + await this.sendCommand('PST PLAY') + }, + } + actions['speaker_timer_pause'] = { + name: 'Speaker Timer Pause', + options: [], + callback: async (event) => { + this.log('info', 'Timer speaker Pause !') + await this.sendCommand('PST BREAK') + }, + } + actions['speaker_timer_stop'] = { + name: 'Speaker Timer Stop', + options: [], + callback: async (event) => { + this.log('info', 'Timer speaker stop !') + await this.sendCommand('PST STOP') + }, + } + actions['speaker_timer_flash'] = { + name: 'Speaker Timer Flash', + options: [], + callback: async (event) => { + this.log('info', 'Timer speaker Flash !') + await this.sendCommand('PST FLASH') + }, + } + actions['session_timer_play'] = { + name: 'Session Timer Play', + options: [], + callback: async (event) => { + this.log('info', 'Timer session play !') + await this.sendCommand('PSTS PLAY') + }, + } + actions['session_timer_pause'] = { + name: 'Session Timer Pause', + options: [], + callback: async (event) => { + this.log('info', 'Timer session Pause !') + await this.sendCommand('PSTS BREAK') + }, + } + actions['session_timer_stop'] = { + name: 'Session Timer Stop', + options: [], + callback: async (event) => { + this.log('info', 'Timer session stop !') + await this.sendCommand('PSTS STOP') + }, + } + actions['session_timer_flash'] = { + name: 'Session Timer Flash', + options: [], + callback: async (event) => { + this.log('info', 'Timer session flash !') + await this.sendCommand('PSTS FLASH') + }, + } + actions['all_timer_play'] = { + name: 'All Timer Play', + options: [], + callback: async (event) => { + this.log('info', 'Timer all play !') + await this.sendCommand('PSTA PLAY') + }, + } + actions['all_timer_pause'] = { + name: 'All Timer Pause', + options: [], + callback: async (event) => { + this.log('info', 'Timer all Pause !') + await this.sendCommand('PSTA BREAK') + }, + } + actions['all_timer_stop'] = { + name: 'All Timer Stop', + options: [], + callback: async (event) => { + this.log('info', 'Timer all stop !') + await this.sendCommand('PSTA STOP') + }, + } + // MESSAGE + actions['recall_message_preset'] = { + name: 'Recall message preset', + options: [ + { + id: 'recall_message_preset', + type: 'dropdown', + label: 'Cue', + minChoicesForSearch: 5, + choices: CHOICES_MESSAGE_PRESETS.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: async (event) => { + //this.log('info', 'Recall messsage preset >>>', event.options.recall_message_preset) + await this.sendCommand('PSTM ' + event.options.recall_message_preset) + }, + } + actions['message_show'] = { + name: 'Message show', + options: [], + callback: async (event) => { + //this.log('info', `Message show >>> ${this.pixtimerdata.states.messageShow}`) + if (this.pixtimerdata.states.messageShow === 0) { + await this.sendCommand('PSTM SHOW') + } else { + await this.sendCommand('PSTM HIDE') + } + }, + } + + // BLACKOUT + actions['blackout'] = { + name: 'Blackout', + options: [], + callback: async (event) => { + //this.log('info', `ACTIONS Black show >>> ${this.pixtimerdata.states.blackout}`) + if (this.pixtimerdata.states.blackout === 0) { + await this.sendCommand('BLACK SHOW') + } else { + await this.sendCommand('BLACK HIDE') + } + }, + } + + // SPEAKER AJUSTE TIME + actions['speaker_adjust_time'] = { + name: 'Adjust Speaker Timer', + options: [ + { + type: 'textinput', + label: 'Time in second', + id: 'time', + regex: this.REGEX_SIGNED_NUMBER, + }, + ], + callback: async (event) => { + //this.log('info', 'Adjust Speaker Timer !') + await this.sendCommand('ADJT ' + event.options.time) + }, + }; + + // TIMER CLOCK + actions['timer_clock'] = { + name: 'Switch Timer clock', + options: [], + callback: async (event) => { + //this.log('info', 'Switch Timer & clock !') + await this.sendCommand('SWTC') + }, + } + + // EXTERNAL TIMER + actions['external_timer_Play'] = { + name: 'External Timer and Play', + options: [ + { + type: 'textinput', + label: 'External Timer and Play', + id: 'time', + default: " 00:00:00", + regex: "/^(0*[0-9]|1[0-9]|2[0-4]):(0*[0-9]|[1-5][0-9]|60):(0*[0-9]|[1-5][0-9]|60)$/", + required: true, + } + ], + callback: async (event) => { + //this.log('info', 'External Timer and Play !') + await this.sendCommand('CTD ' + event.options.time + " PLAY") + }, + } + actions['external_timer'] = { + name: 'External Timer', + options: [ + { + type: 'textinput', + label: 'External Timer', + id: 'time', + default: " 00:00:00", + regex: "/^(0*[0-9]|1[0-9]|2[0-4]):(0*[0-9]|[1-5][0-9]|60):(0*[0-9]|[1-5][0-9]|60)$/", + required: true, + } + ], + callback: async (event) => { + //this.log('info', 'External Timer !') + await this.sendCommand('CTD ' + event.options.time) + }, + } + actions['external_play'] = { + name: 'External Play', + options: [], + callback: async (event) => { + this.log('info', 'External Play !') + await this.sendCommand('CTD PLAY' ) + }, + } + actions['external_stop'] = { + name: 'External Stop', + options: [], + callback: async (event) => { + this.log('info', 'External Stop !') + await this.sendCommand('CTD STOP') + }, + } + + // NDI + actions['ndi_startStop'] = { + name: 'NDI start & stop', + options: [], + callback: async (event) => { + this.log('info', 'NDI start & stop !') + await this.sendCommand('NDI ED') + }, + } + + // PBP+ + actions['pbp_main_enable'] = { + name: 'PlaybackPro main enable', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro main enable !') + await this.sendCommand('PBPM ED') + }, + } + actions['pbp_backup_enable'] = { + name: 'PlaybackPro backup enable', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro backup enable !') + await this.sendCommand('PBPB ED') + }, + } + actions['pbp_master_take'] = { + name: 'PlaybackPro master take', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master take !') + await this.sendCommand('PBPG TAKE') + }, + } + actions['pbp_master_endall'] = { + name: 'PlaybackPro master endall', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master endall !') + await this.sendCommand('PBPG ENDALL') + }, + } + actions['pbp_master_previous'] = { + name: 'PlaybackPro master previous', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master previous !') + await this.sendCommand('PBPG PREVC') + }, + } + actions['pbp_master_next'] = { + name: 'PlaybackPro master next', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master next !') + await this.sendCommand('PBPG NEXTC') + }, + } + actions['pbp_master_play'] = { + name: 'PlaybackPro master play', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master play !') + await this.sendCommand('PBPG PLAY') + }, + } + actions['pbp_master_pause'] = { + name: 'PlaybackPro master pause', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master pause !') + await this.sendCommand('PBPG PAUSE') + }, + } + actions['pbp_master_goto10'] = { + name: 'PlaybackPro master goto 10', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master goto 10 !') + await this.sendCommand('PBPG GOTO 10') + }, + } + actions['pbp_master_goto20'] = { + name: 'PlaybackPro master goto 20', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master goto 20 !') + await this.sendCommand('PBPG GOTO 20') + }, + } + actions['pbp_master_goto30'] = { + name: 'PlaybackPro master goto 30', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master goto 30 !') + await this.sendCommand('PBPG GOTO 30') + }, + } + actions['pbp_master_goto'] = { + name: 'PlaybackPro master goto', + options: [ + { + id: 'pbp_master_goto', + type: 'dropdown', + label: 'Goto', + minChoicesForSearch: 5, + choices: CHOICES_PBP_GOTO.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: async (event) => { + this.log('info', 'PlaybackPro master goto 30 !') + await this.sendCommand('PBPG GOTO ' + event.options.pbp_master_goto) + }, + } + + return actions + }, +} diff --git a/companion/HELP.md b/companion/HELP.md new file mode 100644 index 0000000..6cd4f42 --- /dev/null +++ b/companion/HELP.md @@ -0,0 +1,65 @@ +# piXap piXtimer Pro + +Controls piXap piXtimer Pro +Version control 3.0.2 + +## Configuration +* piXtimer Pro Version 1.9.9 at least +* Type in the IP address of the device. +* The default Port is 9756. + +## Actions 1.10 +* Speaker Flash +* Session Flash + +## Presets 1.10 +* Speaker Flash +* Session Flash + +## Actions 1.9.9 +* Recall timer preset +* Timer speaker play/pause/stop +* Timer session play/pause/stop +* Timer all play/pause/stop +* Recall message preset +* Message show/hide +* Black show/hide +* Set Countdown video time and play +* Set Countdown video time +* Countdown video play/stop +* Adjust speaker timer time +* Switch to Timer & clock +* NDI Enable Disable +* PlaybackPro main enable & disable +* PlaybackPro backup enable & disable +* PlaybackPro general take +* PlaybackPro general end all +* PlaybackPro general previous clip +* PlaybackPro general next clip +* PlaybackPro general play +* PlaybackPro general pause +* PlaybackPro general goto 10 20 30 + +## Presets 1.9.9 +* Recall timer preset +* Timer speaker play/pause/stop +* Timer session play/pause/stop +* Timer all play/pause/stop +* Recall message preset +* Message show/hide +* Black show/hide +* Set Countdown video time and play +* Set Countdown video time +* Countdown video play/stop +* Adjust speaker timer time +* Switch to Timer & clock +* NDI Enable Disable +* PlaybackPro main enable & disable +* PlaybackPro backup enable & disable +* PlaybackPro general take +* PlaybackPro general end all +* PlaybackPro general previous clip +* PlaybackPro general next clip +* PlaybackPro general play +* PlaybackPro general pause +* PlaybackPro general goto 10 20 30 \ No newline at end of file diff --git a/companion/manifest.json b/companion/manifest.json new file mode 100644 index 0000000..4a1d43a --- /dev/null +++ b/companion/manifest.json @@ -0,0 +1,33 @@ +{ + "id": "pixap-pixtimerpro", + "name": "pixap-pixtimerpro", + "shortname": "piXtimer Pro", + "description": "piXtimer Pro plugin for Companion", + "version": "3.0.1", + "license": "MIT", + "repository": "git+https://github.com/bitfocus/companion-module-pixap-pixtimerpro.git", + "bugs": "https://github.com/bitfocus/companion-module-pixap-pixtimerpro/issues", + "maintainers": [ + { + "name": "Nicolas Keesst", + "email": "nkeesst@pixap.fr" + } + ], + "runtime": { + "type": "node22", + "api": "nodejs-ipc", + "apiVersion": "0.0.0", + "entrypoint": "../main.js" + }, + "legacyIds": [ + "pixtimerpro" + ], + "manufacturer": "piXap", + "products": [ + "piXtimer Pro" + ], + "keywords": [ + "Software", + "Timing" + ] +} \ No newline at end of file diff --git a/configFields.js b/configFields.js new file mode 100644 index 0000000..bc81307 --- /dev/null +++ b/configFields.js @@ -0,0 +1,61 @@ +const { Regex } = require('@companion-module/base') +module.exports = { + getConfigFields() { + return [ + { + id: 'info', + type: 'static-text', + width: 12, + label: 'Control Information', + value: + 'This module controls an piXtimer Pro. Product', + }, + { + type: 'textinput', + id: 'host', + label: 'Target IP', + width: 8, + regex: Regex.IP, + }, + { + type: 'textinput', + id: 'port', + label: 'Control Port', + width: 4, + regex: Regex.PORT, + min: 1, + max: 65535, + default: '9756', + }, + { + id: 'timerPortInfo', + type: 'static-text', + width: 11, + label: 'Timer Port Information', + value: 'Before activating this option, check if you have the Dungle connected to piXtimer Pro !', + }, + { + type: 'static-text', + id: 'io', + width: 7, + }, + { + type: 'checkbox', + id: 'enableTimerPort', + label: 'Enable', + width: 1, + default: false, + }, + { + type: 'textinput', + id: 'portTimer', + label: 'Timer Port', + width: 4, + regex: Regex.PORT, + min: 1, + max: 65535, + default: '9758', + }, + ] + }, +} diff --git a/feedbacks.js b/feedbacks.js new file mode 100644 index 0000000..3dcd87c --- /dev/null +++ b/feedbacks.js @@ -0,0 +1,228 @@ +const { combineRgb } = require('@companion-module/base') + +module.exports = async function (self) { + self.setFeedbackDefinitions({ + speaker_play_status: { + name: 'Speaker change style based on Stop/Play/Pause status', + type: 'boolean', + label: 'Speaker Stop/Play/Pause status', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'speaker_play', + type: 'dropdown', + label: 'Status', + default: 0, + choices: [ + { id: 0, label: 'Stop' }, + { id: 1, label: 'Playing' }, + { id: 2, label: 'Paused' }, + ], + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | SPEAKER PLAY STATUS >>>', feedback.options.speaker_play) + if (self.pixtimerdata.states.speakerPlaying === feedback.options.speaker_play) { + return true + } + }, + }, + session_play_status: { + name: 'Session change style based on Stop/Play/Pause status', + type: 'boolean', + label: 'Session Stop/Play/Pause status', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'session_play', + type: 'dropdown', + label: 'Status', + default: 0, + choices: [ + { id: 0, label: 'Stop' }, + { id: 1, label: 'Playing' }, + { id: 2, label: 'Paused' }, + ], + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | SESSION PLAY STATUS >>>', feedback.options.session_play) + if (self.pixtimerdata.states.sessionPlaying === feedback.options.session_play) { + return true + } + }, + }, + all_play_status: { + name: 'All change style based on Stop/Play/Pause status', + type: 'boolean', + label: 'All Stop/Play/Pause status', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'all_play', + type: 'dropdown', + label: 'Status', + default: 0, + choices: [ + { id: 0, label: 'Stop' }, + { id: 1, label: 'Playing' }, + { id: 2, label: 'Paused' }, + ], + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | ALL PLAY STATUS >>>', feedback.options.all_play) + if (self.pixtimerdata.states.allPlaying === feedback.options.all_play) { + return true + } + }, + }, + current_speaker: { + name: 'Current Speaker ID Change', + type: 'boolean', + label: 'Current Speaker ID Change', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'current_speaker', + type: 'number', + label: 'ID', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | Current Speaker ID Change >>>', feedback.options.current_speaker) + if (self.pixtimerdata.states.currentSpeaker === feedback.options.current_speaker) { + return true + } + }, + }, + current_session: { + name: 'Current Session ID Change', + type: 'boolean', + label: 'Current Session ID Change', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'current_session', + type: 'number', + label: 'ID', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | Current Session ID Change >>>', feedback.options.current_session) + if (self.pixtimerdata.states.currentSession === feedback.options.current_session) { + return true + } + }, + }, + blackout: { + name: 'Blackout Show/Hide', + type: 'boolean', + label: 'Blackout Show/Hide', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'blackout', + type: 'number', + label: 'Status', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | Blackout Change >>>', feedback.options.blackout) + if (self.pixtimerdata.states.blackout === feedback.options.blackout) { + return true + } + }, + }, + message_show: { + name: 'Message Show/Hide', + type: 'boolean', + label: 'Message Show/Hide', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'message_show', + type: 'number', + label: 'Status', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | MESSAGE SHOW Change >>>', feedback.options.message_show) + if (self.pixtimerdata.states.messageShow === feedback.options.message_show) { + return true + } + }, + }, + switch_timer_clock: { + name: 'Switch Timer Clock', + type: 'boolean', + label: 'Switch Timer Clock', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'switch_timer_clock', + type: 'number', + label: 'Status', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | MESSAGE SHOW Change >>>', feedback.options.message_show) + if (self.pixtimerdata.states.switchTimerClock === feedback.options.switch_timer_clock) { + return true + } + }, + }, + ndi_start: { + name: 'NDI Start', + type: 'boolean', + label: 'NDI Start', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'ndi_start', + type: 'number', + label: 'Status', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | NDI START >>>', feedback.options.ndi_start) + if (self.pixtimerdata.states.ndiStart === feedback.options.ndi_start) { + return true + } + }, + }, + }) +} diff --git a/main.js b/main.js new file mode 100644 index 0000000..b5b414d --- /dev/null +++ b/main.js @@ -0,0 +1,390 @@ +const { InstanceBase, Regex, runEntrypoint, InstanceStatus, TCPHelper, combineRgb } = require('@companion-module/base') +const configFields = require('./configFields') +const presets = require('./presets') +const actions = require('./actions') +const pixtimerpro = require('./pixap-pixtimerpro') +const UpgradeScripts = require('./upgrades') +const UpdateFeedbacks = require('./feedbacks') +const UpdateVariableDefinitions = require('./variables') + +class PixtimerProInstance extends InstanceBase { + constructor(internal) { + super(internal) + Object.assign(this, { + ...configFields, + ...presets, + ...actions, + ...pixtimerpro, + }) + + this.adjustArray = [1, 5, 10, 20, 30] + } + + async init(config) { + this.config = config + this.pixtimerdata = { + presets: [], + messages: [], + gotoArray: [ + { id: 10, name: 'Goto 10' }, + { id: 20, name: 'Goto 20' }, + { id: 30, name: 'Goto 30' }, + ], + blackoutArray: [ + { id: 'toogle', name: 'Toogle' }, + { id: 'show', name: 'Show' }, + { id: 'hide', name: 'Hide' }, + ], + states: {}, + } + + this.updateStatus(InstanceStatus.Ok) + this.updateFeedbacks() // export feedbacks + this.updateVariableDefinitions() // export variable definitions + + this.init_tcp() + this.refreshTcpTimer() + + this.setVariableValues({ speaker_timer: '00:00:00' }) + this.setVariableValues({ speaker_timer_ms: '00:00' }) + this.setVariableValues({ speaker_timer_h: '00' }) + this.setVariableValues({ speaker_timer_m: '00' }) + this.setVariableValues({ speaker_timer_s: '00' }) + + this.setVariableValues({ session_timer: '00:00:00' }) + this.setVariableValues({ session_timer_ms: '00:00' }) + this.setVariableValues({ session_timer_h: '00' }) + this.setVariableValues({ session_timer_m: '00' }) + this.setVariableValues({ session_timer_s: '00' }) + + this.setVariableValues({ external_timer: '00:00:00' }) + this.setVariableValues({ external_timer_ms: '00:00' }) + this.setVariableValues({ external_timer_h: '00' }) + this.setVariableValues({ external_timer_m: '00' }) + this.setVariableValues({ external_timer_s: '00' }) + } + + refreshTcpTimer() { + if (!this.config.enableTimerPort) { + if (this.socketTimer !== undefined) { + this.socketTimer.destroy() + delete this.socketTimer + } + } else this.init_tcp_timer() + } + + // When module gets deleted + async destroy() { + this.socket.destroy() + this.socketTimer.destroy() + this.log('info', 'destroy', this.id) + } + + async configUpdated(config) { + let resetConnection = false + let resetConnectionTimer = false + + if (this.config.host != config.host) { + resetConnection = true + } + + if (this.config.enableTimerPort) { + resetConnectionTimer = true + } else { + resetConnectionTimer = true + } + + this.config = config + if (resetConnection || !this.socket) { + this.init_tcp() + } + if (resetConnectionTimer || !this.socketTimer) { + this.refreshTcpTimer() + } + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + } + + async sendCommand(cmd) { + if (cmd) { + this.log('debug', `sending ${cmd} to ${this.config.host}`) + await this.socket.send(cmd) + } + } + + updateFeedbacks() { + UpdateFeedbacks(this) + } + + updateVariableDefinitions() { + UpdateVariableDefinitions(this) + } + + init_tcp() { + this.log('info', `PIXTIMER PRO | INIT TCP CONTROL >>> ${this.config.host} ${this.config.port}`) + + if (this.socket !== undefined) { + this.socket.destroy() + delete this.socket + } + + if (this.config.port === undefined) { + this.config.port = 9756 + } + + if (this.config.host) { + //!= undefined + this.log('info', `TCP CONTROL | Opening connection to ${this.config.host}:${this.config.port}`) + + this.socket = new TCPHelper(this.config.host, this.config.port, { reconnect: true }) + + this.socket.on('status_change', (status, message) => { + this.updateStatus(status, message) + //this.log('info', `TCP CONTROL | Status update >>> ${status} | ${message}`) + }) + + this.socket.on('error', (err) => { + this.updateStatus(InstanceStatus.UnknownError, err.message) + this.log('error', 'TCP CONTROL | Network error: ' + err.message) + }) + + let receivebuffer = '' + this.socket.on('connect', () => { + this.updateStatus(InstanceStatus.Ok) + //this.log('info', 'Connected') + + receivebuffer = '' + + this.socket.send('NC\n').catch((e) => { + this.log('error', `TCP CONTROL | Socket error: ${e}`) + }) + }) + + this.socket.on('data', (chunk) => { + let i = 0 + let line = '' + let offset = 0 + receivebuffer += chunk.toString() + while ((i = receivebuffer.indexOf('\n', offset)) !== -1) { + line = receivebuffer.slice(offset, i) + //this.log('info', 'RECEIVE DATA LINE >>> ' + line.toString()) + offset = i + 1 + this.socket.emit('receiveline', line) + } + receivebuffer = receivebuffer.slice(offset) + //this.log('info', 'RECEIVE DATA >>> ' + receivebuffer.toString()) + }) + + this.socket.on('receiveline', (data) => { + //const info = data.toString().split("/") + this.log('warn', `TCP CONTROL | RECEIVE LINE >>> ${data.toString()}`) + + // TIMER LIST + if (data.toString().slice(0, 5) === 'timer') { + this.pixtimerdata.presets = this.getTimerPresetList(data) + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + } + + // MESSAGE LIST + if (data.toString().slice(0, 7) === 'message') { + this.pixtimerdata.messages = this.getMessagePresetList(data) + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + } + + if (data.toString().slice(0, 3) === 'pts') { + // CURRENT PRESET SESSION + //this.log('info', `TCP CONTROL | RECEIVE LINE | CURRENT SESSION PRESET >>> ${data.toString().slice(4)}`) + this.pixtimerdata.states.currentSession = parseInt(data.toString().slice(4)) + this.setVariableValues({ session_current: this.pixtimerdata.states.currentSession }) + this.checkFeedbacks('current_session') + } else if (data.toString().slice(0, 2) === 'pt') { + // CURRENT PRESET SPEAKER + //this.log('info', `TCP CONTROL | RECEIVE LINE | CURRENT SPEAKER PRESET >>> ${data.toString().slice(3)}`) + this.pixtimerdata.states.currentSpeaker = parseInt(data.toString().slice(3)) + this.setVariableValues({ speaker_current: this.pixtimerdata.states.currentSpeaker }) + this.checkFeedbacks('current_speaker') + } + + // MESSAGE SHOW + if (data.toString().slice(0, 3) === 'cmv') { + //this.log('info', `TCP CONTROL | RECEIVE LINE | MESSAGE SHOW >>> ${data.toString().slice(4)}`) + this.pixtimerdata.states.messageShow = parseInt(data.toString().slice(4)) + this.setVariableValues({ message_show: this.pixtimerdata.states.messageShow }) + this.checkFeedbacks('message_show') + } + + // SWITCH TIMER CLOCK + if (data.toString().slice(0, 4) === 'SWTC') { + //this.log('error', `TCP CONTROL | RECEIVE LINE | SWITCH TIMER CLOCK >>> ${data.toString().slice(5)}`) + this.pixtimerdata.states.switchTimerClock = parseInt(data.toString().slice(5)) + this.setVariableValues({ switch_timer_clock: this.pixtimerdata.states.switchTimerClock }) + this.checkFeedbacks('switch_timer_clock') + } + + // SPEAKER PLAY + if (data.toString().slice(0, 4) === 'play') { + //this.log('error', `TCP CONTROL | RECEIVE LINE | SPEAKER PLAY STATUS >>> ${data.toString().slice(5)}`) + this.pixtimerdata.states.speakerPlaying = parseInt(data.toString().slice(5)) + this.setVariableValues({ speaker_play_status: this.pixtimerdata.states.speakerPlaying }) + this.checkFeedbacks('speaker_play_status') + } + + // SESSION PLAY + if (data.toString().slice(0, 5) === 'splay') { + //this.log('error', `TCP CONTROL | RECEIVE LINE | SPEAKER PLAY STATUS >>> ${data.toString().slice(6)}`) + this.pixtimerdata.states.sessionPlaying = parseInt(data.toString().slice(6)) + this.setVariableValues({ session_play_status: this.pixtimerdata.states.sessionPlaying }) + this.checkFeedbacks('session_play_status') + } else if (data.toString().slice(0, 5) === 'black') { + this.log('error', `TCP CONTROL | RECEIVE LINE | BLACKOUT STATUS >>> ${data.toString().slice(6)}`) + if (data.toString().slice(6) === "false") { + this.pixtimerdata.states.blackout = 0 + } else if (data.toString().slice(6) === "true") { + this.pixtimerdata.states.blackout = 1 + } else this.pixtimerdata.states.blackout = parseInt(data.toString().slice(6)) + this.setVariableValues({ blackout: this.pixtimerdata.states.blackout }) + this.checkFeedbacks('blackout') + } + + // NDI + if (data.toString().slice(0, 5) === 'NDIST') { + //this.log('error', `TCP CONTROL | RECEIVE LINE | NDI STATUS >>> ${data.toString().slice(6)}`) + this.pixtimerdata.states.ndiStart = parseInt(data.toString().slice(6)) + this.setVariableValues({ ndi_start: this.pixtimerdata.states.ndiStart }) + this.checkFeedbacks('ndi_start') + } + + // ALL PLAYING + if (this.pixtimerdata.states.speakerPlaying === 1 && this.pixtimerdata.states.sessionPlaying === 1) { + this.pixtimerdata.states.allPlaying = 1 + } else if (this.pixtimerdata.states.speakerPlaying === 2 && this.pixtimerdata.states.sessionPlaying === 2) { + this.pixtimerdata.states.allPlaying = 2 + } else { + this.pixtimerdata.states.allPlaying = 0 + } + this.setVariableValues({ all_play_status: this.pixtimerdata.states.allPlaying }) + this.checkFeedbacks('all_play_status') + + if (data.toString().slice(0, 2) === 'pn') { + // PROJECT NAME + //this.log('info', `TCP CONTROL | RECEIVE LINE | PROJECT NAME >>> ${data.toString().slice(3)}`) + this.pixtimerdata.states.projectName = data.toString().slice(3) + this.setVariableValues({ project_name: this.pixtimerdata.states.projectName }) + //this.checkFeedbacks('current_speaker') + } + }) + } + } + + // TCP TIMER + init_tcp_timer() { + this.log('info', `PIXTIMER PRO | INIT TCP TIMER >>> ${this.config.host} ${this.config.portTimer}`) + + if (this.socketTimer !== undefined) { + this.socketTimer.destroy() + delete this.socketTimer + } + + if (this.config.portTimer === undefined) { + this.config.portTimer = 9758 + } + + if (this.config.host) { + //!= undefined + this.log('info', `TCP TIMER | Opening timer connection to ${this.config.host}:${this.config.portTimer}`) + + this.socketTimer = new TCPHelper(this.config.host, this.config.portTimer, { reconnect: true }) + + this.socketTimer.on('status_change', (status, message) => { + this.updateStatus(status, message) + //this.log('info', `TCP CONTROL | Status update >>> ${status} | ${message}`) + }) + + this.socketTimer.on('error', (err) => { + this.updateStatus(InstanceStatus.UnknownError, err.message) + this.log('error', `TCP TIMER | Network error >>> ${err.message} | Please Check Dungle`) + }) + + let receivebuffer = '' + this.socketTimer.on('connect', () => { + this.updateStatus(InstanceStatus.Ok) + //this.log('info', 'TCP TIMER | TIMER Connected') + + receivebuffer = '' + + this.socketTimer.send('NC\n').catch((e) => { + this.log('error', `TCP TIMER | Socket error: ${e}`) + }) + + this.setVariableValues({ external_timer: 'STOP' }) + this.setVariableValues({ external_timer_ms: 'STOP' }) + this.setVariableValues({ external_timer_h: 'STOP' }) + this.setVariableValues({ external_timer_m: 'STOP' }) + this.setVariableValues({ external_timer_s: 'STOP' }) + }) + + this.socketTimer.on('data', (chunk) => { + let i = 0 + let line = '' + let offset = 0 + receivebuffer += chunk.toString() + while ((i = receivebuffer.indexOf('\n', offset)) !== -1) { + line = receivebuffer.slice(offset, i) + //this.log('info', 'TCP TIMER | RECEIVE TIMER DATA LINE >>> ' + line.toString()) + offset = i + 1 + this.socketTimer.emit('receiveTimerline', line) + } + receivebuffer = receivebuffer.slice(offset) + //this.log('info', 'TCP TIMER | RECEIVE TIMER DATA >>> ' + receivebuffer.toString()) + }) + + this.socketTimer.on('receiveTimerline', (data) => { + //const info = data.toString().split("/") + //this.log('warn', `TCP TIMER | RECEIVE TIMER LINE >>> ${data.toString()}`) + if (data.toString().slice(0, 1) === 'H') { + this.log('warn', `RECEIVE TIMER LINE >>> ${data.toString().slice(2)}`) + let speakerTimerArray = data.toString().slice(2).split(':') + this.setVariableValues({ speaker_timer: data.toString().slice(2) }) + this.setVariableValues({ speaker_timer_ms: `${speakerTimerArray[1]}:${speakerTimerArray[2]}` }) + this.setVariableValues({ speaker_timer_h: speakerTimerArray[0] }) + this.setVariableValues({ speaker_timer_m: speakerTimerArray[1] }) + this.setVariableValues({ speaker_timer_s: speakerTimerArray[2] }) + } + + if (data.toString().slice(0, 1) === 'S') { + //this.log('warn', `TCP TIMER | RECEIVE TIMER LINE >>> ${data.toString().slice(2)}`) + let sessionTimerArray = data.toString().slice(2).split(':') + this.setVariableValues({ session_timer: data.toString().slice(2) }) + this.setVariableValues({ session_timer_ms: `${sessionTimerArray[1]}:${sessionTimerArray[2]}` }) + this.setVariableValues({ session_timer_h: sessionTimerArray[0] }) + this.setVariableValues({ session_timer_m: sessionTimerArray[1] }) + this.setVariableValues({ session_timer_s: sessionTimerArray[2] }) + } + + if (data.toString().slice(0, 1) === 'V') { + //this.log('warn', `TCP TIMER | RECEIVE EXTERNAL TIMER LINE >>> ${data.toString()}`) // || data.toString().slice(2) === "STOP" + let externalTimerArray = data.toString().slice(2).split(':') + if (data.toString().slice(2) === 'stop') { + this.setVariableValues({ external_timer: 'STOP' }) + this.setVariableValues({ external_timer_ms: 'STOP' }) + this.setVariableValues({ external_timer_h: 'STOP' }) + this.setVariableValues({ external_timer_m: 'STOP' }) + this.setVariableValues({ external_timer_s: 'STOP' }) + } else { + this.setVariableValues({ + external_timer: `${externalTimerArray[0]}:${externalTimerArray[1]}:${externalTimerArray[2]}`, + }) + this.setVariableValues({ external_timer_ms: `${externalTimerArray[1]}:${externalTimerArray[2]}` }) + this.setVariableValues({ external_timer_h: externalTimerArray[0] }) + this.setVariableValues({ external_timer_m: externalTimerArray[1] }) + this.setVariableValues({ external_timer_s: externalTimerArray[2] }) + } + } + }) + } + } +} + +runEntrypoint(PixtimerProInstance, UpgradeScripts) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..44fb4b2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3819 @@ +{ + "name": "pixtimerPro", + "version": "3.0.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pixtimerPro", + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "@companion-module/base": "~1.4.0" + }, + "devDependencies": { + "@companion-module/tools": "^1.3.2" + } + }, + "node_modules/@companion-module/base": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@companion-module/base/-/base-1.4.1.tgz", + "integrity": "sha512-xg5OX33ptfFsV/drfeNTHID7hp9f2cdp8V+7Pj8uartdNstCr28W3bAy8xRz+XRFKxQVkJcL2LqrkYZ8GGfetw==", + "dependencies": { + "@sentry/node": "^7.36.0", + "@sentry/tracing": "^7.36.0", + "ajv": "^8.12.0", + "debounce-fn": "github:julusian/debounce-fn#4.0.0-maxWaithack.0", + "ejson": "^2.2.3", + "eventemitter3": "^4.0.7", + "nanoid": "^3.3.4", + "p-queue": "^6.6.2", + "p-timeout": "^4.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^18.12" + } + }, + "node_modules/@companion-module/tools": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@companion-module/tools/-/tools-1.3.2.tgz", + "integrity": "sha512-5Ou/8a2tEbLlq9ousC9DsPffdt/eOK39gqllJiEmiu7xumltfPZT5GXLrgWKPKHBkZmwHj1FJw/9OgXyecAxuw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.9", + "@typescript-eslint/parser": "^5.59.9", + "eslint": "^8.42.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-n": "^16.0.0", + "eslint-plugin-prettier": "^4.2.1", + "find-up": "^6.3.0", + "parse-author": "^2.0.0", + "prettier": "^2.8.8", + "tar": "^6.1.15", + "webpack": "^5.86.0", + "webpack-cli": "^5.1.4", + "zx": "^7.2.2" + }, + "bin": { + "companion-generate-manifest": "scripts/generate-manifest.js", + "companion-module-build": "scripts/build.js", + "companion-module-check": "scripts/check.js" + }, + "engines": { + "node": "^18.12" + }, + "peerDependencies": { + "@companion-module/base": "^1.4.1" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "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 + }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "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, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "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, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "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, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "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==", + "dev": true + }, + "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, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sentry-internal/tracing": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.50.0.tgz", + "integrity": "sha512-4TQ4vN0aMBWsUXfJWk2xbe4x7fKfwCXgXKTtHC/ocwwKM+0EefV5Iw9YFG8IrIQN4vMtuRzktqcs9q0/Sbv7tg==", + "dependencies": { + "@sentry/core": "7.50.0", + "@sentry/types": "7.50.0", + "@sentry/utils": "7.50.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry-internal/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/core": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.50.0.tgz", + "integrity": "sha512-6oD1a3fYs4aiNK7tuJSd88LHjYJAetd7ZK/AfJniU7zWKj4jxIYfO8nhm0qdnhEDs81RcweVDmPhWm3Kwrzzsg==", + "dependencies": { + "@sentry/types": "7.50.0", + "@sentry/utils": "7.50.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/integrations": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.119.2.tgz", + "integrity": "sha512-dCuXKvbUE3gXVVa696SYMjlhSP6CxpMH/gl4Jk26naEB8Xjsn98z/hqEoXLg6Nab73rjR9c/9AdKqBbwVMHyrQ==", + "dependencies": { + "@sentry/core": "7.119.2", + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2", + "localforage": "^1.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/core": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.2.tgz", + "integrity": "sha512-hQr3d2yWq/2lMvoyBPOwXw1IHqTrCjOsU1vYKhAa6w9vGbJZFGhKGGE2KEi/92c3gqGn+gW/PC7cV6waCTDuVA==", + "dependencies": { + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/types": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.2.tgz", + "integrity": "sha512-ydq1tWsdG7QW+yFaTp0gFaowMLNVikIqM70wxWNK+u98QzKnVY/3XTixxNLsUtnAB4Y+isAzFhrc6Vb5GFdFeg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/utils": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.2.tgz", + "integrity": "sha512-TLdUCvcNgzKP0r9YD7tgCL1PEUp42TObISridsPJ5rhpVGQJvpr+Six0zIkfDUxerLYWZoK8QMm9KgFlPLNQzA==", + "dependencies": { + "@sentry/types": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.119.2.tgz", + "integrity": "sha512-TPNnqxh+Myooe4jTyRiXrzrM2SH08R4+nrmBls4T7lKp2E5R/3mDSe/YTn5rRcUt1k1hPx1NgO/taG0DoS5cXA==", + "dependencies": { + "@sentry-internal/tracing": "7.119.2", + "@sentry/core": "7.119.2", + "@sentry/integrations": "7.119.2", + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/@sentry-internal/tracing": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.119.2.tgz", + "integrity": "sha512-V2W+STWrafyGJhQv3ulMFXYDwWHiU6wHQAQBShsHVACiFaDrJ2kPRet38FKv4dMLlLlP2xN+ss2e5zv3tYlTiQ==", + "dependencies": { + "@sentry/core": "7.119.2", + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/core": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.2.tgz", + "integrity": "sha512-hQr3d2yWq/2lMvoyBPOwXw1IHqTrCjOsU1vYKhAa6w9vGbJZFGhKGGE2KEi/92c3gqGn+gW/PC7cV6waCTDuVA==", + "dependencies": { + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/types": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.2.tgz", + "integrity": "sha512-ydq1tWsdG7QW+yFaTp0gFaowMLNVikIqM70wxWNK+u98QzKnVY/3XTixxNLsUtnAB4Y+isAzFhrc6Vb5GFdFeg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/utils": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.2.tgz", + "integrity": "sha512-TLdUCvcNgzKP0r9YD7tgCL1PEUp42TObISridsPJ5rhpVGQJvpr+Six0zIkfDUxerLYWZoK8QMm9KgFlPLNQzA==", + "dependencies": { + "@sentry/types": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/tracing": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.50.0.tgz", + "integrity": "sha512-avbIgDA/Bktci5OeWb5T6JCS5edWHeket92KeFNpMH79NfF46csA5yBgM+q0X9/R4swZd5fuTQwh4y6BHA4lEQ==", + "dependencies": { + "@sentry-internal/tracing": "7.50.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/types": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.50.0.tgz", + "integrity": "sha512-Zo9vyI98QNeYT0K0y57Rb4JRWDaPEgmp+QkQ4CRQZFUTWetO5fvPZ4Gb/R7TW16LajuHZlbJBHmvmNj2pkL2kw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.50.0.tgz", + "integrity": "sha512-iyPwwC6fwJsiPhH27ZbIiSsY5RaccHBqADS2zEjgKYhmP4P9WGgHRDrvLEnkOjqQyKNb6c0yfmv83n0uxYnolw==", + "dependencies": { + "@sentry/types": "7.50.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", + "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", + "dev": true, + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/jsonfile": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", + "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", + "dev": true + }, + "node_modules/@types/ps-tree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.2.tgz", + "integrity": "sha512-ZREFYlpUmPQJ0esjxoG1fMvB2HNaD3z+mjqdSosZvd3RalncI9NEur73P8ZJz4YQdL64CmV1w0RuqoRUlhQRBw==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@types/which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.0.tgz", + "integrity": "sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", + "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/type-utils": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", + "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", + "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", + "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "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, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "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 + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "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, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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 + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/author-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", + "integrity": "sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "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 + }, + "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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.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 + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001655", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", + "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "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/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/debounce-fn": { + "version": "4.0.0-maxWaithack.0", + "resolved": "git+ssh://git@github.com/julusian/debounce-fn.git#3ca54d1526c19f541fe6f103abbceda31554caa9", + "license": "MIT", + "dependencies": { + "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/deep-is": { + "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 + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ejson": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/ejson/-/ejson-2.2.3.tgz", + "integrity": "sha512-hsFvJp6OpGxFRQfBR3PSxFpaPALdHDY+SB3TRbMpLWNhvu8GzLiZutof5+/DFd2QekZo3KyXau75ngdJqQUSrw==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.1.0.tgz", + "integrity": "sha512-AhiaF31syh4CCQ+C5ccJA0VG6+kJK8+5mXKKE7Qs1xcPRg02CDPOj3mWlQxuWS/AYtg7kxrDNgW9YW3vc0Q+Mw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-n": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.1.tgz", + "integrity": "sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.1.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "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, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "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 + }, + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "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, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "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==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "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 + }, + "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 + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/fx": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/fx/-/fx-27.0.0.tgz", + "integrity": "sha512-am6jTZW1vTfdc42QH63qqtN5QoNb7JiD+DH40SokzVKSofKCcqSAq1V6ASCR/d3R2YyLFD68h6nWaSVt/BZqDA==", + "dev": true, + "bin": { + "fx": "index.js" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "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 + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "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, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "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 + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "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 + }, + "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, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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 + }, + "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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "node_modules/merge-stream": { + "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 + }, + "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, + "engines": { + "node": ">= 8" + } + }, + "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, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "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 + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "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 + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-releases": { + "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 + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", + "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-author": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", + "integrity": "sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==", + "dev": true, + "dependencies": { + "author-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "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 + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "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, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "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 + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "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" + } + }, + "node_modules/source-map-support": { + "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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/text-table": { + "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 + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/to-regex-range": { + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webpack": { + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpod": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/webpod/-/webpod-0.0.2.tgz", + "integrity": "sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==", + "dev": true, + "bin": { + "webpod": "dist/index.js" + } + }, + "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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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 + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/zx/-/zx-7.2.2.tgz", + "integrity": "sha512-50Gjicd6ijTt7Zcz5fNX+rHrmE0uVqC+X6lYKhf2Cu8wIxDpNIzXwTmzchNdW+JY3LFsRcU43B1lHE4HBMmKgQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^11.0.1", + "@types/minimist": "^1.2.2", + "@types/node": "^18.16.3", + "@types/ps-tree": "^1.1.2", + "@types/which": "^3.0.0", + "chalk": "^5.2.0", + "fs-extra": "^11.1.1", + "fx": "*", + "globby": "^13.1.4", + "minimist": "^1.2.8", + "node-fetch": "3.3.1", + "ps-tree": "^1.2.0", + "webpod": "^0", + "which": "^3.0.0", + "yaml": "^2.2.2" + }, + "bin": { + "zx": "build/cli.js" + }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/zx/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/zx/node_modules/globby": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", + "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..45af76f --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "pixtimerPro", + "version": "3.0.2", + "main": "main.js", + "scripts": { + "format": "prettier -w .", + "package": "companion-module-build" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/bitfocus/companion-module-pixap-pixtimerpro.git" + }, + "dependencies": { + "@companion-module/base": "~1.11.3" + }, + "devDependencies": { + "@companion-module/tools": "^2.3.0", + "prettier": "^3.5.3" + }, + "prettier": "@companion-module/tools/.prettierrc.json", + "packageManager": "yarn@4.9.1" +} diff --git a/pixap-pixtimerpro.js b/pixap-pixtimerpro.js new file mode 100644 index 0000000..25e326f --- /dev/null +++ b/pixap-pixtimerpro.js @@ -0,0 +1,58 @@ +module.exports = { + getTimerPresetList(data){ + let timers = data.toString().slice(6).split('/') + let lp = [] + //this.log('info', 'RECEIVE TIMERS >>> ' + timers) + for (let i = 0; i < timers.length; i++) { + let p = timers[i].split(':') + //this.log('info', `Timer >>> ${p[0].toString()} ${p[1].toString()} ${p[2].toString()} ${p[3].toString()}`) + let ps = {} + ps.id = parseInt(p[0]) + ps.color = this.hexToRgb(p[1]) + ps.name = p[2] + ps.speaker = parseInt(p[3]) + //this.log('info', `GET TIMER PRESET LIST >>> ${JSON. stringify(ps)}`) + lp.push(ps) + } + //this.log('info', `GET TIMER PRESET LIST >>> ${JSON. stringify(lp)}`) + return lp + }, + + getMessagePresetList(data){ + let messages = data.toString().slice(8).split('/') + let lm = [] + //this.log('info', 'RECEIVE TIMERS >>> ' + timers) + for (let i = 0; i < messages.length; i++) { + let p = messages[i].split(':') + //this.log('info', `Timer >>> ${p[0].toString()} ${p[1].toString()} ${p[2].toString()} ${p[3].toString()}`) + let pm = {} + pm.id = parseInt(p[0]) + pm.color = this.hexToRgb(p[1]) + pm.name = p[2] + //this.log('info', `GET MESSAGE PRESET LIST >>> ${JSON. stringify(pm)}`) + lm.push(pm) + } + //this.log('info', `GET TIMER PRESET LIST >>> ${JSON. stringify(lm)}`) + return lm + }, + + hexToRgb(hex) { + // Vérifier si l'entrée est une chaîne de caractères valide + if (typeof hex !== 'string' || !/^#?[0-9A-Fa-f]{6}$/.test(hex)) { + return null; + } + + // Retirer le préfixe "#" si présent + if (hex.startsWith('#')) { + hex = hex.slice(1); + } + + // Convertir la chaîne hexadécimale en nombres entiers RGB + const r = parseInt(hex.slice(0, 2), 16); + const g = parseInt(hex.slice(2, 4), 16); + const b = parseInt(hex.slice(4, 6), 16); + + // Retourner la valeur RGB sous forme d'objet + return [ r, g, b ]; + } +} \ No newline at end of file diff --git a/presets.js b/presets.js new file mode 100644 index 0000000..886de68 --- /dev/null +++ b/presets.js @@ -0,0 +1,1272 @@ +const { combineRgb } = require('@companion-module/base') +module.exports = { + getPresets() { + const presets = {} + + const colorWhite = [255, 255, 255] + const colorBlack = [0, 0, 0] + const colorRed = [242, 13, 13] + const colorGreen = [58, 213, 61] + const colorBlue = [0, 0, 200] + const colorOrange = [255, 85, 0] + const colorpixBlue = [48, 132, 208] + const colorWarning = [242, 175, 13] + const colorInfo = [23, 162, 184] + + // TIMERS + // lOAD PRESET TIMER FROM PIXTIMER PRO + Object.keys(this.pixtimerdata.presets).forEach((key) => { + //this.log('debug', `PRESET | Cue >>> ${this.pixtimerdata.presets[key].name}_${key}`) + const rgb = this.pixtimerdata.presets[key].color + presets[`${this.pixtimerdata.presets[key].name}`] = { + type: 'button', + category: 'Timer Presets', + style: { + text: this.pixtimerdata.presets[key].name, + size: '14', + color: combineRgb(255, 255, 255), + bgcolor: combineRgb(rgb[0], rgb[1], rgb[2]), + png64: this.pixtimerdata.presets[key].speaker ? ICON_SESSION_SMALL : ICON_SPEAKER_SMALL, + pngalignment: 'left:bottom', + }, + steps: [ + { + down: [ + { + actionId: 'recall_timer_preset', + options: { + recall_timer_preset: this.pixtimerdata.presets[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'current_speaker', + options: { + current_speaker: this.pixtimerdata.presets[key].id, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + { + feedbackId: 'current_session', + options: { + current_session: this.pixtimerdata.presets[key].id, + }, + style: { + bgcolor: combineRgb(colorOrange[0], colorOrange[1], colorOrange[2]), + }, + }, + ], + } + }) + + // SPEAKER PLAY PAUSE STOP + presets['Speaker Play'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PLAY_SPEAKER, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_timer_play', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'speaker_play_status', + options: { + speaker_play: 1, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + ], + } + presets['Speaker Pause'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PAUSE_SPEAKER, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_timer_pause', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'speaker_play_status', + options: { + speaker_play: 2, + }, + style: { + bgcolor: combineRgb(colorWarning[0], colorWarning[1], colorWarning[2]), + }, + }, + ], + } + presets['Speaker Stop'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_STOP_SPEAKER, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_timer_stop', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'speaker_play_status', + options: { + speaker_play: 0, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + presets['Speaker Flash'] = { + type: 'button', + category: 'Effect', + style: { + text: 'Speaker Flash', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorpixBlue[0], colorpixBlue[1], colorpixBlue[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_timer_flash', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + + // SESSION PLAY PAUSE STOP + presets['Session Play'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PLAY_SESSION, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'session_timer_play', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'session_play_status', + options: { + session_play: 1, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + ], + } + presets['Session Pause'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PAUSE_SESSION, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'session_timer_pause', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'session_play_status', + options: { + session_play: 2, + }, + style: { + bgcolor: combineRgb(colorWarning[0], colorWarning[1], colorWarning[2]), + }, + }, + ], + } + presets['Session Stop'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_STOP_SESSION, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'session_timer_stop', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'session_play_status', + options: { + session_play: 0, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + presets['Session Flash'] = { + type: 'button', + category: 'Effect', + style: { + text: 'Session Flash', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorpixBlue[0], colorpixBlue[1], colorpixBlue[2]), + }, + steps: [ + { + down: [ + { + actionId: 'session_timer_flash', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + + // ALL PLAY PAUSE STOP + presets['ALL Play'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PLAY_ALL, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'all_timer_play', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'all_play_status', + options: { + all_play: 1, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + ], + } + presets['ALL Pause'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PAUSE_ALL, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'all_timer_pause', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'all_play_status', + options: { + all_play: 2, + }, + style: { + bgcolor: combineRgb(colorWarning[0], colorWarning[1], colorWarning[2]), + }, + }, + ], + } + presets['ALL Stop'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_STOP_ALL, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'all_timer_stop', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'all_play_status', + options: { + all_play: 0, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + // MESSAGES + // lOAD PRESET MESSAGE FROM PIXTIMER PRO + Object.keys(this.pixtimerdata.messages).forEach((key) => { + let rgb = this.pixtimerdata.messages[key].color + if (rgb === null) rgb = [0, 0, 0] + presets[`${this.pixtimerdata.messages[key].name}`] = { + type: 'button', + category: 'Message Presets', + style: { + text: this.pixtimerdata.messages[key].name, + size: '14', + color: combineRgb(255, 255, 255), + bgcolor: combineRgb(rgb[0], rgb[1], rgb[2]), + }, + steps: [ + { + down: [ + { + actionId: 'recall_message_preset', + options: { + recall_message_preset: this.pixtimerdata.messages[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + }) + presets['Message Show'] = { + type: 'button', + category: 'General', + style: { + text: 'Show Message', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorGreen[2]), + }, + steps: [ + { + down: [ + { + actionId: 'message_show', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'message_show', + options: { + message_show: 0, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + { + feedbackId: 'message_show', + options: { + message_show: 1, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + // BLACKOUT + presets['Blackout'] = { + type: 'button', + category: 'General', + style: { + text: 'Blackout', + size: '14', + color: combineRgb(255, 255, 255), + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorGreen[2]), + }, + steps: [ + { + down: [ + { + actionId: 'blackout', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'blackout', + options: { + blackout: 0, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + { + feedbackId: 'blackout', + options: { + blackout: 1, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + // ADJUST TIME + for (let ajt = 0; ajt < this.adjustArray.length; ajt++) { + var t = this.adjustArray[ajt] + //this.log('debug', `PRESETS | ADJUSTE TIME >>> ${this.adjustArray[ajt] * 60}`) + presets[`Adjust Speaker Timer ${this.adjustArray[ajt] * 60}`] = { + type: 'button', + category: 'Adjust Timer', + style: { + text: `Speaker\n+${t}`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_adjust_time', + options: { + time: '' + t * 60, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + } + + for (let ajtn = 0; ajtn < this.adjustArray.length; ajtn++) { + var t = this.adjustArray[ajtn] + //this.log('debug', `PRESETS | ADJUSTE TIME >>> -${this.adjustArray[ajtn] * 60}`) + presets[`Adjust Speaker Timer -${this.adjustArray[ajtn] * 60}`] = { + type: 'button', + category: 'Adjust Timer', + style: { + text: `Speaker\n-${t}`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_adjust_time', + options: { + time: '-' + t * 60, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + } + + // TIMER CLOCK + presets['Switch Timer Clock'] = { + type: 'button', + category: 'General', + style: { + text: 'Switch Timer', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorpixBlue[0], colorpixBlue[1], colorpixBlue[2]), + }, + steps: [ + { + down: [ + { + actionId: 'timer_clock', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'switch_timer_clock', + options: { + switch_timer_clock: 0, + }, + style: { + text: 'Switch Timer', + bgcolor: combineRgb(colorpixBlue[0], colorpixBlue[1], colorpixBlue[2]), + }, + }, + { + feedbackId: 'switch_timer_clock', + options: { + switch_timer_clock: 1, + }, + style: { + text: 'Switch Clock', + bgcolor: combineRgb(colorOrange[0], colorOrange[1], colorOrange[2]), + }, + }, + ], + } + + // EXTERNAL TIMER + presets['External Timer and Play'] = { + type: 'button', + category: 'External Timer', + style: { + text: 'External Timer', + size: '14', + png64: ICON_PLAY, + pngalignment: 'center:center', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'external_timer_Play', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['External Timer Play'] = { + type: 'button', + category: 'External Timer', + style: { + text: 'External Timer', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'external_timer', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['External Stop'] = { + type: 'button', + category: 'External Timer', + style: { + text: 'External', + size: '14', + png64: ICON_STOP, + pngalignment: 'center:center', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'external_stop', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['External Play'] = { + type: 'button', + category: 'External Timer', + style: { + text: 'External', + size: '14', + png64: ICON_PLAY, + pngalignment: 'center:center', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'external_play', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + + // VARIABLE SPEAKER + presets['Speaker Variable'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\n$(piXtimer_Pro:speaker_timer)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Speaker Variable MS'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\nm:s\n$(piXtimer_Pro:speaker_timer_ms)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Speaker Variable Hour'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\nHour\n$(piXtimer_Pro:speaker_timer_h)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Speaker Variable Minute'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\nMinute\n$(piXtimer_Pro:speaker_timer_m)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Speaker Variable Second'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\nSecond\n$(piXtimer_Pro:speaker_timer_s)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + + // VARIABLE SESSION + presets['Session Variable'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\n$(piXtimer_Pro:session_timer)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Session Variable MS'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\nm:s\n$(piXtimer_Pro:session_timer_ms)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Session Variable Hour'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\nHour\n$(piXtimer_Pro:session_timer_h)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Session Variable Minute'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\nMinute\n$(piXtimer_Pro:session_timer_m)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Session Variable Second'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\nSecond\n$(piXtimer_Pro:session_timer_s)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + + // VARIABLE EXTERNAL + presets['External Variable'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\n$(piXtimer_Pro:external_timer)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['External Variable MS'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\nm:s\n$(piXtimer_Pro:external_timer_ms)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['External Variable Hour'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\nHour\n$(piXtimer_Pro:external_timer_h)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['External Variable Minute'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\nMinute\n$(piXtimer_Pro:external_timer_m)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['External Variable Second'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\nSecond\n$(piXtimer_Pro:external_timer_s)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + + // NDI + presets['NDI start stop'] = { + type: 'button', + category: 'NDI', + style: { + text: `NDI start & stop`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + steps: [ + { + down: [ + { + actionId: 'ndi_startStop', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'ndi_start', + options: { + ndi_start: 0, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + { + feedbackId: 'ndi_start', + options: { + ndi_start: 1, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + // PBP+ + presets['PlaybackPro main enable'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMain\nenable`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_main_enable', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro backup enable'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nBackup\nenable`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_backup_enable', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master take'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nTake`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorGreen[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_take', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master endall'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nEndAll`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_endall', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master previous'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nPrevious`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_previous', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master next'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nNext`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_next', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master play'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nPlay`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_play', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master pause'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nPause`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_pause', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + Object.keys(this.pixtimerdata.gotoArray).forEach((key) => { + let rgb = this.pixtimerdata.gotoArray[key].color + if (rgb === null) rgb = [0, 0, 0] + presets[`${this.pixtimerdata.gotoArray[key].name}`] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP Master ${this.pixtimerdata.gotoArray[key].name}`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_goto', + options: { + pbp_master_goto: this.pixtimerdata.gotoArray[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + }) + + return presets + }, +} + +// SPEAKER +const ICON_SPEAKER_SMALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8zjPFjNIqFhcVLWM1ojBIpZSSUpDHKr83Mm19qZrzem0myVbaKEhu/FvwFbJW1UkRKtqyJDdNz3oyaSebe7jmf+73nnO49F+yhlJo2qn2QzmT14FhAmZtfUJwvOKihTuxgWDW04enpSSqOz3tslr/1WrUqx/07GqIxQwVbrfCQqulZ4XHhydWsZvGOcIuaDEeFz4Q9ulxQ+M7SI0V+tThR5G+L9VBwBOxNwkqijCNlrCb1tLC8nI50Kqf+3sd6iSuWmZ0R3y6rDYMgYwRQmGCUEfroYUBsH178dMuOCvm+Qv4UK5KritVYQ2eZBEmyeETNSfWY+LjoMZkp1qz+/+2rEe/1F6u7AuB4Ns33TnBuQ37LNL+OTDN/DFVPcJkp5a8cQv+H6FslreMA3BtwflXSIrtwsQmtj1pYDxekKln2eBzeTqFxHppvoH6x2LPfc04eILQuX3UNe/vQJfHupR8yb2fOfsfNDAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAQdJREFUeJzt1jFOAkEUh/FPQQoSTqAkNlYWHoBQiiaUXsNzcAxbSxoTC47gAeigIGhhgaGjAQtnGwjZZV0cWL9f8pqdl8n/zW4yC5IkSZIkSZIkSZIkSZIkSZIkroE+8BGqH579C/fAAlit1QK4i5jrTzSAdzaHT2oaekqrw/bhk7qNlu4XTjP2XRXUc3CyHsCwoJ6jVQfGbP/8R6Gn1NrAnM3h52HtKFV26D0HnoAqUAM+gRfgMewzKTzdgbgAnvl52zOgBzyE6gFfYW0AXMaJuF+vpF+BSb0BZ3Fi7kcTWJL9AFZAK0rSnNKuwS5wsuOeNzmzRJF2ALUce1bzBIkl64+QJJXSN710Tbr3AWT/AAAAAElFTkSuQmCC' + +// SESSION +const ICON_SESSION_SMALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8zjPFjNIqFhcVLWM1ojBIpZSSUpDHKr83Mm19qZrzem0myVbaKEhu/FvwFbJW1UkRKtqyJDdNz3oyaSebe7jmf+73nnO49F+yhlJo2qn2QzmT14FhAmZtfUJwvOKihTuxgWDW04enpSSqOz3tslr/1WrUqx/07GqIxQwVbrfCQqulZ4XHhydWsZvGOcIuaDEeFz4Q9ulxQ+M7SI0V+tThR5G+L9VBwBOxNwkqijCNlrCb1tLC8nI50Kqf+3sd6iSuWmZ0R3y6rDYMgYwRQmGCUEfroYUBsH178dMuOCvm+Qv4UK5KritVYQ2eZBEmyeETNSfWY+LjoMZkp1qz+/+2rEe/1F6u7AuB4Ns33TnBuQ37LNL+OTDN/DFVPcJkp5a8cQv+H6FslreMA3BtwflXSIrtwsQmtj1pYDxekKln2eBzeTqFxHppvoH6x2LPfc04eILQuX3UNe/vQJfHupR8yb2fOfsfNDAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAXNJREFUeJzt171qFFEYBuAnGnIBoqCgTRrxpxEbQfzLJWwjKeMtaKdNOmst7dKJCGkUFOwsFYukshHZJCiWUYu1iMUcSNydWdjNOlnj+8BhmHe/gW/OmTm7S0RERERERERERERERERERERERERERESYwRLelbFUsv/Gdez0jWsH2lHLVgxOwMqBdrRPR0asX6/J1ibRyDSaw210MFuy49iwu/obJVNqOuWauVY73YemDewkPpQj1Y1exiJOoVvyM9jEU7zH6ZJ/waVy/Cc9MPiu38WPmvw77tXk91vvegxNe8CFmuw8tmvybZyryS+O29Q0WDC4ondqsmGf3Wq96zEcbci/qd7fE/iMh3iFeZztq32DR/iIY/ha6l+iN/mW/74bqk2uh+dYxS9s4SZ+2l3lLq7iU6lZLdf0VBNxpd3WJ+Ot5kf9GZ7sOX+M10PqX7Tc+0Q03cyO6ltgec/5sj+fiLox1Ub9JXjo/viMOgEREYfKb5UCeijzUtIlAAAAAElFTkSuQmCC' + +// PLAY +const ICON_PLAY = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAc1JREFUeJztmr1KxEAQgD9/wFZQEG0E24CInQtrYXFoI4o+grXv4CtYaOEjiI2dghYeBm2FbbSy0kew8afQBbE5d7JJNnvztZfZyXw3BJIZUBRFURRFURRlGBmpeoBxdhrYAGaBJ+CuLPovVc9tCrEA4+wUcAzsAKN/fr4EDsqiX1a4t0YQCTDOTgJXwPKAS5MX8fef+y8nDC4eoAfcGmcvjLNGmKtWgjvAODsDvArzJdcRkg5Yq5AvuY6QCCgi5E1GhETAWMT8rYuQPgRj05qIVAR4GheRmgBPYyJSFeCpXUTqAjy1ieiKAE90EV0T4PktYqnKQV0V4OkBd8bZLekBXRcAMAGcGWc3JcE5CIDvOg6Ns8Evd7kIAJgHFkODchIAsBoakJuAYHITcBMakJOAZ+AhNCgXAR/Afln0P0MDcxDwBmyXRf9cEtx1AZfAirR4gPGIN9Mk0b4ud01A9M/qXRFQ2zwhdQG1D1JSFdDYBCk1AY2PzlIR0NrMUCLgPWL+1oelEgEuQt7WC/dIBFxXyJdM4R7phsgpsBsQklzhHulDcA9YIIMVmapLUkd8d8JwLUn95mdNbh2YAx6B+y6tySmKoiiKoiiKMpx8ATwInxTdIq2hAAAAAElFTkSuQmCC' + +// STOP +const ICON_STOP = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAATJJREFUeJzt2jGKwlAUheF/nDrBbvaRStBVCAPWAVfl7EBchF0qtzGt+NoRLKL9vcHxRD1fnScnv2L1wMzMzMze00f2wKmqPoEWWAENML33qKQjcAC2wKYu5Zw5nApwqqovYAfMM+ceqAOWdSm/0QPhANdvfs94X/6mAxbRX8Ik8cEt4395gBmwjj6cCbDKb5H5jj6YCdAMGKIS3poJoP63zwhvzQR4SQ6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqCWCXD8txX3F96aCXAYMEQlvDUTYDtgiEp4aybAD/0VtLHrgE304XCAupQ/YMm4I9wuSoZviw69Krumv4r29FdlzczMzOxdXQBM6C5uVSFtIAAAAABJRU5ErkJggg==' + +// SPEAKER +const ICON_PLAY_SPEAKER = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAv5JREFUeJztml1LFFEch58dVytENBV0kxC2IGMrJCppZAyilrrpTaMvEHTXdwj6BF3URZ8googuioRecGkxukljLkryZb0wlQiVSN3ZmS50Q61ld86cMzvleS5nzv/85jx7ZnZnzwGNRqPRaDQajUazHYkF7cC0rVbgPJAAxoDhbCozE7TfsBAWYNpWC3AP6AeMLacHgVvZVCYb4NpCQUiAaVtNwEvgaJmmkRex9ZOrlPuUHzxAGnhr2tYL07ZMwSyl+J4Bpm21AV8F8yI3I0RmwOkAeZGbESICUhJyIyNCRECNxPyqixB9CMqmaiKiIqBI6CKiJqBIaCKiKqCIchGhCXAXOnAmenEmenEXOvyWKxMRl9nZ3/CcneQ/XMOZPrY5eO97arsfEIuv+OkuDaRN25L2g0r5DMiPDPwxeABn+jj5kaui3W6cEd1Brk+pAHepHSfXU/K8k+vBXWoPEpEGhk3buiTagVoB3zultCnDDuCRaVsXRIrV3gIxt4I2BRlJBnDHtC3fL3dKBdQ0T1bQZkpWXCdwxG+RUgGx+nniyaGS5+PJIWL18zIj+/wWKP8arDv0BGIezpdTm4P3vaEu9VR1fFmUCnAXE+Q/XsFoyrHr7G3chQQARuMMTu4EK8M3qO16htEyLiuy9HQrgTIBzngfq6P94BkU5rrIj53BaJgFwF1qA2/t7ivMHaDu8GPi+18HjZwCRv0WqXkGeAb5T+nfgywecxcTuIuJzceBVfsi3s+mIIkucDObynh+C5UIKMwexFturLzArcH9lhSNWwYuZ1MZoQeKEgHej1b/NSsNIlGDwEnRwUMI3wKKkPYypESA0TxFbddz3zUVIP1vdTUCdk9i7J6U2aWy9YSo3wLKF1KiKiC0FaSoCQh96SwqAqq2ZigiQMoL/DpVXywVEWBLyK36wIuICHgVIC8yAy8iukPkITDgoyRyAy8i+hC8DiT5D7bIBN0kdZe1mbC9NkltZH2b3DlgD/AZePcvbZPTaDQajUaj0Wg025NfyFIR+WHx3JgAAAAASUVORK5CYII=' + +const ICON_PAUSE_SPEAKER = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz/baGJCXLhwsWSuNs3U4kaZNGpJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2e11ZbsnM65/mc73mep+c8B6yRjJLVG7yQzRW0cDDgnI8uOO0vNMrsoAlXTNHVsZmZEHXH5z0W0956zFz1/f4dLcsJXQFLk/CoomoF4Unh0FpBNXlHuEtJx5aFz4TdmhQofGfq8TK/mpwq87fJWiQ8DtZ2YWeqhuM1rKS1rLC8nL5sZlWp1GO+xJHIzc2K7ZXVg06YIAGcTDHBOH4GGZHdjwcfA3KiTrz3N36avMQqsquso7FCijQF3KKuSvaE2KToCZkZ1s3+/+2rnhzylbM7AtD4bBjvLrBvQ6loGF9HhlE6BtsTXOaq8flDGP4QvVjV+g6gbRPOr6pafBcutqD7UY1psV/JJsuaTMLbKbRGofMGmhfLPavcc/IAkQ35qmvY24d+8W9b+gEYQ2fCbyeEygAAAAlwSFlzAAALEwAACxMBAJqcGAAAA3JJREFUeJztmt1LU2Ecxz++NFDcJE0I1CwhTbNaBKZmEIi3wYS6qS6qK1PJLgqCQAVvJSyT7kqTArvYHyDSqy8RlCaoKWjmLgrTakNjObcudiJXmzvP2XwO5POBXWzP73m+3/PdOc+2sx8oFAqFQqFQKLYmCUYnup3WBKASOA5YwpT4gWlg0ObwzMWgcQKoALaFKVkDpjSNeSMawgG4ndYU4AJwCSjWOe0R0GBzeBZ1aqQBF4FaoFDHlADQDTTaHJ5vOj0BggG4ndZ0oB84IjJPYwYoszk8C1E0MoEnwAEDGpNAuUgIiYICbRg7eIB8oENHXQfGDh5gH3BTZILuM8DttOYCcyJzIlBoc3imImjsJXhNx0IAyNO7J4icARXEfvAAxzYYq4zD+gkEvepCJIACcS/C68jQCEEkgCQDRkTXkaERgugm+N+hAjDbgNmoAMw2YDZbPoBks4TtrSOHgDLt6fDIDfuoGT6kB7C4mmGxt77oAc6sf93eOtKz5Du5mJH8Vaof6ZdAk6ulir8OXuNs03xLlWw/UgOY8+bxbsVeEml8dOVwyZw3T6YluQGM/4h+/2RCR008kRpAEmvRaxKi18QTqQHsTx2PWlOcEr0mnkgNINviojTt1dtI46Vpw2+yLS6Zlkz4FMhpfgrcCjPU3pTT8kyyHbkBzHrzqZ+94wCWgSLglPYoApbrZjtrxlaM3g40hrQvQs6lGto/XcYfSNwNXAeuARPa8D4g+YN3D3WzndTvvM3pzF4pvqScAWuBJB4snMMfCJFLAkq0R8gbcfdzLQurWTKsyQng9XIpX3w7dNf7AsmMrRzcREd/kBKAy5stPGfJt30TnPyL+jksQ6Q4dZzzWfcA+PgzZ7D/e3VfuLqq9L7qXRZXxe85MpATQMr4+m94A20NV5vD1T13WlMR+FMjHmz5S0AFYLYBs1EBmG3AbFQAArXxulWz0ToyNEIQCSDWzg0960zHSeO93kKRAAYJtp/EysAGYy/jsH4AGNJbrDsAreem24ijdfRG6g/SNKaAxzFqdIn0DIpugo0EW9GMMAPU66ir02qNMAlcEZkgFIDWf1cOdCF2OTwESqP1CGoaC8BRgs2VegkA9xHsEYTYWmVzCYZRSPieHD/BDW8ohlbZPE2jgPBv1hrBDW/IaKusQqFQKBQKhWKr8gvpIuCz758RhwAAAABJRU5ErkJggg==' + +const ICON_STOP_SPEAKER = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAo5JREFUeJztmtFLU1Ecxz9ug8DaMJaFLhgNIZrawx4iqJdAhj42VHxV8MEKDP+PglFUYNRzTesxW5D0IAysvQwngVjGcJSS4qUeYs4elkUM2TlznnPL3+fx3t/Z73s+uzuXHQ4IgiAIgiAIh5Mm3QFbfr8XGAGGgBjQ0uhQmmwCWSAFTAYcZ1tnsJaALb//FDANXNIZZ5AMkAg4TlF1gLKAX9/8G9w7+V0ywGXVJ8Gj8cEjuH/yABeBUdViHQFD+lmsMaBaqCMgVkcQWyhn1RFge7XXQTmrjoD/EhFgO4BtRIDtALYRAbYD2MZnq/HSyQ7y7Z0ARFcX6PiyZCWHcQHfjhzldnyCV9H4X9fjC2km0rdo/vHdaB7jP4Fkz3jV5AHSnXGSPTdNxzErYCUYZqarb8/7L7r7WAmGDSYyLCDfHq1Zs9hWu6aRGBXgLdfeo1CpaSRGBXSu5mvWRIu1axqJUQGhjQJXs8/2vJ/IThPaKBhMZOEtcG32Hv3vpqqu979NMTZ733QcrU3Rnf02+9Aa4e6V65z9/J7e3AzLrREAImvLvOzqZbHtHMNzj+gu5PbbioDjKM3NmIDnsQTJnnHKTZWHzrNTJrz+EYBPwTDbHu/v2huv7zA4/3Q/7dwlYNvjZWBsivVjJ5TqfeUSTx4M0uqs1dtSWYCRNWD+zAXlyQOUPD5yp88fYKI/GBFQaAlpj/nafPwAklQjf4dNNIkW8wzPPdYeYwKjr0GTuGoRdDMiwHYA24gA2wFsIwJsB7CNjoDNA0vReJSz6gjI1hHEFspZdQSk6ghiC+WsOgIeUjmC5nYywKRqsbKAgOOUgATulrB7UFJ5b73eo7KjVI6i/fNHZQVBEARBEITDyk8sk6BRRC6O6gAAAABJRU5ErkJggg==' + +// SESSION +const ICON_PLAY_SESSION = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAA8FJREFUeJztmk1sG0UYhp/ZtRuIG/JDSCBCMs2lQW4RokWhK20QICI4gKjIoTcuqEeOvffIFQk4tDeOCJBAArUSICXgGIlDG7EVNGqKm1YktRRRqU0be384pLajrI2zs+P1QuY5eWe+n5nX3856PQMajUaj0Wg0Go1mPyLiBrAcexR4E3gKWAZKxcLCX3HjJoW0AJZjPw58CrwLGLu6LwJni4WFYoyxJYKUAJZjDwHfAy90ME29ELu/ub1yjs6TB5gFfrYc+4Ll2JZkrq4SuQIsxx4H1iTzpa4iZCrg1Rj5UlcRMgIUFORNjRAyApgK8/dcCNlFUDU9EyItAtRJXIi0CVAnMSHSKkCdrguRnACBgbd2BG/tCASR03ZNiIzKYO0Iqjke/HiGYHMEANG/wSOvfIg4sBk11Cwwazm2sh9UiVSAW55uTB4g2BzBu/FSnJA7K+L5OIESESC483Sozf873CbBLFCyHPsd2QBdEkCw8zXDzC+GLMxnFtvaR6QP+MJy7LdlnNWuAYHAXZnBvW6D8MhMzpM5VMQcKZM9+iVeebvszXwJc7gMCNzrFu7KDAQGmUM/kZmcBxFEzWwAH1mO/U2xsBDJWakA3u0pqktzjevqpVMYByts/foeQe1RMhOXAahdeQt3+TX6jn1G9dKppv3SHGJgHXPsd5n0eeA54HIUJ6W3gFs+EW5bfREMD7ws7upx3NXj4GXB8Lb7dtv/GY4RgZmoDkoFMIZWQ23i4G2C+4Oh9uD+EGJgPRxjOByjmygVIJNfRPRvNK5FroI5eKu1cSAwB28hcpWmff8GmXwpzhDmozqoWwN8E+/mMcyJJYxcBQjw747j3x2jb/o8W6XTTVvh02d9jH9vDPPJKxgD6xAI/HujuOVpspPzYNaijqAMLEV1UiZA9beTuNdebtl34OhXGEM3G89+c+wP/MoUtauvtw7mZ8gevhAlvQ98EPUJAApvAe9GeEGrU7s2gznuNJMOl1sugHXaCdmGB8DJYmHh6yhOjbHIOLUiqPW379t6DIS/s4WgmvsX+4G9pr0InJCdPCT0MtQFlL0MKRMgO/Vd+07DwxhZITv18HJ0mazhgR/570Xlf6urE+DZbzvamE8st/y8B7q2n5D2W6DrGylpFSCxHaS0CZD41llaBOjZnqGMAJ7C/D3fLJURwOls0pGeT7yOjAA/xMiXmonXkT0h8jkw19GwSeomXkd2EXwfmOR/cEQm7iGpT9iuhP11SGonD4/JvQFMAFeBX/5Lx+Q0Go1Go9FoNBrN/uQfju9WEOUnnvYAAAAASUVORK5CYII=' + +const ICON_PAUSE_SESSION = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAABA1JREFUeJztml9oU1ccxz9J22sFE7uIo1tjK8IaFYQM90edgmy6slbGUocvoqh7ck6oouxlj5W9KEOQvc2pDwo6GzZax6ZStmlLRbCPtaJYW1unmLTNXoxN7h7uXduYm/See3NyYT0fCOSe8zvn973f5Jybe/MDhUKhUCgUCsX8xOd04GQ84AM2ApsAzSIkC9wDeoKx1JCLHJuBDUCVRUgGGDRzDDvJIWzAZDywENgHfAmstjnsAnAwGEs9t5ljEfAFsB+I2BiiA+eAtmAsNW5TEyBowGQ8sBi4DqwVGWfyAFgXjKWezZFjCdANrHGQYwBYL2KCXzDBCZydPMAK4JSNuFM4O3mAlcB3IgNsfwMm44FlwJDImAJEgrHUYIEcb2GsaTfoQIPdPUHkG7AB9ycP8EGRvo0lmN+HodUWIgY0imsRnqccOXIQMaDCgRDRecqRIwfRTfB/hzLAawFeowzwWoDXzHsDKr1KHG3vrwA+MQ9/7f8mmvFChycGRNv7lwC3geVm08Noe/9a4866vHi1BPYwc/KY7/d4oMMzA6IWbW+XXQVlMkDHh557H3XaIuyHIvHSkLoHZPETT8SIJ2JU+jK0hjrYVvMLQB9wGNhrhp4G+rK6r7lz/FM6Eq1k9Ao+C8WJheL4yUrTKNWA2/+8w8mxtunj46NH8OtTDcB9oAa4bHZ9CxztTLbcOD52ZDr+5Fgb9dow7y66JU2j1CXQldyW1/b7RNMqIA1UAzvNVzXw8urEx3nPGDuTLTIlyjWgceHdvLY3tNEkUGcRHn5TG0282hixmKOUSDWgpaaL2qon08d12giR6oGnGI+t8rQ0Vt99WqeNTDfUVj2h5bUumRLl7QFTeiXXJrawKfgXYW0YHzpD6eU8fLEiBGwHfp4VngGaRtPhr9cF+qjXLgLwOB3mSrKZ1lAHC/wvpOiUZsD3fx/gp+efW3V9CHQBd5i59l8DtlxK7NhqNeClXsXupeek6JS2BH4bbyrW/RWGCf9xC9hVKPhyYnuJVOUjzYBUJlCsuxZyLu46ECoUnJwq2OUadTssa+K9S3+0bH+UDvdcn9h6Behh5mrwB5D+aPHV5nptxPYz/VIgz4DXrX7uA3DzxMGjx8z33bPau/80/nssqwHzfgkoA7wW4DXKAK8FeI0yQCC2VI+ti81Tjhw5iBjgtnLDzjz3SpTD9kMEEQNm/3Jzw80ifTdKML8O9NoNtm2AWXPj9p70YqH6IDPHIHDJZY6zIjWDoptgG0YpmhMeYNwGz8UBM9YJA8AhkQFCBpj1d+uBs4gth/PAe3PVCJo5ngHvYxRX2kUHziBYIwjuSmWXYZgRwbomJ4ux4fW6KJVtMHM0Yv1hZTA2vF6npbIKhUKhUCgUivnKv4gQCkucPUCjAAAAAElFTkSuQmCC' + +const ICON_STOP_SESSION = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAA2xJREFUeJztmltIFFEYx38zblnUrqWUS0rYzVAxSiuMgqKHIrYi1y4+RNHFp4KIeqqHIIKehKDoJaEIgq4alUUGUQ/VEmYhIZTd87J2U3d6qNzd6WFzM0ZjzrLjsTy/t/nmO+f8z3/P+XZmOKBQKBQKhUKhGJ5oog1CbncKsBUoB4qAcckWJUgX0ABcAE54DCMi0ljIgJDbnQlcAhaKtBtEAoDfYxjtdhvYNuDXL3+XoTv5XgLAIrsrQRfoeCtDf/IAJUCF3WQRA8rFtUhjnd1EEQOKEhAiC9taRQyQXe1FsK1VxID/EmWAbAGyUQbIFiAbZYBsAbJxyRo4qukEppYAUPIqgG5GpeiQYkBodBrbN1cRTPMC4O0OUnVqG55voUHXImUL3ChcEZ88QDDNy43CFTKkyDGgeeIMaywzV4KSQTLARMPs8+nB11hryfE1Xhsw30kcrQFRTaemqJSaOaW4ohH8DdWsenKFvLYmdt4+yvVCHxCbfH5bEyYaV2evprrIT0RPYc3jGkobahwtkCJfhEzRzh9Omc/e9ZV/xI6c3cXBVQf4mjqWxc/vAHA3dwmebyH21x5i94Yjf+RXnt/DvNcPRYfGYxi25uboCqidtdISqytYzohIDz9cI7mVv+y3kGiYuvzllvxrs3wJGWAXR2tAbsczS2zyl3d8dE+wxD+4JzL581tLfGbQ2kcycdQAX2Mt3u5g/Dqrs4VpHS/QTOtuMjWN6R9ektXZEo95u4P9Fsxk4lgNCOsuLs9ZQ/u4SWR3vkczTd5m5JDV1Yq3q519ZYfjuboZpfLcHlrSs3mTkRNbCRq0js8m4+sn/I+qSQ1/Fxlefg04vnQHF4vX9ntvx+1jzOhopjkz9jww90099TnFnCnZ2G9+jz6CTQ9OO6LTsS1ws8Ba0HqpLi5jwcv78eu89ibq/pJ/qbgsqdr64pgBxij3gPe+jElH71MHNBNCoz0D5neOSU+qtr6o12GnOt5y7+SA91IiYQpbn6IRWwWz3z3BFekhkjL4L6eOPgnKxO6/wLDfAsoA2QJkowyQLUA2ygDZAmQjYkCXYyqSj22tIgY0JCBEFra1ihhwIQEhsrCtVcSAKmJH0IY6AeCE3WTbBngMIwz4Gdom9B6UtH1aNNGjshXEjqL980dlFQqFQqFQKBTDlZ9DNfNgD0hjngAAAABJRU5ErkJggg==' + +// ALL +const ICON_PLAY_ALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAA8BJREFUeJztms1vG0UYh5/9cD5QkgItadPGCaUSoFoK0AIpWxYkDgEuCIlKiDtHxJUz/wIHOPAPIBUu3IgECCyspCgIEItQAcVOC0lJUFETmg/v7HAwXjsfxt7ZXXtL5jn53Z33fWd+no/dnQGNRqPRaDQajUZzGDHiBnA89xjwIjAG/AzMlQrF5bhxu4WyAI7nHgXeA14BzD23Z4G3S4ViKUbduoKSAI7n3g18CpxrUzTzQuz95zrlfdo3HmAG+Mrx3E8cz3UUc6VK5B7geO5xYEUxX+Z6hEoPeC5Gvsz1CBUBCgnkzYwQKgJYCebvuRCqk2DS9EyIrAhQp+tCZE2AOl0Twk4zeB0p+qj++BrI2qpr9G+Qe+jDTlxngBnHc1NbPrsigLgxTfWXx3dds04uYA4vdhoiNSG6MgT88hP7r1WeVgmV+NBIXYDg9hjixul91/3yFFL0q4ZtFuLROPVLXQBxrfFPm4PrGEgAZHUAsfxU3PAzwJzjuS+rBkhVAClN/MXHQts+cwXzeCW0/cUnk0jTD3zkeO5LKs6pChCsniPYHA5ta3wOe2IhtMVanmB9MolUJvCO47mRX+5SFcCvTIe/rdElzMEVrBPzGNZOo8ySm1S6SWAqqlNqAsjtexC/PRjadv4bAAx7Eyv/U3jdLz8SZzLcyzNRHVITwL9+ESlr4Q3TxxqbD+/Z+Svhb7kzgFi+kFY12pLKg5CU4JfPh7Z57zLB36easm5j5LaQ1QEA/PI09vgXSaT+MqpDKgIEf50luHUstMVaHvH5Gy3Li9U8wcYk5lClZZkOqADfR3VKZQj4lejru+KTYZ0AeLNUKMqojon3AOnfhVg6G9rmkVXMoZsHlg1uniC4PQLUJsPcw5d3rRAdsgW8WioUP1apb+ICiN8dpOgL7f7zH2AeuXpgWf/6s2x/fQkAuTOIWLmAfSrSMJ4F3ioVit+q1jfxIeCXG2995sgaxsjBjQewxuYxcttNvtMty+5hFrhYKhSfj9N4SLgHBOv3I/5szPb2xHcY//FsZlhb2BM/UP21tmKIPyYINvKYQ9dauST+OpyoAHLzKLkzjUdda7x9Pe3Tu5c/uXkf7BfgzvggYo0uYI0utC/YhDm8SN9Uyw8jqW+kdOWLkAJd20HKmgBd3zrLigA92zNUEUAkmL/nm6UqAngJ5O15w+uoCPBZjHyZaXgd1RMil4FLEVwy1/A6qpPg68AD/A+OyMQ9JPUutZ5wuA5JNfPvMbkXgJPAVWD+Tjomp9FoNBqNRqPRaA4n/wCClVL5E8+zsQAAAABJRU5ErkJggg==' + +const ICON_PAUSE_ALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz/baGJCXLhwsWSuNs3U4kaZNGpJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2e11ZbsnM65/mc73mep+c8B6yRjJLVG7yQzRW0cDDgnI8uOO0vNMrsoAlXTNHVsZmZEHXH5z0W0956zFz1/f4dLcsJXQFLk/CoomoF4Unh0FpBNXlHuEtJx5aFz4TdmhQofGfq8TK/mpwq87fJWiQ8DtZ2YWeqhuM1rKS1rLC8nL5sZlWp1GO+xJHIzc2K7ZXVg06YIAGcTDHBOH4GGZHdjwcfA3KiTrz3N36avMQqsquso7FCijQF3KKuSvaE2KToCZkZ1s3+/+2rnhzylbM7AtD4bBjvLrBvQ6loGF9HhlE6BtsTXOaq8flDGP4QvVjV+g6gbRPOr6pafBcutqD7UY1psV/JJsuaTMLbKbRGofMGmhfLPavcc/IAkQ35qmvY24d+8W9b+gEYQ2fCbyeEygAAAAlwSFlzAAALEwAACxMBAJqcGAAABBdJREFUeJztmk9oFFccxz/ZmEZjdjf+qRIxpFiaqMR2sdUYm1LT9pAqkuylR4uKB20LFnoMeAneSnuQggdpE0HBP0nTGlsKMQjGVLGyIBRNICXYVuIas9kxMZu4uz3M7GaXzibzZnfegHmf0743vze/73x33tt5sz9QKBQKhUKhUCxNiuwOjHZ7i4BG4D3gFZOQBDAM3PQFtdE8cuwBdgMlJiFxYMjI8dBODmEDot3eFcAh4Biw1eKw88AXvqA2bjFHOXAYOArUWhiSBDqB476gFrGoCRA0INrt9QN9wNsi4wxGgF2+oBZeJMcaoB/YZiPHfaBBxASPYIKvsXfxAJuAUxbiTmHv4gE2A9+IDLB8B0S7vVXAqMiYHNT6gtpQjhxvoM/pfEgC1VbXBJE7YDf5XzzAuwscayzA+YvQtVpCxIAacS3C55GRIwsRA4ptCBE9j4wcWYgugi8dygC3BbiNMsBtAW6zzI2kgfbQcvSnytQX8DjUFjjhhhZXDABa0TdTaQLtoYv6xlIubk2BwyZ9R6SrwAUD/nre5Ac+Mjl0YDpeKf2OlG7Az+OtmTu9v9E3LwAVv4wftLL3LyhSDUgkS+jXttRldH0HXEs1fp3c8aZMPSDZgD+n9jGeWOHN6DqH/iYHgAezazc+iu2QKUmuAb9NZE3966G2wCjQBUylOvsm9suUJM8A7cVr9EYz737OAoTaAs+Ay6nOrkg9swm/LFnyDBiYbGF2fpc6A1zKONyR+hCOl/GH1ipLlpwHoWTSw08TWQ85d4CaQHso1Z4CIkAFQO/TD2jwdyADKQaMPG/iXmx9ZlcjcDtX/PXpTTyKvUNl6R3HtUmZAn2RZuEx1yQtho7fATPxV+mJbE+3q5ZNPnn4wj9gFru2eLopHC/zAXRFdvHJOh8lnqij+hw34Ha0hWhy/p+zrzZ0Xn3/wJlPzWK/P33yyrfhvfsAHsfLuKu1UO8/66g+x6fA1cie9OdtpWO8VX55LFds85rO4dWemXS7d+JDR7WBwwb8G9vJwHR1uv1xxe94iuI541cW/zPXUjG/8PVPvc5YbHvO+ELg6BR4OlfJwdU30u1G/5VFxzSv+jGr/WRuI+tL7xZcWwpHDagr76GuvEdozIbltzhUecshRf9nyb8TVAa4LcBtlAFuC3AbEQNy/4CLsdB5ZOTIQsSAfCs3rJxnuEA5HlgNFDHgJvNvcPPBdCNkcGOBY1ZJAoNWgy0bYNTcdC4auDAXctUHGTmGgIt55ugQqRkUXQSPo5ei2WEE+NxC3GdGrB3uA1+KDBAywKi/a0B/hycyHc4BOxerETRyhIF69OJKqySBHxCsEYT8SmWr0M2oxbwmJ4G+4A3mUSpbbeSowfzLiqMveIN2S2UVCoVCoVAoFEuV/wBA1A5tC2KKcwAAAABJRU5ErkJggg==' + +const ICON_STOP_ALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAA0JJREFUeJztml1IVEEYhh9/ckNxM7FMS400zUhcS9J+zSwosTJB8K4f8r6LiC677L7LoqvoRlLsn0hDTDTJLYswTMkykjUt21NZa7VdWCOh0pnFM7PlPFfzzfm+nfe8e87M7jBgMBgMBoPBYJifRMgW+OPjo4CjQA2wHkiYa1GSjAFeoA4457as7zLFUgb44+OTgcvAFpk6hXQAVW7LGrJbYNuAX998C+F787/pALbafRIiJT74KOF/8wDFQK3dZBkDauS1aKPabqKMAetDEKIL21plDNA928tgW6uMAf8lxgDdAnRjDNAtQDfz3oBoHYNOuNxcLD9F8Ncv8cXjHzh464wOKXoM8Hr2cyF72x99RT3NpL7sVK5Fyytwa03ptL6m/AoNSjQYMJKax51l2dP6GzKLCCxcpFqOegNa8veJ9srPY0QGgwC8jYmly1OpWo5aA35ELaAha7OIa57dpXS4T8TXc3eqlAMoNuBpXgUvY6ce802Pb7K7t1XELUtXMZReqFKSWgNury0T7Z2+PhJ9PRR2X8X9LSD6mz37Zip1DGUGWIkrubF8nYh3Pb8HgOvTCBWvHon++lXFTLjcqmSpM6DNc4BAZBQAcd8nKOy+Kq6V9jSJ9rArlq4CdZOhEgOCEZE05mwXceHoIL6UXAZWlzCwugRXYJykwLi4rnIylNkVDoY6SH9OGYcrT0vV1F06zrLBrlCHxG1Ztu5NyRPQlLdHukbVZOj4f4EvcUtozJjao/SMDZH+cWTG3CeJabyIndzOq88sptrlZsFXv6P6HDegs+AA/ugYEZ9oOktGX+uMue2bDnFy+zEAfK44vJ79FN2/6Kg+x1+BGzk7RDvP7yO9v23W3A2PrpAw8XWqNrds1ty5wlED3mRspC0pQ8Tlfe1EBH/Mmh8z/p7KgQcibk7OwreiwEmJzr4C7xJSONJ7T8Rbuq/9tWavt4GI4NSCM5qYRvLrh47oA0XLoA7CahkMZ4wBugXoxhigW4BujAESuWOOqZh7bGuVMcAbghBd2NYqY0BdCEJ0YVurjAHnmTyCFu50AOfsJts2wG1Z34AqwtuE3wclbZ8WDfWobC2TR9H++aOyBoPBYDAYDIb5yk/uoc1SY6poZgAAAABJRU5ErkJggg==' diff --git a/test.js b/test.js new file mode 100644 index 0000000..169e53d --- /dev/null +++ b/test.js @@ -0,0 +1,1226 @@ +const EventMaster = require('barco-eventmaster') +// const upgradeScripts = require('./upgrades') +const _ = require('lodash') +const { InstanceBase, InstanceStatus, Regex, combineRgb, runEntrypoint } = require('@companion-module/base') + +class BarcoInstance extends InstanceBase { + /** + * Create an instance of the module + * + * @param {EventEmitter} system - the brains of the operation + * @param {string} id - the instance ID + * @param {Object} config - saved user configuration parameters + * @since 1.0.0 + */ + constructor(internal) { + super(internal) + } + + GetUpgradeScripts() { + return [upgradeScripts] + } + + async init(config) { + this.config = config + this.eventmasterData = { + presets: { 0: { id: 0, Name: 'no presets loaded yet' } }, + sources: { 0: { id: 0, Name: 'no sources loaded yet', SrcType: 0 } }, + cues: { 0: { id: 0, Name: 'no cues loaded yet' } }, + auxDestinations: { 0: { id: 0, Name: 'no auxes loaded yet' } }, + screenDestinations: { 0: { id: 0, Name: 'no destinations loaded yet' } }, + } + this.CHOICES_FREEZE = [ + { label: 'Freeze', id: '1' }, + { label: 'Unfreeze', id: '0' }, + ] + this.CHOICES_TESTPATTERN = [ + { label: 'Off', id: '0' }, + { label: 'Horizontal Ramp', id: '1' }, + { label: 'Vertical Ramp', id: '2' }, + { label: '100% Color Bars', id: '3' }, + { label: '16x16 grid', id: '4' }, + { label: '32x32 grid', id: '5' }, + { label: 'Burst', id: '6' }, + { label: '75% Color Bars', id: '7' }, + { label: '50% Gray', id: '8' }, + { label: 'Horizontal steps', id: '9' }, + { label: 'Vertical steps', id: '10' }, + { label: 'White', id: '11' }, + { label: 'Black', id: '12' }, + { label: 'SMPTE Bars', id: '13' }, + { label: 'H Alignment', id: '14' }, + { label: 'V Alignment', id: '15' }, + { label: 'HV Alignment', id: '16' }, + { label: 'Circle Alignment', id: '17' }, + { label: 'Red', id: '18' }, + { label: 'Green', id: '19' }, + { label: 'Blue', id: '20' }, + ] + + this.updateStatus(InstanceStatus.UnknownWarning) + this.connection() + + this.log(`debug`, 'creating eventmaster') + } + + async configUpdated(config) { + this.config = config + this.getAllDataFromEventmaster().then(() => { + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + }) + } + + /** + * Connection + */ + connection() { + if (this.eventmaster === undefined && this.config !== undefined) { + this.eventmaster = new EventMaster(this.config.host) + this.updateStatus(InstanceStatus.Ok) + this.getAllDataFromEventmaster().then(() => { + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + }) + if (this.retry_interval) clearInterval(this.retry_interval) + } else { + this.retry_interval = setInterval(() => { + if (this.eventmaster === undefined && this.config !== undefined) { + this.eventmaster = new EventMaster(this.config.host) + this.updateStatus(InstanceStatus.Ok) + this.getAllDataFromEventmaster().then(() => { + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + }) + clearInterval(this.retry_interval) + } + }, 15000) + } + } + + /** + * Return config fields for web config + * @returns config fields for web config + */ + getConfigFields() { + return [ + { + type: 'static-text', + id: 'info', + width: 12, + label: 'Information', + value: + 'This module uses the official EventMaster JSON API. If the status is OK, it ONLY means that the IP configured answers on icmp ping. The module will update presets and actions every 15 seconds ', + }, + { + type: 'textinput', + id: 'host', + label: 'Target IP', + width: 6, + default: '192.168.0.175', + regex: Regex.IP, + }, + { + type: 'dropdown', + id: 'usermode', + label: 'Multiuser Mode', + width: 6, + default: 'userSingle', + choices: [ + { id: 'userSingle', label: 'Single User' }, + { id: 'operator', label: 'Multiuser Normal Operator' }, + { id: 'super_user', label: 'Multiuser Super Operator ' }, + ], + }, + { + type: 'textinput', + id: 'superPassword', + label: 'Multiuser Super Operator Password', + width: 6, + default: '', + }, + { + type: 'textinput', + id: 'operatorId', + label: 'Multiuser Operator Id (number)', + width: 6, + default: '0', + }, + ] + } + + /** + * When module gets deleted + */ + async destroy() { + if (this.retry_interval) clearInterval(this.retry_interval) + delete this.eventmaster + this.log(`debug`, 'destroy') + } + + /** + * Converting a data array into an object + * @param {*} array + * @param {*} key + * @returns Object + */ + convertArrayToObject = (array, key) => { + const initialValue = {} + return array.reduce((obj, item) => { + return { + ...obj, + [item[key]]: item, + } + }, initialValue) + } + + /** + * Load all needed data from Eventmaster + */ + // Presets + async getPresetsFromEventmaster() { + if (this.eventmaster !== undefined) { + // List of presets + const Presets = new Promise((resolve, reject) => { + this.eventmaster + .listPresets(-1, -1, (obj, res) => { + if (res !== undefined) { + this.eventmasterData.presets = this.convertArrayToObject(res, 'id') + } + resolve() + }) + .on('error', (err) => { + reject(err) + }) + }) + await Presets.catch((err) => { + this.log('error', 'EventMaster Presets Error: ' + err) + }) + } + } + // Sources + async getSourcesFromEventmaster() { + if (this.eventmaster !== undefined) { + // List of sources + const Sources = new Promise((resolve, reject) => { + this.eventmaster + .listSources(0, (obj, res) => { + if (res !== undefined) { + this.eventmasterData.sources = this.convertArrayToObject(res, 'id') + } + resolve() + }) + .on('error', (err) => { + reject(err) + }) + }) + await Sources.catch((err) => { + this.log('error', 'EventMaster Sources Error: ' + err) + }) + } + } + // Cues + async getCuesFromEventmaster() { + if (this.eventmaster !== undefined) { + // List of Cues + const Cues = new Promise((resolve, reject) => { + this.eventmaster + .listCues(0, (obj, res) => { + if (res !== undefined) { + this.eventmasterData.cues = this.convertArrayToObject(res, 'id') + } + resolve() + }) + .on('error', (err) => { + reject(err) + }) + }) + await Cues.catch((err) => { + this.log('error', 'EventMaster Cues Error: ' + err) + }) + } + } + // Destination + async getDestinationsFromEventmaster() { + if (this.eventmaster !== undefined) { + // List of destinations + const Destinations = new Promise((resolve, reject) => { + this.eventmaster + .listDestinations(0, (obj, res) => { + if (res !== undefined) { + this.eventmasterData.screenDestinations = this.convertArrayToObject(res.ScreenDestination, 'id') + this.eventmasterData.auxes = this.convertArrayToObject(res.AuxDestination, 'id') + } + resolve() + }) + .on('error', (err) => { + reject(err) + }) + }) + + await Destinations.catch((err) => { + this.log('error', 'EventMaster Destinations Error: ' + err) + }) + } + } + async getAllDataFromEventmaster() { + await this.getPresetsFromEventmaster().catch((err) => { + this.log('error', err) + }) + await this.getSourcesFromEventmaster().catch((err) => { + this.log('error', err) + }) + await this.getCuesFromEventmaster().catch((err) => { + this.log('error', err) + }) + await this.getDestinationsFromEventmaster().catch((err) => { + this.log('error', err) + }) + } + /** + * Get all the actions + * @returns actions + */ + getActions() { + // Needed for user level stuff + const user = this.config.usermode + const password = this.config.superPassword + const id = this.config.operatorId + // this.log('debug'`${user}, ${password}, ${id}`) + const actions = {} // main array + + // Load all preset data + let CHOICES_PRESETS = [] + Object.keys(this.eventmasterData.presets).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_PRESETS.push({ + label: this.eventmasterData.presets[key].presetSno + ' ' + _.unescape(this.eventmasterData.presets[key].Name), + id: this.eventmasterData.presets[key].id, + sort: this.eventmasterData.presets[key].presetSno, + }) + }) + let CHOICES_SOURCES = [] + Object.keys(this.eventmasterData.sources).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_SOURCES.push({ + label: this.eventmasterData.sources[key].Name, + id: this.eventmasterData.sources[key].id, + InputCfgIndex: this.eventmasterData.sources[key].InputCfgIndex, + SrcType: this.eventmasterData.sources[key].SrcType, + StillIndex: this.eventmasterData.sources[key].StillIndex, + }) + }) + let CHOICES_CUES = [] + Object.keys(this.eventmasterData.cues).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_CUES.push({ + label: this.eventmasterData.cues[key].Name, + id: this.eventmasterData.cues[key].id, + }) + }) + + let CHOICES_SCREENDESTINATIONS = [] + Object.keys(this.eventmasterData.screenDestinations).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_SCREENDESTINATIONS.push({ + label: this.eventmasterData.screenDestinations[key].Name, + id: this.eventmasterData.screenDestinations[key].id, + }) + }) + + let CHOICES_AUXDESTINATIONS = [] + Object.keys(this.eventmasterData.auxDestinations).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_AUXDESTINATIONS.push({ + label: this.eventmasterData.auxDestinations[key].Name, + id: this.eventmasterData.auxDestinations[key].id, + }) + }) + + actions['preset_in_pvw'] = { + name: 'Preset in PVW', + options: [ + { + type: 'dropdown', + label: 'Preset', + id: 'preset_in_pvw', + minChoicesForSearch: 5, + choices: CHOICES_PRESETS.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: (action) => { + this.log('info', 'Recall to PVW id:' + action.options.preset_in_pvw) + + if (this.eventmaster !== undefined) { + if (user == 'operator') { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pvw), 0, user, id, (obj, res) => { + this.log('debug', 'recall preset pvw response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else if (user == 'super_user') { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pvw), 0, user, password, (obj, res) => { + this.log('debug', 'recall preset pvw response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pvw), 0, user, (obj, res) => { + this.log('debug', 'recall preset pvw response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + } + }, + } + actions['preset_in_pgm'] = { + name: 'Preset in PGM', + options: [ + { + type: 'dropdown', + label: 'Preset', + id: 'preset_in_pgm', + minChoicesForSearch: 5, + choices: CHOICES_PRESETS.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: (action) => { + this.log('info', 'Recall to PGM id:' + action.options.preset_in_pgm) + + if (this.eventmaster !== undefined) { + if (user == 'operator') { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pgm), 1, user, id, (obj, res) => { + this.log('debug', 'recall preset pgm response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else if (user == 'super_user') { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pgm), 1, user, password, (obj, res) => { + this.log('debug', 'recall preset pgm response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pgm), 1, user, null, (obj, res) => { + this.log('debug', 'recall preset pgm response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + } + }, + } + + actions['trans_all'] = { + name: 'Take/Trans Active', + options: [], + callback: () => { + this.log('info', 'Trans/Take All') + if (this.eventmaster !== undefined) { + if (user == 'operator') { + this.eventmaster + .allTrans(user, id, (obj, res) => { + this.log('debug', 'trans all response: ' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else if (user == 'super_user') { + this.eventmaster + .allTrans(user, password, (obj, res) => { + this.log('debug', 'trans all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else { + this.eventmaster + .allTrans(user, (obj, res) => { + this.log('debug', 'trans all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + } + }, + } + actions['cut_all'] = { + name: 'Cut Active', + options: [], + callback: () => { + this.log('info', 'Cut All') + + if (this.eventmaster !== undefined) { + if (user == 'operator') { + this.eventmaster + .cut(user, id, (obj, res) => { + this.log('debug', 'cut all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else if (user == 'super_user') { + this.eventmaster + .cut(user, password, (obj, res) => { + this.log('debug', 'cut all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else { + this.eventmaster + .cut(user, (obj, res) => { + this.log('debug', 'cut all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + } + }, + } + actions['recall_next'] = { + name: 'Recall Next Preset', + options: [], + callback: () => { + this.log('info', 'recall_next') + + if (this.eventmaster !== undefined) { + this.eventmaster + .recallNextPreset((obj, res) => { + this.log('debug', 'recall next response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['frzSource'] = { + name: 'Freeze/Unfreeze Source', + options: [ + { + type: 'dropdown', + label: 'freeze/unfreeze', + id: 'frzType', + choices: this.CHOICES_FREEZE, + default: '1', + }, + { + type: 'dropdown', + label: 'Source', + id: 'frzSource', + minChoicesForSearch: 5, + choices: CHOICES_SOURCES, + default: '0', + }, + ], + callback: (action) => { + this.log('info', '(un)freeze') + + if (this.eventmaster !== undefined) { + this.eventmaster + .freezeDestSource( + 0, + parseInt(action.options.frzSource), + 0, + parseInt(action.options.frzType), + (obj, res) => { + this.log('debug', '(un)freeze all response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['frzScreenDest'] = { + name: 'Freeze/Unfreeze Screen Destination', + options: [ + { + type: 'dropdown', + label: 'freeze/unfreeze', + id: 'frzType', + choices: this.CHOICES_FREEZE, + default: '1', + }, + { + type: 'dropdown', + label: 'Screen Destination', + id: 'frzDest', + choices: CHOICES_SCREENDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log('info', '(un)freeze Screen Destination') + + if (this.eventmaster !== undefined) { + this.eventmaster + .freezeDestSource(2, parseInt(action.options.frzDest), 0, parseInt(action.options.frzType), (obj, res) => { + this.log('debug', 'freeze all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['frzAuxDest'] = { + name: 'Freeze/Unfreeze Aux Destination', + options: [ + { + type: 'dropdown', + label: 'freeze/unfreeze', + id: 'frzType', + choices: this.CHOICES_FREEZE, + default: '1', + }, + { + type: 'dropdown', + label: 'Aux Destination', + id: 'frzDest', + choices: CHOICES_AUXDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log('info', '(un)freeze Aux Destination') + + if (this.eventmaster !== undefined) { + this.eventmaster + .freezeDestSource(3, parseInt(action.options.frzDest), 0, parseInt(action.options.frzType), (obj, res) => { + this.log('debug', 'freeze all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + + actions['play_cue'] = { + name: 'Play cue', + options: [ + { + type: 'dropdown', + label: 'cue', + id: 'cueNumber', + minChoicesForSearch: 5, + choices: CHOICES_CUES, + default: '0', + }, + ], + callback: (action) => { + this.log('info', 'play_cue:' + action.options.cueNumber) + + if (this.eventmaster !== undefined) { + this.eventmaster + .activateCueById(parseInt(action.options.cueNumber), 0, (obj, res) => { + this.log('debug', 'activateCue response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['stop_cue'] = { + name: 'Stop cue', + options: [ + { + type: 'dropdown', + label: 'cue', + id: 'cueNumber', + minChoicesForSearch: 5, + choices: CHOICES_CUES, + default: '0', + }, + ], + callback: (action) => { + this.log('info', 'stop_cue:' + action.options.cueNumber) + + if (this.eventmaster !== undefined) { + this.eventmaster + .activateCueById(parseInt(action.options.cueNumber), 2, (obj, res) => { + this.log('debug', 'activateCue response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['change_aux'] = { + name: 'Change aux on destination', + options: [ + { + type: 'dropdown', + label: 'Source', + id: 'source', + minChoicesForSearch: 5, + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Destination', + id: 'auxDestination', + choices: CHOICES_AUXDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log('info', `change_aux, source: ${action.options.source} destination ${action.options.auxDestination}`) + + if (this.eventmaster !== undefined) { + this.eventmaster + .changeAuxContent( + parseInt(action.options.auxDestination), + -1, + parseInt(action.options.source), + (obj, res) => { + this.log('debug', 'changeAuxContent response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['armUnarmDestination'] = { + name: 'arm screen destinations', + options: [ + { + type: 'dropdown', + label: 'arm/un-arm', + id: 'armUnarm', + choices: [ + { label: 'arm', id: 1 }, + { label: 'disarm', id: 0 }, + ], + default: '1', + }, + { + type: 'dropdown', + label: 'destination', + id: 'screenDestinations', + choices: CHOICES_SCREENDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log( + 'info', + `armUnarmDestination, arm/unarm ${action.options.armUnarm}, destination ${action.options.screenDestinations}` + ) + if (this.eventmaster !== undefined) { + this.eventmaster + .armUnarmDestination( + parseInt(action.options.armUnarm), + { id: action.options.screenDestinations }, + null, + (obj, res) => { + this.log('debug', 'armUnarmDestination response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'Eventmaster Error: ' + err) + }) + } + }, + } + actions['armUnarmAuxDestination'] = { + name: 'arm aux destinations', + options: [ + { + type: 'dropdown', + label: 'arm/un-arm', + id: 'armUnarm', + choices: [ + { label: 'arm', id: 1 }, + { label: 'disarm', id: 0 }, + ], + default: '1', + }, + { + type: 'dropdown', + label: 'destination', + id: 'auxDestinations', + choices: CHOICES_AUXDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log( + 'info', + `armUnarmAuxDestination, arm/unarm ${action.options.armUnarm}, destination ${action.options.auxDestinations}` + ) + if (this.eventmaster !== undefined) { + this.eventmaster + .armUnarmDestination( + parseInt(action.options.armUnarm), + null, + { id: action.options.auxDestinations }, + (obj, res) => { + this.log('debug', 'armUnarmAuxDestination response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'Eventmaster Error: ' + err) + }) + } + }, + } + actions['subscribe'] = { + label: 'subscribe to SourceChanged', + options: [ + { + type: 'textinput', + label: 'IP to send JSON to', + id: 'ip', + regex: this.REGEX_IP, + }, + { + type: 'textinput', + label: 'Portnumber', + id: 'port', + }, + ], + callback: (action) => { + this.log('info', `subscribe to localhost`) + + if (this.eventmaster !== undefined) { + this.eventmaster + .subscribe( + action.options.ip, + action.options.port, + ['SourceChanged', 'BGSourceChanged', 'ScreenDestChanged', 'AUXDestChanged'], + (obj, res) => { + this.log('debug', 'subscribe response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['unsubscribe'] = { + label: 'unsubscribe to SourceChanged', + options: [ + { + type: 'textinput', + label: 'IP to send JSON to', + id: 'ip', + regex: this.REGEX_IP, + }, + { + type: 'textinput', + label: 'Portnumber', + id: 'port', + }, + ], + callback: (action) => { + this.log('info', `unsubscribe`) + + if (this.eventmaster !== undefined) { + this.eventmaster + .unsubscribe( + action.options.ip, + action.options.port, + ['SourceChanged', 'BGSourceChanged', 'ScreenDestChanged', 'AUXDestChanged'], + (obj, res) => { + this.log('debug', 'unsubscribe response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['testpattern_on_AUX'] = { + name: 'Set testpattern for AUX', + options: [ + { + type: 'dropdown', + label: 'aux destination', + id: 'auxDestination', + choices: CHOICES_AUXDESTINATIONS, + }, + { + type: 'dropdown', + label: 'Type number', + id: 'testPattern', + choices: this.CHOICES_TESTPATTERN, + }, + ], + callback: (action) => { + this.log( + 'info', + `change_testAuxPattern, id: ${action.options.testPattern} destination ${action.options.auxDestination}` + ) + + if (this.eventmaster !== undefined) { + this.eventmaster + .changeAuxContentTestPattern( + parseInt(action.options.auxDestination), + parseInt(action.options.testPattern), + (obj, res) => { + debug('changeAuxContentTestPattern response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['testpattern_on_SCREEN'] = { + name: 'Set testpattern for screen destinations', + options: [ + { + type: 'dropdown', + label: 'destination', + id: 'screenDestination', + choices: CHOICES_SCREENDESTINATIONS, + }, + { + type: 'dropdown', + label: 'Type number', + id: 'testPattern', + choices: this.CHOICES_TESTPATTERN, + }, + ], + callback: (action) => { + this.log( + 'info', + `change_testPattern, id: ${action.options.testPattern} destination ${action.options.screenDestination}` + ) + + if (this.eventmaster !== undefined) { + this.eventmaster + .changeContentTestPattern( + parseInt(action.options.screenDestination), + parseInt(action.options.testPattern), + (obj, res) => { + debug('changeAuxContentTestPattern response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['activateSourceMainBackup'] = { + name: 'Configure Main/Backup', + options: [ + { + type: 'dropdown', + label: 'Source', + id: 'source', + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Backup 1', + id: 'backup1', + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Backup 2', + id: 'backup2', + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Backup 3', + id: 'backup3', + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Backup state', + id: 'BackUpState', + choices: [ + { id: '-1', label: 'Primary' }, + { id: '0', label: 'Backup 1' }, + { id: '1', label: 'Backup 2' }, + { id: '2', label: 'Backup 3' }, + ], + default: '-1', + }, + ], + callback: (action) => { + let source = parseInt(action.options.source) + let backup1 = parseInt(action.options.backup1) + let backup2 = parseInt(action.options.backup2) + let backup3 = parseInt(action.options.backup3) + let BackUpState = parseInt(action.options.BackUpState) + let backup1_ScrType = 0 + let backup2_ScrType = 0 + let backup3_ScrType = 0 + let source_InputCfgIndex = 0 + let backup1_InputCfgIndex = 0 + let backup2_InputCfgIndex = 0 + let backup3_InputCfgIndex = 0 + console.log(CHOICES_SOURCES) + CHOICES_SOURCES.forEach((iterator) => { + if (source === iterator.id) { + source_InputCfgIndex = iterator.InputCfgIndex + } + if (backup1 === iterator.id) { + backup1_ScrType = iterator.SrcType + if (backup1_ScrType === 1) { + backup1_InputCfgIndex = iterator.StillIndex + } else { + backup1_InputCfgIndex = iterator.InputCfgIndex + } + } + if (backup2 === iterator.id) { + backup2_ScrType = iterator.SrcType + if (backup2_ScrType === 1) { + backup2_InputCfgIndex = iterator.StillIndex + } else { + backup2_InputCfgIndex = iterator.InputCfgIndex + } + } + if (backup3 === iterator.id) { + backup3_ScrType = iterator.SrcType + if (backup3_ScrType === 1) { + backup3_InputCfgIndex = iterator.StillIndex + } else { + backup3_InputCfgIndex = iterator.InputCfgIndex + } + } + }) + if (this.eventmaster !== undefined) { + this.log( + 'debug', + `activateSourceMainBackup: Source:${source_InputCfgIndex}, BU1Type:${backup1_ScrType}, BU1${backup1_InputCfgIndex} BU2Type:${backup2_ScrType}, BU2${backup2_InputCfgIndex}, BU3Type:${backup3_ScrType}, BU3${backup3_InputCfgIndex}, State:${BackUpState}` + ) + this.eventmaster + .activateSourceMainBackup( + source, + backup1_ScrType, + backup1, + backup2_ScrType, + backup2, + backup3_ScrType, + backup3, + BackUpState, + (obj, res) => { + debug('activateSourceMainBackup response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['destinationGroup'] = { + name: 'Activate Destination Group (Count from 0)', + options: [ + { + type: 'textinput', + label: 'id of destination', + id: 'id', + default: '0', + }, + ], + callback: (action) => { + this.log('info', `destinationGroup: ${action.options.id}`) + if (this.eventmaster !== undefined) { + this.eventmaster + .activateDestGroup(parseInt(action.options.id), (obj, res) => { + this.log('debug', 'activateDestGroup response ' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + return actions + } + /** + * Get all the presets + * @returns presets + */ + getPresets() { + const presets = {} // main array + + presets['Take'] = { + type: 'button', + category: 'Basics', + style: { + text: 'Take', + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(255, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: 'trans_all', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['Cut'] = { + type: 'button', + category: 'Basics', + style: { + text: 'Cut', + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(255, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: 'cut_all', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['Recall_next'] = { + type: 'button', + category: 'Basics', + style: { + text: 'Recall next', + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(235, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: 'recall_next', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + //Load presets from eventmaster into presets from companion + Object.keys(this.eventmasterData.presets).forEach((key) => { + presets[`PVW_${this.eventmasterData.presets[key].id}`] = { + type: 'button', + category: 'Presets to PVW', + style: { + text: this.eventmasterData.presets[key].presetSno + ' ' + _.unescape(this.eventmasterData.presets[key].Name), + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(235, 235, 235), + }, + steps: [ + { + down: [ + { + actionId: 'preset_in_pvw', + options: { + preset_in_pvw: this.eventmasterData.presets[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets[`PGM_${this.eventmasterData.presets[key].id}`] = { + type: 'button', + category: 'Presets to PGM', + style: { + text: this.eventmasterData.presets[key].presetSno + ' ' + _.unescape(this.eventmasterData.presets[key].Name), + size: '14', + color: combineRgb(255, 0, 0), + bgcolor: combineRgb(235, 235, 235), + }, + steps: [ + { + down: [ + { + actionId: 'preset_in_pgm', + options: { + preset_in_pgm: this.eventmasterData.presets[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + }) + + Object.keys(this.eventmasterData.cues).forEach((key) => { + this.log('debug', `Cue_${this.eventmasterData.cues[key].Name}_${key}`) + presets[`Cue_${this.eventmasterData.cues[key].id}`] = { + type: 'button', + category: 'Cues', + style: { + text: this.eventmasterData.cues[key].Name, + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(66, 244, 226), + }, + steps: [ + { + down: [ + { + actionId: 'play_cue', + options: { + cueNumber: this.eventmasterData.cues[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + }) + + return presets + } +} + +runEntrypoint(BarcoInstance, []) \ No newline at end of file diff --git a/upgrades.js b/upgrades.js new file mode 100644 index 0000000..2445f97 --- /dev/null +++ b/upgrades.js @@ -0,0 +1,13 @@ +module.exports = [ + /* + * Place your upgrade scripts here + * Remember that once it has been added it cannot be removed! + */ + function (context, props) { + return { + updatedConfig: null, + updatedActions: [], + updatedFeedbacks: [], + } + }, +] diff --git a/variables.js b/variables.js new file mode 100644 index 0000000..2497d0d --- /dev/null +++ b/variables.js @@ -0,0 +1,37 @@ +module.exports = async function (self) { + self.setVariableDefinitions([ + { variableId: 'project_name', name: "Project Name"}, + + { variableId: 'speaker_play_status', name: "Speaker Play Status"}, + { variableId: 'speaker_current', name: "Speaker Current Preset"}, + { variableId: 'speaker_timer', name: "Speaker Timer H:M:S"}, + { variableId: 'speaker_timer_ms', name: "Speaker Timer M:S"}, + { variableId: 'speaker_timer_h', name: "Speaker Timer hour"}, + { variableId: 'speaker_timer_m', name: "Speaker Timer minute"}, + { variableId: 'speaker_timer_s', name: "Speaker Timer second"}, + + { variableId: 'session_play_status', name: "Session Play Status"}, + { variableId: 'session_current', name: "Session Current Preset"}, + { variableId: 'session_timer', name: 'Session Timer H:M:S' }, + { variableId: 'session_timer_ms', name: "Session Timer M:S"}, + { variableId: 'session_timer_h', name: "Session Timer hour"}, + { variableId: 'session_timer_m', name: "Session Timer minute"}, + { variableId: 'session_timer_s', name: "Session Timer second"}, + + { variableId: 'all_play_status', name: "All Play Status"}, + + { variableId: 'external_timer', name: "External Timer H:M:S"}, + { variableId: 'external_timer_ms', name: "External Timer M:S"}, + { variableId: 'external_timer_h', name: "External Timer hour"}, + { variableId: 'external_timer_m', name: "External Timer minute"}, + { variableId: 'external_timer_s', name: "External Timer second"}, + + { variableId: 'blackout', name: "Blackout"}, + + { variableId: 'message_show', name: "Message Show/Hide"}, + + { variableId: 'switch_timer_clock', name: "Switch Timer Clock"}, + + { variableId: 'ndi_start', name: "NDI Start/Stop"}, + ]) +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..b05c620 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1958 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@companion-module/base@npm:~1.11.3": + version: 1.11.3 + resolution: "@companion-module/base@npm:1.11.3" + dependencies: + ajv: "npm:^8.17.1" + colord: "npm:^2.9.3" + ejson: "npm:^2.2.3" + eventemitter3: "npm:^5.0.1" + mimic-fn: "npm:^3.1.0" + nanoid: "npm:^3.3.8" + p-queue: "npm:^6.6.2" + p-timeout: "npm:^4.1.0" + tslib: "npm:^2.8.1" + checksum: 10c0/19acbc544de97ed8f02abf03e1d657085e51f0e92363456a84bdc1975723ba1bdfc0e943ff17444cb4e6a2b588abb794a9c5b48efb4d784be32784362e7c4efd + languageName: node + linkType: hard + +"@companion-module/tools@npm:^2.3.0": + version: 2.3.0 + resolution: "@companion-module/tools@npm:2.3.0" + dependencies: + "@eslint/js": "npm:^9.19.0" + eslint-config-prettier: "npm:^10.0.1" + eslint-plugin-n: "npm:^17.15.1" + eslint-plugin-prettier: "npm:^5.2.3" + find-up: "npm:^7.0.0" + parse-author: "npm:^2.0.0" + semver: "npm:^7.7.1" + tar: "npm:^7.4.3" + webpack: "npm:^5.97.1" + webpack-cli: "npm:^6.0.1" + zx: "npm:^8.3.2" + peerDependencies: + "@companion-module/base": ^1.11.0 + eslint: ^9.0.0 + prettier: ^3.0.0 + typescript-eslint: ^8.2.0 + peerDependenciesMeta: + eslint: + optional: true + prettier: + optional: true + typescript-eslint: + optional: true + bin: + companion-generate-manifest: scripts/generate-manifest.js + companion-module-build: scripts/build.js + companion-module-check: scripts/check.js + checksum: 10c0/49baa2415a62e9763d8d185d3d944a68cbfb5e41f2d382a0d8e0cd69902ccc4a80a92783a0ab95c9b5fbc0ca4464c028423bb5fc3347149cd1bae1ab6bf4b10c + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.6.1": + version: 0.6.3 + resolution: "@discoveryjs/json-ext@npm:0.6.3" + checksum: 10c0/778a9f9d5c3696da3c1f9fa4186613db95a1090abbfb6c2601430645c0d0158cd5e4ba4f32c05904e2dd2747d57710f6aab22bd2f8aa3c4e8feab9b247c65d85 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.1.2": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: "npm:^3.3.0" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.5.0, @eslint-community/eslint-utils@npm:^4.7.0": + version: 4.7.0 + resolution: "@eslint-community/eslint-utils@npm:4.7.0" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.11.0": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/js@npm:^9.19.0": + version: 9.29.0 + resolution: "@eslint/js@npm:9.29.0" + checksum: 10c0/d0ccf37063fa27a3fae9347cb044f84ca10b5a2fa19ffb2b3fedf3b96843ac1ff359ea9f0ab0e80f2f16fda4cb0dc61ea0fed0375090f050fe0a029e7d6de3a3 + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 10c0/376fc11cf5a967318ba3ddd9d8e91be528eab6af66810a713c49b0c3f8dc67e9949452c51c38ab1b19aa618fb5e8594da5a249977e26b1e7fea1ee5a1fcacc74 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: 10c0/78055e2526108331126366572045355051a930f017d1904a4f753d3f4acee8d92a14854948095626f6163cffc24ea4e3efa30637417bb866b84743dec7ef6fd9 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 10c0/bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.3 + resolution: "@jridgewell/source-map@npm:0.3.3" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.0" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 10c0/f341e3ed1e9dfe5ae95201e9e820bee7c0518f20f2831b9964ce6c4bfe59477fb7e3257a45fac193cb4aea0019f0a4f8ed68abb12fd3956610317946f7341e3f + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 10c0/3fbaff1387c1338b097eeb6ff92890d7838f7de0dde259e4983763b44540bfd5ca6a1f7644dc8ad003a57f7e80670d5b96a8402f1386ba9aee074743ae9bad51 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: 10c0/0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" + dependencies: + "@jridgewell/resolve-uri": "npm:3.1.0" + "@jridgewell/sourcemap-codec": "npm:1.4.14" + checksum: 10c0/e5045775f076022b6c7cc64a7b55742faa5442301cb3389fd0e6712fafc46a2bb13c68fa1ffaf7b8bb665a91196f050b4115885fc802094ebc06a1cf665935ac + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.2.4": + version: 0.2.7 + resolution: "@pkgr/core@npm:0.2.7" + checksum: 10c0/951f5ebf2feb6e9dbc202d937f1a364d60f2bf0e3e53594251bcc1d9d2ed0df0a919c49ba162a9499fce73cf46ebe4d7959a8dfbac03511dbe79b69f5fedb804 + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.6": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.9": + version: 7.0.12 + resolution: "@types/json-schema@npm:7.0.12" + checksum: 10c0/2c39946ae321fe42d085c61a85872a81bbee70f9b2054ad344e8811dfc478fdbaf1ebf5f2989bb87c895ba2dfc3b1dcba85db11e467bbcdc023708814207791c + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.2.5 + resolution: "@types/node@npm:20.2.5" + checksum: 10c0/1c3db8a4ceb5e5d12e7cb140e37c14a16ce013084c6d65579b91cefbe0ecaca57d85093d968172b11c3d1d95bcbc5d972b08aa3dc3935206fb39bc6c10751102 + languageName: node + linkType: hard + +"@typescript-eslint/project-service@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/project-service@npm:8.34.1" + dependencies: + "@typescript-eslint/tsconfig-utils": "npm:^8.34.1" + "@typescript-eslint/types": "npm:^8.34.1" + debug: "npm:^4.3.4" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/9333a890625f6777054db17a6b299281ae7502bb7615261d15b885a75b8cf65fc91591389c93b37ecd14b651d8e94851dac8718e5dcc8ed0600533535dae855c + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/scope-manager@npm:8.34.1" + dependencies: + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" + checksum: 10c0/2af608fa3900f4726322e33bf4f3a376fdace3ac0f310cf7d9256bbc2905c3896138176a47dd195d2c2229f27fe43f5deb4bc7729db2eb18389926dedea78077 + languageName: node + linkType: hard + +"@typescript-eslint/tsconfig-utils@npm:8.34.1, @typescript-eslint/tsconfig-utils@npm:^8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.34.1" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/8d1ead8b7c279b48e2ed96f083ec119a9aeea1ca9cdd40576ec271b996b9fd8cfa0ddb0aafbb4e14bc27fc62c69c5be66d39b1de68eab9ddd7f1861da267423d + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:8.34.1, @typescript-eslint/types@npm:^8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/types@npm:8.34.1" + checksum: 10c0/db1b3dce6a70b28ddb13c76fbb5983240d9395656df5f7cbd99bfd9905e39c0dab2132870f01dbc406b48739c437f7d344a879a824cedaba81b91a53110dc23a + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.34.1" + dependencies: + "@typescript-eslint/project-service": "npm:8.34.1" + "@typescript-eslint/tsconfig-utils": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/4ee7249db91b9840361f34f80b7b6d646a3af159c7298d79a33d8a11c98792fd3a395343e5e17e0fa29529e8f0113bac8baadcef90d1e140bd736a48f0485042 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^8.26.1": + version: 8.34.1 + resolution: "@typescript-eslint/utils@npm:8.34.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.7.0" + "@typescript-eslint/scope-manager": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/typescript-estree": "npm:8.34.1" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/e3085877f7940c02a37653e6bc52ac6cde115e755b1f788fe4331202f371b3421cc4d0878c7d3eb054e14e9b3a064496a707a73eac471cb2b73593b9e9d4b998 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.34.1" + dependencies: + "@typescript-eslint/types": "npm:8.34.1" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/0e5a9b3d93905d16d3cf8cb5fb346dcc6f760482eb7d0ac209aefc09a32f78ef28a687634df6ad08e81fb3e1083e8805f34472de6bbc501c0105ad654d518f40 + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/configtest@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10c0/edd24ecfc429298fe86446f7d7daedfe82d72e7f6236c81420605484fdadade5d59c6bcef3d76bd724e11d9727f74e75de183223ae62d3a568b2d54199688cbe + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/info@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10c0/b23b94e7dc8c93e79248f20d5f1bd0fbb7b9ba4b012803e2fdc5440b8f2ee1f3eca7f4933bbca346c8168673bf572b1858169a3cb2c17d9b8bcd833d480c2170 + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/serve@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 10c0/65245e45bfa35e11a5b30631b99cfed0c1b39b2cc8320fa2d2a4185264535618827d349ec032c58af4201d6236cbc43bec894fcb840fdd06314611537a80e210 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 + languageName: node + linkType: hard + +"acorn@npm:^8.14.0": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + peerDependencies: + ajv: ^8.8.2 + checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.17.1, ajv@npm:^8.9.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"author-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "author-regex@npm:1.0.0" + checksum: 10c0/3f3a5ad6660be010bd5b979fac180f435bd9615e81db2b1cdac081eb3f639461f6c3927ced956e377a5c91cc789e3de3a3e900e296c1423971043c8fd8be0b73 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.24.0": + version: 4.25.0 + resolution: "browserslist@npm:4.25.0" + dependencies: + caniuse-lite: "npm:^1.0.30001718" + electron-to-chromium: "npm:^1.5.160" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.3" + bin: + browserslist: cli.js + checksum: 10c0/cc16c55b4468b18684a0e1ca303592b38635b1155d6724f172407192737a2f405b8030d87a05813729592793445b3d15e737b0055f901cdecccb29b1e580a1c5 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001718": + version: 1.0.30001723 + resolution: "caniuse-lite@npm:1.0.30001723" + checksum: 10c0/e019503061759b96017c4d27ddd7ca1b48533eabcd0431b51d2e3156f99f6b031075e46c279c0db63424cdfc874bba992caec2db51b922a0f945e686246886f6 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: 10c0/080ce2d20c2b9e0f8461a380e9585686caa768b1c834a464470c9dc74cda07f27611c7b727a2cd768a9cecd033297fdec4ce01f1e58b62227882c1059dec321c + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"colord@npm:^2.9.3": + version: 2.9.3 + resolution: "colord@npm:2.9.3" + checksum: 10c0/9699e956894d8996b28c686afe8988720785f476f59335c80ce852ded76ab3ebe252703aec53d9bef54f6219aea6b960fb3d9a8300058a1d0c0d4026460cd110 + languageName: node + linkType: hard + +"colorette@npm:^2.0.14": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3": + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/aa82ce7ac0814a27e6f2b738c5a7cf1fa21a3558a1e42df449fc96541ba3ba731e4d3ecffa4435348808a86212f287c6f20a1ee551ef1ff95d01cfec5f434944 + languageName: node + linkType: hard + +"debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + +"ejson@npm:^2.2.3": + version: 2.2.3 + resolution: "ejson@npm:2.2.3" + checksum: 10c0/648ea347f5e57441b7b9341adc6de244445b6da1d0e7747ea7a083f906299b92e4c44fc29e6de0b240d8fa4a73159e85f9367780d7af2ecbc50aae8a4e4961ae + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.160": + version: 1.5.170 + resolution: "electron-to-chromium@npm:1.5.170" + checksum: 10c0/138c6d293b310729f7550f6d36ae4b2bdd0453220e8b11d8780395cf38c9ae816b1f30a3978d790f1951cfa89e7c7911af4a779094c33ae167c89c7ba6751834 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.17.1": + version: 5.17.1 + resolution: "enhanced-resolve@npm:5.17.1" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/81a0515675eca17efdba2cf5bad87abc91a528fc1191aad50e275e74f045b41506167d420099022da7181c8d787170ea41e4a11a0b10b7a16f6237daecb15370 + languageName: node + linkType: hard + +"envinfo@npm:^7.14.0": + version: 7.14.0 + resolution: "envinfo@npm:7.14.0" + bin: + envinfo: dist/cli.js + checksum: 10c0/059a031eee101e056bd9cc5cbfe25c2fab433fe1780e86cf0a82d24a000c6931e327da6a8ffb3dce528a24f83f256e7efc0b36813113eff8fdc6839018efe327 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.2.1": + version: 1.2.1 + resolution: "es-module-lexer@npm:1.2.1" + checksum: 10c0/6e0a9095e0abe38f480e0f366cdeca19db64d85a533da9332739a64d70e97a61e68c1f98a2396468ae6229245b8e5edcb1e48c4d3615ae4da9052a1bdc2367e2 + languageName: node + linkType: hard + +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"eslint-compat-utils@npm:^0.5.1": + version: 0.5.1 + resolution: "eslint-compat-utils@npm:0.5.1" + dependencies: + semver: "npm:^7.5.4" + peerDependencies: + eslint: ">=6.0.0" + checksum: 10c0/325e815205fab70ebcd379f6d4b5d44c7d791bb8dfe0c9888233f30ebabd9418422595b53a781b946c768d9244d858540e5e6129a6b3dd6d606f467d599edc6c + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^10.0.1": + version: 10.1.5 + resolution: "eslint-config-prettier@npm:10.1.5" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/5486255428e4577e8064b40f27db299faf7312b8e43d7b4bc913a6426e6c0f5950cd519cad81ae24e9aecb4002c502bc665c02e3b52efde57af2debcf27dd6e0 + languageName: node + linkType: hard + +"eslint-plugin-es-x@npm:^7.8.0": + version: 7.8.0 + resolution: "eslint-plugin-es-x@npm:7.8.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.1.2" + "@eslint-community/regexpp": "npm:^4.11.0" + eslint-compat-utils: "npm:^0.5.1" + peerDependencies: + eslint: ">=8" + checksum: 10c0/002fda8c029bc5da41e24e7ac11654062831d675fc4f5f20d0de460e24bf1e05cd559000678ef3e46c48641190f4fc07ae3d57aa5e8b085ef5f67e5f63742614 + languageName: node + linkType: hard + +"eslint-plugin-n@npm:^17.15.1": + version: 17.20.0 + resolution: "eslint-plugin-n@npm:17.20.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.5.0" + "@typescript-eslint/utils": "npm:^8.26.1" + enhanced-resolve: "npm:^5.17.1" + eslint-plugin-es-x: "npm:^7.8.0" + get-tsconfig: "npm:^4.8.1" + globals: "npm:^15.11.0" + ignore: "npm:^5.3.2" + minimatch: "npm:^9.0.5" + semver: "npm:^7.6.3" + ts-declaration-location: "npm:^1.0.6" + peerDependencies: + eslint: ">=8.23.0" + checksum: 10c0/7820cda10c71e3d2c6a8f15b4e1cbd757364181236e31facca43216d31f5968b643854228373865adc11ce47d44ddfb078b9d8709cf7276ccbd3017b64daf792 + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.2.3": + version: 5.5.0 + resolution: "eslint-plugin-prettier@npm:5.5.0" + dependencies: + prettier-linter-helpers: "npm:^1.0.0" + synckit: "npm:^0.11.7" + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: 10c0/d739940d5f5ea9b4c3a52836b24907b273a46909cdd1def5526f8934e54082fe5aac13512eb2c27d538ca79e16916ca54c651e3372aa53b7d4297afb4c156d47 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0": + version: 3.4.1 + resolution: "eslint-visitor-keys@npm:3.4.1" + checksum: 10c0/b4ebd35aed5426cd81b1fb92487825f1acf47a31e91d76597a3ee0664d69627140c4dafaf9b319cfeb1f48c1113a393e21a734c669e6565a72e6fcc311bd9911 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-visitor-keys@npm:4.2.1" + checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 10c0/4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 10c0/74a513c2af0584448aee71ce56005185f81239eab7a2343110e5bad50c39ad4fb19c5a6f99783ead1cac7ccaf3461a6034fda89fffa2b30b6d99b9f21c2f9d29 + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: 10c0/7e3d8ae812a7f4fdf8cad18e9cde436a39addf266a5986f653ea0d81e0de0900f50c0f27c6d5aff3f686bcb48acbd45be115ae2216f36a6a13a7dbbf5cad878b + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/5ce4f83afa5f88c9379e67906b4d31bc7694a30826d6cc8d0f0473c966929017fda65c2174b0ec89f064ede6ace6c67f8a4fe04cef42119b6a55b0d465554c24 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"find-up@npm:^7.0.0": + version: 7.0.0 + resolution: "find-up@npm:7.0.0" + dependencies: + locate-path: "npm:^7.2.0" + path-exists: "npm:^5.0.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10c0/e6ee3e6154560bc0ab3bc3b7d1348b31513f9bdf49a5dd2e952495427d559fa48cdf33953e85a309a323898b43fa1bfbc8b80c880dfc16068384783034030008 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: 10c0/60b74b2407e1942e1ed7f8c284f8ef714d0689dcfce5319985a5b7da3fc727f40b4a59ec72dc55aa83365ad7b8fa4fac3a30d93c850a2b452f29ae03dbc10a1e + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.8.1": + version: 4.10.1 + resolution: "get-tsconfig@npm:4.10.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/7f8e3dabc6a49b747920a800fb88e1952fef871cdf51b79e98db48275a5de6cdaf499c55ee67df5fa6fe7ce65f0063e26de0f2e53049b408c585aa74d39ffa21 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + +"globals@npm:^15.11.0": + version: 15.15.0 + resolution: "globals@npm:15.15.0" + checksum: 10c0/f9ae80996392ca71316495a39bec88ac43ae3525a438b5626cd9d5ce9d5500d0a98a266409605f8cd7241c7acf57c354a48111ea02a767ba4f374b806d6861fe + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: "npm:^1.1.1" + checksum: 10c0/e1da0d2bd109f116b632f27782cf23182b42f14972ca9540e4c5aa7e52647407a0a4a76937334fddcb56befe94a3494825ec22b19b51f5e5507c3153fd1a5e1b + languageName: node + linkType: hard + +"ignore@npm:^5.3.2": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 + languageName: node + linkType: hard + +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 10c0/6f3c4d0aa6ec1b43a8862375588a249e3c917739895cbe67fe12f0a76260ea632af51e8e2431b50fbcd0145356dc28ca147be08dbe6a523739fd55c0f91dc2a5 + languageName: node + linkType: hard + +"is-core-module@npm:^2.11.0": + version: 2.12.1 + resolution: "is-core-module@npm:2.12.1" + dependencies: + has: "npm:^1.0.3" + checksum: 10c0/ff1d0dfc0b7851310d289398e416eb92ae8a9ac7ea8b8b9737fa8c0725f5a78c5f3db6edd4dff38c9ed731f3aaa1f6410a320233fcb52a2c8f1cf58eebf10a4b + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: 10c0/a44d78aae0907a72f73966fe8b82d1439c8c485238bd5a864b1b9a2a3257832effa858790241e6b37876b5446a78889adf2fcc8dd897ce54c089ecc0a0ce0bf0 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"locate-path@npm:^7.2.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-fn@npm:3.1.0" + checksum: 10c0/a07cdd8ed6490c2dff5b11f889b245d9556b80f5a653a552a651d17cff5a2d156e632d235106c2369f00cccef4071704589574cf3601bc1b1400a1f620dff067 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"nanoid@npm:^3.3.8": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-queue@npm:^6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: "npm:^4.0.4" + p-timeout: "npm:^3.2.0" + checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: "npm:^1.0.0" + checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 + languageName: node + linkType: hard + +"p-timeout@npm:^4.1.0": + version: 4.1.0 + resolution: "p-timeout@npm:4.1.0" + checksum: 10c0/25aaf13ae9ebfff4ab45591f6647f3bee1ecede073c367175fb0157c27efb170cfb51259a4d2e9118d2ca595453bc885f086ad0ca7476d1c26cee3d13a7c9f6d + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"parse-author@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-author@npm:2.0.0" + dependencies: + author-regex: "npm:^1.0.0" + checksum: 10c0/8b4c19523588a4271c89f64e8167be7c80b4765059c865d38a996c37d080c7e5123e3e2d07d47290891628ad27f4dfb692e3b61156c52fcc0af6cdce3ed57afd + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10c0/b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pixtimerPro@workspace:.": + version: 0.0.0-use.local + resolution: "pixtimerPro@workspace:." + dependencies: + "@companion-module/base": "npm:~1.11.3" + "@companion-module/tools": "npm:^2.3.0" + prettier: "npm:^3.5.3" + languageName: unknown + linkType: soft + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: "npm:^1.1.2" + checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab + languageName: node + linkType: hard + +"prettier@npm:^3.5.3": + version: 3.5.3 + resolution: "prettier@npm:3.5.3" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/3880cb90b9dc0635819ab52ff571518c35bd7f15a6e80a2054c05dbc8a3aa6e74f135519e91197de63705bcb38388ded7e7230e2178432a1468005406238b877 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: "npm:^1.20.0" + checksum: 10c0/1a30074124a22abbd5d44d802dac26407fa72a0a95f162aa5504ba8246bc5452f8b1a027b154d9bdbabcd8764920ff9333d934c46a8f17479c8912e92332f3ff + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve@npm:^1.20.0": + version: 1.22.2 + resolution: "resolve@npm:1.22.2" + dependencies: + is-core-module: "npm:^2.11.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/f9f424a8117d1c68371b4fbc64e6ac045115a3beacc4bd3617b751f7624b69ad40c47dc995585c7f13d4a09723a8f167847defb7d39fad70b0d43bbba05ff851 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": + version: 1.22.2 + resolution: "resolve@patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.11.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/dcf068c4391941734efda06b6f778c013fd349cd4340f126de17c265a7b006c67de7e80e7aa06ecd29f3922e49f5561622b9faf98531f16aa9a896d22148c661 + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.1.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.2": + version: 4.3.2 + resolution: "schema-utils@npm:4.3.2" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/981632f9bf59f35b15a9bcdac671dd183f4946fe4b055ae71a301e66a9797b95e5dd450de581eb6cca56fb6583ce8f24d67b2d9f8e1b2936612209697f6c277e + languageName: node + linkType: hard + +"semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:^7.7.1": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.2": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"synckit@npm:^0.11.7": + version: 0.11.8 + resolution: "synckit@npm:0.11.8" + dependencies: + "@pkgr/core": "npm:^0.2.4" + checksum: 10c0/a1de5131ee527512afcaafceb2399b2f3e63678e56b831e1cb2dc7019c972a8b654703a3b94ef4166868f87eb984ea252b467c9d9e486b018ec2e6a55c24dfd8 + languageName: node + linkType: hard + +"tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.11": + version: 5.3.14 + resolution: "terser-webpack-plugin@npm:5.3.14" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^4.3.0" + serialize-javascript: "npm:^6.0.2" + terser: "npm:^5.31.1" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/9b060947241af43bd6fd728456f60e646186aef492163672a35ad49be6fbc7f63b54a7356c3f6ff40a8f83f00a977edc26f044b8e106cc611c053c8c0eaf8569 + languageName: node + linkType: hard + +"terser@npm:^5.31.1": + version: 5.43.0 + resolution: "terser@npm:5.43.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.14.0" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/9bc6ef2ad20a6f12328b28b4a75f58095ba726a586f22036a27899178eebb7640a281559546a9efddb31a7020287996006d18897b2bd254398b8c3a1cf24969b + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"ts-api-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "ts-api-utils@npm:2.1.0" + peerDependencies: + typescript: ">=4.8.4" + checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f + languageName: node + linkType: hard + +"ts-declaration-location@npm:^1.0.6": + version: 1.0.7 + resolution: "ts-declaration-location@npm:1.0.7" + dependencies: + picomatch: "npm:^4.0.2" + peerDependencies: + typescript: ">=4.0.0" + checksum: 10c0/b579b7630907052cc174b051dffdb169424824d887d8fb5abdc61e7ab0eede348c2b71c998727b9e4b314c0436f5003a15bb7eedb1c851afe96e12499f159630 + languageName: node + linkType: hard + +"tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 10c0/e4ed0de05b0a05e735c7d8a2930881e5efcfc3ec897204d5d33e7e6247f4c31eac92e383a15d9a6bccb7319b4271ee4bea946e211bf14951fec6ff2cbbb66a92 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.3": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 + languageName: node + linkType: hard + +"watchpack@npm:^2.4.1": + version: 2.4.2 + resolution: "watchpack@npm:2.4.2" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/ec60a5f0e9efaeca0102fd9126346b3b2d523e01c34030d3fddf5813a7125765121ebdc2552981136dcd2c852deb1af0b39340f2fcc235f292db5399d0283577 + languageName: node + linkType: hard + +"webpack-cli@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-cli@npm:6.0.1" + dependencies: + "@discoveryjs/json-ext": "npm:^0.6.1" + "@webpack-cli/configtest": "npm:^3.0.1" + "@webpack-cli/info": "npm:^3.0.1" + "@webpack-cli/serve": "npm:^3.0.1" + colorette: "npm:^2.0.14" + commander: "npm:^12.1.0" + cross-spawn: "npm:^7.0.3" + envinfo: "npm:^7.14.0" + fastest-levenshtein: "npm:^1.0.12" + import-local: "npm:^3.0.2" + interpret: "npm:^3.1.1" + rechoir: "npm:^0.8.0" + webpack-merge: "npm:^6.0.1" + peerDependencies: + webpack: ^5.82.0 + peerDependenciesMeta: + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: ./bin/cli.js + checksum: 10c0/2aaca78e277427f03f528602abd707d224696048fb46286ea636c7975592409c4381ca94d68bbbb3900f195ca97f256e619583e8feb34a80da531461323bf3e2 + languageName: node + linkType: hard + +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" + dependencies: + clone-deep: "npm:^4.0.1" + flat: "npm:^5.0.2" + wildcard: "npm:^2.0.1" + checksum: 10c0/bf1429567858b353641801b8a2696ca0aac270fc8c55d4de8a7b586fe07d27fdcfc83099a98ab47e6162383db8dd63bb8cc25b1beb2ec82150422eec843b0dc0 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 10c0/2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e + languageName: node + linkType: hard + +"webpack@npm:^5.97.1": + version: 5.99.9 + resolution: "webpack@npm:5.99.9" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.14.0" + browserslist: "npm:^4.24.0" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.17.1" + es-module-lexer: "npm:^1.2.1" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.2.0" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^4.3.2" + tapable: "npm:^2.1.1" + terser-webpack-plugin: "npm:^5.3.11" + watchpack: "npm:^2.4.1" + webpack-sources: "npm:^3.2.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/34ec3f19b50bccaf27929e5e5b901b25047f2d414acba7d0967dc98eb4f404d107fb1a4b63095edbca2b006ff5815f1720b131e10b20664b074dfc86b7ffa717 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"wildcard@npm:^2.0.1": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: 10c0/08f70cd97dd9a20aea280847a1fe8148e17cae7d231640e41eb26d2388697cbe65b67fd9e68715251c39b080c5ae4f76d71a9a69fa101d897273efdfb1b58bf7 + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 10c0/856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 + languageName: node + linkType: hard + +"zx@npm:^8.3.2": + version: 8.5.5 + resolution: "zx@npm:8.5.5" + bin: + zx: build/cli.js + checksum: 10c0/9c69e5a75b49b796211812625564980d0a86079a11011b397c4c77d256e3fe0a76b5ec7134db4d598e156f84e07981d8692544715feb8ff77adfae60faa356fc + languageName: node + linkType: hard