2023-12-09 23:08:27 +01:00
|
|
|
/*
|
|
|
|
|
* Copyright (C) Contributors to the Suwayomi project
|
|
|
|
|
*
|
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
type ExtractByKeyValue<T, Key extends keyof T, Value extends T[Key]> = T extends
|
|
|
|
|
| Record<Key, Value>
|
|
|
|
|
| Partial<Record<Key, Value>>
|
|
|
|
|
? T
|
|
|
|
|
: never;
|
|
|
|
|
|
|
|
|
|
type RecursivePartial<T> = {
|
|
|
|
|
[P in keyof T]?: T[P] extends (infer U)[]
|
|
|
|
|
? RecursivePartial<U>[]
|
|
|
|
|
: T[P] extends object | undefined
|
|
|
|
|
? RecursivePartial<T[P]>
|
|
|
|
|
: T[P];
|
|
|
|
|
};
|
|
|
|
|
|
2025-08-16 17:10:48 +02:00
|
|
|
type NullAndUndefined<T> = T | null | undefined;
|
|
|
|
|
|
2025-01-26 03:53:19 +01:00
|
|
|
type NonNullableProperties<T> = { [P in keyof T]-?: NonNullable<T[P]> };
|
|
|
|
|
|
2023-12-09 23:08:27 +01:00
|
|
|
type OptionalProperty<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
|
|
|
|
|
|
|
|
type PropertiesNever<T> = { [key in keyof T]?: never };
|
2024-05-08 04:01:23 +02:00
|
|
|
|
|
|
|
|
type OmitFirst<T extends any[]> = T extends [any, ...infer R] ? R : never;
|
2024-08-05 14:30:26 +02:00
|
|
|
|
2024-11-04 18:00:35 +01:00
|
|
|
type TupleUnion<U extends string | number | symbol, R extends any[] = []> = {
|
2024-08-05 14:30:26 +02:00
|
|
|
[S in U]: Exclude<U, S> extends never ? [...R, S] : TupleUnion<Exclude<U, S>, [...R, S]>;
|
|
|
|
|
}[U];
|
2024-11-04 18:00:35 +01:00
|
|
|
|
|
|
|
|
type TransformRecordToWithDefaultFlag<T extends Record<string, any>> = {
|
|
|
|
|
[K in keyof T]: { value: T[K]; isDefault: boolean };
|
|
|
|
|
};
|
2024-12-21 03:46:55 +01:00
|
|
|
|
|
|
|
|
type MergeObjectsArray<T extends object[]> = T extends [infer F, ...infer R]
|
2024-12-25 17:06:13 +01:00
|
|
|
? F & MergeObjectsArray<R extends object[] ? R : []>
|
2024-12-21 03:46:55 +01:00
|
|
|
: {};
|
2025-03-10 00:26:31 +01:00
|
|
|
|
|
|
|
|
type OmitNotMatching<T, K extends keyof T> = {
|
|
|
|
|
[P in K]: T[K];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
type ExtractCommon<T, U> = {
|
|
|
|
|
[K in keyof T & keyof U]: T[K] extends U[K] ? T[K] : never;
|
|
|
|
|
};
|