mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-10-18 11:44:09 +00:00
Migrate from ESLint to Oxlint and Oxfmt
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import { Parser } from '@json2csv/plainjs';
|
||||
import csv from 'csvtojson';
|
||||
|
||||
export const csvToJson = <T>(csvContent: string) => new Promise<T[]>((resolve) => {
|
||||
csv().fromString(csvContent).then(resolve);
|
||||
});
|
||||
export const csvToJson = <T>(csvContent: string) =>
|
||||
new Promise<T[]>((resolve) => {
|
||||
csv().fromString(csvContent).then(resolve);
|
||||
});
|
||||
|
||||
export type CsvToJson = typeof csvToJson;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export const forceUpdate = async () => {
|
||||
const registrations = await navigator.serviceWorker?.getRegistrations() ?? [];
|
||||
const registrations = (await navigator.serviceWorker?.getRegistrations()) ?? [];
|
||||
|
||||
registrations.forEach(({ waiting }) => {
|
||||
waiting?.addEventListener('statechange', (event) => {
|
||||
|
||||
@@ -3,19 +3,19 @@ import { compare } from 'compare-versions';
|
||||
|
||||
export type Empty = null | undefined | '' | never[];
|
||||
|
||||
const isEmpty = (value: Exclude<any, undefined | null>): boolean => (
|
||||
(Array.isArray(value) && value.length === 0)
|
||||
|| (typeof value === 'string' && value === '')
|
||||
|| (typeof value === 'object' && Object.keys(value).length === 0)
|
||||
);
|
||||
const isEmpty = (value: Exclude<any, undefined | null>): boolean =>
|
||||
(Array.isArray(value) && value.length === 0) ||
|
||||
(typeof value === 'string' && value === '') ||
|
||||
(typeof value === 'object' && Object.keys(value).length === 0);
|
||||
|
||||
export const hasValue = <T>(value: T | Empty): value is T => value !== undefined && value !== null && !isEmpty(value);
|
||||
|
||||
type SemVerPatternFragment = `${bigint | '*'}`;
|
||||
|
||||
type SemVerPattern = SemVerPatternFragment
|
||||
| `${SemVerPatternFragment}.${SemVerPatternFragment}`
|
||||
| `${SemVerPatternFragment}.${SemVerPatternFragment}.${SemVerPatternFragment}`;
|
||||
type SemVerPattern =
|
||||
| SemVerPatternFragment
|
||||
| `${SemVerPatternFragment}.${SemVerPatternFragment}`
|
||||
| `${SemVerPatternFragment}.${SemVerPatternFragment}.${SemVerPatternFragment}`;
|
||||
|
||||
export type Versions = {
|
||||
maxVersion?: SemVerPattern;
|
||||
@@ -35,16 +35,18 @@ export const versionMatch = (versionToMatch: SemVer | Empty, { maxVersion, minVe
|
||||
return matchesMaxVersion && matchesMinVersion;
|
||||
};
|
||||
|
||||
const versionIsValidSemVer = memoizeWith((v) => v, (version: string): version is SemVer => {
|
||||
try {
|
||||
return compare(version, version, '=');
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
const versionIsValidSemVer = memoizeWith(
|
||||
(v) => v,
|
||||
(version: string): version is SemVer => {
|
||||
try {
|
||||
return compare(version, version, '=');
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const versionToPrintable = (version: string) => (!versionIsValidSemVer(version) ? version : `v${version}`);
|
||||
|
||||
export const versionToSemVer = (version: string, fallback: SemVer = 'latest'): SemVer => (
|
||||
versionIsValidSemVer(version) ? version : fallback
|
||||
);
|
||||
export const versionToSemVer = (version: string, fallback: SemVer = 'latest'): SemVer =>
|
||||
versionIsValidSemVer(version) ? version : fallback;
|
||||
|
||||
@@ -6,7 +6,7 @@ export class LocalStorage {
|
||||
|
||||
public readonly get = <T>(key: string): T | undefined => {
|
||||
const item = this.localStorage.getItem(buildPath(key));
|
||||
return item ? JSON.parse(item) as T : undefined;
|
||||
return item ? (JSON.parse(item) as T) : undefined;
|
||||
};
|
||||
|
||||
public readonly set = (key: string, value: any) => this.localStorage.setItem(buildPath(key), JSON.stringify(value));
|
||||
|
||||
@@ -2,8 +2,7 @@ import type { TagColorsStorage as BaseTagColorsStorage } from '@shlinkio/shlink-
|
||||
import type { LocalStorage } from './LocalStorage';
|
||||
|
||||
export class TagColorsStorage implements BaseTagColorsStorage {
|
||||
constructor(private readonly storage: LocalStorage) {
|
||||
}
|
||||
constructor(private readonly storage: LocalStorage) {}
|
||||
|
||||
getTagColors(): Record<string, string> {
|
||||
return this.storage.get<Record<string, string>>('colors') ?? {};
|
||||
|
||||
@@ -5,7 +5,10 @@ import { useCallback } from 'react';
|
||||
* Wraps an event handler so that it calls e.preventDefault() before invoking the event handler
|
||||
*/
|
||||
export const usePreventDefault = <Event extends SyntheticEvent = SyntheticEvent>(handler: (e: Event) => void) =>
|
||||
useCallback((e: Event) => {
|
||||
e.preventDefault();
|
||||
handler(e);
|
||||
}, [handler]);
|
||||
useCallback(
|
||||
(e: Event) => {
|
||||
e.preventDefault();
|
||||
handler(e);
|
||||
},
|
||||
[handler],
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user