Test: drop bun:test, replace w/ mocha and chai

This commit is contained in:
SukkaW 2024-07-25 10:34:03 +08:00
parent 5e94d0937e
commit a7a05e9901
7 changed files with 509 additions and 141 deletions

View File

@ -1 +1 @@
20
22

View File

@ -1,22 +1,17 @@
// eslint-disable-next-line import-x/no-unresolved -- bun
import { describe, expect, it } from 'bun:test';
import { describe, it } from 'mocha';
import { expect } from 'chai';
import createKeywordFilter from './aho-corasick';
describe('AhoCorasick', () => {
it('basic', () => {
let kwfilter = createKeywordFilter(['ap', 'an']);
expect(kwfilter('bananan')).toBeTrue();
expect(kwfilter('apple')).toBeTrue();
expect(kwfilter('melon')).toBeFalse();
console.log(kwfilter);
expect(kwfilter('bananan')).to.equal(true);
expect(kwfilter('apple')).to.equal(true);
expect(kwfilter('melon')).to.equal(false);
kwfilter = createKeywordFilter(['cdn', 'sukka']);
expect(kwfilter('bananan')).toBeFalse();
expect(kwfilter('apple')).toBeFalse();
expect(kwfilter('melon')).toBeFalse();
console.log(kwfilter);
console.log(createKeywordFilter(['skk.moe', 'anotherskk', 'skk.com']));
expect(kwfilter('bananan')).to.equal(false);
expect(kwfilter('apple')).to.equal(false);
expect(kwfilter('melon')).to.equal(false);
});
});

View File

@ -1,5 +1,4 @@
// eslint-disable-next-line import-x/no-unresolved -- bun
import { describe, it } from 'bun:test';
import { describe, it } from 'mocha';
import { calcDomainAbuseScore } from './get-phishing-domains';

View File

@ -1,6 +1,5 @@
// eslint-disable-next-line import-x/no-unresolved -- bun
import { describe, expect, it } from 'bun:test';
import { describe, it } from 'mocha';
import { expect } from 'chai';
import { sortDomains } from './stable-sort-domain';
describe('sortDomains', () => {
@ -9,7 +8,7 @@ describe('sortDomains', () => {
'.s3-website.ap-northeast-3.amazonaws.com',
'.s3.dualstack.ap-south-1.amazonaws.com',
'.s3-website.af-south-1.amazonaws.com'
])).toStrictEqual([
])).to.deep.equal([
'.s3-website.af-south-1.amazonaws.com',
'.s3.dualstack.ap-south-1.amazonaws.com',
'.s3-website.ap-northeast-3.amazonaws.com'
@ -19,7 +18,7 @@ describe('sortDomains', () => {
'.s3.dualstack.ap-south-1.amazonaws.com',
'.s3-website.ap-northeast-3.amazonaws.com',
'.s3-website.af-south-1.amazonaws.com'
])).toStrictEqual([
])).to.deep.equal([
'.s3-website.af-south-1.amazonaws.com',
'.s3.dualstack.ap-south-1.amazonaws.com',
'.s3-website.ap-northeast-3.amazonaws.com'
@ -28,7 +27,7 @@ describe('sortDomains', () => {
expect(sortDomains([
'.s3-website-us-west-2.amazonaws.com',
'.s3-1.amazonaws.com'
])).toStrictEqual([
])).to.deep.equal([
'.s3-1.amazonaws.com',
'.s3-website-us-west-2.amazonaws.com'
]);
@ -36,7 +35,7 @@ describe('sortDomains', () => {
expect(sortDomains([
'.s3-1.amazonaws.com',
'.s3-website-us-west-2.amazonaws.com'
])).toStrictEqual([
])).to.deep.equal([
'.s3-1.amazonaws.com',
'.s3-website-us-west-2.amazonaws.com'
]);
@ -47,7 +46,7 @@ describe('sortDomains', () => {
'.s3-accesspoint.dualstack.us-west-2.amazonaws.com',
'.s3.dualstack.us-west-2.amazonaws.com'
])
).toStrictEqual([
).to.deep.equal([
'.s3.dualstack.us-west-2.amazonaws.com',
'.s3-deprecated.us-west-2.amazonaws.com',
'.s3-accesspoint.dualstack.us-west-2.amazonaws.com'
@ -59,7 +58,7 @@ describe('sortDomains', () => {
'.s3-accesspoint.dualstack.us-west-2.amazonaws.com',
'.s3.dualstack.us-west-2.amazonaws.com'
])
).toStrictEqual([
).to.deep.equal([
'.s3.dualstack.us-west-2.amazonaws.com',
'.s3-deprecated.us-west-2.amazonaws.com',
'.s3-accesspoint.dualstack.us-west-2.amazonaws.com'
@ -70,7 +69,7 @@ describe('sortDomains', () => {
'.ec2-25-58-215-234.us-east-2.compute.amazonaws.com',
'.ec2-13-58-215-234.us-east-2.compute.amazonaws.com'
])
).toStrictEqual([
).to.deep.equal([
'.ec2-13-58-215-234.us-east-2.compute.amazonaws.com',
'.ec2-25-58-215-234.us-east-2.compute.amazonaws.com'
]);
@ -81,7 +80,7 @@ describe('sortDomains', () => {
'.notice.samsungcloudsolution.com',
'samsungqbe.com',
'samsungcloudsolution.com'
])).toStrictEqual([
])).to.deep.equal([
'samsungqbe.com',
'samsungcloudsolution.com',
'.notice.samsungcloudsolution.com'
@ -118,7 +117,7 @@ describe('sortDomains', () => {
'.rwww.samsungotn.net',
'.samsungpoland.com.pl'
])
).toStrictEqual([
).to.deep.equal([
'.gld.samsungosp.com',
'.rwww.samsungotn.net',
'samsungqbe.com',

View File

@ -1,6 +1,6 @@
import { createTrie } from './trie';
// eslint-disable-next-line import-x/no-unresolved -- fuck eslint-import
import { describe, expect, it } from 'bun:test';
import { describe, it } from 'mocha';
import { expect } from 'chai';
describe('Trie', () => {
it('should be possible to add items to a Trie.', () => {
@ -10,14 +10,14 @@ describe('Trie', () => {
trie.add('ukka');
trie.add('akku');
expect(trie.size).toBe(3);
expect(trie.size).to.equal(3);
expect(trie.has('sukka')).toBeTrue();
expect(trie.has('ukka')).toBeTrue();
expect(trie.has('akku')).toBeTrue();
expect(trie.has('noc')).toBeFalse();
expect(trie.has('suk')).toBeFalse();
expect(trie.has('sukkaw')).toBeFalse();
expect(trie.has('sukka')).to.equal(true);
expect(trie.has('ukka')).to.equal(true);
expect(trie.has('akku')).to.equal(true);
expect(trie.has('noc')).to.equal(false);
expect(trie.has('suk')).to.equal(false);
expect(trie.has('sukkaw')).to.equal(false);
});
it('should be possible to add domains to a Trie (hostname).', () => {
@ -27,14 +27,14 @@ describe('Trie', () => {
trie.add('skk.moe');
trie.add('anotherskk.moe');
expect(trie.size).toBe(3);
expect(trie.size).to.equal(3);
expect(trie.has('a.skk.moe')).toBeTrue();
expect(trie.has('skk.moe')).toBeTrue();
expect(trie.has('anotherskk.moe')).toBeTrue();
expect(trie.has('example.com')).toBeFalse();
expect(trie.has('skk.mo')).toBeFalse();
expect(trie.has('another.skk.moe')).toBeFalse();
expect(trie.has('a.skk.moe')).to.equal(true);
expect(trie.has('skk.moe')).to.equal(true);
expect(trie.has('anotherskk.moe')).to.equal(true);
expect(trie.has('example.com')).to.equal(false);
expect(trie.has('skk.mo')).to.equal(false);
expect(trie.has('another.skk.moe')).to.equal(false);
});
it('adding the same item several times should not increase size.', () => {
@ -44,8 +44,8 @@ describe('Trie', () => {
trie.add('erat');
trie.add('rat');
expect(trie.size).toBe(2);
expect(trie.has('rat')).toBeTrue();
expect(trie.size).to.equal(2);
expect(trie.has('rat')).to.equal(true);
});
it('adding the same item several times should not increase size (hostname).', () => {
@ -55,19 +55,19 @@ describe('Trie', () => {
trie.add('blog.skk.moe');
trie.add('skk.moe');
expect(trie.size).toBe(2);
expect(trie.has('skk.moe')).toBeTrue();
expect(trie.size).to.equal(2);
expect(trie.has('skk.moe')).to.equal(true);
});
it('should be possible to set the null sequence.', () => {
let trie = createTrie();
trie.add('');
expect(trie.has('')).toBeTrue();
expect(trie.has('')).to.equal(true);
trie = createTrie(null, true);
trie.add('');
expect(trie.has('')).toBeTrue();
expect(trie.has('')).to.equal(true);
});
it('should be possible to delete items.', () => {
@ -77,20 +77,20 @@ describe('Trie', () => {
trie.add('rate');
trie.add('tar');
expect(trie.delete('')).toBeFalse();
expect(trie.delete('')).toBeFalse();
expect(trie.delete('hello')).toBeFalse();
expect(trie.delete('')).to.equal(false);
expect(trie.delete('')).to.equal(false);
expect(trie.delete('hello')).to.equal(false);
expect(trie.delete('rat')).toBeTrue();
expect(trie.has('rat')).toBeFalse();
expect(trie.has('rate')).toBeTrue();
expect(trie.delete('rat')).to.equal(true);
expect(trie.has('rat')).to.equal(false);
expect(trie.has('rate')).to.equal(true);
expect(trie.size).toBe(2);
expect(trie.size).to.equal(2);
expect(trie.delete('rate')).toBeTrue();
expect(trie.size).toBe(1);
expect(trie.delete('tar')).toBeTrue();
expect(trie.size).toBe(0);
expect(trie.delete('rate')).to.equal(true);
expect(trie.size).to.equal(1);
expect(trie.delete('tar')).to.equal(true);
expect(trie.size).to.equal(0);
});
it('should be possible to delete items (hostname).', () => {
@ -100,20 +100,20 @@ describe('Trie', () => {
trie.add('example.com');
trie.add('moe.sb');
expect(trie.delete('')).toBeFalse();
expect(trie.delete('')).toBeFalse();
expect(trie.delete('example.org')).toBeFalse();
expect(trie.delete('')).to.equal(false);
expect(trie.delete('')).to.equal(false);
expect(trie.delete('example.org')).to.equal(false);
expect(trie.delete('skk.moe')).toBeTrue();
expect(trie.has('skk.moe')).toBeFalse();
expect(trie.has('moe.sb')).toBeTrue();
expect(trie.delete('skk.moe')).to.equal(true);
expect(trie.has('skk.moe')).to.equal(false);
expect(trie.has('moe.sb')).to.equal(true);
expect(trie.size).toBe(2);
expect(trie.size).to.equal(2);
expect(trie.delete('example.com')).toBeTrue();
expect(trie.size).toBe(1);
expect(trie.delete('moe.sb')).toBeTrue();
expect(trie.size).toBe(0);
expect(trie.delete('example.com')).to.equal(true);
expect(trie.size).to.equal(1);
expect(trie.delete('moe.sb')).to.equal(true);
expect(trie.size).to.equal(0);
});
it('should be possible to check the existence of a sequence in the Trie.', () => {
@ -121,10 +121,10 @@ describe('Trie', () => {
trie.add('romanesque');
expect(trie.has('romanesque')).toBe(true);
expect(trie.has('roman')).toBe(false);
expect(trie.has('esque')).toBe(false);
expect(trie.has('')).toBe(false);
expect(trie.has('romanesque')).to.equal(true);
expect(trie.has('roman')).to.equal(false);
expect(trie.has('esque')).to.equal(false);
expect(trie.has('')).to.equal(false);
});
it('should be possible to check the existence of a sequence in the Trie (hostname).', () => {
@ -132,10 +132,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')).to.equal(true);
expect(trie.has('skk.moe')).to.equal(false);
expect(trie.has('example.org')).to.equal(false);
expect(trie.has('')).to.equal(false);
});
it('should be possible to retrieve items matching the given prefix.', () => {
@ -146,12 +146,12 @@ describe('Trie', () => {
trie.add('sesqueroman');
trie.add('greek');
expect(trie.find('roman')).toEqual(['roman', 'esqueroman', 'sesqueroman']);
expect(trie.find('man')).toEqual(['roman', 'esqueroman', 'sesqueroman']);
expect(trie.find('esqueroman')).toEqual(['esqueroman', 'sesqueroman']);
expect(trie.find('eek')).toEqual(['greek']);
expect(trie.find('hello')).toEqual([]);
expect(trie.find('')).toEqual(['greek', 'roman', 'esqueroman', 'sesqueroman']);
expect(trie.find('roman')).to.deep.equal(['roman', 'esqueroman', 'sesqueroman']);
expect(trie.find('man')).to.deep.equal(['roman', 'esqueroman', 'sesqueroman']);
expect(trie.find('esqueroman')).to.deep.equal(['esqueroman', 'sesqueroman']);
expect(trie.find('eek')).to.deep.equal(['greek']);
expect(trie.find('hello')).to.deep.equal([]);
expect(trie.find('')).to.deep.equal(['greek', 'roman', 'esqueroman', 'sesqueroman']);
});
it('should be possible to retrieve items matching the given prefix (hostname).', () => {
@ -162,54 +162,56 @@ describe('Trie', () => {
trie.add('cdn.example.com');
trie.add('example.org');
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.find('')).toEqual(['example.org', 'example.com', 'cdn.example.com', 'blog.example.com']);
expect(trie.find('example.com')).to.deep.equal(['example.com', 'cdn.example.com', 'blog.example.com']);
expect(trie.find('com')).to.deep.equal(['example.com', 'cdn.example.com', 'blog.example.com']);
expect(trie.find('.example.com')).to.deep.equal(['cdn.example.com', 'blog.example.com']);
expect(trie.find('org')).to.deep.equal(['example.org']);
expect(trie.find('example.net')).to.deep.equal([]);
expect(trie.find('')).to.deep.equal(['example.org', 'example.com', 'cdn.example.com', 'blog.example.com']);
});
it('should be possible to create a trie from an arbitrary iterable.', () => {
let trie = createTrie(['roman', 'esqueroman']);
expect(trie.size).toBe(2);
expect(trie.has('roman')).toBe(true);
expect(trie.size).to.equal(2);
expect(trie.has('roman')).to.equal(true);
trie = createTrie(new Set(['skk.moe', 'example.com']), true);
expect(trie.size).toBe(2);
expect(trie.has('skk.moe')).toBe(true);
expect(trie.size).to.equal(2);
expect(trie.has('skk.moe')).to.equal(true);
});
});
describe.each([
([
['hostname mode off', false],
['hostname mode on', true]
])('surge domainset dedupe %s', (_, hostnameMode) => {
it('should not remove same entry', () => {
const trie = createTrie(['.skk.moe', 'noc.one'], hostnameMode);
] as const).forEach(([description, hostnameMode]) => {
describe('surge domainset dedupe ' + description, () => {
it('should not remove same entry', () => {
const trie = createTrie(['.skk.moe', 'noc.one'], hostnameMode);
expect(trie.find('.skk.moe')).toStrictEqual(['.skk.moe']);
expect(trie.find('noc.one')).toStrictEqual(['noc.one']);
});
expect(trie.find('.skk.moe')).to.deep.equal(['.skk.moe']);
expect(trie.find('noc.one')).to.deep.equal(['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'], hostnameMode);
it('should match subdomain - 1', () => {
const trie = createTrie(['www.noc.one', 'www.sukkaw.com', 'blog.skk.moe', 'image.cdn.skk.moe', 'cdn.sukkaw.net'], hostnameMode);
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')).to.deep.equal(['image.cdn.skk.moe', 'blog.skk.moe']);
expect(trie.find('.sukkaw.com')).to.deep.equal(['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'], hostnameMode);
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'], hostnameMode);
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')).to.deep.equal(['.skk.moe', 'image.cdn.skk.moe', 'blog.skk.moe']);
expect(trie.find('.sukkaw.com')).to.deep.equal(['www.sukkaw.com']);
});
it('should not remove non-subdomain', () => {
const trie = createTrie(['skk.moe', 'sukkaskk.moe'], hostnameMode);
expect(trie.find('.skk.moe')).toStrictEqual([]);
it('should not remove non-subdomain', () => {
const trie = createTrie(['skk.moe', 'sukkaskk.moe'], hostnameMode);
expect(trie.find('.skk.moe')).to.deep.equal([]);
});
});
});
@ -221,7 +223,7 @@ describe('smol tree', () => {
'.blog.sub.example.com', 'sub.example.com', 'cdn.sub.example.com', '.sub.example.com'
], true, true);
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'.sub.example.com',
'cdn.noc.one', 'www.noc.one',
'.skk.moe'
@ -233,7 +235,7 @@ describe('smol tree', () => {
'.skk.moe', 'blog.skk.moe', '.cdn.skk.moe', 'skk.moe'
], true, true);
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'.skk.moe'
]);
});
@ -243,12 +245,12 @@ describe('smol tree', () => {
'.blog.sub.example.com', 'cdn.sub.example.com', '.sub.example.com'
], true, true);
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'.sub.example.com'
]);
trie.add('.sub.example.com');
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'.sub.example.com'
]);
});
@ -261,7 +263,7 @@ describe('smol tree', () => {
'px.cdn.creative.medialytics.com'
], true, true);
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'cdn.creative.medialytics.com',
'px.cdn.creative.medialytics.com',
'commercial.shouji.360.cn',
@ -277,7 +279,7 @@ describe('smol tree', () => {
'blog.skk.moe'
], true, true);
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'anotherskk.moe',
'blog.anotherskk.moe',
'skk.moe',
@ -293,7 +295,7 @@ describe('smol tree', () => {
'blog.skk.moe'
], true, true);
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'anotherskk.moe',
'blog.anotherskk.moe',
'skk.moe',
@ -302,20 +304,20 @@ describe('smol tree', () => {
trie.whitelist('.skk.moe');
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'anotherskk.moe',
'blog.anotherskk.moe'
]);
trie.whitelist('anotherskk.moe');
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'blog.anotherskk.moe'
]);
trie.add('anotherskk.moe');
trie.whitelist('.anotherskk.moe');
expect(trie.dump()).toStrictEqual([]);
expect(trie.dump()).to.deep.equal([]);
});
it('should whitelist trie correctly', () => {
@ -328,22 +330,22 @@ describe('smol tree', () => {
'cdn.example.com'
], true, true);
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'cdn.example.com', 'blog.cdn.example.com',
'.skk.moe',
'.t.co'
]);
trie.whitelist('.t.co');
expect(trie.dump()).toStrictEqual([
expect(trie.dump()).to.deep.equal([
'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()).to.deep.equal(['cdn.example.com', 'blog.cdn.example.com']);
trie.whitelist('cdn.example.com');
expect(trie.dump()).toStrictEqual(['blog.cdn.example.com']);
expect(trie.dump()).to.deep.equal(['blog.cdn.example.com']);
});
});

View File

@ -14,7 +14,8 @@
"build": "pnpm run node ./Build/index.ts",
"build-profile": "pnpm run dexnode -r @swc-node/register ./Build/index.ts",
"build-webstream": "ENABLE_EXPERIMENTAL_WEBSTREAMS=true pnpm run node ./Build/index.ts",
"lint": "eslint --format=sukka ."
"lint": "eslint --format=sukka .",
"test": "SWCRC=true mocha --require @swc-node/register --watch-extensions ts,tsx"
},
"author": "",
"license": "ISC",
@ -45,12 +46,16 @@
"@swc/core": "^1.7.0",
"@types/async-retry": "^1.4.8",
"@types/better-sqlite3": "^7.6.11",
"@types/chai": "^4.3.16",
"@types/mocha": "^10.0.7",
"@types/punycode": "^2.1.4",
"@types/tar-stream": "^3.1.3",
"chai": "4",
"eslint": "^9.7.0",
"eslint-config-sukka": "^6.1.6",
"eslint-formatter-sukka": "^6.1.6",
"mitata": "^0.1.11",
"mocha": "^10.7.0",
"typescript": "^5.5.3"
},
"packageManager": "pnpm@9.6.0+sha512.38dc6fba8dba35b39340b9700112c2fe1e12f10b17134715a4aa98ccf7bb035e76fd981cf0bb384dfa98f8d6af5481c2bef2f4266a24bfa20c34eb7147ce0b5e",

388
pnpm-lock.yaml generated
View File

@ -84,12 +84,21 @@ importers:
'@types/better-sqlite3':
specifier: ^7.6.11
version: 7.6.11
'@types/chai':
specifier: ^4.3.16
version: 4.3.16
'@types/mocha':
specifier: ^10.0.7
version: 10.0.7
'@types/punycode':
specifier: ^2.1.4
version: 2.1.4
'@types/tar-stream':
specifier: ^3.1.3
version: 3.1.3
chai:
specifier: '4'
version: 4.4.1
eslint:
specifier: ^9.7.0
version: 9.7.0
@ -102,6 +111,9 @@ importers:
mitata:
specifier: ^0.1.11
version: 0.1.11
mocha:
specifier: ^10.7.0
version: 10.7.0
typescript:
specifier: ^5.5.3
version: 5.5.4
@ -388,6 +400,9 @@ packages:
'@types/better-sqlite3@7.6.11':
resolution: {integrity: sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==}
'@types/chai@4.3.16':
resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
'@types/chrome@0.0.268':
resolution: {integrity: sha512-7N1QH9buudSJ7sI8Pe4mBHJr5oZ48s0hcanI9w3wgijAlv1OZNUZve9JR4x42dn5lJ5Sm87V1JNfnoh10EnQlA==}
@ -412,6 +427,9 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/mocha@10.0.7':
resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==}
'@types/node@20.14.11':
resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==}
@ -524,6 +542,10 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@ -532,6 +554,10 @@ packages:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@ -539,6 +565,9 @@ packages:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
assertion-error@1.1.0:
resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
astral-regex@2.0.0:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
@ -564,6 +593,10 @@ packages:
better-sqlite3@11.1.2:
resolution: {integrity: sha512-gujtFwavWU4MSPT+h9B+4pkvZdyOUkH54zgLdIrMmmmd4ZqiBIrRNBzNzYVFO417xo882uP5HBu4GjOfaSrIQw==}
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
@ -580,6 +613,9 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
browser-stdout@1.3.1:
resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
@ -590,10 +626,25 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
chai@4.4.1:
resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
engines: {node: '>=4'}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
check-error@1.0.3:
resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
chownr@1.1.4:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
@ -604,6 +655,9 @@ packages:
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
cliui@7.0.4:
resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@ -641,10 +695,18 @@ packages:
supports-color:
optional: true
decamelize@4.0.0:
resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
engines: {node: '>=10'}
decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
deep-eql@4.1.4:
resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
engines: {node: '>=6'}
deep-extend@0.6.0:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
@ -659,6 +721,10 @@ packages:
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
engines: {node: '>=8'}
diff@5.2.0:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@ -677,6 +743,10 @@ packages:
resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==}
engines: {node: '>=10.13.0'}
escalade@3.1.2:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@ -859,6 +929,10 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
flat@5.0.2:
resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
hasBin: true
flatted@3.3.1:
resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
@ -873,9 +947,24 @@ packages:
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
get-func-name@2.0.2:
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
get-tsconfig@4.7.6:
resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==}
@ -890,6 +979,11 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
glob@8.1.0:
resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
engines: {node: '>=12'}
deprecated: Glob versions prior to v9 are no longer supported
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@ -916,6 +1010,10 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
he@1.2.0:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@ -931,12 +1029,20 @@ packages:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
ini@1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
is-core-module@2.15.0:
resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==}
engines: {node: '>= 0.4'}
@ -961,6 +1067,14 @@ packages:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
is-plain-obj@2.1.0:
resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
engines: {node: '>=8'}
is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@ -1004,6 +1118,13 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
log-symbols@4.1.0:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
loupe@2.3.7:
resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@ -1022,6 +1143,10 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimatch@5.1.6:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
@ -1042,6 +1167,11 @@ packages:
mnemonist@0.39.8:
resolution: {integrity: sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ==}
mocha@10.7.0:
resolution: {integrity: sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==}
engines: {node: '>= 14.0.0'}
hasBin: true
ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@ -1058,6 +1188,10 @@ packages:
resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==}
engines: {node: '>=10'}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
obliterator@2.0.4:
resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==}
@ -1102,6 +1236,9 @@ packages:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
pathval@1.1.1:
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
picocolors@1.0.1:
resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
@ -1135,6 +1272,9 @@ packages:
queue-tick@1.0.1:
resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@ -1143,6 +1283,14 @@ packages:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
require-from-string@2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
@ -1177,6 +1325,9 @@ packages:
engines: {node: '>=10'}
hasBin: true
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
server-only@0.0.1:
resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
@ -1242,6 +1393,10 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
supports-color@8.1.1:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@ -1304,6 +1459,10 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
type-detect@4.0.8:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
type-fest@4.23.0:
resolution: {integrity: sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==}
engines: {node: '>=16'}
@ -1340,14 +1499,37 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
workerpool@6.5.1:
resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
yaml@2.4.5:
resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==}
engines: {node: '>= 14'}
hasBin: true
yargs-parser@20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
engines: {node: '>=10'}
yargs-unparser@2.0.0:
resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
engines: {node: '>=10'}
yargs@16.2.0:
resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
engines: {node: '>=10'}
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@ -1428,7 +1610,7 @@ snapshots:
'@eslint/config-array@0.17.1':
dependencies:
'@eslint/object-schema': 2.1.4
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@ -1436,7 +1618,7 @@ snapshots:
'@eslint/eslintrc@3.1.0':
dependencies:
ajv: 6.12.6
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
espree: 10.1.0
globals: 14.0.0
ignore: 5.3.1
@ -1566,7 +1748,7 @@ snapshots:
'@swc-node/sourcemap-support': 0.5.1
'@swc/core': 1.7.0
colorette: 2.0.20
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
oxc-resolver: 1.10.2
pirates: 4.0.6
tslib: 2.6.3
@ -1645,6 +1827,8 @@ snapshots:
dependencies:
'@types/node': 20.14.11
'@types/chai@4.3.16': {}
'@types/chrome@0.0.268':
dependencies:
'@types/filesystem': 0.0.36
@ -1669,6 +1853,8 @@ snapshots:
'@types/json-schema@7.0.15': {}
'@types/mocha@10.0.7': {}
'@types/node@20.14.11':
dependencies:
undici-types: 5.26.5
@ -1705,7 +1891,7 @@ snapshots:
'@typescript-eslint/types': 8.0.0-alpha.45
'@typescript-eslint/typescript-estree': 8.0.0-alpha.45(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 8.0.0-alpha.45
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
eslint: 9.7.0
optionalDependencies:
typescript: 5.5.4
@ -1726,7 +1912,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 8.0.0-alpha.45(typescript@5.5.4)
'@typescript-eslint/utils': 8.0.0-alpha.45(eslint@9.7.0)(typescript@5.5.4)
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
typescript: 5.5.4
@ -1742,7 +1928,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 7.17.0
'@typescript-eslint/visitor-keys': 7.17.0
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.5
@ -1757,7 +1943,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 8.0.0-alpha.45
'@typescript-eslint/visitor-keys': 8.0.0-alpha.45
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.5
@ -1820,16 +2006,25 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
ansi-colors@4.1.3: {}
ansi-regex@5.0.1: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
anymatch@3.1.3:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
argparse@2.0.1: {}
array-union@2.1.0: {}
assertion-error@1.1.0: {}
astral-regex@2.0.0: {}
async-retry@1.3.3:
@ -1852,6 +2047,8 @@ snapshots:
bindings: 1.5.0
prebuild-install: 7.1.2
binary-extensions@2.3.0: {}
bindings@1.5.0:
dependencies:
file-uri-to-path: 1.0.0
@ -1875,6 +2072,8 @@ snapshots:
dependencies:
fill-range: 7.1.1
browser-stdout@1.3.1: {}
buffer-from@1.1.2: {}
buffer@5.7.1:
@ -1884,17 +2083,51 @@ snapshots:
callsites@3.1.0: {}
camelcase@6.3.0: {}
chai@4.4.1:
dependencies:
assertion-error: 1.1.0
check-error: 1.0.3
deep-eql: 4.1.4
get-func-name: 2.0.2
loupe: 2.3.7
pathval: 1.1.1
type-detect: 4.0.8
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
check-error@1.0.3:
dependencies:
get-func-name: 2.0.2
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
braces: 3.0.3
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
chownr@1.1.4: {}
ci-info@4.0.0: {}
client-only@0.0.1: {}
cliui@7.0.4:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@ -1917,14 +2150,22 @@ snapshots:
dependencies:
ms: 2.1.3
debug@4.3.5:
debug@4.3.5(supports-color@8.1.1):
dependencies:
ms: 2.1.2
optionalDependencies:
supports-color: 8.1.1
decamelize@4.0.0: {}
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
deep-eql@4.1.4:
dependencies:
type-detect: 4.0.8
deep-extend@0.6.0: {}
deep-is@0.1.4: {}
@ -1933,6 +2174,8 @@ snapshots:
detect-libc@2.0.3: {}
diff@5.2.0: {}
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@ -1952,6 +2195,8 @@ snapshots:
graceful-fs: 4.2.11
tapable: 2.2.1
escalade@3.1.2: {}
escape-string-regexp@4.0.0: {}
eslint-compat-utils@0.5.1(eslint@9.7.0):
@ -2035,7 +2280,7 @@ snapshots:
eslint-plugin-import-x@3.1.0(eslint@9.7.0)(typescript@5.5.4):
dependencies:
'@typescript-eslint/utils': 7.17.0(eslint@9.7.0)(typescript@5.5.4)
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
doctrine: 3.0.0
eslint: 9.7.0
eslint-import-resolver-node: 0.3.9
@ -2123,7 +2368,7 @@ snapshots:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
debug: 4.3.5
debug: 4.3.5(supports-color@8.1.1)
escape-string-regexp: 4.0.0
eslint-scope: 8.0.2
eslint-visitor-keys: 4.0.0
@ -2221,6 +2466,8 @@ snapshots:
flatted: 3.3.1
keyv: 4.5.4
flat@5.0.2: {}
flatted@3.3.1: {}
foxact@0.2.36:
@ -2230,8 +2477,17 @@ snapshots:
fs-constants@1.0.0: {}
fs.realpath@1.0.0: {}
fsevents@2.3.3:
optional: true
function-bind@1.1.2: {}
get-caller-file@2.0.5: {}
get-func-name@2.0.2: {}
get-tsconfig@4.7.6:
dependencies:
resolve-pkg-maps: 1.0.0
@ -2246,6 +2502,14 @@ snapshots:
dependencies:
is-glob: 4.0.3
glob@8.1.0:
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 5.1.6
once: 1.4.0
globals@14.0.0: {}
globals@15.8.0: {}
@ -2269,6 +2533,8 @@ snapshots:
dependencies:
function-bind: 1.1.2
he@1.2.0: {}
ieee754@1.2.1: {}
ignore@5.3.1: {}
@ -2280,10 +2546,19 @@ snapshots:
imurmurhash@0.1.4: {}
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
inherits@2.0.4: {}
ini@1.3.8: {}
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
is-core-module@2.15.0:
dependencies:
hasown: 2.0.2
@ -2300,6 +2575,10 @@ snapshots:
is-path-inside@3.0.3: {}
is-plain-obj@2.1.0: {}
is-unicode-supported@0.1.0: {}
isexe@2.0.0: {}
js-yaml@4.1.0:
@ -2340,6 +2619,15 @@ snapshots:
lodash@4.17.21: {}
log-symbols@4.1.0:
dependencies:
chalk: 4.1.2
is-unicode-supported: 0.1.0
loupe@2.3.7:
dependencies:
get-func-name: 2.0.2
lru-cache@10.4.3: {}
merge2@1.4.1: {}
@ -2355,6 +2643,10 @@ snapshots:
dependencies:
brace-expansion: 1.1.11
minimatch@5.1.6:
dependencies:
brace-expansion: 2.0.1
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.1
@ -2371,6 +2663,29 @@ snapshots:
dependencies:
obliterator: 2.0.4
mocha@10.7.0:
dependencies:
ansi-colors: 4.1.3
browser-stdout: 1.3.1
chokidar: 3.6.0
debug: 4.3.5(supports-color@8.1.1)
diff: 5.2.0
escape-string-regexp: 4.0.0
find-up: 5.0.0
glob: 8.1.0
he: 1.2.0
js-yaml: 4.1.0
log-symbols: 4.1.0
minimatch: 5.1.6
ms: 2.1.3
serialize-javascript: 6.0.2
strip-json-comments: 3.1.1
supports-color: 8.1.1
workerpool: 6.5.1
yargs: 16.2.0
yargs-parser: 20.2.9
yargs-unparser: 2.0.0
ms@2.1.2: {}
ms@2.1.3: {}
@ -2383,6 +2698,8 @@ snapshots:
dependencies:
semver: 7.6.3
normalize-path@3.0.0: {}
obliterator@2.0.4: {}
once@1.4.0:
@ -2437,6 +2754,8 @@ snapshots:
path-type@4.0.0: {}
pathval@1.1.1: {}
picocolors@1.0.1: {}
picomatch@2.3.1: {}
@ -2471,6 +2790,10 @@ snapshots:
queue-tick@1.0.1: {}
randombytes@2.1.0:
dependencies:
safe-buffer: 5.2.1
rc@1.2.8:
dependencies:
deep-extend: 0.6.0
@ -2484,6 +2807,12 @@ snapshots:
string_decoder: 1.3.0
util-deprecate: 1.0.2
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
require-directory@2.1.1: {}
require-from-string@2.0.2: {}
resolve-from@4.0.0: {}
@ -2508,6 +2837,10 @@ snapshots:
semver@7.6.3: {}
serialize-javascript@6.0.2:
dependencies:
randombytes: 2.1.0
server-only@0.0.1: {}
shebang-command@2.0.0:
@ -2573,6 +2906,10 @@ snapshots:
dependencies:
has-flag: 4.0.0
supports-color@8.1.1:
dependencies:
has-flag: 4.0.0
supports-preserve-symlinks-flag@1.0.0: {}
synckit@0.6.2:
@ -2644,6 +2981,8 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
type-detect@4.0.8: {}
type-fest@4.23.0: {}
typescript-eslint@8.0.0-alpha.45(eslint@9.7.0)(typescript@5.5.4):
@ -2673,8 +3012,37 @@ snapshots:
word-wrap@1.2.5: {}
workerpool@6.5.1: {}
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrappy@1.0.2: {}
y18n@5.0.8: {}
yaml@2.4.5: {}
yargs-parser@20.2.9: {}
yargs-unparser@2.0.0:
dependencies:
camelcase: 6.3.0
decamelize: 4.0.0
flat: 5.0.2
is-plain-obj: 2.1.0
yargs@16.2.0:
dependencies:
cliui: 7.0.4
escalade: 3.1.2
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 20.2.9
yocto-queue@0.1.0: {}