foxts 5.2.1 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";var e=require("../abort-error/index.js"),t=require("../extract-error-message/index.js"),r=require("../is-network-error/index.js"),o=require("../noop/index.js");const{round:n}=Math,i=Error,s=TypeError;function a(e,t,r=0,o=!1){if(Number.isNaN(t))throw new s(`Expected \`${e}\` to be a valid number${o?" or Infinity":""}, got NaN.`);if(!o&&!Number.isFinite(t))throw new s(`Expected \`${e}\` to be a finite number.`);if(t<r)throw new s(`Expected \`${e}\` to be \u2265 ${r}.`)}class c extends i{name="AsyncRetryAbortError";cause;constructor(e){if(super("string"==typeof e?e:t.extractErrorMessage(e,!1)??"Aborted"),"string"==typeof e){const t=new i(e);t.stack=this.stack,this.cause=t}else e instanceof i?(this.cause=e,this.message=e.message):this.cause=e}}async function u(t,o,i,a,u){if(t instanceof c)throw t.cause;if(t instanceof s&&!r.isNetworkError(t)||e.isAbortErrorLike(t))throw t;const m=i.retries-(o-1),f={error:t,attemptNumber:o,retriesLeft:m};await i.onFailedAttempt(f),o>1&&await i.onRetry(t,o-1);const w=Date.now();if(w-a>=u||o>=i.retries+1||!await i.shouldRetry(f))throw t;let h=n((i.randomize?Math.random()+1:1)*i.minTimeout*i.factor**(o-1));h>i.maxTimeout&&(h=i.maxTimeout);const d=u-(w-a);if(d<=0)throw t;let b=h;h>d&&(b=d),b>0&&await new Promise((e,t)=>{const r=setTimeout(()=>{i.signal?.removeEventListener("abort",o),e()},b);function o(){clearTimeout(r),i.signal?.removeEventListener("abort",o),t(i.signal?.reason)}i.unref&&"object"==typeof r&&"unref"in r&&"function"==typeof r.unref&&r.unref(),i.signal?.addEventListener("abort",o,{once:!0})}),i.signal?.throwIfAborted()}function m(e){throw new c(e??"Aborted")}async function f(e,t={}){t.signal?.throwIfAborted();const r={...t};r.retries??=10,r.forever??=!1,r.factor??=2,r.minTimeout??=1e3,r.maxTimeout??=1/0,r.randomize??=!0,r.onFailedAttempt??=o.noop,r.onRetry??=o.noop,r.shouldRetry??=o.trueFn,r.forever&&(r.retries=1/0),a("retries",r.retries,0,!0),a("factor",r.factor,0,!1),a("minTimeout",r.minTimeout,0,!1),a("maxTimeout",r.maxTimeout,0,!0);const n=r.maxRetryTime??1/0;a("maxRetryTime",n,0,!0),r.minTimeout<1&&(r.minTimeout=1),r.factor<=0&&(r.factor=1);let s=0;const w=Date.now();for(;s<r.retries+1;){s++;try{r.signal?.throwIfAborted();const t=await e(m,s);return r.signal?.throwIfAborted(),t}catch(t){let e=t;"object"==typeof t&&t&&"bail"in t&&t.bail&&(e=new c(t)),await u(e,s,r,w,n)}}throw new i("Retry attempts exhausted without throwing an error.")}exports.AsyncRetryAbortError=c,exports.asyncRetry=f,exports.makeRetriable=function(e,t){return function(...r){return f(()=>e.apply(this,r),t)}};
1
+ "use strict";var t=require("../abort-error/index.js"),e=require("../extract-error-message/index.js"),r=require("../is-network-error/index.js"),o=require("../noop/index.js"),i=require("../wait/index.js");const{round:n}=Math,a=Error,s=TypeError;function c(t,e,r=0,o=!1){if(Number.isNaN(e))throw new s(`Expected \`${t}\` to be a valid number${o?" or Infinity":""}, got NaN.`);if(!o&&!Number.isFinite(e))throw new s(`Expected \`${t}\` to be a finite number.`);if(e<r)throw new s(`Expected \`${t}\` to be \u2265 ${r}.`)}class u extends a{name="AsyncRetryAbortError";cause;constructor(t){if(super("string"==typeof t?t:e.extractErrorMessage(t,!1)??"Aborted"),"string"==typeof t){const e=new a(t);e.stack=this.stack,this.cause=e}else t instanceof a?(this.cause=t,this.message=t.message):this.cause=t}}async function m(e,o,a,c,m){if(e instanceof u)throw e.cause;if(e instanceof s&&!r.isNetworkError(e)||t.isAbortErrorLike(e))throw e;const f=a.retries-(o-1),w={error:e,attemptNumber:o,retriesLeft:f};await a.onFailedAttempt(w),o>1&&await a.onRetry(e,o-1);const h=Date.now();if(h-c>=m||o>=a.retries+1||!await a.shouldRetry(w))throw e;let d=n((a.randomize?Math.random()+1:1)*a.minTimeout*a.factor**(o-1));d>a.maxTimeout&&(d=a.maxTimeout);const b=m-(h-c);if(b<=0)throw e;let x=d;d>b&&(x=b),x>0&&await i.waitWithAbort(x,a.signal,a.unref),a.signal?.throwIfAborted()}function f(t){throw new u(t??"Aborted")}async function w(t,e={}){e.signal?.throwIfAborted();const r={...e};r.retries??=10,r.forever??=!1,r.factor??=2,r.minTimeout??=1e3,r.maxTimeout??=1/0,r.randomize??=!0,r.onFailedAttempt??=o.noop,r.onRetry??=o.noop,r.shouldRetry??=o.trueFn,r.forever&&(r.retries=1/0),c("retries",r.retries,0,!0),c("factor",r.factor,0,!1),c("minTimeout",r.minTimeout,0,!1),c("maxTimeout",r.maxTimeout,0,!0);const i=r.maxRetryTime??1/0;c("maxRetryTime",i,0,!0),r.minTimeout<1&&(r.minTimeout=1),r.factor<=0&&(r.factor=1);let n=0;const s=Date.now();for(;n<r.retries+1;){n++;try{r.signal?.throwIfAborted();const e=await t(f,n);return r.signal?.throwIfAborted(),e}catch(e){let t=e;"object"==typeof e&&e&&"bail"in e&&e.bail&&(t=new u(e)),await m(t,n,r,s,i)}}throw new a("Retry attempts exhausted without throwing an error.")}exports.AsyncRetryAbortError=u,exports.asyncRetry=w,exports.makeRetriable=function(t,e){return function(...r){return w(()=>t.apply(this,r),e)}};
@@ -1 +1 @@
1
- import{isAbortErrorLike as t}from"../abort-error/index.mjs";import{extractErrorMessage as e}from"../extract-error-message/index.mjs";import{isNetworkError as r}from"../is-network-error/index.mjs";import{noop as o,trueFn as n}from"../noop/index.mjs";const{round:i}=Math,a=Error,s=TypeError;function m(t,e,r=0,o=!1){if(Number.isNaN(e))throw new s(`Expected \`${t}\` to be a valid number${o?" or Infinity":""}, got NaN.`);if(!o&&!Number.isFinite(e))throw new s(`Expected \`${t}\` to be a finite number.`);if(e<r)throw new s(`Expected \`${t}\` to be \u2265 ${r}.`)}class c extends a{name="AsyncRetryAbortError";cause;constructor(t){if(super("string"==typeof t?t:e(t,!1)??"Aborted"),"string"==typeof t){const e=new a(t);e.stack=this.stack,this.cause=e}else t instanceof a?(this.cause=t,this.message=t.message):this.cause=t}}async function f(e,o,n,a,m){if(e instanceof c)throw e.cause;if(e instanceof s&&!r(e)||t(e))throw e;const f=n.retries-(o-1),u={error:e,attemptNumber:o,retriesLeft:f};await n.onFailedAttempt(u),o>1&&await n.onRetry(e,o-1);const w=Date.now();if(w-a>=m||o>=n.retries+1||!await n.shouldRetry(u))throw e;let h=i((n.randomize?Math.random()+1:1)*n.minTimeout*n.factor**(o-1));h>n.maxTimeout&&(h=n.maxTimeout);const d=m-(w-a);if(d<=0)throw e;let b=h;h>d&&(b=d),b>0&&await new Promise((t,e)=>{const r=setTimeout(()=>{n.signal?.removeEventListener("abort",o),t()},b);function o(){clearTimeout(r),n.signal?.removeEventListener("abort",o),e(n.signal?.reason)}n.unref&&"object"==typeof r&&"unref"in r&&"function"==typeof r.unref&&r.unref(),n.signal?.addEventListener("abort",o,{once:!0})}),n.signal?.throwIfAborted()}function u(t){throw new c(t??"Aborted")}async function w(t,e={}){e.signal?.throwIfAborted();const r={...e};r.retries??=10,r.forever??=!1,r.factor??=2,r.minTimeout??=1e3,r.maxTimeout??=1/0,r.randomize??=!0,r.onFailedAttempt??=o,r.onRetry??=o,r.shouldRetry??=n,r.forever&&(r.retries=1/0),m("retries",r.retries,0,!0),m("factor",r.factor,0,!1),m("minTimeout",r.minTimeout,0,!1),m("maxTimeout",r.maxTimeout,0,!0);const i=r.maxRetryTime??1/0;m("maxRetryTime",i,0,!0),r.minTimeout<1&&(r.minTimeout=1),r.factor<=0&&(r.factor=1);let s=0;const h=Date.now();for(;s<r.retries+1;){s++;try{r.signal?.throwIfAborted();const e=await t(u,s);return r.signal?.throwIfAborted(),e}catch(e){let t=e;"object"==typeof e&&e&&"bail"in e&&e.bail&&(t=new c(e)),await f(t,s,r,h,i)}}throw new a("Retry attempts exhausted without throwing an error.")}function h(t,e){return function(...r){return w(()=>t.apply(this,r),e)}}export{c as AsyncRetryAbortError,w as asyncRetry,h as makeRetriable};
1
+ import{isAbortErrorLike as t}from"../abort-error/index.mjs";import{extractErrorMessage as e}from"../extract-error-message/index.mjs";import{isNetworkError as r}from"../is-network-error/index.mjs";import{noop as o,trueFn as i}from"../noop/index.mjs";import{waitWithAbort as n}from"../wait/index.mjs";const{round:a}=Math,s=Error,m=TypeError;function c(t,e,r=0,o=!1){if(Number.isNaN(e))throw new m(`Expected \`${t}\` to be a valid number${o?" or Infinity":""}, got NaN.`);if(!o&&!Number.isFinite(e))throw new m(`Expected \`${t}\` to be a finite number.`);if(e<r)throw new m(`Expected \`${t}\` to be \u2265 ${r}.`)}class f extends s{name="AsyncRetryAbortError";cause;constructor(t){if(super("string"==typeof t?t:e(t,!1)??"Aborted"),"string"==typeof t){const e=new s(t);e.stack=this.stack,this.cause=e}else t instanceof s?(this.cause=t,this.message=t.message):this.cause=t}}async function u(e,o,i,s,c){if(e instanceof f)throw e.cause;if(e instanceof m&&!r(e)||t(e))throw e;const u=i.retries-(o-1),w={error:e,attemptNumber:o,retriesLeft:u};await i.onFailedAttempt(w),o>1&&await i.onRetry(e,o-1);const h=Date.now();if(h-s>=c||o>=i.retries+1||!await i.shouldRetry(w))throw e;let d=a((i.randomize?Math.random()+1:1)*i.minTimeout*i.factor**(o-1));d>i.maxTimeout&&(d=i.maxTimeout);const y=c-(h-s);if(y<=0)throw e;let b=d;d>y&&(b=y),b>0&&await n(b,i.signal,i.unref),i.signal?.throwIfAborted()}function w(t){throw new f(t??"Aborted")}async function h(t,e={}){e.signal?.throwIfAborted();const r={...e};r.retries??=10,r.forever??=!1,r.factor??=2,r.minTimeout??=1e3,r.maxTimeout??=1/0,r.randomize??=!0,r.onFailedAttempt??=o,r.onRetry??=o,r.shouldRetry??=i,r.forever&&(r.retries=1/0),c("retries",r.retries,0,!0),c("factor",r.factor,0,!1),c("minTimeout",r.minTimeout,0,!1),c("maxTimeout",r.maxTimeout,0,!0);const n=r.maxRetryTime??1/0;c("maxRetryTime",n,0,!0),r.minTimeout<1&&(r.minTimeout=1),r.factor<=0&&(r.factor=1);let a=0;const m=Date.now();for(;a<r.retries+1;){a++;try{r.signal?.throwIfAborted();const e=await t(w,a);return r.signal?.throwIfAborted(),e}catch(e){let t=e;"object"==typeof e&&e&&"bail"in e&&e.bail&&(t=new f(e)),await u(t,a,r,m,n)}}throw new s("Retry attempts exhausted without throwing an error.")}function d(t,e){return function(...r){return h(()=>t.apply(this,r),e)}}export{f as AsyncRetryAbortError,h as asyncRetry,d as makeRetriable};
@@ -1 +1 @@
1
- "use strict";const e=Object.prototype.toString,r=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]),t=new Set(["ETIMEDOUT","ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET","UND_ERR_HEADERS_TIMEOUT"]);exports.isNetworkError=function(o){if("object"!=typeof o||null==o)return!1;if("code"in o&&"string"==typeof o.code){if("ERR_UNESCAPED_CHARACTERS"===o.code)return!1;if(t.has(o.code))return!0}if(!(o&&"[object Error]"===e.call(o)&&"TypeError"===o.name&&"string"==typeof o.message))return!1;const{message:n,stack:E}=o;return"Load failed"===n?void 0===E||"__sentry_captured__"in o:!!n.startsWith("error sending request for url")||r.has(n)};
1
+ "use strict";const e=Object.prototype.toString,t=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]),r=new Set(["ETIMEDOUT","ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET","UND_ERR_HEADERS_TIMEOUT"]);exports.isNetworkError=function(o){if("object"!=typeof o||null==o)return!1;if("code"in o&&"string"==typeof o.code){if("ERR_UNESCAPED_CHARACTERS"===o.code)return!1;if(r.has(o.code))return!0}if(!(o&&"[object Error]"===e.call(o)&&"TypeError"===o.name&&"string"==typeof o.message))return!1;const{message:n,stack:E}=o;return"Load failed"===n?void 0===E||"__sentry_captured__"in o:!!(n.startsWith("error sending request for url")||"Failed to fetch"===n||n.startsWith("Failed to fetch (")&&n.endsWith(")"))||t.has(n)};
@@ -1 +1 @@
1
- const e=Object.prototype.toString,r=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]),t=new Set(["ETIMEDOUT","ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET","UND_ERR_HEADERS_TIMEOUT"]);function o(o){if("object"!=typeof o||null==o)return!1;if("code"in o&&"string"==typeof o.code){if("ERR_UNESCAPED_CHARACTERS"===o.code)return!1;if(t.has(o.code))return!0}if(!(o&&"[object Error]"===e.call(o)&&"TypeError"===o.name&&"string"==typeof o.message))return!1;const{message:n,stack:E}=o;return"Load failed"===n?void 0===E||"__sentry_captured__"in o:!!n.startsWith("error sending request for url")||r.has(n)}export{o as isNetworkError};
1
+ const e=Object.prototype.toString,t=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]),r=new Set(["ETIMEDOUT","ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET","UND_ERR_HEADERS_TIMEOUT"]);function o(o){if("object"!=typeof o||null==o)return!1;if("code"in o&&"string"==typeof o.code){if("ERR_UNESCAPED_CHARACTERS"===o.code)return!1;if(r.has(o.code))return!0}if(!(o&&"[object Error]"===e.call(o)&&"TypeError"===o.name&&"string"==typeof o.message))return!1;const{message:n,stack:E}=o;return"Load failed"===n?void 0===E||"__sentry_captured__"in o:!!(n.startsWith("error sending request for url")||"Failed to fetch"===n||n.startsWith("Failed to fetch (")&&n.endsWith(")"))||t.has(n)}export{o as isNetworkError};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Resolve mapped types and show the derived keys and their types when hovering in
3
+ * VS Code, instead of just showing the names those mapped types are defined with.
4
+ */
5
+ type DeepMutableWithPrettify<T> = {
6
+ -readonly [P in keyof T]: DeepMutableWithPrettify<T[P]>;
7
+ } & {};
8
+ /**
9
+ * When you are returning some object/array literal from a function,
10
+ * TypeScript automatically widens the array to be more general, like
11
+ * ['sukka'] becomes string[].
12
+ *
13
+ * TypeScript does this to allow returned arrays to be extensible,
14
+ * but it may break the type inference.
15
+ *
16
+ * You can use `foxts/literal` to wrap your array to prevent TypeScript
17
+ * from widening the type in function return values.
18
+ *
19
+ * Playground Link: https://www.typescriptlang.org/play/?declaration=false&jsx=0#code/C4TwDgpgBAIhFgLIFdgEMBGAbCB1AlsABYAKAThMMPgGYgA8AKgHxQC8UA3gFBRQC0FNABMA9gDssIKAG0SUfOKgBrCCFE0ojALoAuWPCSpMOAsXKVqdJnO3MA3NwC+UAGRcnjiAA8wossBQAMYSAM6BWIQQZGhY7FD0IeLhWswAFABu+owAlPpwCCjo2HiEpBRUtAws7KwZjtygkFAAyujAyKEA8hgAVhBBgRycUOFoHaH6AIJkMQwA5KLK81AAPlCLomCh86ye3DTI4oP4EsFEA8ppimCo+m3jnT39gzlcwWGiOAB0WKIA5tdxLdgG99twAPQQhSSRTQUR9AaBADu+CwcQw8OU3CCFyCVxGYwm+hki2W2igThyDShUARL0CNDIogAtlBDsdqGcKsgyEpUej2Wg0TiwoEMPE0m82Kw0oT2p0SWT5hSqY5cZc0hgpdTuJDoRhUFBiPhQnTxNABRisaLkoEgpLpbL5Y9JlBIsBorE0qSliqwbqNfi0kEdTToSazRJLWjrXTlAAaY2iUS2lLCR21d1RGJYOWjBVu33kymBvFXYRhoA
20
+ */
21
+ declare const literal: <const T extends object>(v: T) => DeepMutableWithPrettify<T>;
22
+
23
+ export { literal };
@@ -0,0 +1 @@
1
+ "use strict";exports.literal=t=>t;
@@ -0,0 +1 @@
1
+ const t=t=>t;export{t as literal};
@@ -1,4 +1,4 @@
1
- declare function wait(ms: number): Promise<void>;
2
- declare function waitWithAbort(ms: number, signal: AbortSignal): Promise<void>;
1
+ declare function wait(ms: number, timerUnref?: boolean): Promise<void>;
2
+ declare function waitWithAbort(ms: number, signal: AbortSignal | undefined | null, timerUnref?: boolean): Promise<void>;
3
3
 
4
4
  export { wait, waitWithAbort };
@@ -1 +1 @@
1
- "use strict";exports.wait=function(e){return new Promise(t=>{setTimeout(t,e)})},exports.waitWithAbort=function(e,t){return new Promise((r,o)=>{if(t.aborted)return void o(t.reason);const n=setTimeout(()=>{t.removeEventListener("abort",i),r()},e);function i(){clearTimeout(n),t.removeEventListener("abort",i),o(t.reason)}t.addEventListener("abort",i)})};
1
+ "use strict";function e(t,n=!1){return new Promise(e=>{const o=setTimeout(e,t);n&&"object"==typeof o&&"unref"in o&&"function"==typeof o.unref&&o.unref()})}exports.wait=e,exports.waitWithAbort=function(t,n,o=!1){return n?new Promise((e,r)=>{if(n.aborted)return void r(n.reason);const i=setTimeout(()=>{n.removeEventListener("abort",u),e(),o&&"object"==typeof i&&"unref"in i&&"function"==typeof i.unref&&i.unref()},t);function u(){clearTimeout(i),n?.removeEventListener("abort",u),r(n?.reason)}n.addEventListener("abort",u,{once:!0})}):e(t,o)};
@@ -1 +1 @@
1
- function e(e){return new Promise(t=>{setTimeout(t,e)})}function t(e,t){return new Promise((r,n)=>{if(t.aborted)return void n(t.reason);const o=setTimeout(()=>{t.removeEventListener("abort",i),r()},e);function i(){clearTimeout(o),t.removeEventListener("abort",i),n(t.reason)}t.addEventListener("abort",i)})}export{e as wait,t as waitWithAbort};
1
+ function e(t,n=!1){return new Promise(e=>{const o=setTimeout(e,t);n&&"object"==typeof o&&"unref"in o&&"function"==typeof o.unref&&o.unref()})}function t(n,o,r=!1){return o?new Promise((e,t)=>{if(o.aborted)return void t(o.reason);const i=setTimeout(()=>{o.removeEventListener("abort",u),e(),r&&"object"==typeof i&&"unref"in i&&"function"==typeof i.unref&&i.unref()},n);function u(){clearTimeout(i),o?.removeEventListener("abort",u),t(o?.reason)}o.addEventListener("abort",u,{once:!0})}):e(n,r)}export{e as wait,t as waitWithAbort};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foxts",
3
- "version": "5.2.1",
3
+ "version": "5.4.0",
4
4
  "description": "Opinionated collection of common TypeScript utils by @SukkaW",
5
5
  "repository": {
6
6
  "url": "https://github.com/SukkaW/foxts"
@@ -220,6 +220,12 @@
220
220
  "require": "./dist/lazy-value/index.js",
221
221
  "default": "./dist/lazy-value/index.js"
222
222
  },
223
+ "./literal": {
224
+ "types": "./dist/literal/index.d.ts",
225
+ "import": "./dist/literal/index.mjs",
226
+ "require": "./dist/literal/index.js",
227
+ "default": "./dist/literal/index.js"
228
+ },
223
229
  "./merge-headers": {
224
230
  "types": "./dist/merge-headers/index.d.ts",
225
231
  "import": "./dist/merge-headers/index.mjs",
@@ -326,31 +332,31 @@
326
332
  "author": "SukkaW <https://skk.moe>",
327
333
  "license": "MIT",
328
334
  "devDependencies": {
329
- "@eslint-sukka/node": "^8.3.0",
330
- "@happy-dom/global-registrator": "^20.3.7",
335
+ "@eslint-sukka/node": "^8.7.0",
336
+ "@happy-dom/global-registrator": "^20.7.0",
331
337
  "@istanbuljs/nyc-config-typescript": "^1.0.2",
332
338
  "@mitata/counters": "^0.0.8",
333
- "@monyone/aho-corasick": "^1.1.5",
339
+ "@monyone/aho-corasick": "^1.1.6",
334
340
  "@package-json/types": "^0.0.12",
335
341
  "@swc-node/register": "^1.11.1",
336
- "@swc/core": "^1.15.10",
342
+ "@swc/core": "^1.15.17",
337
343
  "@types/mocha": "^10.0.10",
338
- "@types/node": "^22.19.7",
344
+ "@types/node": "^22.19.13",
339
345
  "@types/sinon": "^21.0.0",
340
- "bumpp": "^10.4.0",
341
- "eslint": "^9.39.2",
342
- "eslint-config-sukka": "^8.3.0",
343
- "eslint-formatter-sukka": "^8.3.0",
344
- "expect": "^30.2.0",
346
+ "bumpp": "^10.4.1",
347
+ "earl": "^2.0.0",
348
+ "eslint": "^9.39.3",
349
+ "eslint-config-sukka": "^8.7.0",
350
+ "eslint-formatter-sukka": "^8.7.0",
345
351
  "fastscan": "^1.0.6",
346
- "happy-dom": "^20.3.7",
352
+ "happy-dom": "^20.7.0",
347
353
  "is-ci": "^4.1.0",
348
- "is-network-error": "^1.3.0",
354
+ "is-network-error": "^1.3.1",
349
355
  "mitata": "^1.0.34",
350
356
  "mocha": "^11.7.5",
351
357
  "modern-ahocorasick": "^2.0.4",
352
358
  "nyc": "^17.1.0",
353
- "rollup": "^4.56.0",
359
+ "rollup": "^4.59.0",
354
360
  "rollup-plugin-dts": "^6.3.0",
355
361
  "rollup-plugin-oxc-resolve": "^0.0.5",
356
362
  "rollup-plugin-swc3": "^0.12.1",