From 75bb1477c03c65a5b9c298b41623273a817c7f7f Mon Sep 17 00:00:00 2001 From: Paula Date: Wed, 25 Mar 2026 11:16:46 +0100 Subject: [PATCH 1/5] add JSON schema to make device addition easier --- app/public/resources/-Nord.json | 1 + app/public/resources/FP3.json | 1 + app/public/resources/FP4-safe.json | 1 + app/public/resources/FP4.json | 1 + app/public/resources/FP5-safe.json | 1 + app/public/resources/FP5.json | 1 + app/public/resources/FP6-safe.json | 1 + app/public/resources/FP6.json | 1 + app/public/resources/GS290.json | 1 + app/public/resources/OnePlus7.json | 1 + app/public/resources/OnePlus7Pro.json | 1 + app/public/resources/OnePlus7T.json | 1 + app/public/resources/OnePlus8.json | 1 + app/public/resources/OnePlus8Pro.json | 1 + app/public/resources/Teracube_2e.json | 1 + app/public/resources/coral.json | 1 + app/public/resources/emerald-safe.json | 1 + app/public/resources/emerald.json | 1 + app/public/resources/flame.json | 1 + app/public/resources/mimir.json | 1 + app/public/resources/one.json | 1 + app/public/resources/otter-safe.json | 1 + app/public/resources/otter.json | 1 + app/public/resources/panther.json | 1 + app/public/resources/redfin.json | 1 + app/public/resources/sapphire.json | 1 + app/public/resources/shiba.json | 1 + app/public/resources/sunfish.json | 1 + app/public/resources/tangorpro.json | 1 + app/public/resources/tetris.json | 1 + app/public/resources/two.json | 1 + app/public/schemas/devices.schema.json | 148 +++++++++++++++++++++++++ 32 files changed, 179 insertions(+) create mode 100644 app/public/schemas/devices.schema.json diff --git a/app/public/resources/-Nord.json b/app/public/resources/-Nord.json index 8bd275b..7b286a9 100644 --- a/app/public/resources/-Nord.json +++ b/app/public/resources/-Nord.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 12, "steps": [ { diff --git a/app/public/resources/FP3.json b/app/public/resources/FP3.json index dcba7e9..72fda4b 100644 --- a/app/public/resources/FP3.json +++ b/app/public/resources/FP3.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "steps": [ { "mode": "bootloader", diff --git a/app/public/resources/FP4-safe.json b/app/public/resources/FP4-safe.json index 14fe92f..f59d295 100644 --- a/app/public/resources/FP4-safe.json +++ b/app/public/resources/FP4-safe.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "steps": [ { "mode": "bootloader", diff --git a/app/public/resources/FP4.json b/app/public/resources/FP4.json index b77dc2a..771380c 100644 --- a/app/public/resources/FP4.json +++ b/app/public/resources/FP4.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "security_patch_level": "2018-01-05", "steps": [ { diff --git a/app/public/resources/FP5-safe.json b/app/public/resources/FP5-safe.json index 3884f48..10242e7 100644 --- a/app/public/resources/FP5-safe.json +++ b/app/public/resources/FP5-safe.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "steps": [ { "mode": "bootloader", diff --git a/app/public/resources/FP5.json b/app/public/resources/FP5.json index d7c44ac..eef83e3 100644 --- a/app/public/resources/FP5.json +++ b/app/public/resources/FP5.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "security_patch_level": "2018-01-05", "steps": [ { diff --git a/app/public/resources/FP6-safe.json b/app/public/resources/FP6-safe.json index 07c120b..1d59d10 100644 --- a/app/public/resources/FP6-safe.json +++ b/app/public/resources/FP6-safe.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "steps": [ { "mode": "bootloader", diff --git a/app/public/resources/FP6.json b/app/public/resources/FP6.json index 87af816..2fe7f34 100644 --- a/app/public/resources/FP6.json +++ b/app/public/resources/FP6.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "security_patch_level": "2018-01-05", "steps": [ { diff --git a/app/public/resources/GS290.json b/app/public/resources/GS290.json index 281dfe4..71e1e90 100644 --- a/app/public/resources/GS290.json +++ b/app/public/resources/GS290.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "steps": [ { "mode": "bootloader", diff --git a/app/public/resources/OnePlus7.json b/app/public/resources/OnePlus7.json index 913bb48..8f79253 100644 --- a/app/public/resources/OnePlus7.json +++ b/app/public/resources/OnePlus7.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 12, "steps": [ { diff --git a/app/public/resources/OnePlus7Pro.json b/app/public/resources/OnePlus7Pro.json index b816c9e..583c4cd 100644 --- a/app/public/resources/OnePlus7Pro.json +++ b/app/public/resources/OnePlus7Pro.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 12, "steps": [ { diff --git a/app/public/resources/OnePlus7T.json b/app/public/resources/OnePlus7T.json index 71cdd24..5b16168 100644 --- a/app/public/resources/OnePlus7T.json +++ b/app/public/resources/OnePlus7T.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 12, "steps": [ { diff --git a/app/public/resources/OnePlus8.json b/app/public/resources/OnePlus8.json index 46bbe5e..85d4274 100644 --- a/app/public/resources/OnePlus8.json +++ b/app/public/resources/OnePlus8.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 13, "steps": [ { diff --git a/app/public/resources/OnePlus8Pro.json b/app/public/resources/OnePlus8Pro.json index 478a3e2..8b44c2a 100644 --- a/app/public/resources/OnePlus8Pro.json +++ b/app/public/resources/OnePlus8Pro.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 13, "steps": [ { diff --git a/app/public/resources/Teracube_2e.json b/app/public/resources/Teracube_2e.json index 2460ff2..8975db0 100644 --- a/app/public/resources/Teracube_2e.json +++ b/app/public/resources/Teracube_2e.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "UNUSED___security_patch_level": "2020-04-05", "description": "Teracube 2e (2020)", "steps": [ diff --git a/app/public/resources/coral.json b/app/public/resources/coral.json index 2e1a005..00ed1bd 100644 --- a/app/public/resources/coral.json +++ b/app/public/resources/coral.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 13, "steps": [ { diff --git a/app/public/resources/emerald-safe.json b/app/public/resources/emerald-safe.json index 2421799..977dadb 100644 --- a/app/public/resources/emerald-safe.json +++ b/app/public/resources/emerald-safe.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "description": "Teracube 2e (2021 emerald) Safe", "steps": [ { diff --git a/app/public/resources/emerald.json b/app/public/resources/emerald.json index 7382e69..46607ea 100644 --- a/app/public/resources/emerald.json +++ b/app/public/resources/emerald.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "security_patch_level": "2018-01-05", "description": "Teracube 2e (2021 emerald)", "steps": [ diff --git a/app/public/resources/flame.json b/app/public/resources/flame.json index b9388b0..4507cdf 100644 --- a/app/public/resources/flame.json +++ b/app/public/resources/flame.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 13, "steps": [ { diff --git a/app/public/resources/mimir.json b/app/public/resources/mimir.json index ff563ca..a5ba1d7 100644 --- a/app/public/resources/mimir.json +++ b/app/public/resources/mimir.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 14, "skip_clear_halt": true, "steps": [ diff --git a/app/public/resources/one.json b/app/public/resources/one.json index e046982..63de526 100644 --- a/app/public/resources/one.json +++ b/app/public/resources/one.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "description": "Murena One", "steps": [ { diff --git a/app/public/resources/otter-safe.json b/app/public/resources/otter-safe.json index 113245f..1ac52c9 100644 --- a/app/public/resources/otter-safe.json +++ b/app/public/resources/otter-safe.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "steps": [ { "mode": "bootloader", diff --git a/app/public/resources/otter.json b/app/public/resources/otter.json index b34ab6a..a8e4180 100644 --- a/app/public/resources/otter.json +++ b/app/public/resources/otter.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "security_patch_level": "2018-01-05", "steps": [ { diff --git a/app/public/resources/panther.json b/app/public/resources/panther.json index a282271..cb87523 100644 --- a/app/public/resources/panther.json +++ b/app/public/resources/panther.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 13, "steps": [ { diff --git a/app/public/resources/redfin.json b/app/public/resources/redfin.json index d2b8a32..cb5a5e9 100644 --- a/app/public/resources/redfin.json +++ b/app/public/resources/redfin.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 13, "steps": [ { diff --git a/app/public/resources/sapphire.json b/app/public/resources/sapphire.json index cf02601..04ffde2 100644 --- a/app/public/resources/sapphire.json +++ b/app/public/resources/sapphire.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "description": "Teracube 2s (2025 sapphire)", "steps": [ { diff --git a/app/public/resources/shiba.json b/app/public/resources/shiba.json index 8a71822..2bc898a 100644 --- a/app/public/resources/shiba.json +++ b/app/public/resources/shiba.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 14, "steps": [ { diff --git a/app/public/resources/sunfish.json b/app/public/resources/sunfish.json index 847ea07..5d0dfcb 100644 --- a/app/public/resources/sunfish.json +++ b/app/public/resources/sunfish.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 13, "steps": [ { diff --git a/app/public/resources/tangorpro.json b/app/public/resources/tangorpro.json index 91373d1..d929cb6 100644 --- a/app/public/resources/tangorpro.json +++ b/app/public/resources/tangorpro.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 13, "steps": [ { diff --git a/app/public/resources/tetris.json b/app/public/resources/tetris.json index 5805e1c..083c6dd 100644 --- a/app/public/resources/tetris.json +++ b/app/public/resources/tetris.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "android": 14, "steps": [ { diff --git a/app/public/resources/two.json b/app/public/resources/two.json index 6cf28db..bab977d 100644 --- a/app/public/resources/two.json +++ b/app/public/resources/two.json @@ -1,4 +1,5 @@ { + "$schema": "../schemas/devices.schema.json", "description": "Murena Two", "steps": [ { diff --git a/app/public/schemas/devices.schema.json b/app/public/schemas/devices.schema.json new file mode 100644 index 0000000..4f1d742 --- /dev/null +++ b/app/public/schemas/devices.schema.json @@ -0,0 +1,148 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://e.foundation/installer/schemas/devices.schema.json", + "title": "Device", + "description": "A device who can be used with /e/ web installer", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "URL of the JSON Schema, if you remove it, autocomplete doesn't work" + }, + "description": { + "type": "string", + "description": "Description of the device, you can use this to provide more information" + }, + "UNUSED___security_patch_level": { + "type": "string", + "description": "[DEPRECATED, USE security_patch_level instead] Security Patch Level date (AAAA-MM-JJ)", + "deprecated": true + }, + "security_patch_level": { + "type": "string", + "description": "Security Patch Level date (AAAA-MM-JJ)" + }, + "android": { + "description": "Android version of /e/ image, use version number, not letter", + "type": "number" + }, + "skip_clear_halt": { + "type": "boolean", + "description": "If true, skip the clear halt command for devices that do not support it" + }, + "steps": { + "description": "Each object is a step, called in order", + "type": "array", + "items": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "description": "Alias to reboot in specific mode", + "enum": [ + "fastboot", + "adb", + "bootloader" + ] + }, + "command": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "anyOf": [ + { + "type": "string", + "enum": [ + "connect adb", + "connect bootloader", + "reboot", + "reboot adb", + "reboot fastboot", + "reboot bootloader", + "erase [partitionName]", + "oem unlock [varName?]", + "oem lock [varName?]", + "flashing unlock [varName?]", + "flashing lock [varName?]", + "flash [partitionName] [fileName]", + "sideload [fileName]", + "delay [delayInSeconds]" + ] + }, + { + "type": "string" + } + ] + } + }, + { + "type": "string", + "enum": [ + "connect adb", + "connect bootloader", + "reboot", + "reboot adb", + "reboot fastboot", + "reboot bootloader", + "erase [partitionName]", + "oem unlock [varName?]", + "oem lock [varName?]", + "flashing unlock [varName?]", + "flashing lock [varName?]", + "flash [partitionName] [fileName]", + "sideload [fileName]", + "delay [delayInSeconds]" + ] + }, + { + "type": "string" + } + ] + }, + "id": { + "type": "string", + "description": "Unique id of each step" + }, + "needUserGesture": { + "type": "boolean", + "description": "If this option is set to true, installer display a button, user needs to click on this button to continue installation" + } + }, + "additionalProperties": false + } + }, + "folder": { + "description": "An array describing the files involved in the flash process", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This name is exposed as fileName in a step command" + }, + "path": { + "type": "string", + "description": "Path used to download the file." + }, + "unzip": { + "type": "boolean", + "description": "Mark true in case we have a zip we want to uncompress." + }, + "mapping": { + "type": "object" + } + }, + "additionalProperties": false + }, + "required": [ + "name", + "path" + ], + "additionalProperties": false + } + }, + "additionalProperties": false +} -- GitLab From c9fa26d2dbcfab6593a2c686d2022f42633720b6 Mon Sep 17 00:00:00 2001 From: Paula Date: Wed, 25 Mar 2026 12:17:02 +0100 Subject: [PATCH 2/5] run prettier --- app/public/schemas/devices.schema.json | 271 ++++++++++++------------- 1 file changed, 132 insertions(+), 139 deletions(-) diff --git a/app/public/schemas/devices.schema.json b/app/public/schemas/devices.schema.json index 4f1d742..c7e3a92 100644 --- a/app/public/schemas/devices.schema.json +++ b/app/public/schemas/devices.schema.json @@ -1,148 +1,141 @@ { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://e.foundation/installer/schemas/devices.schema.json", - "title": "Device", - "description": "A device who can be used with /e/ web installer", - "type": "object", - "properties": { - "$schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://e.foundation/installer/schemas/devices.schema.json", + "title": "Device", + "description": "A device who can be used with /e/ web installer", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "URL of the JSON Schema, if you remove it, autocomplete doesn't work" + }, + "description": { + "type": "string", + "description": "Description of the device, you can use this to provide more information" + }, + "UNUSED___security_patch_level": { + "type": "string", + "description": "[DEPRECATED, USE security_patch_level instead] Security Patch Level date (AAAA-MM-JJ)", + "deprecated": true + }, + "security_patch_level": { + "type": "string", + "description": "Security Patch Level date (AAAA-MM-JJ)" + }, + "android": { + "description": "Android version of /e/ image, use version number, not letter", + "type": "number" + }, + "skip_clear_halt": { + "type": "boolean", + "description": "If true, skip the clear halt command for devices that do not support it" + }, + "steps": { + "description": "Each object is a step, called in order", + "type": "array", + "items": { + "type": "object", + "properties": { + "mode": { "type": "string", - "description": "URL of the JSON Schema, if you remove it, autocomplete doesn't work" - }, - "description": { + "description": "Alias to reboot in specific mode", + "enum": ["fastboot", "adb", "bootloader"] + }, + "command": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "anyOf": [ + { + "type": "string", + "enum": [ + "connect adb", + "connect bootloader", + "reboot", + "reboot adb", + "reboot fastboot", + "reboot bootloader", + "erase [partitionName]", + "oem unlock [varName?]", + "oem lock [varName?]", + "flashing unlock [varName?]", + "flashing lock [varName?]", + "flash [partitionName] [fileName]", + "sideload [fileName]", + "delay [delayInSeconds]" + ] + }, + { + "type": "string" + } + ] + } + }, + { + "type": "string", + "enum": [ + "connect adb", + "connect bootloader", + "reboot", + "reboot adb", + "reboot fastboot", + "reboot bootloader", + "erase [partitionName]", + "oem unlock [varName?]", + "oem lock [varName?]", + "flashing unlock [varName?]", + "flashing lock [varName?]", + "flash [partitionName] [fileName]", + "sideload [fileName]", + "delay [delayInSeconds]" + ] + }, + { + "type": "string" + } + ] + }, + "id": { "type": "string", - "description": "Description of the device, you can use this to provide more information" + "description": "Unique id of each step" + }, + "needUserGesture": { + "type": "boolean", + "description": "If this option is set to true, installer display a button, user needs to click on this button to continue installation" + } }, - "UNUSED___security_patch_level": { + "additionalProperties": false + } + }, + "folder": { + "description": "An array describing the files involved in the flash process", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string", - "description": "[DEPRECATED, USE security_patch_level instead] Security Patch Level date (AAAA-MM-JJ)", - "deprecated": true - }, - "security_patch_level": { + "description": "This name is exposed as fileName in a step command" + }, + "path": { "type": "string", - "description": "Security Patch Level date (AAAA-MM-JJ)" - }, - "android": { - "description": "Android version of /e/ image, use version number, not letter", - "type": "number" - }, - "skip_clear_halt": { + "description": "Path used to download the file." + }, + "unzip": { "type": "boolean", - "description": "If true, skip the clear halt command for devices that do not support it" - }, - "steps": { - "description": "Each object is a step, called in order", - "type": "array", - "items": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "description": "Alias to reboot in specific mode", - "enum": [ - "fastboot", - "adb", - "bootloader" - ] - }, - "command": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string", - "anyOf": [ - { - "type": "string", - "enum": [ - "connect adb", - "connect bootloader", - "reboot", - "reboot adb", - "reboot fastboot", - "reboot bootloader", - "erase [partitionName]", - "oem unlock [varName?]", - "oem lock [varName?]", - "flashing unlock [varName?]", - "flashing lock [varName?]", - "flash [partitionName] [fileName]", - "sideload [fileName]", - "delay [delayInSeconds]" - ] - }, - { - "type": "string" - } - ] - } - }, - { - "type": "string", - "enum": [ - "connect adb", - "connect bootloader", - "reboot", - "reboot adb", - "reboot fastboot", - "reboot bootloader", - "erase [partitionName]", - "oem unlock [varName?]", - "oem lock [varName?]", - "flashing unlock [varName?]", - "flashing lock [varName?]", - "flash [partitionName] [fileName]", - "sideload [fileName]", - "delay [delayInSeconds]" - ] - }, - { - "type": "string" - } - ] - }, - "id": { - "type": "string", - "description": "Unique id of each step" - }, - "needUserGesture": { - "type": "boolean", - "description": "If this option is set to true, installer display a button, user needs to click on this button to continue installation" - } - }, - "additionalProperties": false - } + "description": "Mark true in case we have a zip we want to uncompress." + }, + "mapping": { + "type": "object" + } }, - "folder": { - "description": "An array describing the files involved in the flash process", - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "This name is exposed as fileName in a step command" - }, - "path": { - "type": "string", - "description": "Path used to download the file." - }, - "unzip": { - "type": "boolean", - "description": "Mark true in case we have a zip we want to uncompress." - }, - "mapping": { - "type": "object" - } - }, - "additionalProperties": false - }, - "required": [ - "name", - "path" - ], - "additionalProperties": false - } - }, - "additionalProperties": false + "additionalProperties": false + }, + "required": ["name", "path"], + "additionalProperties": false + } + }, + "additionalProperties": false } -- GitLab From 7f4ce057d72432bc0aff0c3ae3693c4195bae0d5 Mon Sep 17 00:00:00 2001 From: Paula Date: Tue, 31 Mar 2026 16:35:25 +0200 Subject: [PATCH 3/5] add ajv-cli in devDependencies to use ajv validate and check json-schema in addition to lint & prettier --- app/package-lock.json | 600 ++++++++++++++++++------- app/package.json | 5 +- app/public/schemas/devices.schema.json | 5 +- 3 files changed, 444 insertions(+), 166 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 9c0ce0f..e07f653 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -17,6 +17,7 @@ "devDependencies": { "@eslint/js": "^9.17.0", "@types/w3c-web-usb": "^1.0.10", + "ajv-cli": "^5.0.0", "eslint": "^9.17.0", "globals": "^15.14.0", "prettier": "3.4.2", @@ -514,15 +515,15 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^3.1.5" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -555,20 +556,20 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { @@ -578,6 +579,30 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "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/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, + "license": "Python-2.0" + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -591,10 +616,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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, + "license": "MIT" + }, "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", "engines": { @@ -681,9 +726,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", "cpu": [ "arm" ], @@ -695,9 +740,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", "cpu": [ "arm64" ], @@ -709,9 +754,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", "cpu": [ "arm64" ], @@ -723,9 +768,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", "cpu": [ "x64" ], @@ -737,9 +782,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", "cpu": [ "arm64" ], @@ -751,9 +796,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", "cpu": [ "x64" ], @@ -765,9 +810,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", "cpu": [ "arm" ], @@ -779,9 +824,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", "cpu": [ "arm" ], @@ -793,9 +838,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", "cpu": [ "arm64" ], @@ -807,9 +852,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", "cpu": [ "arm64" ], @@ -821,9 +866,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", "cpu": [ "loong64" ], @@ -835,9 +880,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", "cpu": [ "loong64" ], @@ -849,9 +894,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", - "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", "cpu": [ "ppc64" ], @@ -863,9 +908,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", "cpu": [ "ppc64" ], @@ -877,9 +922,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", "cpu": [ "riscv64" ], @@ -891,9 +936,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", "cpu": [ "riscv64" ], @@ -905,9 +950,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", "cpu": [ "s390x" ], @@ -919,9 +964,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", "cpu": [ "x64" ], @@ -933,9 +978,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", "cpu": [ "x64" ], @@ -947,9 +992,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", "cpu": [ "x64" ], @@ -961,9 +1006,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", "cpu": [ "arm64" ], @@ -975,9 +1020,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", "cpu": [ "arm64" ], @@ -989,9 +1034,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", "cpu": [ "ia32" ], @@ -1003,9 +1048,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", "cpu": [ "x64" ], @@ -1017,9 +1062,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", "cpu": [ "x64" ], @@ -1045,16 +1090,16 @@ "license": "MIT" }, "node_modules/@types/w3c-web-usb": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.13.tgz", - "integrity": "sha512-N2nSl3Xsx8mRHZBvMSdNGtzMyeleTvtlEw+ujujgXalPqOjIA6UtrqcB6OzyUjkTbDm3J7P1RNK1lgoO7jxtsw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.14.tgz", + "integrity": "sha512-Qu3Nn6JFuF4+sHKYl+IcX9vYiI40ogleXzFFSxoE1W94rG98o/kXs8uJ0QSfFzuwBCZWlGfUGpPkgwuuX4PchA==", "dev": true, "license": "MIT" }, "node_modules/@zip.js/zip.js": { - "version": "2.8.20", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.20.tgz", - "integrity": "sha512-oJzVhK9gnSKD++WLG37QEgeTgm5W8XUYmNv0EhOxytSr85vXn9EMpOoKNTK3yWDLa55Z0MovKW/6RNeh9OUmnA==", + "version": "2.8.23", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.23.tgz", + "integrity": "sha512-RB+RLnxPJFPrGvQ9rgO+4JOcsob6lD32OcF0QE0yg24oeW9q8KnTTNlugcDaIveEcCbclobJcZP+fLQ++sH0bw==", "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", @@ -1063,9 +1108,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -1086,22 +1131,49 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "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" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-cli": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ajv-cli/-/ajv-cli-5.0.0.tgz", + "integrity": "sha512-LY4m6dUv44HTyhV+u2z5uX4EhPYTM38Iv1jdgDJJJCyOOuqB8KtZEGjPZ2T+sh5ZIJrXUfgErYx/j3gLd3+PlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0", + "fast-json-patch": "^2.0.0", + "glob": "^7.1.0", + "js-yaml": "^3.14.0", + "json-schema-migrate": "^2.0.0", + "json5": "^2.1.3", + "minimist": "^1.2.0" + }, + "bin": { + "ajv": "dist/index.js" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1119,11 +1191,14 @@ } }, "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==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "Python-2.0" + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/balanced-match": { "version": "1.0.2", @@ -1133,9 +1208,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -1293,25 +1368,25 @@ } }, "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", + "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "ajv": "^6.12.4", + "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", @@ -1330,7 +1405,7 @@ "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -1382,6 +1457,30 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "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/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, + "license": "MIT" + }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -1400,6 +1499,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -1453,6 +1566,26 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-json-patch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", + "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^2.0.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fast-json-patch/node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "dev": true, + "license": "MIT" + }, "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", @@ -1467,6 +1600,23 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -1530,9 +1680,16 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "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, "license": "ISC" }, @@ -1551,6 +1708,28 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "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", @@ -1630,6 +1809,25 @@ "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==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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, + "license": "ISC" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1661,13 +1859,14 @@ "license": "ISC" }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -1680,10 +1879,20 @@ "dev": true, "license": "MIT" }, + "node_modules/json-schema-migrate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-schema-migrate/-/json-schema-migrate-2.0.0.tgz", + "integrity": "sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + } + }, "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==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, @@ -1694,6 +1903,19 @@ "dev": true, "license": "MIT" }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -1766,6 +1988,16 @@ "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, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -1799,6 +2031,16 @@ "dev": true, "license": "MIT" }, + "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, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -1872,6 +2114,16 @@ "node": ">=8" } }, + "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, + "license": "MIT", + "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", @@ -1890,9 +2142,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -1903,9 +2155,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dev": true, "funding": [ { @@ -1967,6 +2219,16 @@ "node": ">=6" } }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -1978,9 +2240,9 @@ } }, "node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", "dev": true, "license": "MIT", "dependencies": { @@ -1994,31 +2256,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" } }, @@ -2055,6 +2317,13 @@ "node": ">=0.10.0" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2236,6 +2505,13 @@ "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, + "license": "ISC" + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/app/package.json b/app/package.json index 64a441c..86d0a6c 100644 --- a/app/package.json +++ b/app/package.json @@ -7,10 +7,13 @@ "dev": "vite", "build": "vite build", "preview": "vite preview", - "check": "npx eslint . && npx prettier . --check", + "check": "npm run check:json-schema && npm run check:lint", + "check:lint": "npx eslint . && npx prettier . --check", + "check:json-schema": "npx ajv validate --spec=draft2020 -s public/schemas/devices.schema.json -d \"public/resources/*.json\"", "format": "npx prettier . --write" }, "devDependencies": { + "ajv-cli": "^5.0.0", "@eslint/js": "^9.17.0", "@types/w3c-web-usb": "^1.0.10", "eslint": "^9.17.0", diff --git a/app/public/schemas/devices.schema.json b/app/public/schemas/devices.schema.json index c7e3a92..9e0d474 100644 --- a/app/public/schemas/devices.schema.json +++ b/app/public/schemas/devices.schema.json @@ -131,10 +131,9 @@ "type": "object" } }, + "required": ["name", "path"], "additionalProperties": false - }, - "required": ["name", "path"], - "additionalProperties": false + } } }, "additionalProperties": false -- GitLab From a8a80cacd35924302724280c37efccee20ce66d0 Mon Sep 17 00:00:00 2001 From: Paula Date: Wed, 1 Apr 2026 12:44:39 +0200 Subject: [PATCH 4/5] trying bad MR --- app/public/resources/emerald-safe.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/public/resources/emerald-safe.json b/app/public/resources/emerald-safe.json index 977dadb..a2074d8 100644 --- a/app/public/resources/emerald-safe.json +++ b/app/public/resources/emerald-safe.json @@ -3,7 +3,7 @@ "description": "Teracube 2e (2021 emerald) Safe", "steps": [ { - "mode": "bootloader", + "mode": "boot", "id": "connect-bootloader", "command": ["connect bootloader", "flashing unlock goto_flashing"], "needUserGesture": true -- GitLab From e08b8703b55acbb9c7cd70f1f6042adba7a74f2c Mon Sep 17 00:00:00 2001 From: Paula Date: Wed, 1 Apr 2026 12:45:09 +0200 Subject: [PATCH 5/5] fix bad MR --- app/public/resources/emerald-safe.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/public/resources/emerald-safe.json b/app/public/resources/emerald-safe.json index a2074d8..977dadb 100644 --- a/app/public/resources/emerald-safe.json +++ b/app/public/resources/emerald-safe.json @@ -3,7 +3,7 @@ "description": "Teracube 2e (2021 emerald) Safe", "steps": [ { - "mode": "boot", + "mode": "bootloader", "id": "connect-bootloader", "command": ["connect bootloader", "flashing unlock goto_flashing"], "needUserGesture": true -- GitLab