diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index f3ad0a25f..000000000 --- a/.prettierignore +++ /dev/null @@ -1,10 +0,0 @@ -out -dist -release -pnpm-lock.yaml -pnpm-workspace.yaml -LICENSE -LICENSE.md -tsconfig.json -tsconfig.*.json -node_modules diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index fb5a06e0a..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "singleQuote": true, - "tabWidth": 2, - "useTabs": false, - "semi": false, - "trailingComma": "all", - "printWidth": 120, - "bracketSpacing": true -} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..75529c9b3 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,54 @@ +{ + // Disable the default formatter, use eslint instead + "prettier.enable": false, + "editor.formatOnSave": false, + + // Auto fix + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.organizeImports": "never" + }, + + // remove tailwindcss directives(like @apply) warnings + "css.lint.unknownAtRules": "ignore", + "scss.lint.unknownAtRules": "ignore", + + // Silent the stylistic rules in you IDE, but still auto fix them + "eslint.rules.customizations": [ + { "rule": "style/*", "severity": "off", "fixable": true }, + { "rule": "format/*", "severity": "off", "fixable": true }, + { "rule": "*-indent", "severity": "off", "fixable": true }, + { "rule": "*-spacing", "severity": "off", "fixable": true }, + { "rule": "*-spaces", "severity": "off", "fixable": true }, + { "rule": "*-order", "severity": "off", "fixable": true }, + { "rule": "*-dangle", "severity": "off", "fixable": true }, + { "rule": "*-newline", "severity": "off", "fixable": true }, + { "rule": "*quotes", "severity": "off", "fixable": true }, + { "rule": "*semi", "severity": "off", "fixable": true } + ], + + // Enable eslint for all supported languages + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "markdown", + "json", + "jsonc", + "yaml", + "toml", + "xml", + "gql", + "graphql", + "astro", + "svelte", + "css", + "less", + "scss", + "pcss", + "postcss" + ] +} diff --git a/apps/cli/bin/index.js b/apps/cli/bin/index.js index d6616988a..1f632cedb 100755 --- a/apps/cli/bin/index.js +++ b/apps/cli/bin/index.js @@ -6,5 +6,5 @@ try { commander.init() commander.program.parse(process.argv) } catch (e) { - console.log(e) + console.error(e) } diff --git a/apps/cli/package.json b/apps/cli/package.json index 4c35187b0..3e6e7aa74 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -3,6 +3,7 @@ "version": "2.0.0-alpha.1", "description": "MQTTX CLI - An MQTT client for the command line", "author": "EMQX Team ", + "license": "Apache-2.0", "homepage": "https://mqttx.app/cli", "keywords": [ "mqtt", @@ -10,18 +11,17 @@ "publish", "subscribe" ], - "scripts": { - "dev": "tsc -w", - "build": "tsc && pkg . -o ./release/mqttx-cli" - }, "main": "./dist/src/index.js", "bin": { "mqttx": "./bin/index.js" }, - "license": "Apache-2.0", "engines": { "node": ">=16" }, + "scripts": { + "dev": "tsc -w", + "build": "tsc && pkg . -o ./release/mqttx-cli" + }, "dependencies": { "axios": "^0.27.2", "chalk": "~4.1.2", @@ -40,16 +40,16 @@ }, "devDependencies": { "@faker-js/faker": "^7.6.0", + "@mqttx/tsconfig": "workspace:*", "@types/concat-stream": "^2.0.0", "@types/js-yaml": "^4.0.5", + "@types/mqttx": "workspace:*", "@types/node": "^17.0.43", "@types/pump": "^1.1.1", "@types/readable-stream": "^2.3.13", "@types/signale": "^1.4.4", "@types/split2": "^3.2.1", - "@types/ws": "^8.5.3", - "@mqttx/tsconfig": "workspace:*", - "@types/mqttx": "workspace:*" + "@types/ws": "^8.5.3" }, "pkg": { "targets": [ diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index b400fa2c6..bb09d853f 100755 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -1,23 +1,23 @@ -import 'core-js' import { Command } from 'commander' -import { getClientId } from './utils/generator' +import { version } from '../package.json' +import { benchConn, conn } from './lib/conn' +import ls from './lib/ls' +import { benchPub, pub, simulatePub } from './lib/pub' +import { benchSub, sub } from './lib/sub' import { checkUpdate } from './utils/checkUpdate' +import { getClientId } from './utils/generator' import { + parseFormat, + parseMQTTVersion, parseNumber, + parseOutputMode, parseProtocol, - parseMQTTVersion, - parseUserProperties, + parsePubTopic, parseQoS, + parseUserProperties, parseVariadicOfBooleanType, - parsePubTopic, - parseFormat, - parseOutputMode, } from './utils/parse' -import { conn, benchConn } from './lib/conn' -import { pub, benchPub, simulatePub } from './lib/pub' -import { sub, benchSub } from './lib/sub' -import ls from './lib/ls' -import { version } from '../package.json' +import 'core-js' export class Commander { program: Command diff --git a/apps/cli/src/lib/conn.ts b/apps/cli/src/lib/conn.ts index 9edb06b3f..4f5e716e9 100644 --- a/apps/cli/src/lib/conn.ts +++ b/apps/cli/src/lib/conn.ts @@ -1,11 +1,11 @@ +import type { BenchConnectOptions, ConnectOptions } from 'mqttx' import * as mqtt from 'mqtt' -import { Signale, signale, basicLog, benchLog } from '../utils/signale' -import { parseConnectOptions } from '../utils/parse' +import { loadConfig, saveConfig } from '../utils/config' import delay from '../utils/delay' -import { saveConfig, loadConfig } from '../utils/config' -import { ConnectOptions, BenchConnectOptions } from 'mqttx' +import { parseConnectOptions } from '../utils/parse' +import { basicLog, benchLog, Signale, signale } from '../utils/signale' -const conn = (options: ConnectOptions) => { +function conn(options: ConnectOptions) { const { save, config } = options config && (options = loadConfig('conn', config)) @@ -47,7 +47,7 @@ const conn = (options: ConnectOptions) => { }) } -const benchConn = async (options: BenchConnectOptions) => { +async function benchConn(options: BenchConnectOptions) { const { save, config } = options config && (options = loadConfig('benchConn', config)) @@ -60,9 +60,9 @@ const benchConn = async (options: BenchConnectOptions) => { let connectedCount = 0 - const isNewConnArray = Array(count).fill(true) + const isNewConnArray = Array.from({ length: count }, () => true) - const retryTimesArray = Array(count).fill(0) + const retryTimesArray = Array.from({ length: count }, () => 0) const interactive = new Signale({ interactive: true }) @@ -124,4 +124,4 @@ const benchConn = async (options: BenchConnectOptions) => { export default conn -export { conn, benchConn } +export { benchConn, conn } diff --git a/apps/cli/src/lib/ls.ts b/apps/cli/src/lib/ls.ts index 51bd5b12f..55ede9152 100644 --- a/apps/cli/src/lib/ls.ts +++ b/apps/cli/src/lib/ls.ts @@ -1,7 +1,7 @@ -import * as fs from 'fs' -import * as path from 'path' +import type { LsOptions } from 'mqttx' +import * as fs from 'node:fs' +import * as path from 'node:path' import Table from 'cli-table3' -import { LsOptions } from 'mqttx' interface Scenario { name: string @@ -29,7 +29,7 @@ async function listScenarios(): Promise { return scenarios } -const ls = async (options: LsOptions) => { +async function ls(options: LsOptions) { if (options.scenarios) { try { const list = await listScenarios() diff --git a/apps/cli/src/lib/pub.ts b/apps/cli/src/lib/pub.ts index 7c64711fe..3703d2ff3 100644 --- a/apps/cli/src/lib/pub.ts +++ b/apps/cli/src/lib/pub.ts @@ -1,24 +1,19 @@ +import type { IClientOptions, IClientPublishOptions } from 'mqtt' +import type { BenchPublishOptions, CommandType, FormatType, PublishOptions, SimulatePubOptions, Simulator } from 'mqttx' +import concat from 'concat-stream' import * as mqtt from 'mqtt' import pump from 'pump' -import concat from 'concat-stream' import { Writable } from 'readable-stream' import split2 from 'split2' -import { IClientOptions, IClientPublishOptions } from 'mqtt' -import { Signale, signale, basicLog, benchLog, simulateLog } from '../utils/signale' -import { parseConnectOptions, parsePublishOptions, checkTopicExists, checkScenarioExists } from '../utils/parse' +import { loadConfig, saveConfig } from '../utils/config' +import convertPayload from '../utils/convertPayload' import delay from '../utils/delay' -import { saveConfig, loadConfig } from '../utils/config' -import { loadSimulator } from '../utils/simulate' +import { checkScenarioExists, checkTopicExists, parseConnectOptions, parsePublishOptions } from '../utils/parse' import { serializeProtobufToBuffer } from '../utils/protobuf' -import convertPayload from '../utils/convertPayload' -import { FormatType, PublishOptions, CommandType, BenchPublishOptions, SimulatePubOptions, Simulator } from 'mqttx' - -const processPublishMessage = ( - message: string | Buffer, - protobufPath: string | undefined, - protobufMessageName: string | undefined, - format: FormatType | undefined, -): Buffer | string => { +import { basicLog, benchLog, Signale, signale, simulateLog } from '../utils/signale' +import { loadSimulator } from '../utils/simulate' + +function processPublishMessage(message: string | Buffer, protobufPath: string | undefined, protobufMessageName: string | undefined, format: FormatType | undefined): Buffer | string { /* * Pipeline for processing outgoing messages in two potential stages: * 1. Format Conversion --> Applied if a format is specified, transforming the message into that format; if absent, the message retains its initial state. @@ -35,18 +30,14 @@ const processPublishMessage = ( return pipeline.reduce((msg, transformer) => transformer(msg), message) as Buffer } -const send = ( - config: boolean | string | undefined, - connOpts: IClientOptions, - pubOpts: { - topic: string - message: string | Buffer - protobufPath: string | undefined - protobufMessageName: string | undefined - format: FormatType | undefined - opts: IClientPublishOptions - }, -) => { +function send(config: boolean | string | undefined, connOpts: IClientOptions, pubOpts: { + topic: string + message: string | Buffer + protobufPath: string | undefined + protobufMessageName: string | undefined + format: FormatType | undefined + opts: IClientPublishOptions +}) { const client = mqtt.connect(connOpts) basicLog.connecting(config, connOpts.hostname!, connOpts.port, pubOpts.topic, pubOpts.message.toString()) client.on('connect', () => { @@ -76,19 +67,14 @@ const send = ( }) } -const multisend = ( - config: boolean | string | undefined, - connOpts: IClientOptions, - pubOpts: { - topic: string - message: string | Buffer - protobufPath: string | undefined - protobufMessageName: string | undefined - format: FormatType | undefined - opts: IClientPublishOptions - }, - maximumReconnectTimes: number, -) => { +function multisend(config: boolean | string | undefined, connOpts: IClientOptions, pubOpts: { + topic: string + message: string | Buffer + protobufPath: string | undefined + protobufMessageName: string | undefined + format: FormatType | undefined + opts: IClientPublishOptions +}, maximumReconnectTimes: number) { let isNewConnection = true let retryTimes = 0 const client = mqtt.connect(connOpts) @@ -100,7 +86,7 @@ const multisend = ( sender._write = (line, _enc, cb) => { const { topic, opts, protobufPath, protobufMessageName, format } = pubOpts count++ - let omitTopic = opts.properties?.topicAlias && count >= 2 + const omitTopic = opts.properties?.topicAlias && count >= 2 const publishMessage = processPublishMessage(line.trim(), protobufPath, protobufMessageName, format) client.publish(omitTopic ? '' : topic, publishMessage, opts, cb) } @@ -108,13 +94,13 @@ const multisend = ( client.on('connect', () => { basicLog.enterToPublish() retryTimes = 0 - isNewConnection && - pump(process.stdin, split2(), sender, (err) => { - client.end() - if (err) { - throw err - } - }) + isNewConnection + && pump(process.stdin, split2(), sender, (err) => { + client.end() + if (err) { + throw err + } + }) }) client.on('error', (err) => { @@ -143,7 +129,7 @@ const multisend = ( }) } -const pub = (options: PublishOptions) => { +function pub(options: PublishOptions) { const { save, config } = options config && (options = loadConfig('pub', config)) @@ -172,7 +158,7 @@ const pub = (options: PublishOptions) => { } } -const multiPub = async (commandType: CommandType, options: BenchPublishOptions | SimulatePubOptions) => { +async function multiPub(commandType: CommandType, options: BenchPublishOptions | SimulatePubOptions) { const { save, config } = options let simulator: Simulator = {} as Simulator @@ -188,8 +174,8 @@ const multiPub = async (commandType: CommandType, options: BenchPublishOptions | save && saveConfig('benchPub', options) } - const { count, interval, messageInterval, hostname, port, topic, clientId, message, verbose, maximumReconnectTimes } = - options + const { count, interval, messageInterval, hostname, port, topic, clientId, message, verbose, maximumReconnectTimes } + = options checkTopicExists(topic, commandType) @@ -201,9 +187,9 @@ const multiPub = async (commandType: CommandType, options: BenchPublishOptions | let connectedCount = 0 - const isNewConnArray = Array(count).fill(true) + const isNewConnArray = Array.from({ length: count }, () => true) - const retryTimesArray = Array(count).fill(0) + const retryTimesArray = Array.from({ length: count }, () => 0) const interactive = new Signale({ interactive: true }) const simpleInteractive = new Signale({ @@ -310,7 +296,7 @@ const multiPub = async (commandType: CommandType, options: BenchPublishOptions | if (retryTimesArray[i - 1] > maximumReconnectTimes) { client.end(false, {}, () => { benchLog.reconnectTimesLimit(connectedCount, count, opts.clientId!) - if (retryTimesArray.findIndex((times) => times <= maximumReconnectTimes) === -1) { + if (retryTimesArray.findIndex(times => times <= maximumReconnectTimes) === -1) { process.exit(1) } }) @@ -330,14 +316,14 @@ const multiPub = async (commandType: CommandType, options: BenchPublishOptions | } } -const benchPub = async (options: BenchPublishOptions) => { +async function benchPub(options: BenchPublishOptions) { multiPub('benchPub', options) } -const simulatePub = async (options: SimulatePubOptions) => { +async function simulatePub(options: SimulatePubOptions) { multiPub('simulate', options) } export default pub -export { pub, benchPub, simulatePub } +export { benchPub, pub, simulatePub } diff --git a/apps/cli/src/lib/sub.ts b/apps/cli/src/lib/sub.ts index 55716f814..ab378fec0 100644 --- a/apps/cli/src/lib/sub.ts +++ b/apps/cli/src/lib/sub.ts @@ -1,18 +1,13 @@ +import type { BenchSubscribeOptions, FormatType, SubscribeOptions } from 'mqttx' import * as mqtt from 'mqtt' -import { Signale, signale, msgLog, basicLog, benchLog } from '../utils/signale' -import { parseConnectOptions, parseSubscribeOptions, checkTopicExists } from '../utils/parse' -import delay from '../utils/delay' +import { loadConfig, saveConfig } from '../utils/config' import convertPayload from '../utils/convertPayload' -import { saveConfig, loadConfig } from '../utils/config' +import delay from '../utils/delay' +import { checkTopicExists, parseConnectOptions, parseSubscribeOptions } from '../utils/parse' import { deserializeBufferToProtobuf } from '../utils/protobuf' -import { FormatType, SubscribeOptions, BenchSubscribeOptions } from 'mqttx' - -const processReceivedMessage = ( - payload: Buffer, - protobufPath: string | undefined, - protobufMessageName: string | undefined, - format: FormatType | undefined, -): string => { +import { basicLog, benchLog, msgLog, Signale, signale } from '../utils/signale' + +function processReceivedMessage(payload: Buffer, protobufPath: string | undefined, protobufMessageName: string | undefined, format: FormatType | undefined): string { let message: string | Buffer = payload /* * Pipeline for processing incoming messages, following two potential steps: @@ -36,7 +31,7 @@ const processReceivedMessage = ( return message } -const sub = (options: SubscribeOptions) => { +function sub(options: SubscribeOptions) { const { save, config } = options config && (options = loadConfig('sub', config)) @@ -96,13 +91,13 @@ const sub = (options: SubscribeOptions) => { options.verbose && msgData.push({ label: 'topic', value: topic }) - let receivedMessage = processReceivedMessage(payload, protobufPath, protobufMessageName, format) + const receivedMessage = processReceivedMessage(payload, protobufPath, protobufMessageName, format) msgData.push({ label: 'payload', value: receivedMessage }) packet.retain && msgData.push({ label: 'retain', value: packet.retain }) if (packet.properties?.userProperties) { - const up: { key: string; value: string }[] = [] + const up: { key: string, value: string }[] = [] Object.entries(packet.properties.userProperties).forEach(([key, value]) => { if (typeof value === 'string') { up.push({ key, value }) @@ -141,7 +136,7 @@ const sub = (options: SubscribeOptions) => { }) } -const benchSub = async (options: BenchSubscribeOptions) => { +async function benchSub(options: BenchSubscribeOptions) { const { save, config } = options config && (options = loadConfig('benchSub', config)) @@ -158,9 +153,9 @@ const benchSub = async (options: BenchSubscribeOptions) => { const subOptsArray = parseSubscribeOptions(options) - const isNewConnArray = Array(count).fill(true) + const isNewConnArray = Array.from({ length: count }, () => true) - const retryTimesArray = Array(count).fill(0) + const retryTimesArray = Array.from({ length: count }, () => 0) const interactive = new Signale({ interactive: true }) const simpleInteractive = new Signale({ @@ -262,7 +257,7 @@ const benchSub = async (options: BenchSubscribeOptions) => { if (retryTimesArray[i - 1] > maximumReconnectTimes) { client.end(false, {}, () => { benchLog.reconnectTimesLimit(connectedCount, count, opts.clientId!) - if (retryTimesArray.findIndex((times) => times <= maximumReconnectTimes) === -1) { + if (retryTimesArray.findIndex(times => times <= maximumReconnectTimes) === -1) { process.exit(1) } }) @@ -284,4 +279,4 @@ const benchSub = async (options: BenchSubscribeOptions) => { export default sub -export { sub, benchSub } +export { benchSub, sub } diff --git a/apps/cli/src/scenarios/IEM.ts b/apps/cli/src/scenarios/IEM.ts index 609c5e5b2..d887b46c0 100644 --- a/apps/cli/src/scenarios/IEM.ts +++ b/apps/cli/src/scenarios/IEM.ts @@ -1,18 +1,18 @@ -import { Faker } from '@faker-js/faker' -import { SimulatePubOptions } from 'mqttx' +import type { Faker } from '@faker-js/faker' +import type { SimulatePubOptions } from 'mqttx' -const calculateEnergyConsumption = (faker: Faker, maxPower: number) => { +function calculateEnergyConsumption(faker: Faker, maxPower: number) { const ratedPower = maxPower * 1000 const minInstantPower = ratedPower * 0.6 const instantPower = faker.datatype.number({ min: minInstantPower, max: ratedPower, precision: 0.001 }) const energy = instantPower / 3600 - return new Number(energy.toFixed(2)) + return Number(energy.toFixed(2)) } const dataCache: Record = {} -let factoryList: { id: string; name: string }[] = [] +let factoryList: { id: string, name: string }[] = [] -const generator = (faker: Faker, options: SimulatePubOptions) => { +function generator(faker: Faker, options: SimulatePubOptions) { // Some fields will not change every time data is generated, so store them according to id const { clientId, count } = options // Initialize the factory list @@ -60,4 +60,4 @@ const dataFormat = 'JSON' const version = '0.0.1' const description = 'Simulation to generate Industrial Energy Monitoring data.' -export { generator, name, author, dataFormat, version, description } +export { author, dataFormat, description, generator, name, version } diff --git a/apps/cli/src/scenarios/smart_home.ts b/apps/cli/src/scenarios/smart_home.ts index fa58c2291..78987b4cc 100644 --- a/apps/cli/src/scenarios/smart_home.ts +++ b/apps/cli/src/scenarios/smart_home.ts @@ -1,5 +1,5 @@ -import { Faker } from '@faker-js/faker' -import { SimulatePubOptions } from 'mqttx' +import type { Faker } from '@faker-js/faker' +import type { SimulatePubOptions } from 'mqttx' const dataCache: Record = {} @@ -25,7 +25,7 @@ interface BedroomData extends RoomData { bed_occupancy: boolean } -const generateRoomData = (faker: Faker, roomType: string): RoomData | KitchenData | BathroomData | BedroomData => { +function generateRoomData(faker: Faker, roomType: string): RoomData | KitchenData | BathroomData | BedroomData { const currentHour = new Date().getHours() const isDaytime = currentHour > 6 && currentHour < 20 const isSleepingHours = currentHour > 22 || currentHour < 6 @@ -70,7 +70,7 @@ const generateRoomData = (faker: Faker, roomType: string): RoomData | KitchenDat return baseData } -const generator = (faker: Faker, options: SimulatePubOptions) => { +function generator(faker: Faker, options: SimulatePubOptions) { const { clientId } = options if (!dataCache[clientId]) { dataCache[clientId] = { @@ -84,7 +84,7 @@ const generator = (faker: Faker, options: SimulatePubOptions) => { const data = { ...dataCache[clientId], - rooms: roomTypes.map((roomType) => generateRoomData(faker, roomType)), + rooms: roomTypes.map(roomType => generateRoomData(faker, roomType)), timestamp: Date.now(), } return { @@ -98,4 +98,4 @@ const dataFormat = 'JSON' const version = '0.0.1' const description = 'Simulation to generate Smart Home data.' -export { generator, name, author, dataFormat, version, description } +export { author, dataFormat, description, generator, name, version } diff --git a/apps/cli/src/scenarios/tesla.ts b/apps/cli/src/scenarios/tesla.ts index f396ead77..b70b195eb 100644 --- a/apps/cli/src/scenarios/tesla.ts +++ b/apps/cli/src/scenarios/tesla.ts @@ -1,15 +1,15 @@ -import { Faker } from '@faker-js/faker' -import { SimulatePubOptions } from 'mqttx' +import type { Faker } from '@faker-js/faker' +import type { SimulatePubOptions } from 'mqttx' const dataCache: Record = {} -const generator = (faker: Faker, options: SimulatePubOptions) => { +function generator(faker: Faker, options: SimulatePubOptions) { // Some fields will not change every time data is generated, so store them according to id const { clientId } = options if (!dataCache[clientId]) { dataCache[clientId] = { car_id: faker.vehicle.vin(), - display_name: faker.name.firstName() + "'s Tesla", + display_name: `${faker.name.firstName()}'s Tesla`, model: faker.helpers.arrayElement(['S', '3', 'X', 'Y']), trim_badging: faker.lorem.word(), exterior_color: faker.color.human(), @@ -78,6 +78,6 @@ const name = 'tesla' const author = 'EMQX Team' const dataFormat = 'JSON' const version = '0.0.1' -const description = "Simulation to generate Tesla's data, reference form https://github.com/adriankumpf/teslamate" +const description = 'Simulation to generate Tesla\'s data, reference form https://github.com/adriankumpf/teslamate' -export { generator, name, author, dataFormat, version, description } +export { author, dataFormat, description, generator, name, version } diff --git a/apps/cli/src/scenarios/weather.ts b/apps/cli/src/scenarios/weather.ts index aa68d9d00..54a08c2c3 100644 --- a/apps/cli/src/scenarios/weather.ts +++ b/apps/cli/src/scenarios/weather.ts @@ -1,5 +1,5 @@ -import { Faker } from '@faker-js/faker' -import { SimulatePubOptions } from 'mqttx' +import type { Faker } from '@faker-js/faker' +import type { SimulatePubOptions } from 'mqttx' const dataCache: Record = {} @@ -20,7 +20,7 @@ function getTimeOfDay() { return 'Evening' } -const generator = (faker: Faker, options: SimulatePubOptions) => { +function generator(faker: Faker, options: SimulatePubOptions) { const { clientId } = options if (!dataCache[clientId]) { dataCache[clientId] = { @@ -71,12 +71,12 @@ const generator = (faker: Faker, options: SimulatePubOptions) => { gust_mph: faker.datatype.number({ min: 0, max: 100 }), gust_kph: faker.datatype.number({ min: 0, max: 161 }), air_quality: { - co: faker.datatype.number({ min: 0, max: 500 }), - no2: faker.datatype.number({ min: 0, max: 1, precision: 0.01 }), - o3: faker.datatype.number({ min: 0, max: 100 }), - so2: faker.datatype.number({ min: 0, max: 1, precision: 0.01 }), - pm2_5: faker.datatype.number({ min: 0, max: 1, precision: 0.01 }), - pm10: faker.datatype.number({ min: 0, max: 5 }), + 'co': faker.datatype.number({ min: 0, max: 500 }), + 'no2': faker.datatype.number({ min: 0, max: 1, precision: 0.01 }), + 'o3': faker.datatype.number({ min: 0, max: 100 }), + 'so2': faker.datatype.number({ min: 0, max: 1, precision: 0.01 }), + 'pm2_5': faker.datatype.number({ min: 0, max: 1, precision: 0.01 }), + 'pm10': faker.datatype.number({ min: 0, max: 5 }), 'us-epa-index': faker.datatype.number({ min: 0, max: 5 }), 'gb-defra-index': faker.datatype.number({ min: 0, max: 5 }), }, @@ -92,6 +92,6 @@ const name = 'weather' const author = 'EMQX Team' const dataFormat = 'JSON' const version = '0.0.1' -const description = "Simulation to generate advanced weather station's data." +const description = 'Simulation to generate advanced weather station\'s data.' -export { generator, name, author, dataFormat, version, description } +export { author, dataFormat, description, generator, name, version } diff --git a/apps/cli/src/utils/checkUpdate.ts b/apps/cli/src/utils/checkUpdate.ts index d12fdd358..219801489 100644 --- a/apps/cli/src/utils/checkUpdate.ts +++ b/apps/cli/src/utils/checkUpdate.ts @@ -4,7 +4,7 @@ import { compareVersions } from 'compare-versions' import { version } from '../../package.json' -const checkUpdate = async () => { +async function checkUpdate() { try { const tagsUrl = 'https://community-sites.emqx.com/api/v1/all_version?product=MQTTX' const tagsRes = await axios.get(tagsUrl) diff --git a/apps/cli/src/utils/config.ts b/apps/cli/src/utils/config.ts index 8d5c9beb9..ac80ebca8 100644 --- a/apps/cli/src/utils/config.ts +++ b/apps/cli/src/utils/config.ts @@ -1,24 +1,24 @@ -import * as fs from 'fs' -import path from 'path' -import YAML from 'js-yaml' -import signale from '../utils/signale' -import { - Config, - ConnectOptions, +import type { BenchConnectOptions, - PublishOptions, - SubscribeOptions, BenchPublishOptions, BenchSubscribeOptions, CommandType, + Config, + ConnectOptions, + PublishOptions, SimulatePubOptions, + SubscribeOptions, } from 'mqttx' +import * as fs from 'node:fs' +import path from 'node:path' +import YAML from 'js-yaml' +import signale from '../utils/signale' const defaultPath = `${process.cwd()}/mqttx-cli-config.json` const fileExists = (filePath: string) => fs.existsSync(filePath) -const writeFile = (filePath: string, data: Config) => { +function writeFile(filePath: string, data: Config) { try { fs.mkdirSync(path.dirname(filePath), { recursive: true }) if (filePath.endsWith('.yaml') || filePath.endsWith('.yml')) { @@ -32,7 +32,7 @@ const writeFile = (filePath: string, data: Config) => { } } -const readFile = (path: string) => { +function readFile(path: string) { try { const config = fs.readFileSync(path, 'utf-8') if (path.endsWith('.yaml') || path.endsWith('.yml')) { @@ -47,7 +47,7 @@ const readFile = (path: string) => { const mergeConfig = (oldConfig: Config, newConfig: Config) => Object.assign({}, oldConfig, newConfig) -const processPath = (savePath: boolean | string) => { +function processPath(savePath: boolean | string) { let filePath = '' if (savePath === true) { filePath = defaultPath @@ -60,20 +60,18 @@ const processPath = (savePath: boolean | string) => { return filePath } -const removeUselessOptions = ( - opts: - | ConnectOptions - | PublishOptions - | SubscribeOptions - | BenchConnectOptions - | BenchPublishOptions - | BenchSubscribeOptions, -) => { +function removeUselessOptions(opts: + | ConnectOptions + | PublishOptions + | SubscribeOptions + | BenchConnectOptions + | BenchPublishOptions + | BenchSubscribeOptions) { const { save, config, ...rest } = opts return rest } -const validateConfig = (commandType: CommandType, filePath: string, config: Config) => { +function validateConfig(commandType: CommandType, filePath: string, config: Config) { const data = config[commandType] if (!data || typeof data !== 'object' || Object.keys(data).length === 0) { signale.error(`No configuration for ${commandType} found in ${filePath}`) @@ -81,16 +79,13 @@ const validateConfig = (commandType: CommandType, filePath: string, config: Conf } } -const saveConfig = ( - commandType: CommandType, - opts: - | ConnectOptions - | PublishOptions - | SubscribeOptions - | BenchConnectOptions - | BenchPublishOptions - | BenchSubscribeOptions, -) => { +function saveConfig(commandType: CommandType, opts: + | ConnectOptions + | PublishOptions + | SubscribeOptions + | BenchConnectOptions + | BenchPublishOptions + | BenchSubscribeOptions) { try { const filePath = processPath(opts.save!) let data: Config = {} @@ -131,6 +126,6 @@ function loadConfig(commandType: CommandType, savePath: boolean | string) { } } -export { saveConfig, loadConfig } +export { loadConfig, saveConfig } export default saveConfig diff --git a/apps/cli/src/utils/convertPayload.ts b/apps/cli/src/utils/convertPayload.ts index e03dc64ed..e14e73664 100644 --- a/apps/cli/src/utils/convertPayload.ts +++ b/apps/cli/src/utils/convertPayload.ts @@ -1,7 +1,7 @@ +import type { FormatType } from 'mqttx' import chalk from 'chalk' -import { FormatType } from 'mqttx' -const convertJSON = (value: Buffer | string, action: 'encode' | 'decode') => { +function convertJSON(value: Buffer | string, action: 'encode' | 'decode') { try { if (action === 'decode') { return JSON.stringify(JSON.parse(value.toString()), null, 2) @@ -13,7 +13,7 @@ const convertJSON = (value: Buffer | string, action: 'encode' | 'decode') => { } } -const convertPayload = (payload: Buffer | string, format?: FormatType, action: 'encode' | 'decode' = 'decode') => { +function convertPayload(payload: Buffer | string, format?: FormatType, action: 'encode' | 'decode' = 'decode') { const actions = { encode: { base64: () => Buffer.from(payload.toString(), 'base64'), diff --git a/apps/cli/src/utils/delay.ts b/apps/cli/src/utils/delay.ts index 9dafe63f9..a8a2bb122 100644 --- a/apps/cli/src/utils/delay.ts +++ b/apps/cli/src/utils/delay.ts @@ -1,3 +1,3 @@ -const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) +const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) export default delay diff --git a/apps/cli/src/utils/parse.ts b/apps/cli/src/utils/parse.ts index 6eb8968fb..81306cec8 100644 --- a/apps/cli/src/utils/parse.ts +++ b/apps/cli/src/utils/parse.ts @@ -1,21 +1,21 @@ -import * as fs from 'fs' -import signale from '../utils/signale' -import { getSpecialTypesOption } from '../utils/generator' +import type { IClientOptions, IClientPublishOptions, IClientSubscribeOptions } from 'mqtt' +import type { CommandType, ConnectOptions, PublishOptions, SubscribeOptions } from 'mqttx' +import * as fs from 'node:fs' -import { IClientOptions, IClientPublishOptions, IClientSubscribeOptions } from 'mqtt' +import { getSpecialTypesOption } from '../utils/generator' +import signale from '../utils/signale' import { getLocalScenarioList, getScenarioFilePath } from './simulate' -import { CommandType, ConnectOptions, PublishOptions, SubscribeOptions } from 'mqttx' -const parseNumber = (value: string) => { +function parseNumber(value: string) { const parsedValue = Number(value) - if (isNaN(parsedValue)) { + if (Number.isNaN(parsedValue)) { signale.error(`${value} is not a number.`) process.exit(1) } return parsedValue } -const parseProtocol = (value: string) => { +function parseProtocol(value: string) { if (!['mqtt', 'mqtts', 'ws', 'wss'].includes(value)) { signale.error('Only mqtt, mqtts, ws and wss are supported.') process.exit(1) @@ -23,7 +23,7 @@ const parseProtocol = (value: string) => { return value } -const parseMQTTVersion = (value: string) => { +function parseMQTTVersion(value: string) { const dict = { '3.1': 3, '3.1.1': 4, @@ -36,7 +36,7 @@ const parseMQTTVersion = (value: string) => { return dict[value as '3.1' | '3.1.1' | '5'] } -const parseUserProperties = (value: string, previous?: Record) => { +function parseUserProperties(value: string, previous?: Record) { const [key, val] = value.split(': ') if (key && val) { if (!previous) { @@ -59,9 +59,9 @@ const parseUserProperties = (value: string, previous?: Record { +function parseQoS(value: string, previous: number[] | undefined) { const parsedValue = Number(value) - if (isNaN(parsedValue) || parsedValue < 0 || parsedValue > 2) { + if (Number.isNaN(parsedValue) || parsedValue < 0 || parsedValue > 2) { signale.error(`${value} is not a valid QoS.`) process.exit(1) } else { @@ -69,7 +69,7 @@ const parseQoS = (value: string, previous: number[] | undefined) => { } } -const parseVariadicOfBooleanType = (value: string, previous: boolean[] | undefined) => { +function parseVariadicOfBooleanType(value: string, previous: boolean[] | undefined) { if (!['true', 'false'].includes(value)) { signale.error(`${value} is not a boolean.`) process.exit(1) @@ -79,18 +79,18 @@ const parseVariadicOfBooleanType = (value: string, previous: boolean[] | undefin } } -const checkTopicExists = (topic: string | string[] | undefined, commandType: CommandType) => { +function checkTopicExists(topic: string | string[] | undefined, commandType: CommandType) { if (!topic) { if (['pub', 'benchPub', 'simulate'].includes(commandType)) { - console.log("error: required option '-t, --topic ' not specified") + console.log('error: required option \'-t, --topic \' not specified') } else if (['sub', 'benchSub'].includes(commandType)) { - console.log("error: required option '-t, --topic ' not specified") + console.log('error: required option \'-t, --topic \' not specified') } process.exit(1) } } -const parsePubTopic = (value: string) => { +function parsePubTopic(value: string) { if (value.includes('+') || value.includes('#')) { signale.error('You cannot publish the message to a Topic that contains wildcards characters #, +') process.exit(1) @@ -98,7 +98,7 @@ const parsePubTopic = (value: string) => { return value } -const parseFormat = (value: string) => { +function parseFormat(value: string) { if (!['base64', 'json', 'hex'].includes(value)) { signale.error('Not a valid format type.') process.exit(1) @@ -106,7 +106,7 @@ const parseFormat = (value: string) => { return value } -const parseOutputMode = (value: string) => { +function parseOutputMode(value: string) { if (!['clean', 'default'].includes(value)) { signale.error('Not a valid output mode.') process.exit(1) @@ -114,10 +114,10 @@ const parseOutputMode = (value: string) => { return value } -const checkScenarioExists = (name?: string, file?: string) => { +function checkScenarioExists(name?: string, file?: string) { if (!name && !file) { console.log( - "error: required option '-sc, --scenario ' or '-f, --file ' not specified", + 'error: required option \'-sc, --scenario \' or \'-f, --file \' not specified', ) process.exit(1) } @@ -143,10 +143,7 @@ const checkScenarioExists = (name?: string, file?: string) => { } } -const parseConnectOptions = ( - options: ConnectOptions | PublishOptions | SubscribeOptions, - commandType?: CommandType, -) => { +function parseConnectOptions(options: ConnectOptions | PublishOptions | SubscribeOptions, commandType?: CommandType) { const { mqttVersion, hostname, @@ -243,17 +240,17 @@ const parseConnectOptions = ( userProperties: willUserProperties, } - connectOptions.will && - (connectOptions.will.properties = Object.fromEntries( - Object.entries(willProperties).filter(([_, v]) => v !== null && v !== undefined), - )) + connectOptions.will + && (connectOptions.will.properties = Object.fromEntries( + Object.entries(willProperties).filter(([_, v]) => v !== null && v !== undefined), + )) } let optionsTempWorkAround if (mqttVersion === 3) { connectOptions.protocolId = 'MQIsdp' } else if (mqttVersion === 5) { - const userProperties = - commandType === 'conn' ? options.userProperties : (options).connUserProperties + const userProperties + = commandType === 'conn' ? options.userProperties : (options).connUserProperties const properties = { sessionExpiryInterval, receiveMaximum, @@ -268,7 +265,7 @@ const parseConnectOptions = ( if (sessionExpiryInterval !== undefined) { properties.sessionExpiryInterval = sessionExpiryInterval } else { - properties.sessionExpiryInterval = parseInt('0xFFFFFFFF', 16) + properties.sessionExpiryInterval = Number.parseInt('0xFFFFFFFF', 16) } } @@ -286,7 +283,7 @@ const parseConnectOptions = ( return optionsTempWorkAround || connectOptions } -const parsePublishOptions = (options: PublishOptions) => { +function parsePublishOptions(options: PublishOptions) { const { topic, message, @@ -332,7 +329,7 @@ const parsePublishOptions = (options: PublishOptions) => { return { topic, message, protobufPath, protobufMessageName, format, opts: publishOptions } } -const parseSubscribeOptions = (options: SubscribeOptions) => { +function parseSubscribeOptions(options: SubscribeOptions) { const { mqttVersion, topic, @@ -372,18 +369,18 @@ const parseSubscribeOptions = (options: SubscribeOptions) => { } export { - parseNumber, - parseProtocol, - parseMQTTVersion, - parseUserProperties, - parseQoS, - parseVariadicOfBooleanType, - checkTopicExists, checkScenarioExists, - parsePubTopic, + checkTopicExists, + parseConnectOptions, parseFormat, + parseMQTTVersion, + parseNumber, parseOutputMode, - parseConnectOptions, + parseProtocol, parsePublishOptions, + parsePubTopic, + parseQoS, parseSubscribeOptions, + parseUserProperties, + parseVariadicOfBooleanType, } diff --git a/apps/cli/src/utils/protobuf.ts b/apps/cli/src/utils/protobuf.ts index b7e95a8d5..785858f6b 100644 --- a/apps/cli/src/utils/protobuf.ts +++ b/apps/cli/src/utils/protobuf.ts @@ -1,14 +1,10 @@ +import type { FormatType } from 'mqttx' import protobuf from 'protobufjs' -import signale from './signale' import { transformPBJSError } from './protobufErrors' -import { FormatType } from 'mqttx' +import signale from './signale' -export const serializeProtobufToBuffer = ( - raw: string | Buffer, - protobufPath: string, - protobufMessageName: string, -): Buffer => { - let rawData = raw.toString('utf-8') +export function serializeProtobufToBuffer(raw: string | Buffer, protobufPath: string, protobufMessageName: string): Buffer { + const rawData = raw.toString('utf-8') let bufferMessage = Buffer.from(rawData) try { const root = protobuf.loadSync(protobufPath) @@ -28,12 +24,7 @@ export const serializeProtobufToBuffer = ( return bufferMessage } -export const deserializeBufferToProtobuf = ( - payload: Buffer, - protobufPath: string, - protobufMessageName: string, - needFormat: FormatType | undefined, -): any => { +export function deserializeBufferToProtobuf(payload: Buffer, protobufPath: string, protobufMessageName: string, needFormat: FormatType | undefined): any { try { const root = protobuf.loadSync(protobufPath) const Message = root.lookupType(protobufMessageName) @@ -48,7 +39,7 @@ export const deserializeBufferToProtobuf = ( } return MessageData } catch (error: unknown) { - let err = transformPBJSError(error as Error) + const err = transformPBJSError(error as Error) signale.error(err.message.split('\n')[0]) process.exit(1) } diff --git a/apps/cli/src/utils/protobufErrors.ts b/apps/cli/src/utils/protobufErrors.ts index 05b535d77..d54b734a4 100644 --- a/apps/cli/src/utils/protobufErrors.ts +++ b/apps/cli/src/utils/protobufErrors.ts @@ -10,7 +10,7 @@ function indexOutOfRange(msg: string): string { return `Index out of range: the reader was at position ${pos} and tried to read ${read} more (bytes), but the given buffer was ${len} bytes` } - const regex = /index out of range: ([0-9]+) \+ ([0-9]+) > ([0-9]+)/ + const regex = /index out of range: (\d+) \+ (\d+) > (\d+)/ const res = msg.match(regex) diff --git a/apps/cli/src/utils/signale.ts b/apps/cli/src/utils/signale.ts index 3cb7257a4..ef7495c3a 100644 --- a/apps/cli/src/utils/signale.ts +++ b/apps/cli/src/utils/signale.ts @@ -1,6 +1,6 @@ -import { Signale } from 'signale' +import { inspect } from 'node:util' import chalk from 'chalk' -import { inspect } from 'util' +import { Signale } from 'signale' const option = { config: { @@ -12,7 +12,7 @@ const option = { const signale = new Signale(option) -const msgLog = (msg: Record[]) => { +function msgLog(msg: Record[]) { let chalkString = '' msg.forEach((item) => { if (typeof item.value === 'object') { @@ -39,7 +39,7 @@ const basicLog = { connected: () => signale.success('Connected'), subscribing: (t: string) => signale.await(`Subscribing to ${t}...`), subscribed: (t: string) => signale.success(`Subscribed to ${t}`), - subscriptionNegated: (sub: { topic: string; qos: number }) => + subscriptionNegated: (sub: { topic: string, qos: number }) => signale.error(`Subscription negated to ${sub.topic} with code ${sub.qos}`), publishing: () => signale.await('Message publishing...'), published: () => signale.success('Message published'), @@ -138,6 +138,6 @@ const simulateLog = { }, } -export { Signale, signale, msgLog, basicLog, benchLog, simulateLog } +export { basicLog, benchLog, msgLog, Signale, signale, simulateLog } export default signale diff --git a/apps/cli/src/utils/simulate.ts b/apps/cli/src/utils/simulate.ts index 4edf4d605..263e25a65 100644 --- a/apps/cli/src/utils/simulate.ts +++ b/apps/cli/src/utils/simulate.ts @@ -1,7 +1,7 @@ +import type { SimulatePubOptions, Simulator } from 'mqttx' +import * as fs from 'node:fs' +import * as path from 'node:path' import { faker } from '@faker-js/faker' -import * as fs from 'fs' -import * as path from 'path' -import { Simulator, SimulatePubOptions } from 'mqttx' const scenarioFolder = path.join(__dirname, '../scenarios') @@ -12,13 +12,13 @@ const getLocalScenarioList = function (): string[] { // Read the files in the scenario folder const files = fs .readdirSync(scenarioFolder) - .filter((file) => file.endsWith('.js')) - .map((file) => ({ + .filter(file => file.endsWith('.js')) + .map(file => ({ name: file.replace('.js', ''), birthtime: fs.statSync(path.join(scenarioFolder, file)).birthtime.getTime(), })) .sort((a, b) => b.birthtime - a.birthtime) - .map((file) => file.name) + .map(file => file.name) return files } @@ -45,7 +45,7 @@ const loadSimulator = function (name?: string, file?: string): Simulator { const simulatorModule = require(filePath) if (typeof simulatorModule.generator !== 'function') { - throw new Error('Not a valid simulator module') + throw new TypeError('Not a valid simulator module') } // Rewrite generator to auto inject faker diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json index 888b42c05..2ceab4cdc 100644 --- a/apps/cli/tsconfig.json +++ b/apps/cli/tsconfig.json @@ -1,10 +1,10 @@ { "extends": "@mqttx/tsconfig/cli.json", - "include": ["src"], "compilerOptions": { - "outDir": "./dist", - "typeRoots": [ "./node_modules/@types" ], + "typeRoots": ["./node_modules/@types"], "types": ["signale", "mqttx", "node"], + "outDir": "./dist" }, + "include": ["src"], "exclude": ["node_modules", "dist", "bin"] } diff --git a/apps/desktop/.eslintrc.cjs b/apps/desktop/.eslintrc.cjs deleted file mode 100644 index 19104ebb0..000000000 --- a/apps/desktop/.eslintrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['custom/desktop'], -} diff --git a/apps/desktop/electron.vite.config.ts b/apps/desktop/electron.vite.config.ts index 45da2db60..eff738bd5 100644 --- a/apps/desktop/electron.vite.config.ts +++ b/apps/desktop/electron.vite.config.ts @@ -1,9 +1,9 @@ -import { resolve } from 'path' -import { defineConfig, externalizeDepsPlugin } from 'electron-vite' +import { resolve } from 'node:path' import vue from '@vitejs/plugin-vue' -import VueRouter from 'unplugin-vue-router/vite' -import Components from 'unplugin-vue-components/vite' +import { defineConfig, externalizeDepsPlugin } from 'electron-vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' +import Components from 'unplugin-vue-components/vite' +import VueRouter from 'unplugin-vue-router/vite' export default defineConfig({ main: { diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 37270eb8f..cdb5f901e 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -5,6 +5,9 @@ "author": "EMQX Team ", "homepage": "https://mqttx.app", "main": "./out/main/index.js", + "engines": { + "node": ">=18" + }, "scripts": { "dev": "electron-vite dev", "prebuild": "npm run typecheck && electron-vite build", @@ -14,7 +17,6 @@ "build:mac": "npm run prebuild && electron-builder --mac --config", "build:linux": "npm run prebuild && electron-builder --linux --config", "preview": "electron-vite preview", - "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix", "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", "typecheck:web": "vue-tsc --noEmit -p tsconfig.web.json --composite false", "typecheck": "npm run typecheck:node && npm run typecheck:web" @@ -43,7 +45,6 @@ "electron": "^27.0.2", "electron-builder": "^24.6.3", "electron-vite": "^1.0.27", - "eslint-config-custom": "workspace:*", "jsdom": "^22.1.0", "postcss": "^8.4.31", "sass": "^1.69.3", @@ -55,8 +56,5 @@ "vitest": "^0.34.6", "vue": "^3.3.4", "vue-tsc": "^1.8.8" - }, - "engines": { - "node": ">=18" } } diff --git a/apps/desktop/src/main/index.ts b/apps/desktop/src/main/index.ts index 5ed7ee4a8..a919639c6 100644 --- a/apps/desktop/src/main/index.ts +++ b/apps/desktop/src/main/index.ts @@ -1,6 +1,6 @@ -import { app, shell, BrowserWindow } from 'electron' -import { join } from 'path' -import { electronApp, optimizer, is } from '@electron-toolkit/utils' +import { join } from 'node:path' +import { electronApp, is, optimizer } from '@electron-toolkit/utils' +import { app, BrowserWindow, shell } from 'electron' import icon from '../../resources/icon.png?asset' const IsMacOS = process.platform === 'darwin' @@ -31,8 +31,8 @@ function createWindow(): void { // HMR for renderer base on electron-vite cli. // Load the remote URL for development or the local html file for production. - if (is.dev && process.env['ELECTRON_RENDERER_URL']) { - mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) + if (is.dev && process.env.ELECTRON_RENDERER_URL) { + mainWindow.loadURL(process.env.ELECTRON_RENDERER_URL) } else { mainWindow.loadFile(join(__dirname, '../renderer/index.html')) } @@ -54,7 +54,7 @@ app.whenReady().then(() => { createWindow() - app.on('activate', function () { + app.on('activate', () => { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) createWindow() diff --git a/apps/desktop/src/preload/index.d.ts b/apps/desktop/src/preload/index.d.ts index a15366957..e85d4c813 100644 --- a/apps/desktop/src/preload/index.d.ts +++ b/apps/desktop/src/preload/index.d.ts @@ -1,4 +1,4 @@ -import { ElectronAPI } from '@electron-toolkit/preload' +import type { ElectronAPI } from '@electron-toolkit/preload' declare global { interface Window { diff --git a/apps/desktop/src/preload/index.ts b/apps/desktop/src/preload/index.ts index 2d1852475..7aa398591 100644 --- a/apps/desktop/src/preload/index.ts +++ b/apps/desktop/src/preload/index.ts @@ -1,5 +1,5 @@ -import { contextBridge } from 'electron' import { electronAPI } from '@electron-toolkit/preload' +import { contextBridge } from 'electron' // Custom APIs for renderer const api = {} @@ -15,8 +15,8 @@ if (process.contextIsolated) { console.error(error) } } else { - // @ts-ignore (define in dts) + // @ts-expect-error (define in dts) window.electron = electronAPI - // @ts-ignore (define in dts) + // @ts-expect-error (define in dts) window.api = api } diff --git a/apps/desktop/src/renderer/src/App.vue b/apps/desktop/src/renderer/src/App.vue index ed26779ea..3a2211ced 100644 --- a/apps/desktop/src/renderer/src/App.vue +++ b/apps/desktop/src/renderer/src/App.vue @@ -1,6 +1,5 @@ diff --git a/packages/ui/src/composables/__test__/useLinks.test.ts b/packages/ui/src/composables/__test__/useLinks.test.ts index fe6fe9111..70a683421 100644 --- a/packages/ui/src/composables/__test__/useLinks.test.ts +++ b/packages/ui/src/composables/__test__/useLinks.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' import { ref } from 'vue' import useLinks from '../useLinks' diff --git a/packages/ui/src/i18n/__test__/i18n.test.ts b/packages/ui/src/i18n/__test__/i18n.test.ts index bb2735f04..845a0ddd3 100644 --- a/packages/ui/src/i18n/__test__/i18n.test.ts +++ b/packages/ui/src/i18n/__test__/i18n.test.ts @@ -1,41 +1,41 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' import { ElementI18nMap, i18n } from '../index' describe('i18nSetup', () => { - it('ElementI18nMap should map language codes to Element Plus locales', () => { - expect(ElementI18nMap['zh']).toBeDefined() - expect(ElementI18nMap['en']).toBeDefined() - expect(ElementI18nMap['ja']).toBeDefined() - expect(ElementI18nMap['hu']).toBeDefined() - expect(ElementI18nMap['tr']).toBeDefined() + it('elementI18nMap should map language codes to Element Plus locales', () => { + expect(ElementI18nMap.zh).toBeDefined() + expect(ElementI18nMap.en).toBeDefined() + expect(ElementI18nMap.ja).toBeDefined() + expect(ElementI18nMap.hu).toBeDefined() + expect(ElementI18nMap.tr).toBeDefined() }) it('i18n messages should be correctly populated from modules', () => { const messages = i18n.global.messages as unknown as Record // Assertions for English - expect(messages['en']).toBeDefined() - expect(messages['en']['connections']).toBeDefined() - expect(messages['en']['connections']['connections']).toBe('Connections') + expect(messages.en).toBeDefined() + expect(messages.en.connections).toBeDefined() + expect(messages.en.connections.connections).toBe('Connections') // Assertions for Chinese - expect(messages['zh']).toBeDefined() - expect(messages['zh']['connections']).toBeDefined() - expect(messages['zh']['connections']['connections']).toBe('连接') + expect(messages.zh).toBeDefined() + expect(messages.zh.connections).toBeDefined() + expect(messages.zh.connections.connections).toBe('连接') // Assertions for Hungarian - expect(messages['hu']).toBeDefined() - expect(messages['hu']['connections']).toBeDefined() - expect(messages['hu']['connections']['connections']).toBe('Kapcsolatok') + expect(messages.hu).toBeDefined() + expect(messages.hu.connections).toBeDefined() + expect(messages.hu.connections.connections).toBe('Kapcsolatok') // Assertions for Japanese - expect(messages['ja']).toBeDefined() - expect(messages['ja']['connections']).toBeDefined() - expect(messages['ja']['connections']['connections']).toBe('接続') + expect(messages.ja).toBeDefined() + expect(messages.ja.connections).toBeDefined() + expect(messages.ja.connections.connections).toBe('接続') // Assertions for Turkish - expect(messages['tr']).toBeDefined() - expect(messages['tr']['connections']).toBeDefined() - expect(messages['tr']['connections']['connections']).toBe('Bağlantılar') + expect(messages.tr).toBeDefined() + expect(messages.tr.connections).toBeDefined() + expect(messages.tr.connections.connections).toBe('Bağlantılar') }) it('i18n should have correct initial configuration', () => { diff --git a/packages/ui/src/i18n/about.ts b/packages/ui/src/i18n/about.ts index f9f746d7d..bec526a82 100644 --- a/packages/ui/src/i18n/about.ts +++ b/packages/ui/src/i18n/about.ts @@ -58,7 +58,7 @@ export default { tryCloud: { zh: '免费试用 EMQX Cloud', en: 'Try EMQX Cloud for free', - tr: "EMQX Cloud'u ücretsiz deneyin", + tr: 'EMQX Cloud\'u ücretsiz deneyin', ja: 'EMQX Cloudの無料体験', hu: 'Az EMQX Cloud ingyenes próbaverziója', }, diff --git a/packages/ui/src/i18n/common.ts b/packages/ui/src/i18n/common.ts index 283cdeeb0..97ec19bf4 100644 --- a/packages/ui/src/i18n/common.ts +++ b/packages/ui/src/i18n/common.ts @@ -233,14 +233,14 @@ export default { emqx: { zh: '想要部署一个自托管的 MQTT 服务,试试 {emqx} 吧。', en: 'To deploy a self-managed MQTT Broker, try {emqx}.', - tr: "Kendi yönettiğiniz bir MQTT Broker'a sahip olmak için {emqx}'i deneyin.", + tr: 'Kendi yönettiğiniz bir MQTT Broker\'a sahip olmak için {emqx}\'i deneyin.', ja: '自己管理型のMQTT Brokerをデプロイするには、{emqx}を試してください。', hu: 'Próbálja ki a saját maga kezelésében lévő MQTT Broker telepítését a {emqx} segítségével.', }, cloud: { zh: '需要一个云原生的全托管 MQTT 服务?一键部署 {cloud}!', en: 'Need a fully managed MQTT cloud service? Try {cloud} Now!', - tr: "Tamamen yönetilen bir MQTT bulut hizmetine mi ihtiyacınız var? {cloud}'i şimdi deneyin!", + tr: 'Tamamen yönetilen bir MQTT bulut hizmetine mi ihtiyacınız var? {cloud}\'i şimdi deneyin!', ja: '完全に管理されたMQTTクラウドサービスが必要ですか?今すぐ{cloud}を試してください!', hu: 'Szüksége van egy teljesen kezelt MQTT felhőszolgáltatásra? Próbálja ki most a {cloud}!', }, diff --git a/packages/ui/src/i18n/connections.ts b/packages/ui/src/i18n/connections.ts index 9cfb833b2..883de50d6 100644 --- a/packages/ui/src/i18n/connections.ts +++ b/packages/ui/src/i18n/connections.ts @@ -478,7 +478,7 @@ export default { clientIdWithTimeTip: { zh: '在连接时附加时间戳到 ClientID,以防止重复的连接', en: 'Append a timestamp to the ClientID at connection time to prevent duplicate connections', - tr: "Yinelenen bağlantıları önlemek için ClientID'ye bir zaman damgası ekleyin", + tr: 'Yinelenen bağlantıları önlemek için ClientID\'ye bir zaman damgası ekleyin', ja: '重複接続を防ぐために、ClientIDにタイムスタンプを追加します', hu: 'Adjon hozzá egy időbélyeget a ClientID-hoz, hogy elkerülje a duplikációt.', }, @@ -735,9 +735,9 @@ export default { }, secureTip: { zh: '是否验证服务端证书链和地址名称', - en: "Whether a client verifies the server's certificate chain and host name", + en: 'Whether a client verifies the server\'s certificate chain and host name', tr: 'İstemcinin sunucunun sertifika zincirini ve ana bilgisayar adını doğrulayıp doğrulamadığı', - ja: "Whether a client verifies the server's certificate chain and host name", + ja: 'Whether a client verifies the server\'s certificate chain and host name', hu: 'Amennyiben a kliens visszaigazolja a szerver tanusítványt láncot és a kiszolgáló nevét', }, newCollection: { diff --git a/packages/ui/src/i18n/help.ts b/packages/ui/src/i18n/help.ts index 0e6218f4d..789289a05 100644 --- a/packages/ui/src/i18n/help.ts +++ b/packages/ui/src/i18n/help.ts @@ -106,10 +106,10 @@ export default { }, guideArticle8: { zh: 'MQTT 保留消息是什么?如何使用?', - en: "The Beginner's Guide to MQTT Retained Messages", - ja: "The Beginner's Guide to MQTT Retained Messages", - tr: "The Beginner's Guide to MQTT Retained Messages", - hu: "The Beginner's Guide to MQTT Retained Messages", + en: 'The Beginner\'s Guide to MQTT Retained Messages', + ja: 'The Beginner\'s Guide to MQTT Retained Messages', + tr: 'The Beginner\'s Guide to MQTT Retained Messages', + hu: 'The Beginner\'s Guide to MQTT Retained Messages', }, guideArticle9: { zh: 'MQTT 遗嘱消息(Will Message)的使用', diff --git a/packages/ui/src/i18n/index.ts b/packages/ui/src/i18n/index.ts index 2120b05bc..8c59618bd 100644 --- a/packages/ui/src/i18n/index.ts +++ b/packages/ui/src/i18n/index.ts @@ -1,10 +1,10 @@ -import { createI18n } from 'vue-i18n' -import ElementPlusZH from 'element-plus/dist/locale/zh-cn.mjs' +import type { Lang } from 'mqttx' import ElementPlusEN from 'element-plus/dist/locale/en.mjs' -import ElementPlusJA from 'element-plus/dist/locale/ja.mjs' import ElementPlusHU from 'element-plus/dist/locale/hu.mjs' +import ElementPlusJA from 'element-plus/dist/locale/ja.mjs' import ElementPlusTR from 'element-plus/dist/locale/tr.mjs' -import type { Lang } from 'mqttx' +import ElementPlusZH from 'element-plus/dist/locale/zh-cn.mjs' +import { createI18n } from 'vue-i18n' export const ElementI18nMap: Record = { zh: ElementPlusZH, diff --git a/packages/ui/src/i18n/menu.ts b/packages/ui/src/i18n/menu.ts index c924b46fd..323662b91 100644 --- a/packages/ui/src/i18n/menu.ts +++ b/packages/ui/src/i18n/menu.ts @@ -45,7 +45,7 @@ export default { en: 'Quit MQTTX', zh: '退出 MQTTX', ja: 'MQTTX を終了', - tr: "MQTTX'i Kapat", + tr: 'MQTTX\'i Kapat', hu: 'MQTTX kilépése', }, file: { diff --git a/packages/ui/src/i18n/settings.ts b/packages/ui/src/i18n/settings.ts index 967adbb7e..205145a2a 100644 --- a/packages/ui/src/i18n/settings.ts +++ b/packages/ui/src/i18n/settings.ts @@ -162,7 +162,7 @@ export default { }, jsonHighlightDesc: { zh: '启用此选项后,将对接收到的 JSON 格式的 Payload 数据进行实时高亮显示。
注意:这可能影响应用的性能。如果你在使用时遇到性能问题,可以尝试关闭这个选项。', - en: "Highlight received payload data in real-time with JSON format.
Enabling this feature may affect the application's performance, so consider turning it off if you experience performance issues.", + en: 'Highlight received payload data in real-time with JSON format.
Enabling this feature may affect the application\'s performance, so consider turning it off if you experience performance issues.', tr: 'Bu özelliği etkinleştirerek, JSON formatındaki alınan yük verilerini gerçek zamanlı olarak vurgulayabilirsiniz.
Not: Bu, uygulamanın performansını etkileyebilir. Performans sorunları yaşıyorsanız, bu özelliği devre dışı bırakmayı düşünün.', ja: 'この機能を有効にすると、リアルタイムで受信したJSON形式のPayloadデータをハイライト表示します。
注意:これによりアプリケーションのパフォーマンスが影響を受ける可能性があります。パフォーマンスに問題がある場合は、この機能を無効にすることを検討してください。', hu: 'Engedélyezze ezt a funkciót, hogy a JSON formátumú, fogadott terhelési adatokat valós időben kiemelje.
Megjegyzés: Ez befolyásolhatja az alkalmazás teljesítményét. Ha teljesítményproblémákat tapasztal, fontolja meg ennek a funkcióknak a letiltását.', diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 1664068ff..a89563468 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -1,23 +1,23 @@ -import 'element-plus/dist/index.css' -import './styles/index.scss' -import './assets/fonts/iconfont' - import type { App } from 'vue' import { createPinia } from 'pinia' - -import ConnectionListView from './components/connections/ListView.vue' -import ConnectionDetailsView from './components/connections/DetailsView.vue' import EmptyView from './components/common/EmptyView.vue' + import LeftMenu from './components/common/LeftMenu.vue' import MainView from './components/common/MainView.vue' + import SplitView from './components/common/SplitView.vue' +import ConnectionDetailsView from './components/connections/DetailsView.vue' +import ConnectionListView from './components/connections/ListView.vue' +import 'element-plus/dist/index.css' +import './styles/index.scss' +import './assets/fonts/iconfont' export const pinia = createPinia() -export * from './stores' export * from './i18n' +export * from './stores' -export { ConnectionListView, ConnectionDetailsView, EmptyView, LeftMenu, MainView, SplitView } +export { ConnectionDetailsView, ConnectionListView, EmptyView, LeftMenu, MainView, SplitView } export default { install: (app: App) => { diff --git a/packages/ui/src/stores/__test__/useSettings.test.ts b/packages/ui/src/stores/__test__/useSettings.test.ts index ccf6ca480..9873281d5 100644 --- a/packages/ui/src/stores/__test__/useSettings.test.ts +++ b/packages/ui/src/stores/__test__/useSettings.test.ts @@ -1,5 +1,5 @@ +import { createPinia, setActivePinia } from 'pinia' import { beforeEach, describe, expect, it, vi } from 'vitest' -import { setActivePinia, createPinia } from 'pinia' import { useSettingsStore } from '../useSettingsStore' // Mocking a class for localStorage with all necessary methods @@ -10,12 +10,15 @@ class LocalStorageMock { setItem = vi.fn((key: string, value: string): void => { this.store[key] = value }) + removeItem = vi.fn((key: string): void => { delete this.store[key] }) + clear = vi.fn((): void => { this.store = {} }) + key = vi.fn((index: number): string | null => Object.keys(this.store)[index] || null) get length(): number { return Object.keys(this.store).length @@ -23,14 +26,14 @@ class LocalStorageMock { } // Set the mock localStorage on the global object -global.localStorage = new LocalStorageMock() as unknown as Storage +globalThis.localStorage = new LocalStorageMock() as unknown as Storage // Set up Pinia store and reset mocks before each test beforeEach(() => { // Create a fresh instance of Pinia and setActivePinia setActivePinia(createPinia()) // Reset the local storage mock's store - ;(global.localStorage as unknown as LocalStorageMock).store = {} + ;(globalThis.localStorage as unknown as LocalStorageMock).store = {} vi.clearAllMocks() }) diff --git a/packages/ui/src/stores/useConnectionsStore.ts b/packages/ui/src/stores/useConnectionsStore.ts index b744ba6a1..8f7e537f1 100644 --- a/packages/ui/src/stores/useConnectionsStore.ts +++ b/packages/ui/src/stores/useConnectionsStore.ts @@ -1,7 +1,7 @@ -import { ref } from 'vue' import { defineStore } from 'pinia' +import { ref } from 'vue' -const connectionsStoreSetup = () => { +function connectionsStoreSetup() { const count = ref(0) function increment() { count.value += 1 diff --git a/packages/ui/src/stores/useSettingsStore.ts b/packages/ui/src/stores/useSettingsStore.ts index 2b68153fa..29c4568e0 100644 --- a/packages/ui/src/stores/useSettingsStore.ts +++ b/packages/ui/src/stores/useSettingsStore.ts @@ -1,9 +1,9 @@ -import { ref, watch } from 'vue' -import { defineStore } from 'pinia' import type { Lang, Theme } from 'mqttx' +import { defineStore } from 'pinia' +import { ref, watch } from 'vue' import { i18n } from '../i18n' -const settingsStoreSetup = () => { +function settingsStoreSetup() { const theme = ref('dark') function changeTheme(val: Theme) { theme.value = val diff --git a/packages/ui/tailwind.config.ts b/packages/ui/tailwind.config.ts index a514ec352..aabdd5056 100644 --- a/packages/ui/tailwind.config.ts +++ b/packages/ui/tailwind.config.ts @@ -1,5 +1,5 @@ +import type { Config } from 'tailwindcss' import baseConfig from '@mqttx/tailwind-config/base.config' -import { Config } from 'tailwindcss' const config: Config = { presets: [baseConfig], diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 42e7d268e..cef83b780 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,26 +1,26 @@ { "compilerOptions": { "target": "ES2020", + "jsx": "preserve", + "lib": ["ES2020", "DOM", "DOM.Iterable"], "useDefineForClassFields": true, "module": "ESNext", - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "skipLibCheck": true, - "types": ["element-plus/global", "node", "mqttx", "vite/client"], - "verbatimModuleSyntax": true, /* Bundler mode */ "moduleResolution": "bundler", - "allowImportingTsExtensions": true, "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "preserve", + "types": ["element-plus/global", "node", "mqttx", "vite/client"], + "allowImportingTsExtensions": true, /* Linting */ "strict": true, + "noFallthroughCasesInSwitch": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true + "noEmit": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "__test__"], - "exclude": ["node_modules"], "references": [{ "path": "./tsconfig.node.json" }], + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "__test__"], + "exclude": ["node_modules"] } diff --git a/packages/ui/tsconfig.node.json b/packages/ui/tsconfig.node.json index 653c298d2..ae86e471f 100644 --- a/packages/ui/tsconfig.node.json +++ b/packages/ui/tsconfig.node.json @@ -1,11 +1,11 @@ { "compilerOptions": { "composite": true, - "skipLibCheck": true, "module": "ESNext", "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, "types": ["node"], + "allowSyntheticDefaultImports": true, + "skipLibCheck": true }, "include": ["vite.config.ts", "vitest.config.ts"] } diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts index f6c81fb6d..f34a3e041 100644 --- a/packages/ui/vite.config.ts +++ b/packages/ui/vite.config.ts @@ -1,10 +1,10 @@ -import { defineConfig } from 'vite' +import type { UserConfig } from 'vite' +import path from 'node:path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import dts from 'vite-plugin-dts' -import path from 'path' +import { defineConfig } from 'vite' -import type { UserConfig } from 'vite' +import dts from 'vite-plugin-dts' export default defineConfig({ plugins: [vue(), vueJsx(), dts()], @@ -24,7 +24,7 @@ export default defineConfig({ external: ['vue', 'element-plus'], output: { globals: { - vue: 'Vue', + 'vue': 'Vue', 'element-plus': 'ElementPlus', }, }, diff --git a/packages/ui/vitest.config.ts b/packages/ui/vitest.config.ts index e558e2b1d..a71738d8a 100644 --- a/packages/ui/vitest.config.ts +++ b/packages/ui/vitest.config.ts @@ -1,5 +1,5 @@ import { fileURLToPath } from 'node:url' -import { mergeConfig, defineConfig } from 'vitest/config' +import { defineConfig, mergeConfig } from 'vitest/config' import viteConfig from './vite.config' export default mergeConfig( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cfbd25b08..0a5ad1d73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,21 +8,27 @@ importers: .: devDependencies: + '@antfu/eslint-config': + specifier: ^3.8.0 + version: 3.8.0(@typescript-eslint/utils@8.12.2)(@vue/compiler-sfc@3.5.12)(eslint-plugin-format@0.1.2)(eslint@9.13.0)(typescript@4.9.5) '@mqttx/tsconfig': specifier: workspace:* version: link:packages/tsconfig eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^9.12.0 + version: 9.13.0 + eslint-config-turbo: + specifier: ^1.10.12 + version: 1.13.4(eslint@9.13.0) + eslint-plugin-format: + specifier: ^0.1.2 + version: 0.1.2(eslint@9.13.0) husky: specifier: ^8.0.3 version: 8.0.3 lint-staged: specifier: ^15.0.2 version: 15.0.2 - prettier: - specifier: ^3.0.3 - version: 3.0.3 turbo: specifier: ^2.2.3 version: 2.2.3 @@ -175,9 +181,6 @@ importers: electron-vite: specifier: ^1.0.27 version: 1.0.27(vite@4.4.9) - eslint-config-custom: - specifier: workspace:* - version: link:../../packages/eslint-config-custom jsdom: specifier: ^22.1.0 version: 22.1.0 @@ -272,9 +275,6 @@ importers: autoprefixer: specifier: ^10.4.16 version: 10.4.16(postcss@8.4.31) - eslint-config-custom: - specifier: workspace:* - version: link:../../packages/eslint-config-custom jsdom: specifier: ^22.1.0 version: 22.1.0 @@ -328,33 +328,6 @@ importers: specifier: ~5.2.0 version: 5.2.2 - packages/eslint-config-custom: - devDependencies: - '@electron-toolkit/eslint-config': - specifier: ^1.0.1 - version: 1.0.1(eslint@8.57.1) - '@electron-toolkit/eslint-config-ts': - specifier: ^1.0.0 - version: 1.0.0(eslint@8.57.1)(typescript@5.2.2) - '@vue/eslint-config-prettier': - specifier: ^8.0.0 - version: 8.0.0(eslint@8.57.1)(prettier@3.3.3) - '@vue/eslint-config-typescript': - specifier: ^11.0.3 - version: 11.0.3(eslint-plugin-vue@9.17.0)(eslint@8.57.1)(typescript@5.2.2) - eslint-config-prettier: - specifier: ^9.0.0 - version: 9.0.0(eslint@8.57.1) - eslint-config-turbo: - specifier: ^1.10.12 - version: 1.10.12(eslint@8.57.1) - eslint-plugin-prettier: - specifier: ^5.0.1 - version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.57.1)(prettier@3.3.3) - eslint-plugin-vue: - specifier: ^9.17.0 - version: 9.17.0(eslint@8.57.1) - packages/tailwind-config: devDependencies: '@mqttx/tsconfig': @@ -426,9 +399,6 @@ importers: autoprefixer: specifier: ^10.4.16 version: 10.4.16(postcss@8.4.31) - eslint-config-custom: - specifier: workspace:* - version: link:../eslint-config-custom jsdom: specifier: ^22.1.0 version: 22.1.0 @@ -463,11 +433,6 @@ packages: resolution: {integrity: sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==} dev: true - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -481,6 +446,105 @@ packages: '@jridgewell/trace-mapping': 0.3.20 dev: true + /@antfu/eslint-config@3.8.0(@typescript-eslint/utils@8.12.2)(@vue/compiler-sfc@3.5.12)(eslint-plugin-format@0.1.2)(eslint@9.13.0)(typescript@4.9.5): + resolution: {integrity: sha512-O5QSufPHpKTm0wk1OQ5c2mOZVzCqYV3hIDrt5zt+cOWqiG8YXLPkSOD4fFwjomATtOuUbcLUwkcgY5dErM7aIw==} + hasBin: true + peerDependencies: + '@eslint-react/eslint-plugin': ^1.5.8 + '@prettier/plugin-xml': ^3.4.1 + '@unocss/eslint-plugin': '>=0.50.0' + astro-eslint-parser: ^1.0.2 + eslint: ^9.10.0 + eslint-plugin-astro: ^1.2.0 + eslint-plugin-format: '>=0.1.0' + eslint-plugin-react-hooks: ^5.0.0 + eslint-plugin-react-refresh: ^0.4.4 + eslint-plugin-solid: ^0.14.3 + eslint-plugin-svelte: '>=2.35.1' + prettier-plugin-astro: ^0.13.0 + prettier-plugin-slidev: ^1.0.5 + svelte-eslint-parser: '>=0.37.0' + peerDependenciesMeta: + '@eslint-react/eslint-plugin': + optional: true + '@prettier/plugin-xml': + optional: true + '@unocss/eslint-plugin': + optional: true + astro-eslint-parser: + optional: true + eslint-plugin-astro: + optional: true + eslint-plugin-format: + optional: true + eslint-plugin-react-hooks: + optional: true + eslint-plugin-react-refresh: + optional: true + eslint-plugin-solid: + optional: true + eslint-plugin-svelte: + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-slidev: + optional: true + svelte-eslint-parser: + optional: true + dependencies: + '@antfu/install-pkg': 0.4.1 + '@clack/prompts': 0.7.0 + '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.13.0) + '@eslint/markdown': 6.2.1 + '@stylistic/eslint-plugin': 2.10.1(eslint@9.13.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2)(eslint@9.13.0)(typescript@4.9.5) + '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@4.9.5) + '@vitest/eslint-plugin': 1.1.7(@typescript-eslint/utils@8.12.2)(eslint@9.13.0)(typescript@4.9.5) + eslint: 9.13.0 + eslint-config-flat-gitignore: 0.3.0(eslint@9.13.0) + eslint-flat-config-utils: 0.4.0 + eslint-merge-processors: 0.1.0(eslint@9.13.0) + eslint-plugin-antfu: 2.7.0(eslint@9.13.0) + eslint-plugin-command: 0.2.6(eslint@9.13.0) + eslint-plugin-format: 0.1.2(eslint@9.13.0) + eslint-plugin-import-x: 4.4.0(eslint@9.13.0)(typescript@4.9.5) + eslint-plugin-jsdoc: 50.4.3(eslint@9.13.0) + eslint-plugin-jsonc: 2.16.0(eslint@9.13.0) + eslint-plugin-n: 17.12.0(eslint@9.13.0) + eslint-plugin-no-only-tests: 3.3.0 + eslint-plugin-perfectionist: 3.9.1(eslint@9.13.0)(typescript@4.9.5)(vue-eslint-parser@9.4.3) + eslint-plugin-regexp: 2.6.0(eslint@9.13.0) + eslint-plugin-toml: 0.11.1(eslint@9.13.0) + eslint-plugin-unicorn: 56.0.0(eslint@9.13.0) + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.12.2)(eslint@9.13.0) + eslint-plugin-vue: 9.30.0(eslint@9.13.0) + eslint-plugin-yml: 1.15.0(eslint@9.13.0) + eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.12)(eslint@9.13.0) + globals: 15.11.0 + jsonc-eslint-parser: 2.4.0 + local-pkg: 0.5.0 + parse-gitignore: 2.0.0 + picocolors: 1.1.1 + toml-eslint-parser: 0.10.0 + vue-eslint-parser: 9.4.3(eslint@9.13.0) + yaml-eslint-parser: 1.2.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@typescript-eslint/utils' + - '@vue/compiler-sfc' + - supports-color + - svelte + - typescript + - vitest + dev: true + + /@antfu/install-pkg@0.4.1: + resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} + dependencies: + package-manager-detector: 0.2.2 + tinyexec: 0.3.1 + dev: true + /@antfu/utils@0.7.10: resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} dev: true @@ -804,6 +868,23 @@ packages: '@babel/helper-validator-identifier': 7.25.9 dev: true + /@clack/core@0.3.4: + resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + dev: true + + /@clack/prompts@0.7.0: + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + dependencies: + '@clack/core': 0.3.4 + picocolors: 1.1.1 + sisteransi: 1.0.5 + dev: true + bundledDependencies: + - is-unicode-supported + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -824,29 +905,16 @@ packages: ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /@electron-toolkit/eslint-config-ts@1.0.0(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-AiZwiVZehwf7tDWuvZJxkwKWzriW4/d/2Sh+YmEtDvHqvneP8gaqKoPLC3yUZioN8jAU7yPbaxKdYims2RsfwA==} - peerDependencies: - eslint: '>=8.0.0' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.57.1)(typescript@5.2.2) - '@typescript-eslint/parser': 6.8.0(eslint@8.57.1)(typescript@5.2.2) - eslint: 8.57.1 - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color + /@dprint/formatter@0.3.0: + resolution: {integrity: sha512-N9fxCxbaBOrDkteSOzaCqwWjso5iAe+WJPsHC021JfHNj2ThInPNEF13ORDKta3llq5D1TlclODCvOvipH7bWQ==} dev: true - /@electron-toolkit/eslint-config@1.0.1(eslint@8.57.1): - resolution: {integrity: sha512-fqXviqkUSk6uFkMVhrMBTzFFxwsWQCF4nB+O79zHKSDj7YGFP5bZA1e2T5iK8KeaG1v8og3tKnDU3OSzgypCDQ==} - peerDependencies: - eslint: '>= 8.0.0' - dependencies: - eslint: 8.57.1 + /@dprint/markdown@0.17.8: + resolution: {integrity: sha512-ukHFOg+RpG284aPdIg7iPrCYmMs3Dqy43S1ejybnwlJoFiW02b+6Bbr5cfZKFRYNP3dKGM86BqHEnMzBOyLvvA==} + dev: true + + /@dprint/toml@0.6.3: + resolution: {integrity: sha512-zQ42I53sb4WVHA+5yoY1t59Zk++Ot02AvUgtNKLzTT8mPyVqVChFcePa3on/xIoKEgH+RoepgPHzqfk9837YFw==} dev: true /@electron-toolkit/preload@2.0.0(electron@27.0.2): @@ -947,6 +1015,24 @@ packages: vue: 3.3.4 dev: false + /@es-joy/jsdoccomment@0.48.0: + resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==} + engines: {node: '>=16'} + dependencies: + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 + dev: true + + /@es-joy/jsdoccomment@0.49.0: + resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} + engines: {node: '>=16'} + dependencies: + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 + dev: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -1123,33 +1209,24 @@ packages: requiresBuild: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.48.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.1): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + /@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.13.0): + resolution: {integrity: sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 + escape-string-regexp: 4.0.0 + eslint: 9.13.0 + ignore: 5.3.2 dev: true - /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): + /@eslint-community/eslint-utils@4.4.1(eslint@9.13.0): resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.1 + eslint: 9.13.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1158,36 +1235,42 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint-community/regexpp@4.9.1: - resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + /@eslint/compat@1.2.2(eslint@9.13.0): + resolution: {integrity: sha512-jhgiIrsw+tRfcBQ4BFl2C3vCrIUw2trCY0cnDvGZpwTtKCEDmZhAtMfrEUP/KpnwM6PrO0T+Ltm+ccW74olG3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + peerDependenciesMeta: + eslint: + optional: true + dependencies: + eslint: 9.13.0 dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/config-array@0.18.0: + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - ajv: 6.12.6 + '@eslint/object-schema': 2.1.4 debug: 4.3.7 - espree: 9.6.1 - globals: 13.23.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 minimatch: 3.1.2 - strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/core@0.7.0: + resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /@eslint/eslintrc@3.1.0: + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1197,14 +1280,33 @@ packages: - supports-color dev: true - /@eslint/js@8.48.0: - resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/js@9.13.0: + resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true - /@eslint/js@8.57.1: - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/markdown@6.2.1: + resolution: {integrity: sha512-cKVd110hG4ICHmWhIwZJfKmmJBvbiDWyrHODJknAtudKgZtlROGoLX9UEOA0o746zC0hCY4UV4vR+aOGW9S6JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@eslint/plugin-kit': 0.2.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/object-schema@2.1.4: + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /@eslint/plugin-kit@0.2.2: + resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + levn: 0.4.1 dev: true /@faker-js/faker@7.6.0: @@ -1229,27 +1331,17 @@ packages: resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} dev: false - /@humanwhocodes/config-array@0.11.12: - resolution: {integrity: sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.0 - debug: 4.3.7 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + /@humanfs/core@0.19.1: + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} dev: true - /@humanwhocodes/config-array@0.13.0: - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + /@humanfs/node@0.16.6: + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 dev: true /@humanwhocodes/module-importer@1.0.1: @@ -1257,13 +1349,9 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.0: - resolution: {integrity: sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==} - dev: true - - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + /@humanwhocodes/retry@0.3.1: + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} dev: true /@intlify/core-base@9.6.2: @@ -1417,16 +1505,9 @@ packages: resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} dev: true - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 dev: true /@protobufjs/aspromise@1.1.2: @@ -1540,6 +1621,23 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} + /@stylistic/eslint-plugin@2.10.1(eslint@9.13.0)(typescript@4.9.5): + resolution: {integrity: sha512-U+4yzNXElTf9q0kEfnloI9XbOyD4cnEQCxjUI94q0+W++0GAEQvJ/slwEj9lwjDHfGADRSr+Tco/z0XJvmDfCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@4.9.5) + eslint: 9.13.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + estraverse: 5.3.0 + picomatch: 4.0.2 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@sxzz/popperjs-es@2.11.7: resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} dev: false @@ -1599,6 +1697,10 @@ packages: resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} dev: true + /@types/estree@1.0.6: + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + dev: true + /@types/fs-extra@9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: @@ -1612,8 +1714,8 @@ packages: resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} dev: true - /@types/json-schema@7.0.14: - resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/keyv@3.1.4: @@ -1631,6 +1733,12 @@ packages: resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} dev: false + /@types/mdast@4.0.4: + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + dependencies: + '@types/unist': 3.0.3 + dev: true + /@types/ms@0.7.33: resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==} dev: true @@ -1672,10 +1780,6 @@ packages: dependencies: '@types/node': 17.0.43 - /@types/semver@7.5.4: - resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} - dev: true - /@types/signale@1.4.4: resolution: {integrity: sha512-VYy4VL64gA4uyUIYVj4tiGFF0VpdnRbJeqNENKGX42toNiTvt83rRzxdr0XK4DR3V01zPM0JQNIsL+IwWWfhsQ==} dependencies: @@ -1688,6 +1792,10 @@ packages: '@types/node': 17.0.43 dev: true + /@types/unist@3.0.3: + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + dev: true + /@types/uuid@9.0.6: resolution: {integrity: sha512-BT2Krtx4xaO6iwzwMFUYvWBWkV2pr37zD68Vmp1CDV196MzczBRxuEpD6Pr395HAgebC/co7hOphs53r8V7jew==} dev: true @@ -1715,271 +1823,132 @@ packages: '@types/node': 17.0.43 optional: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.2.2) - debug: 4.3.7 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2)(eslint@9.13.0)(typescript@4.9.5): + resolution: {integrity: sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.8.0(eslint@8.57.1)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.8.0 - '@typescript-eslint/type-utils': 6.8.0(eslint@8.57.1)(typescript@5.2.2) - '@typescript-eslint/utils': 6.8.0(eslint@8.57.1)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.8.0 - debug: 4.3.7 - eslint: 8.57.1 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.12.2 + '@typescript-eslint/type-utils': 8.12.2(eslint@9.13.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.12.2 + eslint: 9.13.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - debug: 4.3.7 - eslint: 8.57.1 - typescript: 5.2.2 + ts-api-utils: 1.4.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.8.0(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@4.9.5): + resolution: {integrity: sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.8.0 - '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.8.0 + '@typescript-eslint/scope-manager': 8.12.2 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/typescript-estree': 8.12.2(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.12.2 debug: 4.3.7 - eslint: 8.57.1 - typescript: 5.2.2 + eslint: 9.13.0 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - - /@typescript-eslint/scope-manager@6.8.0: - resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/visitor-keys': 6.8.0 - dev: true - - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + /@typescript-eslint/scope-manager@8.12.2: + resolution: {integrity: sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.2.2) - debug: 4.3.7 - eslint: 8.57.1 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/visitor-keys': 8.12.2 dev: true - /@typescript-eslint/type-utils@6.8.0(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/type-utils@8.12.2(eslint@9.13.0)(typescript@4.9.5): + resolution: {integrity: sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.8.0(eslint@8.57.1)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 8.12.2(typescript@4.9.5) + '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@4.9.5) debug: 4.3.7 - eslint: 8.57.1 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.4.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: + - eslint - supports-color dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/types@6.8.0: - resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/types@8.12.2: + resolution: {integrity: sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@8.12.2(typescript@4.9.5): + resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/visitor-keys': 8.12.2 debug: 4.3.7 - globby: 11.1.0 + fast-glob: 3.3.2 is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2): - resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/utils@8.12.2(eslint@9.13.0)(typescript@4.9.5): + resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 dependencies: - '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/visitor-keys': 6.8.0 - debug: 4.3.7 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@types/json-schema': 7.0.14 - '@types/semver': 7.5.4 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@6.8.0(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@types/json-schema': 7.0.14 - '@types/semver': 7.5.4 - '@typescript-eslint/scope-manager': 6.8.0 - '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) - eslint: 8.57.1 - semver: 7.5.4 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0) + '@typescript-eslint/scope-manager': 8.12.2 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/typescript-estree': 8.12.2(typescript@4.9.5) + eslint: 9.13.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@6.8.0: - resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/visitor-keys@8.12.2: + resolution: {integrity: sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/types': 8.12.2 eslint-visitor-keys: 3.4.3 dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - /@vitejs/plugin-vue-jsx@3.0.2(vite@4.4.9)(vue@3.3.4): resolution: {integrity: sha512-obF26P2Z4Ogy3cPp07B4VaW6rpiu0ue4OT2Y15UxT5BZZ76haUY9guOsZV3uWh/I6xc+VeiW+ZVabRE82FyzWw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -2024,6 +1993,24 @@ packages: - supports-color dev: true + /@vitest/eslint-plugin@1.1.7(@typescript-eslint/utils@8.12.2)(eslint@9.13.0)(typescript@4.9.5): + resolution: {integrity: sha512-pTWGW3y6lH2ukCuuffpan6kFxG6nIuoesbhMiQxskyQMRcCN5t9SXsKrNHvEw3p8wcCsgJoRqFZVkOTn6TjclA==} + peerDependencies: + '@typescript-eslint/utils': '>= 8.0' + eslint: '>= 8.57.0' + typescript: '>= 5.0.0' + vitest: '*' + peerDependenciesMeta: + typescript: + optional: true + vitest: + optional: true + dependencies: + '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@4.9.5) + eslint: 9.13.0 + typescript: 4.9.5 + dev: true + /@vitest/expect@0.34.6: resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} dependencies: @@ -2197,43 +2184,8 @@ packages: /@vue/devtools-api@6.6.4: resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} - /@vue/eslint-config-prettier@8.0.0(eslint@8.57.1)(prettier@3.3.3): - resolution: {integrity: sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==} - peerDependencies: - eslint: '>= 8.0.0' - prettier: '>= 3.0.0' - dependencies: - eslint: 8.57.1 - eslint-config-prettier: 8.10.0(eslint@8.57.1) - eslint-plugin-prettier: 5.0.1(eslint-config-prettier@8.10.0)(eslint@8.57.1)(prettier@3.3.3) - prettier: 3.3.3 - transitivePeerDependencies: - - '@types/eslint' - dev: true - - /@vue/eslint-config-typescript@11.0.3(eslint-plugin-vue@9.17.0)(eslint@8.57.1)(typescript@5.2.2): - resolution: {integrity: sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==} - engines: {node: ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 - eslint-plugin-vue: ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.2.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.2.2) - eslint: 8.57.1 - eslint-plugin-vue: 9.17.0(eslint@8.57.1) - typescript: 5.2.2 - vue-eslint-parser: 9.3.2(eslint@8.57.1) - transitivePeerDependencies: - - supports-color - dev: true - - /@vue/language-core@1.8.11(typescript@5.2.2): - resolution: {integrity: sha512-+MZOBGqGwfld6hpo0DB47x8eNM0dNqk15ZdfOhj19CpvuYuOWCeVdOEGZunKDyo3QLkTn3kLOSysJzg7FDOQBA==} + /@vue/language-core@1.8.11(typescript@5.2.2): + resolution: {integrity: sha512-+MZOBGqGwfld6hpo0DB47x8eNM0dNqk15ZdfOhj19CpvuYuOWCeVdOEGZunKDyo3QLkTn3kLOSysJzg7FDOQBA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2378,12 +2330,12 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.14.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.14.0 dev: true /acorn-walk@8.3.0: @@ -2513,6 +2465,11 @@ packages: - supports-color dev: true + /are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + dev: true + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true @@ -2526,11 +2483,6 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - /assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} @@ -2616,11 +2568,6 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} - engines: {node: '>=0.6'} - dev: true - /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -2652,13 +2599,6 @@ packages: requiresBuild: true optional: true - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.51 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2688,6 +2628,17 @@ packages: update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: true + /browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001676 + electron-to-chromium: 1.5.50 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + dev: true + /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -2737,11 +2688,9 @@ packages: - supports-color dev: true - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} dev: true /cac@6.7.14: @@ -2792,6 +2741,14 @@ packages: resolution: {integrity: sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==} dev: true + /caniuse-lite@1.0.30001676: + resolution: {integrity: sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==} + dev: true + + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: true + /chai@4.3.10: resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} @@ -2824,6 +2781,10 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: true + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -2872,6 +2833,18 @@ packages: engines: {node: '>=8'} dev: true + /ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2993,6 +2966,11 @@ packages: dev: true optional: true + /comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + dev: true + /commist@1.1.0: resolution: {integrity: sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==} dependencies: @@ -3043,6 +3021,12 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true + /core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} + dependencies: + browserslist: 4.24.2 + dev: true + /core-js@3.26.0: resolution: {integrity: sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==} requiresBuild: true @@ -3207,6 +3191,17 @@ packages: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} dev: true + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -3232,6 +3227,12 @@ packages: /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: true + /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -3248,24 +3249,6 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - /defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -3280,11 +3263,6 @@ packages: has-property-descriptors: 1.0.0 optional: true - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -3299,11 +3277,22 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} requiresBuild: true optional: true + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: true + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: true @@ -3319,13 +3308,6 @@ packages: minimatch: 3.1.2 dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true @@ -3487,6 +3469,10 @@ packages: resolution: {integrity: sha512-iS7KhLYCSJbdo3rUSkhDTVuFNCV34RKs2UaB9Ecr7VlqzjjWW//0nfsFF5dtDmyXlZQaDYYtID5fjtC/6lpRug==} dev: true + /electron-to-chromium@1.5.50: + resolution: {integrity: sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==} + dev: true + /electron-updater@6.1.1: resolution: {integrity: sha512-IBT3zJ4yO5UZMF2gOTC9HrlmG4OYSRtOiHKzNAShJvfuicdx6UaXoa6AvhcTxdx6zf/rJyFMRBISS9jhVwTfow==} dependencies: @@ -3573,6 +3559,14 @@ packages: dependencies: once: 1.4.0 + /enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3586,6 +3580,10 @@ packages: dependencies: is-arrayish: 0.2.1 + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + dev: true + /es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} requiresBuild: true @@ -3625,6 +3623,11 @@ packages: engines: {node: '>=6'} dev: true + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: false @@ -3636,109 +3639,357 @@ packages: /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + requiresBuild: true - /eslint-config-prettier@8.10.0(eslint@8.57.1): - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} - hasBin: true + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /eslint-compat-utils@0.5.1(eslint@9.13.0): + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} peerDependencies: - eslint: '>=7.0.0' + eslint: '>=6.0.0' dependencies: - eslint: 8.57.1 + eslint: 9.13.0 + semver: 7.5.4 dev: true - /eslint-config-prettier@9.0.0(eslint@8.57.1): - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} - hasBin: true + /eslint-config-flat-gitignore@0.3.0(eslint@9.13.0): + resolution: {integrity: sha512-0Ndxo4qGhcewjTzw52TK06Mc00aDtHNTdeeW2JfONgDcLkRO/n/BteMRzNVpLQYxdCC/dFEilfM9fjjpGIJ9Og==} peerDependencies: - eslint: '>=7.0.0' + eslint: ^9.5.0 dependencies: - eslint: 8.57.1 + '@eslint/compat': 1.2.2(eslint@9.13.0) + eslint: 9.13.0 + find-up-simple: 1.0.0 dev: true - /eslint-config-turbo@1.10.12(eslint@8.57.1): - resolution: {integrity: sha512-z3jfh+D7UGYlzMWGh+Kqz++hf8LOE96q3o5R8X4HTjmxaBWlLAWG+0Ounr38h+JLR2TJno0hU9zfzoPNkR9BdA==} + /eslint-config-turbo@1.13.4(eslint@9.13.0): + resolution: {integrity: sha512-+we4eWdZlmlEn7LnhXHCIPX/wtujbHCS7XjQM/TN09BHNEl2fZ8id4rHfdfUKIYTSKyy8U/nNyJ0DNoZj5Q8bw==} peerDependencies: eslint: '>6.6.0' dependencies: - eslint: 8.57.1 - eslint-plugin-turbo: 1.10.12(eslint@8.57.1) + eslint: 9.13.0 + eslint-plugin-turbo: 1.13.4(eslint@9.13.0) dev: true - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@8.10.0)(eslint@8.57.1)(prettier@3.3.3): - resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} - engines: {node: ^14.18.0 || >=16.0.0} + /eslint-flat-config-utils@0.4.0: + resolution: {integrity: sha512-kfd5kQZC+BMO0YwTol6zxjKX1zAsk8JfSAopbKjKqmENTJcew+yBejuvccAg37cvOrN0Mh+DVbeyznuNWEjt4A==} + dependencies: + pathe: 1.1.2 + dev: true + + /eslint-formatting-reporter@0.0.0(eslint@9.13.0): + resolution: {integrity: sha512-k9RdyTqxqN/wNYVaTk/ds5B5rA8lgoAmvceYN7bcZMBwU7TuXx5ntewJv81eF3pIL/CiJE+pJZm36llG8yhyyw==} peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true + eslint: '>=8.40.0' dependencies: - eslint: 8.57.1 - eslint-config-prettier: 8.10.0(eslint@8.57.1) - prettier: 3.3.3 + eslint: 9.13.0 prettier-linter-helpers: 1.0.0 - synckit: 0.8.5 dev: true - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.57.1)(prettier@3.3.3): - resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.0 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-merge-processors@0.1.0(eslint@9.13.0): + resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==} + peerDependencies: + eslint: '*' + dependencies: + eslint: 9.13.0 + dev: true + + /eslint-parser-plain@0.1.0: + resolution: {integrity: sha512-oOeA6FWU0UJT/Rxc3XF5Cq0nbIZbylm7j8+plqq0CZoE6m4u32OXJrR+9iy4srGMmF6v6pmgvP1zPxSRIGh3sg==} + dev: true + + /eslint-plugin-antfu@2.7.0(eslint@9.13.0): + resolution: {integrity: sha512-gZM3jq3ouqaoHmUNszb1Zo2Ux7RckSvkGksjLWz9ipBYGSv1EwwBETN6AdiUXn+RpVHXTbEMPAPlXJazcA6+iA==} + peerDependencies: + eslint: '*' + dependencies: + '@antfu/utils': 0.7.10 + eslint: 9.13.0 + dev: true + + /eslint-plugin-command@0.2.6(eslint@9.13.0): + resolution: {integrity: sha512-T0bHZ1oblW1xUHUVoBKZJR2osSNNGkfZuK4iqboNwuNS/M7tdp3pmURaJtTi/XDzitxaQ02lvOdFH0mUd5QLvQ==} + peerDependencies: + eslint: '*' + dependencies: + '@es-joy/jsdoccomment': 0.48.0 + eslint: 9.13.0 + dev: true + + /eslint-plugin-es-x@7.8.0(eslint@9.13.0): + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - '@types/eslint': '>=8.0.0' + eslint: '>=8' + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0) + '@eslint-community/regexpp': 4.12.1 + eslint: 9.13.0 + eslint-compat-utils: 0.5.1(eslint@9.13.0) + dev: true + + /eslint-plugin-format@0.1.2(eslint@9.13.0): + resolution: {integrity: sha512-ZrcO3aiumgJ6ENAv65IWkPjtW77ML/5mp0YrRK0jdvvaZJb+4kKWbaQTMr/XbJo6CtELRmCApAziEKh7L2NbdQ==} + peerDependencies: + eslint: ^8.40.0 || ^9.0.0 + dependencies: + '@dprint/formatter': 0.3.0 + '@dprint/markdown': 0.17.8 + '@dprint/toml': 0.6.3 + eslint: 9.13.0 + eslint-formatting-reporter: 0.0.0(eslint@9.13.0) + eslint-parser-plain: 0.1.0 + prettier: 3.3.3 + synckit: 0.9.2 + dev: true + + /eslint-plugin-import-x@4.4.0(eslint@9.13.0)(typescript@4.9.5): + resolution: {integrity: sha512-me58aWTjdkPtgmOzPe+uP0bebpN5etH4bJRnYzy85Rn9g/3QyASg6kTCqdwNzyaJRqMI2ii2o8s01P2LZpREHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + dependencies: + '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@4.9.5) + debug: 4.3.7 + doctrine: 3.0.0 + eslint: 9.13.0 + eslint-import-resolver-node: 0.3.9 + get-tsconfig: 4.8.1 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + stable-hash: 0.0.4 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-jsdoc@50.4.3(eslint@9.13.0): + resolution: {integrity: sha512-uWtwFxGRv6B8sU63HZM5dAGDhgsatb+LONwmILZJhdRALLOkCX2HFZhdL/Kw2ls8SQMAVEfK+LmnEfxInRN8HA==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + dependencies: + '@es-joy/jsdoccomment': 0.49.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.3.7 + escape-string-regexp: 4.0.0 + eslint: 9.13.0 + espree: 10.3.0 + esquery: 1.6.0 + parse-imports: 2.2.1 + semver: 7.6.3 + spdx-expression-parse: 4.0.0 + synckit: 0.9.2 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-jsonc@2.16.0(eslint@9.13.0): + resolution: {integrity: sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0) + eslint: 9.13.0 + eslint-compat-utils: 0.5.1(eslint@9.13.0) + espree: 9.6.1 + graphemer: 1.4.0 + jsonc-eslint-parser: 2.4.0 + natural-compare: 1.4.0 + synckit: 0.6.2 + dev: true + + /eslint-plugin-n@17.12.0(eslint@9.13.0): + resolution: {integrity: sha512-zNAtz/erDn0v78bIY3MASSQlyaarV4IOTvP5ldHsqblRFrXriikB6ghkDTkHjUad+nMRrIbOy9euod2azjRfBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0) + enhanced-resolve: 5.17.1 + eslint: 9.13.0 + eslint-plugin-es-x: 7.8.0(eslint@9.13.0) + get-tsconfig: 4.8.1 + globals: 15.11.0 + ignore: 5.3.2 + minimatch: 9.0.5 + semver: 7.6.3 + dev: true + + /eslint-plugin-no-only-tests@3.3.0: + resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} + engines: {node: '>=5.0.0'} + dev: true + + /eslint-plugin-perfectionist@3.9.1(eslint@9.13.0)(typescript@4.9.5)(vue-eslint-parser@9.4.3): + resolution: {integrity: sha512-9WRzf6XaAxF4Oi5t/3TqKP5zUjERhasHmLFHin2Yw6ZAp/EP/EVA2dr3BhQrrHWCm5SzTMZf0FcjDnBkO2xFkA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + astro-eslint-parser: ^1.0.2 eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' + svelte: '>=3.0.0' + svelte-eslint-parser: ^0.41.1 + vue-eslint-parser: '>=9.0.0' peerDependenciesMeta: - '@types/eslint': + astro-eslint-parser: + optional: true + svelte: optional: true - eslint-config-prettier: + svelte-eslint-parser: + optional: true + vue-eslint-parser: optional: true dependencies: - eslint: 8.57.1 - eslint-config-prettier: 9.0.0(eslint@8.57.1) - prettier: 3.3.3 - prettier-linter-helpers: 1.0.0 - synckit: 0.8.5 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@4.9.5) + eslint: 9.13.0 + minimatch: 9.0.5 + natural-compare-lite: 1.4.0 + vue-eslint-parser: 9.4.3(eslint@9.13.0) + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-regexp@2.6.0(eslint@9.13.0): + resolution: {integrity: sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==} + engines: {node: ^18 || >=20} + peerDependencies: + eslint: '>=8.44.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0) + '@eslint-community/regexpp': 4.12.1 + comment-parser: 1.4.1 + eslint: 9.13.0 + jsdoc-type-pratt-parser: 4.1.0 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + scslre: 0.3.0 + dev: true + + /eslint-plugin-toml@0.11.1(eslint@9.13.0): + resolution: {integrity: sha512-Y1WuMSzfZpeMIrmlP1nUh3kT8p96mThIq4NnHrYUhg10IKQgGfBZjAWnrg9fBqguiX4iFps/x/3Hb5TxBisfdw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.7 + eslint: 9.13.0 + eslint-compat-utils: 0.5.1(eslint@9.13.0) + lodash: 4.17.21 + toml-eslint-parser: 0.10.0 + transitivePeerDependencies: + - supports-color dev: true - /eslint-plugin-turbo@1.10.12(eslint@8.57.1): - resolution: {integrity: sha512-uNbdj+ohZaYo4tFJ6dStRXu2FZigwulR1b3URPXe0Q8YaE7thuekKNP+54CHtZPH9Zey9dmDx5btAQl9mfzGOw==} + /eslint-plugin-turbo@1.13.4(eslint@9.13.0): + resolution: {integrity: sha512-82GfMzrewI/DJB92Bbch239GWbGx4j1zvjk1lqb06lxIlMPnVwUHVwPbAnLfyLG3JuhLv9whxGkO/q1CL18JTg==} peerDependencies: eslint: '>6.6.0' dependencies: dotenv: 16.0.3 - eslint: 8.57.1 + eslint: 9.13.0 + dev: true + + /eslint-plugin-unicorn@56.0.0(eslint@9.13.0): + resolution: {integrity: sha512-aXpddVz/PQMmd69uxO98PA4iidiVNvA0xOtbpUoz1WhBd4RxOQQYqN618v68drY0hmy5uU2jy1bheKEVWBjlPw==} + engines: {node: '>=18.18'} + peerDependencies: + eslint: '>=8.56.0' + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0) + ci-info: 4.0.0 + clean-regexp: 1.0.0 + core-js-compat: 3.39.0 + eslint: 9.13.0 + esquery: 1.6.0 + globals: 15.11.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.6.3 + strip-indent: 3.0.0 + dev: true + + /eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.12.2)(eslint@9.13.0): + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2)(eslint@9.13.0)(typescript@4.9.5) + eslint: 9.13.0 dev: true - /eslint-plugin-vue@9.17.0(eslint@8.57.1): - resolution: {integrity: sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==} + /eslint-plugin-vue@9.30.0(eslint@9.13.0): + resolution: {integrity: sha512-CyqlRgShvljFkOeYK8wN5frh/OGTvkj1S7wlr2Q2pUvwq+X5VYiLd6ZjujpgSgLnys2W8qrBLkXQ41SUYaoPIQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: - eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - eslint: 8.57.1 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0) + eslint: 9.13.0 + globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 6.0.13 - semver: 7.5.4 - vue-eslint-parser: 9.3.2(eslint@8.57.1) + postcss-selector-parser: 6.1.2 + semver: 7.6.3 + vue-eslint-parser: 9.4.3(eslint@9.13.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + /eslint-plugin-yml@1.15.0(eslint@9.13.0): + resolution: {integrity: sha512-leC8APYVOsKyWUlvRwVhewytK5wS70BfMqIaUplFstRfzCoVp0YoEroV4cUEvQrBj93tQ3M9LcjO/ewr6D4kjA==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 + debug: 4.3.7 + eslint: 9.13.0 + eslint-compat-utils: 0.5.1(eslint@9.13.0) + lodash: 4.17.21 + natural-compare: 1.4.0 + yaml-eslint-parser: 1.2.3 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.12)(eslint@9.13.0): + resolution: {integrity: sha512-PfpJ4uKHnqeL/fXUnzYkOax3aIenlwewXRX8jFinA1a2yCFnLgMuiH3xvCgvHHUlV2xJWQHbCTdiJWGwb3NqpQ==} + peerDependencies: + '@vue/compiler-sfc': ^3.3.0 + eslint: ^8.50.0 || ^9.0.0 + dependencies: + '@vue/compiler-sfc': 3.5.12 + eslint: 9.13.0 dev: true /eslint-scope@7.2.2: @@ -3749,121 +4000,91 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.48.0: - resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /eslint@9.13.0: + resolution: {integrity: sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) - '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.48.0 - '@humanwhocodes/config-array': 0.11.12 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.23.0 - graphemer: 1.4.0 - ignore: 5.2.4 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - 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.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0) '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.7.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.13.0 + '@eslint/plugin-kit': 0.2.2 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.3.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.7 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - 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.4 - strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color dev: true + /espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 dev: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - /esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -3878,11 +4099,6 @@ packages: estraverse: 5.3.0 dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -3900,36 +4116,6 @@ packages: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: true - /execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -4021,11 +4207,11 @@ packages: escape-string-regexp: 1.0.5 dev: false - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} dependencies: - flat-cache: 3.1.1 + flat-cache: 4.0.1 dev: true /filelist@1.0.4: @@ -4040,6 +4226,11 @@ packages: dependencies: to-regex-range: 5.0.1 + /find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + dev: true + /find-up@2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} @@ -4047,6 +4238,14 @@ packages: locate-path: 2.0.0 dev: false + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -4055,17 +4254,16 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.1.1: - resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} - engines: {node: '>=12.0.0'} + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true /follow-redirects@1.15.3: @@ -4176,16 +4374,17 @@ packages: dependencies: pump: 3.0.0 - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} dev: true + /get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -4249,13 +4448,6 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -4263,6 +4455,16 @@ packages: type-fest: 0.20.2 dev: true + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + dev: true + + /globals@15.11.0: + resolution: {integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==} + engines: {node: '>=18'} + dev: true + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -4271,18 +4473,6 @@ packages: define-properties: 1.2.1 optional: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} requiresBuild: true @@ -4356,6 +4546,10 @@ packages: readable-stream: 3.6.0 dev: false + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + /hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -4414,16 +4608,6 @@ packages: transitivePeerDependencies: - supports-color - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -4455,11 +4639,6 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true - /ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -4486,6 +4665,11 @@ packages: engines: {node: '>=0.8.19'} dev: true + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -4508,6 +4692,13 @@ packages: dependencies: binary-extensions: 2.2.0 + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true @@ -4521,18 +4712,6 @@ packages: has: 1.0.4 dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true - /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -4552,43 +4731,18 @@ packages: dependencies: is-extglob: 2.1.1 - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - /isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} @@ -4694,6 +4848,11 @@ packages: dependencies: argparse: 2.0.1 + /jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + dev: true + /jsdom@22.1.0: resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==} engines: {node: '>=16'} @@ -4731,12 +4890,23 @@ packages: - supports-color - utf-8-validate + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -4744,6 +4914,10 @@ packages: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: false + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + /json-parse-even-better-errors@3.0.0: resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4768,6 +4942,16 @@ packages: hasBin: true dev: true + /jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.14.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.5.4 + dev: true + /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: @@ -4880,6 +5064,13 @@ packages: path-exists: 3.0.0 dev: false + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -4944,6 +5135,10 @@ packages: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} dev: false + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: true + /loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: @@ -4958,75 +5153,450 @@ packages: engines: {node: 14 || >=16.14} dev: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /magic-string-ast@0.6.2: + resolution: {integrity: sha512-oN3Bcd7ZVt+0VGEs7402qR/tjgjbM7kPlH/z7ufJnzTLVBzXJITRHOJiwMmmYMgZfdoWQsfQcY+iKlxiBppnMA==} + engines: {node: '>=16.14.0'} + dependencies: + magic-string: 0.30.12 + dev: true + + /magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + + /markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + dev: true + + /matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + escape-string-regexp: 4.0.0 + optional: true + + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: true + + /mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.1.0 + dev: true + + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 + micromark-util-normalize-identifier: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + dev: true + + /mdast-util-to-markdown@2.1.1: + resolution: {integrity: sha512-OrkcCoqAkEg9b1ykXBrA0ehRc8H4fGU/03cACmW2xXzau1+dIdS+qJugh1Cqex3hMumSBgSE/5pc7uqP12nLAw==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + dev: true + + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + dependencies: + '@types/mdast': 4.0.4 + dev: true + + /mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + dev: true + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: true + + /memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: false + + /memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-table@2.1.0: + resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + dependencies: + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.0 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} dependencies: - yallist: 3.1.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} dependencies: - yallist: 4.0.0 + micromark-util-symbol: 2.0.0 + dev: true - /magic-string-ast@0.6.2: - resolution: {integrity: sha512-oN3Bcd7ZVt+0VGEs7402qR/tjgjbM7kPlH/z7ufJnzTLVBzXJITRHOJiwMmmYMgZfdoWQsfQcY+iKlxiBppnMA==} - engines: {node: '>=16.14.0'} + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} dependencies: - magic-string: 0.30.12 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /magic-string@0.30.12: - resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 + dev: true - /magic-string@0.30.5: - resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} - engines: {node: '>=12'} + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + micromark-util-symbol: 2.0.0 + dev: true - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} dependencies: - semver: 7.5.4 + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 dev: true - /matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - requiresBuild: true + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: true + + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + dev: true + + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} dependencies: - escape-string-regexp: 4.0.0 - optional: true + micromark-util-symbol: 2.0.0 + dev: true - /mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 dev: true - /mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 dev: true - /memoize-one@6.0.0: - resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} - dev: false + /micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true - /memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + dependencies: + '@types/debug': 4.1.10 + debug: 4.3.7 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color dev: true /micromatch@4.0.5: @@ -5071,6 +5641,11 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -5234,6 +5809,10 @@ packages: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + dev: true + /nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -5242,6 +5821,15 @@ packages: abbrev: 1.1.1 dev: true + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + /normalize-package-data@6.0.0: resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} engines: {node: ^16.14.0 || >=18.0.0} @@ -5283,13 +5871,6 @@ packages: shell-quote: 1.8.1 dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5350,28 +5931,6 @@ packages: mimic-fn: 4.0.0 dev: true - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - /optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -5395,6 +5954,13 @@ packages: p-try: 1.0.0 dev: false + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -5415,6 +5981,13 @@ packages: p-limit: 1.3.0 dev: false + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -5427,6 +6000,15 @@ packages: engines: {node: '>=4'} dev: false + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /package-manager-detector@0.2.2: + resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} + dev: true + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5434,6 +6016,19 @@ packages: callsites: 3.1.0 dev: true + /parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} + dev: true + + /parse-imports@2.2.1: + resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} + engines: {node: '>= 18'} + dependencies: + es-module-lexer: 1.5.4 + slashes: 3.0.12 + dev: true + /parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -5442,6 +6037,16 @@ packages: json-parse-better-errors: 1.0.2 dev: false + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + /parse-json@7.1.0: resolution: {integrity: sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==} engines: {node: '>=16'} @@ -5486,11 +6091,6 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - /pathe@1.1.1: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} @@ -5582,6 +6182,11 @@ packages: xmlbuilder: 15.1.1 dev: true + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + /postcss-calc@9.0.1(postcss@8.4.47): resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} engines: {node: ^14 || ^16 || >=18.0} @@ -5900,6 +6505,14 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + /postcss-svgo@6.0.0(postcss@8.4.47): resolution: {integrity: sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==} engines: {node: ^14 || ^16 || >= 18} @@ -5954,12 +6567,6 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} - engines: {node: '>=14'} - hasBin: true - dev: true - /prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} @@ -6050,6 +6657,25 @@ packages: lazy-val: 1.0.5 dev: true + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.3 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + /read-pkg@8.1.0: resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} engines: {node: '>=16'} @@ -6075,6 +6701,33 @@ packages: dependencies: picomatch: 2.3.1 + /refa@0.12.1: + resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dependencies: + '@eslint-community/regexpp': 4.12.1 + dev: true + + /regexp-ast-analysis@0.7.1: + resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dependencies: + '@eslint-community/regexpp': 4.12.1 + refa: 0.12.1 + dev: true + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + /reinterval@1.1.0: resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==} dev: false @@ -6095,6 +6748,10 @@ packages: engines: {node: '>=4'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: @@ -6162,13 +6819,6 @@ packages: /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} - /run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -6213,6 +6863,15 @@ packages: dependencies: xmlchars: 2.2.0 + /scslre@0.3.0: + resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} + engines: {node: ^14.0.0 || >=16.0.0} + dependencies: + '@eslint-community/regexpp': 4.12.1 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + dev: true + /scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} dev: true @@ -6222,6 +6881,11 @@ packages: requiresBuild: true optional: true + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -6233,6 +6897,12 @@ packages: dependencies: lru-cache: 6.0.0 + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + /serialize-error@7.0.1: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} @@ -6285,9 +6955,12 @@ packages: semver: 7.5.4 dev: true - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} dev: true /slice-ansi@3.0.0: @@ -6355,6 +7028,13 @@ packages: spdx-license-ids: 3.0.16 dev: true + /spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + dev: true + /spdx-license-ids@3.0.16: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true @@ -6379,6 +7059,10 @@ packages: requiresBuild: true optional: true + /stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + dev: true + /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -6440,16 +7124,18 @@ packages: engines: {node: '>=4'} dev: false - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} dev: true + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -6530,11 +7216,18 @@ packages: /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - /synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + /synckit@0.6.2: + resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} + engines: {node: '>=12.20'} + dependencies: + tslib: 2.6.2 + dev: true + + /synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.4.2 + '@pkgr/core': 0.1.1 tslib: 2.6.2 dev: true @@ -6569,6 +7262,11 @@ packages: - ts-node dev: true + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + /tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} @@ -6617,6 +7315,10 @@ packages: /tinybench@2.5.1: resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + /tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + dev: true + /tinypool@0.7.0: resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} engines: {node: '>=14.0.0'} @@ -6625,11 +7327,6 @@ packages: resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} engines: {node: '>=14.0.0'} - /titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - dev: true - /tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} dependencies: @@ -6653,6 +7350,13 @@ packages: dependencies: is-number: 7.0.0 + /toml-eslint-parser@0.10.0: + resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + eslint-visitor-keys: 3.4.3 + dev: true + /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} @@ -6674,34 +7378,25 @@ packages: utf8-byte-length: 1.0.4 dev: true - /ts-api-utils@1.0.3(typescript@5.2.2): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + /ts-api-utils@1.4.0(typescript@4.9.5): + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.2.2 + typescript: 4.9.5 dev: true /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + requiresBuild: true - /tsutils@3.21.0(typescript@5.2.2): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - 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' - dependencies: - tslib: 1.14.1 - typescript: 5.2.2 + /tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} dev: true /turbo-darwin-64@2.2.3: @@ -6786,6 +7481,16 @@ packages: engines: {node: '>=10'} dev: true + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + /type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -6834,6 +7539,33 @@ packages: /ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + dependencies: + '@types/unist': 3.0.3 + dev: true + + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.3 + dev: true + + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + dev: true + + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: true + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -6918,11 +7650,6 @@ packages: webpack-virtual-modules: 0.6.2 dev: true - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.1): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -6934,6 +7661,17 @@ packages: picocolors: 1.0.0 dev: true + /update-browserslist-db@1.1.1(browserslist@4.24.2): + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -7146,18 +7884,18 @@ packages: vue: 3.3.4 dev: false - /vue-eslint-parser@9.3.2(eslint@8.57.1): - resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} + /vue-eslint-parser@9.4.3(eslint@9.13.0): + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.7 - eslint: 8.57.1 + eslint: 9.13.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 lodash: 4.17.21 semver: 7.5.4 transitivePeerDependencies: @@ -7349,6 +8087,15 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yaml-eslint-parser@1.2.3: + resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} + engines: {node: ^14.17.0 || >=16.0.0} + dependencies: + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.6.0 + dev: true + /yaml@2.3.3: resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} engines: {node: '>= 14'} @@ -7404,3 +8151,7 @@ packages: optionalDependencies: commander: 9.5.0 dev: true + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3ff5faaaf..e9b0dad63 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,3 @@ packages: - - "apps/*" - - "packages/*" + - 'apps/*' + - 'packages/*' diff --git a/scripts/gen-version.js b/scripts/gen-version.js index 25cf53565..88657403c 100644 --- a/scripts/gen-version.js +++ b/scripts/gen-version.js @@ -1,6 +1,6 @@ const version = require('../package.json').version -require('fs').writeFileSync( - require('path').resolve(__dirname, '../', 'src', 'version.ts'), +require('node:fs').writeFileSync( + require('node:path').resolve(__dirname, '../', 'src', 'version.ts'), `export default '${version}'\n`, ) diff --git a/vitest.workspaces.ts b/vitest.workspaces.ts index e5fdb02a7..fb56e57c5 100644 --- a/vitest.workspaces.ts +++ b/vitest.workspaces.ts @@ -1,2 +1,2 @@ -// @ts-ignore +// @ts-expect-error TODO: fix tsconfig export default ['apps/*', 'packages*']