diff --git a/apps/cloudflare-metrics/src/cloudflare-api.test.ts b/apps/cloudflare-metrics/src/cloudflare-api.test.ts index efb89f4..ab15f6f 100644 --- a/apps/cloudflare-metrics/src/cloudflare-api.test.ts +++ b/apps/cloudflare-metrics/src/cloudflare-api.test.ts @@ -6,22 +6,22 @@ describe('CloudflareRestClient', () => { const fetchMock = vi .fn() .mockResolvedValueOnce( - new Response( - JSON.stringify({ + Response.json( + { success: true, result: [{ uuid: 'a', name: 'one' }], result_info: { page: 1, per_page: 100, total_pages: 2, count: 1, total_count: 2 }, - }), + }, { status: 200 }, ), ) .mockResolvedValueOnce( - new Response( - JSON.stringify({ + Response.json( + { success: true, result: [{ uuid: 'b', name: 'two' }], result_info: { page: 2, per_page: 100, total_pages: 2, count: 1, total_count: 2 }, - }), + }, { status: 200 }, ), ); @@ -46,12 +46,12 @@ describe('CloudflareRestClient', () => { it('keeps the existing query string when listing zones', async () => { const fetchMock = vi.fn().mockResolvedValue( - new Response( - JSON.stringify({ + Response.json( + { success: true, result: [{ id: 'z1', name: 'example.com' }], result_info: { page: 1, per_page: 100, total_pages: 1, count: 1, total_count: 1 }, - }), + }, { status: 200 }, ), ); @@ -70,11 +70,11 @@ describe('CloudflareRestClient', () => { it('returns the zone payload from getZone on success', async () => { const fetchMock = vi.fn().mockResolvedValue( - new Response( - JSON.stringify({ + Response.json( + { success: true, result: { id: 'z1', name: 'pages.example.com' }, - }), + }, { status: 200 }, ), ); diff --git a/apps/cloudflare-metrics/src/graphql-client.test.ts b/apps/cloudflare-metrics/src/graphql-client.test.ts index e4ca250..3d292db 100644 --- a/apps/cloudflare-metrics/src/graphql-client.test.ts +++ b/apps/cloudflare-metrics/src/graphql-client.test.ts @@ -145,8 +145,8 @@ describe('CloudflareGraphQLClient', () => { it('sends the bearer token and parses batched dataset rows', async () => { const fetchMock = vi.fn(() => Promise.resolve( - new Response( - JSON.stringify({ + Response.json( + { data: { viewer: { accounts: [ @@ -162,7 +162,7 @@ describe('CloudflareGraphQLClient', () => { }, }, errors: null, - }), + }, { status: 200, headers: { 'Content-Type': 'application/json' } }, ), ), @@ -203,8 +203,8 @@ describe('CloudflareGraphQLClient', () => { it('surfaces per-field errors from a partial GraphQL response', async () => { const fetchMock = vi.fn(() => Promise.resolve( - new Response( - JSON.stringify({ + Response.json( + { data: { viewer: { accounts: [ @@ -221,7 +221,7 @@ describe('CloudflareGraphQLClient', () => { }, }, errors: [{ message: 'no access', path: ['viewer', 'accounts', 0, 'd1_queries'] }], - }), + }, { status: 200 }, ), ), @@ -255,7 +255,7 @@ describe('CloudflareGraphQLClient', () => { account[alias] = []; } return Promise.resolve( - new Response(JSON.stringify({ data: { viewer: { accounts: [account] } }, errors: null }), { status: 200 }), + Response.json({ data: { viewer: { accounts: [account] } }, errors: null }, { status: 200 }), ); }); const client = new CloudflareGraphQLClient( @@ -302,7 +302,7 @@ describe('CloudflareGraphQLClient', () => { ]; } return Promise.resolve( - new Response(JSON.stringify({ data: { viewer: { accounts: [account] } }, errors: null }), { status: 200 }), + Response.json({ data: { viewer: { accounts: [account] } }, errors: null }, { status: 200 }), ); }); const client = new CloudflareGraphQLClient( @@ -334,8 +334,8 @@ describe('CloudflareGraphQLClient', () => { it('batches multiple zones into a single request', async () => { const fetchMock = vi.fn(() => Promise.resolve( - new Response( - JSON.stringify({ + Response.json( + { data: { viewer: { z0: [ @@ -351,7 +351,7 @@ describe('CloudflareGraphQLClient', () => { }, }, errors: null, - }), + }, { status: 200 }, ), ), @@ -402,9 +402,7 @@ describe('CloudflareGraphQLClient', () => { // has something to count. const errors = calls === 2 ? [{ message: 'transient', path: ['viewer', 'accounts', 0, aliases[0] ?? 'ds_0'] }] : null; - return Promise.resolve( - new Response(JSON.stringify({ data: { viewer: { accounts: [account] } }, errors }), { status: 200 }), - ); + return Promise.resolve(Response.json({ data: { viewer: { accounts: [account] } }, errors }, { status: 200 })); }); const client = new CloudflareGraphQLClient( 'tok', diff --git a/apps/cloudflare-metrics/src/handlers/http.ts b/apps/cloudflare-metrics/src/handlers/http.ts index 2da12d8..eb2cd6b 100644 --- a/apps/cloudflare-metrics/src/handlers/http.ts +++ b/apps/cloudflare-metrics/src/handlers/http.ts @@ -77,7 +77,7 @@ const DEFAULT_HEADERS: Record = { }; function jsonResponse(data: unknown, status = 200, extraHeaders: Record = {}) { - return new Response(JSON.stringify(data), { + return Response.json(data, { status, headers: { ...DEFAULT_HEADERS, ...extraHeaders }, }); diff --git a/apps/github-approval-check/src/index.ts b/apps/github-approval-check/src/index.ts index ea973fb..4317fab 100644 --- a/apps/github-approval-check/src/index.ts +++ b/apps/github-approval-check/src/index.ts @@ -19,9 +19,12 @@ export default { // Health check endpoint if (url.pathname === '/health') { - return new Response(JSON.stringify({ status: 'healthy' }), { - headers: { 'Content-Type': 'application/json' }, - }); + return Response.json( + { status: 'healthy' }, + { + headers: { 'Content-Type': 'application/json' }, + }, + ); } // GitHub webhook endpoint diff --git a/apps/hello/src/index.ts b/apps/hello/src/index.ts index 8abe9ea..84a0cfe 100644 --- a/apps/hello/src/index.ts +++ b/apps/hello/src/index.ts @@ -6,12 +6,12 @@ export default { // Handle different routes switch (url.pathname) { case '/': { - return new Response( - JSON.stringify({ + return Response.json( + { message: 'Hello from Immich Worker API!', timestamp: new Date().toISOString(), path: url.pathname, - }), + }, { headers: { 'Content-Type': 'application/json', @@ -22,11 +22,11 @@ export default { } case '/health': { - return new Response( - JSON.stringify({ + return Response.json( + { status: 'healthy', timestamp: new Date().toISOString(), - }), + }, { headers: { 'Content-Type': 'application/json', @@ -38,11 +38,11 @@ export default { case '/api/greet': { const name = url.searchParams.get('name') || 'World'; - return new Response( - JSON.stringify({ + return Response.json( + { greeting: `Hello, ${name}!`, timestamp: new Date().toISOString(), - }), + }, { headers: { 'Content-Type': 'application/json', @@ -53,11 +53,11 @@ export default { } default: { - return new Response( - JSON.stringify({ + return Response.json( + { error: 'Not Found', path: url.pathname, - }), + }, { status: 404, headers: { diff --git a/apps/version/src/index.test.ts b/apps/version/src/index.test.ts index b532235..41bd9df 100644 --- a/apps/version/src/index.test.ts +++ b/apps/version/src/index.test.ts @@ -703,9 +703,12 @@ describe('CDN cache immutable headers fix', () => { const cache = caches.default; const key = new Request('https://example.com/test-immutable-headers'); - const original = new Response(JSON.stringify({ data: 'test' }), { - headers: { 'Content-Type': 'application/json', 'Cache-Control': 'public, max-age=300' }, - }); + const original = Response.json( + { data: 'test' }, + { + headers: { 'Content-Type': 'application/json', 'Cache-Control': 'public, max-age=300' }, + }, + ); await cache.put(key, original.clone()); const cached = await cache.match(key); diff --git a/apps/version/src/index.ts b/apps/version/src/index.ts index 7cd725c..955fbaf 100644 --- a/apps/version/src/index.ts +++ b/apps/version/src/index.ts @@ -14,7 +14,7 @@ const DEFAULT_HEADERS: Record = { }; function jsonResponse(data: unknown, status = 200, extraHeaders: Record = {}) { - return new Response(JSON.stringify(data), { + return Response.json(data, { status, headers: { ...DEFAULT_HEADERS, ...extraHeaders }, }); diff --git a/package.json b/package.json index 1665e05..9c7d652 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "scripts": { "build": "pnpm -r build", "lint": "eslint . --max-warnings 0", - "lint:fix": "pnpm run lint -- --fix", + "lint:fix": "pnpm run lint --fix", "format": "prettier --check .", "format:fix": "prettier --write .", "test": "pnpm -r test", @@ -23,7 +23,7 @@ "eslint": "^9.17.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-prettier": "^5.5.4", - "eslint-plugin-unicorn": "^61.0.2", + "eslint-plugin-unicorn": "^64.0.0", "globals": "^17.0.0", "prettier": "^3.4.2", "prettier-plugin-organize-imports": "^4.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6618ea..36c67ce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,8 +36,8 @@ importers: specifier: ^5.5.4 version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.35.0))(eslint@9.35.0)(prettier@3.6.2) eslint-plugin-unicorn: - specifier: ^61.0.2 - version: 61.0.2(eslint@9.35.0) + specifier: ^64.0.0 + version: 64.0.0(eslint@9.35.0) globals: specifier: ^17.0.0 version: 17.6.0 @@ -94,8 +94,8 @@ importers: packages: - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} '@cloudflare/kv-asset-handler@0.4.0': @@ -663,8 +663,8 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -1427,6 +1427,11 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + baseline-browser-mapping@2.10.29: + resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + engines: {node: '>=6.0.0'} + hasBin: true + before-after-hook@3.0.2: resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} @@ -1449,8 +1454,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.4: - resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1466,8 +1471,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001741: - resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} + caniuse-lite@1.0.30001792: + resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} @@ -1484,8 +1489,8 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - ci-info@4.3.0: - resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} cjs-module-lexer@1.4.3: @@ -1516,8 +1521,8 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} - core-js-compat@3.45.1: - resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} @@ -1549,8 +1554,8 @@ packages: devalue@5.3.2: resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==} - electron-to-chromium@1.5.215: - resolution: {integrity: sha512-TIvGp57UpeNetj/wV/xpFNpWGb0b/ROw372lHPx5Aafx02gjTBtWnEEcaSX3W2dLM3OSdGGyHX/cHl01JQsLaQ==} + electron-to-chromium@1.5.353: + resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} @@ -1605,11 +1610,11 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-unicorn@61.0.2: - resolution: {integrity: sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==} + eslint-plugin-unicorn@64.0.0: + resolution: {integrity: sha512-rNZwalHh8i0UfPlhNwg5BTUO1CMdKNmjqe+TgzOTZnpKoi8VBgsW7u9qCHIdpxEzZ1uwrJrPF0uRb7l//K38gA==} engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: - eslint: '>=9.29.0' + eslint: '>=9.38.0' eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} @@ -1744,10 +1749,6 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.3.0: - resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} - engines: {node: '>=18'} - globals@17.6.0: resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} engines: {node: '>=18'} @@ -1808,11 +1809,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -1864,10 +1860,6 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - miniflare@4.20250906.0: resolution: {integrity: sha512-T/RWn1sa0ien80s6NjU+Un/tj12gR6wqScZoiLeMJDD4/fK0UXfnbWXJDubnUED8Xjm7RPQ5ESYdE+mhPmMtuQ==} engines: {node: '>=18.0.0'} @@ -1896,8 +1888,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-releases@2.0.20: - resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==} + node-releases@2.0.44: + resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -1989,8 +1981,8 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + regjsparser@0.13.1: + resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} hasBin: true resolve-from@4.0.0: @@ -2050,8 +2042,8 @@ packages: resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} engines: {node: '>=4', npm: '>=6'} - strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} strip-json-comments@3.1.1: @@ -2154,8 +2146,8 @@ packages: universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -2310,7 +2302,7 @@ packages: snapshots: - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} '@cloudflare/kv-asset-handler@0.4.0': dependencies: @@ -2621,7 +2613,7 @@ snapshots: '@esbuild/win32-x64@0.27.0': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@9.35.0)': dependencies: eslint: 9.35.0 eslint-visitor-keys: 3.4.3 @@ -3292,7 +3284,7 @@ snapshots: '@typescript-eslint/utils@8.43.0(eslint@9.35.0)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.35.0) '@typescript-eslint/scope-manager': 8.43.0 '@typescript-eslint/types': 8.43.0 '@typescript-eslint/typescript-estree': 8.43.0(typescript@6.0.3) @@ -3375,6 +3367,8 @@ snapshots: balanced-match@1.0.2: {} + baseline-browser-mapping@2.10.29: {} + before-after-hook@3.0.2: {} before-after-hook@4.0.0: {} @@ -3396,12 +3390,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.4: + browserslist@4.28.2: dependencies: - caniuse-lite: 1.0.30001741 - electron-to-chromium: 1.5.215 - node-releases: 2.0.20 - update-browserslist-db: 1.1.3(browserslist@4.25.4) + baseline-browser-mapping: 2.10.29 + caniuse-lite: 1.0.30001792 + electron-to-chromium: 1.5.353 + node-releases: 2.0.44 + update-browserslist-db: 1.2.3(browserslist@4.28.2) builtin-modules@5.0.0: {} @@ -3409,7 +3404,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001741: {} + caniuse-lite@1.0.30001792: {} chai@5.3.3: dependencies: @@ -3428,7 +3423,7 @@ snapshots: check-error@2.1.1: {} - ci-info@4.3.0: {} + ci-info@4.4.0: {} cjs-module-lexer@1.4.3: {} @@ -3456,9 +3451,9 @@ snapshots: cookie@1.1.1: {} - core-js-compat@3.45.1: + core-js-compat@3.49.0: dependencies: - browserslist: 4.25.4 + browserslist: 4.28.2 cross-spawn@7.0.6: dependencies: @@ -3480,7 +3475,7 @@ snapshots: devalue@5.3.2: {} - electron-to-chromium@1.5.215: {} + electron-to-chromium@1.5.353: {} error-stack-parser-es@1.0.5: {} @@ -3591,27 +3586,25 @@ snapshots: optionalDependencies: eslint-config-prettier: 10.1.8(eslint@9.35.0) - eslint-plugin-unicorn@61.0.2(eslint@9.35.0): + eslint-plugin-unicorn@64.0.0(eslint@9.35.0): dependencies: - '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) - '@eslint/plugin-kit': 0.3.5 + '@babel/helper-validator-identifier': 7.28.5 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.35.0) change-case: 5.4.4 - ci-info: 4.3.0 + ci-info: 4.4.0 clean-regexp: 1.0.0 - core-js-compat: 3.45.1 + core-js-compat: 3.49.0 eslint: 9.35.0 - esquery: 1.6.0 find-up-simple: 1.0.1 - globals: 16.3.0 + globals: 17.6.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 pluralize: 8.0.0 regexp-tree: 0.1.27 - regjsparser: 0.12.0 + regjsparser: 0.13.1 semver: 7.7.4 - strip-indent: 4.0.0 + strip-indent: 4.1.1 eslint-scope@8.4.0: dependencies: @@ -3624,7 +3617,7 @@ snapshots: eslint@9.35.0: dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.35.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 @@ -3755,8 +3748,6 @@ snapshots: globals@14.0.0: {} - globals@16.3.0: {} - globals@17.6.0: {} graphemer@1.4.0: {} @@ -3798,8 +3789,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@3.0.2: {} - jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -3840,8 +3829,6 @@ snapshots: mime@3.0.0: {} - min-indent@1.0.1: {} - miniflare@4.20250906.0: dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -3892,7 +3879,7 @@ snapshots: natural-compare@1.4.0: {} - node-releases@2.0.20: {} + node-releases@2.0.44: {} ohash@2.0.11: {} @@ -3960,9 +3947,9 @@ snapshots: regexp-tree@0.1.27: {} - regjsparser@0.12.0: + regjsparser@0.13.1: dependencies: - jsesc: 3.0.2 + jsesc: 3.1.0 resolve-from@4.0.0: {} @@ -4078,9 +4065,7 @@ snapshots: stoppable@1.1.0: {} - strip-indent@4.0.0: - dependencies: - min-indent: 1.0.1 + strip-indent@4.1.1: {} strip-json-comments@3.1.1: {} @@ -4167,9 +4152,9 @@ snapshots: universal-user-agent@7.0.3: {} - update-browserslist-db@1.1.3(browserslist@4.25.4): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.25.4 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1