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
@@ -0,0 +1,55 @@
import { shallowReadonly, shallowRef, toValue, watch } from 'vue';
import type { MaybeRefOrGetter, ShallowRef } from 'vue';
import { defaultWindow } from '@/types';
import type { ConfigurableWindow } from '@/types';
import { tryOnScopeDispose } from '@/composables/lifecycle/tryOnScopeDispose';
export interface UseObjectUrlOptions extends ConfigurableWindow {}
export type UseObjectUrlReturn = Readonly<ShallowRef<string | undefined>>;
/**
* @name useObjectUrl
* @category Browser
* @description Create and auto-revoke an object URL for a `Blob`, `File`, or `MediaSource`. The previous URL is revoked whenever the source changes, and the active URL is revoked on scope dispose.
*
* @param {MaybeRefOrGetter<Blob | MediaSource | null | undefined>} object The reactive source to create an object URL for
* @param {UseObjectUrlOptions} [options={}] Options
* @returns {UseObjectUrlReturn} A read-only ref holding the current object URL, or `undefined` when there is no source (or in unsupported/SSR environments)
*
* @example
* const file = shallowRef<File>();
* const url = useObjectUrl(file);
*
* @since 0.0.15
*/
export function useObjectUrl(
object: MaybeRefOrGetter<Blob | MediaSource | null | undefined>,
options: UseObjectUrlOptions = {},
): UseObjectUrlReturn {
const { window = defaultWindow } = options;
const url = shallowRef<string | undefined>();
const release = (): void => {
if (url.value)
(window as (Window & typeof globalThis) | undefined)?.URL.revokeObjectURL(url.value);
url.value = undefined;
};
watch(
() => toValue(object),
(newObject) => {
release();
if (newObject && window)
url.value = (window as Window & typeof globalThis).URL.createObjectURL(newObject);
},
{ immediate: true },
);
tryOnScopeDispose(release);
return shallowReadonly(url);
}