Browse Source

Chore: Housekeeping & Make ESLint Happy

SukkaW 1 year ago
parent
commit
14bcc10ce7

+ 9 - 11
Build/build-cloudmounter-rules.ts

@@ -6,17 +6,15 @@ import { RulesetOutput } from './lib/create-file';
 export const buildCloudMounterRules = task(require.main === module, __filename)(async (span) => {
 export const buildCloudMounterRules = task(require.main === module, __filename)(async (span) => {
   // AND,((SRC-IP,192.168.1.110), (DOMAIN, example.com))
   // AND,((SRC-IP,192.168.1.110), (DOMAIN, example.com))
 
 
-  const results = DOMAINS.flatMap(domain => {
-    return PROCESS_NAMES.flatMap(process => [
-      `AND,((${domain}),(PROCESS-NAME,${process}))`,
-      ...[
-        '10.0.0.0/8',
-        // '127.0.0.0/8',
-        '172.16.0.0/12',
-        '192.168.0.0/16'
-      ].map(cidr => `AND,((${domain}),(SRC-IP,${cidr}))`)
-    ]);
-  });
+  const results = DOMAINS.flatMap(domain => PROCESS_NAMES.flatMap(process => [
+    `AND,((${domain}),(PROCESS-NAME,${process}))`,
+    ...[
+      '10.0.0.0/8',
+      // '127.0.0.0/8',
+      '172.16.0.0/12',
+      '192.168.0.0/16'
+    ].map(cidr => `AND,((${domain}),(SRC-IP,${cidr}))`)
+  ]));
 
 
   const description = SHARED_DESCRIPTION;
   const description = SHARED_DESCRIPTION;
 
 

+ 32 - 38
Build/build-common.ts

@@ -34,11 +34,8 @@ export const buildCommon = task(require.main === module, __filename)(async (span
       if (isDirectory) return true;
       if (isDirectory) return true;
 
 
       const extname = path.extname(filepath);
       const extname = path.extname(filepath);
-      if (extname === '.js' || extname === '.ts') {
-        return false;
-      }
 
 
-      return true;
+      return !(extname === '.js' || extname === '.ts');
     })
     })
     .crawl(SOURCE_DIR)
     .crawl(SOURCE_DIR)
     .withPromise();
     .withPromise();
@@ -67,49 +64,46 @@ export const buildCommon = task(require.main === module, __filename)(async (span
 
 
 const $skip = Symbol('skip');
 const $skip = Symbol('skip');
 
 
-const processFile = (span: Span, sourcePath: string) => {
-  // console.log('Processing', sourcePath);
-  return span.traceChildAsync(`process file: ${sourcePath}`, async () => {
-    const lines: string[] = [];
+const processFile = (span: Span, sourcePath: string) => span.traceChildAsync(`process file: ${sourcePath}`, async () => {
+  const lines: string[] = [];
 
 
-    let title = '';
-    const descriptions: string[] = [];
-    let sgmodulePathname: string | null = null;
+  let title = '';
+  const descriptions: string[] = [];
+  let sgmodulePathname: string | null = null;
 
 
-    try {
-      for await (const line of readFileByLine(sourcePath)) {
-        if (line.startsWith(MAGIC_COMMAND_SKIP)) {
-          return $skip;
-        }
+  try {
+    for await (const line of readFileByLine(sourcePath)) {
+      if (line.startsWith(MAGIC_COMMAND_SKIP)) {
+        return $skip;
+      }
 
 
-        if (line.startsWith(MAGIC_COMMAND_TITLE)) {
-          title = line.slice(MAGIC_COMMAND_TITLE.length).trim();
-          continue;
-        }
+      if (line.startsWith(MAGIC_COMMAND_TITLE)) {
+        title = line.slice(MAGIC_COMMAND_TITLE.length).trim();
+        continue;
+      }
 
 
-        if (line.startsWith(MAGIC_COMMAND_DESCRIPTION)) {
-          descriptions.push(line.slice(MAGIC_COMMAND_DESCRIPTION.length).trim());
-          continue;
-        }
+      if (line.startsWith(MAGIC_COMMAND_DESCRIPTION)) {
+        descriptions.push(line.slice(MAGIC_COMMAND_DESCRIPTION.length).trim());
+        continue;
+      }
 
 
-        if (line.startsWith(MAGIC_COMMAND_SGMODULE_MITM_HOSTNAMES)) {
-          sgmodulePathname = line.slice(MAGIC_COMMAND_SGMODULE_MITM_HOSTNAMES.length).trim();
-          continue;
-        }
+      if (line.startsWith(MAGIC_COMMAND_SGMODULE_MITM_HOSTNAMES)) {
+        sgmodulePathname = line.slice(MAGIC_COMMAND_SGMODULE_MITM_HOSTNAMES.length).trim();
+        continue;
+      }
 
 
-        const l = processLine(line);
-        if (l) {
-          lines.push(l);
-        }
+      const l = processLine(line);
+      if (l) {
+        lines.push(l);
       }
       }
-    } catch (e) {
-      console.error('Error processing', sourcePath);
-      console.trace(e);
     }
     }
+  } catch (e) {
+    console.error('Error processing', sourcePath);
+    console.trace(e);
+  }
 
 
-    return [title, descriptions, lines, sgmodulePathname] as const;
-  });
-};
+  return [title, descriptions, lines, sgmodulePathname] as const;
+});
 
 
 function transformDomainset(parentSpan: Span, sourcePath: string, relativePath: string) {
 function transformDomainset(parentSpan: Span, sourcePath: string, relativePath: string) {
   return parentSpan
   return parentSpan

+ 1 - 3
Build/build-public.ts

@@ -79,9 +79,7 @@ const priorityOrder: Record<'default' | string & {}, number> = {
   LICENSE: 70,
   LICENSE: 70,
   default: Number.MAX_VALUE
   default: Number.MAX_VALUE
 };
 };
-const prioritySorter = (a: TreeType, b: TreeType) => {
-  return ((priorityOrder[a.name] || priorityOrder.default) - (priorityOrder[b.name] || priorityOrder.default)) || a.name.localeCompare(b.name);
-};
+const prioritySorter = (a: TreeType, b: TreeType) => ((priorityOrder[a.name] || priorityOrder.default) - (priorityOrder[b.name] || priorityOrder.default)) || a.name.localeCompare(b.name);
 
 
 const html = (string: TemplateStringsArray, ...values: any[]) => string.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');
 const html = (string: TemplateStringsArray, ...values: any[]) => string.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');
 
 

+ 10 - 12
Build/build-sspanel-appprofile.ts

@@ -205,18 +205,16 @@ function generateAppProfile(
 
 
   appendArrayInPlace(
   appendArrayInPlace(
     redults,
     redults,
-    POLICY_GROUPS.flatMap(([name, insertProxy, insertDirect]) => {
-      return [
-        '        [',
-        `            'name' => '${name}',`,
-        '            \'type\' => \'select\',',
-        '            \'proxies\' => [',
-        insertProxy && name !== 'Default Proxy' && '                \'Default Proxy\',',
-        insertDirect && '                \'DIRECT\',',
-        '            ],',
-        '        ],'
-      ].filter(isTruthy);
-    })
+    POLICY_GROUPS.flatMap(([name, insertProxy, insertDirect]) => [
+      '        [',
+      `            'name' => '${name}',`,
+      '            \'type\' => \'select\',',
+      '            \'proxies\' => [',
+      insertProxy && name !== 'Default Proxy' && '                \'Default Proxy\',',
+      insertDirect && '                \'DIRECT\',',
+      '            ],',
+      '        ],'
+    ].filter(isTruthy))
   );
   );
 
 
   appendArrayInPlace(
   appendArrayInPlace(

+ 38 - 38
Build/build-stream-service.ts

@@ -6,42 +6,42 @@ import { ALL, NORTH_AMERICA, EU, HK, TW, JP, KR } from '../Source/stream';
 import { SHARED_DESCRIPTION } from './lib/constants';
 import { SHARED_DESCRIPTION } from './lib/constants';
 import { RulesetOutput } from './lib/create-file';
 import { RulesetOutput } from './lib/create-file';
 
 
-export const createRulesetForStreamService = (span: Span, fileId: string, title: string, streamServices: Array<import('../Source/stream').StreamService>) => {
-  return span.traceChildAsync(fileId, async (childSpan) => Promise.all([
-    // Domains
-    new RulesetOutput(childSpan, fileId, 'non_ip')
-      .withTitle(`Sukka's Ruleset - Stream Services: ${title}`)
-      .withDescription([
-        ...SHARED_DESCRIPTION,
-        '',
-        ...streamServices.map((i) => `- ${i.name}`)
-      ])
-      .addFromRuleset(streamServices.flatMap((i) => i.rules))
-      .write(),
-    // IP
-    new RulesetOutput(childSpan, fileId, 'ip')
-      .withTitle(`Sukka's Ruleset - Stream Services IPs: ${title}`)
-      .withDescription([
-        ...SHARED_DESCRIPTION,
-        '',
-        ...streamServices.map((i) => `- ${i.name}`)
-      ])
-      .bulkAddCIDR4NoResolve(streamServices.flatMap(i => i.ip?.v4 ?? []))
-      .bulkAddCIDR6NoResolve(streamServices.flatMap(i => i.ip?.v6 ?? []))
-      .write()
-  ]));
-};
+export const createRulesetForStreamService = (
+  span: Span,
+  fileId: string, title: string,
+  streamServices: Array<import('../Source/stream').StreamService>
+) => span.traceChildAsync(fileId, async (childSpan) => Promise.all([
+  // Domains
+  new RulesetOutput(childSpan, fileId, 'non_ip')
+    .withTitle(`Sukka's Ruleset - Stream Services: ${title}`)
+    .withDescription([
+      ...SHARED_DESCRIPTION,
+      '',
+      ...streamServices.map((i) => `- ${i.name}`)
+    ])
+    .addFromRuleset(streamServices.flatMap((i) => i.rules))
+    .write(),
+  // IP
+  new RulesetOutput(childSpan, fileId, 'ip')
+    .withTitle(`Sukka's Ruleset - Stream Services IPs: ${title}`)
+    .withDescription([
+      ...SHARED_DESCRIPTION,
+      '',
+      ...streamServices.map((i) => `- ${i.name}`)
+    ])
+    .bulkAddCIDR4NoResolve(streamServices.flatMap(i => i.ip?.v4 ?? []))
+    .bulkAddCIDR6NoResolve(streamServices.flatMap(i => i.ip?.v6 ?? []))
+    .write()
+]));
 
 
-export const buildStreamService = task(require.main === module, __filename)(async (span) => {
-  return Promise.all([
-    createRulesetForStreamService(span, 'stream', 'All', ALL),
-    createRulesetForStreamService(span, 'stream_us', 'North America', NORTH_AMERICA),
-    createRulesetForStreamService(span, 'stream_eu', 'Europe', EU),
-    createRulesetForStreamService(span, 'stream_hk', 'Hong Kong', HK),
-    createRulesetForStreamService(span, 'stream_tw', 'Taiwan', TW),
-    createRulesetForStreamService(span, 'stream_jp', 'Japan', JP),
-    // createRulesetForStreamService('stream_au', 'Oceania', AU),
-    createRulesetForStreamService(span, 'stream_kr', 'Korean', KR)
-    // createRulesetForStreamService('stream_south_east_asia', 'South East Asia', SOUTH_EAST_ASIA)
-  ]);
-});
+export const buildStreamService = task(require.main === module, __filename)(async (span) => Promise.all([
+  createRulesetForStreamService(span, 'stream', 'All', ALL),
+  createRulesetForStreamService(span, 'stream_us', 'North America', NORTH_AMERICA),
+  createRulesetForStreamService(span, 'stream_eu', 'Europe', EU),
+  createRulesetForStreamService(span, 'stream_hk', 'Hong Kong', HK),
+  createRulesetForStreamService(span, 'stream_tw', 'Taiwan', TW),
+  createRulesetForStreamService(span, 'stream_jp', 'Japan', JP),
+  // createRulesetForStreamService('stream_au', 'Oceania', AU),
+  createRulesetForStreamService(span, 'stream_kr', 'Korean', KR)
+  // createRulesetForStreamService('stream_south_east_asia', 'South East Asia', SOUTH_EAST_ASIA)
+]));

+ 1 - 3
Build/lib/bitwise.ts

@@ -1,7 +1,5 @@
 /** Packs two 16-bit integers into one 32-bit integer */
 /** Packs two 16-bit integers into one 32-bit integer */
-export const pack = (a: number, b: number): number => {
-  return (a << 16) | b;
-};
+export const pack = (a: number, b: number): number => (a << 16) | b;
 
 
 /** Unpacks two 16-bit integers from one 32-bit integer */
 /** Unpacks two 16-bit integers from one 32-bit integer */
 export const unpack = (value: number, arr: [a: number, b: number] = Array.from(new Array(2).keys()) as any): [a: number, b: number] => {
 export const unpack = (value: number, arr: [a: number, b: number] = Array.from(new Array(2).keys()) as any): [a: number, b: number] => {

+ 5 - 7
Build/lib/misc.ts

@@ -77,13 +77,11 @@ export const appendArrayFromSet = <T>(dest: T[], source: Set<T> | Array<Set<T>>,
   return dest;
   return dest;
 };
 };
 
 
-export const output = (id: string, type: 'non_ip' | 'ip' | 'domainset') => {
-  return [
-    path.join(OUTPUT_SURGE_DIR, type, id + '.conf'),
-    path.join(OUTPUT_CLASH_DIR, type, id + '.txt'),
-    path.join(OUTPUT_SINGBOX_DIR, type, id + '.json')
-  ] as const;
-};
+export const output = (id: string, type: 'non_ip' | 'ip' | 'domainset') => [
+  path.join(OUTPUT_SURGE_DIR, type, id + '.conf'),
+  path.join(OUTPUT_CLASH_DIR, type, id + '.txt'),
+  path.join(OUTPUT_SINGBOX_DIR, type, id + '.json')
+] as const;
 
 
 export function withBannerArray(title: string, description: string[] | readonly string[], date: Date, content: string[]) {
 export function withBannerArray(title: string, description: string[] | readonly string[], date: Date, content: string[]) {
   return [
   return [

+ 1 - 3
Build/lib/parse-filter.ts

@@ -223,9 +223,7 @@ export async function processFilterRules(
           lineCb(line);
           lineCb(line);
         }
         }
       } else {
       } else {
-        const filterRules = await span.traceChild('download adguard filter').traceAsyncFn(() => {
-          return fetchAssets(filterRulesUrl, fallbackUrls).then(text => text.split('\n'));
-        });
+        const filterRules = await span.traceChild('download adguard filter').traceAsyncFn(() => fetchAssets(filterRulesUrl, fallbackUrls).then(text => text.split('\n')));
 
 
         span.traceChild('parse adguard filter').traceSyncFn(() => {
         span.traceChild('parse adguard filter').traceSyncFn(() => {
           for (let i = 0, len = filterRules.length; i < len; i++) {
           for (let i = 0, len = filterRules.length; i < len; i++) {

+ 7 - 16
Build/lib/rules/base.ts

@@ -36,14 +36,14 @@ export abstract class RuleOutput<TPreprocessed = unknown> {
 
 
   protected pendingPromise = Promise.resolve();
   protected pendingPromise = Promise.resolve();
 
 
-  static jsonToLines = (json: unknown): string[] => stringify(json).split('\n');
+  static readonly jsonToLines = (json: unknown): string[] => stringify(json).split('\n');
 
 
   whitelistDomain = (domain: string) => {
   whitelistDomain = (domain: string) => {
     this.domainTrie.whitelist(domain);
     this.domainTrie.whitelist(domain);
     return this;
     return this;
   };
   };
 
 
-  static domainWildCardToRegex = (domain: string) => {
+  static readonly domainWildCardToRegex = (domain: string) => {
     let result = '^';
     let result = '^';
     for (let i = 0, len = domain.length; i < len; i++) {
     for (let i = 0, len = domain.length; i < len; i++) {
       switch (domain[i]) {
       switch (domain[i]) {
@@ -67,8 +67,7 @@ export abstract class RuleOutput<TPreprocessed = unknown> {
   constructor(
   constructor(
     protected readonly span: Span,
     protected readonly span: Span,
     protected readonly id: string
     protected readonly id: string
-  ) {
-  }
+  ) { }
 
 
   protected title: string | null = null;
   protected title: string | null = null;
   withTitle(title: string) {
   withTitle(title: string) {
@@ -199,7 +198,7 @@ export abstract class RuleOutput<TPreprocessed = unknown> {
     return this;
     return this;
   }
   }
 
 
-  static ipToCidr = (ip: string, version: 4 | 6 = 4) => {
+  static readonly ipToCidr = (ip: string, version: 4 | 6 = 4) => {
     if (ip.includes('/')) return ip;
     if (ip.includes('/')) return ip;
     if (version === 4) {
     if (version === 4) {
       return ip + '/32';
       return ip + '/32';
@@ -325,11 +324,7 @@ export const fileEqual = async (linesA: string[], source: AsyncIterable<string>)
     index++;
     index++;
 
 
     if (index > linesA.length - 1) {
     if (index > linesA.length - 1) {
-      if (index === linesA.length && lineB === '') {
-        return true;
-      }
-      // The file becomes smaller
-      return false;
+      return (index === linesA.length && lineB === '');
     }
     }
 
 
     const lineA = linesA[index];
     const lineA = linesA[index];
@@ -353,12 +348,8 @@ export const fileEqual = async (linesA: string[], source: AsyncIterable<string>)
     }
     }
   }
   }
 
 
-  if (index < linesA.length - 1) {
-    // The file becomes larger
-    return false;
-  }
-
-  return true;
+  // The file becomes larger
+  return !(index < linesA.length - 1);
 };
 };
 
 
 export async function compareAndWriteFile(span: Span, linesA: string[], filePath: string) {
 export async function compareAndWriteFile(span: Span, linesA: string[], filePath: string) {

+ 1 - 3
Build/lib/string-hash.ts

@@ -43,6 +43,4 @@ export const fnv1a52 = (str: string) => {
   );
   );
 };
 };
 
 
-export const stringHash = (payload: string) => {
-  return fnv1a52(payload).toString(36) + payload.length.toString(36);
-};
+export const stringHash = (payload: string) => fnv1a52(payload).toString(36) + payload.length.toString(36);

+ 2 - 6
Build/lib/trie.ts

@@ -34,9 +34,7 @@ const deepTrieNodeToJSON = (
   return obj;
   return obj;
 };
 };
 
 
-const createNode = <Meta = any>(parent: TrieNode | null = null): TrieNode => {
-  return [false, parent, new Map<string, TrieNode>(), null] as TrieNode<Meta>;
-};
+const createNode = <Meta = any>(parent: TrieNode | null = null): TrieNode => [false, parent, new Map<string, TrieNode>(), null] as TrieNode<Meta>;
 
 
 export const hostnameToTokens = (hostname: string): string[] => {
 export const hostnameToTokens = (hostname: string): string[] => {
   const tokens = hostname.split('.');
   const tokens = hostname.split('.');
@@ -227,9 +225,7 @@ export const createTrie = <Meta = any>(from?: string[] | Set<string> | null, smo
     return { node, parent };
     return { node, parent };
   };
   };
 
 
-  const contains = (suffix: string): boolean => {
-    return walkIntoLeafWithSuffix(suffix) !== null;
-  };
+  const contains = (suffix: string): boolean => walkIntoLeafWithSuffix(suffix) !== null;
 
 
   const walk = (
   const walk = (
     onMatches: (suffix: string[], meta: Meta) => void,
     onMatches: (suffix: string[], meta: Meta) => void,

+ 1 - 4
Build/trim-source.ts

@@ -20,11 +20,8 @@ import { SOURCE_DIR } from './constants/dir';
       if (isDirectory) return true;
       if (isDirectory) return true;
 
 
       const extname = path.extname(filepath);
       const extname = path.extname(filepath);
-      if (extname === '.js' || extname === '.ts') {
-        return false;
-      }
 
 
-      return true;
+      return !(extname === '.js' || extname === '.ts');
     })
     })
     .crawl(SOURCE_DIR)
     .crawl(SOURCE_DIR)
     .withPromise();
     .withPromise();

+ 6 - 6
package.json

@@ -37,12 +37,12 @@
     "picocolors": "^1.1.0",
     "picocolors": "^1.1.0",
     "punycode": "^2.3.1",
     "punycode": "^2.3.1",
     "tar-fs": "^3.0.6",
     "tar-fs": "^3.0.6",
-    "tldts": "^6.1.47",
-    "tldts-experimental": "^6.1.47",
+    "tldts": "^6.1.48",
+    "tldts-experimental": "^6.1.48",
     "yaml": "^2.5.1"
     "yaml": "^2.5.1"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "@eslint-sukka/node": "^6.5.0",
+    "@eslint-sukka/node": "^6.6.0",
     "@swc-node/register": "^1.10.9",
     "@swc-node/register": "^1.10.9",
     "@swc/core": "^1.7.28",
     "@swc/core": "^1.7.28",
     "@types/async-retry": "^1.4.8",
     "@types/async-retry": "^1.4.8",
@@ -54,9 +54,9 @@
     "@types/tar-stream": "^3.1.3",
     "@types/tar-stream": "^3.1.3",
     "chai": "4",
     "chai": "4",
     "eslint": "^9.11.1",
     "eslint": "^9.11.1",
-    "eslint-config-sukka": "^6.5.0",
-    "eslint-formatter-sukka": "^6.5.0",
-    "mitata": "^1.0.6",
+    "eslint-config-sukka": "^6.6.0",
+    "eslint-formatter-sukka": "^6.6.0",
+    "mitata": "^1.0.10",
     "mocha": "^10.7.3",
     "mocha": "^10.7.3",
     "typescript": "^5.6.2"
     "typescript": "^5.6.2"
   },
   },

+ 175 - 178
pnpm-lock.yaml

@@ -63,18 +63,18 @@ importers:
         specifier: ^3.0.6
         specifier: ^3.0.6
         version: 3.0.6
         version: 3.0.6
       tldts:
       tldts:
-        specifier: ^6.1.47
-        version: 6.1.47
+        specifier: ^6.1.48
+        version: 6.1.48
       tldts-experimental:
       tldts-experimental:
-        specifier: ^6.1.47
-        version: 6.1.47
+        specifier: ^6.1.48
+        version: 6.1.48
       yaml:
       yaml:
         specifier: ^2.5.1
         specifier: ^2.5.1
         version: 2.5.1
         version: 2.5.1
     devDependencies:
     devDependencies:
       '@eslint-sukka/node':
       '@eslint-sukka/node':
-        specifier: ^6.5.0
-        version: 6.5.0(eslint@9.11.1)(typescript@5.6.2)
+        specifier: ^6.6.0
+        version: 6.6.0(eslint@9.11.1)(typescript@5.6.2)
       '@swc-node/register':
       '@swc-node/register':
         specifier: ^1.10.9
         specifier: ^1.10.9
         version: 1.10.9(@swc/core@1.7.28)(@swc/types@0.1.12)(typescript@5.6.2)
         version: 1.10.9(@swc/core@1.7.28)(@swc/types@0.1.12)(typescript@5.6.2)
@@ -109,14 +109,14 @@ importers:
         specifier: ^9.11.1
         specifier: ^9.11.1
         version: 9.11.1
         version: 9.11.1
       eslint-config-sukka:
       eslint-config-sukka:
-        specifier: ^6.5.0
-        version: 6.5.0(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)
+        specifier: ^6.6.0
+        version: 6.6.0(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)
       eslint-formatter-sukka:
       eslint-formatter-sukka:
-        specifier: ^6.5.0
-        version: 6.5.0
+        specifier: ^6.6.0
+        version: 6.6.0
       mitata:
       mitata:
-        specifier: ^1.0.6
-        version: 1.0.6
+        specifier: ^1.0.10
+        version: 1.0.10
       mocha:
       mocha:
         specifier: ^10.7.3
         specifier: ^10.7.3
         version: 10.7.3
         version: 10.7.3
@@ -167,11 +167,15 @@ packages:
     resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
     resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
 
-  '@eslint-sukka/node@6.5.0':
-    resolution: {integrity: sha512-JmQS5nqPAVGekrKpOT7mmDOqWf8ykVUs7Yu1I8KrF99vffOWHWmpCZS7xpBNhkYCmT7dDY17HnLKFj26LpWWZw==}
+  '@eslint-community/regexpp@4.11.1':
+    resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==}
+    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+  '@eslint-sukka/node@6.6.0':
+    resolution: {integrity: sha512-4gPVUiMM1bKSPm95JA884LOvGFbiG8BL9F+QekCbRWf5ibcWRCnfI5EeKin0eHd/EgDgjLp3qzb9IbvhPhhipQ==}
 
 
-  '@eslint-sukka/shared@6.5.0':
-    resolution: {integrity: sha512-f4czDDo+5ahUKwSPeYIEHFt/3mtVmZo0U6cHiH24q8m8YqRWp9k7leONsFKGJ5mRL+R6Tzwih7e24gKVFHmnVA==}
+  '@eslint-sukka/shared@6.6.0':
+    resolution: {integrity: sha512-Z8NJfvXHl2pXiHQ+pNhwi8U0r8BlP9y+OWKlr4ET/IIxKNVBiDJsEvaOW3I0TJiGtgQeLHdTIX6iawa18ldx0g==}
 
 
   '@eslint/config-array@0.18.0':
   '@eslint/config-array@0.18.0':
     resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
     resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
@@ -462,8 +466,8 @@ packages:
   '@types/tar-stream@3.1.3':
   '@types/tar-stream@3.1.3':
     resolution: {integrity: sha512-Zbnx4wpkWBMBSu5CytMbrT5ZpMiF55qgM+EpHzR4yIDu7mv52cej8hTkOc6K+LzpkOAbxwn/m7j3iO+/l42YkQ==}
     resolution: {integrity: sha512-Zbnx4wpkWBMBSu5CytMbrT5ZpMiF55qgM+EpHzR4yIDu7mv52cej8hTkOc6K+LzpkOAbxwn/m7j3iO+/l42YkQ==}
 
 
-  '@typescript-eslint/eslint-plugin@8.6.0':
-    resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==}
+  '@typescript-eslint/eslint-plugin@8.7.0':
+    resolution: {integrity: sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
       '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
@@ -473,8 +477,8 @@ packages:
       typescript:
       typescript:
         optional: true
         optional: true
 
 
-  '@typescript-eslint/parser@8.6.0':
-    resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==}
+  '@typescript-eslint/parser@8.7.0':
+    resolution: {integrity: sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       eslint: ^8.57.0 || ^9.0.0
@@ -483,12 +487,12 @@ packages:
       typescript:
       typescript:
         optional: true
         optional: true
 
 
-  '@typescript-eslint/scope-manager@8.6.0':
-    resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==}
+  '@typescript-eslint/scope-manager@8.7.0':
+    resolution: {integrity: sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
 
-  '@typescript-eslint/type-utils@8.6.0':
-    resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==}
+  '@typescript-eslint/type-utils@8.7.0':
+    resolution: {integrity: sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       typescript: '*'
       typescript: '*'
@@ -496,12 +500,12 @@ packages:
       typescript:
       typescript:
         optional: true
         optional: true
 
 
-  '@typescript-eslint/types@8.6.0':
-    resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==}
+  '@typescript-eslint/types@8.7.0':
+    resolution: {integrity: sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
 
-  '@typescript-eslint/typescript-estree@8.6.0':
-    resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==}
+  '@typescript-eslint/typescript-estree@8.7.0':
+    resolution: {integrity: sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       typescript: '*'
       typescript: '*'
@@ -509,14 +513,14 @@ packages:
       typescript:
       typescript:
         optional: true
         optional: true
 
 
-  '@typescript-eslint/utils@8.6.0':
-    resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==}
+  '@typescript-eslint/utils@8.7.0':
+    resolution: {integrity: sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       eslint: ^8.57.0 || ^9.0.0
 
 
-  '@typescript-eslint/visitor-keys@8.6.0':
-    resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==}
+  '@typescript-eslint/visitor-keys@8.7.0':
+    resolution: {integrity: sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
 
   acorn-jsx@5.3.2:
   acorn-jsx@5.3.2:
@@ -676,9 +680,6 @@ packages:
   concat-map@0.0.1:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
 
-  confbox@0.1.7:
-    resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==}
-
   cross-spawn@7.0.3:
   cross-spawn@7.0.3:
     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
     engines: {node: '>= 8'}
     engines: {node: '>= 8'}
@@ -703,6 +704,15 @@ packages:
       supports-color:
       supports-color:
         optional: true
         optional: true
 
 
+  debug@4.3.7:
+    resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+    engines: {node: '>=6.0'}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+
   decamelize@4.0.0:
   decamelize@4.0.0:
     resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
     resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
     engines: {node: '>=10'}
     engines: {node: '>=10'}
@@ -761,17 +771,17 @@ packages:
     peerDependencies:
     peerDependencies:
       eslint: '>=6.0.0'
       eslint: '>=6.0.0'
 
 
-  eslint-config-sukka@6.5.0:
-    resolution: {integrity: sha512-Gij38wGbMvp4gtU0iynT+OdmZ6Rxy4dX6AMtISaaPQaXnoUq7lzI6BdgO6djtoEIrwdJy8Ko3T+mBdQR5lZHWg==}
+  eslint-config-sukka@6.6.0:
+    resolution: {integrity: sha512-RmT5dqTA7sgdRhptVe9Lif7YQxU2qntv6oGXrkXBiWoiprnEc9xynADdqCi+VEnViOBo6F9k6CZ13ODmUeg2Dw==}
 
 
-  eslint-formatter-sukka@6.5.0:
-    resolution: {integrity: sha512-IMIshiXCwAUZ0Xt+q7zLbYSdtvjl4sY5mwA2bRChH0UpvVfWZzwhA/CHzPRX+a30IIsnQj389FIwLfgOgZcs7g==}
+  eslint-formatter-sukka@6.6.0:
+    resolution: {integrity: sha512-bIKKXBoP3WcMTbQfAZ6J8e9finmlRDP67MXPAoLxsOVszMRqT0LdfIn46Nnz9ScXKcaE1ACKND9FpltOaEum1g==}
 
 
   eslint-import-resolver-node@0.3.9:
   eslint-import-resolver-node@0.3.9:
     resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
     resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
 
 
-  eslint-import-resolver-ts-bundled@6.5.0:
-    resolution: {integrity: sha512-5Kvz6ZYA0KpRXuCsr7q4BpbEhDe8A+Enu80C+EzrlUOhwXWgnGof3PDxPXIzAi+A3OAy0u8i++CPP+nu33LASg==}
+  eslint-import-resolver-ts-bundled@6.6.0:
+    resolution: {integrity: sha512-DWh/O5HQAkAj4I9e23WQFxevHV14jljy+VH+WSTfw93yf5CcryV0K4WOhCEVDBwcJj7GlsDfgSQY3oqT2AROTA==}
 
 
   eslint-plugin-autofix@2.2.0:
   eslint-plugin-autofix@2.2.0:
     resolution: {integrity: sha512-lu8+0r+utyTroROqXIL+a8sUpICi6za22hIzlpb0+x0tQGRnOjhOKU7v8mC/NS/faDoVsw6xW3vUpc+Mcz5NWA==}
     resolution: {integrity: sha512-lu8+0r+utyTroROqXIL+a8sUpICi6za22hIzlpb0+x0tQGRnOjhOKU7v8mC/NS/faDoVsw6xW3vUpc+Mcz5NWA==}
@@ -785,8 +795,8 @@ packages:
     peerDependencies:
     peerDependencies:
       eslint: '>=8'
       eslint: '>=8'
 
 
-  eslint-plugin-import-x@4.2.1:
-    resolution: {integrity: sha512-WWi2GedccIJa0zXxx3WDnTgouGQTtdYK1nhXMwywbqqAgB0Ov+p1pYBsWh3VaB0bvBOwLse6OfVII7jZD9xo5Q==}
+  eslint-plugin-import-x@4.3.0:
+    resolution: {integrity: sha512-PxGzP7gAjF2DLeRnQtbYkkgZDg1intFyYr/XS1LgTYXUDrSXMHGkXx8++6i2eDv2jMs0jfeO6G6ykyeWxiFX7w==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       eslint: ^8.57.0 || ^9.0.0
@@ -815,8 +825,13 @@ packages:
     peerDependencies:
     peerDependencies:
       eslint: '>=8.44.0'
       eslint: '>=8.44.0'
 
 
-  eslint-plugin-sukka@6.5.0:
-    resolution: {integrity: sha512-Jao2e+hk9yX4kCpKSsLV27+h5JRfyQn/EvNZFm5kfkj/91j0WaIq3lJ46wZMka8CN6q28ujoo7hq9g6UCj8qDQ==}
+  eslint-plugin-sukka@6.6.0:
+    resolution: {integrity: sha512-rxeH77OOgMVYWyctJZz/wHH19UWeM32nkIZwrDdsyNamkkML7xkUnfQg6moDRJd3wOXOp6/D509uLZlE/mpA5Q==}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
 
 
   eslint-plugin-unused-imports@4.1.4:
   eslint-plugin-unused-imports@4.1.4:
     resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==}
     resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==}
@@ -843,6 +858,10 @@ packages:
     resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
     resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
 
+  eslint-visitor-keys@4.1.0:
+    resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
   eslint@9.11.1:
   eslint@9.11.1:
     resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==}
     resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -857,6 +876,10 @@ packages:
     resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==}
     resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
 
+  espree@10.2.0:
+    resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
   espree@9.6.1:
   espree@9.6.1:
     resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
     resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -967,8 +990,8 @@ packages:
   get-func-name@2.0.2:
   get-func-name@2.0.2:
     resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
     resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
 
 
-  get-tsconfig@4.8.0:
-    resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==}
+  get-tsconfig@4.8.1:
+    resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
 
 
   github-from-package@0.0.0:
   github-from-package@0.0.0:
     resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
     resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
@@ -1110,10 +1133,6 @@ packages:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
     engines: {node: '>= 0.8.0'}
     engines: {node: '>= 0.8.0'}
 
 
-  local-pkg@0.5.0:
-    resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
-    engines: {node: '>=14'}
-
   locate-path@6.0.0:
   locate-path@6.0.0:
     resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
     resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
     engines: {node: '>=10'}
     engines: {node: '>=10'}
@@ -1154,15 +1173,12 @@ packages:
   minimist@1.2.8:
   minimist@1.2.8:
     resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
     resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
 
 
-  mitata@1.0.6:
-    resolution: {integrity: sha512-RV4MrY9t7EHgmLaBBWEv3NVV2ZJRnfio0VdnHYxctFgU7Yi0m+knjjOzWXFZZkwiqDtypRdAeJUm5PbWhLLHYg==}
+  mitata@1.0.10:
+    resolution: {integrity: sha512-pn21sHg5+AiTqj7z7aCeNlkEXMYhAykl1zbGqp1sbTJKRe8lhNokoyubLmvwbY5sWb8B+VDQByn3UyRmdBDQ1w==}
 
 
   mkdirp-classic@0.5.3:
   mkdirp-classic@0.5.3:
     resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
     resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
 
 
-  mlly@1.7.1:
-    resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
-
   mnemonist@0.39.8:
   mnemonist@0.39.8:
     resolution: {integrity: sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ==}
     resolution: {integrity: sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ==}
 
 
@@ -1227,9 +1243,6 @@ packages:
   path-parse@1.0.7:
   path-parse@1.0.7:
     resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
     resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
 
 
-  pathe@1.1.2:
-    resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
-
   pathval@1.1.1:
   pathval@1.1.1:
     resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
     resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
 
 
@@ -1248,9 +1261,6 @@ packages:
     resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
     resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
     engines: {node: '>= 6'}
     engines: {node: '>= 6'}
 
 
-  pkg-types@1.2.0:
-    resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==}
-
   prebuild-install@7.1.2:
   prebuild-install@7.1.2:
     resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==}
     resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==}
     engines: {node: '>=10'}
     engines: {node: '>=10'}
@@ -1433,14 +1443,14 @@ packages:
   text-table@0.2.0:
   text-table@0.2.0:
     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
 
 
-  tldts-core@6.1.47:
-    resolution: {integrity: sha512-6SWyFMnlst1fEt7GQVAAu16EGgFK0cLouH/2Mk6Ftlwhv3Ol40L0dlpGMcnnNiiOMyD2EV/aF3S+U2nKvvLvrA==}
+  tldts-core@6.1.48:
+    resolution: {integrity: sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==}
 
 
-  tldts-experimental@6.1.47:
-    resolution: {integrity: sha512-XOcqmjaHA3hHQsV9TggV9bQ6Y+N4P/9Bnbmp/QQto+EcEBNTex10KnvPQBbQwLgLSarHEuTyC5PktohvIsYNBQ==}
+  tldts-experimental@6.1.48:
+    resolution: {integrity: sha512-DfEGuLszDlllzx51WTABXB6LeMF46odcTWGUqG9rdTaRhiRlp+Ldkr1jiHugWBw/etwj71kr02rAUNt4cAet/w==}
 
 
-  tldts@6.1.47:
-    resolution: {integrity: sha512-R/K2tZ5MiY+mVrnSkNJkwqYT2vUv1lcT6wJvd2emGaMJ7PHUGRY4e3tUsdFCXgqxi2QgbHjL3yJgXCo40v9Hxw==}
+  tldts@6.1.48:
+    resolution: {integrity: sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==}
     hasBin: true
     hasBin: true
 
 
   to-regex-range@5.0.1:
   to-regex-range@5.0.1:
@@ -1467,8 +1477,8 @@ packages:
     resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
     resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
     engines: {node: '>=4'}
     engines: {node: '>=4'}
 
 
-  typescript-eslint@8.6.0:
-    resolution: {integrity: sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==}
+  typescript-eslint@8.7.0:
+    resolution: {integrity: sha512-nEHbEYJyHwsuf7c3V3RS7Saq+1+la3i0ieR3qP0yjqWSzVmh8Drp47uOl9LjbPANac4S7EFSqvcYIKXUUwIfIQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       typescript: '*'
       typescript: '*'
@@ -1481,9 +1491,6 @@ packages:
     engines: {node: '>=14.17'}
     engines: {node: '>=14.17'}
     hasBin: true
     hasBin: true
 
 
-  ufo@1.5.4:
-    resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
-
   undici-types@5.26.5:
   undici-types@5.26.5:
     resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
     resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
 
 
@@ -1554,7 +1561,7 @@ snapshots:
       '@remusao/smaz': 1.10.0
       '@remusao/smaz': 1.10.0
       '@types/chrome': 0.0.270
       '@types/chrome': 0.0.270
       '@types/firefox-webext-browser': 120.0.4
       '@types/firefox-webext-browser': 120.0.4
-      tldts-experimental: 6.1.47
+      tldts-experimental: 6.1.48
 
 
   '@colors/colors@1.5.0':
   '@colors/colors@1.5.0':
     optional: true
     optional: true
@@ -1590,22 +1597,24 @@ snapshots:
 
 
   '@eslint-community/regexpp@4.11.0': {}
   '@eslint-community/regexpp@4.11.0': {}
 
 
-  '@eslint-sukka/node@6.5.0(eslint@9.11.1)(typescript@5.6.2)':
+  '@eslint-community/regexpp@4.11.1': {}
+
+  '@eslint-sukka/node@6.6.0(eslint@9.11.1)(typescript@5.6.2)':
     dependencies:
     dependencies:
-      '@eslint-sukka/shared': 6.5.0(eslint@9.11.1)(typescript@5.6.2)
+      '@eslint-sukka/shared': 6.6.0(eslint@9.11.1)(typescript@5.6.2)
       eslint-plugin-n: 17.10.3(eslint@9.11.1)
       eslint-plugin-n: 17.10.3(eslint@9.11.1)
-      eslint-plugin-sukka: 6.5.0(eslint@9.11.1)(typescript@5.6.2)
+      eslint-plugin-sukka: 6.6.0(eslint@9.11.1)(typescript@5.6.2)
     transitivePeerDependencies:
     transitivePeerDependencies:
       - eslint
       - eslint
       - supports-color
       - supports-color
       - typescript
       - typescript
 
 
-  '@eslint-sukka/shared@6.5.0(eslint@9.11.1)(typescript@5.6.2)':
+  '@eslint-sukka/shared@6.6.0(eslint@9.11.1)(typescript@5.6.2)':
     dependencies:
     dependencies:
       '@dual-bundle/import-meta-resolve': 4.1.0
       '@dual-bundle/import-meta-resolve': 4.1.0
       '@package-json/types': 0.0.11
       '@package-json/types': 0.0.11
       '@types/eslint': 9.6.1
       '@types/eslint': 9.6.1
-      '@typescript-eslint/utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
     transitivePeerDependencies:
     transitivePeerDependencies:
       - eslint
       - eslint
       - supports-color
       - supports-color
@@ -1730,8 +1739,8 @@ snapshots:
   '@stylistic/eslint-plugin-js@2.8.0(eslint@9.11.1)':
   '@stylistic/eslint-plugin-js@2.8.0(eslint@9.11.1)':
     dependencies:
     dependencies:
       eslint: 9.11.1
       eslint: 9.11.1
-      eslint-visitor-keys: 4.0.0
-      espree: 10.1.0
+      eslint-visitor-keys: 4.1.0
+      espree: 10.2.0
 
 
   '@stylistic/eslint-plugin-plus@2.8.0(eslint@9.11.1)':
   '@stylistic/eslint-plugin-plus@2.8.0(eslint@9.11.1)':
     dependencies:
     dependencies:
@@ -1739,10 +1748,10 @@ snapshots:
 
 
   '@stylistic/eslint-plugin-ts@2.8.0(eslint@9.11.1)(typescript@5.6.2)':
   '@stylistic/eslint-plugin-ts@2.8.0(eslint@9.11.1)(typescript@5.6.2)':
     dependencies:
     dependencies:
-      '@typescript-eslint/utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
       eslint: 9.11.1
       eslint: 9.11.1
-      eslint-visitor-keys: 4.0.0
-      espree: 10.1.0
+      eslint-visitor-keys: 4.1.0
+      espree: 10.2.0
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
       - typescript
       - typescript
@@ -1882,14 +1891,14 @@ snapshots:
     dependencies:
     dependencies:
       '@types/node': 20.14.11
       '@types/node': 20.14.11
 
 
-  '@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)':
+  '@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)':
     dependencies:
     dependencies:
-      '@eslint-community/regexpp': 4.11.0
-      '@typescript-eslint/parser': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
-      '@typescript-eslint/scope-manager': 8.6.0
-      '@typescript-eslint/type-utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
-      '@typescript-eslint/visitor-keys': 8.6.0
+      '@eslint-community/regexpp': 4.11.1
+      '@typescript-eslint/parser': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/scope-manager': 8.7.0
+      '@typescript-eslint/type-utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/visitor-keys': 8.7.0
       eslint: 9.11.1
       eslint: 9.11.1
       graphemer: 1.4.0
       graphemer: 1.4.0
       ignore: 5.3.2
       ignore: 5.3.2
@@ -1900,29 +1909,29 @@ snapshots:
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/parser@8.6.0(eslint@9.11.1)(typescript@5.6.2)':
+  '@typescript-eslint/parser@8.7.0(eslint@9.11.1)(typescript@5.6.2)':
     dependencies:
     dependencies:
-      '@typescript-eslint/scope-manager': 8.6.0
-      '@typescript-eslint/types': 8.6.0
-      '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
-      '@typescript-eslint/visitor-keys': 8.6.0
-      debug: 4.3.6(supports-color@8.1.1)
+      '@typescript-eslint/scope-manager': 8.7.0
+      '@typescript-eslint/types': 8.7.0
+      '@typescript-eslint/typescript-estree': 8.7.0(typescript@5.6.2)
+      '@typescript-eslint/visitor-keys': 8.7.0
+      debug: 4.3.7
       eslint: 9.11.1
       eslint: 9.11.1
     optionalDependencies:
     optionalDependencies:
       typescript: 5.6.2
       typescript: 5.6.2
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/scope-manager@8.6.0':
+  '@typescript-eslint/scope-manager@8.7.0':
     dependencies:
     dependencies:
-      '@typescript-eslint/types': 8.6.0
-      '@typescript-eslint/visitor-keys': 8.6.0
+      '@typescript-eslint/types': 8.7.0
+      '@typescript-eslint/visitor-keys': 8.7.0
 
 
-  '@typescript-eslint/type-utils@8.6.0(eslint@9.11.1)(typescript@5.6.2)':
+  '@typescript-eslint/type-utils@8.7.0(eslint@9.11.1)(typescript@5.6.2)':
     dependencies:
     dependencies:
-      '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
-      debug: 4.3.6(supports-color@8.1.1)
+      '@typescript-eslint/typescript-estree': 8.7.0(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
+      debug: 4.3.7
       ts-api-utils: 1.3.0(typescript@5.6.2)
       ts-api-utils: 1.3.0(typescript@5.6.2)
     optionalDependencies:
     optionalDependencies:
       typescript: 5.6.2
       typescript: 5.6.2
@@ -1930,13 +1939,13 @@ snapshots:
       - eslint
       - eslint
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/types@8.6.0': {}
+  '@typescript-eslint/types@8.7.0': {}
 
 
-  '@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)':
+  '@typescript-eslint/typescript-estree@8.7.0(typescript@5.6.2)':
     dependencies:
     dependencies:
-      '@typescript-eslint/types': 8.6.0
-      '@typescript-eslint/visitor-keys': 8.6.0
-      debug: 4.3.6(supports-color@8.1.1)
+      '@typescript-eslint/types': 8.7.0
+      '@typescript-eslint/visitor-keys': 8.7.0
+      debug: 4.3.7
       fast-glob: 3.3.2
       fast-glob: 3.3.2
       is-glob: 4.0.3
       is-glob: 4.0.3
       minimatch: 9.0.5
       minimatch: 9.0.5
@@ -1947,20 +1956,20 @@ snapshots:
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/utils@8.6.0(eslint@9.11.1)(typescript@5.6.2)':
+  '@typescript-eslint/utils@8.7.0(eslint@9.11.1)(typescript@5.6.2)':
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1)
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1)
-      '@typescript-eslint/scope-manager': 8.6.0
-      '@typescript-eslint/types': 8.6.0
-      '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
+      '@typescript-eslint/scope-manager': 8.7.0
+      '@typescript-eslint/types': 8.7.0
+      '@typescript-eslint/typescript-estree': 8.7.0(typescript@5.6.2)
       eslint: 9.11.1
       eslint: 9.11.1
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
       - typescript
       - typescript
 
 
-  '@typescript-eslint/visitor-keys@8.6.0':
+  '@typescript-eslint/visitor-keys@8.7.0':
     dependencies:
     dependencies:
-      '@typescript-eslint/types': 8.6.0
+      '@typescript-eslint/types': 8.7.0
       eslint-visitor-keys: 3.4.3
       eslint-visitor-keys: 3.4.3
 
 
   acorn-jsx@5.3.2(acorn@8.12.1):
   acorn-jsx@5.3.2(acorn@8.12.1):
@@ -2135,8 +2144,6 @@ snapshots:
 
 
   concat-map@0.0.1: {}
   concat-map@0.0.1: {}
 
 
-  confbox@0.1.7: {}
-
   cross-spawn@7.0.3:
   cross-spawn@7.0.3:
     dependencies:
     dependencies:
       path-key: 3.1.1
       path-key: 3.1.1
@@ -2155,6 +2162,10 @@ snapshots:
     optionalDependencies:
     optionalDependencies:
       supports-color: 8.1.1
       supports-color: 8.1.1
 
 
+  debug@4.3.7:
+    dependencies:
+      ms: 2.1.3
+
   decamelize@4.0.0: {}
   decamelize@4.0.0: {}
 
 
   decompress-response@6.0.0:
   decompress-response@6.0.0:
@@ -2199,36 +2210,35 @@ snapshots:
       eslint: 9.11.1
       eslint: 9.11.1
       semver: 7.6.3
       semver: 7.6.3
 
 
-  eslint-config-sukka@6.5.0(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2):
+  eslint-config-sukka@6.6.0(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2):
     dependencies:
     dependencies:
       '@eslint-community/eslint-plugin-eslint-comments': 4.4.0(eslint@9.11.1)
       '@eslint-community/eslint-plugin-eslint-comments': 4.4.0(eslint@9.11.1)
-      '@eslint-sukka/shared': 6.5.0(eslint@9.11.1)(typescript@5.6.2)
+      '@eslint-sukka/shared': 6.6.0(eslint@9.11.1)(typescript@5.6.2)
       '@eslint/js': 9.11.1
       '@eslint/js': 9.11.1
       '@stylistic/eslint-plugin-js': 2.8.0(eslint@9.11.1)
       '@stylistic/eslint-plugin-js': 2.8.0(eslint@9.11.1)
       '@stylistic/eslint-plugin-plus': 2.8.0(eslint@9.11.1)
       '@stylistic/eslint-plugin-plus': 2.8.0(eslint@9.11.1)
       '@stylistic/eslint-plugin-ts': 2.8.0(eslint@9.11.1)(typescript@5.6.2)
       '@stylistic/eslint-plugin-ts': 2.8.0(eslint@9.11.1)(typescript@5.6.2)
-      '@typescript-eslint/parser': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/parser': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
       ci-info: 4.0.0
       ci-info: 4.0.0
       defu: 6.1.4
       defu: 6.1.4
-      eslint-import-resolver-ts-bundled: 6.5.0
+      eslint-import-resolver-ts-bundled: 6.6.0
       eslint-plugin-autofix: 2.2.0(eslint@9.11.1)
       eslint-plugin-autofix: 2.2.0(eslint@9.11.1)
-      eslint-plugin-import-x: 4.2.1(eslint@9.11.1)(typescript@5.6.2)
+      eslint-plugin-import-x: 4.3.0(eslint@9.11.1)(typescript@5.6.2)
       eslint-plugin-jsonc: 2.16.0(eslint@9.11.1)
       eslint-plugin-jsonc: 2.16.0(eslint@9.11.1)
       eslint-plugin-promise: 7.1.0(eslint@9.11.1)
       eslint-plugin-promise: 7.1.0(eslint@9.11.1)
       eslint-plugin-regexp: 2.6.0(eslint@9.11.1)
       eslint-plugin-regexp: 2.6.0(eslint@9.11.1)
-      eslint-plugin-sukka: 6.5.0(eslint@9.11.1)(typescript@5.6.2)
-      eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)
+      eslint-plugin-sukka: 6.6.0(eslint@9.11.1)(typescript@5.6.2)
+      eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)
       jsonc-eslint-parser: 2.4.0
       jsonc-eslint-parser: 2.4.0
-      local-pkg: 0.5.0
       picocolors: 1.1.0
       picocolors: 1.1.0
-      typescript-eslint: 8.6.0(eslint@9.11.1)(typescript@5.6.2)
+      typescript-eslint: 8.7.0(eslint@9.11.1)(typescript@5.6.2)
     transitivePeerDependencies:
     transitivePeerDependencies:
       - '@typescript-eslint/eslint-plugin'
       - '@typescript-eslint/eslint-plugin'
       - eslint
       - eslint
       - supports-color
       - supports-color
       - typescript
       - typescript
 
 
-  eslint-formatter-sukka@6.5.0:
+  eslint-formatter-sukka@6.6.0:
     dependencies:
     dependencies:
       ci-info: 4.0.0
       ci-info: 4.0.0
       picocolors: 1.1.0
       picocolors: 1.1.0
@@ -2241,7 +2251,7 @@ snapshots:
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  eslint-import-resolver-ts-bundled@6.5.0:
+  eslint-import-resolver-ts-bundled@6.6.0:
     dependencies:
     dependencies:
       enhanced-resolve: 5.17.1
       enhanced-resolve: 5.17.1
 
 
@@ -2256,18 +2266,18 @@ snapshots:
   eslint-plugin-es-x@7.8.0(eslint@9.11.1):
   eslint-plugin-es-x@7.8.0(eslint@9.11.1):
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1)
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1)
-      '@eslint-community/regexpp': 4.11.0
+      '@eslint-community/regexpp': 4.11.1
       eslint: 9.11.1
       eslint: 9.11.1
       eslint-compat-utils: 0.5.1(eslint@9.11.1)
       eslint-compat-utils: 0.5.1(eslint@9.11.1)
 
 
-  eslint-plugin-import-x@4.2.1(eslint@9.11.1)(typescript@5.6.2):
+  eslint-plugin-import-x@4.3.0(eslint@9.11.1)(typescript@5.6.2):
     dependencies:
     dependencies:
-      '@typescript-eslint/utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
-      debug: 4.3.6(supports-color@8.1.1)
+      '@typescript-eslint/utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
+      debug: 4.3.7
       doctrine: 3.0.0
       doctrine: 3.0.0
       eslint: 9.11.1
       eslint: 9.11.1
       eslint-import-resolver-node: 0.3.9
       eslint-import-resolver-node: 0.3.9
-      get-tsconfig: 4.8.0
+      get-tsconfig: 4.8.1
       is-glob: 4.0.3
       is-glob: 4.0.3
       minimatch: 9.0.5
       minimatch: 9.0.5
       semver: 7.6.3
       semver: 7.6.3
@@ -2294,7 +2304,7 @@ snapshots:
       enhanced-resolve: 5.17.1
       enhanced-resolve: 5.17.1
       eslint: 9.11.1
       eslint: 9.11.1
       eslint-plugin-es-x: 7.8.0(eslint@9.11.1)
       eslint-plugin-es-x: 7.8.0(eslint@9.11.1)
-      get-tsconfig: 4.8.0
+      get-tsconfig: 4.8.1
       globals: 15.9.0
       globals: 15.9.0
       ignore: 5.3.2
       ignore: 5.3.2
       minimatch: 9.0.5
       minimatch: 9.0.5
@@ -2307,7 +2317,7 @@ snapshots:
   eslint-plugin-regexp@2.6.0(eslint@9.11.1):
   eslint-plugin-regexp@2.6.0(eslint@9.11.1):
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1)
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1)
-      '@eslint-community/regexpp': 4.11.0
+      '@eslint-community/regexpp': 4.11.1
       comment-parser: 1.4.1
       comment-parser: 1.4.1
       eslint: 9.11.1
       eslint: 9.11.1
       jsdoc-type-pratt-parser: 4.1.0
       jsdoc-type-pratt-parser: 4.1.0
@@ -2315,21 +2325,22 @@ snapshots:
       regexp-ast-analysis: 0.7.1
       regexp-ast-analysis: 0.7.1
       scslre: 0.3.0
       scslre: 0.3.0
 
 
-  eslint-plugin-sukka@6.5.0(eslint@9.11.1)(typescript@5.6.2):
+  eslint-plugin-sukka@6.6.0(eslint@9.11.1)(typescript@5.6.2):
     dependencies:
     dependencies:
-      '@eslint-sukka/shared': 6.5.0(eslint@9.11.1)(typescript@5.6.2)
-      '@typescript-eslint/type-utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
+      '@eslint-sukka/shared': 6.6.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
+    optionalDependencies:
+      typescript: 5.6.2
     transitivePeerDependencies:
     transitivePeerDependencies:
       - eslint
       - eslint
       - supports-color
       - supports-color
-      - typescript
 
 
-  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1):
+  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1):
     dependencies:
     dependencies:
       eslint: 9.11.1
       eslint: 9.11.1
     optionalDependencies:
     optionalDependencies:
-      '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/eslint-plugin': 8.7.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)
 
 
   eslint-rule-composer@0.3.0: {}
   eslint-rule-composer@0.3.0: {}
 
 
@@ -2342,6 +2353,8 @@ snapshots:
 
 
   eslint-visitor-keys@4.0.0: {}
   eslint-visitor-keys@4.0.0: {}
 
 
+  eslint-visitor-keys@4.1.0: {}
+
   eslint@9.11.1:
   eslint@9.11.1:
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1)
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1)
@@ -2390,6 +2403,12 @@ snapshots:
       acorn-jsx: 5.3.2(acorn@8.12.1)
       acorn-jsx: 5.3.2(acorn@8.12.1)
       eslint-visitor-keys: 4.0.0
       eslint-visitor-keys: 4.0.0
 
 
+  espree@10.2.0:
+    dependencies:
+      acorn: 8.12.1
+      acorn-jsx: 5.3.2(acorn@8.12.1)
+      eslint-visitor-keys: 4.1.0
+
   espree@9.6.1:
   espree@9.6.1:
     dependencies:
     dependencies:
       acorn: 8.12.1
       acorn: 8.12.1
@@ -2478,7 +2497,7 @@ snapshots:
 
 
   get-func-name@2.0.2: {}
   get-func-name@2.0.2: {}
 
 
-  get-tsconfig@4.8.0:
+  get-tsconfig@4.8.1:
     dependencies:
     dependencies:
       resolve-pkg-maps: 1.0.0
       resolve-pkg-maps: 1.0.0
 
 
@@ -2594,11 +2613,6 @@ snapshots:
       prelude-ls: 1.2.1
       prelude-ls: 1.2.1
       type-check: 0.4.0
       type-check: 0.4.0
 
 
-  local-pkg@0.5.0:
-    dependencies:
-      mlly: 1.7.1
-      pkg-types: 1.2.0
-
   locate-path@6.0.0:
   locate-path@6.0.0:
     dependencies:
     dependencies:
       p-locate: 5.0.0
       p-locate: 5.0.0
@@ -2637,17 +2651,10 @@ snapshots:
 
 
   minimist@1.2.8: {}
   minimist@1.2.8: {}
 
 
-  mitata@1.0.6: {}
+  mitata@1.0.10: {}
 
 
   mkdirp-classic@0.5.3: {}
   mkdirp-classic@0.5.3: {}
 
 
-  mlly@1.7.1:
-    dependencies:
-      acorn: 8.12.1
-      pathe: 1.1.2
-      pkg-types: 1.2.0
-      ufo: 1.5.4
-
   mnemonist@0.39.8:
   mnemonist@0.39.8:
     dependencies:
     dependencies:
       obliterator: 2.0.4
       obliterator: 2.0.4
@@ -2736,8 +2743,6 @@ snapshots:
 
 
   path-parse@1.0.7: {}
   path-parse@1.0.7: {}
 
 
-  pathe@1.1.2: {}
-
   pathval@1.1.1: {}
   pathval@1.1.1: {}
 
 
   picocolors@1.1.0: {}
   picocolors@1.1.0: {}
@@ -2749,12 +2754,6 @@ snapshots:
 
 
   pirates@4.0.6: {}
   pirates@4.0.6: {}
 
 
-  pkg-types@1.2.0:
-    dependencies:
-      confbox: 0.1.7
-      mlly: 1.7.1
-      pathe: 1.1.2
-
   prebuild-install@7.1.2:
   prebuild-install@7.1.2:
     dependencies:
     dependencies:
       detect-libc: 2.0.3
       detect-libc: 2.0.3
@@ -2806,11 +2805,11 @@ snapshots:
 
 
   refa@0.12.1:
   refa@0.12.1:
     dependencies:
     dependencies:
-      '@eslint-community/regexpp': 4.11.0
+      '@eslint-community/regexpp': 4.11.1
 
 
   regexp-ast-analysis@0.7.1:
   regexp-ast-analysis@0.7.1:
     dependencies:
     dependencies:
-      '@eslint-community/regexpp': 4.11.0
+      '@eslint-community/regexpp': 4.11.1
       refa: 0.12.1
       refa: 0.12.1
 
 
   require-directory@2.1.1: {}
   require-directory@2.1.1: {}
@@ -2837,7 +2836,7 @@ snapshots:
 
 
   scslre@0.3.0:
   scslre@0.3.0:
     dependencies:
     dependencies:
-      '@eslint-community/regexpp': 4.11.0
+      '@eslint-community/regexpp': 4.11.1
       refa: 0.12.1
       refa: 0.12.1
       regexp-ast-analysis: 0.7.1
       regexp-ast-analysis: 0.7.1
 
 
@@ -2953,15 +2952,15 @@ snapshots:
 
 
   text-table@0.2.0: {}
   text-table@0.2.0: {}
 
 
-  tldts-core@6.1.47: {}
+  tldts-core@6.1.48: {}
 
 
-  tldts-experimental@6.1.47:
+  tldts-experimental@6.1.48:
     dependencies:
     dependencies:
-      tldts-core: 6.1.47
+      tldts-core: 6.1.48
 
 
-  tldts@6.1.47:
+  tldts@6.1.48:
     dependencies:
     dependencies:
-      tldts-core: 6.1.47
+      tldts-core: 6.1.48
 
 
   to-regex-range@5.0.1:
   to-regex-range@5.0.1:
     dependencies:
     dependencies:
@@ -2983,11 +2982,11 @@ snapshots:
 
 
   type-detect@4.0.8: {}
   type-detect@4.0.8: {}
 
 
-  typescript-eslint@8.6.0(eslint@9.11.1)(typescript@5.6.2):
+  typescript-eslint@8.7.0(eslint@9.11.1)(typescript@5.6.2):
     dependencies:
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)
-      '@typescript-eslint/parser': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.6.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/eslint-plugin': 8.7.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/parser': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.7.0(eslint@9.11.1)(typescript@5.6.2)
     optionalDependencies:
     optionalDependencies:
       typescript: 5.6.2
       typescript: 5.6.2
     transitivePeerDependencies:
     transitivePeerDependencies:
@@ -2996,8 +2995,6 @@ snapshots:
 
 
   typescript@5.6.2: {}
   typescript@5.6.2: {}
 
 
-  ufo@1.5.4: {}
-
   undici-types@5.26.5: {}
   undici-types@5.26.5: {}
 
 
   uri-js@4.4.1:
   uri-js@4.4.1: