Housekeeping

This commit is contained in:
SukkaW
2024-10-17 16:28:57 +08:00
parent e18f57f568
commit 5aee1b6870
6 changed files with 382 additions and 169 deletions

View File

@@ -1,17 +1,17 @@
import { describe, it } from 'mocha'; import { describe, it } from 'mocha';
import { expect } from 'chai'; import { expect } from 'expect';
import createKeywordFilter from './aho-corasick'; import createKeywordFilter from './aho-corasick';
describe('AhoCorasick', () => { describe('AhoCorasick', () => {
it('basic', () => { it('basic', () => {
let kwfilter = createKeywordFilter(['ap', 'an']); let kwfilter = createKeywordFilter(['ap', 'an']);
expect(kwfilter('bananan')).to.equal(true); expect(kwfilter('bananan')).toBe(true);
expect(kwfilter('apple')).to.equal(true); expect(kwfilter('apple')).toBe(true);
expect(kwfilter('melon')).to.equal(false); expect(kwfilter('melon')).toBe(false);
kwfilter = createKeywordFilter(['cdn', 'sukka']); kwfilter = createKeywordFilter(['cdn', 'sukka']);
expect(kwfilter('bananan')).to.equal(false); expect(kwfilter('bananan')).toBe(false);
expect(kwfilter('apple')).to.equal(false); expect(kwfilter('apple')).toBe(false);
expect(kwfilter('melon')).to.equal(false); expect(kwfilter('melon')).toBe(false);
}); });
}); });

View File

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

View File

@@ -1,5 +1,5 @@
import { describe, it } from 'mocha'; import { describe, it } from 'mocha';
import { expect } from 'chai'; import { expect } from 'expect';
import { sortDomains } from './stable-sort-domain'; import { sortDomains } from './stable-sort-domain';
describe('sortDomains', () => { describe('sortDomains', () => {
@@ -8,7 +8,7 @@ describe('sortDomains', () => {
'.s3-website.ap-northeast-3.amazonaws.com', '.s3-website.ap-northeast-3.amazonaws.com',
'.s3.dualstack.ap-south-1.amazonaws.com', '.s3.dualstack.ap-south-1.amazonaws.com',
'.s3-website.af-south-1.amazonaws.com' '.s3-website.af-south-1.amazonaws.com'
])).to.deep.equal([ ])).toStrictEqual([
'.s3-website.af-south-1.amazonaws.com', '.s3-website.af-south-1.amazonaws.com',
'.s3.dualstack.ap-south-1.amazonaws.com', '.s3.dualstack.ap-south-1.amazonaws.com',
'.s3-website.ap-northeast-3.amazonaws.com' '.s3-website.ap-northeast-3.amazonaws.com'
@@ -18,7 +18,7 @@ describe('sortDomains', () => {
'.s3.dualstack.ap-south-1.amazonaws.com', '.s3.dualstack.ap-south-1.amazonaws.com',
'.s3-website.ap-northeast-3.amazonaws.com', '.s3-website.ap-northeast-3.amazonaws.com',
'.s3-website.af-south-1.amazonaws.com' '.s3-website.af-south-1.amazonaws.com'
])).to.deep.equal([ ])).toStrictEqual([
'.s3-website.af-south-1.amazonaws.com', '.s3-website.af-south-1.amazonaws.com',
'.s3.dualstack.ap-south-1.amazonaws.com', '.s3.dualstack.ap-south-1.amazonaws.com',
'.s3-website.ap-northeast-3.amazonaws.com' '.s3-website.ap-northeast-3.amazonaws.com'
@@ -27,7 +27,7 @@ describe('sortDomains', () => {
expect(sortDomains([ expect(sortDomains([
'.s3-website-us-west-2.amazonaws.com', '.s3-website-us-west-2.amazonaws.com',
'.s3-1.amazonaws.com' '.s3-1.amazonaws.com'
])).to.deep.equal([ ])).toStrictEqual([
'.s3-1.amazonaws.com', '.s3-1.amazonaws.com',
'.s3-website-us-west-2.amazonaws.com' '.s3-website-us-west-2.amazonaws.com'
]); ]);
@@ -35,7 +35,7 @@ describe('sortDomains', () => {
expect(sortDomains([ expect(sortDomains([
'.s3-1.amazonaws.com', '.s3-1.amazonaws.com',
'.s3-website-us-west-2.amazonaws.com' '.s3-website-us-west-2.amazonaws.com'
])).to.deep.equal([ ])).toStrictEqual([
'.s3-1.amazonaws.com', '.s3-1.amazonaws.com',
'.s3-website-us-west-2.amazonaws.com' '.s3-website-us-west-2.amazonaws.com'
]); ]);
@@ -46,7 +46,7 @@ describe('sortDomains', () => {
'.s3-accesspoint.dualstack.us-west-2.amazonaws.com', '.s3-accesspoint.dualstack.us-west-2.amazonaws.com',
'.s3.dualstack.us-west-2.amazonaws.com' '.s3.dualstack.us-west-2.amazonaws.com'
]) ])
).to.deep.equal([ ).toStrictEqual([
'.s3.dualstack.us-west-2.amazonaws.com', '.s3.dualstack.us-west-2.amazonaws.com',
'.s3-deprecated.us-west-2.amazonaws.com', '.s3-deprecated.us-west-2.amazonaws.com',
'.s3-accesspoint.dualstack.us-west-2.amazonaws.com' '.s3-accesspoint.dualstack.us-west-2.amazonaws.com'
@@ -58,7 +58,7 @@ describe('sortDomains', () => {
'.s3-accesspoint.dualstack.us-west-2.amazonaws.com', '.s3-accesspoint.dualstack.us-west-2.amazonaws.com',
'.s3.dualstack.us-west-2.amazonaws.com' '.s3.dualstack.us-west-2.amazonaws.com'
]) ])
).to.deep.equal([ ).toStrictEqual([
'.s3.dualstack.us-west-2.amazonaws.com', '.s3.dualstack.us-west-2.amazonaws.com',
'.s3-deprecated.us-west-2.amazonaws.com', '.s3-deprecated.us-west-2.amazonaws.com',
'.s3-accesspoint.dualstack.us-west-2.amazonaws.com' '.s3-accesspoint.dualstack.us-west-2.amazonaws.com'
@@ -69,7 +69,7 @@ describe('sortDomains', () => {
'.ec2-25-58-215-234.us-east-2.compute.amazonaws.com', '.ec2-25-58-215-234.us-east-2.compute.amazonaws.com',
'.ec2-13-58-215-234.us-east-2.compute.amazonaws.com' '.ec2-13-58-215-234.us-east-2.compute.amazonaws.com'
]) ])
).to.deep.equal([ ).toStrictEqual([
'.ec2-13-58-215-234.us-east-2.compute.amazonaws.com', '.ec2-13-58-215-234.us-east-2.compute.amazonaws.com',
'.ec2-25-58-215-234.us-east-2.compute.amazonaws.com' '.ec2-25-58-215-234.us-east-2.compute.amazonaws.com'
]); ]);
@@ -80,7 +80,7 @@ describe('sortDomains', () => {
'.notice.samsungcloudsolution.com', '.notice.samsungcloudsolution.com',
'samsungqbe.com', 'samsungqbe.com',
'samsungcloudsolution.com' 'samsungcloudsolution.com'
])).to.deep.equal([ ])).toStrictEqual([
'samsungqbe.com', 'samsungqbe.com',
'samsungcloudsolution.com', 'samsungcloudsolution.com',
'.notice.samsungcloudsolution.com' '.notice.samsungcloudsolution.com'
@@ -117,7 +117,7 @@ describe('sortDomains', () => {
'.rwww.samsungotn.net', '.rwww.samsungotn.net',
'.samsungpoland.com.pl' '.samsungpoland.com.pl'
]) ])
).to.deep.equal([ ).toStrictEqual([
'.gld.samsungosp.com', '.gld.samsungosp.com',
'.rwww.samsungotn.net', '.rwww.samsungotn.net',
'samsungqbe.com', 'samsungqbe.com',

View File

@@ -1,10 +1,10 @@
import { createTrie } from './trie'; import { createTrie } from './trie';
import { describe, it } from 'mocha'; import { describe, it } from 'mocha';
import { expect } from 'chai'; import { expect } from 'expect';
// describe('hostname to tokens', () => { // describe('hostname to tokens', () => {
// it('should split hostname into tokens.', () => { // it('should split hostname into tokens.', () => {
// expect(hostnameToTokens('.blog.skk.moe')).to.deep.equal([ // expect(hostnameToTokens('.blog.skk.moe')).toStrictEqual([
// '.', // '.',
// 'blog', // 'blog',
// '.', // '.',
@@ -13,7 +13,7 @@ import { expect } from 'chai';
// 'moe' // 'moe'
// ]); // ]);
// expect(hostnameToTokens('blog.skk.moe')).to.deep.equal([ // expect(hostnameToTokens('blog.skk.moe')).toStrictEqual([
// 'blog', // 'blog',
// '.', // '.',
// 'skk', // 'skk',
@@ -21,13 +21,13 @@ import { expect } from 'chai';
// 'moe' // 'moe'
// ]); // ]);
// expect(hostnameToTokens('skk.moe')).to.deep.equal([ // expect(hostnameToTokens('skk.moe')).toStrictEqual([
// 'skk', // 'skk',
// '.', // '.',
// 'moe' // 'moe'
// ]); // ]);
// expect(hostnameToTokens('moe')).to.deep.equal([ // expect(hostnameToTokens('moe')).toStrictEqual([
// 'moe' // 'moe'
// ]); // ]);
// }); // });
@@ -41,14 +41,14 @@ describe('Trie', () => {
trie.add('skk.moe'); trie.add('skk.moe');
trie.add('anotherskk.moe'); trie.add('anotherskk.moe');
expect(trie.size).to.equal(3); expect(trie.size).toBe(3);
expect(trie.has('a.skk.moe'), 'a.skk.moe').to.equal(true); expect(trie.has('a.skk.moe')).toBe(true);
expect(trie.has('skk.moe'), 'skk.moe').to.equal(true); expect(trie.has('skk.moe')).toBe(true);
expect(trie.has('anotherskk.moe'), 'anotherskk.moe').to.equal(true); expect(trie.has('anotherskk.moe')).toBe(true);
expect(trie.has('example.com'), 'example.com').to.equal(false); expect(trie.has('example.com')).toBe(false);
expect(trie.has('skk.mo'), 'skk.mo').to.equal(false); expect(trie.has('skk.mo')).toBe(false);
expect(trie.has('another.skk.moe'), 'another.skk.moe').to.equal(false); expect(trie.has('another.skk.moe')).toBe(false);
}); });
it('adding the same item several times should not increase size.', () => { it('adding the same item several times should not increase size.', () => {
@@ -59,19 +59,19 @@ describe('Trie', () => {
// eslint-disable-next-line sukka/no-element-overwrite -- deliberately do testing // eslint-disable-next-line sukka/no-element-overwrite -- deliberately do testing
trie.add('skk.moe'); trie.add('skk.moe');
expect(trie.size).to.equal(2); expect(trie.size).toBe(2);
expect(trie.has('skk.moe')).to.equal(true); expect(trie.has('skk.moe')).toBe(true);
}); });
it('should be possible to set the null sequence.', () => { it('should be possible to set the null sequence.', () => {
const trie = createTrie(null, false); const trie = createTrie(null, false);
trie.add(''); trie.add('');
expect(trie.has('')).to.equal(true); expect(trie.has('')).toBe(true);
const trie2 = createTrie(null, true); const trie2 = createTrie(null, true);
trie2.add(''); trie2.add('');
expect(trie2.has('')).to.equal(true); expect(trie2.has('')).toBe(true);
}); });
it('should be possible to delete items.', () => { it('should be possible to delete items.', () => {
@@ -82,20 +82,20 @@ describe('Trie', () => {
trie.add('example.com'); trie.add('example.com');
trie.add('moe.sb'); trie.add('moe.sb');
expect(trie.delete('')).to.equal(false); expect(trie.delete('')).toBe(false);
expect(trie.delete('')).to.equal(false); expect(trie.delete('')).toBe(false);
expect(trie.delete('example.org')).to.equal(false); expect(trie.delete('example.org')).toBe(false);
expect(trie.delete('skk.moe')).to.equal(true); expect(trie.delete('skk.moe')).toBe(true);
expect(trie.has('skk.moe')).to.equal(false); expect(trie.has('skk.moe')).toBe(false);
expect(trie.has('moe.sb')).to.equal(true); expect(trie.has('moe.sb')).toBe(true);
expect(trie.size).to.equal(3); expect(trie.size).toBe(3);
expect(trie.delete('example.com')).to.equal(true); expect(trie.delete('example.com')).toBe(true);
expect(trie.size).to.equal(2); expect(trie.size).toBe(2);
expect(trie.delete('moe.sb')).to.equal(true); expect(trie.delete('moe.sb')).toBe(true);
expect(trie.size).to.equal(1); expect(trie.size).toBe(1);
}); });
it('should be possible to check the existence of a sequence in the Trie.', () => { it('should be possible to check the existence of a sequence in the Trie.', () => {
@@ -103,10 +103,10 @@ describe('Trie', () => {
trie.add('example.org.skk.moe'); trie.add('example.org.skk.moe');
expect(trie.has('example.org.skk.moe')).to.equal(true); expect(trie.has('example.org.skk.moe')).toBe(true);
expect(trie.has('skk.moe')).to.equal(false); expect(trie.has('skk.moe')).toBe(false);
expect(trie.has('example.org')).to.equal(false); expect(trie.has('example.org')).toBe(false);
expect(trie.has('')).to.equal(false); expect(trie.has('')).toBe(false);
}); });
it('should be possible to retrieve items matching the given prefix.', () => { it('should be possible to retrieve items matching the given prefix.', () => {
@@ -117,12 +117,12 @@ describe('Trie', () => {
trie.add('cdn.example.com'); trie.add('cdn.example.com');
trie.add('example.org'); trie.add('example.org');
expect(trie.find('example.com'), 'example.com').to.deep.equal(['example.com', 'cdn.example.com', 'blog.example.com']); expect(trie.find('example.com')).toStrictEqual(['example.com', 'cdn.example.com', 'blog.example.com']);
expect(trie.find('com'), 'com').to.deep.equal(['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'), '.example.com').to.deep.equal(['cdn.example.com', 'blog.example.com']); expect(trie.find('.example.com')).toStrictEqual(['cdn.example.com', 'blog.example.com']);
expect(trie.find('org'), 'prg').to.deep.equal(['example.org']); expect(trie.find('org')).toStrictEqual(['example.org']);
expect(trie.find('example.net'), 'example.net').to.deep.equal([]); expect(trie.find('example.net')).toStrictEqual([]);
expect(trie.find(''), '').to.deep.equal(['example.org', 'example.com', 'cdn.example.com', 'blog.example.com']); expect(trie.find('')).toStrictEqual(['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', () => { it('should be possible to retrieve items matching the given prefix even with a smol trie', () => {
@@ -134,23 +134,23 @@ describe('Trie', () => {
trie.add('cdn.example.com'); trie.add('cdn.example.com');
trie.add('example.org'); trie.add('example.org');
expect(trie.find('example.com')).to.deep.equal(['.example.com']); expect(trie.find('example.com')).toStrictEqual(['.example.com']);
expect(trie.find('com')).to.deep.equal(['.example.com']); expect(trie.find('com')).toStrictEqual(['.example.com']);
expect(trie.find('.example.com')).to.deep.equal(['.example.com']); expect(trie.find('.example.com')).toStrictEqual(['.example.com']);
expect(trie.find('org')).to.deep.equal(['example.org']); expect(trie.find('org')).toStrictEqual(['example.org']);
expect(trie.find('example.net')).to.deep.equal([]); expect(trie.find('example.net')).toStrictEqual([]);
expect(trie.find('')).to.deep.equal(['example.org', '.example.com']); expect(trie.find('')).toStrictEqual(['example.org', '.example.com']);
}); });
it('should be possible to create a trie from an arbitrary iterable.', () => { it('should be possible to create a trie from an arbitrary iterable.', () => {
let trie = createTrie(['skk.moe', 'blog.skk.moe'], false); let trie = createTrie(['skk.moe', 'blog.skk.moe'], false);
expect(trie.size).to.equal(2); expect(trie.size).toBe(2);
expect(trie.has('skk.moe')).to.equal(true); expect(trie.has('skk.moe')).toBe(true);
trie = createTrie(new Set(['skk.moe', 'example.com']), false); trie = createTrie(new Set(['skk.moe', 'example.com']), false);
expect(trie.size).to.equal(2); expect(trie.size).toBe(2);
expect(trie.has('skk.moe')).to.equal(true); expect(trie.has('skk.moe')).toBe(true);
}); });
}); });
@@ -158,27 +158,27 @@ describe('surge domainset dedupe', () => {
it('should not remove same entry', () => { it('should not remove same entry', () => {
const trie = createTrie(['.skk.moe', 'noc.one'], false); const trie = createTrie(['.skk.moe', 'noc.one'], false);
expect(trie.find('.skk.moe')).to.deep.equal(['.skk.moe']); expect(trie.find('.skk.moe')).toStrictEqual(['.skk.moe']);
expect(trie.find('noc.one')).to.deep.equal(['noc.one']); expect(trie.find('noc.one')).toStrictEqual(['noc.one']);
}); });
it('should match subdomain - 1', () => { 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); 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')).to.deep.equal(['image.cdn.skk.moe', 'blog.skk.moe']); expect(trie.find('.skk.moe')).toStrictEqual(['image.cdn.skk.moe', 'blog.skk.moe']);
expect(trie.find('.sukkaw.com')).to.deep.equal(['www.sukkaw.com']); expect(trie.find('.sukkaw.com')).toStrictEqual(['www.sukkaw.com']);
}); });
it('should match subdomain - 2', () => { 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); 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')).to.deep.equal(['.skk.moe', 'image.cdn.skk.moe', 'blog.skk.moe']); expect(trie.find('.skk.moe')).toStrictEqual(['.skk.moe', 'image.cdn.skk.moe', 'blog.skk.moe']);
expect(trie.find('.sukkaw.com')).to.deep.equal(['www.sukkaw.com']); expect(trie.find('.sukkaw.com')).toStrictEqual(['www.sukkaw.com']);
}); });
it('should not remove non-subdomain', () => { it('should not remove non-subdomain', () => {
const trie = createTrie(['skk.moe', 'sukkaskk.moe'], false); const trie = createTrie(['skk.moe', 'sukkaskk.moe'], false);
expect(trie.find('.skk.moe')).to.deep.equal([]); expect(trie.find('.skk.moe')).toStrictEqual([]);
}); });
}); });
@@ -190,7 +190,7 @@ describe('smol tree', () => {
'.blog.sub.example.com', 'sub.example.com', 'cdn.sub.example.com', '.sub.example.com' '.blog.sub.example.com', 'sub.example.com', 'cdn.sub.example.com', '.sub.example.com'
], true); ], true);
expect(trie.dump()).to.deep.equal([ expect(trie.dump()).toStrictEqual([
'.sub.example.com', '.sub.example.com',
'cdn.noc.one', 'www.noc.one', 'cdn.noc.one', 'www.noc.one',
'.skk.moe' '.skk.moe'
@@ -202,7 +202,7 @@ describe('smol tree', () => {
'.skk.moe', 'blog.skk.moe', '.cdn.skk.moe', 'skk.moe' '.skk.moe', 'blog.skk.moe', '.cdn.skk.moe', 'skk.moe'
], true); ], true);
expect(trie.dump()).to.deep.equal([ expect(trie.dump()).toStrictEqual([
'.skk.moe' '.skk.moe'
]); ]);
}); });
@@ -212,12 +212,12 @@ describe('smol tree', () => {
'.blog.sub.example.com', 'cdn.sub.example.com', '.sub.example.com' '.blog.sub.example.com', 'cdn.sub.example.com', '.sub.example.com'
], true); ], true);
expect(trie.dump()).to.deep.equal([ expect(trie.dump()).toStrictEqual([
'.sub.example.com' '.sub.example.com'
]); ]);
trie.add('.sub.example.com'); trie.add('.sub.example.com');
expect(trie.dump()).to.deep.equal([ expect(trie.dump()).toStrictEqual([
'.sub.example.com' '.sub.example.com'
]); ]);
}); });
@@ -230,7 +230,7 @@ describe('smol tree', () => {
'px.cdn.creative.medialytics.com' 'px.cdn.creative.medialytics.com'
], true); ], true);
expect(trie.dump()).to.deep.equal([ expect(trie.dump()).toStrictEqual([
'cdn.creative.medialytics.com', 'cdn.creative.medialytics.com',
'px.cdn.creative.medialytics.com', 'px.cdn.creative.medialytics.com',
'commercial.shouji.360.cn', 'commercial.shouji.360.cn',
@@ -246,7 +246,7 @@ describe('smol tree', () => {
'blog.skk.moe' 'blog.skk.moe'
], true); ], true);
expect(trie.dump()).to.deep.equal([ expect(trie.dump()).toStrictEqual([
'anotherskk.moe', 'anotherskk.moe',
'blog.anotherskk.moe', 'blog.anotherskk.moe',
'skk.moe', 'skk.moe',
@@ -265,7 +265,7 @@ describe('smol tree', () => {
'img.skk.local' 'img.skk.local'
], true); ], true);
expect(trie.dump(), '1').to.deep.equal([ expect(trie.dump()).toStrictEqual([
'img.skk.local', 'img.skk.local',
'blog.img.skk.local', 'blog.img.skk.local',
'.cdn.local', '.cdn.local',
@@ -277,7 +277,7 @@ describe('smol tree', () => {
trie.whitelist('.skk.moe'); trie.whitelist('.skk.moe');
expect(trie.dump(), '2').to.deep.equal([ expect(trie.dump()).toStrictEqual([
'img.skk.local', 'img.skk.local',
'blog.img.skk.local', 'blog.img.skk.local',
'.cdn.local', '.cdn.local',
@@ -286,7 +286,7 @@ describe('smol tree', () => {
]); ]);
trie.whitelist('anotherskk.moe'); trie.whitelist('anotherskk.moe');
expect(trie.dump(), '3').to.deep.equal([ expect(trie.dump()).toStrictEqual([
'img.skk.local', 'img.skk.local',
'blog.img.skk.local', 'blog.img.skk.local',
'.cdn.local', '.cdn.local',
@@ -296,25 +296,25 @@ describe('smol tree', () => {
trie.add('anotherskk.moe'); trie.add('anotherskk.moe');
trie.whitelist('.anotherskk.moe'); trie.whitelist('.anotherskk.moe');
expect(trie.dump(), '4').to.deep.equal([ expect(trie.dump()).toStrictEqual([
'img.skk.local', 'img.skk.local',
'blog.img.skk.local', 'blog.img.skk.local',
'.cdn.local' '.cdn.local'
]); ]);
trie.whitelist('img.skk.local'); trie.whitelist('img.skk.local');
expect(trie.dump(), '5').to.deep.equal([ expect(trie.dump()).toStrictEqual([
'blog.img.skk.local', 'blog.img.skk.local',
'.cdn.local' '.cdn.local'
]); ]);
trie.whitelist('cdn.local'); trie.whitelist('cdn.local');
expect(trie.dump(), '6').to.deep.equal([ expect(trie.dump()).toStrictEqual([
'blog.img.skk.local' 'blog.img.skk.local'
]); ]);
trie.whitelist('.skk.local'); trie.whitelist('.skk.local');
expect(trie.dump(), '7').to.deep.equal([]); expect(trie.dump()).toStrictEqual([]);
}); });
it('should whitelist trie correctly', () => { it('should whitelist trie correctly', () => {
@@ -327,22 +327,22 @@ describe('smol tree', () => {
'cdn.example.com' 'cdn.example.com'
], true); ], true);
expect(trie.dump()).to.deep.equal([ expect(trie.dump()).toStrictEqual([
'cdn.example.com', 'blog.cdn.example.com', 'cdn.example.com', 'blog.cdn.example.com',
'.skk.moe', '.skk.moe',
'.t.co' '.t.co'
]); ]);
trie.whitelist('.t.co'); trie.whitelist('.t.co');
expect(trie.dump()).to.deep.equal([ expect(trie.dump()).toStrictEqual([
'cdn.example.com', 'blog.cdn.example.com', 'cdn.example.com', 'blog.cdn.example.com',
'.skk.moe' '.skk.moe'
]); ]);
trie.whitelist('skk.moe'); trie.whitelist('skk.moe');
expect(trie.dump()).to.deep.equal(['cdn.example.com', 'blog.cdn.example.com']); expect(trie.dump()).toStrictEqual(['cdn.example.com', 'blog.cdn.example.com']);
trie.whitelist('cdn.example.com'); trie.whitelist('cdn.example.com');
expect(trie.dump()).to.deep.equal(['blog.cdn.example.com']); expect(trie.dump()).toStrictEqual(['blog.cdn.example.com']);
}); });
}); });

View File

@@ -30,7 +30,7 @@
"cli-table3": "^0.6.5", "cli-table3": "^0.6.5",
"csv-parse": "^5.5.6", "csv-parse": "^5.5.6",
"fast-cidr-tools": "^0.3.1", "fast-cidr-tools": "^0.3.1",
"fdir": "^6.4.1", "fdir": "^6.4.2",
"foxact": "^0.2.39", "foxact": "^0.2.39",
"hash-wasm": "^4.11.0", "hash-wasm": "^4.11.0",
"json-stringify-pretty-compact": "^3.0.0", "json-stringify-pretty-compact": "^3.0.0",
@@ -51,23 +51,22 @@
"@swc/core": "^1.7.36", "@swc/core": "^1.7.36",
"@types/better-sqlite3": "^7.6.11", "@types/better-sqlite3": "^7.6.11",
"@types/cacache": "^17.0.2", "@types/cacache": "^17.0.2",
"@types/chai": "^4.3.20",
"@types/make-fetch-happen": "^10.0.4", "@types/make-fetch-happen": "^10.0.4",
"@types/mocha": "^10.0.9", "@types/mocha": "^10.0.9",
"@types/node": "^22.7.5", "@types/node": "^22.7.6",
"@types/node-fetch": "2", "@types/node-fetch": "2",
"@types/punycode": "^2.1.4", "@types/punycode": "^2.1.4",
"@types/tar-fs": "^2.0.4", "@types/tar-fs": "^2.0.4",
"@types/tar-stream": "^3.1.3", "@types/tar-stream": "^3.1.3",
"chai": "4",
"eslint": "^9.12.0", "eslint": "^9.12.0",
"eslint-config-sukka": "^6.7.0", "eslint-config-sukka": "^6.7.0",
"eslint-formatter-sukka": "^6.7.0", "eslint-formatter-sukka": "^6.7.0",
"expect": "^29.7.0",
"mitata": "^1.0.10", "mitata": "^1.0.10",
"mocha": "^10.7.3", "mocha": "^10.7.3",
"typescript": "^5.6.3" "typescript": "^5.6.3"
}, },
"packageManager": "pnpm@9.12.1", "packageManager": "pnpm@9.12.2",
"resolutions": { "resolutions": {
"has": "npm:@nolyfill/has@latest" "has": "npm:@nolyfill/has@latest"
}, },

362
pnpm-lock.yaml generated
View File

@@ -47,8 +47,8 @@ importers:
specifier: ^0.3.1 specifier: ^0.3.1
version: 0.3.1 version: 0.3.1
fdir: fdir:
specifier: ^6.4.1 specifier: ^6.4.2
version: 6.4.1(picomatch@4.0.2) version: 6.4.2(picomatch@4.0.2)
foxact: foxact:
specifier: ^0.2.39 specifier: ^0.2.39
version: 0.2.39 version: 0.2.39
@@ -104,9 +104,6 @@ importers:
'@types/cacache': '@types/cacache':
specifier: ^17.0.2 specifier: ^17.0.2
version: 17.0.2 version: 17.0.2
'@types/chai':
specifier: ^4.3.20
version: 4.3.20
'@types/make-fetch-happen': '@types/make-fetch-happen':
specifier: ^10.0.4 specifier: ^10.0.4
version: 10.0.4 version: 10.0.4
@@ -114,8 +111,8 @@ importers:
specifier: ^10.0.9 specifier: ^10.0.9
version: 10.0.9 version: 10.0.9
'@types/node': '@types/node':
specifier: ^22.7.5 specifier: ^22.7.6
version: 22.7.5 version: 22.7.6
'@types/node-fetch': '@types/node-fetch':
specifier: '2' specifier: '2'
version: 2.6.11 version: 2.6.11
@@ -128,9 +125,6 @@ importers:
'@types/tar-stream': '@types/tar-stream':
specifier: ^3.1.3 specifier: ^3.1.3
version: 3.1.3 version: 3.1.3
chai:
specifier: '4'
version: 4.4.1
eslint: eslint:
specifier: ^9.12.0 specifier: ^9.12.0
version: 9.12.0 version: 9.12.0
@@ -140,6 +134,9 @@ importers:
eslint-formatter-sukka: eslint-formatter-sukka:
specifier: ^6.7.0 specifier: ^6.7.0
version: 6.7.0 version: 6.7.0
expect:
specifier: ^29.7.0
version: 29.7.0
mitata: mitata:
specifier: ^1.0.10 specifier: ^1.0.10
version: 1.0.10 version: 1.0.10
@@ -155,6 +152,18 @@ packages:
'@antfu/utils@0.7.10': '@antfu/utils@0.7.10':
resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
'@babel/code-frame@7.25.7':
resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.25.7':
resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==}
engines: {node: '>=6.9.0'}
'@babel/highlight@7.25.7':
resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==}
engines: {node: '>=6.9.0'}
'@cliqz/adblocker-content@1.34.0': '@cliqz/adblocker-content@1.34.0':
resolution: {integrity: sha512-5LcV8UZv49RWwtpom9ve4TxJIFKd+bjT59tS/2Z2c22Qxx5CW1ncO/T+ybzk31z422XplQfd0ZE6gMGGKs3EMg==} resolution: {integrity: sha512-5LcV8UZv49RWwtpom9ve4TxJIFKd+bjT59tS/2Z2c22Qxx5CW1ncO/T+ybzk31z422XplQfd0ZE6gMGGKs3EMg==}
@@ -250,6 +259,18 @@ packages:
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@jest/expect-utils@29.7.0':
resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/schemas@29.6.3':
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/types@29.6.3':
resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jsdevtools/ez-spawn@3.0.4': '@jsdevtools/ez-spawn@3.0.4':
resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -357,6 +378,9 @@ packages:
'@remusao/trie@1.5.0': '@remusao/trie@1.5.0':
resolution: {integrity: sha512-UX+3utJKgwCsg6sUozjxd38gNMVRXrY4TNX9VvCdSrlZBS1nZjRPi98ON3QjRAdf6KCguJFyQARRsulTeqQiPg==} resolution: {integrity: sha512-UX+3utJKgwCsg6sUozjxd38gNMVRXrY4TNX9VvCdSrlZBS1nZjRPi98ON3QjRAdf6KCguJFyQARRsulTeqQiPg==}
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
'@stylistic/eslint-plugin-js@2.8.0': '@stylistic/eslint-plugin-js@2.8.0':
resolution: {integrity: sha512-/e7pSzVMrwBd6yzSDsKHwax3TS96+pd/xSKzELaTkOuYqUhYfj/becWdfDbFSBGQD7BBBCiiE4L8L2cUfu5h+A==} resolution: {integrity: sha512-/e7pSzVMrwBd6yzSDsKHwax3TS96+pd/xSKzELaTkOuYqUhYfj/becWdfDbFSBGQD7BBBCiiE4L8L2cUfu5h+A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -474,9 +498,6 @@ packages:
'@types/cacache@17.0.2': '@types/cacache@17.0.2':
resolution: {integrity: sha512-IrqHzVX2VRMDQQKa7CtKRnuoCLdRJiLW6hWU+w7i7+AaQ0Ii5bKwJxd5uRK4zBCyrHd3tG6G8zOm2LplxbSfQg==} resolution: {integrity: sha512-IrqHzVX2VRMDQQKa7CtKRnuoCLdRJiLW6hWU+w7i7+AaQ0Ii5bKwJxd5uRK4zBCyrHd3tG6G8zOm2LplxbSfQg==}
'@types/chai@4.3.20':
resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
'@types/chrome@0.0.278': '@types/chrome@0.0.278':
resolution: {integrity: sha512-PDIJodOu7o54PpSOYLybPW/MDZBCjM1TKgf31I3Q/qaEbNpIH09rOM3tSEH3N7Q+FAqb1933LhF8ksUPYeQLNg==} resolution: {integrity: sha512-PDIJodOu7o54PpSOYLybPW/MDZBCjM1TKgf31I3Q/qaEbNpIH09rOM3tSEH3N7Q+FAqb1933LhF8ksUPYeQLNg==}
@@ -498,6 +519,15 @@ packages:
'@types/har-format@1.2.16': '@types/har-format@1.2.16':
resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==}
'@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': '@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -510,8 +540,8 @@ packages:
'@types/node-fetch@2.6.11': '@types/node-fetch@2.6.11':
resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
'@types/node@22.7.5': '@types/node@22.7.6':
resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} resolution: {integrity: sha512-/d7Rnj0/ExXDMcioS78/kf1lMzYk4BZV8MZGTBKzTGZ6/406ukkbYlIsZmMPhcR5KlkunDHQLrtAVmSq7r+mSw==}
'@types/punycode@2.1.4': '@types/punycode@2.1.4':
resolution: {integrity: sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==} resolution: {integrity: sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==}
@@ -522,12 +552,21 @@ packages:
'@types/ssri@7.1.5': '@types/ssri@7.1.5':
resolution: {integrity: sha512-odD/56S3B51liILSk5aXJlnYt99S6Rt9EFDDqGtJM26rKHApHcwyU/UoYHrzKkdkHMAIquGWCuHtQTbes+FRQw==} resolution: {integrity: sha512-odD/56S3B51liILSk5aXJlnYt99S6Rt9EFDDqGtJM26rKHApHcwyU/UoYHrzKkdkHMAIquGWCuHtQTbes+FRQw==}
'@types/stack-utils@2.0.3':
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
'@types/tar-fs@2.0.4': '@types/tar-fs@2.0.4':
resolution: {integrity: sha512-ipPec0CjTmVDWE+QKr9cTmIIoTl7dFG/yARCM5MqK8i6CNLIG1P8x4kwDsOQY1ChZOZjH0wO9nvfgBvWl4R3kA==} resolution: {integrity: sha512-ipPec0CjTmVDWE+QKr9cTmIIoTl7dFG/yARCM5MqK8i6CNLIG1P8x4kwDsOQY1ChZOZjH0wO9nvfgBvWl4R3kA==}
'@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==}
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
'@types/yargs@17.0.33':
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
'@typescript-eslint/eslint-plugin@8.8.1': '@typescript-eslint/eslint-plugin@8.8.1':
resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -645,10 +684,18 @@ packages:
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
engines: {node: '>=12'} engines: {node: '>=12'}
ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
ansi-styles@4.3.0: ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'} engines: {node: '>=8'}
ansi-styles@5.2.0:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
ansi-styles@6.2.1: ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -660,9 +707,6 @@ packages:
argparse@2.0.1: argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
assertion-error@1.1.0:
resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
async-sema@3.1.1: async-sema@3.1.1:
resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==}
@@ -744,17 +788,14 @@ packages:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'} engines: {node: '>=10'}
chai@4.4.1: chalk@2.4.2:
resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'} engines: {node: '>=4'}
chalk@4.1.2: chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'} engines: {node: '>=10'}
check-error@1.0.3:
resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
chokidar@3.6.0: chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'} engines: {node: '>= 8.10.0'}
@@ -766,6 +807,10 @@ packages:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'} engines: {node: '>=18'}
ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
ci-info@4.0.0: ci-info@4.0.0:
resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -780,10 +825,16 @@ packages:
cliui@7.0.4: cliui@7.0.4:
resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
color-convert@2.0.1: color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'} engines: {node: '>=7.0.0'}
color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
color-name@1.1.4: color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
@@ -833,10 +884,6 @@ packages:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
deep-eql@4.1.4:
resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
engines: {node: '>=6'}
deep-extend@0.6.0: deep-extend@0.6.0:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'} engines: {node: '>=4.0.0'}
@@ -855,6 +902,10 @@ packages:
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
engines: {node: '>=8'} engines: {node: '>=8'}
diff-sequences@29.6.3:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
diff@5.2.0: diff@5.2.0:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'} engines: {node: '>=0.3.1'}
@@ -889,6 +940,14 @@ packages:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'} engines: {node: '>=6'}
escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
engines: {node: '>=8'}
escape-string-regexp@4.0.0: escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -1029,6 +1088,10 @@ packages:
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
engines: {node: '>=6'} engines: {node: '>=6'}
expect@29.7.0:
resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
fast-cidr-tools@0.3.1: fast-cidr-tools@0.3.1:
resolution: {integrity: sha512-CixbR87xxUYpoZBR6xyFmOkhoOnd8YtmSW956evigw+AOc20fXAn3FXGL5eFAPpGcrs7qzOOEjEPxVMnvRJ87Q==} resolution: {integrity: sha512-CixbR87xxUYpoZBR6xyFmOkhoOnd8YtmSW956evigw+AOc20fXAn3FXGL5eFAPpGcrs7qzOOEjEPxVMnvRJ87Q==}
engines: {node: '>=16'} engines: {node: '>=16'}
@@ -1052,8 +1115,8 @@ packages:
fastq@1.17.1: fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
fdir@6.4.1: fdir@6.4.2:
resolution: {integrity: sha512-upAYvbFc8GU44qWv+r6YnWp3h13/hPFOnpCsuahbxFGmOCm7sc5UT1SytkHLS7Go/UwvhVD9k4dF6PJxpIjqAA==} resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
peerDependencies: peerDependencies:
picomatch: ^3 || ^4 picomatch: ^3 || ^4
peerDependenciesMeta: peerDependenciesMeta:
@@ -1124,9 +1187,6 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*} engines: {node: 6.* || 8.* || >= 10.*}
get-func-name@2.0.2:
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
get-tsconfig@4.8.1: get-tsconfig@4.8.1:
resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
@@ -1164,6 +1224,10 @@ packages:
graphemer@1.4.0: graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
has-flag@4.0.0: has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -1261,6 +1325,29 @@ packages:
jackspeak@3.4.3: jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
jest-diff@29.7.0:
resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-get-type@29.6.3:
resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-matcher-utils@29.7.0:
resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-message-util@29.7.0:
resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-util@29.7.0:
resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@4.1.0: js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true hasBin: true
@@ -1306,9 +1393,6 @@ packages:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'} engines: {node: '>=10'}
loupe@2.3.7:
resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
lru-cache@10.4.3: lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -1469,9 +1553,6 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'} engines: {node: '>=16 || 14 >=14.18'}
pathval@1.1.1:
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
picocolors@1.1.1: picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -1496,6 +1577,10 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
pretty-format@29.7.0:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
proc-log@5.0.0: proc-log@5.0.0:
resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==}
engines: {node: ^18.17.0 || >=20.5.0} engines: {node: ^18.17.0 || >=20.5.0}
@@ -1524,6 +1609,9 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true hasBin: true
react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
readable-stream@3.6.2: readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@@ -1609,6 +1697,10 @@ packages:
simple-get@4.0.1: simple-get@4.0.1:
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
smart-buffer@4.2.0: smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -1638,6 +1730,10 @@ packages:
stable-hash@0.0.4: stable-hash@0.0.4:
resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==}
stack-utils@2.0.6:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
streamx@2.20.0: streamx@2.20.0:
resolution: {integrity: sha512-ZGd1LhDeGFucr1CUCTBOS58ZhEendd0ttpGT3usTvosS4ntIwKN9LJFp+OeCSprsCPL14BXVRZlHGRY1V9PVzQ==} resolution: {integrity: sha512-ZGd1LhDeGFucr1CUCTBOS58ZhEendd0ttpGT3usTvosS4ntIwKN9LJFp+OeCSprsCPL14BXVRZlHGRY1V9PVzQ==}
@@ -1676,6 +1772,10 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'} engines: {node: '>=8'}
supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
supports-color@7.2.0: supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -1852,6 +1952,20 @@ snapshots:
'@antfu/utils@0.7.10': {} '@antfu/utils@0.7.10': {}
'@babel/code-frame@7.25.7':
dependencies:
'@babel/highlight': 7.25.7
picocolors: 1.1.1
'@babel/helper-validator-identifier@7.25.7': {}
'@babel/highlight@7.25.7':
dependencies:
'@babel/helper-validator-identifier': 7.25.7
chalk: 2.4.2
js-tokens: 4.0.0
picocolors: 1.1.1
'@cliqz/adblocker-content@1.34.0': '@cliqz/adblocker-content@1.34.0':
dependencies: dependencies:
'@cliqz/adblocker-extended-selectors': 1.34.0 '@cliqz/adblocker-extended-selectors': 1.34.0
@@ -1980,6 +2094,23 @@ snapshots:
dependencies: dependencies:
minipass: 7.1.2 minipass: 7.1.2
'@jest/expect-utils@29.7.0':
dependencies:
jest-get-type: 29.6.3
'@jest/schemas@29.6.3':
dependencies:
'@sinclair/typebox': 0.27.8
'@jest/types@29.6.3':
dependencies:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
'@types/node': 22.7.6
'@types/yargs': 17.0.33
chalk: 4.1.2
'@jsdevtools/ez-spawn@3.0.4': '@jsdevtools/ez-spawn@3.0.4':
dependencies: dependencies:
call-me-maybe: 1.0.2 call-me-maybe: 1.0.2
@@ -2077,6 +2208,8 @@ snapshots:
'@remusao/trie@1.5.0': {} '@remusao/trie@1.5.0': {}
'@sinclair/typebox@0.27.8': {}
'@stylistic/eslint-plugin-js@2.8.0(eslint@9.12.0)': '@stylistic/eslint-plugin-js@2.8.0(eslint@9.12.0)':
dependencies: dependencies:
eslint: 9.12.0 eslint: 9.12.0
@@ -2181,13 +2314,11 @@ snapshots:
'@types/better-sqlite3@7.6.11': '@types/better-sqlite3@7.6.11':
dependencies: dependencies:
'@types/node': 22.7.5 '@types/node': 22.7.6
'@types/cacache@17.0.2': '@types/cacache@17.0.2':
dependencies: dependencies:
'@types/node': 22.7.5 '@types/node': 22.7.6
'@types/chai@4.3.20': {}
'@types/chrome@0.0.278': '@types/chrome@0.0.278':
dependencies: dependencies:
@@ -2211,6 +2342,16 @@ snapshots:
'@types/har-format@1.2.16': {} '@types/har-format@1.2.16': {}
'@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/json-schema@7.0.15': {}
'@types/make-fetch-happen@10.0.4': '@types/make-fetch-happen@10.0.4':
@@ -2223,10 +2364,10 @@ snapshots:
'@types/node-fetch@2.6.11': '@types/node-fetch@2.6.11':
dependencies: dependencies:
'@types/node': 22.7.5 '@types/node': 22.7.6
form-data: 4.0.1 form-data: 4.0.1
'@types/node@22.7.5': '@types/node@22.7.6':
dependencies: dependencies:
undici-types: 6.19.8 undici-types: 6.19.8
@@ -2236,16 +2377,24 @@ snapshots:
'@types/ssri@7.1.5': '@types/ssri@7.1.5':
dependencies: dependencies:
'@types/node': 22.7.5 '@types/node': 22.7.6
'@types/stack-utils@2.0.3': {}
'@types/tar-fs@2.0.4': '@types/tar-fs@2.0.4':
dependencies: dependencies:
'@types/node': 22.7.5 '@types/node': 22.7.6
'@types/tar-stream': 3.1.3 '@types/tar-stream': 3.1.3
'@types/tar-stream@3.1.3': '@types/tar-stream@3.1.3':
dependencies: dependencies:
'@types/node': 22.7.5 '@types/node': 22.7.6
'@types/yargs-parser@21.0.3': {}
'@types/yargs@17.0.33':
dependencies:
'@types/yargs-parser': 21.0.3
'@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.3))(eslint@9.12.0)(typescript@5.6.3)': '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.3))(eslint@9.12.0)(typescript@5.6.3)':
dependencies: dependencies:
@@ -2393,10 +2542,16 @@ snapshots:
ansi-regex@6.1.0: {} ansi-regex@6.1.0: {}
ansi-styles@3.2.1:
dependencies:
color-convert: 1.9.3
ansi-styles@4.3.0: ansi-styles@4.3.0:
dependencies: dependencies:
color-convert: 2.0.1 color-convert: 2.0.1
ansi-styles@5.2.0: {}
ansi-styles@6.2.1: {} ansi-styles@6.2.1: {}
anymatch@3.1.3: anymatch@3.1.3:
@@ -2406,8 +2561,6 @@ snapshots:
argparse@2.0.1: {} argparse@2.0.1: {}
assertion-error@1.1.0: {}
async-sema@3.1.1: {} async-sema@3.1.1: {}
asynckit@0.4.0: {} asynckit@0.4.0: {}
@@ -2504,25 +2657,17 @@ snapshots:
camelcase@6.3.0: {} camelcase@6.3.0: {}
chai@4.4.1: chalk@2.4.2:
dependencies: dependencies:
assertion-error: 1.1.0 ansi-styles: 3.2.1
check-error: 1.0.3 escape-string-regexp: 1.0.5
deep-eql: 4.1.4 supports-color: 5.5.0
get-func-name: 2.0.2
loupe: 2.3.7
pathval: 1.1.1
type-detect: 4.0.8
chalk@4.1.2: chalk@4.1.2:
dependencies: dependencies:
ansi-styles: 4.3.0 ansi-styles: 4.3.0
supports-color: 7.2.0 supports-color: 7.2.0
check-error@1.0.3:
dependencies:
get-func-name: 2.0.2
chokidar@3.6.0: chokidar@3.6.0:
dependencies: dependencies:
anymatch: 3.1.3 anymatch: 3.1.3
@@ -2539,6 +2684,8 @@ snapshots:
chownr@3.0.0: {} chownr@3.0.0: {}
ci-info@3.9.0: {}
ci-info@4.0.0: {} ci-info@4.0.0: {}
cli-table3@0.6.5: cli-table3@0.6.5:
@@ -2555,10 +2702,16 @@ snapshots:
strip-ansi: 6.0.1 strip-ansi: 6.0.1
wrap-ansi: 7.0.0 wrap-ansi: 7.0.0
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
color-convert@2.0.1: color-convert@2.0.1:
dependencies: dependencies:
color-name: 1.1.4 color-name: 1.1.4
color-name@1.1.3: {}
color-name@1.1.4: {} color-name@1.1.4: {}
colorette@2.0.20: {} colorette@2.0.20: {}
@@ -2595,10 +2748,6 @@ snapshots:
dependencies: dependencies:
mimic-response: 3.1.0 mimic-response: 3.1.0
deep-eql@4.1.4:
dependencies:
type-detect: 4.0.8
deep-extend@0.6.0: {} deep-extend@0.6.0: {}
deep-is@0.1.4: {} deep-is@0.1.4: {}
@@ -2609,6 +2758,8 @@ snapshots:
detect-libc@2.0.3: {} detect-libc@2.0.3: {}
diff-sequences@29.6.3: {}
diff@5.2.0: {} diff@5.2.0: {}
doctrine@3.0.0: doctrine@3.0.0:
@@ -2639,6 +2790,10 @@ snapshots:
escalade@3.1.2: {} escalade@3.1.2: {}
escape-string-regexp@1.0.5: {}
escape-string-regexp@2.0.0: {}
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
eslint-compat-utils@0.5.1(eslint@9.12.0): eslint-compat-utils@0.5.1(eslint@9.12.0):
@@ -2861,6 +3016,14 @@ snapshots:
expand-template@2.0.3: {} expand-template@2.0.3: {}
expect@29.7.0:
dependencies:
'@jest/expect-utils': 29.7.0
jest-get-type: 29.6.3
jest-matcher-utils: 29.7.0
jest-message-util: 29.7.0
jest-util: 29.7.0
fast-cidr-tools@0.3.1: {} fast-cidr-tools@0.3.1: {}
fast-deep-equal@3.1.3: {} fast-deep-equal@3.1.3: {}
@@ -2883,7 +3046,7 @@ snapshots:
dependencies: dependencies:
reusify: 1.0.4 reusify: 1.0.4
fdir@6.4.1(picomatch@4.0.2): fdir@6.4.2(picomatch@4.0.2):
optionalDependencies: optionalDependencies:
picomatch: 4.0.2 picomatch: 4.0.2
@@ -2942,8 +3105,6 @@ snapshots:
get-caller-file@2.0.5: {} get-caller-file@2.0.5: {}
get-func-name@2.0.2: {}
get-tsconfig@4.8.1: get-tsconfig@4.8.1:
dependencies: dependencies:
resolve-pkg-maps: 1.0.0 resolve-pkg-maps: 1.0.0
@@ -2983,6 +3144,8 @@ snapshots:
graphemer@1.4.0: {} graphemer@1.4.0: {}
has-flag@3.0.0: {}
has-flag@4.0.0: {} has-flag@4.0.0: {}
hash-wasm@4.11.0: {} hash-wasm@4.11.0: {}
@@ -3069,6 +3232,45 @@ snapshots:
optionalDependencies: optionalDependencies:
'@pkgjs/parseargs': 0.11.0 '@pkgjs/parseargs': 0.11.0
jest-diff@29.7.0:
dependencies:
chalk: 4.1.2
diff-sequences: 29.6.3
jest-get-type: 29.6.3
pretty-format: 29.7.0
jest-get-type@29.6.3: {}
jest-matcher-utils@29.7.0:
dependencies:
chalk: 4.1.2
jest-diff: 29.7.0
jest-get-type: 29.6.3
pretty-format: 29.7.0
jest-message-util@29.7.0:
dependencies:
'@babel/code-frame': 7.25.7
'@jest/types': 29.6.3
'@types/stack-utils': 2.0.3
chalk: 4.1.2
graceful-fs: 4.2.11
micromatch: 4.0.8
pretty-format: 29.7.0
slash: 3.0.0
stack-utils: 2.0.6
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
'@types/node': 22.7.6
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
picomatch: 2.3.1
js-tokens@4.0.0: {}
js-yaml@4.1.0: js-yaml@4.1.0:
dependencies: dependencies:
argparse: 2.0.1 argparse: 2.0.1
@@ -3112,10 +3314,6 @@ snapshots:
chalk: 4.1.2 chalk: 4.1.2
is-unicode-supported: 0.1.0 is-unicode-supported: 0.1.0
loupe@2.3.7:
dependencies:
get-func-name: 2.0.2
lru-cache@10.4.3: {} lru-cache@10.4.3: {}
make-fetch-happen@14.0.2: make-fetch-happen@14.0.2:
@@ -3301,8 +3499,6 @@ snapshots:
lru-cache: 10.4.3 lru-cache: 10.4.3
minipass: 7.1.2 minipass: 7.1.2
pathval@1.1.1: {}
picocolors@1.1.1: {} picocolors@1.1.1: {}
picomatch@2.3.1: {} picomatch@2.3.1: {}
@@ -3329,6 +3525,12 @@ snapshots:
prelude-ls@1.2.1: {} prelude-ls@1.2.1: {}
pretty-format@29.7.0:
dependencies:
'@jest/schemas': 29.6.3
ansi-styles: 5.2.0
react-is: 18.3.1
proc-log@5.0.0: {} proc-log@5.0.0: {}
promise-retry@2.0.1: promise-retry@2.0.1:
@@ -3358,6 +3560,8 @@ snapshots:
minimist: 1.2.8 minimist: 1.2.8
strip-json-comments: 2.0.1 strip-json-comments: 2.0.1
react-is@18.3.1: {}
readable-stream@3.6.2: readable-stream@3.6.2:
dependencies: dependencies:
inherits: 2.0.4 inherits: 2.0.4
@@ -3436,6 +3640,8 @@ snapshots:
once: 1.4.0 once: 1.4.0
simple-concat: 1.0.1 simple-concat: 1.0.1
slash@3.0.0: {}
smart-buffer@4.2.0: {} smart-buffer@4.2.0: {}
socks-proxy-agent@8.0.4: socks-proxy-agent@8.0.4:
@@ -3466,6 +3672,10 @@ snapshots:
stable-hash@0.0.4: {} stable-hash@0.0.4: {}
stack-utils@2.0.6:
dependencies:
escape-string-regexp: 2.0.0
streamx@2.20.0: streamx@2.20.0:
dependencies: dependencies:
fast-fifo: 1.3.2 fast-fifo: 1.3.2
@@ -3506,6 +3716,10 @@ snapshots:
strip-json-comments@3.1.1: {} strip-json-comments@3.1.1: {}
supports-color@5.5.0:
dependencies:
has-flag: 3.0.0
supports-color@7.2.0: supports-color@7.2.0:
dependencies: dependencies:
has-flag: 4.0.0 has-flag: 4.0.0