diff --git a/examples/auth/app/(admin)/.admin/index.tsx b/examples/auth/app/(admin)/.admin/index.tsx index 6b1533b3457..cc237ef7f98 100644 --- a/examples/auth/app/(admin)/.admin/index.tsx +++ b/examples/auth/app/(admin)/.admin/index.tsx @@ -1,13 +1,13 @@ /* eslint-disable */ -import * as view0 from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view' -import * as view1 from '@keystone-6/core/fields/types/text/views' -import * as view2 from '@keystone-6/core/fields/types/password/views' -import * as view3 from '@keystone-6/core/fields/types/checkbox/views' -import * as view4 from '@keystone-6/core/fields/types/timestamp/views' -import * as view5 from '@keystone-6/core/fields/types/relationship/views' -import * as view6 from '@keystone-6/core/fields/types/integer/views' -import * as view7 from '@keystone-6/core/fields/types/select/views' -import * as view8 from '@keystone-6/core/fields/types/json/views' +import * as view0 from "@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view" +import * as view1 from "@keystone-6/core/fields/types/text/views" +import * as view2 from "@keystone-6/core/fields/types/password/views" +import * as view3 from "@keystone-6/core/fields/types/checkbox/views" +import * as view4 from "@keystone-6/core/fields/types/timestamp/views" +import * as view5 from "@keystone-6/core/fields/types/relationship/views" +import * as view6 from "@keystone-6/core/fields/types/integer/views" +import * as view7 from "@keystone-6/core/fields/types/select/views" +import * as view8 from "@keystone-6/core/fields/types/json/views" const adminConfig = {} diff --git a/examples/auth/next.config.mjs b/examples/auth/next.config.mjs index bec106de70d..8f06b183bdf 100644 --- a/examples/auth/next.config.mjs +++ b/examples/auth/next.config.mjs @@ -1,10 +1,6 @@ // you don't need this if you're building something outside of the Keystone repo export default { - experimental: { - // without this, 'Error: Expected Upload to be a GraphQL nullable type.' - serverComponentsExternalPackages: ['graphql'], - }, eslint: { ignoreDuringBuilds: true, }, diff --git a/examples/custom-admin-ui-navigation/app/(admin)/.admin/index.tsx b/examples/custom-admin-ui-navigation/app/(admin)/.admin/index.tsx index 5dd11446daf..283542749b0 100644 --- a/examples/custom-admin-ui-navigation/app/(admin)/.admin/index.tsx +++ b/examples/custom-admin-ui-navigation/app/(admin)/.admin/index.tsx @@ -1,10 +1,10 @@ /* eslint-disable */ -import * as view0 from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view' -import * as view1 from '@keystone-6/core/fields/types/text/views' -import * as view2 from '@keystone-6/core/fields/types/select/views' -import * as view3 from '@keystone-6/core/fields/types/checkbox/views' -import * as view4 from '@keystone-6/core/fields/types/relationship/views' -import * as view5 from '@keystone-6/core/fields/types/timestamp/views' +import * as view0 from "@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view" +import * as view1 from "@keystone-6/core/fields/types/text/views" +import * as view2 from "@keystone-6/core/fields/types/select/views" +import * as view3 from "@keystone-6/core/fields/types/checkbox/views" +import * as view4 from "@keystone-6/core/fields/types/relationship/views" +import * as view5 from "@keystone-6/core/fields/types/timestamp/views" import * as adminConfig from '../config' diff --git a/examples/custom-field-view/app/(admin)/.admin/index.tsx b/examples/custom-field-view/app/(admin)/.admin/index.tsx new file mode 100644 index 00000000000..7c8948ac698 --- /dev/null +++ b/examples/custom-field-view/app/(admin)/.admin/index.tsx @@ -0,0 +1,21 @@ +/* eslint-disable */ +import * as view0 from "@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view" +import * as view1 from "@keystone-6/core/fields/types/text/views" +import * as view2 from "@keystone-6/core/fields/types/select/views" +import * as view3 from "@keystone-6/core/fields/types/checkbox/views" +import * as view4 from "@keystone-6/core/fields/types/relationship/views" +import * as view5 from "@keystone-6/core/fields/types/timestamp/views" +import * as view6 from "@keystone-6/core/fields/types/json/views" +import * as view7 from "../../.././fields/related-links/components" +import * as view8 from "@/fields/related-links/components" + +const adminConfig = {} + +export const config = { + lazyMetadataQuery: {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keystone","loc":{"start":22,"end":30}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"adminMeta","loc":{"start":39,"end":48}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lists","loc":{"start":59,"end":64}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key","loc":{"start":77,"end":80}},"arguments":[],"directives":[],"loc":{"start":77,"end":80}},{"kind":"Field","name":{"kind":"Name","value":"isHidden","loc":{"start":91,"end":99}},"arguments":[],"directives":[],"loc":{"start":91,"end":99}},{"kind":"Field","name":{"kind":"Name","value":"fields","loc":{"start":110,"end":116}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path","loc":{"start":131,"end":135}},"arguments":[],"directives":[],"loc":{"start":131,"end":135}},{"kind":"Field","name":{"kind":"Name","value":"createView","loc":{"start":148,"end":158}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fieldMode","loc":{"start":175,"end":184}},"arguments":[],"directives":[],"loc":{"start":175,"end":184}}],"loc":{"start":159,"end":198}},"loc":{"start":148,"end":198}}],"loc":{"start":117,"end":210}},"loc":{"start":110,"end":210}}],"loc":{"start":65,"end":220}},"loc":{"start":59,"end":220}}],"loc":{"start":49,"end":228}},"loc":{"start":39,"end":228}}],"loc":{"start":31,"end":234}},"loc":{"start":22,"end":234}}]}}]}, + fieldViews: [view0,view1,view2,view3,view4,view5,view6,view7,view8], + adminMetaHash: 'o10uod', + adminConfig, + apiPath: '/api/graphql', + adminPath: '', +}; diff --git a/examples/custom-field-view/app/(admin)/[listKey]/[id]/page.tsx b/examples/custom-field-view/app/(admin)/[listKey]/[id]/page.tsx new file mode 100644 index 00000000000..c5d7ea2be62 --- /dev/null +++ b/examples/custom-field-view/app/(admin)/[listKey]/[id]/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { ItemPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage' + +export default ItemPage diff --git a/examples/custom-field-view/app/(admin)/[listKey]/create/page.tsx b/examples/custom-field-view/app/(admin)/[listKey]/create/page.tsx new file mode 100644 index 00000000000..d6042acaa96 --- /dev/null +++ b/examples/custom-field-view/app/(admin)/[listKey]/create/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { CreateItemPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage' + +export default CreateItemPage diff --git a/examples/custom-field-view/app/(admin)/[listKey]/page.tsx b/examples/custom-field-view/app/(admin)/[listKey]/page.tsx new file mode 100644 index 00000000000..f6e75f8cfab --- /dev/null +++ b/examples/custom-field-view/app/(admin)/[listKey]/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { ListPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage' + +export default ListPage diff --git a/examples/custom-field-view/app/(admin)/layout.tsx b/examples/custom-field-view/app/(admin)/layout.tsx new file mode 100644 index 00000000000..abb5a0f3b2c --- /dev/null +++ b/examples/custom-field-view/app/(admin)/layout.tsx @@ -0,0 +1,16 @@ +'use client' +import { Layout } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App' +import { config } from './.admin' + + +export default function AdminLayout ({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} \ No newline at end of file diff --git a/examples/custom-field-view/app/(admin)/no-access/page.tsx b/examples/custom-field-view/app/(admin)/no-access/page.tsx new file mode 100644 index 00000000000..70877231fee --- /dev/null +++ b/examples/custom-field-view/app/(admin)/no-access/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { getNoAccessPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage' + +export default getNoAccessPage({ sessionsEnabled: false }) diff --git a/examples/custom-field-view/app/(admin)/page.tsx b/examples/custom-field-view/app/(admin)/page.tsx new file mode 100644 index 00000000000..5c268390b0f --- /dev/null +++ b/examples/custom-field-view/app/(admin)/page.tsx @@ -0,0 +1,2 @@ +'use client' +export { HomePage as default } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage' diff --git a/examples/custom-field-view/app/layout.tsx b/examples/custom-field-view/app/layout.tsx new file mode 100644 index 00000000000..38a4853e3a5 --- /dev/null +++ b/examples/custom-field-view/app/layout.tsx @@ -0,0 +1,11 @@ +export default function RootLayout ({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/examples/custom-field-view/next-env.d.ts b/examples/custom-field-view/next-env.d.ts new file mode 100644 index 00000000000..4f11a03dc6c --- /dev/null +++ b/examples/custom-field-view/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/examples/custom-field-view/schema.graphql b/examples/custom-field-view/schema.graphql index 27d0a6f5ba3..6902e23ef3c 100644 --- a/examples/custom-field-view/schema.graphql +++ b/examples/custom-field-view/schema.graphql @@ -9,6 +9,7 @@ type Task { assignedTo: Person finishBy: DateTime relatedLinks: JSON + moreLinks: JSON } enum TaskPriorityType { @@ -117,6 +118,7 @@ input TaskUpdateInput { assignedTo: PersonRelateToOneForUpdateInput finishBy: DateTime relatedLinks: JSON + moreLinks: JSON } input PersonRelateToOneForUpdateInput { @@ -137,6 +139,7 @@ input TaskCreateInput { assignedTo: PersonRelateToOneForCreateInput finishBy: DateTime relatedLinks: JSON + moreLinks: JSON } input PersonRelateToOneForCreateInput { diff --git a/examples/custom-field-view/schema.prisma b/examples/custom-field-view/schema.prisma index 32e04e70c82..fb3278a7169 100644 --- a/examples/custom-field-view/schema.prisma +++ b/examples/custom-field-view/schema.prisma @@ -21,6 +21,7 @@ model Task { assignedToId String? @map("assignedTo") finishBy DateTime? relatedLinks String? + moreLinks String? @@index([assignedToId]) } diff --git a/examples/custom-field-view/schema.ts b/examples/custom-field-view/schema.ts index 8a6516cd78d..ed877eee26f 100644 --- a/examples/custom-field-view/schema.ts +++ b/examples/custom-field-view/schema.ts @@ -30,6 +30,14 @@ export const lists = { itemView: { fieldMode: 'edit' }, }, }), + moreLinks: json({ + ui: { + views: '@/fields/related-links/components', + createView: { fieldMode: 'edit' }, + listView: { fieldMode: 'hidden' }, + itemView: { fieldMode: 'edit' }, + }, + }), }, }), Person: list({ diff --git a/examples/custom-field-view/tsconfig.json b/examples/custom-field-view/tsconfig.json new file mode 100644 index 00000000000..3b0afd8f406 --- /dev/null +++ b/examples/custom-field-view/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "noEmit": true, + "incremental": true, + "module": "esnext", + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "paths": { + "@/fields/*": ["./fields/*"] + }, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + ".next/types/**/*.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/examples/custom-field/app/(admin)/.admin/index.tsx b/examples/custom-field/app/(admin)/.admin/index.tsx new file mode 100644 index 00000000000..ca1a2d962a6 --- /dev/null +++ b/examples/custom-field/app/(admin)/.admin/index.tsx @@ -0,0 +1,19 @@ +/* eslint-disable */ +import * as view0 from "@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view" +import * as view1 from "../../.././1-text-field/views" +import * as view2 from "../../.././2-stars-field/views" +import * as view3 from "../../.././4-conditional-field/views" +import * as view4 from "../../.././3-pair-field/views" +import * as view5 from "../../.././3-pair-field-nested/views" +import * as view6 from "../../.././3-pair-field-json/views" + +const adminConfig = {} + +export const config = { + lazyMetadataQuery: {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keystone","loc":{"start":22,"end":30}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"adminMeta","loc":{"start":39,"end":48}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lists","loc":{"start":59,"end":64}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key","loc":{"start":77,"end":80}},"arguments":[],"directives":[],"loc":{"start":77,"end":80}},{"kind":"Field","name":{"kind":"Name","value":"isHidden","loc":{"start":91,"end":99}},"arguments":[],"directives":[],"loc":{"start":91,"end":99}},{"kind":"Field","name":{"kind":"Name","value":"fields","loc":{"start":110,"end":116}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path","loc":{"start":131,"end":135}},"arguments":[],"directives":[],"loc":{"start":131,"end":135}},{"kind":"Field","name":{"kind":"Name","value":"createView","loc":{"start":148,"end":158}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fieldMode","loc":{"start":175,"end":184}},"arguments":[],"directives":[],"loc":{"start":175,"end":184}}],"loc":{"start":159,"end":198}},"loc":{"start":148,"end":198}}],"loc":{"start":117,"end":210}},"loc":{"start":110,"end":210}}],"loc":{"start":65,"end":220}},"loc":{"start":59,"end":220}}],"loc":{"start":49,"end":228}},"loc":{"start":39,"end":228}}],"loc":{"start":31,"end":234}},"loc":{"start":22,"end":234}}]}}]}, + fieldViews: [view0,view1,view2,view3,view4,view5,view6], + adminMetaHash: 'fhppxz', + adminConfig, + apiPath: '/api/graphql', + adminPath: '', +}; diff --git a/examples/custom-field/app/(admin)/[listKey]/[id]/page.tsx b/examples/custom-field/app/(admin)/[listKey]/[id]/page.tsx new file mode 100644 index 00000000000..c5d7ea2be62 --- /dev/null +++ b/examples/custom-field/app/(admin)/[listKey]/[id]/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { ItemPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage' + +export default ItemPage diff --git a/examples/custom-field/app/(admin)/[listKey]/create/page.tsx b/examples/custom-field/app/(admin)/[listKey]/create/page.tsx new file mode 100644 index 00000000000..d6042acaa96 --- /dev/null +++ b/examples/custom-field/app/(admin)/[listKey]/create/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { CreateItemPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage' + +export default CreateItemPage diff --git a/examples/custom-field/app/(admin)/[listKey]/page.tsx b/examples/custom-field/app/(admin)/[listKey]/page.tsx new file mode 100644 index 00000000000..f6e75f8cfab --- /dev/null +++ b/examples/custom-field/app/(admin)/[listKey]/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { ListPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage' + +export default ListPage diff --git a/examples/custom-field/app/(admin)/layout.tsx b/examples/custom-field/app/(admin)/layout.tsx new file mode 100644 index 00000000000..abb5a0f3b2c --- /dev/null +++ b/examples/custom-field/app/(admin)/layout.tsx @@ -0,0 +1,16 @@ +'use client' +import { Layout } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App' +import { config } from './.admin' + + +export default function AdminLayout ({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} \ No newline at end of file diff --git a/examples/custom-field/app/(admin)/no-access/page.tsx b/examples/custom-field/app/(admin)/no-access/page.tsx new file mode 100644 index 00000000000..70877231fee --- /dev/null +++ b/examples/custom-field/app/(admin)/no-access/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { getNoAccessPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage' + +export default getNoAccessPage({ sessionsEnabled: false }) diff --git a/examples/custom-field/app/(admin)/page.tsx b/examples/custom-field/app/(admin)/page.tsx new file mode 100644 index 00000000000..5c268390b0f --- /dev/null +++ b/examples/custom-field/app/(admin)/page.tsx @@ -0,0 +1,2 @@ +'use client' +export { HomePage as default } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage' diff --git a/examples/custom-field/app/layout.tsx b/examples/custom-field/app/layout.tsx new file mode 100644 index 00000000000..38a4853e3a5 --- /dev/null +++ b/examples/custom-field/app/layout.tsx @@ -0,0 +1,11 @@ +export default function RootLayout ({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/examples/custom-field/next-env.d.ts b/examples/custom-field/next-env.d.ts new file mode 100644 index 00000000000..4f11a03dc6c --- /dev/null +++ b/examples/custom-field/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/examples/custom-field/tsconfig.json b/examples/custom-field/tsconfig.json new file mode 100644 index 00000000000..3b0afd8f406 --- /dev/null +++ b/examples/custom-field/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "noEmit": true, + "incremental": true, + "module": "esnext", + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "paths": { + "@/fields/*": ["./fields/*"] + }, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + ".next/types/**/*.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/examples/document-field/next-env.d copy.ts b/examples/document-field/next-env.d copy.ts new file mode 100644 index 00000000000..4f11a03dc6c --- /dev/null +++ b/examples/document-field/next-env.d copy.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/examples/document-field/next-env.d.ts b/examples/document-field/next-env.d.ts index 7b7aa2c7727..4f11a03dc6c 100644 --- a/examples/document-field/next-env.d.ts +++ b/examples/document-field/next-env.d.ts @@ -1,2 +1,5 @@ /// -/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/examples/document-field/next.config.js b/examples/document-field/next.config.js deleted file mode 100644 index 00184d61daa..00000000000 --- a/examples/document-field/next.config.js +++ /dev/null @@ -1,5 +0,0 @@ -// you don't need this if you're building something outside of the Keystone repo - -const withPreconstruct = require('@preconstruct/next') - -module.exports = withPreconstruct() diff --git a/examples/document-field/src/app/(admin)/.admin/index.tsx b/examples/document-field/src/app/(admin)/.admin/index.tsx new file mode 100644 index 00000000000..e53104746f4 --- /dev/null +++ b/examples/document-field/src/app/(admin)/.admin/index.tsx @@ -0,0 +1,18 @@ +/* eslint-disable */ +import * as view0 from "@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view" +import * as view1 from "@keystone-6/core/fields/types/text/views" +import * as view2 from "@keystone-6/core/fields/types/select/views" +import * as view3 from "@keystone-6/fields-document/views" +import * as view4 from "@keystone-6/core/fields/types/timestamp/views" +import * as view5 from "@keystone-6/core/fields/types/relationship/views" + +const adminConfig = {} + +export const config = { + lazyMetadataQuery: {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keystone","loc":{"start":22,"end":30}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"adminMeta","loc":{"start":39,"end":48}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lists","loc":{"start":59,"end":64}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key","loc":{"start":77,"end":80}},"arguments":[],"directives":[],"loc":{"start":77,"end":80}},{"kind":"Field","name":{"kind":"Name","value":"isHidden","loc":{"start":91,"end":99}},"arguments":[],"directives":[],"loc":{"start":91,"end":99}},{"kind":"Field","name":{"kind":"Name","value":"fields","loc":{"start":110,"end":116}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path","loc":{"start":131,"end":135}},"arguments":[],"directives":[],"loc":{"start":131,"end":135}},{"kind":"Field","name":{"kind":"Name","value":"createView","loc":{"start":148,"end":158}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fieldMode","loc":{"start":175,"end":184}},"arguments":[],"directives":[],"loc":{"start":175,"end":184}}],"loc":{"start":159,"end":198}},"loc":{"start":148,"end":198}}],"loc":{"start":117,"end":210}},"loc":{"start":110,"end":210}}],"loc":{"start":65,"end":220}},"loc":{"start":59,"end":220}}],"loc":{"start":49,"end":228}},"loc":{"start":39,"end":228}}],"loc":{"start":31,"end":234}},"loc":{"start":22,"end":234}}]}}]}, + fieldViews: [view0,view1,view2,view3,view4,view5], + adminMetaHash: '1oos0js', + adminConfig, + apiPath: '/api/graphql', + adminPath: '', +}; diff --git a/examples/document-field/src/app/(admin)/[listKey]/[id]/page.tsx b/examples/document-field/src/app/(admin)/[listKey]/[id]/page.tsx new file mode 100644 index 00000000000..c5d7ea2be62 --- /dev/null +++ b/examples/document-field/src/app/(admin)/[listKey]/[id]/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { ItemPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage' + +export default ItemPage diff --git a/examples/document-field/src/app/(admin)/[listKey]/create/page.tsx b/examples/document-field/src/app/(admin)/[listKey]/create/page.tsx new file mode 100644 index 00000000000..d6042acaa96 --- /dev/null +++ b/examples/document-field/src/app/(admin)/[listKey]/create/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { CreateItemPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage' + +export default CreateItemPage diff --git a/examples/document-field/src/app/(admin)/[listKey]/page.tsx b/examples/document-field/src/app/(admin)/[listKey]/page.tsx new file mode 100644 index 00000000000..f6e75f8cfab --- /dev/null +++ b/examples/document-field/src/app/(admin)/[listKey]/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { ListPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage' + +export default ListPage diff --git a/examples/document-field/src/pages/author/[id].tsx b/examples/document-field/src/app/(admin)/author/[id]/page.tsx similarity index 58% rename from examples/document-field/src/pages/author/[id].tsx rename to examples/document-field/src/app/(admin)/author/[id]/page.tsx index f3aa3dbdf80..8b44a9869f5 100644 --- a/examples/document-field/src/pages/author/[id].tsx +++ b/examples/document-field/src/app/(admin)/author/[id]/page.tsx @@ -2,9 +2,28 @@ import { type GetStaticPathsResult, type GetStaticPropsContext } from 'next' import Link from 'next/link' import React from 'react' import { DocumentRenderer } from '@keystone-6/document-renderer' -import { fetchGraphQL, gql } from '../../utils' +import { fetchGraphQL, gql } from '../../../../utils' -export default function Post ({ author }: { author: any }) { +export default async function Post ({ params }: any) { +const data = await fetchGraphQL( + gql` + query ($id: ID!) { + author(where: { id: $id }) { + name + bio { + document + } + posts(where: { status: { equals: published } }, orderBy: { publishDate: desc }) { + id + title + slug + } + } + } + `, + { id: params!.id } +) +const author = data?.author return (

{author.name}

@@ -35,25 +54,3 @@ export async function getStaticPaths (): Promise { fallback: 'blocking', } } - -export async function getStaticProps ({ params }: GetStaticPropsContext) { - const data = await fetchGraphQL( - gql` - query ($id: ID!) { - author(where: { id: $id }) { - name - bio { - document - } - posts(where: { status: { equals: published } }, orderBy: { publishDate: desc }) { - id - title - slug - } - } - } - `, - { id: params!.id } - ) - return { props: { author: data.author }, revalidate: 60 } -} diff --git a/examples/document-field/src/app/(admin)/layout.tsx b/examples/document-field/src/app/(admin)/layout.tsx new file mode 100644 index 00000000000..abb5a0f3b2c --- /dev/null +++ b/examples/document-field/src/app/(admin)/layout.tsx @@ -0,0 +1,16 @@ +'use client' +import { Layout } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App' +import { config } from './.admin' + + +export default function AdminLayout ({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} \ No newline at end of file diff --git a/examples/document-field/src/app/(admin)/no-access/page.tsx b/examples/document-field/src/app/(admin)/no-access/page.tsx new file mode 100644 index 00000000000..70877231fee --- /dev/null +++ b/examples/document-field/src/app/(admin)/no-access/page.tsx @@ -0,0 +1,4 @@ +'use client' +import { getNoAccessPage } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage' + +export default getNoAccessPage({ sessionsEnabled: false }) diff --git a/examples/document-field/src/app/(admin)/page.tsx b/examples/document-field/src/app/(admin)/page.tsx new file mode 100644 index 00000000000..5c268390b0f --- /dev/null +++ b/examples/document-field/src/app/(admin)/page.tsx @@ -0,0 +1,2 @@ +'use client' +export { HomePage as default } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage' diff --git a/examples/document-field/src/pages/post/[slug].tsx b/examples/document-field/src/app/(admin)/post/[slug]/page.tsx similarity index 89% rename from examples/document-field/src/pages/post/[slug].tsx rename to examples/document-field/src/app/(admin)/post/[slug]/page.tsx index eaf941ad802..ab476cde41d 100644 --- a/examples/document-field/src/pages/post/[slug].tsx +++ b/examples/document-field/src/app/(admin)/post/[slug]/page.tsx @@ -2,7 +2,7 @@ import { type GetStaticPathsResult, type GetStaticPropsContext } from 'next' import Link from 'next/link' import React from 'react' import { DocumentRenderer, type DocumentRendererProps } from '@keystone-6/document-renderer' -import { fetchGraphQL, gql } from '../../utils' +import { fetchGraphQL, gql } from '../../../../utils' // By default the DocumentRenderer will render unstyled html elements. // We're customising how headings are rendered here but you can customise @@ -39,7 +39,26 @@ const renderers: DocumentRendererProps['renderers'] = { }, } -export default function Post ({ post }: { post: any }) { +export default async function Post ({ params }: { params: any }) { + const data = await fetchGraphQL( + gql` + query ($slug: String!) { + post(where: { slug: $slug }) { + title + content { + document(hydrateRelationships: true) + } + publishDate + author { + id + name + } + } + } + `, + { slug: params!.slug } + ) + const post = data?.post return (

{post.title}

@@ -73,27 +92,3 @@ export async function getStaticPaths (): Promise { fallback: 'blocking', } } - -export async function getStaticProps ({ params }: GetStaticPropsContext) { - // We use (hydrateRelationships: true) to ensure we have the data we need - // to render the inline relationships. - const data = await fetchGraphQL( - gql` - query ($slug: String!) { - post(where: { slug: $slug }) { - title - content { - document(hydrateRelationships: true) - } - publishDate - author { - id - name - } - } - } - `, - { slug: params!.slug } - ) - return { props: { post: data.post }, revalidate: 60 } -} diff --git a/examples/document-field/src/app/layout.tsx b/examples/document-field/src/app/layout.tsx new file mode 100644 index 00000000000..38a4853e3a5 --- /dev/null +++ b/examples/document-field/src/app/layout.tsx @@ -0,0 +1,11 @@ +export default function RootLayout ({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/examples/document-field/src/pages/index.tsx b/examples/document-field/src/app/page.tsx similarity index 84% rename from examples/document-field/src/pages/index.tsx rename to examples/document-field/src/app/page.tsx index 737a083edb8..0a58d077bd5 100644 --- a/examples/document-field/src/pages/index.tsx +++ b/examples/document-field/src/app/page.tsx @@ -4,7 +4,23 @@ import { fetchGraphQL, gql } from '../utils' type Author = { id: string, name: string, posts: { id: string, slug: string, title: string }[] } -export default function Index ({ authors }: { authors: Author[] }) { +export default async function Index () { + const data = await fetchGraphQL(gql` + query { + authors { + id + name + posts(where: { status: { equals: published } }, orderBy: { publishDate: desc }) { + id + slug + title + } + } + } + `) + + const authors: Author[] = data?.authors || [] + return ( <>

Keystone Blog Project - Home

@@ -27,20 +43,3 @@ export default function Index ({ authors }: { authors: Author[] }) { ) } - -export async function getStaticProps () { - const data = await fetchGraphQL(gql` - query { - authors { - id - name - posts(where: { status: { equals: published } }, orderBy: { publishDate: desc }) { - id - slug - title - } - } - } - `) - return { props: { authors: data.authors }, revalidate: 30 } -} diff --git a/examples/document-field/tsconfig.json b/examples/document-field/tsconfig.json index 1ed5fb820cb..64857dc28d3 100644 --- a/examples/document-field/tsconfig.json +++ b/examples/document-field/tsconfig.json @@ -1,7 +1,11 @@ { "compilerOptions": { "target": "esnext", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": false, "skipLibCheck": false, "strict": true, @@ -12,8 +16,21 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve" + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ] }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] } diff --git a/packages/auth/src/pages/InitPage.tsx b/packages/auth/src/pages/InitPage.tsx index 7f76a8f9ca7..75d6ef791f2 100644 --- a/packages/auth/src/pages/InitPage.tsx +++ b/packages/auth/src/pages/InitPage.tsx @@ -228,11 +228,11 @@ function InitPage ({ await reinitContext() if (enableWelcome) return setMode('welcome') - router.push(adminPath) + router.push(adminPath || '/') } const onComplete = () => { - router.push(adminPath) + router.push(adminPath || '/') } return mode === 'init' ? ( diff --git a/packages/core/src/admin-ui/components/Navigation.tsx b/packages/core/src/admin-ui/components/Navigation.tsx index a75c4fc52f8..12bbf49c15f 100644 --- a/packages/core/src/admin-ui/components/Navigation.tsx +++ b/packages/core/src/admin-ui/components/Navigation.tsx @@ -175,7 +175,7 @@ export const ListNavItem = ({ list }: { list: ListMeta }) => { const { adminPath } = useKeystone() return ( {list.label} diff --git a/packages/core/src/admin-ui/templates/app.ts b/packages/core/src/admin-ui/templates/app.ts index e86d15527e5..2ed7211ea3e 100644 --- a/packages/core/src/admin-ui/templates/app.ts +++ b/packages/core/src/admin-ui/templates/app.ts @@ -47,8 +47,8 @@ export function adminConfigTemplate ( return JSON.stringify(viewRelativeToAppFile) }) // -- TEMPLATE START - return `/* eslint-disable */\n${adminMetaRootVal.views - .map((views, i) => `import * as view${i} from '${views}'`) + return `/* eslint-disable */\n${allViews + .map((views, i) => `import * as view${i} from ${views}`) .join('\n')} ${configFileExists @@ -92,6 +92,23 @@ export default function AdminLayout ({ // -- TEMPLATE END } +export function adminRootLayoutTemplate () { + + // -- TEMPLATE START + return `export default function RootLayout ({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +}` + // -- TEMPLATE END +} + function getLazyMetadataQuery ( graphqlSchema: GraphQLSchema, adminMeta: StaticAdminMetaQuery['keystone']['adminMeta'] diff --git a/packages/core/src/admin-ui/templates/index.ts b/packages/core/src/admin-ui/templates/index.ts index 35720c387ba..d6b2dbf31f6 100644 --- a/packages/core/src/admin-ui/templates/index.ts +++ b/packages/core/src/admin-ui/templates/index.ts @@ -4,7 +4,7 @@ import { type __ResolvedKeystoneConfig } from '../../types' import type { AdminMetaRootVal } from '../../lib/create-admin-meta' -import { adminConfigTemplate, adminLayoutTemplate } from './app' +import { adminConfigTemplate, adminLayoutTemplate, adminRootLayoutTemplate } from './app' import { homeTemplate } from './home' import { listTemplate } from './list' import { itemTemplate } from './item' @@ -21,6 +21,7 @@ export const writeAdminFiles = ( return [ { mode: 'write', src: noAccessTemplate(config.session), outputPath: `no-access/page.${ext}` }, { mode: 'write', src: adminLayoutTemplate(), outputPath: `layout.${ext}` }, + { mode: 'write', src: adminRootLayoutTemplate(), outputPath: `../layout.${ext}` }, { mode: 'write', src: adminConfigTemplate( diff --git a/tests/examples-smoke-tests/custom-admin-ui-pages.test.ts b/tests/examples-smoke-tests/custom-admin-ui-pages.test.ts index a24e461c128..f4dc0fe3280 100644 --- a/tests/examples-smoke-tests/custom-admin-ui-pages.test.ts +++ b/tests/examples-smoke-tests/custom-admin-ui-pages.test.ts @@ -12,7 +12,7 @@ exampleProjectTests('custom-admin-ui-pages', browserType => { await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await retry(async () => { await page.goto('http://localhost:3000/custom-page') await page.waitForSelector('main h1:has-text("This is a custom Admin UI page")') diff --git a/tests/examples-smoke-tests/custom-field-view.test.ts b/tests/examples-smoke-tests/custom-field-view.test.ts index 2ffa043afd1..36290e0cf24 100644 --- a/tests/examples-smoke-tests/custom-field-view.test.ts +++ b/tests/examples-smoke-tests/custom-field-view.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('custom-field-view', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("People")')]) await page.waitForSelector('a:has-text("Create Person")') }) diff --git a/tests/examples-smoke-tests/custom-field.test.ts b/tests/examples-smoke-tests/custom-field.test.ts index 9dc70269031..5211b67abde 100644 --- a/tests/examples-smoke-tests/custom-field.test.ts +++ b/tests/examples-smoke-tests/custom-field.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('custom-field', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("Posts")')]) await page.waitForSelector('a:has-text("Create Post")') }) diff --git a/tests/examples-smoke-tests/default-values.test.ts b/tests/examples-smoke-tests/default-values.test.ts index 113370bbd3c..30f5209a89a 100644 --- a/tests/examples-smoke-tests/default-values.test.ts +++ b/tests/examples-smoke-tests/default-values.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('default-values', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("People")')]) await page.waitForSelector('a:has-text("Create Person")') }) diff --git a/tests/examples-smoke-tests/document-field.test.ts b/tests/examples-smoke-tests/document-field.test.ts index 21143e3f0d1..d8e6e783dd3 100644 --- a/tests/examples-smoke-tests/document-field.test.ts +++ b/tests/examples-smoke-tests/document-field.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('document-field', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("Authors")')]) await page.waitForSelector('a:has-text("Create Author")') }) diff --git a/tests/examples-smoke-tests/extend-express-app.test.ts b/tests/examples-smoke-tests/extend-express-app.test.ts index 19ebd5299e9..dbf3b538498 100644 --- a/tests/examples-smoke-tests/extend-express-app.test.ts +++ b/tests/examples-smoke-tests/extend-express-app.test.ts @@ -10,11 +10,11 @@ exampleProjectTests('extend-express-app', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("Posts")')]) await page.waitForSelector('a:has-text("Create Post")') }) - test.skip('Get Posts', async () => { + test('Get Posts', async () => { const tasks = await fetch('http://localhost:3000/rest/posts', { method: 'GET', headers: { diff --git a/tests/examples-smoke-tests/extend-graphql-schema-graphql-tools.test.ts b/tests/examples-smoke-tests/extend-graphql-schema-graphql-tools.test.ts index e0d53a3eddd..ca6b4390d06 100644 --- a/tests/examples-smoke-tests/extend-graphql-schema-graphql-tools.test.ts +++ b/tests/examples-smoke-tests/extend-graphql-schema-graphql-tools.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('extend-graphql-schema-graphql-tools', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("Authors")')]) await page.waitForSelector('a:has-text("Create Author")') }) diff --git a/tests/examples-smoke-tests/extend-graphql-schema-graphql-ts.test.ts b/tests/examples-smoke-tests/extend-graphql-schema-graphql-ts.test.ts index 715a986ba58..fe9b7682dfa 100644 --- a/tests/examples-smoke-tests/extend-graphql-schema-graphql-ts.test.ts +++ b/tests/examples-smoke-tests/extend-graphql-schema-graphql-ts.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('extend-graphql-schema-graphql-ts', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("Authors")')]) await page.waitForSelector('a:has-text("Create Author")') }) diff --git a/tests/examples-smoke-tests/extend-graphql-schema-nexus.test.ts b/tests/examples-smoke-tests/extend-graphql-schema-nexus.test.ts index 6446b19caff..740161640f4 100644 --- a/tests/examples-smoke-tests/extend-graphql-schema-nexus.test.ts +++ b/tests/examples-smoke-tests/extend-graphql-schema-nexus.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('extend-graphql-schema-nexus', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("Authors")')]) await page.waitForSelector('a:has-text("Create Author")') }) diff --git a/tests/examples-smoke-tests/usecase-blog.test.ts b/tests/examples-smoke-tests/usecase-blog.test.ts index af119c1fe67..5ed4a70e006 100644 --- a/tests/examples-smoke-tests/usecase-blog.test.ts +++ b/tests/examples-smoke-tests/usecase-blog.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('usecase-blog', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("Authors")')]) await page.waitForSelector('a:has-text("Create Author")') }) diff --git a/tests/examples-smoke-tests/usecase-todo.test.ts b/tests/examples-smoke-tests/usecase-todo.test.ts index 528f2cd4797..9e15bb10729 100644 --- a/tests/examples-smoke-tests/usecase-todo.test.ts +++ b/tests/examples-smoke-tests/usecase-todo.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('usecase-todo', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("People")')]) await page.waitForSelector('a:has-text("Create Person")') }) diff --git a/tests/examples-smoke-tests/utils.ts b/tests/examples-smoke-tests/utils.ts index 50cfb966103..f06cc7ff25f 100644 --- a/tests/examples-smoke-tests/utils.ts +++ b/tests/examples-smoke-tests/utils.ts @@ -36,7 +36,7 @@ const treeKill = promisify(_treeKill) jest.setTimeout(10000000) export function initFirstItemTest (getPage: () => playwright.Page) { - test.skip('init first item', async () => { + test('init first item', async () => { const page = getPage() await page.fill('label:has-text("Name") >> .. >> input', 'Admin') await page.click('button:has-text("Set Password")') diff --git a/tests/examples-smoke-tests/virtual-field.test.ts b/tests/examples-smoke-tests/virtual-field.test.ts index 78de36f2e7e..3d93e45c181 100644 --- a/tests/examples-smoke-tests/virtual-field.test.ts +++ b/tests/examples-smoke-tests/virtual-field.test.ts @@ -9,7 +9,7 @@ exampleProjectTests('virtual-field', browserType => { page = await browser.newPage() await loadIndex(page) }) - test.skip('Load list', async () => { + test('Load list', async () => { await Promise.all([page.waitForNavigation(), page.click('h3:has-text("Posts")')]) await page.waitForSelector('a:has-text("Create Post")') }) diff --git a/examples/custom-admin-ui-logo/next.config.mjs b/tests/test-projects/basic/next.config.mjs similarity index 56% rename from examples/custom-admin-ui-logo/next.config.mjs rename to tests/test-projects/basic/next.config.mjs index bec106de70d..8f06b183bdf 100644 --- a/examples/custom-admin-ui-logo/next.config.mjs +++ b/tests/test-projects/basic/next.config.mjs @@ -1,10 +1,6 @@ // you don't need this if you're building something outside of the Keystone repo export default { - experimental: { - // without this, 'Error: Expected Upload to be a GraphQL nullable type.' - serverComponentsExternalPackages: ['graphql'], - }, eslint: { ignoreDuringBuilds: true, }, diff --git a/examples/custom-admin-ui-navigation/next.config.mjs b/tests/test-projects/crud-notifications/next.config.mjs similarity index 56% rename from examples/custom-admin-ui-navigation/next.config.mjs rename to tests/test-projects/crud-notifications/next.config.mjs index bec106de70d..8f06b183bdf 100644 --- a/examples/custom-admin-ui-navigation/next.config.mjs +++ b/tests/test-projects/crud-notifications/next.config.mjs @@ -1,10 +1,6 @@ // you don't need this if you're building something outside of the Keystone repo export default { - experimental: { - // without this, 'Error: Expected Upload to be a GraphQL nullable type.' - serverComponentsExternalPackages: ['graphql'], - }, eslint: { ignoreDuringBuilds: true, }, diff --git a/examples/custom-admin-ui-pages/next.config.mjs b/tests/test-projects/live-reloading/next.config.mjs similarity index 56% rename from examples/custom-admin-ui-pages/next.config.mjs rename to tests/test-projects/live-reloading/next.config.mjs index bec106de70d..8f06b183bdf 100644 --- a/examples/custom-admin-ui-pages/next.config.mjs +++ b/tests/test-projects/live-reloading/next.config.mjs @@ -1,10 +1,6 @@ // you don't need this if you're building something outside of the Keystone repo export default { - experimental: { - // without this, 'Error: Expected Upload to be a GraphQL nullable type.' - serverComponentsExternalPackages: ['graphql'], - }, eslint: { ignoreDuringBuilds: true, },