graphql changes
This commit is contained in:
@@ -44,7 +44,7 @@
|
||||
"devDependencies": {
|
||||
"@payloadcms/eslint-config": "workspace:*",
|
||||
"payload": "workspace:*",
|
||||
"sass": "^1.69.5",
|
||||
"sass": "^1.70.0",
|
||||
"ts-essentials": "7.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -55,11 +55,11 @@
|
||||
"busboy": "^1.6.0",
|
||||
"deep-equal": "2.2.2",
|
||||
"graphql": "16.8.1",
|
||||
"graphql-http": "1.21.0",
|
||||
"graphql-playground-html": "^1.6.30",
|
||||
"graphql-playground-html": "1.6.30",
|
||||
"graphql-query-complexity": "0.12.0",
|
||||
"graphql-scalars": "1.22.2",
|
||||
"graphql-type-json": "0.3.2",
|
||||
"graphql-yoga": "^5.1.1",
|
||||
"path-to-regexp": "^6.2.1",
|
||||
"pluralize": "8.0.0",
|
||||
"react-diff-viewer-continued": "3.2.6",
|
||||
|
||||
@@ -2,6 +2,7 @@ import { loginOperation } from 'payload/operations'
|
||||
import type { Collection } from 'payload/types'
|
||||
|
||||
import isolateTransactionID from '../../utilities/isolateTransactionID'
|
||||
import { generatePayloadCookie } from '../../../utilities/cookies'
|
||||
|
||||
function loginResolver(collection: Collection) {
|
||||
async function resolver(_, args, context) {
|
||||
@@ -15,7 +16,14 @@ function loginResolver(collection: Collection) {
|
||||
req: isolateTransactionID(context.req),
|
||||
}
|
||||
|
||||
const result = loginOperation(options)
|
||||
const result = await loginOperation(options)
|
||||
const cookie = generatePayloadCookie({
|
||||
token: result.token,
|
||||
payload: context.req.payload,
|
||||
collectionConfig: context.req.collection.config,
|
||||
})
|
||||
context.headers.set('Set-Cookie', cookie)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { logoutOperation } from 'payload/operations'
|
||||
import type { Collection } from 'payload/types'
|
||||
|
||||
import isolateTransactionID from '../../utilities/isolateTransactionID'
|
||||
import { generateExpiredPayloadCookie } from '../../../utilities/cookies'
|
||||
|
||||
function logoutResolver(collection: Collection): any {
|
||||
async function resolver(_, args, context) {
|
||||
@@ -11,7 +12,11 @@ function logoutResolver(collection: Collection): any {
|
||||
}
|
||||
|
||||
const result = await logoutOperation(options)
|
||||
|
||||
const expiredCookie = generateExpiredPayloadCookie({
|
||||
collectionConfig: context.req.collection.config,
|
||||
payload: context.req.payload,
|
||||
})
|
||||
context.headers.set('Set-Cookie', expiredCookie)
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { Collection } from 'payload/types'
|
||||
|
||||
import isolateTransactionID from '../../utilities/isolateTransactionID'
|
||||
import { extractJWT } from '../../../utilities/jwt'
|
||||
import { generatePayloadCookie } from '../../../utilities/cookies'
|
||||
|
||||
function refreshResolver(collection: Collection) {
|
||||
async function resolver(_, args, context) {
|
||||
@@ -22,7 +23,12 @@ function refreshResolver(collection: Collection) {
|
||||
}
|
||||
|
||||
const result = await refreshOperation(options)
|
||||
|
||||
const cookie = generatePayloadCookie({
|
||||
token: result.refreshedToken,
|
||||
payload: context.req.payload,
|
||||
collectionConfig: context.req.collection.config,
|
||||
})
|
||||
context.headers.set('Set-Cookie', cookie)
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { resetPasswordOperation } from 'payload/operations'
|
||||
import type { Collection } from 'payload/types'
|
||||
|
||||
import isolateTransactionID from '../../utilities/isolateTransactionID'
|
||||
import { generatePayloadCookie } from '../../../utilities/cookies'
|
||||
|
||||
function resetPasswordResolver(collection: Collection) {
|
||||
async function resolver(_, args, context) {
|
||||
@@ -17,7 +18,12 @@ function resetPasswordResolver(collection: Collection) {
|
||||
}
|
||||
|
||||
const result = await resetPasswordOperation(options)
|
||||
|
||||
const cookie = generatePayloadCookie({
|
||||
token: result.token,
|
||||
payload: context.req.payload,
|
||||
collectionConfig: context.req.collection.config,
|
||||
})
|
||||
context.headers.set('Set-Cookie', cookie)
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import config from 'payload-config'
|
||||
import { GraphQLError } from 'graphql'
|
||||
import { createSchema, createYoga } from 'graphql-yoga'
|
||||
import httpStatus from 'http-status'
|
||||
import type { Payload, CollectionAfterErrorHook } from 'payload/types'
|
||||
import type { GraphQLFormattedError } from 'graphql'
|
||||
import { createPayloadRequest } from '../../utilities/createPayloadRequest'
|
||||
import { createHandler } from 'graphql-http/lib/use/fetch'
|
||||
|
||||
const handleError = async (
|
||||
payload: Payload,
|
||||
@@ -43,40 +43,40 @@ const handleError = async (
|
||||
}
|
||||
|
||||
export const POST = async (request: Request) => {
|
||||
const originalRequest = request.clone()
|
||||
const req = await createPayloadRequest({
|
||||
request,
|
||||
config,
|
||||
})
|
||||
const { payload } = req
|
||||
const headers = new Headers()
|
||||
const copyOfSchema = req.payload.schema
|
||||
|
||||
const afterErrorHook =
|
||||
typeof payload.config.hooks.afterError === 'function' ? payload.config.hooks.afterError : null
|
||||
|
||||
return createHandler({
|
||||
context: { req, headers },
|
||||
onOperation: async (request, args, result) => {
|
||||
const response =
|
||||
typeof payload.extensions === 'function'
|
||||
? await payload.extensions({
|
||||
args,
|
||||
req: request,
|
||||
result,
|
||||
})
|
||||
: result
|
||||
if (response.errors) {
|
||||
const errors = (await Promise.all(
|
||||
result.errors.map((error) => {
|
||||
return handleError(payload, error, payload.config.debug, afterErrorHook)
|
||||
}),
|
||||
)) as GraphQLError[]
|
||||
// errors type should be FormattedGraphQLError[] but onOperation has a return type of ExecutionResult instead of FormattedExecutionResult
|
||||
return { ...response, errors }
|
||||
const schema = createSchema({
|
||||
typeDefs: /* GraphQL */ `
|
||||
type Query {
|
||||
greetings: String
|
||||
}
|
||||
return response
|
||||
`,
|
||||
resolvers: {
|
||||
Query: {
|
||||
greetings: () => 'This is the `greetings` field of the root `Query` type',
|
||||
},
|
||||
},
|
||||
})
|
||||
const apiResponse = await createYoga({
|
||||
schema: copyOfSchema,
|
||||
|
||||
// While using Next.js file convention for routing, we need to configure Yoga to use the correct endpoint
|
||||
graphqlEndpoint: '/api/graphql',
|
||||
|
||||
// Yoga needs to know how to create a valid Next response
|
||||
fetchAPI: { Response },
|
||||
})(originalRequest)
|
||||
console.log('schema', Object.keys(schema))
|
||||
console.log('payload schema', typeof req.payload.schema)
|
||||
|
||||
return new Response(apiResponse.body, {
|
||||
headers: {
|
||||
...apiResponse.headers,
|
||||
},
|
||||
schema: payload.schema,
|
||||
validationRules: (request, args, defaultRules) =>
|
||||
defaultRules.concat(payload.validationRules(args)),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars'
|
||||
/* eslint-disable no-use-before-define */
|
||||
import { GraphQLJSON } from 'graphql-type-json'
|
||||
|
||||
import type { RichTextAdapter } from '../../admin/types'
|
||||
import type { RichTextAdapter } from 'payload/types'
|
||||
import type {
|
||||
ArrayField,
|
||||
BlockField,
|
||||
@@ -41,11 +41,11 @@ import type {
|
||||
TextField,
|
||||
TextareaField,
|
||||
UploadField,
|
||||
} from '../../fields/config/types'
|
||||
import type { Payload } from '../../types'
|
||||
} from 'payload/types'
|
||||
import type { Payload } from 'payload'
|
||||
|
||||
import { tabHasName } from '../../fields/config/types'
|
||||
import { toWords } from '../../utilities/formatLabels'
|
||||
import { tabHasName } from 'payload/types'
|
||||
import { toWords } from 'payload/utilities'
|
||||
import combineParentName from '../utilities/combineParentName'
|
||||
import formatName from '../utilities/formatName'
|
||||
import formatOptions from '../utilities/formatOptions'
|
||||
|
||||
@@ -54,11 +54,6 @@
|
||||
"deepmerge": "4.3.1",
|
||||
"file-type": "16.5.4",
|
||||
"find-up": "4.1.0",
|
||||
"graphql": "16.8.1",
|
||||
"graphql-http": "1.21.0",
|
||||
"graphql-query-complexity": "0.12.0",
|
||||
"graphql-scalars": "1.22.2",
|
||||
"graphql-type-json": "0.3.2",
|
||||
"http-status": "1.6.2",
|
||||
"is-plain-object": "5.0.0",
|
||||
"json-schema-to-typescript": "11.0.3",
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
export { default as buildPaginatedListType } from './../graphql/schema/buildPaginatedListType'
|
||||
export { default as GraphQL } from 'graphql'
|
||||
Reference in New Issue
Block a user