diff --git a/frontend/package.json b/frontend/package.json
index 45a7a15..ab91f44 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -19,7 +19,6 @@
"dependencies": {
"@apollo/client": "^3.9.0-alpha.5",
"@apollo/experimental-nextjs-app-support": "^0.7.0",
- "@gsap/react": "^2.1.0",
"@radix-ui/react-avatar": "^1.0.4",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6",
@@ -47,7 +46,6 @@
"framer-motion": "^11.0.24",
"globe.gl": "^2.32.2",
"gql.tada": "^1.6.2",
- "gsap": "^3.12.5",
"lucide-react": "^0.314.0",
"luxon": "^3.4.4",
"next": "14.1.0",
diff --git a/frontend/src/app/_homeComponents/FeaturedImage.tsx b/frontend/src/app/_homeComponents/FeaturedImage.tsx
index 4a54d6f..55b63f5 100644
--- a/frontend/src/app/_homeComponents/FeaturedImage.tsx
+++ b/frontend/src/app/_homeComponents/FeaturedImage.tsx
@@ -5,34 +5,10 @@ import { getClient } from "@/lib/ApolloClient";
const STRAPI_URL = process.env.BACKEND_INTERNAL_URL;
-const GET_FEATURED_IMAGE = graphql(`
- query FeaturedImage {
- featuredImage {
- data {
- attributes {
- description
- featuredImage {
- data {
- attributes {
- url
- }
- }
- }
- satellite {
- data {
- attributes {
- name
- slug
- }
- }
- }
- title
- }
- }
- }
- }
-`);
-
+/**
+ * Retrieves the featured image data from the GraphQL API and renders it on the page.
+ * @returns The JSX element representing the featured image component.
+ */
export default async function featuredImage() {
const graphqlData = await getClient().query({
query: GET_FEATURED_IMAGE,
@@ -85,3 +61,31 @@ export default async function featuredImage() {
);
}
+
+const GET_FEATURED_IMAGE = graphql(`
+ query FeaturedImage {
+ featuredImage {
+ data {
+ attributes {
+ description
+ featuredImage {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ satellite {
+ data {
+ attributes {
+ name
+ slug
+ }
+ }
+ }
+ title
+ }
+ }
+ }
+ }
+`);
diff --git a/frontend/src/app/_homeComponents/FeaturedProjectCard.tsx b/frontend/src/app/_homeComponents/FeaturedProjectCard.tsx
deleted file mode 100644
index afea07a..0000000
--- a/frontend/src/app/_homeComponents/FeaturedProjectCard.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import Link from "next/link";
-import Image from "next/image";
-import { PlaceholderImage } from "@/components/shared/CardWithContent";
-
-const STRAPI_URL = process.env.BACKEND_INTERNAL_URL;
-
-export default function FeaturedProjectCard({
- title,
- imageURL,
- projectSlug,
-}: {
- title: string;
- imageURL?: string;
- projectSlug?: string;
- key: string;
-}) {
- return (
-
-
-
- {imageURL ? (
-
- ) : (
-
- )}
-
-
-
{title}
-
-
-
- );
-}
diff --git a/frontend/src/app/_homeComponents/FeaturedProjects.tsx b/frontend/src/app/_homeComponents/FeaturedProjects.tsx
index e7966b6..11af6d0 100644
--- a/frontend/src/app/_homeComponents/FeaturedProjects.tsx
+++ b/frontend/src/app/_homeComponents/FeaturedProjects.tsx
@@ -1,11 +1,15 @@
-import fetchFeaturedProjects from "@/lib/data/fetchFeaturedProjects";
import Link from "next/link";
import { Button } from "@components/shadcn/button";
import CardWithContent from "@components/shared/CardWithContent";
import { PagePaddingOnlyHorizontal } from "@/components/layout/PageLayout";
+import { graphql } from "@/lib/tada/graphql";
+import { getClient } from "@lib/ApolloClient";
const STRAPI_URL = process.env.BACKEND_INTERNAL_URL;
+/**
+ * Displays the title and text content from Strapi, alongside three featured projects as cards.
+ */
export default async function FeaturedProjects() {
const featuredProjects = await fetchFeaturedProjects();
@@ -69,3 +73,70 @@ export default async function FeaturedProjects() {
);
}
+
+const GET_FEATURED_PROJECTS = graphql(`
+ query HomeFeaturedProjects {
+ homeFeaturedProjects {
+ data {
+ attributes {
+ title
+ textContent
+ featuredProject1 {
+ data {
+ attributes {
+ title
+ previewImage {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ slug
+ }
+ }
+ }
+ featuredProject2 {
+ data {
+ attributes {
+ title
+ previewImage {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ slug
+ }
+ }
+ }
+ featuredProject3 {
+ data {
+ attributes {
+ title
+ previewImage {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ slug
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+`);
+
+async function fetchFeaturedProjects() {
+ const client = getClient();
+ const { data } = await client.query({
+ query: GET_FEATURED_PROJECTS,
+ });
+
+ return data.homeFeaturedProjects?.data?.attributes;
+}
diff --git a/frontend/src/app/_homeComponents/GlobeWithStats.tsx b/frontend/src/app/_homeComponents/GlobeWithStats.tsx
index fbbeb2c..cd5a582 100644
--- a/frontend/src/app/_homeComponents/GlobeWithStats.tsx
+++ b/frontend/src/app/_homeComponents/GlobeWithStats.tsx
@@ -7,6 +7,10 @@ const SatelliteGlobeNoSSR = dynamic(() => import("./SatelliteGlobe"), {
ssr: false,
});
+/**
+ * Renders a 3D Globe with statistics next to it.
+ * Allows the user to select a satellite to view.
+ */
export default function GlobeWithStats() {
return (
<>
diff --git a/frontend/src/components/ui/hero.tsx b/frontend/src/app/_homeComponents/Hero.tsx
similarity index 90%
rename from frontend/src/components/ui/hero.tsx
rename to frontend/src/app/_homeComponents/Hero.tsx
index d606918..e50d309 100644
--- a/frontend/src/components/ui/hero.tsx
+++ b/frontend/src/app/_homeComponents/Hero.tsx
@@ -7,6 +7,10 @@ interface HeroProps extends React.HTMLAttributes {
className?: string;
}
+/**
+ * Represents a Hero component that displays a title, description, and optional image.
+ * Spans the whole height of the viewport.
+ */
const Hero = React.forwardRef(
({ title, description, imageUrl, className, children, ...props }, ref) => (
);
}
+
+const GET_MISSION_STATEMENT = graphql(`
+ query HomeMissionStatement {
+ homeMissionStatement {
+ data {
+ attributes {
+ title
+ textContent
+ }
+ }
+ }
+ }
+`);
+
+async function fetchMissionStatement() {
+ const client = getClient(); // Ensure getClient properly typed to return ApolloClient
+ const response = await client.query({
+ // This ensures that TypeScript expects the right structure
+ query: GET_MISSION_STATEMENT,
+ });
+
+ const missionStatement =
+ response.data.homeMissionStatement?.data?.attributes;
+
+ return {
+ title: missionStatement?.title,
+ textContent: missionStatement?.textContent,
+ };
+}
diff --git a/frontend/src/app/_homeComponents/SatDropdown.tsx b/frontend/src/app/_homeComponents/SatDropdown.tsx
index 0faa12c..656113d 100644
--- a/frontend/src/app/_homeComponents/SatDropdown.tsx
+++ b/frontend/src/app/_homeComponents/SatDropdown.tsx
@@ -5,6 +5,11 @@ import { cn } from "@/lib/utils";
import { satLoaderById } from "@/lib/getSatelliteData";
import { SatelliteNumber } from "@/lib/store";
import { useSatelliteStore } from "@/lib/store";
+
+/**
+ * Renders a dropdown menu to select a satellite.
+ * Allows the user to select a satellite by NORAD ID or from a list of satellites.
+ */
export default function SatDropdown() {
const selectedSatellite = useSatelliteStore(
(state) => state.selectedSatellite,
diff --git a/frontend/src/app/_homeComponents/SatelliteGlobe.tsx b/frontend/src/app/_homeComponents/SatelliteGlobe.tsx
index 7984eea..ff6b964 100644
--- a/frontend/src/app/_homeComponents/SatelliteGlobe.tsx
+++ b/frontend/src/app/_homeComponents/SatelliteGlobe.tsx
@@ -17,6 +17,11 @@ interface initpostype {
satNumber: number;
}
+/**
+ * Renders a 3D globe with satellite positions and allows interaction with the satellites.
+ * Uses the globe.gl library to render the globe and satellites.
+ * https://github.com/vasturiano/globe.gl
+ */
export default function SatelliteGlobe() {
const chart = useRef
(null);
const globeRef = useRef();
@@ -30,6 +35,7 @@ export default function SatelliteGlobe() {
// Initialize the globe
useEffect(() => {
if (chart.current && !globeRef.current) {
+ // Create the globe instance
globeRef.current = Globe()(chart.current)
.globeImageUrl("/images/earth-blue-marble.jpg")
.backgroundImageUrl("/images/night-sky.png")
@@ -57,6 +63,7 @@ export default function SatelliteGlobe() {
}
});
+ // Enable globe controls
globeRef.current.controls().enabled = true;
globeRef.current.controls().enableZoom = false;
globeRef.current.controls().enablePan = false;
diff --git a/frontend/src/app/_homeComponents/SatelliteSelector.tsx b/frontend/src/app/_homeComponents/SatelliteSelector.tsx
index fa8c905..71e2dc9 100644
--- a/frontend/src/app/_homeComponents/SatelliteSelector.tsx
+++ b/frontend/src/app/_homeComponents/SatelliteSelector.tsx
@@ -2,6 +2,10 @@
import React from "react";
import SatDropdown from "./SatDropdown";
+/**
+ * Renders the SatelliteSelector component.
+ * Allows the user to select a satellite to view.
+ */
export default function SatelliteSelector() {
return (
diff --git a/frontend/src/app/_homeComponents/ScrollIndicator.tsx b/frontend/src/app/_homeComponents/ScrollIndicator.tsx
index d872b5b..55d2e57 100644
--- a/frontend/src/app/_homeComponents/ScrollIndicator.tsx
+++ b/frontend/src/app/_homeComponents/ScrollIndicator.tsx
@@ -4,23 +4,9 @@ import React, { useEffect, useRef } from "react";
import type { SVGProps } from "react";
import { inView } from "framer-motion";
-export function UiwDown(props: SVGProps
) {
- return (
-
-
-
- );
-}
-
+/**
+ * Renders a arrow pointing down to indicate that the user can scroll down.
+ */
export default function ScrollIndicator() {
const ref = useRef(null);
const { scrollYProgress } = useScroll({
@@ -57,3 +43,20 @@ export default function ScrollIndicator() {
);
}
+
+export function UiwDown(props: SVGProps) {
+ return (
+
+
+
+ );
+}
diff --git a/frontend/src/app/_homeComponents/TeamSection.tsx b/frontend/src/app/_homeComponents/TeamSection.tsx
index f44962f..701029d 100644
--- a/frontend/src/app/_homeComponents/TeamSection.tsx
+++ b/frontend/src/app/_homeComponents/TeamSection.tsx
@@ -4,26 +4,11 @@ import Image from "next/image";
const STRAPI_URL = process.env.BACKEND_INTERNAL_URL;
-const GET_TEAM_DATA = graphql(`
- query Query($publicationState: PublicationState) {
- hero(publicationState: $publicationState) {
- data {
- attributes {
- title
- text
- image {
- data {
- attributes {
- url
- }
- }
- }
- }
- }
- }
- }
-`);
-
+/**
+ * Renders the team section of the website.
+ * Text and Image is fetched from Strapi
+ * Displays them in a flex container, either in a column or row depending on screen size.
+ */
export default async function TeamSection() {
const graphqlData = await getClient().query({
query: GET_TEAM_DATA,
@@ -75,3 +60,23 @@ export default async function TeamSection() {
);
}
+
+const GET_TEAM_DATA = graphql(`
+ query Query($publicationState: PublicationState) {
+ hero(publicationState: $publicationState) {
+ data {
+ attributes {
+ title
+ text
+ image {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+`);
diff --git a/frontend/src/app/blog/BlogPaginator.tsx b/frontend/src/app/blog/BlogPaginator.tsx
index 388eb67..bdd7d48 100644
--- a/frontend/src/app/blog/BlogPaginator.tsx
+++ b/frontend/src/app/blog/BlogPaginator.tsx
@@ -10,11 +10,18 @@ import {
} from "../../components/shadcn/pagination";
import { useRouter, useSearchParams } from "next/navigation";
+/**
+ * Renders a pagination component for a blog page.
+ * The component allows the user to navigate between pages of blog articles.
+ *
+ * @param totalArticles - The total number of articles.
+ */
export default function BlogPaginator({
totalArticles,
}: {
totalArticles: Number;
}) {
+ // Get the current search parameters
const searchParams = useSearchParams();
const router = useRouter();
const tag = useSearchParams().get("tag");
diff --git a/frontend/src/app/blog/BlogpageButtons.tsx b/frontend/src/app/blog/BlogpageButtons.tsx
index 9dbc62a..a3668db 100644
--- a/frontend/src/app/blog/BlogpageButtons.tsx
+++ b/frontend/src/app/blog/BlogpageButtons.tsx
@@ -4,6 +4,13 @@ import { Button } from "../../components/shadcn/button";
import { useRouter, useSearchParams } from "next/navigation";
import { cn } from "@/lib/utils";
+/**
+ * Renders a set of buttons for filtering blog posts.
+ *
+ * @param {Object} props - The component props.
+ * @param {string} [props.className] - The CSS class names for the component.
+ * @returns {JSX.Element} The rendered component.
+ */
export default function BlogpageButtons({ className }: { className?: string }) {
const [activeButton, setActiveButton] = useState("All Posts");
const router = useRouter();
diff --git a/frontend/src/app/blog/blogDataCards.tsx b/frontend/src/app/blog/blogDataCards.tsx
index 3c4f843..c39ea4f 100644
--- a/frontend/src/app/blog/blogDataCards.tsx
+++ b/frontend/src/app/blog/blogDataCards.tsx
@@ -7,6 +7,13 @@ import CardGrid from "@/components/shared/CardGrid";
const STRAPI_URL = process.env.BACKEND_INTERNAL_URL;
+/**
+ * Renders a grid of blog data cards based on the provided articles.
+ *
+ * @param {Object} props - The component props.
+ * @param {ArticlesDataType} props.articles - The array of articles to display.
+ * @returns {JSX.Element} The rendered blog data cards.
+ */
export default async function BlogDataCards({
articles,
}: {
diff --git a/frontend/src/app/blog/page.tsx b/frontend/src/app/blog/page.tsx
index b0a9a11..927ef0c 100644
--- a/frontend/src/app/blog/page.tsx
+++ b/frontend/src/app/blog/page.tsx
@@ -5,69 +5,23 @@ import {
PageSubtitle,
PageHeader,
} from "@/components/layout/PageHeader";
-
import { PagePadding } from "@/components/layout/PageLayout";
import React from "react";
import { getClient } from "@/lib/ApolloClient";
import { ResultOf, graphql } from "@/lib/tada/graphql";
+// Type for the result of the GET_ARTICLES query
+// Used in BlogDataCards.tsx
type articlesFetchType = ResultOf;
export type ArticlesDataType = NonNullable<
articlesFetchType["articles"]
>["data"];
-const GET_ARTICLES = graphql(`
- query GET_ARTICLES(
- $pagination: PaginationArg
- $filters: ArticleFiltersInput
- ) {
- articles(
- sort: ["datePublished:desc"]
- pagination: $pagination
- filters: $filters
- ) {
- data {
- id
- attributes {
- author {
- data {
- attributes {
- name
- avatar {
- data {
- attributes {
- url
- }
- }
- }
- }
- }
- }
- previewTitle
- datePublished
- body
- coverImage {
- data {
- attributes {
- url
- }
- }
- }
- createdAt
- publishedAt
- slug
- Tag
- }
- }
- meta {
- pagination {
- total
- }
- }
- }
- }
-`);
-
+/**
+ * Renders the Blog page.
+ * Retrieves blog posts from the GraphQL API and displays them in a grid of cards.
+ * If there are no blog posts to show, a message is displayed instead.
+ */
export default async function BlogPage({
searchParams,
}: {
@@ -125,3 +79,55 @@ export default async function BlogPage({
>
);
}
+
+const GET_ARTICLES = graphql(`
+ query GET_ARTICLES(
+ $pagination: PaginationArg
+ $filters: ArticleFiltersInput
+ ) {
+ articles(
+ sort: ["datePublished:desc"]
+ pagination: $pagination
+ filters: $filters
+ ) {
+ data {
+ id
+ attributes {
+ author {
+ data {
+ attributes {
+ name
+ avatar {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ }
+ }
+ }
+ previewTitle
+ datePublished
+ body
+ coverImage {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ createdAt
+ publishedAt
+ slug
+ Tag
+ }
+ }
+ meta {
+ pagination {
+ total
+ }
+ }
+ }
+ }
+`);
diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx
index 0ef123a..c537b67 100644
--- a/frontend/src/app/layout.tsx
+++ b/frontend/src/app/layout.tsx
@@ -7,6 +7,9 @@ import Footer from "@/components/layout/Footer";
import React from "react";
import { ApolloWrapper } from "@/components/wrappers/ApolloWrapper";
import InitializeZustandWithSatEntries from "@/components/satelliteData/SatelliteInitialFetch";
+import ErrorBoundaryNavigation from "@/components/layout/ErrorBoundaryNavigation";
+import Starfield from "@/components/layout/Starfield";
+import { SatelliteEntry } from "@/lib/store";
// imports to get satellites from strapi and fetch the data serverside
import fetchSatelliteNamesAndId from "@/lib/data/fetchSatelliteNamesAndId";
@@ -23,16 +26,12 @@ export const metadata: Metadata = {
},
};
-import ErrorBoundaryNavigation from "@/components/layout/ErrorBoundaryNavigation";
-import Starfield from "@/components/layout/Starfield";
-import { SatelliteEntry } from "@/lib/store";
-
export default async function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
- // fetch satellite names and id to be set in the store in the navbar
+ // fetch satellite names and id to be set in the store
const satellites = await fetchSatelliteNamesAndId();
let satData: SatelliteEntry[] = [];
diff --git a/frontend/src/app/loading.tsx b/frontend/src/app/loading.tsx
index 6c732ad..fcd3b02 100644
--- a/frontend/src/app/loading.tsx
+++ b/frontend/src/app/loading.tsx
@@ -1,6 +1,9 @@
import React from "react";
import styles from "./loading.module.css";
+/**
+ * Renders a loading spinner.
+ */
export default function Loading() {
return (
diff --git a/frontend/src/app/projects/page.tsx b/frontend/src/app/projects/page.tsx
index 5ae046c..9dbd5c5 100644
--- a/frontend/src/app/projects/page.tsx
+++ b/frontend/src/app/projects/page.tsx
@@ -10,35 +10,11 @@ import { graphql } from "@/lib/tada/graphql";
import CardGrid from "@/components/shared/CardGrid";
const STRAPI_URL = process.env.BACKEND_INTERNAL_URL;
-const GET_PROJECTS = graphql(`
- query GET_PROJECTS {
- projects(sort: ["publishedAt:desc"]) {
- data {
- id
- attributes {
- title
- content
- satellites {
- data {
- attributes {
- catalogNumberNORAD
- }
- }
- }
- slug
- previewImage {
- data {
- attributes {
- url
- }
- }
- }
- }
- }
- }
- }
-`);
-
+/**
+ * Renders the Projects page.
+ * Retrieves project data from the GraphQL API and displays it in a grid of cards.
+ * If there are no projects to show, a message is displayed instead.
+ */
export default async function ProjectsPage() {
const graphqlData = await getClient().query({
query: GET_PROJECTS,
@@ -92,3 +68,32 @@ export default async function ProjectsPage() {
);
}
+
+const GET_PROJECTS = graphql(`
+ query GET_PROJECTS {
+ projects(sort: ["publishedAt:desc"]) {
+ data {
+ id
+ attributes {
+ title
+ content
+ satellites {
+ data {
+ attributes {
+ catalogNumberNORAD
+ }
+ }
+ }
+ slug
+ previewImage {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+`);
diff --git a/frontend/src/app/satellites/SatelliteResponsiveTable.tsx b/frontend/src/app/satellites/SatelliteResponsiveTable.tsx
index ea8a6a5..72bd56d 100644
--- a/frontend/src/app/satellites/SatelliteResponsiveTable.tsx
+++ b/frontend/src/app/satellites/SatelliteResponsiveTable.tsx
@@ -14,12 +14,22 @@ import {
TableCell,
} from "@/components/shadcn/table";
import { useRouter } from "next/navigation";
+import { SatellitesResult } from "./page";
+import { SatelliteName, SatelliteNumber } from "@/lib/store";
+/**
+ * Renders a table displaying satellite information that updates continuously.
+ *
+ * @param {Object} props - The component props.
+ * @param {Array} props.satellites - The array of satellite objects to display.
+ * @param {boolean} props.inOrbit - Indicates whether the satellites are in orbit or not.
+ * @returns {JSX.Element} The rendered SatelliteResponsiveTable component.
+ */
export default function SatelliteResponsiveTable({
satellites,
inOrbit,
}: {
- satellites: any;
+ satellites: SatellitesResult | undefined;
inOrbit: boolean;
}) {
const router = useRouter();
@@ -66,33 +76,43 @@ export default function SatelliteResponsiveTable({
)}
-
+
{inOrbit
- ? satellites.map((satellite: any) => (
+ ? (satellites ?? []).map((satellite) => (
- handleRowClick(satellite.attributes.slug)
+ handleRowClick(
+ satellite.attributes?.slug ?? "",
+ )
}
/>
))
- : satellites.map((satellite: any) => (
+ : (satellites ?? []).map((satellite) => (
- handleRowClick(satellite.attributes.slug)
+ handleRowClick(
+ satellite.attributes?.slug ?? "",
+ )
}
>
- {satellite.attributes.name}
+ {satellite.attributes?.name}
- {satellite.attributes.missionStatus
+ {satellite.attributes?.missionStatus
? satellite.attributes.missionStatus
: "Unknown"}
diff --git a/frontend/src/components/ui/launchDateCountDown.tsx b/frontend/src/app/satellites/[satelliteSlug]/launchDateCountDown.tsx
similarity index 90%
rename from frontend/src/components/ui/launchDateCountDown.tsx
rename to frontend/src/app/satellites/[satelliteSlug]/launchDateCountDown.tsx
index 26a1a7f..e791be4 100644
--- a/frontend/src/components/ui/launchDateCountDown.tsx
+++ b/frontend/src/app/satellites/[satelliteSlug]/launchDateCountDown.tsx
@@ -2,11 +2,18 @@
import React, { useState, useEffect } from "react";
type LaunchDateCountDownProps = {
- launchDateString: string | undefined;
+ launchDate: string | Date | undefined;
};
+/**
+ * Countdown component that displays the time remaining until a launch date or the time since a launch has occurred.
+ *
+ * @component
+ * @param {string} props.launchDate - The launch date in string format.
+ * @returns {JSX.Element} - The countdown component.
+ */
const LaunchDateCountDown: React.FC = ({
- launchDateString,
+ launchDate: launchDateString,
}) => {
const [displayTime, setDisplayTime] = useState([
"0 days",
diff --git a/frontend/src/app/satellites/[satelliteSlug]/page.tsx b/frontend/src/app/satellites/[satelliteSlug]/page.tsx
index 01fa056..21857ed 100644
--- a/frontend/src/app/satellites/[satelliteSlug]/page.tsx
+++ b/frontend/src/app/satellites/[satelliteSlug]/page.tsx
@@ -1,29 +1,18 @@
import React from "react";
import BlockRendererClient from "@/components/shared/BlockRendererClient";
-import fetchSatelliteInfo from "@/lib/data/fetchSatelliteInfo";
-import { BlocksContent } from "@strapi/blocks-react-renderer";
import RelatedProjectsAndSatellites from "@/components/shared/RelatedProjectsAndSatellites";
import Map2d from "@/app/satellites/[satelliteSlug]/_2dmap/Map2d";
import SatelliteDataHome from "@/components/satelliteData/SatelliteDataHome";
-import LaunchDateCountDown from "@/components/ui/launchDateCountDown";
+import LaunchDateCountDown from "@/app/satellites/[satelliteSlug]/launchDateCountDown";
import {
PageHeader,
PageSubtitle,
PageHeaderAndSubtitle,
} from "@/components/layout/PageHeader";
import Image from "next/image";
-import { SatelliteName, SatelliteNumber } from "@/lib/store";
-
-export interface SatelliteInfo {
- launchDate: string | undefined;
- name: SatelliteName;
- content: BlocksContent;
- relatedProjects?: ProjectOrSatellite[];
- noradId: SatelliteNumber | undefined;
- missionStatus: string | undefined;
- massKg: number | undefined;
- satelliteImage: string | undefined;
-}
+import { SatelliteNumber } from "@/lib/store";
+import { graphql } from "@/lib/tada/graphql";
+import { getClient } from "@/lib/ApolloClient";
export interface ProjectOrSatellite {
id: string;
@@ -40,57 +29,84 @@ export default async function SatelliteInfoPage({
}: {
params: { satelliteSlug: string };
}) {
- const satelliteInfo: SatelliteInfo = await fetchSatelliteInfo({
- params: params,
+ const graphqlData = await getClient().query({
+ query: GET_SATELLITE_INFO,
+ variables: {
+ filters: {
+ slug: {
+ eq: params.satelliteSlug,
+ },
+ },
+ },
});
- if (!satelliteInfo) return Loading...
;
+ // Map all related projects
+ let relatedProjects: ProjectOrSatellite[] = [];
+ graphqlData?.data?.satellites?.data[0]?.attributes?.projects?.data.map(
+ (project: any) => {
+ relatedProjects.push({
+ id: project.id,
+ title: project.attributes?.title,
+ previewImage:
+ project.attributes?.previewImage?.data?.attributes?.url,
+ slug: project.attributes?.slug,
+ isProject: true,
+ });
+ },
+ );
- console.log(satelliteInfo);
+ // Get the satellite attributes
+ let satAttributes = graphqlData?.data?.satellites?.data[0]?.attributes;
- let imageURL = undefined;
- if (STRAPI_URL && satelliteInfo.satelliteImage) {
- imageURL = STRAPI_URL + satelliteInfo.satelliteImage;
+ // If the satellite is not found return a message
+ if (!satAttributes?.catalogNumberNORAD) {
+ return Satellite not found
;
}
- if (Number.isNaN(satelliteInfo.noradId)) {
- return Satellite not found
;
+ // Get the NORAD ID
+ let noradId = Number(satAttributes?.catalogNumberNORAD) as SatelliteNumber;
+
+ // Get the satellite image
+ let satelliteImage = satAttributes?.satelliteImage?.data?.attributes?.url;
+ let imageURL = undefined;
+ if (STRAPI_URL && satelliteImage) {
+ imageURL = STRAPI_URL + satelliteImage;
}
return (
<>
- {satelliteInfo.name}
+ {satAttributes?.name}
- {satelliteInfo.missionStatus
- ? "Mission Status: " + satelliteInfo.missionStatus
+ {satAttributes?.missionStatus
+ ? "Mission Status: " + satAttributes?.missionStatus
: null}
{/* Container for satname, stats and sat image */}
- {satelliteInfo.noradId ? (
+ {noradId ? (
{/* Stats Container */}
- {satelliteInfo.noradId ? (
+ {noradId ? (
) : null}
- {satelliteInfo.massKg
+ {satAttributes?.massKg
? "Mass: " +
- satelliteInfo.massKg +
+ satAttributes?.massKg +
" kg"
: null}
@@ -105,7 +121,7 @@ export default async function SatelliteInfoPage({
{imageURL ? (
) : null}
{/* Container for map */}
- {satelliteInfo.noradId ? (
+ {noradId ? (
-
+
) : null}
{/* Container for body content */}
-
+
{/* Related projects */}
- {satelliteInfo.relatedProjects?.length != 0 ? (
+ {relatedProjects?.length != 0 ? (
<>
Related Projects
- {satelliteInfo.relatedProjects?.map(
+ {relatedProjects?.map(
(project: ProjectOrSatellite) => (
);
}
+
+const GET_SATELLITE_INFO = graphql(`
+ query GET_SATELLITE_INFO($filters: SatelliteFiltersInput) {
+ satellites(filters: $filters) {
+ data {
+ id
+ attributes {
+ catalogNumberNORAD
+ content
+ name
+ massKg
+ missionStatus
+ satelliteImage {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ projects {
+ data {
+ attributes {
+ title
+ previewImage {
+ data {
+ attributes {
+ url
+ }
+ }
+ }
+ slug
+ }
+ id
+ }
+ }
+ launchDate
+ }
+ }
+ }
+ }
+`);
diff --git a/frontend/src/app/satellites/page.tsx b/frontend/src/app/satellites/page.tsx
index caa68c2..dd990e9 100644
--- a/frontend/src/app/satellites/page.tsx
+++ b/frontend/src/app/satellites/page.tsx
@@ -1,6 +1,7 @@
import { getClient } from "@/lib/ApolloClient";
import SatelliteResponsiveTable from "./SatelliteResponsiveTable";
import { graphql } from "@/lib/tada/graphql";
+import { ResultOf } from "@/lib/tada/graphql";
const GET_SATELLITES = graphql(`
query GET_SATELLITES {
@@ -11,12 +12,24 @@ const GET_SATELLITES = graphql(`
catalogNumberNORAD
name
slug
+ missionStatus
}
}
}
}
`);
+// Type for the result of the GET_SATELLITES query
+// Used in SateliteResponsiveTable.tsx
+export type SatellitesResult = NonNullable<
+ ResultOf
["satellites"]
+>["data"];
+
+/**
+ * Renders the Satellites page.
+ * This page fetches satellite data from the server and displays it in two tables:
+ * one for satellites in orbit and another for satellites not in orbit.
+ */
export default async function Satellites() {
try {
const graphqlData = await getClient().query({
@@ -27,13 +40,18 @@ export default async function Satellites() {
(data) => data.attributes?.catalogNumberNORAD == null,
);
+ let satellitesInOrbit = graphqlData.data.satellites?.data.filter(
+ (data) => data.attributes?.catalogNumberNORAD !== null,
+ );
+ let satellitesNotInOrbit = graphqlData.data.satellites?.data.filter(
+ (data) => data.attributes?.catalogNumberNORAD == null,
+ );
+
return (
<>
{/* Table for satellites in orbit */}
data.attributes?.catalogNumberNORAD !== null,
- )}
+ satellites={satellitesInOrbit}
inOrbit={true}
>
@@ -42,10 +60,7 @@ export default async function Satellites() {
{/* Table for satellites not in orbit */}
{noNoradIdArray != undefined && noNoradIdArray.length > 0 ? (
- data.attributes?.catalogNumberNORAD == null,
- )}
+ satellites={satellitesNotInOrbit}
inOrbit={false}
>
) : null}
diff --git a/frontend/src/app/sitemap.ts b/frontend/src/app/sitemap.ts
index d6867a9..9f61971 100644
--- a/frontend/src/app/sitemap.ts
+++ b/frontend/src/app/sitemap.ts
@@ -7,51 +7,16 @@ import { TadaDocumentNode } from "gql.tada";
// Needs to be dynamic as we use the rsc apollo client
export const dynamic = "force-dynamic";
-const GET_ARTICLE_SLUGS = graphql(`
- query GetAllArticleSlugs {
- articles {
- data {
- attributes {
- slug
- }
- }
- }
- }
-`);
-
-const GET_PROJECT_SLUGS = graphql(`
- query GetAllProjectSlugs {
- projects {
- data {
- attributes {
- slug
- }
- }
- }
- }
-`);
-
-const GET_SATELLITE_SLUGS = graphql(`
- query GetAllSatelliteSlugs {
- satellites {
- data {
- attributes {
- slug
- }
- }
- }
- }
-`);
-
export default async function sitemap(): Promise {
// All routes
let routes: MetadataRoute.Sitemap = [];
+
// Add the homepage
if (env.OUTWARD_FACING_URL) {
routes.push({ url: env.OUTWARD_FACING_URL });
}
- // Add all root routes for blo, projects and satellites
+ // Add all root routes for blog, projects and satellites
routes.push({ url: `${env.OUTWARD_FACING_URL}/blog` });
routes.push({ url: `${env.OUTWARD_FACING_URL}/projects` });
routes.push({ url: `${env.OUTWARD_FACING_URL}/satellites` });
@@ -78,6 +43,7 @@ export default async function sitemap(): Promise {
return routes;
}
+// Type definitions for the GraphQL queries
interface Inner {
data: {
attributes: {
@@ -86,6 +52,7 @@ interface Inner {
}[];
}
+// Type guard to check if the object is an Inner object
function isInner(obj: any): obj is Inner {
if (obj.data && obj.data[0].attributes && obj.data[0].attributes.slug) {
return true;
@@ -97,6 +64,11 @@ type QueryType = {
[key: string]: Inner | null;
};
+/**
+ * Retrieves the slugs from the provided query.
+ * @param query - The query to be executed.
+ * @returns A promise that resolves to an array of slugs.
+ */
async function getSlugs(query: TadaDocumentNode): Promise {
let response = await getClient().query({
query: query,
@@ -109,6 +81,11 @@ async function getSlugs(query: TadaDocumentNode): Promise {
return [];
}
+/**
+ * Extracts slugs from the provided data.
+ * @param datas - The data to extract slugs from.
+ * @returns An array of extracted slugs.
+ */
function extractSlugs(datas: Inner | null): string[] {
let data = datas?.data;
if (typeof data !== "undefined" && data !== null) {
@@ -120,3 +97,39 @@ function extractSlugs(datas: Inner | null): string[] {
}
return [];
}
+
+const GET_ARTICLE_SLUGS = graphql(`
+ query GetAllArticleSlugs {
+ articles {
+ data {
+ attributes {
+ slug
+ }
+ }
+ }
+ }
+`);
+
+const GET_PROJECT_SLUGS = graphql(`
+ query GetAllProjectSlugs {
+ projects {
+ data {
+ attributes {
+ slug
+ }
+ }
+ }
+ }
+`);
+
+const GET_SATELLITE_SLUGS = graphql(`
+ query GetAllSatelliteSlugs {
+ satellites {
+ data {
+ attributes {
+ slug
+ }
+ }
+ }
+ }
+`);
diff --git a/frontend/src/components/layout/ErrorBoundaryNavigation.tsx b/frontend/src/components/layout/ErrorBoundaryNavigation.tsx
index fb92d91..8398e5b 100644
--- a/frontend/src/components/layout/ErrorBoundaryNavigation.tsx
+++ b/frontend/src/components/layout/ErrorBoundaryNavigation.tsx
@@ -3,6 +3,14 @@ import React from "react";
import { ErrorBoundary } from "react-error-boundary";
+/**
+ * ErrorBoundaryNavigation component wraps its children with an ErrorBoundary component,
+ * which catches any errors that occur within its children and displays a fallback UI.
+ *
+ * @component
+ * @param {React.ReactNode} children - The content to be wrapped by the ErrorBoundary component.
+ * @returns {JSX.Element} The ErrorBoundaryNavigation component.
+ */
export default function ErrorBoundaryNavigation({
children,
}: {
diff --git a/frontend/src/components/layout/Footer.tsx b/frontend/src/components/layout/Footer.tsx
index 7bc5ee7..4d6f1fc 100644
--- a/frontend/src/components/layout/Footer.tsx
+++ b/frontend/src/components/layout/Footer.tsx
@@ -1,6 +1,10 @@
import { env } from "process";
import NTNULogo from "./NTNULogo";
+/**
+ * The footer component at the bottom of the page.
+ * It includes the NTNU logo, social media links, and contact information.
+ */
export default function Footer() {
return (
diff --git a/frontend/src/components/layout/NTNULogo.tsx b/frontend/src/components/layout/NTNULogo.tsx
index d75edfd..0635a26 100644
--- a/frontend/src/components/layout/NTNULogo.tsx
+++ b/frontend/src/components/layout/NTNULogo.tsx
@@ -4,6 +4,14 @@ interface NTNULogoProps {
height?: number;
}
+/**
+ * Renders the NTNU logo.
+ *
+ * @component
+ * @param {number} width - The width of the logo image. Default is 200.
+ * @param {number} height - The height of the logo image. Default is 200.
+ * @returns {JSX.Element} The rendered NTNU logo component.
+ */
export default function NTNULogo({ width = 200, height = 200 }: NTNULogoProps) {
return (
{
+ if (pathname.includes(path)) {
+ return;
+ }
+ return "navbarLink";
+ };
+
+ return (
+
+
+
+
+
+
+ {/* Drawer that only shows on smaller screens */}
+
+
+
+
+
+
+
+
+
+
+ Blog
+
+
+
+
+
+
+
+
+ Projects
+
+
+
+
+
+
+
+ Satellites
+
+
+
+
+
+
+
+
+
+
+
+ Blog
+
+
+
+
+
+ Projects
+
+
+
+
+ Satellites
+
+
+
+
+
+ );
+}
+
const iconSize = 30;
const iconStyle = "mx-2";
@@ -118,93 +213,3 @@ export function CodiconGithubProject(props: SVGProps) {
);
}
-
-export default function Navbar() {
- const pathname = usePathname();
- const getButtonVariant = (path: string) => {
- if (pathname.includes(path)) {
- return;
- }
- return "navbarLink";
- };
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Blog
-
-
-
-
-
-
-
-
- Projects
-
-
-
-
-
-
-
- Satellites
-
-
-
-
-
-
-
-
-
-
-
- Blog
-
-
-
-
-
- Projects
-
-
-
-
- Satellites
-
-
-
-
-
- );
-}
diff --git a/frontend/src/components/layout/PageHeader.tsx b/frontend/src/components/layout/PageHeader.tsx
index cc9dde3..49c5df1 100644
--- a/frontend/src/components/layout/PageHeader.tsx
+++ b/frontend/src/components/layout/PageHeader.tsx
@@ -1,5 +1,12 @@
import React from "react";
+/**
+ * Renders a page header component.
+ *
+ * @param {Object} props - The component props.
+ * @param {React.ReactNode} props.children - The content to be rendered inside the header.
+ * @returns {JSX.Element} The rendered page header.
+ */
function PageHeader({ children }: { children?: React.ReactNode }) {
return (
@@ -8,6 +15,13 @@ function PageHeader({ children }: { children?: React.ReactNode }) {
);
}
+/**
+ * Renders a subtitle for the page.
+ *
+ * @param {Object} props - The component props.
+ * @param {React.ReactNode} props.children - The content to be rendered as the subtitle.
+ * @returns {React.ReactNode} The rendered subtitle component.
+ */
function PageSubtitle({ children }: { children?: React.ReactNode }) {
return (
@@ -16,7 +30,14 @@ function PageSubtitle({ children }: { children?: React.ReactNode }) {
);
}
-// Component that wraps both the header and the subtitle to be used together
+/**
+ * Renders a page header and subtitle component.
+ * Wraps both the header and the subtitle to be used together
+ *
+ * @param {Object} props - The component props.
+ * @param {React.ReactNode} props.children - The content to be rendered inside the component.
+ * @returns {React.ReactNode} The rendered page header and subtitle component.
+ */
function PageHeaderAndSubtitle({ children }: { children?: React.ReactNode }) {
return (
diff --git a/frontend/src/components/layout/PageLayout.tsx b/frontend/src/components/layout/PageLayout.tsx
index 274bb73..13bca72 100644
--- a/frontend/src/components/layout/PageLayout.tsx
+++ b/frontend/src/components/layout/PageLayout.tsx
@@ -1,6 +1,11 @@
import React from "react";
-// Used for pages that do not requre a colored transparent background
+/**
+ * A component that adds padding to the page content.
+ *
+ * @param children - The content to be wrapped with padding.
+ * @returns The padded page content.
+ */
function PagePadding({ children }: { children: React.ReactNode }) {
return (
@@ -9,6 +14,12 @@ function PagePadding({ children }: { children: React.ReactNode }) {
);
}
+/**
+ * Renders a component with horizontal padding.
+ *
+ * @param {React.ReactNode} children - The content to be rendered within the component.
+ * @returns {React.ReactNode} The component with horizontal padding.
+ */
function PagePaddingOnlyHorizontal({
children,
}: {
@@ -20,7 +31,18 @@ function PagePaddingOnlyHorizontal({
}
// Used for pages that require a colored transparent background
-function PageColoredBackground({ children }: { children: React.ReactNode }) {
+/**
+ * Renders a page with a colored background and padding.
+ *
+ * @param {Object} props - The component props.
+ * @param {React.ReactNode} props.children - The content to be rendered inside the layout.
+ * @returns {JSX.Element} The rendered page layout.
+ */
+function PageColoredBackground({
+ children,
+}: {
+ children: React.ReactNode;
+}): React.JSX.Element {
return (
{children}
diff --git a/frontend/src/components/layout/Starfield.tsx b/frontend/src/components/layout/Starfield.tsx
index c7fa3fa..0f80ea6 100644
--- a/frontend/src/components/layout/Starfield.tsx
+++ b/frontend/src/components/layout/Starfield.tsx
@@ -9,7 +9,19 @@ interface Props {
starCount?: number;
}
-export default function Starfield(props: Props) {
+/**
+ * Renders a starfield effect of moving stars on a canvas element.
+ * Used as our background
+ *
+ * @component
+ * @param {Object} props - The component props.
+ * @param {number} [props.speedFactor=0.05] - The speed factor of the starfield animation.
+ * @param {string} [props.backgroundColor="black"] - The background color of the starfield.
+ * @param {number[]} [props.starColor=[255, 255, 255]] - The color of the stars in RGB format.
+ * @param {number} [props.starCount=5000] - The number of stars to render.
+ * @returns {JSX.Element} The rendered starfield canvas.
+ */
+export default function Starfield(props: Props): React.JSX.Element {
const {
speedFactor = 0.05,
backgroundColor = "black",
diff --git a/frontend/src/components/satelliteData/SatelliteDataHome.tsx b/frontend/src/components/satelliteData/SatelliteDataHome.tsx
index d5bafce..559e840 100644
--- a/frontend/src/components/satelliteData/SatelliteDataHome.tsx
+++ b/frontend/src/components/satelliteData/SatelliteDataHome.tsx
@@ -4,8 +4,12 @@ import { convertSatrec, SatelliteInfo } from "@/lib/convertSatrec";
import { useSatelliteStore } from "@/lib/store";
import { flag } from "country-emoji";
-const updateInterval = 50;
+const updateInterval = 50; // in ms
+/**
+ * Renders the SatelliteDataHome component.
+ * This component displays information about a selected satellite, such as velocity, altitude, latitude, longitude, and country.
+ */
export default function SatelliteDataHome() {
const { selectedSatellite, satNumToEntry } = useSatelliteStore();
const [satelliteInfo, setSatelliteInfo] = useState
(
diff --git a/frontend/src/components/satelliteData/SatelliteInitialFetch.tsx b/frontend/src/components/satelliteData/SatelliteInitialFetch.tsx
index 0c67d1e..ea3c74d 100644
--- a/frontend/src/components/satelliteData/SatelliteInitialFetch.tsx
+++ b/frontend/src/components/satelliteData/SatelliteInitialFetch.tsx
@@ -1,19 +1,22 @@
"use client";
import { SatelliteEntry, useSatelliteStore } from "@/lib/store";
import { useEffect } from "react";
+import React from "react";
interface SatelliteInitialClientFetchProps {
satData: SatelliteEntry[];
}
-/*
-This is a component that initializes the Zustand store with satellite data
-fetched from the server. It is used in the layout to fetch satellite data
-serverside and set it in the store.
-*/
+/**
+ * Initializes the Zustand store with satellite entries.
+ * It is used in the layout to fetch satellite data serverside and set it in the store.
+ *
+ * @param {SatelliteInitialClientFetchProps} props - The props containing satellite data.
+ * @returns {React.JSX.Element} - The component doesn't render anything.
+ */
export default function InitializeZustandWithSatEntries({
satData,
-}: SatelliteInitialClientFetchProps) {
+}: SatelliteInitialClientFetchProps): React.JSX.Element {
const setSatellites = useSatelliteStore((state) => state.setSatellites);
useEffect(() => {
diff --git a/frontend/src/components/satelliteData/SatelliteStatsTableRow.tsx b/frontend/src/components/satelliteData/SatelliteStatsTableRow.tsx
index 6184cbd..aec1e9e 100644
--- a/frontend/src/components/satelliteData/SatelliteStatsTableRow.tsx
+++ b/frontend/src/components/satelliteData/SatelliteStatsTableRow.tsx
@@ -7,6 +7,16 @@ import type { SatelliteNumber, SatelliteName } from "@/lib/store";
const updateInterval = 50;
+/**
+ * Represents a table row displaying satellite statistics.
+ *
+ * @component
+ * @param {Object} props - The component props.
+ * @param {SatelliteName} props.satName - The name of the satellite.
+ * @param {SatelliteNumber} props.satNum - The number of the satellite.
+ * @param {Function} props.handleRowClick - The callback function to handle row click event.
+ * @returns {JSX.Element} The rendered table row component.
+ */
export default function SatelliteStatsTableRow({
satName,
satNum,
diff --git a/frontend/src/components/satelliteData/_exampleSatData.js b/frontend/src/components/satelliteData/_exampleSatData.js
index f7ab422..344048e 100644
--- a/frontend/src/components/satelliteData/_exampleSatData.js
+++ b/frontend/src/components/satelliteData/_exampleSatData.js
@@ -1,3 +1,6 @@
+// This is example data used during development
+// Keeping it for future developers
+// Consits of TLE's
export const exampleData = `
0 VANGUARD 2
1 11U 59001A 22053.83197560 .00000847 00000-0 45179-3 0 9996
diff --git a/frontend/src/components/shared/BlockRendererClient.tsx b/frontend/src/components/shared/BlockRendererClient.tsx
index d67f404..fd49c8c 100644
--- a/frontend/src/components/shared/BlockRendererClient.tsx
+++ b/frontend/src/components/shared/BlockRendererClient.tsx
@@ -6,6 +6,12 @@ import {
type BlocksContent,
} from "@strapi/blocks-react-renderer";
+/**
+ * Renders Strapi rich text blocks
+ *
+ * @param content - The content blocks to render.
+ * @returns The rendered content blocks.
+ */
export default function BlockRendererClient({
content,
}: {
diff --git a/frontend/src/components/shared/CardGrid.tsx b/frontend/src/components/shared/CardGrid.tsx
index d992970..eb9d68a 100644
--- a/frontend/src/components/shared/CardGrid.tsx
+++ b/frontend/src/components/shared/CardGrid.tsx
@@ -1,6 +1,18 @@
import React from "react";
-export default function CardGrid({ children }: { children: React.ReactNode }) {
+/**
+ * Renders a grid layout for displaying cards.
+ *
+ * @component
+ * @param {Object} props - The component props.
+ * @param {React.ReactNode} props.children - The content to be rendered inside the grid.
+ * @returns {React.ReactNode} - The rendered CardGrid component.
+ */
+export default function CardGrid({
+ children,
+}: {
+ children: React.ReactNode;
+}): React.ReactNode {
return (
{children}
diff --git a/frontend/src/components/shared/CardWithContent.tsx b/frontend/src/components/shared/CardWithContent.tsx
index 6c4f4aa..7c9f7ba 100644
--- a/frontend/src/components/shared/CardWithContent.tsx
+++ b/frontend/src/components/shared/CardWithContent.tsx
@@ -1,31 +1,22 @@
-import {
- BlogCard as Card,
- BlogCardContent as CardContent,
- BlogCardHeader as CardHeader,
- BlogCardTitle as CardTitle,
-} from "@/components/ui/blogCard";
import Link from "next/link";
import Image from "next/image";
import { cn } from "@/lib/utils";
import { SVGProps } from "react";
+import * as React from "react";
-export function PlaceholderImage(props: SVGProps
) {
- return (
-
-
-
- );
-}
-
+/**
+ * Renders a card component with content.
+ *
+ * @param {Object} props - The component props.
+ * @param {string} props.title - The title of the card.
+ * @param {string} [props.description] - The description of the card.
+ * @param {string} props.link - The link associated with the card.
+ * @param {string} [props.className] - The CSS classes for the card.
+ * @param {string} [props.tag] - The tag associated with the card.
+ * @param {string | Date} [props.datePublished] - The date to be shown.
+ * @param {string} [props.imageURL] - The URL of the image associated with the card.
+ * @returns {React.ReactNode} The rendered card component.
+ */
export default function CardWithContent({
title,
description,
@@ -42,7 +33,7 @@ export default function CardWithContent({
tag?: string;
datePublished?: string | Date;
imageURL?: string;
-}) {
+}): React.ReactNode {
function formatDate(date: string | Date) {
let newDate = new Date(date);
const options: Intl.DateTimeFormatOptions = {
@@ -100,3 +91,79 @@ export default function CardWithContent({
);
}
+
+const Card = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+Card.displayName = "Card";
+
+const CardHeader = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardHeader.displayName = "CardHeader";
+
+const CardTitle = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardTitle.displayName = "CardTitle";
+
+const CardContent = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardContent.displayName = "CardContent";
+
+const CardFooter = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+));
+CardFooter.displayName = "CardFooter";
+
+// SVG component for a placeholder image. Looks like a camera.
+export function PlaceholderImage(props: SVGProps) {
+ return (
+
+
+
+ );
+}
diff --git a/frontend/src/components/shared/RelatedProjectsAndSatellites.tsx b/frontend/src/components/shared/RelatedProjectsAndSatellites.tsx
index 72bd2d8..6d6c321 100644
--- a/frontend/src/components/shared/RelatedProjectsAndSatellites.tsx
+++ b/frontend/src/components/shared/RelatedProjectsAndSatellites.tsx
@@ -9,12 +9,20 @@ import {
CardTitle,
} from "@/components/shadcn/card";
import { PlaceholderImage } from "@/components/shared/CardWithContent";
+import { ReactNode } from "react";
+/**
+ * Renders a component that displays related projects or satellites as cards.
+ *
+ * @param {Object} props - The component props.
+ * @param {ProjectOrSatellite} props.project - The project or satellite object.
+ * @returns {ReactNode} The rendered component.
+ */
export default function RelatedProjectsAndSatellites({
project,
}: {
project: ProjectOrSatellite;
-}) {
+}): ReactNode {
let previewImage = project.previewImage;
if (STRAPI_URL && previewImage != undefined) {
previewImage = STRAPI_URL + previewImage;
diff --git a/frontend/src/components/ui/blogCard.tsx b/frontend/src/components/ui/blogCard.tsx
deleted file mode 100644
index 3c0c84b..0000000
--- a/frontend/src/components/ui/blogCard.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import * as React from "react";
-
-import { cn } from "@/lib/utils";
-
-const BlogCard = React.forwardRef<
- HTMLDivElement,
- React.HTMLAttributes
->(({ className, ...props }, ref) => (
-
-));
-BlogCard.displayName = "BlogCard";
-
-const BlogCardHeader = React.forwardRef<
- HTMLDivElement,
- React.HTMLAttributes
->(({ className, ...props }, ref) => (
-
-));
-BlogCardHeader.displayName = "BlogCardHeader";
-
-const BlogCardTitle = React.forwardRef<
- HTMLParagraphElement,
- React.HTMLAttributes
->(({ className, ...props }, ref) => (
-
-));
-BlogCardTitle.displayName = "BlogCardTitle";
-
-const BlogCardContent = React.forwardRef<
- HTMLDivElement,
- React.HTMLAttributes
->(({ className, ...props }, ref) => (
-
-));
-BlogCardContent.displayName = "BlogCardContent";
-
-const BlogCardFooter = React.forwardRef<
- HTMLDivElement,
- React.HTMLAttributes
->(({ className, ...props }, ref) => (
-
-));
-BlogCardFooter.displayName = "BlogCardFooter";
-
-export {
- BlogCard,
- BlogCardHeader,
- BlogCardFooter,
- BlogCardTitle,
- BlogCardContent,
-};
diff --git a/frontend/src/components/wrappers/ApolloWrapper.tsx b/frontend/src/components/wrappers/ApolloWrapper.tsx
index ccd2f87..f507a14 100644
--- a/frontend/src/components/wrappers/ApolloWrapper.tsx
+++ b/frontend/src/components/wrappers/ApolloWrapper.tsx
@@ -2,7 +2,7 @@
// ^ this file needs the "use client" pragma
import React from "react";
-import { ApolloLink, HttpLink } from "@apollo/client";
+import { ApolloLink, HttpLink, NormalizedCacheObject } from "@apollo/client";
import {
ApolloNextAppProvider,
NextSSRInMemoryCache,
@@ -12,8 +12,11 @@ import {
const STRAPI_URL = process.env.BACKEND_INTERNAL_URL;
-// have a function to create a client for you
-function makeClient() {
+/**
+ * Creates an Apollo Client instance for making GraphQL requests.
+ * @returns The Apollo Client instance.
+ */
+function makeClient(): NextSSRApolloClient {
const httpLink = new HttpLink({
// this needs to be an absolute url, as relative urls cannot be used in SSR
uri: STRAPI_URL + "/graphql",
@@ -44,7 +47,13 @@ function makeClient() {
});
}
-// you need to create a component to wrap your app in
+/**
+ * Wraps the provided children components with the ApolloNextAppProvider,
+ * which sets up the Apollo Client for the application.
+ *
+ * @param children - The components to be wrapped.
+ * @returns The wrapped components with the Apollo Client setup.
+ */
export function ApolloWrapper({ children }: React.PropsWithChildren) {
return (
diff --git a/frontend/src/lib/SlicePreviewText.ts b/frontend/src/lib/SlicePreviewText.ts
index 2479a7b..9ecddf8 100644
--- a/frontend/src/lib/SlicePreviewText.ts
+++ b/frontend/src/lib/SlicePreviewText.ts
@@ -1,5 +1,12 @@
import { BlocksContent } from "@strapi/blocks-react-renderer";
+/**
+ * Returns a preview text by slicing the content of the first paragraph block.
+ * If the text exceeds 100 characters, it appends "..." at the end.
+ *
+ * @param content - The BlocksContent to extract the preview text from.
+ * @returns The preview text.
+ */
function slicePreviewText(content: BlocksContent): string {
let text = "";
for (const block of content) {
diff --git a/frontend/src/lib/convertSatrec.ts b/frontend/src/lib/convertSatrec.ts
index 1b58a19..30a9e37 100644
--- a/frontend/src/lib/convertSatrec.ts
+++ b/frontend/src/lib/convertSatrec.ts
@@ -11,6 +11,9 @@ import { point } from "@turf/helpers";
import booleanPointInPolygon from "@turf/boolean-point-in-polygon";
import { SatelliteName } from "./store";
+/**
+ * Represents information about a satellite.
+ */
interface SatelliteInfo {
[key: string]: any;
name: string;
@@ -21,6 +24,9 @@ interface SatelliteInfo {
country: string;
}
+/**
+ * Represents information about a satellite's future position.
+ */
interface SatelliteFutureInfo {
latitudeDeg: string;
longitudeDeg: string;
@@ -28,6 +34,12 @@ interface SatelliteFutureInfo {
export type { SatelliteInfo, SatelliteFutureInfo };
+/**
+ * Finds the country name based on the given latitude and longitude coordinates.
+ * @param latitudeDeg - The latitude in degrees.
+ * @param longitudeDeg - The longitude in degrees.
+ * @returns The name of the country if found, otherwise "Ocean".
+ */
const findCountry = (latitudeDeg: number, longitudeDeg: number): string => {
const pointFeature = point([longitudeDeg, latitudeDeg]);
@@ -47,7 +59,13 @@ const findCountry = (latitudeDeg: number, longitudeDeg: number): string => {
return "Ocean"; // Fallback in case no country is found
};
-// Convert satellite record to satellite info, including latitude, longitude, altitude, velocity, and country
+/**
+ * Converts a SatRec object to SatelliteInfo.
+ *
+ * @param satrec - The SatRec object to convert.
+ * @param satName - The name of the satellite.
+ * @returns The converted SatelliteInfo object.
+ */
export const convertSatrec = (
satrec: SatRec,
satName: SatelliteName,
@@ -105,7 +123,13 @@ export const convertSatrec = (
};
};
-// Function to predict the satellite's future positions
+/**
+ * Predicts the future positions of a satellite based on its current state.
+ *
+ * @param satrec - The satellite's state information.
+ * @param projectionAmount - The number of minutes to project into the future.
+ * @returns An array of future positions of the satellite.
+ */
export const predictFuturePositions = (
satrec: SatRec,
projectionAmount: number,
diff --git a/frontend/src/lib/data/fetchFeaturedProjects.ts b/frontend/src/lib/data/fetchFeaturedProjects.ts
deleted file mode 100644
index 1598475..0000000
--- a/frontend/src/lib/data/fetchFeaturedProjects.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { graphql } from "@/lib/tada/graphql";
-import { getClient } from "../ApolloClient";
-
-const GET_FEATURED_PROJECTS = graphql(`
- query HomeFeaturedProjects {
- homeFeaturedProjects {
- data {
- attributes {
- title
- textContent
- featuredProject1 {
- data {
- attributes {
- title
- previewImage {
- data {
- attributes {
- url
- }
- }
- }
- slug
- }
- }
- }
- featuredProject2 {
- data {
- attributes {
- title
- previewImage {
- data {
- attributes {
- url
- }
- }
- }
- slug
- }
- }
- }
- featuredProject3 {
- data {
- attributes {
- title
- previewImage {
- data {
- attributes {
- url
- }
- }
- }
- slug
- }
- }
- }
- }
- }
- }
- }
-`);
-
-export default async function fetchFeaturedProjects() {
- const client = getClient();
- const { data } = await client.query({
- query: GET_FEATURED_PROJECTS,
- });
-
- return data.homeFeaturedProjects?.data?.attributes;
-}
diff --git a/frontend/src/lib/data/fetchMissionStatement.ts b/frontend/src/lib/data/fetchMissionStatement.ts
deleted file mode 100644
index d73e728..0000000
--- a/frontend/src/lib/data/fetchMissionStatement.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { graphql } from "@/lib/tada/graphql";
-import { getClient } from "../ApolloClient";
-
-const GET_MISSION_STATEMENT = graphql(`
- query HomeMissionStatement {
- homeMissionStatement {
- data {
- attributes {
- title
- textContent
- }
- }
- }
- }
-`);
-
-export default async function fetchMissionStatement() {
- const client = getClient(); // Ensure getClient properly typed to return ApolloClient
- const response = await client.query({
- // This ensures that TypeScript expects the right structure
- query: GET_MISSION_STATEMENT,
- });
-
- const missionStatement =
- response.data.homeMissionStatement?.data?.attributes;
-
- return {
- title: missionStatement?.title,
- textContent: missionStatement?.textContent,
- };
-}
diff --git a/frontend/src/lib/data/fetchSatelliteInfo.ts b/frontend/src/lib/data/fetchSatelliteInfo.ts
deleted file mode 100644
index 5da4259..0000000
--- a/frontend/src/lib/data/fetchSatelliteInfo.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import {
- ProjectOrSatellite,
- SatelliteInfo,
-} from "@/app/satellites/[satelliteSlug]/page";
-import { getClient } from "../ApolloClient";
-import { SatelliteName, SatelliteNumber } from "../store";
-import { graphql } from "@/lib/tada/graphql";
-import { BlocksContent } from "@strapi/blocks-react-renderer";
-
-const GET_SATELLITE_INFO = graphql(`
- query GET_SATELLITE_INFO($filters: SatelliteFiltersInput) {
- satellites(filters: $filters) {
- data {
- id
- attributes {
- catalogNumberNORAD
- content
- name
- massKg
- missionStatus
- satelliteImage {
- data {
- attributes {
- url
- }
- }
- }
- projects {
- data {
- attributes {
- title
- previewImage {
- data {
- attributes {
- url
- }
- }
- }
- slug
- }
- id
- }
- }
- launchDate
- }
- }
- }
- }
-`);
-
-export default async function fetchSatelliteInfo({
- params,
-}: {
- params: { satelliteSlug: string };
-}) {
- let satelliteInfo: SatelliteInfo;
-
- const filters = {
- slug: {
- eq: params.satelliteSlug,
- },
- };
-
- const graphqlData = await getClient().query({
- query: GET_SATELLITE_INFO,
- variables: {
- filters: filters,
- },
- });
-
- let projects: ProjectOrSatellite[] = [];
-
- graphqlData?.data?.satellites?.data[0]?.attributes?.projects?.data.map(
- (project: any) => {
- projects.push({
- id: project.id,
- title: project.attributes?.title,
- previewImage:
- project.attributes?.previewImage?.data?.attributes?.url,
- slug: project.attributes?.slug,
- isProject: true,
- });
- },
- );
-
- satelliteInfo = {
- name:
- (graphqlData?.data?.satellites?.data[0]?.attributes
- ?.name as SatelliteName) ?? "",
- content: graphqlData?.data?.satellites?.data[0]?.attributes
- ?.content as BlocksContent,
- relatedProjects: projects ?? [],
- noradId:
- (Number(
- graphqlData?.data?.satellites?.data[0]?.attributes
- ?.catalogNumberNORAD,
- ) as SatelliteNumber) ?? undefined,
- launchDate:
- (graphqlData.data.satellites?.data[0]?.attributes
- ?.launchDate as string) ?? "",
- missionStatus:
- graphqlData?.data?.satellites?.data[0]?.attributes?.missionStatus ??
- undefined,
- massKg:
- graphqlData?.data?.satellites?.data[0]?.attributes?.massKg ??
- undefined,
- satelliteImage:
- graphqlData?.data?.satellites?.data[0]?.attributes?.satelliteImage
- ?.data?.attributes?.url ?? undefined,
- };
-
- return satelliteInfo;
-}
diff --git a/frontend/src/lib/data/fetchSatelliteNamesAndId.ts b/frontend/src/lib/data/fetchSatelliteNamesAndId.ts
index ea2b0b4..2059934 100644
--- a/frontend/src/lib/data/fetchSatelliteNamesAndId.ts
+++ b/frontend/src/lib/data/fetchSatelliteNamesAndId.ts
@@ -21,6 +21,10 @@ interface SatelliteNameAndNum {
num: SatelliteNumber;
}
+/**
+ * Fetches satellite names and IDs from the server. Used in the root Layout to fetch all satellite data
+ * @returns A promise that resolves to an array of `SatelliteNameAndNum` objects.
+ */
export default async function fetchSatelliteNamesAndId(): Promise<
SatelliteNameAndNum[]
> {
diff --git a/frontend/src/lib/getSatelliteData.ts b/frontend/src/lib/getSatelliteData.ts
index 9b10c99..380a237 100644
--- a/frontend/src/lib/getSatelliteData.ts
+++ b/frontend/src/lib/getSatelliteData.ts
@@ -1,8 +1,6 @@
import { twoline2satrec } from "satellite.js";
import { SatelliteEntry, SatelliteName, SatelliteNumber } from "./store";
-// Satellite data interfac
-
// Cache the satellite data
let cachedData: {
data: Record;
@@ -12,8 +10,14 @@ let cachedData: {
timestamp: new Date(0),
};
-// Map TLE data to satellite data
-// https://en.wikipedia.org/wiki/Two-line_element_set
+//
+/**
+ * Maps a TLE string to an array of SatelliteEntry objects.
+ * See https://en.wikipedia.org/wiki/Two-line_element_set
+ *
+ * @param tleString - The TLE string to be mapped.
+ * @returns An array of SatelliteEntry objects.
+ */
function mapTleToSatData(tleString: string): SatelliteEntry[] {
const lines = tleString.trim().split("\n");
const satellites: SatelliteEntry[] = [];
@@ -29,7 +33,12 @@ function mapTleToSatData(tleString: string): SatelliteEntry[] {
return satellites;
}
-// fetch satellite data from celestrak by id
+/**
+ * Fetches satellite data by satellite NORAD number/id from celestrak.org.
+ * @param satNum - The satellite number.
+ * @returns A promise that resolves to an array of SatelliteEntry objects.
+ * @throws If the request fails or if access is denied.
+ */
async function fetchSatelliteDataById(
satNum: SatelliteNumber,
): Promise {
@@ -61,7 +70,13 @@ function isStale(timestamp: Date): boolean {
return now.getTime() - timestamp.getTime() > 24 * 60 * 60 * 1000;
}
-// Load satellite data by id
+/**
+ * Retrieves satellite data by satellite number.
+ * If the data is not available in the cache or is stale, it fetches the data and updates the cache.
+ *
+ * @param satNum - The satellite number.
+ * @returns A promise that resolves to the satellite entry.
+ */
export async function satLoaderById(
satNum: SatelliteNumber,
): Promise {
diff --git a/frontend/src/lib/helpers.ts b/frontend/src/lib/helpers.ts
index 8dc94b7..61e2ebd 100644
--- a/frontend/src/lib/helpers.ts
+++ b/frontend/src/lib/helpers.ts
@@ -1,3 +1,11 @@
+/**
+ * Converts a full name to initials.
+ * If the name is undefined, it returns the default initials "JD" for John Doe.
+ * If there are more than 3 names, it uses the first and last name initials.
+ * Otherwise, it uses the first letter of each name as initials.
+ * @param name - The full name to convert to initials.
+ * @returns The initials of the full name.
+ */
function fullNameToInitials(name: string | undefined): string {
// If undefined return default JD for John Doe
if (name === undefined) {
diff --git a/frontend/src/lib/store.ts b/frontend/src/lib/store.ts
index be761e3..0a33f20 100644
--- a/frontend/src/lib/store.ts
+++ b/frontend/src/lib/store.ts
@@ -17,6 +17,7 @@ type Nominal = Type & {
export type SatelliteName = Nominal;
export type SatelliteNumber = Nominal;
+
// Satellite entry for setSatellites
export interface SatelliteEntry {
name: SatelliteName;
@@ -31,7 +32,7 @@ export interface SatelliteState {
satNumToEntry: Record;
}
-// Disable unused variables as the store actions defined here are used in other files
+// Disable unused variables as the store actions defined here are used in other files,
/* eslint-disable no-unused-vars */
// Define the actions
export interface SatelliteActions {
diff --git a/frontend/src/lib/tada/graphql-env.d.ts b/frontend/src/lib/tada/graphql-env.d.ts
index 9b8e045..942501c 100644
--- a/frontend/src/lib/tada/graphql-env.d.ts
+++ b/frontend/src/lib/tada/graphql-env.d.ts
@@ -19,62 +19,62 @@ export type introspection = {
'ArticleEntity': { kind: 'OBJECT'; name: 'ArticleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Article'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'ArticleEntityResponse': { kind: 'OBJECT'; name: 'ArticleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; } }; }; };
'ArticleEntityResponseCollection': { kind: 'OBJECT'; name: 'ArticleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'ArticleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'previewTitle'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'datePublished'; type: { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; ofType: null; }; defaultValue: null }, { name: 'body'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'author'; type: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'Tag'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; defaultValue: null }]; };
- 'ArticleInput': { kind: 'INPUT_OBJECT'; name: 'ArticleInput'; isOneOf: false; inputFields: [{ name: 'previewTitle'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'datePublished'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'coverImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'body'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'author'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'Tag'; type: { kind: 'ENUM'; name: 'ENUM_ARTICLE_TAG'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
+ 'ArticleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'previewTitle'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'datePublished'; type: { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; ofType: null; }; defaultValue: null }, { name: 'body'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'author'; type: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'Tag'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'ArticleInput': { kind: 'INPUT_OBJECT'; name: 'ArticleInput'; inputFields: [{ name: 'previewTitle'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'datePublished'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'coverImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'body'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'author'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'Tag'; type: { kind: 'ENUM'; name: 'ENUM_ARTICLE_TAG'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
'ArticleRelationResponseCollection': { kind: 'OBJECT'; name: 'ArticleRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; }; }; }; } }; }; };
'Author': { kind: 'OBJECT'; name: 'Author'; fields: { 'articles': { name: 'articles'; type: { kind: 'OBJECT'; name: 'ArticleRelationResponseCollection'; ofType: null; } }; 'avatar': { name: 'avatar'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'AuthorEntity': { kind: 'OBJECT'; name: 'AuthorEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Author'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'AuthorEntityResponse': { kind: 'OBJECT'; name: 'AuthorEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'AuthorEntity'; ofType: null; } }; }; };
'AuthorEntityResponseCollection': { kind: 'OBJECT'; name: 'AuthorEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AuthorEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'AuthorFiltersInput': { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'articles'; type: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; defaultValue: null }]; };
- 'AuthorInput': { kind: 'INPUT_OBJECT'; name: 'AuthorInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'avatar'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'articles'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
+ 'AuthorFiltersInput': { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'articles'; type: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'AuthorInput': { kind: 'INPUT_OBJECT'; name: 'AuthorInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'avatar'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'articles'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
'Boolean': unknown;
- 'BooleanFilterInput': { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }]; };
+ 'BooleanFilterInput': { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }]; };
'Date': unknown;
- 'DateFilterInput': { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }]; };
+ 'DateFilterInput': { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }]; };
'DateTime': unknown;
- 'DateTimeFilterInput': { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }]; };
+ 'DateTimeFilterInput': { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }]; };
'ENUM_ARTICLE_TAG': { name: 'ENUM_ARTICLE_TAG'; enumValues: 'Satellites' | 'Projects' | 'General'; };
'FeaturedImage': { kind: 'OBJECT'; name: 'FeaturedImage'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'description': { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'featuredImage': { name: 'featuredImage'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'satellite': { name: 'satellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'FeaturedImageEntity': { kind: 'OBJECT'; name: 'FeaturedImageEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'FeaturedImage'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'FeaturedImageEntityResponse': { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntity'; ofType: null; } }; }; };
- 'FeaturedImageInput': { kind: 'INPUT_OBJECT'; name: 'FeaturedImageInput'; isOneOf: false; inputFields: [{ name: 'featuredImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'satellite'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
- 'FileInfoInput': { kind: 'INPUT_OBJECT'; name: 'FileInfoInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; };
+ 'FeaturedImageInput': { kind: 'INPUT_OBJECT'; name: 'FeaturedImageInput'; inputFields: [{ name: 'featuredImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'satellite'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
+ 'FileInfoInput': { kind: 'INPUT_OBJECT'; name: 'FileInfoInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; };
'Float': unknown;
- 'FloatFilterInput': { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }]; };
+ 'FloatFilterInput': { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }]; };
'GenericMorph': { kind: 'UNION'; name: 'GenericMorph'; fields: {}; possibleTypes: 'Article' | 'Author' | 'FeaturedImage' | 'Hero' | 'HomeFeaturedProjects' | 'HomeMissionStatement' | 'I18NLocale' | 'Project' | 'Satellite' | 'UploadFile' | 'UploadFolder' | 'UsersPermissionsPermission' | 'UsersPermissionsRole' | 'UsersPermissionsUser'; };
'Hero': { kind: 'OBJECT'; name: 'Hero'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'image': { name: 'image'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'text': { name: 'text'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'HeroEntity': { kind: 'OBJECT'; name: 'HeroEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Hero'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'HeroEntityResponse': { kind: 'OBJECT'; name: 'HeroEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'HeroEntity'; ofType: null; } }; }; };
- 'HeroInput': { kind: 'INPUT_OBJECT'; name: 'HeroInput'; isOneOf: false; inputFields: [{ name: 'image'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'text'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
+ 'HeroInput': { kind: 'INPUT_OBJECT'; name: 'HeroInput'; inputFields: [{ name: 'image'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'text'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
'HomeFeaturedProjects': { kind: 'OBJECT'; name: 'HomeFeaturedProjects'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'featuredProject1': { name: 'featuredProject1'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'featuredProject2': { name: 'featuredProject2'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'featuredProject3': { name: 'featuredProject3'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'textContent': { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'HomeFeaturedProjectsEntity': { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjects'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'HomeFeaturedProjectsEntityResponse': { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntity'; ofType: null; } }; }; };
- 'HomeFeaturedProjectsInput': { kind: 'INPUT_OBJECT'; name: 'HomeFeaturedProjectsInput'; isOneOf: false; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'featuredProject1'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'featuredProject2'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'featuredProject3'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
+ 'HomeFeaturedProjectsInput': { kind: 'INPUT_OBJECT'; name: 'HomeFeaturedProjectsInput'; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'featuredProject1'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'featuredProject2'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'featuredProject3'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
'HomeMissionStatement': { kind: 'OBJECT'; name: 'HomeMissionStatement'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'textContent': { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'HomeMissionStatementEntity': { kind: 'OBJECT'; name: 'HomeMissionStatementEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'HomeMissionStatement'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'HomeMissionStatementEntityResponse': { kind: 'OBJECT'; name: 'HomeMissionStatementEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'HomeMissionStatementEntity'; ofType: null; } }; }; };
- 'HomeMissionStatementInput': { kind: 'INPUT_OBJECT'; name: 'HomeMissionStatementInput'; isOneOf: false; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
+ 'HomeMissionStatementInput': { kind: 'INPUT_OBJECT'; name: 'HomeMissionStatementInput'; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
'I18NLocale': { kind: 'OBJECT'; name: 'I18NLocale'; fields: { 'code': { name: 'code'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'I18NLocaleEntity': { kind: 'OBJECT'; name: 'I18NLocaleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'I18NLocale'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'I18NLocaleEntityResponse': { kind: 'OBJECT'; name: 'I18NLocaleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntity'; ofType: null; } }; }; };
'I18NLocaleEntityResponseCollection': { kind: 'OBJECT'; name: 'I18NLocaleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'I18NLocaleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'I18NLocaleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'code'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'I18NLocaleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'code'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; defaultValue: null }]; };
'ID': unknown;
- 'IDFilterInput': { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }]; };
+ 'IDFilterInput': { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }]; };
'Int': unknown;
- 'IntFilterInput': { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }]; };
+ 'IntFilterInput': { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }]; };
'JSON': unknown;
- 'JSONFilterInput': { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }]; };
+ 'JSONFilterInput': { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }]; };
'Mutation': { kind: 'OBJECT'; name: 'Mutation'; fields: { 'changePassword': { name: 'changePassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'createArticle': { name: 'createArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'createAuthor': { name: 'createAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'createProject': { name: 'createProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'createSatellite': { name: 'createSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'createUploadFile': { name: 'createUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'createUploadFolder': { name: 'createUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'createUsersPermissionsRole': { name: 'createUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsCreateRolePayload'; ofType: null; } }; 'createUsersPermissionsUser': { name: 'createUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'deleteArticle': { name: 'deleteArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'deleteAuthor': { name: 'deleteAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'deleteFeaturedImage': { name: 'deleteFeaturedImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'deleteHero': { name: 'deleteHero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'deleteHomeFeaturedProjects': { name: 'deleteHomeFeaturedProjects'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntityResponse'; ofType: null; } }; 'deleteHomeMissionStatement': { name: 'deleteHomeMissionStatement'; type: { kind: 'OBJECT'; name: 'HomeMissionStatementEntityResponse'; ofType: null; } }; 'deleteProject': { name: 'deleteProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'deleteSatellite': { name: 'deleteSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'deleteUploadFile': { name: 'deleteUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'deleteUploadFolder': { name: 'deleteUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'deleteUsersPermissionsRole': { name: 'deleteUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsDeleteRolePayload'; ofType: null; } }; 'deleteUsersPermissionsUser': { name: 'deleteUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'emailConfirmation': { name: 'emailConfirmation'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'forgotPassword': { name: 'forgotPassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPasswordPayload'; ofType: null; } }; 'login': { name: 'login'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; }; } }; 'multipleUpload': { name: 'multipleUpload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; }; } }; 'register': { name: 'register'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; }; } }; 'removeFile': { name: 'removeFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'resetPassword': { name: 'resetPassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'updateArticle': { name: 'updateArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'updateAuthor': { name: 'updateAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'updateFeaturedImage': { name: 'updateFeaturedImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'updateFileInfo': { name: 'updateFileInfo'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'updateHero': { name: 'updateHero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'updateHomeFeaturedProjects': { name: 'updateHomeFeaturedProjects'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntityResponse'; ofType: null; } }; 'updateHomeMissionStatement': { name: 'updateHomeMissionStatement'; type: { kind: 'OBJECT'; name: 'HomeMissionStatementEntityResponse'; ofType: null; } }; 'updateProject': { name: 'updateProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'updateSatellite': { name: 'updateSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'updateUploadFile': { name: 'updateUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'updateUploadFolder': { name: 'updateUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'updateUsersPermissionsRole': { name: 'updateUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUpdateRolePayload'; ofType: null; } }; 'updateUsersPermissionsUser': { name: 'updateUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'upload': { name: 'upload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; }; };
'Pagination': { kind: 'OBJECT'; name: 'Pagination'; fields: { 'page': { name: 'page'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'pageCount': { name: 'pageCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'pageSize': { name: 'pageSize'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'total': { name: 'total'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; }; };
- 'PaginationArg': { kind: 'INPUT_OBJECT'; name: 'PaginationArg'; isOneOf: false; inputFields: [{ name: 'page'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'pageSize'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'start'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'limit'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }]; };
+ 'PaginationArg': { kind: 'INPUT_OBJECT'; name: 'PaginationArg'; inputFields: [{ name: 'page'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'pageSize'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'start'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'limit'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }]; };
'Project': { kind: 'OBJECT'; name: 'Project'; fields: { 'content': { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'previewImage': { name: 'previewImage'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'satellites': { name: 'satellites'; type: { kind: 'OBJECT'; name: 'SatelliteRelationResponseCollection'; ofType: null; } }; 'slug': { name: 'slug'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'title': { name: 'title'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'ProjectEntity': { kind: 'OBJECT'; name: 'ProjectEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Project'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'ProjectEntityResponse': { kind: 'OBJECT'; name: 'ProjectEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; } }; }; };
'ProjectEntityResponseCollection': { kind: 'OBJECT'; name: 'ProjectEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'ProjectFiltersInput': { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'satellites'; type: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; defaultValue: null }]; };
- 'ProjectInput': { kind: 'INPUT_OBJECT'; name: 'ProjectInput'; isOneOf: false; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'previewImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'satellites'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
+ 'ProjectFiltersInput': { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'satellites'; type: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'ProjectInput': { kind: 'INPUT_OBJECT'; name: 'ProjectInput'; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'previewImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'satellites'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
'ProjectRelationResponseCollection': { kind: 'OBJECT'; name: 'ProjectRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; }; }; }; } }; }; };
'PublicationState': { name: 'PublicationState'; enumValues: 'LIVE' | 'PREVIEW'; };
'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'article': { name: 'article'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'articles': { name: 'articles'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponseCollection'; ofType: null; } }; 'author': { name: 'author'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'authors': { name: 'authors'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponseCollection'; ofType: null; } }; 'featuredImage': { name: 'featuredImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'hero': { name: 'hero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'homeFeaturedProjects': { name: 'homeFeaturedProjects'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntityResponse'; ofType: null; } }; 'homeMissionStatement': { name: 'homeMissionStatement'; type: { kind: 'OBJECT'; name: 'HomeMissionStatementEntityResponse'; ofType: null; } }; 'i18NLocale': { name: 'i18NLocale'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntityResponse'; ofType: null; } }; 'i18NLocales': { name: 'i18NLocales'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntityResponseCollection'; ofType: null; } }; 'me': { name: 'me'; type: { kind: 'OBJECT'; name: 'UsersPermissionsMe'; ofType: null; } }; 'project': { name: 'project'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'projects': { name: 'projects'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponseCollection'; ofType: null; } }; 'satellite': { name: 'satellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'satellites': { name: 'satellites'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponseCollection'; ofType: null; } }; 'uploadFile': { name: 'uploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'uploadFiles': { name: 'uploadFiles'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponseCollection'; ofType: null; } }; 'uploadFolder': { name: 'uploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'uploadFolders': { name: 'uploadFolders'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponseCollection'; ofType: null; } }; 'usersPermissionsRole': { name: 'usersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'usersPermissionsRoles': { name: 'usersPermissionsRoles'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponseCollection'; ofType: null; } }; 'usersPermissionsUser': { name: 'usersPermissionsUser'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; } }; 'usersPermissionsUsers': { name: 'usersPermissionsUsers'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponseCollection'; ofType: null; } }; }; };
@@ -83,51 +83,51 @@ export type introspection = {
'SatelliteEntity': { kind: 'OBJECT'; name: 'SatelliteEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Satellite'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'SatelliteEntityResponse': { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; } }; }; };
'SatelliteEntityResponseCollection': { kind: 'OBJECT'; name: 'SatelliteEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'SatelliteFiltersInput': { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'catalogNumberNORAD'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'projects'; type: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'missionStatus'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'launchDate'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'massKg'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; defaultValue: null }]; };
- 'SatelliteInput': { kind: 'INPUT_OBJECT'; name: 'SatelliteInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'catalogNumberNORAD'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'satelliteImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'projects'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'missionStatus'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'launchDate'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'massKg'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
+ 'SatelliteFiltersInput': { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'catalogNumberNORAD'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'projects'; type: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'missionStatus'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'launchDate'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'massKg'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'SatelliteInput': { kind: 'INPUT_OBJECT'; name: 'SatelliteInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'catalogNumberNORAD'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'satelliteImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'projects'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'missionStatus'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'launchDate'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'massKg'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; };
'SatelliteRelationResponseCollection': { kind: 'OBJECT'; name: 'SatelliteRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; }; }; }; } }; }; };
'String': unknown;
- 'StringFilterInput': { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; };
+ 'StringFilterInput': { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; };
'Upload': unknown;
'UploadFile': { kind: 'OBJECT'; name: 'UploadFile'; fields: { 'alternativeText': { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'caption': { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'ext': { name: 'ext'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'formats': { name: 'formats'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'hash': { name: 'hash'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'height': { name: 'height'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'mime': { name: 'mime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'previewUrl': { name: 'previewUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'provider': { name: 'provider'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'provider_metadata': { name: 'provider_metadata'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'related': { name: 'related'; type: { kind: 'LIST'; name: never; ofType: { kind: 'UNION'; name: 'GenericMorph'; ofType: null; }; } }; 'size': { name: 'size'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'url': { name: 'url'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'width': { name: 'width'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; }; };
'UploadFileEntity': { kind: 'OBJECT'; name: 'UploadFileEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UploadFile'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'UploadFileEntityResponse': { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; } }; }; };
'UploadFileEntityResponseCollection': { kind: 'OBJECT'; name: 'UploadFileEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'UploadFileFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'width'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'height'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'formats'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'hash'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'ext'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'mime'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'url'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'previewUrl'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider_metadata'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'folder'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'folderPath'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; defaultValue: null }]; };
- 'UploadFileInput': { kind: 'INPUT_OBJECT'; name: 'UploadFileInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'width'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'height'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'formats'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'hash'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'ext'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'mime'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'url'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'previewUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider_metadata'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'folder'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'folderPath'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; };
+ 'UploadFileFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'width'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'height'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'formats'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'hash'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'ext'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'mime'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'url'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'previewUrl'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider_metadata'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'folder'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'folderPath'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'UploadFileInput': { kind: 'INPUT_OBJECT'; name: 'UploadFileInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'width'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'height'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'formats'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'hash'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'ext'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'mime'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'url'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'previewUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider_metadata'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'folder'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'folderPath'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; };
'UploadFileRelationResponseCollection': { kind: 'OBJECT'; name: 'UploadFileRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; }; }; }; } }; }; };
'UploadFolder': { kind: 'OBJECT'; name: 'UploadFolder'; fields: { 'children': { name: 'children'; type: { kind: 'OBJECT'; name: 'UploadFolderRelationResponseCollection'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'files': { name: 'files'; type: { kind: 'OBJECT'; name: 'UploadFileRelationResponseCollection'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'parent': { name: 'parent'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'path': { name: 'path'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'pathId': { name: 'pathId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'UploadFolderEntity': { kind: 'OBJECT'; name: 'UploadFolderEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UploadFolder'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'UploadFolderEntityResponse': { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; } }; }; };
'UploadFolderEntityResponseCollection': { kind: 'OBJECT'; name: 'UploadFolderEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'UploadFolderFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'pathId'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'parent'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'children'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'files'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'path'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }]; };
- 'UploadFolderInput': { kind: 'INPUT_OBJECT'; name: 'UploadFolderInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'pathId'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'parent'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'children'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'files'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'path'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; };
+ 'UploadFolderFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'pathId'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'parent'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'children'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'files'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'path'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'UploadFolderInput': { kind: 'INPUT_OBJECT'; name: 'UploadFolderInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'pathId'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'parent'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'children'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'files'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'path'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; };
'UploadFolderRelationResponseCollection': { kind: 'OBJECT'; name: 'UploadFolderRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; }; }; }; } }; }; };
'UsersPermissionsCreateRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsCreateRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; };
'UsersPermissionsDeleteRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsDeleteRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; };
- 'UsersPermissionsLoginInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsLoginInput'; isOneOf: false; inputFields: [{ name: 'identifier'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'password'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'provider'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: "\"local\"" }]; };
+ 'UsersPermissionsLoginInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsLoginInput'; inputFields: [{ name: 'identifier'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'password'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'provider'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: "\"local\"" }]; };
'UsersPermissionsLoginPayload': { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; fields: { 'jwt': { name: 'jwt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'user': { name: 'user'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsMe'; ofType: null; }; } }; }; };
'UsersPermissionsMe': { kind: 'OBJECT'; name: 'UsersPermissionsMe'; fields: { 'blocked': { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'confirmed': { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'email': { name: 'email'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsMeRole'; ofType: null; } }; 'username': { name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; };
'UsersPermissionsMeRole': { kind: 'OBJECT'; name: 'UsersPermissionsMeRole'; fields: { 'description': { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'type': { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; };
'UsersPermissionsPasswordPayload': { kind: 'OBJECT'; name: 'UsersPermissionsPasswordPayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; };
'UsersPermissionsPermission': { kind: 'OBJECT'; name: 'UsersPermissionsPermission'; fields: { 'action': { name: 'action'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; };
'UsersPermissionsPermissionEntity': { kind: 'OBJECT'; name: 'UsersPermissionsPermissionEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPermission'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
- 'UsersPermissionsPermissionFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'action'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'UsersPermissionsPermissionFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'action'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; defaultValue: null }]; };
'UsersPermissionsPermissionRelationResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsPermissionRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsPermissionEntity'; ofType: null; }; }; }; } }; }; };
- 'UsersPermissionsRegisterInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRegisterInput'; isOneOf: false; inputFields: [{ name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'password'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; };
+ 'UsersPermissionsRegisterInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRegisterInput'; inputFields: [{ name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'password'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; };
'UsersPermissionsRole': { kind: 'OBJECT'; name: 'UsersPermissionsRole'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'description': { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'permissions': { name: 'permissions'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPermissionRelationResponseCollection'; ofType: null; } }; 'type': { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'users': { name: 'users'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserRelationResponseCollection'; ofType: null; } }; }; };
'UsersPermissionsRoleEntity': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRole'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'UsersPermissionsRoleEntityResponse': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; ofType: null; } }; }; };
'UsersPermissionsRoleEntityResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'UsersPermissionsRoleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'type'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'permissions'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'users'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }]; };
- 'UsersPermissionsRoleInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'permissions'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'users'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }]; };
+ 'UsersPermissionsRoleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'type'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'permissions'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'users'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'UsersPermissionsRoleInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'permissions'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'users'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }]; };
'UsersPermissionsUpdateRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsUpdateRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; };
'UsersPermissionsUser': { kind: 'OBJECT'; name: 'UsersPermissionsUser'; fields: { 'blocked': { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'confirmed': { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'email': { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'provider': { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'username': { name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; };
'UsersPermissionsUserEntity': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUser'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; };
'UsersPermissionsUserEntityResponse': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; } }; }; };
'UsersPermissionsUserEntityResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; };
- 'UsersPermissionsUserFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'username'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'email'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'password'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'resetPasswordToken'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'confirmationToken'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'confirmed'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'blocked'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; defaultValue: null }]; };
- 'UsersPermissionsUserInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserInput'; isOneOf: false; inputFields: [{ name: 'username'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'email'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'password'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'resetPasswordToken'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'confirmationToken'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }]; };
+ 'UsersPermissionsUserFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'username'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'email'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'password'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'resetPasswordToken'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'confirmationToken'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'confirmed'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'blocked'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; defaultValue: null }]; };
+ 'UsersPermissionsUserInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserInput'; inputFields: [{ name: 'username'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'email'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'password'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'resetPasswordToken'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'confirmationToken'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }]; };
'UsersPermissionsUserRelationResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsUserRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; }; }; }; } }; }; };
};
};
diff --git a/frontend/src/lib/tada/graphql.ts b/frontend/src/lib/tada/graphql.ts
index aae219e..973ba3f 100644
--- a/frontend/src/lib/tada/graphql.ts
+++ b/frontend/src/lib/tada/graphql.ts
@@ -1,13 +1,18 @@
import { initGraphQLTada } from "gql.tada";
import type { introspection } from "./graphql-env.d.ts";
+// The graphql-env.d.ts file is a generated file that contains the GraphQL introspection query result.
+
+// This allows us to override scalars and add custom types to the introspection result.
export const graphql = initGraphQLTada<{
introspection: introspection;
scalars: {
- JSON: any;
+ JSON: any; // Usually BlocksContent from Strapi
Date: Date | string;
+ DateTime: Date | string;
};
}>();
+// Utility types for working with gql.tada
export type { FragmentOf, ResultOf, VariablesOf } from "gql.tada";
export { readFragment } from "gql.tada";
diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts
index e644794..a713484 100644
--- a/frontend/src/lib/utils.ts
+++ b/frontend/src/lib/utils.ts
@@ -1,6 +1,7 @@
import { type ClassValue, clsx } from "clsx";
import { twMerge } from "tailwind-merge";
+// A tiny utility for constructing className strings conditionally.
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}