Browse Source

Chore: repalce `expect` w/ `earl`

SukkaW 1 month ago
parent
commit
19713c168b
5 changed files with 112 additions and 372 deletions
  1. 2 2
      Build/lib/create-file.test.ts
  2. 2 2
      Build/lib/process-line.test.ts
  3. 87 87
      Build/lib/trie.test.ts
  4. 1 1
      package.json
  5. 20 280
      pnpm-lock.yaml

+ 2 - 2
Build/lib/create-file.test.ts

@@ -1,4 +1,4 @@
-import { expect } from 'expect';
+import { expect } from 'earl';
 import { fileEqual } from './create-file';
 
 // eslint-disable-next-line @typescript-eslint/require-await -- async iterable
@@ -9,7 +9,7 @@ async function *createSource(input: string[]) {
 }
 
 async function test(a: string[], b: string[], expected: boolean) {
-  expect((await fileEqual(a, createSource(b)))).toBe(expected);
+  expect((await fileEqual(a, createSource(b)))).toEqual(expected);
 }
 
 describe('fileEqual', () => {

+ 2 - 2
Build/lib/process-line.test.ts

@@ -1,7 +1,7 @@
 import { describe, it } from 'mocha';
 
 import { processLine } from './process-line';
-import { expect } from 'expect';
+import { expect } from 'earl';
 
 describe('processLine', () => {
   ([
@@ -16,7 +16,7 @@ describe('processLine', () => {
     ['##### EOF', null]
   ] as const).forEach(([input, expected]) => {
     it(input, () => {
-      expect(processLine(input)).toBe(expected);
+      expect(processLine(input)).toEqual(expected);
     });
   });
 });

+ 87 - 87
Build/lib/trie.test.ts

@@ -1,5 +1,5 @@
 import { describe, it } from 'mocha';
-import { expect } from 'expect';
+import { expect } from 'earl';
 import { HostnameSmolTrie, HostnameTrie } from './trie';
 
 function createTrie<Meta = any>(from: string[] | Set<string> | null, smolTree: true): HostnameSmolTrie<Meta>;
@@ -13,7 +13,7 @@ function createTrie<_Meta = any>(from?: string[] | Set<string> | null, smolTree
 
 // describe('hostname to tokens', () => {
 //   it('should split hostname into tokens.', () => {
-//     expect(hostnameToTokens('.blog.skk.moe')).toStrictEqual([
+//     expect(hostnameToTokens('.blog.skk.moe')).toEqual([
 //       '.',
 //       'blog',
 //       '.',
@@ -22,7 +22,7 @@ function createTrie<_Meta = any>(from?: string[] | Set<string> | null, smolTree
 //       'moe'
 //     ]);
 
-//     expect(hostnameToTokens('blog.skk.moe')).toStrictEqual([
+//     expect(hostnameToTokens('blog.skk.moe')).toEqual([
 //       'blog',
 //       '.',
 //       'skk',
@@ -30,13 +30,13 @@ function createTrie<_Meta = any>(from?: string[] | Set<string> | null, smolTree
 //       'moe'
 //     ]);
 
-//     expect(hostnameToTokens('skk.moe')).toStrictEqual([
+//     expect(hostnameToTokens('skk.moe')).toEqual([
 //       'skk',
 //       '.',
 //       'moe'
 //     ]);
 
-//     expect(hostnameToTokens('moe')).toStrictEqual([
+//     expect(hostnameToTokens('moe')).toEqual([
 //       'moe'
 //     ]);
 //   });
@@ -50,14 +50,14 @@ describe('Trie', () => {
     trie.add('skk.moe');
     trie.add('anotherskk.moe');
 
-    expect(trie.size).toBe(3);
+    expect(trie.size).toEqual(3);
 
-    expect(trie.has('a.skk.moe')).toBe(true);
-    expect(trie.has('skk.moe')).toBe(true);
-    expect(trie.has('anotherskk.moe')).toBe(true);
-    expect(trie.has('example.com')).toBe(false);
-    expect(trie.has('skk.mo')).toBe(false);
-    expect(trie.has('another.skk.moe')).toBe(false);
+    expect(trie.has('a.skk.moe')).toEqual(true);
+    expect(trie.has('skk.moe')).toEqual(true);
+    expect(trie.has('anotherskk.moe')).toEqual(true);
+    expect(trie.has('example.com')).toEqual(false);
+    expect(trie.has('skk.mo')).toEqual(false);
+    expect(trie.has('another.skk.moe')).toEqual(false);
   });
 
   it('adding the same item several times should not increase size.', () => {
@@ -68,19 +68,19 @@ describe('Trie', () => {
     // eslint-disable-next-line sukka/no-element-overwrite -- deliberately do testing
     trie.add('skk.moe');
 
-    expect(trie.size).toBe(2);
-    expect(trie.has('skk.moe')).toBe(true);
+    expect(trie.size).toEqual(2);
+    expect(trie.has('skk.moe')).toEqual(true);
   });
 
   it('should be possible to set the null sequence.', () => {
     const trie = createTrie(null, false);
 
     trie.add('');
-    expect(trie.has('')).toBe(true);
+    expect(trie.has('')).toEqual(true);
 
     const trie2 = createTrie(null, true);
     trie2.add('');
-    expect(trie2.has('')).toBe(true);
+    expect(trie2.has('')).toEqual(true);
   });
 
   it('should be possible to delete items.', () => {
@@ -91,19 +91,19 @@ describe('Trie', () => {
     trie.add('example.com');
     trie.add('moe.sb');
 
-    expect(trie.delete('no-match.com')).toBe(false);
-    expect(trie.delete('example.org')).toBe(false);
+    expect(trie.delete('no-match.com')).toEqual(false);
+    expect(trie.delete('example.org')).toEqual(false);
 
-    expect(trie.delete('skk.moe')).toBe(true);
-    expect(trie.has('skk.moe')).toBe(false);
-    expect(trie.has('moe.sb')).toBe(true);
+    expect(trie.delete('skk.moe')).toEqual(true);
+    expect(trie.has('skk.moe')).toEqual(false);
+    expect(trie.has('moe.sb')).toEqual(true);
 
-    expect(trie.size).toBe(3);
+    expect(trie.size).toEqual(3);
 
-    expect(trie.delete('example.com')).toBe(true);
-    expect(trie.size).toBe(2);
-    expect(trie.delete('moe.sb')).toBe(true);
-    expect(trie.size).toBe(1);
+    expect(trie.delete('example.com')).toEqual(true);
+    expect(trie.size).toEqual(2);
+    expect(trie.delete('moe.sb')).toEqual(true);
+    expect(trie.size).toEqual(1);
   });
 
   it('should be possible to check the existence of a sequence in the Trie.', () => {
@@ -111,10 +111,10 @@ describe('Trie', () => {
 
     trie.add('example.org.skk.moe');
 
-    expect(trie.has('example.org.skk.moe')).toBe(true);
-    expect(trie.has('skk.moe')).toBe(false);
-    expect(trie.has('example.org')).toBe(false);
-    expect(trie.has('')).toBe(false);
+    expect(trie.has('example.org.skk.moe')).toEqual(true);
+    expect(trie.has('skk.moe')).toEqual(false);
+    expect(trie.has('example.org')).toEqual(false);
+    expect(trie.has('')).toEqual(false);
   });
 
   it('should be possible to retrieve items matching the given prefix.', () => {
@@ -125,12 +125,12 @@ describe('Trie', () => {
     trie.add('cdn.example.com');
     trie.add('example.org');
 
-    expect(trie.find('example.com')).toStrictEqual(['example.com', 'cdn.example.com', 'blog.example.com']);
-    expect(trie.find('com')).toStrictEqual(['example.com', 'cdn.example.com', 'blog.example.com']);
-    expect(trie.find('.example.com')).toStrictEqual(['cdn.example.com', 'blog.example.com']);
-    expect(trie.find('org')).toStrictEqual(['example.org']);
-    expect(trie.find('example.net')).toStrictEqual([]);
-    expect(trie.dump()).toStrictEqual(['example.org', 'example.com', 'cdn.example.com', 'blog.example.com']);
+    expect(trie.find('example.com')).toEqual(['example.com', 'cdn.example.com', 'blog.example.com']);
+    expect(trie.find('com')).toEqual(['example.com', 'cdn.example.com', 'blog.example.com']);
+    expect(trie.find('.example.com')).toEqual(['cdn.example.com', 'blog.example.com']);
+    expect(trie.find('org')).toEqual(['example.org']);
+    expect(trie.find('example.net')).toEqual([]);
+    expect(trie.dump()).toEqual(['example.org', 'example.com', 'cdn.example.com', 'blog.example.com']);
   });
 
   it('should be possible to retrieve items matching the given prefix even with a smol trie', () => {
@@ -142,23 +142,23 @@ describe('Trie', () => {
     trie.add('cdn.example.com');
     trie.add('example.org');
 
-    expect(trie.find('example.com')).toStrictEqual(['.example.com']);
-    expect(trie.find('com')).toStrictEqual(['.example.com']);
-    expect(trie.find('.example.com')).toStrictEqual(['.example.com']);
-    expect(trie.find('org')).toStrictEqual(['example.org']);
-    expect(trie.find('example.net')).toStrictEqual([]);
-    expect(trie.dump()).toStrictEqual(['example.org', '.example.com']);
+    expect(trie.find('example.com')).toEqual(['.example.com']);
+    expect(trie.find('com')).toEqual(['.example.com']);
+    expect(trie.find('.example.com')).toEqual(['.example.com']);
+    expect(trie.find('org')).toEqual(['example.org']);
+    expect(trie.find('example.net')).toEqual([]);
+    expect(trie.dump()).toEqual(['example.org', '.example.com']);
   });
 
   it('should be possible to create a trie from an arbitrary iterable.', () => {
     let trie = createTrie(['skk.moe', 'blog.skk.moe'], false);
 
-    expect(trie.size).toBe(2);
-    expect(trie.has('skk.moe')).toBe(true);
+    expect(trie.size).toEqual(2);
+    expect(trie.has('skk.moe')).toEqual(true);
 
     trie = createTrie(new Set(['skk.moe', 'example.com']), false);
-    expect(trie.size).toBe(2);
-    expect(trie.has('skk.moe')).toBe(true);
+    expect(trie.size).toEqual(2);
+    expect(trie.has('skk.moe')).toEqual(true);
   });
 });
 
@@ -166,27 +166,27 @@ describe('surge domainset dedupe', () => {
   it('should not remove same entry', () => {
     const trie = createTrie(['.skk.moe', 'noc.one'], false);
 
-    expect(trie.find('.skk.moe')).toStrictEqual(['.skk.moe']);
-    expect(trie.find('noc.one')).toStrictEqual(['noc.one']);
+    expect(trie.find('.skk.moe')).toEqual(['.skk.moe']);
+    expect(trie.find('noc.one')).toEqual(['noc.one']);
   });
 
   it('should match subdomain - 1', () => {
     const trie = createTrie(['www.noc.one', 'www.sukkaw.com', 'blog.skk.moe', 'image.cdn.skk.moe', 'cdn.sukkaw.net'], false);
 
-    expect(trie.find('.skk.moe')).toStrictEqual(['image.cdn.skk.moe', 'blog.skk.moe']);
-    expect(trie.find('.sukkaw.com')).toStrictEqual(['www.sukkaw.com']);
+    expect(trie.find('.skk.moe')).toEqual(['image.cdn.skk.moe', 'blog.skk.moe']);
+    expect(trie.find('.sukkaw.com')).toEqual(['www.sukkaw.com']);
   });
 
   it('should match subdomain - 2', () => {
     const trie = createTrie(['www.noc.one', 'www.sukkaw.com', '.skk.moe', 'blog.skk.moe', 'image.cdn.skk.moe', 'cdn.sukkaw.net'], false);
 
-    expect(trie.find('.skk.moe')).toStrictEqual(['.skk.moe', 'image.cdn.skk.moe', 'blog.skk.moe']);
-    expect(trie.find('.sukkaw.com')).toStrictEqual(['www.sukkaw.com']);
+    expect(trie.find('.skk.moe')).toEqual(['.skk.moe', 'image.cdn.skk.moe', 'blog.skk.moe']);
+    expect(trie.find('.sukkaw.com')).toEqual(['www.sukkaw.com']);
   });
 
   it('should not remove non-subdomain', () => {
     const trie = createTrie(['skk.moe', 'sukkaskk.moe'], false);
-    expect(trie.find('.skk.moe')).toStrictEqual([]);
+    expect(trie.find('.skk.moe')).toEqual([]);
   });
 });
 
@@ -202,7 +202,7 @@ describe('smol tree', () => {
       'img.skk.local'
     ], true);
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'img.skk.local',
       'blog.img.skk.local',
       '.cdn.local',
@@ -220,7 +220,7 @@ describe('smol tree', () => {
       '.blog.sub.example.com', 'sub.example.com', 'cdn.sub.example.com', '.sub.example.com'
     ], true);
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       '.sub.example.com',
       'cdn.noc.one',
       'www.noc.one',
@@ -233,7 +233,7 @@ describe('smol tree', () => {
       '.skk.moe', 'blog.skk.moe', '.cdn.skk.moe', 'skk.moe'
     ], true);
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       '.skk.moe'
     ]);
   });
@@ -243,12 +243,12 @@ describe('smol tree', () => {
       '.blog.sub.example.com', 'cdn.sub.example.com', '.sub.example.com'
     ], true);
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       '.sub.example.com'
     ]);
 
     trie.add('.sub.example.com');
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       '.sub.example.com'
     ]);
   });
@@ -261,7 +261,7 @@ describe('smol tree', () => {
       'px.cdn.creative.medialytics.com'
     ], true);
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'cdn.creative.medialytics.com',
       'px.cdn.creative.medialytics.com',
       'commercial.shouji.360.cn',
@@ -277,7 +277,7 @@ describe('smol tree', () => {
       'blog.skk.moe'
     ], true);
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'anotherskk.moe',
       'blog.anotherskk.moe',
       'skk.moe',
@@ -298,7 +298,7 @@ describe('smol tree', () => {
 
     trie.whitelist('.skk.moe');
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'img.skk.local',
       'blog.img.skk.local',
       '.cdn.local',
@@ -307,7 +307,7 @@ describe('smol tree', () => {
     ]);
 
     trie.whitelist('anotherskk.moe');
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'img.skk.local',
       'blog.img.skk.local',
       '.cdn.local',
@@ -317,25 +317,25 @@ describe('smol tree', () => {
     trie.add('anotherskk.moe');
     trie.whitelist('.anotherskk.moe');
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'img.skk.local',
       'blog.img.skk.local',
       '.cdn.local'
     ]);
 
     trie.whitelist('img.skk.local');
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'blog.img.skk.local',
       '.cdn.local'
     ]);
 
     trie.whitelist('cdn.local');
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'blog.img.skk.local'
     ]);
 
     trie.whitelist('.skk.local');
-    expect(trie.dump()).toStrictEqual([]);
+    expect(trie.dump()).toEqual([]);
   });
 
   it('should whitelist trie correctly', () => {
@@ -348,22 +348,22 @@ describe('smol tree', () => {
       'cdn.example.com'
     ], true);
 
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'cdn.example.com', 'blog.cdn.example.com',
       '.skk.moe',
       '.t.co'
     ]);
 
     trie.whitelist('.t.co');
-    expect(trie.dump()).toStrictEqual([
+    expect(trie.dump()).toEqual([
       'cdn.example.com', 'blog.cdn.example.com', '.skk.moe'
     ]);
 
     trie.whitelist('skk.moe');
-    expect(trie.dump()).toStrictEqual(['cdn.example.com', 'blog.cdn.example.com']);
+    expect(trie.dump()).toEqual(['cdn.example.com', 'blog.cdn.example.com']);
 
     trie.whitelist('cdn.example.com');
-    expect(trie.dump()).toStrictEqual(['blog.cdn.example.com']);
+    expect(trie.dump()).toEqual(['blog.cdn.example.com']);
   });
 
   it('contains - normal', () => {
@@ -374,15 +374,15 @@ describe('smol tree', () => {
       'blog.skk.moe'
     ], true);
 
-    expect(trie.contains('skk.moe')).toBe(true);
-    expect(trie.contains('blog.skk.moe')).toBe(true);
-    expect(trie.contains('anotherskk.moe')).toBe(true);
-    expect(trie.contains('blog.anotherskk.moe')).toBe(true);
+    expect(trie.contains('skk.moe')).toEqual(true);
+    expect(trie.contains('blog.skk.moe')).toEqual(true);
+    expect(trie.contains('anotherskk.moe')).toEqual(true);
+    expect(trie.contains('blog.anotherskk.moe')).toEqual(true);
 
-    expect(trie.contains('example.com')).toBe(false);
-    expect(trie.contains('blog.example.com')).toBe(false);
-    expect(trie.contains('skk.mo')).toBe(false);
-    expect(trie.contains('cdn.skk.moe')).toBe(false);
+    expect(trie.contains('example.com')).toEqual(false);
+    expect(trie.contains('blog.example.com')).toEqual(false);
+    expect(trie.contains('skk.mo')).toEqual(false);
+    expect(trie.contains('cdn.skk.moe')).toEqual(false);
   });
 
   it('contains - subdomain', () => {
@@ -390,9 +390,9 @@ describe('smol tree', () => {
       'index.rubygems.org'
     ], true);
 
-    expect(trie.contains('rubygems.org')).toBe(false);
-    expect(trie.contains('index.rubygems.org')).toBe(true);
-    expect(trie.contains('sub.index.rubygems.org')).toBe(false);
+    expect(trie.contains('rubygems.org')).toEqual(false);
+    expect(trie.contains('index.rubygems.org')).toEqual(true);
+    expect(trie.contains('sub.index.rubygems.org')).toEqual(false);
   });
 
   it('contains - include subdomains', () => {
@@ -400,12 +400,12 @@ describe('smol tree', () => {
       '.skk.moe'
     ], true);
 
-    expect(trie.contains('skk.moe')).toBe(true);
-    expect(trie.contains('blog.skk.moe')).toBe(true);
-    expect(trie.contains('image.cdn.skk.moe')).toBe(true);
+    expect(trie.contains('skk.moe')).toEqual(true);
+    expect(trie.contains('blog.skk.moe')).toEqual(true);
+    expect(trie.contains('image.cdn.skk.moe')).toEqual(true);
 
-    expect(trie.contains('example.com')).toBe(false);
-    expect(trie.contains('blog.example.com')).toBe(false);
-    expect(trie.contains('skk.mo')).toBe(false);
+    expect(trie.contains('example.com')).toEqual(false);
+    expect(trie.contains('blog.example.com')).toEqual(false);
+    expect(trie.contains('skk.mo')).toEqual(false);
   });
 });

+ 1 - 1
package.json

@@ -59,10 +59,10 @@
     "@types/node": "^24.10.13",
     "@types/tar-fs": "^2.0.4",
     "@types/yauzl-promise": "^4.0.1",
+    "earl": "^2.0.0",
     "eslint": "^10.0.1",
     "eslint-config-sukka": "^8.6.4",
     "eslint-formatter-sukka": "^8.6.4",
-    "expect": "^30.2.0",
     "mitata": "^1.0.34",
     "mocha": "^11.7.5",
     "tinyexec": "^1.0.2",

+ 20 - 280
pnpm-lock.yaml

@@ -129,6 +129,9 @@ importers:
       '@types/yauzl-promise':
         specifier: ^4.0.1
         version: 4.0.1
+      earl:
+        specifier: ^2.0.0
+        version: 2.0.0
       eslint:
         specifier: ^10.0.1
         version: 10.0.1
@@ -138,9 +141,6 @@ importers:
       eslint-formatter-sukka:
         specifier: ^8.6.4
         version: 8.6.4(eslint@10.0.1)
-      expect:
-        specifier: ^30.2.0
-        version: 30.2.0
       mitata:
         specifier: ^1.0.34
         version: 1.0.34
@@ -159,14 +159,6 @@ packages:
   '@antfu/install-pkg@1.1.0':
     resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
 
-  '@babel/code-frame@7.27.1':
-    resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-validator-identifier@7.27.1':
-    resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
-    engines: {node: '>=6.9.0'}
-
   '@cryptography/aes@0.1.1':
     resolution: {integrity: sha512-PcYz4FDGblO6tM2kSC+VzhhK62vml6k6/YAkiWtyPvrgJVfnDRoHGDtKn5UiaRRUrvUTTocBpvc2rRgTCqxjsg==}
 
@@ -297,30 +289,6 @@ packages:
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
     engines: {node: '>=12'}
 
-  '@jest/diff-sequences@30.0.1':
-    resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  '@jest/expect-utils@30.2.0':
-    resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  '@jest/get-type@30.1.0':
-    resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  '@jest/pattern@30.0.1':
-    resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  '@jest/schemas@30.0.5':
-    resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  '@jest/types@30.2.0':
-    resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
   '@mitata/counters@0.0.8':
     resolution: {integrity: sha512-f11w0Y1ETFlarDP7CePj8Z+y8Gv5Ax4gMxWsEwrqh0kH/YIY030Ezx5SUJeQg0YPTZ2OHKGcLG1oGJbIqHzaJA==}
 
@@ -576,9 +544,6 @@ packages:
   '@remusao/trie@2.1.0':
     resolution: {integrity: sha512-Er3Q8q0/2OcCJPQYJOPLmCuqO0wu7cav3SPtpjlxSbjFi1x+A1pZkkLD6c9q2rGEkGW/tkrRzfrhNMt8VQjzXg==}
 
-  '@sinclair/typebox@0.34.40':
-    resolution: {integrity: sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==}
-
   '@swc-node/core@1.14.1':
     resolution: {integrity: sha512-jrt5GUaZUU6cmMS+WTJEvGvaB6j1YNKPHPzC2PUi2BjaFbtxURHj6641Az6xN7b665hNniAIdvjxWcRml5yCnw==}
     engines: {node: '>= 10'}
@@ -692,15 +657,6 @@ packages:
   '@types/estree@1.0.8':
     resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
 
-  '@types/istanbul-lib-coverage@2.0.6':
-    resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
-
-  '@types/istanbul-lib-report@3.0.3':
-    resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
-
-  '@types/istanbul-reports@3.0.4':
-    resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
-
   '@types/json-schema@7.0.15':
     resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
 
@@ -716,9 +672,6 @@ packages:
   '@types/node@24.10.13':
     resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==}
 
-  '@types/stack-utils@2.0.3':
-    resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
-
   '@types/tar-fs@2.0.4':
     resolution: {integrity: sha512-ipPec0CjTmVDWE+QKr9cTmIIoTl7dFG/yARCM5MqK8i6CNLIG1P8x4kwDsOQY1ChZOZjH0wO9nvfgBvWl4R3kA==}
 
@@ -728,12 +681,6 @@ packages:
   '@types/unist@3.0.3':
     resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
 
-  '@types/yargs-parser@21.0.3':
-    resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
-
-  '@types/yargs@17.0.33':
-    resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
-
   '@types/yauzl-promise@4.0.1':
     resolution: {integrity: sha512-qYEC3rJwqiJpdQ9b+bPNeuSY0c3JUM8vIuDy08qfuVN7xHm3ZDsHn2kGphUIB0ruEXrPGNXZ64nMUcu4fDjViQ==}
 
@@ -924,10 +871,6 @@ packages:
     resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
     engines: {node: '>=8'}
 
-  ansi-styles@5.2.0:
-    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
-    engines: {node: '>=10'}
-
   ansi-styles@6.2.1:
     resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
     engines: {node: '>=12'}
@@ -1008,10 +951,6 @@ packages:
     resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==}
     engines: {node: 18 || 20 || >=22}
 
-  braces@3.0.3:
-    resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
-    engines: {node: '>=8'}
-
   browser-stdout@1.3.1:
     resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
 
@@ -1183,6 +1122,9 @@ packages:
   domutils@2.8.0:
     resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
 
+  earl@2.0.0:
+    resolution: {integrity: sha512-je2x7VWHNN3kN5zqcUUeEEokHoL7HWwiOxCdlLi66LkMqUnLECVZGePdgBtrqLrUg25bHLFrM+bkBXwcI7f+EQ==}
+
   eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
 
@@ -1202,6 +1144,9 @@ packages:
   entities@2.2.0:
     resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
 
+  error-stack-parser@2.1.4:
+    resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
+
   es5-ext@0.10.64:
     resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==}
     engines: {node: '>=0.10'}
@@ -1217,10 +1162,6 @@ packages:
     resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
     engines: {node: '>=6'}
 
-  escape-string-regexp@2.0.0:
-    resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
-    engines: {node: '>=8'}
-
   escape-string-regexp@4.0.0:
     resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
     engines: {node: '>=10'}
@@ -1398,10 +1339,6 @@ packages:
     resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
     engines: {node: '>=6'}
 
-  expect@30.2.0:
-    resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
   ext@1.7.0:
     resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
 
@@ -1449,10 +1386,6 @@ packages:
   file-uri-to-path@1.0.0:
     resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
 
-  fill-range@7.1.1:
-    resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
-    engines: {node: '>=8'}
-
   find-up@5.0.0:
     resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
     engines: {node: '>=10'}
@@ -1592,10 +1525,6 @@ packages:
     resolution: {integrity: sha512-AX2uU0HW+TxagTgQXOJY7+2fbFHemC7YFBwN1XqD8qQMKdtfbOC8OC3fUb4s5NU59a3662Dzwto8tWDdZYRXxg==}
     engines: {node: '>=12'}
 
-  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'}
@@ -1623,33 +1552,6 @@ packages:
   jackspeak@3.4.3:
     resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
 
-  jest-diff@30.2.0:
-    resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  jest-matcher-utils@30.2.0:
-    resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  jest-message-util@30.2.0:
-    resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  jest-mock@30.2.0:
-    resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  jest-regex-util@30.0.1:
-    resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  jest-util@30.2.0:
-    resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
-  js-tokens@4.0.0:
-    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
   js-yaml@4.1.0:
     resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
     hasBin: true
@@ -1821,10 +1723,6 @@ packages:
   micromark@4.0.2:
     resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
 
-  micromatch@4.0.8:
-    resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
-    engines: {node: '>=8.6'}
-
   mime@3.0.0:
     resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
     engines: {node: '>=10.0.0'}
@@ -1944,10 +1842,6 @@ packages:
   picocolors@1.1.1:
     resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
 
-  picomatch@2.3.1:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-    engines: {node: '>=8.6'}
-
   picomatch@4.0.3:
     resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
     engines: {node: '>=12'}
@@ -1966,10 +1860,6 @@ packages:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
     engines: {node: '>= 0.8.0'}
 
-  pretty-format@30.2.0:
-    resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==}
-    engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
   promise-make-naked@3.0.2:
     resolution: {integrity: sha512-B+b+kQ1YrYS7zO7P7bQcoqqMUizP06BOyNSBEnB5VJKDSWo8fsVuDkfSmwdjF0JsRtaNh83so5MMFJ95soH5jg==}
 
@@ -1987,9 +1877,6 @@ packages:
     resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
     hasBin: true
 
-  react-is@18.3.1:
-    resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
-
   readable-stream@3.6.2:
     resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
     engines: {node: '>= 6'}
@@ -2055,10 +1942,6 @@ packages:
     resolution: {integrity: sha512-1sbhsxqI+I2tqlmjbz99GXNmZtr6tKIyEgGGnJw/MKGblalqk/XoOYYFJlBzTKZCxx8kLaD3FD5s9BEEjx5Pyg==}
     engines: {node: '>=10'}
 
-  slash@3.0.0:
-    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-    engines: {node: '>=8'}
-
   slide@1.1.6:
     resolution: {integrity: sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==}
 
@@ -2081,9 +1964,8 @@ packages:
     resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
     engines: {node: '>=12.0.0'}
 
-  stack-utils@2.0.6:
-    resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
-    engines: {node: '>=10'}
+  stackframe@1.3.4:
+    resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
 
   store2@2.14.4:
     resolution: {integrity: sha512-srTItn1GOvyvOycgxjAnPA63FZNwy0PTyUBFMHRM+hVFltAeoh0LmNBz9SZqUS9mMqGk8rfyWyXn3GH5ReJ8Zw==}
@@ -2175,10 +2057,6 @@ packages:
     resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==}
     hasBin: true
 
-  to-regex-range@5.0.1:
-    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
-    engines: {node: '>=8.0'}
-
   ts-api-utils@2.4.0:
     resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==}
     engines: {node: '>=18.12'}
@@ -2347,14 +2225,6 @@ snapshots:
       package-manager-detector: 1.5.0
       tinyexec: 1.0.2
 
-  '@babel/code-frame@7.27.1':
-    dependencies:
-      '@babel/helper-validator-identifier': 7.27.1
-      js-tokens: 4.0.0
-      picocolors: 1.1.1
-
-  '@babel/helper-validator-identifier@7.27.1': {}
-
   '@cryptography/aes@0.1.1': {}
 
   '@emnapi/core@1.7.1':
@@ -2514,33 +2384,6 @@ snapshots:
       wrap-ansi: 8.1.0
       wrap-ansi-cjs: wrap-ansi@7.0.0
 
-  '@jest/diff-sequences@30.0.1': {}
-
-  '@jest/expect-utils@30.2.0':
-    dependencies:
-      '@jest/get-type': 30.1.0
-
-  '@jest/get-type@30.1.0': {}
-
-  '@jest/pattern@30.0.1':
-    dependencies:
-      '@types/node': 24.10.13
-      jest-regex-util: 30.0.1
-
-  '@jest/schemas@30.0.5':
-    dependencies:
-      '@sinclair/typebox': 0.34.40
-
-  '@jest/types@30.2.0':
-    dependencies:
-      '@jest/pattern': 30.0.1
-      '@jest/schemas': 30.0.5
-      '@types/istanbul-lib-coverage': 2.0.6
-      '@types/istanbul-reports': 3.0.4
-      '@types/node': 24.10.13
-      '@types/yargs': 17.0.33
-      chalk: 4.1.2
-
   '@mitata/counters@0.0.8': {}
 
   '@napi-rs/wasm-runtime@0.2.12':
@@ -2717,8 +2560,6 @@ snapshots:
 
   '@remusao/trie@2.1.0': {}
 
-  '@sinclair/typebox@0.34.40': {}
-
   '@swc-node/core@1.14.1(@swc/core@1.13.5)(@swc/types@0.1.25)':
     dependencies:
       '@swc/core': 1.13.5
@@ -2817,16 +2658,6 @@ snapshots:
 
   '@types/estree@1.0.8': {}
 
-  '@types/istanbul-lib-coverage@2.0.6': {}
-
-  '@types/istanbul-lib-report@3.0.3':
-    dependencies:
-      '@types/istanbul-lib-coverage': 2.0.6
-
-  '@types/istanbul-reports@3.0.4':
-    dependencies:
-      '@types/istanbul-lib-report': 3.0.3
-
   '@types/json-schema@7.0.15': {}
 
   '@types/mdast@4.0.4':
@@ -2841,8 +2672,6 @@ snapshots:
     dependencies:
       undici-types: 7.16.0
 
-  '@types/stack-utils@2.0.3': {}
-
   '@types/tar-fs@2.0.4':
     dependencies:
       '@types/node': 24.10.13
@@ -2854,12 +2683,6 @@ snapshots:
 
   '@types/unist@3.0.3': {}
 
-  '@types/yargs-parser@21.0.3': {}
-
-  '@types/yargs@17.0.33':
-    dependencies:
-      '@types/yargs-parser': 21.0.3
-
   '@types/yauzl-promise@4.0.1':
     dependencies:
       '@types/node': 24.10.13
@@ -3035,8 +2858,6 @@ snapshots:
     dependencies:
       color-convert: 2.0.1
 
-  ansi-styles@5.2.0: {}
-
   ansi-styles@6.2.1: {}
 
   argparse@2.0.1: {}
@@ -3110,10 +2931,6 @@ snapshots:
     dependencies:
       balanced-match: 4.0.4
 
-  braces@3.0.3:
-    dependencies:
-      fill-range: 7.1.1
-
   browser-stdout@1.3.1: {}
 
   buffer-from@1.1.2: {}
@@ -3265,6 +3082,10 @@ snapshots:
       domelementtype: 2.3.0
       domhandler: 4.3.1
 
+  earl@2.0.0:
+    dependencies:
+      error-stack-parser: 2.1.4
+
   eastasianwidth@0.2.0: {}
 
   emoji-regex@8.0.0: {}
@@ -3282,6 +3103,10 @@ snapshots:
 
   entities@2.2.0: {}
 
+  error-stack-parser@2.1.4:
+    dependencies:
+      stackframe: 1.3.4
+
   es5-ext@0.10.64:
     dependencies:
       es6-iterator: 2.0.3
@@ -3302,8 +3127,6 @@ snapshots:
 
   escalade@3.2.0: {}
 
-  escape-string-regexp@2.0.0: {}
-
   escape-string-regexp@4.0.0: {}
 
   escape-string-regexp@5.0.0: {}
@@ -3564,15 +3387,6 @@ snapshots:
 
   expand-template@2.0.3: {}
 
-  expect@30.2.0:
-    dependencies:
-      '@jest/expect-utils': 30.2.0
-      '@jest/get-type': 30.1.0
-      jest-matcher-utils: 30.2.0
-      jest-message-util: 30.2.0
-      jest-mock: 30.2.0
-      jest-util: 30.2.0
-
   ext@1.7.0:
     dependencies:
       type: 2.7.3
@@ -3609,10 +3423,6 @@ snapshots:
 
   file-uri-to-path@1.0.0: {}
 
-  fill-range@7.1.1:
-    dependencies:
-      to-regex-range: 5.0.1
-
   find-up@5.0.0:
     dependencies:
       locate-path: 6.0.0
@@ -3735,8 +3545,6 @@ snapshots:
     dependencies:
       globalthis: '@nolyfill/globalthis@1.0.44'
 
-  is-number@7.0.0: {}
-
   is-path-inside@3.0.3: {}
 
   is-plain-obj@2.1.0: {}
@@ -3759,51 +3567,6 @@ snapshots:
     optionalDependencies:
       '@pkgjs/parseargs': 0.11.0
 
-  jest-diff@30.2.0:
-    dependencies:
-      '@jest/diff-sequences': 30.0.1
-      '@jest/get-type': 30.1.0
-      chalk: 4.1.2
-      pretty-format: 30.2.0
-
-  jest-matcher-utils@30.2.0:
-    dependencies:
-      '@jest/get-type': 30.1.0
-      chalk: 4.1.2
-      jest-diff: 30.2.0
-      pretty-format: 30.2.0
-
-  jest-message-util@30.2.0:
-    dependencies:
-      '@babel/code-frame': 7.27.1
-      '@jest/types': 30.2.0
-      '@types/stack-utils': 2.0.3
-      chalk: 4.1.2
-      graceful-fs: 4.2.11
-      micromatch: 4.0.8
-      pretty-format: 30.2.0
-      slash: 3.0.0
-      stack-utils: 2.0.6
-
-  jest-mock@30.2.0:
-    dependencies:
-      '@jest/types': 30.2.0
-      '@types/node': 24.10.13
-      jest-util: 30.2.0
-
-  jest-regex-util@30.0.1: {}
-
-  jest-util@30.2.0:
-    dependencies:
-      '@jest/types': 30.2.0
-      '@types/node': 24.10.13
-      chalk: 4.1.2
-      ci-info: 4.4.0
-      graceful-fs: 4.2.11
-      picomatch: 4.0.3
-
-  js-tokens@4.0.0: {}
-
   js-yaml@4.1.0:
     dependencies:
       argparse: 2.0.1
@@ -4159,11 +3922,6 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  micromatch@4.0.8:
-    dependencies:
-      braces: 3.0.3
-      picomatch: 2.3.1
-
   mime@3.0.0: {}
 
   mimic-response@3.1.0: {}
@@ -4298,8 +4056,6 @@ snapshots:
 
   picocolors@1.1.1: {}
 
-  picomatch@2.3.1: {}
-
   picomatch@4.0.3: {}
 
   pirates@4.0.7: {}
@@ -4321,12 +4077,6 @@ snapshots:
 
   prelude-ls@1.2.1: {}
 
-  pretty-format@30.2.0:
-    dependencies:
-      '@jest/schemas': 30.0.5
-      ansi-styles: 5.2.0
-      react-is: 18.3.1
-
   promise-make-naked@3.0.2: {}
 
   pump@3.0.3:
@@ -4347,8 +4097,6 @@ snapshots:
       minimist: 1.2.8
       strip-json-comments: 2.0.1
 
-  react-is@18.3.1: {}
-
   readable-stream@3.6.2:
     dependencies:
       inherits: 2.0.4
@@ -4409,8 +4157,6 @@ snapshots:
 
   simple-invariant@2.0.1: {}
 
-  slash@3.0.0: {}
-
   slide@1.1.6: {}
 
   smart-buffer@4.2.0: {}
@@ -4429,9 +4175,7 @@ snapshots:
 
   stable-hash-x@0.2.0: {}
 
-  stack-utils@2.0.6:
-    dependencies:
-      escape-string-regexp: 2.0.0
+  stackframe@1.3.4: {}
 
   store2@2.14.4: {}
 
@@ -4561,10 +4305,6 @@ snapshots:
     dependencies:
       tldts-core: 7.0.23
 
-  to-regex-range@5.0.1:
-    dependencies:
-      is-number: 7.0.0
-
   ts-api-utils@2.4.0(typescript@5.9.3):
     dependencies:
       typescript: 5.9.3