1
0
mirror of https://github.com/robonen/tools.git synced 2026-03-20 10:54:44 +00:00

feat(configs/oxlint): add linter

This commit is contained in:
2026-02-14 22:49:47 +07:00
parent 2a5412c3b8
commit 49b9f2aa79
98 changed files with 1236 additions and 201 deletions

View File

@@ -2,7 +2,7 @@ import { isShallow, nextTick, ref } from 'vue';
import { it, expect, describe, vi, beforeEach, afterEach } from 'vitest';
import { useAsyncState } from '.';
describe('useAsyncState', () => {
describe(useAsyncState, () => {
beforeEach(() => {
vi.useFakeTimers();
});
@@ -18,15 +18,15 @@ describe('useAsyncState', () => {
);
expect(state.value).toBe('initial');
expect(isReady.value).toBe(false);
expect(isLoading.value).toBe(true);
expect(isReady.value).toBeFalsy();
expect(isLoading.value).toBeTruthy();
expect(error.value).toBe(null);
await nextTick();
expect(state.value).toBe('data');
expect(isReady.value).toBe(true);
expect(isLoading.value).toBe(false);
expect(isReady.value).toBeTruthy();
expect(isLoading.value).toBeFalsy();
expect(error.value).toBe(null);
});
@@ -37,15 +37,15 @@ describe('useAsyncState', () => {
);
expect(state.value).toBe('initial');
expect(isReady.value).toBe(false);
expect(isLoading.value).toBe(true);
expect(isReady.value).toBeFalsy();
expect(isLoading.value).toBeTruthy();
expect(error.value).toBe(null);
await nextTick();
expect(state.value).toBe('data');
expect(isReady.value).toBe(true);
expect(isLoading.value).toBe(false);
expect(isReady.value).toBeTruthy();
expect(isLoading.value).toBeFalsy();
expect(error.value).toBe(null);
});
@@ -56,15 +56,15 @@ describe('useAsyncState', () => {
);
expect(state.value).toBe('initial');
expect(isReady.value).toBe(false);
expect(isLoading.value).toBe(true);
expect(isReady.value).toBeFalsy();
expect(isLoading.value).toBeTruthy();
expect(error.value).toBe(null);
await nextTick();
expect(state.value).toBe('initial');
expect(isReady.value).toBe(false);
expect(isLoading.value).toBe(false);
expect(isReady.value).toBeFalsy();
expect(isLoading.value).toBeFalsy();
expect(error.value).toEqual(new Error('test-error'));
});
@@ -131,14 +131,14 @@ describe('useAsyncState', () => {
);
const promise = execute();
expect(isLoading.value).toBe(true);
expect(isLoading.value).toBeTruthy();
await vi.advanceTimersByTimeAsync(50);
expect(isLoading.value).toBe(true);
expect(isLoading.value).toBeTruthy();
await vi.advanceTimersByTimeAsync(50);
await promise;
expect(isLoading.value).toBe(false);
expect(isLoading.value).toBeFalsy();
});
it('is awaitable', async () => {
@@ -160,15 +160,15 @@ describe('useAsyncState', () => {
executeImmediately();
expect(state.value).toBe('initial');
expect(isLoading.value).toBe(true);
expect(isReady.value).toBe(false);
expect(isLoading.value).toBeTruthy();
expect(isReady.value).toBeFalsy();
expect(error.value).toBe(null);
await nextTick();
expect(state.value).toBe('data');
expect(isReady.value).toBe(true);
expect(isLoading.value).toBe(false);
expect(isReady.value).toBeTruthy();
expect(isLoading.value).toBeFalsy();
expect(error.value).toBe(null);
});
@@ -193,7 +193,7 @@ describe('useAsyncState', () => {
);
expect(state.value.a).toBe(1);
expect(isShallow(state)).toBe(true);
expect(isShallow(state)).toBeTruthy();
});
it('uses ref when shallow is false', async () => {
@@ -204,6 +204,6 @@ describe('useAsyncState', () => {
);
expect(state.value.a).toBe(1);
expect(isShallow(state)).toBe(false);
expect(isShallow(state)).toBeFalsy();
});
});

View File

@@ -1,4 +1,5 @@
import { ref, shallowRef, watch, type Ref, type ShallowRef, type UnwrapRef } from 'vue';
import { ref, shallowRef, watch } from 'vue';
import type { Ref, ShallowRef, UnwrapRef } from 'vue';
import { isFunction, sleep } from '@robonen/stdlib';
export interface UseAsyncStateOptions<Shallow extends boolean, Data = any> {
@@ -103,8 +104,12 @@ export function useAsyncState<Data, Params extends any[] = [], Shallow extends b
watch(
isLoading,
(loading) => {
if (loading === false)
error.value ? reject(error.value) : resolve(shell);
if (loading === false) {
if (error.value)
reject(error.value);
else
resolve(shell);
}
},
{
immediate: true,
@@ -117,6 +122,7 @@ export function useAsyncState<Data, Params extends any[] = [], Shallow extends b
return {
...shell,
// eslint-disable-next-line unicorn/no-thenable
then(onFulfilled, onRejected) {
return waitResolve().then(onFulfilled, onRejected);
},