Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/neat-tigers-yawn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@gqty/cli': minor
---

Support Pylon-compatible schema generation
75 changes: 43 additions & 32 deletions examples/gnt/gqty/schema.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
* GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY
*/

import { type ScalarsEnumsHash } from 'gqty';

export type Maybe<T> = T | null;
export type InputMaybe<T> = Maybe<T>;
export type Exact<T extends { [key: string]: unknown }> = {
Expand All @@ -13,15 +15,24 @@ export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
[SubKey in K]: Maybe<T[SubKey]>;
};
export type MakeEmpty<
T extends { [key: string]: unknown },
K extends keyof T,
> = { [_ in K]?: never };
export type Incremental<T> =
| T
| {
[P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never;
};
/** All built-in and custom scalars, mapped to their actual values */
export interface Scalars {
ID: string;
String: string;
Boolean: boolean;
Int: number;
Float: number;
ID: { input: string; output: string };
String: { input: string; output: string };
Boolean: { input: boolean; output: boolean };
Int: { input: number; output: number };
Float: { input: number; output: number };
/** The `Upload` scalar type represents a file upload. */
Upload: any;
Upload: { input: any; output: any };
}

export enum CacheControlScope {
Expand All @@ -30,25 +41,25 @@ export enum CacheControlScope {
}

export interface FilterCharacter {
gender?: InputMaybe<Scalars['String']>;
name?: InputMaybe<Scalars['String']>;
species?: InputMaybe<Scalars['String']>;
status?: InputMaybe<Scalars['String']>;
type?: InputMaybe<Scalars['String']>;
gender?: InputMaybe<Scalars['String']['input']>;
name?: InputMaybe<Scalars['String']['input']>;
species?: InputMaybe<Scalars['String']['input']>;
status?: InputMaybe<Scalars['String']['input']>;
type?: InputMaybe<Scalars['String']['input']>;
}

export interface FilterEpisode {
episode?: InputMaybe<Scalars['String']>;
name?: InputMaybe<Scalars['String']>;
episode?: InputMaybe<Scalars['String']['input']>;
name?: InputMaybe<Scalars['String']['input']>;
}

export interface FilterLocation {
dimension?: InputMaybe<Scalars['String']>;
name?: InputMaybe<Scalars['String']>;
type?: InputMaybe<Scalars['String']>;
dimension?: InputMaybe<Scalars['String']['input']>;
name?: InputMaybe<Scalars['String']['input']>;
type?: InputMaybe<Scalars['String']['input']>;
}

export const scalarsEnumsHash: import('gqty').ScalarsEnumsHash = {
export const scalarsEnumsHash: ScalarsEnumsHash = {
Boolean: true,
CacheControlScope: true,
ID: true,
Expand Down Expand Up @@ -301,53 +312,53 @@ export interface Query {
/**
* Get a specific character by ID
*/
character: (args: { id: Scalars['ID'] }) => Maybe<Character>;
character: (args: { id: ScalarsEnums['ID'] }) => Maybe<Character>;
/**
* Get the list of all characters
*/
characters: (args?: {
filter?: Maybe<FilterCharacter>;
page?: Maybe<Scalars['Int']>;
page?: Maybe<ScalarsEnums['Int']>;
}) => Maybe<Characters>;
/**
* Get a list of characters selected by ids
*/
charactersByIds: (args: {
ids: Array<Scalars['ID']>;
ids: Array<ScalarsEnums['ID']>;
}) => Maybe<Array<Maybe<Character>>>;
/**
* Get a specific episode by ID
*/
episode: (args: { id: Scalars['ID'] }) => Maybe<Episode>;
episode: (args: { id: ScalarsEnums['ID'] }) => Maybe<Episode>;
/**
* Get the list of all episodes
*/
episodes: (args?: {
filter?: Maybe<FilterEpisode>;
page?: Maybe<Scalars['Int']>;
page?: Maybe<ScalarsEnums['Int']>;
}) => Maybe<Episodes>;
/**
* Get a list of episodes selected by ids
*/
episodesByIds: (args: {
ids: Array<Scalars['ID']>;
ids: Array<ScalarsEnums['ID']>;
}) => Maybe<Array<Maybe<Episode>>>;
/**
* Get a specific locations by ID
*/
location: (args: { id: Scalars['ID'] }) => Maybe<Location>;
location: (args: { id: ScalarsEnums['ID'] }) => Maybe<Location>;
/**
* Get the list of all locations
*/
locations: (args?: {
filter?: Maybe<FilterLocation>;
page?: Maybe<Scalars['Int']>;
page?: Maybe<ScalarsEnums['Int']>;
}) => Maybe<Locations>;
/**
* Get a list of locations selected by ids
*/
locationsByIds: (args: {
ids: Array<Scalars['ID']>;
ids: Array<ScalarsEnums['ID']>;
}) => Maybe<Array<Maybe<Location>>>;
}

Expand All @@ -361,10 +372,10 @@ export interface GeneratedSchema {
subscription: Subscription;
}

export type MakeNullable<T> = {
[K in keyof T]: T[K] | undefined;
export type ScalarsEnums = {
[Key in keyof Scalars]: Scalars[Key] extends { output: unknown }
? Scalars[Key]['output']
: never;
} & {
CacheControlScope: CacheControlScope;
};

export interface ScalarsEnums extends MakeNullable<Scalars> {
CacheControlScope: CacheControlScope | undefined;
}
1 change: 1 addition & 0 deletions examples/solid/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"solid-js": "^1.9.4"
},
"devDependencies": {
"@gqty/cli": "workspace:^",
"@tailwindcss/postcss": "^4.0.7",
"@tailwindcss/typography": "^0.5.16",
"graphql": "^16.10.0",
Expand Down
17 changes: 5 additions & 12 deletions examples/solid/src/gqty/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@ import {
Cache,
createClient,
defaultResponseHandler,
GQtyError,
type QueryFetcher,
} from 'gqty';
import {
type GeneratedSchema,
generatedSchema,
scalarsEnumsHash,
type GeneratedSchema,
} from './schema.generated';

const queryFetcher: QueryFetcher = async function (
Expand All @@ -35,12 +34,6 @@ const queryFetcher: QueryFetcher = async function (
...fetchOptions,
});

if (response.status >= 400) {
throw new GQtyError(
`GraphQL endpoint responded with HTTP status ${response.status}.`
);
}

return await defaultResponseHandler(response);
};

Expand All @@ -51,8 +44,8 @@ const cache = new Cache(
* allowing soft refetches in background.
*/
{
maxAge: 5 * 1000,
staleWhileRevalidate: 30 * 60 * 1000,
maxAge: 0,
staleWhileRevalidate: 5 * 60 * 1000,
normalization: true,
}
);
Expand All @@ -66,8 +59,6 @@ export const client = createClient<GeneratedSchema>({
},
});

export const { createQuery } = createSolidClient(client);

// Core functions
export const { resolve, subscribe, schema } = client;

Expand All @@ -82,4 +73,6 @@ export const {
track,
} = client;

export const { createQuery } = createSolidClient(client);

export * from './schema.generated';
75 changes: 43 additions & 32 deletions examples/solid/src/gqty/schema.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
* GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY
*/

import { type ScalarsEnumsHash } from 'gqty';

export type Maybe<T> = T | null;
export type InputMaybe<T> = Maybe<T>;
export type Exact<T extends { [key: string]: unknown }> = {
Expand All @@ -13,15 +15,24 @@ export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
[SubKey in K]: Maybe<T[SubKey]>;
};
export type MakeEmpty<
T extends { [key: string]: unknown },
K extends keyof T,
> = { [_ in K]?: never };
export type Incremental<T> =
| T
| {
[P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never;
};
/** All built-in and custom scalars, mapped to their actual values */
export interface Scalars {
ID: string;
String: string;
Boolean: boolean;
Int: number;
Float: number;
ID: { input: string; output: string };
String: { input: string; output: string };
Boolean: { input: boolean; output: boolean };
Int: { input: number; output: number };
Float: { input: number; output: number };
/** The `Upload` scalar type represents a file upload. */
Upload: any;
Upload: { input: any; output: any };
}

export enum CacheControlScope {
Expand All @@ -30,25 +41,25 @@ export enum CacheControlScope {
}

export interface FilterCharacter {
gender?: InputMaybe<Scalars['String']>;
name?: InputMaybe<Scalars['String']>;
species?: InputMaybe<Scalars['String']>;
status?: InputMaybe<Scalars['String']>;
type?: InputMaybe<Scalars['String']>;
gender?: InputMaybe<Scalars['String']['input']>;
name?: InputMaybe<Scalars['String']['input']>;
species?: InputMaybe<Scalars['String']['input']>;
status?: InputMaybe<Scalars['String']['input']>;
type?: InputMaybe<Scalars['String']['input']>;
}

export interface FilterEpisode {
episode?: InputMaybe<Scalars['String']>;
name?: InputMaybe<Scalars['String']>;
episode?: InputMaybe<Scalars['String']['input']>;
name?: InputMaybe<Scalars['String']['input']>;
}

export interface FilterLocation {
dimension?: InputMaybe<Scalars['String']>;
name?: InputMaybe<Scalars['String']>;
type?: InputMaybe<Scalars['String']>;
dimension?: InputMaybe<Scalars['String']['input']>;
name?: InputMaybe<Scalars['String']['input']>;
type?: InputMaybe<Scalars['String']['input']>;
}

export const scalarsEnumsHash: import('gqty').ScalarsEnumsHash = {
export const scalarsEnumsHash: ScalarsEnumsHash = {
Boolean: true,
CacheControlScope: true,
ID: true,
Expand Down Expand Up @@ -301,53 +312,53 @@ export interface Query {
/**
* Get a specific character by ID
*/
character: (args: { id: Scalars['ID'] }) => Maybe<Character>;
character: (args: { id: ScalarsEnums['ID'] }) => Maybe<Character>;
/**
* Get the list of all characters
*/
characters: (args?: {
filter?: Maybe<FilterCharacter>;
page?: Maybe<Scalars['Int']>;
page?: Maybe<ScalarsEnums['Int']>;
}) => Maybe<Characters>;
/**
* Get a list of characters selected by ids
*/
charactersByIds: (args: {
ids: Array<Scalars['ID']>;
ids: Array<ScalarsEnums['ID']>;
}) => Maybe<Array<Maybe<Character>>>;
/**
* Get a specific episode by ID
*/
episode: (args: { id: Scalars['ID'] }) => Maybe<Episode>;
episode: (args: { id: ScalarsEnums['ID'] }) => Maybe<Episode>;
/**
* Get the list of all episodes
*/
episodes: (args?: {
filter?: Maybe<FilterEpisode>;
page?: Maybe<Scalars['Int']>;
page?: Maybe<ScalarsEnums['Int']>;
}) => Maybe<Episodes>;
/**
* Get a list of episodes selected by ids
*/
episodesByIds: (args: {
ids: Array<Scalars['ID']>;
ids: Array<ScalarsEnums['ID']>;
}) => Maybe<Array<Maybe<Episode>>>;
/**
* Get a specific locations by ID
*/
location: (args: { id: Scalars['ID'] }) => Maybe<Location>;
location: (args: { id: ScalarsEnums['ID'] }) => Maybe<Location>;
/**
* Get the list of all locations
*/
locations: (args?: {
filter?: Maybe<FilterLocation>;
page?: Maybe<Scalars['Int']>;
page?: Maybe<ScalarsEnums['Int']>;
}) => Maybe<Locations>;
/**
* Get a list of locations selected by ids
*/
locationsByIds: (args: {
ids: Array<Scalars['ID']>;
ids: Array<ScalarsEnums['ID']>;
}) => Maybe<Array<Maybe<Location>>>;
}

Expand All @@ -361,10 +372,10 @@ export interface GeneratedSchema {
subscription: Subscription;
}

export type MakeNullable<T> = {
[K in keyof T]: T[K] | undefined;
export type ScalarsEnums = {
[Key in keyof Scalars]: Scalars[Key] extends { output: unknown }
? Scalars[Key]['output']
: never;
} & {
CacheControlScope: CacheControlScope;
};

export interface ScalarsEnums extends MakeNullable<Scalars> {
CacheControlScope: CacheControlScope | undefined;
}
3 changes: 1 addition & 2 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,12 @@
"fast-glob": "^3.3.3",
"gqty": "workspace:^",
"graphql": "^16.10.0",
"lodash-es": "^4.17.21",
"just-throttle": "^4.2.0",
"micromatch": "^4.0.8",
"prettier": "^2.8.8"
},
"devDependencies": {
"@pnpm/types": "^1000.1.1",
"@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9",
"@types/node": "^22.13.4",
"@types/prettier": "^2.7.3",
Expand Down
Loading
Loading