diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index 569e62b..027ca3d 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -1,5 +1,5 @@ -import DefaultTheme from "vitepress/theme"; import type { Theme } from "vitepress"; +import DefaultTheme from "vitepress/theme"; import "./custom.css"; const theme: Theme = { diff --git a/packages/core/src/adapters/download.ts b/packages/core/src/adapters/download.ts index 3bc51eb..131ae1e 100644 --- a/packages/core/src/adapters/download.ts +++ b/packages/core/src/adapters/download.ts @@ -1,9 +1,9 @@ import statuses from "statuses"; -import { settle } from "../core/settle"; +import type { UnCancelTokenListener } from "../core/UnCancelToken"; import { UnCanceledError } from "../core/UnCanceledError"; +import { settle } from "../core/settle"; +import type { UnConfig, UnData, UnResponse } from "../types"; import { buildDownloadConfig } from "../utils"; -import { UnCancelTokenListener } from "../core/UnCancelToken"; -import type { UnData, UnConfig, UnResponse } from "../types"; export const downloadAdapter = ( config: UnConfig, @@ -102,8 +102,8 @@ export const downloadAdapter = ( if (!task) { return; } - // @ts-expect-error no types reject( + // @ts-expect-error type not existed !cancel || cancel.type ? new UnCanceledError(undefined, config, task) : cancel, @@ -113,9 +113,8 @@ export const downloadAdapter = ( }; cancelToken?.subscribe(onCanceled); - // @ts-expect-error no types signal?.aborted - ? onCanceled() - : signal?.addEventListener("abort", onCanceled); + ? onCanceled({}) + : signal?.addEventListener?.("abort", onCanceled); } }); diff --git a/packages/core/src/adapters/request.ts b/packages/core/src/adapters/request.ts index 3b58c03..d5941a1 100644 --- a/packages/core/src/adapters/request.ts +++ b/packages/core/src/adapters/request.ts @@ -1,9 +1,9 @@ import statuses from "statuses"; -import { settle } from "../core/settle"; +import type { UnCancelTokenListener } from "../core/UnCancelToken"; import { UnCanceledError } from "../core/UnCanceledError"; +import { settle } from "../core/settle"; +import type { UnConfig, UnData, UnResponse } from "../types"; import { buildRequestConfig } from "../utils"; -import { UnCancelTokenListener } from "../core/UnCancelToken"; -import type { UnData, UnConfig, UnResponse } from "../types"; export const requestAdapter = ( config: UnConfig, @@ -95,8 +95,8 @@ export const requestAdapter = ( if (!task) { return; } - // @ts-expect-error no types reject( + // @ts-expect-error type not existed !cancel || cancel.type ? new UnCanceledError(undefined, config, task) : cancel, @@ -106,9 +106,8 @@ export const requestAdapter = ( }; cancelToken?.subscribe(onCanceled); - // @ts-expect-error no types signal?.aborted - ? onCanceled() - : signal?.addEventListener("abort", onCanceled); + ? onCanceled({}) + : signal?.addEventListener?.("abort", onCanceled); } }); diff --git a/packages/core/src/adapters/upload.ts b/packages/core/src/adapters/upload.ts index 3ff90ab..d0d6c8a 100644 --- a/packages/core/src/adapters/upload.ts +++ b/packages/core/src/adapters/upload.ts @@ -1,9 +1,9 @@ import statuses from "statuses"; -import { settle } from "../core/settle"; +import type { UnCancelTokenListener } from "../core/UnCancelToken"; import { UnCanceledError } from "../core/UnCanceledError"; +import { settle } from "../core/settle"; +import type { UnConfig, UnData, UnResponse } from "../types"; import { buildUploadConfig } from "../utils"; -import { UnCancelTokenListener } from "../core/UnCancelToken"; -import type { UnData, UnConfig, UnResponse } from "../types"; export const uploadAdapter = (config: UnConfig) => new Promise>((resolve, reject) => { @@ -96,8 +96,8 @@ export const uploadAdapter = (config: UnConfig) => if (!task) { return; } - // @ts-expect-error no types reject( + // @ts-expect-error type not existed !cancel || cancel.type ? new UnCanceledError(undefined, config, task) : cancel, @@ -107,9 +107,8 @@ export const uploadAdapter = (config: UnConfig) => }; cancelToken?.subscribe(onCanceled); - // @ts-expect-error no types signal?.aborted - ? onCanceled() - : signal?.addEventListener("abort", onCanceled); + ? onCanceled({}) + : signal?.addEventListener?.("abort", onCanceled); } }); diff --git a/packages/core/src/composables.ts b/packages/core/src/composables.ts index 27b2112..38832e2 100644 --- a/packages/core/src/composables.ts +++ b/packages/core/src/composables.ts @@ -1,14 +1,14 @@ +import { noop, until } from "@vueuse/core"; import type { Ref, ShallowRef } from "vue-demi"; import { ref, shallowRef } from "vue-demi"; -import { noop, until } from "@vueuse/core"; import type { - UnInstance, - UnResponse, UnCancelTokenSource, UnConfig, UnData, + UnInstance, + UnResponse, } from "./index"; -import { un, UnError } from "./index"; +import { UnError, un } from "./index"; /** Align with v10.8.0 */ @@ -187,6 +187,7 @@ export function useUn, D = any>( .then(() => (error.value ? reject(error.value) : resolve(result))); }); const promise = { + // biome-ignore lint/suspicious/noThenProperty: then: (...args) => waitUntilFinished().then(...args), catch: (...args) => waitUntilFinished().catch(...args), } as Promise>; diff --git a/packages/core/src/core/Un.ts b/packages/core/src/core/Un.ts index 452a6fe..08f9d9c 100644 --- a/packages/core/src/core/Un.ts +++ b/packages/core/src/core/Un.ts @@ -1,9 +1,9 @@ -import { buildFullPath, buildUrl, mergeConfig } from "../utils"; import type { UnConfig, UnData, UnResponse } from "../types"; +import { buildFullPath, buildUrl, mergeConfig } from "../utils"; import { UnInterceptorManager, - UnInterceptorManagerHandlerFulfilled, - UnInterceptorManagerHandlerRejected, + type UnInterceptorManagerHandlerFulfilled, + type UnInterceptorManagerHandlerRejected, } from "./UnInterceptorManager"; import { dispatchRequest } from "./dispatchRequest"; @@ -141,10 +141,13 @@ export class Un { return await this._request(configOrUrl, config); } catch (error) { if (error instanceof Error) { + // biome-ignore lint/suspicious/noImplicitAnyLet: let dummy; Error.captureStackTrace - ? Error.captureStackTrace((dummy = {})) - : (dummy = new Error()); + ? // biome-ignore lint/suspicious/noAssignInExpressions: + Error.captureStackTrace((dummy = {})) + : // biome-ignore lint/suspicious/noAssignInExpressions: + (dummy = new Error()); // slice off the Error: ... line const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, "") : ""; if (!error.stack) { @@ -154,7 +157,7 @@ export class Un { stack && !String(error.stack).endsWith(stack.replace(/^.+\n.+\n/, "")) ) { - error.stack += "\n" + stack; + error.stack += `\n${stack}`; } } throw error; diff --git a/packages/core/src/core/UnCancelToken.test.ts b/packages/core/src/core/UnCancelToken.test.ts index d4a4068..797b21c 100644 --- a/packages/core/src/core/UnCancelToken.test.ts +++ b/packages/core/src/core/UnCancelToken.test.ts @@ -1,8 +1,9 @@ -import { describe, it, expect } from "vitest"; -import { noop } from "@modyqyw/utils"; -import { UnCancelToken, UnCanceler } from "./UnCancelToken"; +import { describe, expect, it } from "vitest"; +import { UnCancelToken, type UnCanceler } from "./UnCancelToken"; import { UnCanceledError } from "./UnCanceledError"; +function noop() {} + describe("core:UnCancelToken", () => { describe("constructor", () => { it("throws when executor is not specified", () => { diff --git a/packages/core/src/core/UnCancelToken.ts b/packages/core/src/core/UnCancelToken.ts index b2443cc..616253e 100644 --- a/packages/core/src/core/UnCancelToken.ts +++ b/packages/core/src/core/UnCancelToken.ts @@ -9,13 +9,15 @@ export interface UnCancelStatic { new (message?: string): UnCancel; } -export interface UnCanceler { - (message?: string, config?: UnConfig, task?: UnTask): void; -} +export type UnCanceler = ( + message?: string, + config?: UnConfig, + task?: UnTask, +) => void; -export interface UnCancelTokenListener { - (reason: UnCancel | PromiseLike): void; -} +export type UnCancelTokenListener = ( + reason: UnCancel | PromiseLike, +) => void; export interface UnCancelTokenSource { token: UnCancelToken; @@ -51,6 +53,7 @@ export class UnCancelToken { this.listeners = []; }); + // biome-ignore lint/suspicious/noThenProperty: this.promise.then = (onfulfilled) => { let _resolve: UnCancelTokenListener; const promise = new Promise((resolve) => { diff --git a/packages/core/src/core/UnCanceledError.test.ts b/packages/core/src/core/UnCanceledError.test.ts index f2cecb7..44c7bd0 100644 --- a/packages/core/src/core/UnCanceledError.test.ts +++ b/packages/core/src/core/UnCanceledError.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { UnCanceledError } from "./UnCanceledError"; describe("core:UnCanceledError", () => { diff --git a/packages/core/src/core/UnError.test.ts b/packages/core/src/core/UnError.test.ts index d557f05..e2bb1fc 100644 --- a/packages/core/src/core/UnError.test.ts +++ b/packages/core/src/core/UnError.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { UnError } from "./UnError"; describe("core::UnError", () => { diff --git a/packages/core/src/core/UnInterceptorManager.ts b/packages/core/src/core/UnInterceptorManager.ts index c0bbcd5..8e8fa1c 100644 --- a/packages/core/src/core/UnInterceptorManager.ts +++ b/packages/core/src/core/UnInterceptorManager.ts @@ -5,13 +5,11 @@ export interface UnInterceptorOptions { runWhen?: (config: UnConfig) => boolean; } -export interface UnInterceptorManagerHandlerFulfilled { - (value: V): V | Promise; -} +export type UnInterceptorManagerHandlerFulfilled = ( + value: V, +) => V | Promise; -export interface UnInterceptorManagerHandlerRejected { - (error: any): any; -} +export type UnInterceptorManagerHandlerRejected = (error: any) => any; export interface UnInterceptorManagerHandler extends UnInterceptorOptions { diff --git a/packages/core/src/core/dispatchRequest.ts b/packages/core/src/core/dispatchRequest.ts index a35d10c..22fa84a 100644 --- a/packages/core/src/core/dispatchRequest.ts +++ b/packages/core/src/core/dispatchRequest.ts @@ -1,7 +1,7 @@ import { adapters, requestAdapter } from "../adapters"; import type { UnConfig, UnData } from "../types"; -import { isUnCancel } from "./isUnCancel"; import { UnCanceledError } from "./UnCanceledError"; +import { isUnCancel } from "./isUnCancel"; const throwIfCancellationRequested = ( config: UnConfig, diff --git a/packages/core/src/core/isUnCancel.test.ts b/packages/core/src/core/isUnCancel.test.ts index 98f4ceb..b87f488 100644 --- a/packages/core/src/core/isUnCancel.test.ts +++ b/packages/core/src/core/isUnCancel.test.ts @@ -1,6 +1,6 @@ -import { describe, it, expect } from "vitest"; -import { isUnCancel } from "./isUnCancel"; +import { describe, expect, it } from "vitest"; import { UnCanceledError } from "./UnCanceledError"; +import { isUnCancel } from "./isUnCancel"; describe("core:isCancel", () => { it("returns true if value is a CanceledError", () => { diff --git a/packages/core/src/core/isUnCancel.ts b/packages/core/src/core/isUnCancel.ts index ef82183..86b6c22 100644 --- a/packages/core/src/core/isUnCancel.ts +++ b/packages/core/src/core/isUnCancel.ts @@ -1,4 +1,4 @@ -import { UnCancel } from "./UnCancelToken"; +import type { UnCancel } from "./UnCancelToken"; export const isUnCancel = (value: any): value is UnCancel => value?.isUnCanceledError === true; diff --git a/packages/core/src/core/isUnError.test.ts b/packages/core/src/core/isUnError.test.ts index c2569f2..aa4d204 100644 --- a/packages/core/src/core/isUnError.test.ts +++ b/packages/core/src/core/isUnError.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { UnError } from "./UnError"; import { isUnError } from "./isUnError"; diff --git a/packages/core/src/core/isUnError.ts b/packages/core/src/core/isUnError.ts index 5574e14..6756df3 100644 --- a/packages/core/src/core/isUnError.ts +++ b/packages/core/src/core/isUnError.ts @@ -1,5 +1,5 @@ import type { UnData } from "../types"; -import { UnError } from "./UnError"; +import type { UnError } from "./UnError"; export const isUnError = ( value: any, diff --git a/packages/core/src/core/settle.test.ts b/packages/core/src/core/settle.test.ts index 0f26cf3..0bd7fea 100644 --- a/packages/core/src/core/settle.test.ts +++ b/packages/core/src/core/settle.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, vi, beforeEach, type Mock } from "vitest"; +import { type Mock, beforeEach, describe, expect, it, vi } from "vitest"; import type { UnResponse } from "../types"; import { settle } from "./settle"; diff --git a/packages/core/src/index.test.ts b/packages/core/src/index.test.ts index 4870c66..856c8e7 100644 --- a/packages/core/src/index.test.ts +++ b/packages/core/src/index.test.ts @@ -1,18 +1,18 @@ -import { expect, it, describe } from "vitest"; -import { defaults } from "./defaults"; +import { describe, expect, it } from "vitest"; +import { un } from "."; +import { version } from "../package.json"; import { + HttpStatusCode, Un, - UnInterceptorManager, - UnCanceledError, UnCancelToken, - isUnCancel, + UnCanceledError, UnError, + UnInterceptorManager, + isUnCancel, isUnError, - HttpStatusCode, } from "./core"; +import { defaults } from "./defaults"; import { mergeConfig } from "./utils"; -import { un } from "."; -import { version } from "../package.json"; describe("index", () => { it("un should be defined", () => { diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index ca182a0..e3ff60b 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,18 +1,18 @@ import { version } from "../package.json"; import { HttpStatusCode, - isUnError, Un, - UnCancel, - UnCanceledError, + type UnCancel, UnCancelToken, - UnCancelTokenStatic, + type UnCancelTokenStatic, + UnCanceledError, UnError, isUnCancel, + isUnError, } from "./core"; import { defaults } from "./defaults"; +import type { UnConfig, UnData, UnResponse } from "./types"; import { extend, mergeConfig } from "./utils"; -import { UnConfig, UnData, UnResponse } from "./types"; export interface UnInstance extends Un { >( diff --git a/packages/core/src/types/adapter.ts b/packages/core/src/types/adapter.ts index 43d6974..1e09b0d 100644 --- a/packages/core/src/types/adapter.ts +++ b/packages/core/src/types/adapter.ts @@ -2,6 +2,6 @@ import type { UnData } from "./common"; import type { UnConfig } from "./config"; import type { UnPromise } from "./promise"; -export interface UnAdapter { - (config: UnConfig): UnPromise; -} +export type UnAdapter = ( + config: UnConfig, +) => UnPromise; diff --git a/packages/core/src/types/common.ts b/packages/core/src/types/common.ts index 160f9ee..7a75700 100644 --- a/packages/core/src/types/common.ts +++ b/packages/core/src/types/common.ts @@ -26,13 +26,9 @@ export type UnHeaders = Record; export type UnParams = Record; -export interface UnParamsSerializer { - (params?: UnParams): string; -} +export type UnParamsSerializer = (params?: UnParams) => string; -export interface UnValidateStatus { - (status: number): boolean | null; -} +export type UnValidateStatus = (status: number) => boolean | null; export interface UnGenericAbortSignal { readonly aborted: boolean; @@ -51,20 +47,18 @@ export interface UnFile { uri?: string; } -export interface UnOnProgress { - (response?: { - /** 当前上传/下载百分比 */ - progress?: number; - /** 已经上传的数据长度,单位 Bytes */ - totalBytesSent?: number; - /** 预期需要上传的数据总长度,单位 Bytes */ - totalBytesExpectedToSend?: number; - /** 已经下载的数据长度,单位 Bytes */ - totalBytesWritten?: number; - /** 预期需要下载的数据总长度,单位 Bytes */ - totalBytesExpectedToWrite?: number; - }): void; -} +export type UnOnProgress = (response?: { + /** 当前上传/下载百分比 */ + progress?: number; + /** 已经上传的数据长度,单位 Bytes */ + totalBytesSent?: number; + /** 预期需要上传的数据总长度,单位 Bytes */ + totalBytesExpectedToSend?: number; + /** 已经下载的数据长度,单位 Bytes */ + totalBytesWritten?: number; + /** 预期需要下载的数据总长度,单位 Bytes */ + totalBytesExpectedToWrite?: number; +}) => void; export type UnFileType = "image" | "video" | "audio"; diff --git a/packages/core/src/types/config.ts b/packages/core/src/types/config.ts index c454d74..f3370a9 100644 --- a/packages/core/src/types/config.ts +++ b/packages/core/src/types/config.ts @@ -1,19 +1,19 @@ -import { UnCancelToken } from "../core/UnCancelToken"; +import type { UnCancelToken } from "../core/UnCancelToken"; +import type { UnAdapter } from "./adapter"; import type { UnData, - UnHeaders, - UnMethod, UnDataType, - UnResponseType, + UnFile, + UnFileType, UnGenericAbortSignal, + UnHeaders, + UnMethod, UnOnProgress, - UnFileType, + UnParams, UnParamsSerializer, + UnResponseType, UnValidateStatus, - UnFile, - UnParams, } from "./common"; -import type { UnAdapter } from "./adapter"; export interface UnConfig { /** 用于请求的服务器 URL */ diff --git a/packages/core/src/utils/buildDownloadConfig.ts b/packages/core/src/utils/buildDownloadConfig.ts index 306d21a..6ab0fcb 100644 --- a/packages/core/src/utils/buildDownloadConfig.ts +++ b/packages/core/src/utils/buildDownloadConfig.ts @@ -1,4 +1,4 @@ -import type { UnData, UnConfig } from "../types"; +import type { UnConfig, UnData } from "../types"; import { buildFullPath } from "./buildFullPath"; import { buildUrl } from "./buildUrl"; diff --git a/packages/core/src/utils/buildFullPath.test.ts b/packages/core/src/utils/buildFullPath.test.ts index 1db975b..5ff00a2 100644 --- a/packages/core/src/utils/buildFullPath.test.ts +++ b/packages/core/src/utils/buildFullPath.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { buildFullPath } from "./buildFullPath"; describe("utils::buildFullPath", () => { diff --git a/packages/core/src/utils/buildRequestConfig.ts b/packages/core/src/utils/buildRequestConfig.ts index 7fe823c..609cd87 100644 --- a/packages/core/src/utils/buildRequestConfig.ts +++ b/packages/core/src/utils/buildRequestConfig.ts @@ -1,4 +1,4 @@ -import type { UnData, UnConfig } from "../types"; +import type { UnConfig, UnData } from "../types"; import { buildFullPath } from "./buildFullPath"; import { buildUrl } from "./buildUrl"; diff --git a/packages/core/src/utils/buildUploadConfig.ts b/packages/core/src/utils/buildUploadConfig.ts index 044415b..da442b2 100644 --- a/packages/core/src/utils/buildUploadConfig.ts +++ b/packages/core/src/utils/buildUploadConfig.ts @@ -1,4 +1,4 @@ -import type { UnData, UnConfig } from "../types"; +import type { UnConfig, UnData } from "../types"; import { buildFullPath } from "./buildFullPath"; import { buildUrl } from "./buildUrl"; diff --git a/packages/core/src/utils/buildUrl.test.ts b/packages/core/src/utils/buildUrl.test.ts index 2a10454..e5cc634 100644 --- a/packages/core/src/utils/buildUrl.test.ts +++ b/packages/core/src/utils/buildUrl.test.ts @@ -1,5 +1,5 @@ import URLSearchParams from "@ungap/url-search-params"; -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { buildUrl } from "./buildUrl"; describe("utils::buildUrl", () => { diff --git a/packages/core/src/utils/buildUrl.ts b/packages/core/src/utils/buildUrl.ts index fa064ec..34f6be1 100644 --- a/packages/core/src/utils/buildUrl.ts +++ b/packages/core/src/utils/buildUrl.ts @@ -10,9 +10,10 @@ export const buildUrl = ( return url; } + let newUrl = url; const hashIndex = url.indexOf("#"); if (hashIndex !== -1) { - url = url.slice(0, hashIndex); + newUrl = newUrl.slice(0, hashIndex); } const serializerParams = paramsSerializer @@ -22,8 +23,8 @@ export const buildUrl = ( : qs.stringify(params); if (serializerParams) { - url += (url.includes("?") ? "&" : "?") + serializerParams; + newUrl += (newUrl.includes("?") ? "&" : "?") + serializerParams; } - return url; + return newUrl; }; diff --git a/packages/core/src/utils/combineUrls.test.ts b/packages/core/src/utils/combineUrls.test.ts index 836eaa3..acebfce 100644 --- a/packages/core/src/utils/combineUrls.test.ts +++ b/packages/core/src/utils/combineUrls.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { combineUrls } from "./combineUrls"; describe("utils::combineUrls", () => { diff --git a/packages/core/src/utils/combineUrls.ts b/packages/core/src/utils/combineUrls.ts index 6f661a7..58abf09 100644 --- a/packages/core/src/utils/combineUrls.ts +++ b/packages/core/src/utils/combineUrls.ts @@ -1,5 +1,5 @@ export const combineUrls = (baseUrl: string, relativeUrl: string) => { return relativeUrl - ? baseUrl.replace(/\/?\/$/, "") + "/" + relativeUrl.replace(/^\/+/, "") + ? `${baseUrl.replace(/\/?\/$/, "")}/${relativeUrl.replace(/^\/+/, "")}` : baseUrl; }; diff --git a/packages/core/src/utils/extend.test.ts b/packages/core/src/utils/extend.test.ts index 6c0eb0b..d67f806 100644 --- a/packages/core/src/utils/extend.test.ts +++ b/packages/core/src/utils/extend.test.ts @@ -1,8 +1,8 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { extend } from "./extend"; -describe("utils::extend", function () { - it("should be mutable", function () { +describe("utils::extend", () => { + it("should be mutable", () => { const a: Record = {}; const b: Record = { foo: 123 }; @@ -11,7 +11,7 @@ describe("utils::extend", function () { expect(a.foo).toEqual(b.foo); }); - it("should extend properties", function () { + it("should extend properties", () => { let a: Record = { foo: 123, bar: 456 }; const b: Record = { bar: 789 }; @@ -21,7 +21,7 @@ describe("utils::extend", function () { expect(a.bar).toEqual(789); }); - it("should bind to thisArg", function () { + it("should bind to thisArg", () => { const a: Record = {}; const b: Record = { getFoo: function getFoo() { diff --git a/packages/core/src/utils/forEach.test.ts b/packages/core/src/utils/forEach.test.ts index b28b148..9665900 100644 --- a/packages/core/src/utils/forEach.test.ts +++ b/packages/core/src/utils/forEach.test.ts @@ -1,18 +1,18 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { forEach } from "./forEach"; -describe("utils::forEach", function () { - it("should loop over an array", function () { +describe("utils::forEach", () => { + it("should loop over an array", () => { let sum = 0; - forEach([1, 2, 3, 4, 5], function (val) { + forEach([1, 2, 3, 4, 5], (val) => { sum += val; }); expect(sum).toEqual(15); }); - it("should loop over object keys", function () { + it("should loop over object keys", () => { let keys = ""; let vals = 0; const obj = { @@ -21,7 +21,7 @@ describe("utils::forEach", function () { r: 3, }; - forEach(obj, function (v, k) { + forEach(obj, (v, k) => { keys += k; vals += v; }); @@ -30,22 +30,22 @@ describe("utils::forEach", function () { expect(vals).toEqual(6); }); - it("should handle undefined gracefully", function () { + it("should handle undefined gracefully", () => { let count = 0; - forEach(undefined, function () { + forEach(undefined, () => { count++; }); expect(count).toEqual(0); }); - it("should make an array out of non-array argument", function () { + it("should make an array out of non-array argument", () => { let count = 0; forEach( - function () {}, - function () { + () => {}, + () => { count++; }, ); @@ -53,12 +53,12 @@ describe("utils::forEach", function () { expect(count).toEqual(1); }); - it("should handle non object prototype gracefully", function () { + it("should handle non object prototype gracefully", () => { let count = 0; const data = Object.create(null); data.foo = "bar"; - forEach(data, function () { + forEach(data, () => { count++; }); diff --git a/packages/core/src/utils/forEach.ts b/packages/core/src/utils/forEach.ts index 7699f81..eb5ad5e 100644 --- a/packages/core/src/utils/forEach.ts +++ b/packages/core/src/utils/forEach.ts @@ -12,32 +12,30 @@ export function forEach( ) { if (obj === null || obj === undefined) return; - let i; - let l; + let i: number; + let l: number; // Force an array if not already something iterable - if (typeof obj !== "object") { - obj = [obj]; - } + const object = typeof obj !== "object" ? [obj] : obj; - if (Array.isArray(obj)) { + if (Array.isArray(object)) { // Iterate over array values - for (i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); + for (i = 0, l = object.length; i < l; i++) { + fn.call(null, object[i], i, object); } } else { // Iterate over object keys const keys = allOwnKeys - ? Object.getOwnPropertyNames(obj).filter( + ? Object.getOwnPropertyNames(object).filter( (key) => key !== "constructor" && !key.startsWith("_"), ) - : Object.keys(obj); + : Object.keys(object); const len = keys.length; - let key; + let key: string; for (i = 0; i < len; i++) { key = keys[i]; - fn.call(null, obj[key], key, obj); + fn.call(null, object[key], key, object); } } } diff --git a/packages/core/src/utils/isAbsoluteUrl.test.ts b/packages/core/src/utils/isAbsoluteUrl.test.ts index 8ccac95..eb58d73 100644 --- a/packages/core/src/utils/isAbsoluteUrl.test.ts +++ b/packages/core/src/utils/isAbsoluteUrl.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import { isAbsoluteUrl } from "./isAbsoluteUrl"; describe("utils::isAbsoluteUrl", () => {