summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/gql
diff options
context:
space:
mode:
authorWolfgang Müller2025-02-13 17:52:16 +0100
committerWolfgang Müller2025-02-13 17:52:16 +0100
commitdc4db405d2991d3ec6a114f3b08d3fccd057d3ee (patch)
tree2c620c9af2062ba09fa591f8b3ed961664adab58 /frontend/src/gql
parent4df870d793123be95c8af031a340a39b5b8402ac (diff)
downloadhircine-dc4db405d2991d3ec6a114f3b08d3fccd057d3ee.tar.gz
frontend: Migrate to Svelte 5
Diffstat (limited to 'frontend/src/gql')
-rw-r--r--frontend/src/gql/Utils.ts73
1 files changed, 17 insertions, 56 deletions
diff --git a/frontend/src/gql/Utils.ts b/frontend/src/gql/Utils.ts
index dd21bbe..177dff0 100644
--- a/frontend/src/gql/Utils.ts
+++ b/frontend/src/gql/Utils.ts
@@ -1,8 +1,23 @@
-import equal from 'fast-deep-equal';
+import { omit } from '$lib/Utils';
+import type { Client } from '@urql/svelte';
import * as gql from './graphql';
-export type OmitIdentifiers<T> = Omit<T, 'id' | '__typename'>;
+type Typename = '__typename';
+type Identifiers = Typename | 'id';
+
+export type OmitTypename<T> = Omit<T, Typename>;
+export type OmitIdentifiers<T> = Omit<T, Identifiers>;
export type RequiredName<T> = T & { name: string };
+export type MutationWith<T> = (
+ client: Client,
+ args: { ids: number[] | number; input: T }
+) => Promise<unknown>;
+
+export function omitIdentifiers<T extends { __typename?: unknown; id: number }>(
+ obj: T
+): OmitIdentifiers<T> {
+ return omit(obj, '__typename', 'id');
+}
export function isSuccess(object: any): object is gql.Success {
if (object.__typename === undefined) {
@@ -18,57 +33,3 @@ export function isError(object: any): object is gql.Error {
}
return object.__typename.endsWith('Error') && (object as gql.Error).message !== undefined;
}
-
-type Item = {
- id: number | string;
- name: string;
-};
-
-export function itemEquals(a: Item, b: Item) {
- return a.name == b.name;
-}
-
-function assocEquals(as: Item[], bs: Item[]) {
- return equal(
- as.map((a) => a.id),
- bs.map((b) => b.id)
- );
-}
-
-function stringEquals(a: string | null | undefined, b: string | null | undefined) {
- return (a ? a : null) == (b ? b : null);
-}
-
-export function tagEquals(a: gql.FullTag, b: gql.FullTag) {
- return (
- itemEquals(a, b) &&
- stringEquals(a.description, b.description) &&
- assocEquals(a.namespaces, b.namespaces)
- );
-}
-
-export function comicEquals(
- a: gql.FullComicFragment | undefined,
- b: gql.FullComicFragment | undefined
-) {
- if (a === undefined) return b === undefined;
- if (b === undefined) return a === undefined;
-
- return (
- stringEquals(a.title, b.title) &&
- stringEquals(a.originalTitle, b.originalTitle) &&
- stringEquals(a.url, b.url) &&
- stringEquals(a.date, b.date) &&
- a.category == b.category &&
- a.rating == b.rating &&
- a.censorship == b.censorship &&
- a.language == b.language &&
- a.direction == b.direction &&
- a.layout == b.layout &&
- assocEquals(a.artists, b.artists) &&
- assocEquals(a.circles, b.circles) &&
- assocEquals(a.characters, b.characters) &&
- assocEquals(a.tags, b.tags) &&
- assocEquals(a.worlds, b.worlds)
- );
-}