fix(vue): eslint/tsconfig migration + resolve type errors

@robonen/vue (toolkit): migrate to eslint flat config + composite tsconfig;
fix composable + test type errors (writable computed returns, null guards,
overload-compatible signatures, typed test helpers) — all type-level.
This commit is contained in:
2026-06-07 16:29:39 +07:00
parent e6919de29e
commit c7644ade69
203 changed files with 23016 additions and 141 deletions
@@ -1,7 +1,7 @@
import { describe, it, expect, vi } from 'vitest';
import { describe, expect, it, vi } from 'vitest';
import { nextTick, ref } from 'vue';
import { useStorage, StorageSerializers, customStorageEventName } from '.';
import type { StorageLike, StorageEventLike } from '.';
import { StorageSerializers, customStorageEventName, useStorage } from '.';
import type { StorageEventLike, StorageLike } from '.';
function createMockStorage(): StorageLike & { store: Map<string, string> } {
const store = new Map<string, string>();
@@ -325,7 +325,7 @@ describe(useStorage, () => {
const storage = createMockStorage();
const state = useStorage<string>('sync-key', 'initial', storage, {
listenToStorageChanges: true,
window: globalThis,
window: globalThis as unknown as Window,
});
expect(state.value).toBe('initial');
@@ -347,7 +347,7 @@ describe(useStorage, () => {
const storage = createMockStorage();
const state = useStorage<string>('my-key', 'initial', storage, {
listenToStorageChanges: true,
window: globalThis,
window: globalThis as unknown as Window,
});
const detail: StorageEventLike = {
@@ -369,7 +369,7 @@ describe(useStorage, () => {
const state = useStorage<string>('clear-key', 'default', storage, {
listenToStorageChanges: true,
window: globalThis,
window: globalThis as unknown as Window,
});
expect(state.value).toBe('stored');
@@ -392,7 +392,7 @@ describe(useStorage, () => {
const storage = createMockStorage();
const state = useStorage<string>('no-listen', 'initial', storage, {
listenToStorageChanges: false,
window: globalThis,
window: globalThis as unknown as Window,
});
const detail: StorageEventLike = {
@@ -414,7 +414,7 @@ describe(useStorage, () => {
const storage = createMockStorage();
const state = useStorage<string>('custom-backend', 'initial', storage, {
listenToStorageChanges: true,
window: globalThis,
window: globalThis as unknown as Window,
});
const detail: StorageEventLike = {
@@ -1,6 +1,6 @@
import { nextTick, ref, shallowRef, toValue, watch } from 'vue';
import type { MaybeRefOrGetter } from 'vue';
import { isBoolean, isNumber, isString, isObject, isMap, isSet, isDate } from '@robonen/stdlib';
import { isBoolean, isDate, isFunction, isMap, isNumber, isObject, isSet, isString } from '@robonen/stdlib';
import type { ConfigurableFlush, ConfigurableWindow, RemovableRef } from '@/types';
import { defaultWindow } from '@/types';
import type { ConfigurableEventFilter, EventFilter } from '@/utils/filters';
@@ -206,7 +206,7 @@ export function useStorage<T>(
if (!event && mergeDefaults) {
const value = serializer.read(rawValue);
return typeof mergeDefaults === 'function'
return isFunction(mergeDefaults)
? mergeDefaults(value, defaults)
: shallowMerge(value, defaults);
}