naystack 1.4.10 → 1.4.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -59,17 +59,15 @@ Wrap your application with `AuthWrapper` in your root layout or a client compone
59
59
  ```typescript
60
60
  // gql/client.ts
61
61
  "use client";
62
- import { getAuthWrapper } from "naystack/auth/email/client";
62
+ import { AuthWrapper } from "naystack/auth/email/client";
63
63
 
64
- export const AuthWrapper = getAuthWrapper("/api/email");
65
64
  ```
66
65
 
67
66
  ### Frontend Usage
68
67
 
69
68
  ```typescript
70
- import { getEmailAuthUtils, useToken } from "naystack/auth/email/client";
69
+ import { useLogin, useSignUp, useLogout, useToken } from "naystack/auth/email/client";
71
70
 
72
- const { useLogin, useSignUp, useLogout } = getEmailAuthUtils("/api/email");
73
71
 
74
72
  function AuthComponent() {
75
73
  const login = useLogin();
@@ -108,11 +106,7 @@ Call your GraphQL API from server components or actions:
108
106
 
109
107
  ```typescript
110
108
  // gql/server.ts
111
- import { getGraphQLQuery } from "naystack/graphql/server";
112
-
113
- export const query = getGraphQLQuery({
114
- uri: process.env.NEXT_PUBLIC_BACKEND_BASE_URL!,
115
- });
109
+ import { query } from "naystack/graphql/server";
116
110
 
117
111
  // Usage in Page
118
112
  const data = await query(MyQueryDocument, { variables });
@@ -124,18 +118,17 @@ For client-side GraphQL with Apollo:
124
118
 
125
119
  ```typescript
126
120
  // gql/client.ts
127
- import { getApolloWrapper } from "naystack/graphql/client";
121
+ import { ApolloWrapper } from "naystack/graphql/client";
128
122
 
129
- export const ApolloWrapper = getApolloWrapper("/api");
130
123
  ```
131
124
 
132
125
  ### Frontend Usage
133
126
 
134
127
  ```typescript
135
- import { useQuery, useMutation } from "@apollo/client";
128
+ import { useAuthQuery, useAuthMutation } from "naystack/graphql/client";
136
129
 
137
130
  function Profile() {
138
- const { data } = useQuery(GetCurrentUserDocument);
131
+ const [getCurrentUser, { loading }] = useAuthMutation(GetCurrentUserDocument);
139
132
  // ...
140
133
  }
141
134
  ```
@@ -170,9 +163,7 @@ export const { PUT, uploadFile, getDownloadURL } = setupFileUpload({
170
163
  ### Client Setup & Usage
171
164
 
172
165
  ```typescript
173
- import { getUseFileUpload } from "naystack/file/client";
174
-
175
- const useFileUpload = getUseFileUpload("/api/upload");
166
+ import { useFileUpload } from "naystack/file/client";
176
167
 
177
168
  function UploadButton() {
178
169
  const upload = useFileUpload();
@@ -1,34 +1,35 @@
1
1
  import { GraphQLScalarType } from 'graphql';
2
- import { ClassType, Query, Arg } from 'type-graphql';
2
+ import { Query, Arg, ClassType } from 'type-graphql';
3
3
  import { AuthorizedContext, Context } from './types.mjs';
4
4
 
5
5
  type ReturnOptions = Parameters<typeof Query>[1];
6
6
  type ArgsOptions = Parameters<typeof Arg>[2];
7
- type Values = object | string | number | boolean;
8
- type DeepPartial<T> = {
9
- [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
7
+ type NullableOptions<T, X extends boolean> = T & {
8
+ nullable: X;
10
9
  };
11
- type OtherTypes<T> = GraphQLScalarType<T, T> | [GraphQLScalarType<T, T>] | NumberConstructor | [NumberConstructor] | StringConstructor | [StringConstructor] | BooleanConstructor | [BooleanConstructor];
12
- interface BaseDefinition<T extends Values, U extends Values, IsAuth extends boolean> {
13
- output: T extends object ? ClassType<DeepPartial<T>> | [ClassType<DeepPartial<T>>] : OtherTypes<T>;
14
- outputOptions?: ReturnOptions;
15
- input?: U extends object ? ClassType<U> | [ClassType<U>] : OtherTypes<U>;
16
- inputOptions?: ArgsOptions;
10
+ type ParsedGQLType<T> = T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T extends GraphQLScalarType<infer U> ? U : T extends ClassType<infer U> ? U : T extends Record<infer K, string | number> ? T[K] : void;
11
+ type ParsedGQLTypeWithArray<T> = T extends Array<infer U> ? ParsedGQLType<U>[] : ParsedGQLType<T>;
12
+ type ParsedGQLTypeWithNullability<T, IsNullable extends boolean> = IsNullable extends true ? ParsedGQLTypeWithArray<T> | null | undefined : ParsedGQLTypeWithArray<T>;
13
+ interface BaseDefinition<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> {
14
+ output: T;
15
+ outputOptions?: NullableOptions<ReturnOptions, OutputNullable>;
16
+ input?: U;
17
+ inputOptions?: NullableOptions<ArgsOptions, InputNullable>;
17
18
  authorized?: IsAuth;
18
19
  }
19
- interface QueryDefinition<T extends Values, U extends Values, IsAuth extends boolean> extends BaseDefinition<T, U, IsAuth> {
20
- fn: (ctx: IsAuth extends true ? AuthorizedContext : Context, data: U) => Promise<T | T[]> | T | T[];
20
+ interface QueryDefinition<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> extends BaseDefinition<T, U, IsAuth, OutputNullable, InputNullable> {
21
+ fn: (ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable>) => Promise<ParsedGQLTypeWithNullability<T, OutputNullable>> | ParsedGQLTypeWithNullability<T, OutputNullable>;
21
22
  mutation?: boolean;
22
23
  }
23
- interface FieldResolverDefinition<T extends Values, U extends Values, IsAuth extends boolean, Root> extends BaseDefinition<T, U, IsAuth> {
24
- fn: (root: Root, ctx: IsAuth extends true ? AuthorizedContext : Context, data: U) => Promise<T | T[]> | T | T[];
24
+ declare function query<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false>(fn: QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>["fn"], options: Omit<QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>, "fn">): QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>;
25
+ interface FieldResolverDefinition<T, U, Root, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> extends BaseDefinition<T, U, IsAuth, OutputNullable, InputNullable> {
26
+ fn: (root: Root, ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable>) => Promise<ParsedGQLTypeWithNullability<T, OutputNullable>> | ParsedGQLTypeWithNullability<T, OutputNullable>;
25
27
  }
26
- declare function query<T extends Values, U extends Values, IsAuth extends boolean>(fn: QueryDefinition<T, U, IsAuth>["fn"], options: Omit<QueryDefinition<T, U, IsAuth>, "fn">): QueryDefinition<T, U, IsAuth>;
27
- declare function field<T extends Values, U extends Values, IsAuth extends boolean, Root>(fn: FieldResolverDefinition<T, U, IsAuth, Root>["fn"], options: Omit<FieldResolverDefinition<T, U, IsAuth, Root>, "fn">): FieldResolverDefinition<T, U, IsAuth, Root>;
28
+ declare function field<T, U, IsAuth extends boolean, Root, OutputNullable extends boolean = false, InputNullable extends boolean = false>(fn: FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>["fn"], options: Omit<FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>, "fn">): FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>;
28
29
  declare function QueryLibrary<T extends Record<string, QueryDefinition<any, any, any>>>(queries: T): {
29
30
  new (): {};
30
31
  };
31
- declare function FieldLibrary<X extends object, T extends Record<string, FieldResolverDefinition<any, any, any, X>> = Record<string, FieldResolverDefinition<any, any, any, X>>>(type: ClassType, queries: T): {
32
+ declare function FieldLibrary<X extends object, T extends Record<string, FieldResolverDefinition<any, any, X, any>> = Record<string, FieldResolverDefinition<any, any, X, any>>>(type: ClassType, queries: T): {
32
33
  new (): {};
33
34
  };
34
35
 
@@ -1,34 +1,35 @@
1
1
  import { GraphQLScalarType } from 'graphql';
2
- import { ClassType, Query, Arg } from 'type-graphql';
2
+ import { Query, Arg, ClassType } from 'type-graphql';
3
3
  import { AuthorizedContext, Context } from './types.js';
4
4
 
5
5
  type ReturnOptions = Parameters<typeof Query>[1];
6
6
  type ArgsOptions = Parameters<typeof Arg>[2];
7
- type Values = object | string | number | boolean;
8
- type DeepPartial<T> = {
9
- [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
7
+ type NullableOptions<T, X extends boolean> = T & {
8
+ nullable: X;
10
9
  };
11
- type OtherTypes<T> = GraphQLScalarType<T, T> | [GraphQLScalarType<T, T>] | NumberConstructor | [NumberConstructor] | StringConstructor | [StringConstructor] | BooleanConstructor | [BooleanConstructor];
12
- interface BaseDefinition<T extends Values, U extends Values, IsAuth extends boolean> {
13
- output: T extends object ? ClassType<DeepPartial<T>> | [ClassType<DeepPartial<T>>] : OtherTypes<T>;
14
- outputOptions?: ReturnOptions;
15
- input?: U extends object ? ClassType<U> | [ClassType<U>] : OtherTypes<U>;
16
- inputOptions?: ArgsOptions;
10
+ type ParsedGQLType<T> = T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T extends GraphQLScalarType<infer U> ? U : T extends ClassType<infer U> ? U : T extends Record<infer K, string | number> ? T[K] : void;
11
+ type ParsedGQLTypeWithArray<T> = T extends Array<infer U> ? ParsedGQLType<U>[] : ParsedGQLType<T>;
12
+ type ParsedGQLTypeWithNullability<T, IsNullable extends boolean> = IsNullable extends true ? ParsedGQLTypeWithArray<T> | null | undefined : ParsedGQLTypeWithArray<T>;
13
+ interface BaseDefinition<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> {
14
+ output: T;
15
+ outputOptions?: NullableOptions<ReturnOptions, OutputNullable>;
16
+ input?: U;
17
+ inputOptions?: NullableOptions<ArgsOptions, InputNullable>;
17
18
  authorized?: IsAuth;
18
19
  }
19
- interface QueryDefinition<T extends Values, U extends Values, IsAuth extends boolean> extends BaseDefinition<T, U, IsAuth> {
20
- fn: (ctx: IsAuth extends true ? AuthorizedContext : Context, data: U) => Promise<T | T[]> | T | T[];
20
+ interface QueryDefinition<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> extends BaseDefinition<T, U, IsAuth, OutputNullable, InputNullable> {
21
+ fn: (ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable>) => Promise<ParsedGQLTypeWithNullability<T, OutputNullable>> | ParsedGQLTypeWithNullability<T, OutputNullable>;
21
22
  mutation?: boolean;
22
23
  }
23
- interface FieldResolverDefinition<T extends Values, U extends Values, IsAuth extends boolean, Root> extends BaseDefinition<T, U, IsAuth> {
24
- fn: (root: Root, ctx: IsAuth extends true ? AuthorizedContext : Context, data: U) => Promise<T | T[]> | T | T[];
24
+ declare function query<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false>(fn: QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>["fn"], options: Omit<QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>, "fn">): QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>;
25
+ interface FieldResolverDefinition<T, U, Root, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> extends BaseDefinition<T, U, IsAuth, OutputNullable, InputNullable> {
26
+ fn: (root: Root, ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable>) => Promise<ParsedGQLTypeWithNullability<T, OutputNullable>> | ParsedGQLTypeWithNullability<T, OutputNullable>;
25
27
  }
26
- declare function query<T extends Values, U extends Values, IsAuth extends boolean>(fn: QueryDefinition<T, U, IsAuth>["fn"], options: Omit<QueryDefinition<T, U, IsAuth>, "fn">): QueryDefinition<T, U, IsAuth>;
27
- declare function field<T extends Values, U extends Values, IsAuth extends boolean, Root>(fn: FieldResolverDefinition<T, U, IsAuth, Root>["fn"], options: Omit<FieldResolverDefinition<T, U, IsAuth, Root>, "fn">): FieldResolverDefinition<T, U, IsAuth, Root>;
28
+ declare function field<T, U, IsAuth extends boolean, Root, OutputNullable extends boolean = false, InputNullable extends boolean = false>(fn: FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>["fn"], options: Omit<FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>, "fn">): FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>;
28
29
  declare function QueryLibrary<T extends Record<string, QueryDefinition<any, any, any>>>(queries: T): {
29
30
  new (): {};
30
31
  };
31
- declare function FieldLibrary<X extends object, T extends Record<string, FieldResolverDefinition<any, any, any, X>> = Record<string, FieldResolverDefinition<any, any, any, X>>>(type: ClassType, queries: T): {
32
+ declare function FieldLibrary<X extends object, T extends Record<string, FieldResolverDefinition<any, any, X, any>> = Record<string, FieldResolverDefinition<any, any, X, any>>>(type: ClassType, queries: T): {
32
33
  new (): {};
33
34
  };
34
35
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "naystack",
3
- "version": "1.4.10",
3
+ "version": "1.4.12",
4
4
  "description": "A stack built with Next + GraphQL + S3 + Auth",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",