@payloadcms/graphql 4.0.0-internal.f05c47f → 4.0.0-internal.f15737c
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/dist/resolvers/collections/find.js +1 -1
- package/dist/resolvers/collections/find.js.map +1 -1
- package/dist/resolvers/collections/findByID.js +1 -1
- package/dist/resolvers/collections/findByID.js.map +1 -1
- package/dist/resolvers/collections/findVersionByID.js +1 -1
- package/dist/resolvers/collections/findVersionByID.js.map +1 -1
- package/dist/resolvers/collections/findVersions.js +1 -1
- package/dist/resolvers/collections/findVersions.js.map +1 -1
- package/dist/resolvers/globals/findOne.js +1 -1
- package/dist/resolvers/globals/findOne.js.map +1 -1
- package/dist/resolvers/globals/findVersionByID.js +1 -1
- package/dist/resolvers/globals/findVersionByID.js.map +1 -1
- package/dist/resolvers/globals/findVersions.js +1 -1
- package/dist/resolvers/globals/findVersions.js.map +1 -1
- package/dist/schema/fieldToSchemaMap.js +3 -3
- package/dist/schema/fieldToSchemaMap.js.map +1 -1
- package/dist/schema/withOperators.d.ts +6 -0
- package/dist/schema/withOperators.d.ts.map +1 -1
- package/dist/schema/withOperators.js +15 -0
- package/dist/schema/withOperators.js.map +1 -1
- package/dist/utilities/select.d.ts +4 -3
- package/dist/utilities/select.d.ts.map +1 -1
- package/dist/utilities/select.js +83 -45
- package/dist/utilities/select.js.map +1 -1
- package/package.json +4 -4
- package/dist/utilities/formatName.spec.js +0 -57
- package/dist/utilities/formatName.spec.js.map +0 -1
- package/dist/utilities/formatUtcOffset.spec.js +0 -142
- package/dist/utilities/formatUtcOffset.spec.js.map +0 -1
|
@@ -7,7 +7,7 @@ export function findResolver(collection) {
|
|
|
7
7
|
'fallbackLocale',
|
|
8
8
|
'transactionID'
|
|
9
9
|
]);
|
|
10
|
-
const select = context.select = args.select ? buildSelectForCollectionMany(info) : undefined;
|
|
10
|
+
const select = context.select = args.select ? buildSelectForCollectionMany(info, context) : undefined;
|
|
11
11
|
req.locale = args.locale || req.locale;
|
|
12
12
|
req.fallbackLocale = args.fallbackLocale || req.fallbackLocale;
|
|
13
13
|
req.query = req.query || {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/resolvers/collections/find.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Collection, PaginatedDocs, Where } from 'payload'\n\nimport { findOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollectionMany } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n data: Record<string, unknown>\n draft: boolean\n fallbackLocale?: string\n limit?: number\n locale?: string\n page?: number\n pagination?: boolean\n select?: boolean\n sort?: string\n trash?: boolean\n where?: Where\n },\n context: Context,\n info: GraphQLResolveInfo,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<PaginatedDocs<any>>\n\nexport function findResolver(collection: Collection): Resolver {\n return async function resolver(_, args, context, info) {\n const req = (context.req = isolateObjectProperty(context.req, [\n 'locale',\n 'fallbackLocale',\n 'transactionID',\n ]))\n const select = (context.select = args.select ? buildSelectForCollectionMany(info) : undefined)\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const draft: boolean =\n (args.draft ?? req.query?.draft === 'false')\n ? false\n : req.query?.draft === 'true'\n ? true\n : undefined\n if (typeof draft === 'boolean') {\n req.query.draft = String(draft)\n }\n\n const { sort } = args\n\n const options = {\n collection,\n depth: 0,\n draft: args.draft,\n limit: args.limit,\n page: args.page,\n pagination: args.pagination,\n req,\n select,\n sort: sort && typeof sort === 'string' ? sort.split(',') : undefined,\n trash: args.trash,\n where: args.where,\n }\n\n const result = await findOperation(options)\n return result\n }\n}\n"],"names":["findOperation","isolateObjectProperty","buildSelectForCollectionMany","findResolver","collection","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","draft","String","sort","options","depth","limit","page","pagination","split","trash","where","result"],"mappings":"AAGA,SAASA,aAAa,EAAEC,qBAAqB,QAAQ,UAAS;AAI9D,SAASC,4BAA4B,QAAQ,4BAA2B;AAsBxE,OAAO,SAASC,aAAaC,UAAsB;IACjD,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAOF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAC5D;YACA;YACA;SACD;QACD,MAAMC,SAAUH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,6BAA6BO,
|
|
1
|
+
{"version":3,"sources":["../../../src/resolvers/collections/find.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Collection, PaginatedDocs, Where } from 'payload'\n\nimport { findOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollectionMany } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n data: Record<string, unknown>\n draft: boolean\n fallbackLocale?: string\n limit?: number\n locale?: string\n page?: number\n pagination?: boolean\n select?: boolean\n sort?: string\n trash?: boolean\n where?: Where\n },\n context: Context,\n info: GraphQLResolveInfo,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<PaginatedDocs<any>>\n\nexport function findResolver(collection: Collection): Resolver {\n return async function resolver(_, args, context, info) {\n const req = (context.req = isolateObjectProperty(context.req, [\n 'locale',\n 'fallbackLocale',\n 'transactionID',\n ]))\n const select = (context.select = args.select ? buildSelectForCollectionMany(info, context) : undefined)\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const draft: boolean =\n (args.draft ?? req.query?.draft === 'false')\n ? false\n : req.query?.draft === 'true'\n ? true\n : undefined\n if (typeof draft === 'boolean') {\n req.query.draft = String(draft)\n }\n\n const { sort } = args\n\n const options = {\n collection,\n depth: 0,\n draft: args.draft,\n limit: args.limit,\n page: args.page,\n pagination: args.pagination,\n req,\n select,\n sort: sort && typeof sort === 'string' ? sort.split(',') : undefined,\n trash: args.trash,\n where: args.where,\n }\n\n const result = await findOperation(options)\n return result\n }\n}\n"],"names":["findOperation","isolateObjectProperty","buildSelectForCollectionMany","findResolver","collection","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","draft","String","sort","options","depth","limit","page","pagination","split","trash","where","result"],"mappings":"AAGA,SAASA,aAAa,EAAEC,qBAAqB,QAAQ,UAAS;AAI9D,SAASC,4BAA4B,QAAQ,4BAA2B;AAsBxE,OAAO,SAASC,aAAaC,UAAsB;IACjD,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAOF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAC5D;YACA;YACA;SACD;QACD,MAAMC,SAAUH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,6BAA6BO,MAAMD,WAAWI;QAE7FF,IAAIG,MAAM,GAAGN,KAAKM,MAAM,IAAIH,IAAIG,MAAM;QACtCH,IAAII,cAAc,GAAGP,KAAKO,cAAc,IAAIJ,IAAII,cAAc;QAC9DJ,IAAIK,KAAK,GAAGL,IAAIK,KAAK,IAAI,CAAC;QAE1B,MAAMC,QACJ,AAACT,KAAKS,KAAK,IAAIN,IAAIK,KAAK,EAAEC,UAAU,UAChC,QACAN,IAAIK,KAAK,EAAEC,UAAU,SACnB,OACAJ;QACR,IAAI,OAAOI,UAAU,WAAW;YAC9BN,IAAIK,KAAK,CAACC,KAAK,GAAGC,OAAOD;QAC3B;QAEA,MAAM,EAAEE,IAAI,EAAE,GAAGX;QAEjB,MAAMY,UAAU;YACdf;YACAgB,OAAO;YACPJ,OAAOT,KAAKS,KAAK;YACjBK,OAAOd,KAAKc,KAAK;YACjBC,MAAMf,KAAKe,IAAI;YACfC,YAAYhB,KAAKgB,UAAU;YAC3Bb;YACAC;YACAO,MAAMA,QAAQ,OAAOA,SAAS,WAAWA,KAAKM,KAAK,CAAC,OAAOZ;YAC3Da,OAAOlB,KAAKkB,KAAK;YACjBC,OAAOnB,KAAKmB,KAAK;QACnB;QAEA,MAAMC,SAAS,MAAM3B,cAAcmB;QACnC,OAAOQ;IACT;AACF"}
|
|
@@ -7,7 +7,7 @@ export function findByIDResolver(collection) {
|
|
|
7
7
|
'fallbackLocale',
|
|
8
8
|
'transactionID'
|
|
9
9
|
]);
|
|
10
|
-
const select = context.select = args.select ? buildSelectForCollection(info) : undefined;
|
|
10
|
+
const select = context.select = args.select ? buildSelectForCollection(info, context) : undefined;
|
|
11
11
|
req.locale = args.locale || req.locale;
|
|
12
12
|
req.fallbackLocale = args.fallbackLocale || req.fallbackLocale;
|
|
13
13
|
req.query = req.query || {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/resolvers/collections/findByID.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Collection, CollectionSlug, DataFromCollectionSlug } from 'payload'\n\nimport { findByIDOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollection } from '../../utilities/select.js'\n\nexport type Resolver<TData> = (\n _: unknown,\n args: {\n draft: boolean\n fallbackLocale?: string\n id: string\n locale?: string\n select?: boolean\n trash?: boolean\n },\n context: Context,\n info: GraphQLResolveInfo,\n) => Promise<TData>\n\nexport function findByIDResolver<TSlug extends CollectionSlug>(\n collection: Collection,\n): Resolver<DataFromCollectionSlug<TSlug>> {\n return async function resolver(_, args, context, info) {\n const req = context.req = isolateObjectProperty(context.req, ['locale', 'fallbackLocale', 'transactionID'])\n const select = context.select = args.select ? buildSelectForCollection(info) : undefined\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const draft: boolean =\n (args.draft ?? req.query?.draft === 'false')\n ? false\n : req.query?.draft === 'true'\n ? true\n : undefined\n if (typeof draft === 'boolean') {\n req.query.draft = String(draft)\n }\n\n const options = {\n id: args.id,\n collection,\n depth: 0,\n draft: args.draft,\n req,\n select,\n trash: args.trash,\n }\n\n const result = await findByIDOperation(options)\n return result\n }\n}\n"],"names":["findByIDOperation","isolateObjectProperty","buildSelectForCollection","findByIDResolver","collection","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","draft","String","options","id","depth","trash","result"],"mappings":"AAGA,SAASA,iBAAiB,EAAEC,qBAAqB,QAAQ,UAAS;AAIlE,SAASC,wBAAwB,QAAQ,4BAA2B;AAgBpE,OAAO,SAASC,iBACdC,UAAsB;IAEtB,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAMF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAAC;YAAU;YAAkB;SAAgB;QAC1G,MAAMC,SAASH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,yBAAyBO,
|
|
1
|
+
{"version":3,"sources":["../../../src/resolvers/collections/findByID.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Collection, CollectionSlug, DataFromCollectionSlug } from 'payload'\n\nimport { findByIDOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollection } from '../../utilities/select.js'\n\nexport type Resolver<TData> = (\n _: unknown,\n args: {\n draft: boolean\n fallbackLocale?: string\n id: string\n locale?: string\n select?: boolean\n trash?: boolean\n },\n context: Context,\n info: GraphQLResolveInfo,\n) => Promise<TData>\n\nexport function findByIDResolver<TSlug extends CollectionSlug>(\n collection: Collection,\n): Resolver<DataFromCollectionSlug<TSlug>> {\n return async function resolver(_, args, context, info) {\n const req = context.req = isolateObjectProperty(context.req, ['locale', 'fallbackLocale', 'transactionID'])\n const select = context.select = args.select ? buildSelectForCollection(info, context) : undefined\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const draft: boolean =\n (args.draft ?? req.query?.draft === 'false')\n ? false\n : req.query?.draft === 'true'\n ? true\n : undefined\n if (typeof draft === 'boolean') {\n req.query.draft = String(draft)\n }\n\n const options = {\n id: args.id,\n collection,\n depth: 0,\n draft: args.draft,\n req,\n select,\n trash: args.trash,\n }\n\n const result = await findByIDOperation(options)\n return result\n }\n}\n"],"names":["findByIDOperation","isolateObjectProperty","buildSelectForCollection","findByIDResolver","collection","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","draft","String","options","id","depth","trash","result"],"mappings":"AAGA,SAASA,iBAAiB,EAAEC,qBAAqB,QAAQ,UAAS;AAIlE,SAASC,wBAAwB,QAAQ,4BAA2B;AAgBpE,OAAO,SAASC,iBACdC,UAAsB;IAEtB,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAMF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAAC;YAAU;YAAkB;SAAgB;QAC1G,MAAMC,SAASH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,yBAAyBO,MAAMD,WAAWI;QAExFF,IAAIG,MAAM,GAAGN,KAAKM,MAAM,IAAIH,IAAIG,MAAM;QACtCH,IAAII,cAAc,GAAGP,KAAKO,cAAc,IAAIJ,IAAII,cAAc;QAC9DJ,IAAIK,KAAK,GAAGL,IAAIK,KAAK,IAAI,CAAC;QAE1B,MAAMC,QACJ,AAACT,KAAKS,KAAK,IAAIN,IAAIK,KAAK,EAAEC,UAAU,UAChC,QACAN,IAAIK,KAAK,EAAEC,UAAU,SACnB,OACAJ;QACR,IAAI,OAAOI,UAAU,WAAW;YAC9BN,IAAIK,KAAK,CAACC,KAAK,GAAGC,OAAOD;QAC3B;QAEA,MAAME,UAAU;YACdC,IAAIZ,KAAKY,EAAE;YACXf;YACAgB,OAAO;YACPJ,OAAOT,KAAKS,KAAK;YACjBN;YACAC;YACAU,OAAOd,KAAKc,KAAK;QACnB;QAEA,MAAMC,SAAS,MAAMtB,kBAAkBkB;QACvC,OAAOI;IACT;AACF"}
|
|
@@ -7,7 +7,7 @@ export function findVersionByIDResolver(collection) {
|
|
|
7
7
|
'fallbackLocale',
|
|
8
8
|
'transactionID'
|
|
9
9
|
]);
|
|
10
|
-
const select = context.select = args.select ? buildSelectForCollection(info) : undefined;
|
|
10
|
+
const select = context.select = args.select ? buildSelectForCollection(info, context) : undefined;
|
|
11
11
|
req.locale = args.locale || req.locale;
|
|
12
12
|
req.fallbackLocale = args.fallbackLocale || req.fallbackLocale;
|
|
13
13
|
req.query = req.query || {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/resolvers/collections/findVersionByID.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Collection, TypeWithID, TypeWithVersion } from 'payload'\n\nimport { findVersionByIDOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollection } from '../../utilities/select.js'\n\nexport type Resolver<T extends TypeWithID = any> = (\n _: unknown,\n args: {\n fallbackLocale?: string\n id: number | string\n locale?: string\n select?: boolean\n trash?: boolean\n },\n context: Context,\n info: GraphQLResolveInfo,\n) => Promise<TypeWithVersion<T>>\n\nexport function findVersionByIDResolver(collection: Collection): Resolver {\n return async function resolver(_, args, context, info) {\n const req = context.req = isolateObjectProperty(context.req, ['locale', 'fallbackLocale', 'transactionID'])\n const select = context.select = args.select ? buildSelectForCollection(info) : undefined\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const options = {\n id: args.id,\n collection,\n depth: 0,\n req,\n select,\n trash: args.trash,\n }\n\n const result = await findVersionByIDOperation(options)\n return result\n }\n}\n"],"names":["findVersionByIDOperation","isolateObjectProperty","buildSelectForCollection","findVersionByIDResolver","collection","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","options","id","depth","trash","result"],"mappings":"AAGA,SAASA,wBAAwB,EAAEC,qBAAqB,QAAQ,UAAS;AAIzE,SAASC,wBAAwB,QAAQ,4BAA2B;AAepE,OAAO,SAASC,wBAAwBC,UAAsB;IAC5D,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAMF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAAC;YAAU;YAAkB;SAAgB;QAC1G,MAAMC,SAASH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,yBAAyBO,
|
|
1
|
+
{"version":3,"sources":["../../../src/resolvers/collections/findVersionByID.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Collection, TypeWithID, TypeWithVersion } from 'payload'\n\nimport { findVersionByIDOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollection } from '../../utilities/select.js'\n\nexport type Resolver<T extends TypeWithID = any> = (\n _: unknown,\n args: {\n fallbackLocale?: string\n id: number | string\n locale?: string\n select?: boolean\n trash?: boolean\n },\n context: Context,\n info: GraphQLResolveInfo,\n) => Promise<TypeWithVersion<T>>\n\nexport function findVersionByIDResolver(collection: Collection): Resolver {\n return async function resolver(_, args, context, info) {\n const req = context.req = isolateObjectProperty(context.req, ['locale', 'fallbackLocale', 'transactionID'])\n const select = context.select = args.select ? buildSelectForCollection(info, context) : undefined\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const options = {\n id: args.id,\n collection,\n depth: 0,\n req,\n select,\n trash: args.trash,\n }\n\n const result = await findVersionByIDOperation(options)\n return result\n }\n}\n"],"names":["findVersionByIDOperation","isolateObjectProperty","buildSelectForCollection","findVersionByIDResolver","collection","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","options","id","depth","trash","result"],"mappings":"AAGA,SAASA,wBAAwB,EAAEC,qBAAqB,QAAQ,UAAS;AAIzE,SAASC,wBAAwB,QAAQ,4BAA2B;AAepE,OAAO,SAASC,wBAAwBC,UAAsB;IAC5D,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAMF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAAC;YAAU;YAAkB;SAAgB;QAC1G,MAAMC,SAASH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,yBAAyBO,MAAMD,WAAWI;QAExFF,IAAIG,MAAM,GAAGN,KAAKM,MAAM,IAAIH,IAAIG,MAAM;QACtCH,IAAII,cAAc,GAAGP,KAAKO,cAAc,IAAIJ,IAAII,cAAc;QAC9DJ,IAAIK,KAAK,GAAGL,IAAIK,KAAK,IAAI,CAAC;QAE1B,MAAMC,UAAU;YACdC,IAAIV,KAAKU,EAAE;YACXb;YACAc,OAAO;YACPR;YACAC;YACAQ,OAAOZ,KAAKY,KAAK;QACnB;QAEA,MAAMC,SAAS,MAAMpB,yBAAyBgB;QAC9C,OAAOI;IACT;AACF"}
|
|
@@ -7,7 +7,7 @@ export function findVersionsResolver(collection) {
|
|
|
7
7
|
'fallbackLocale',
|
|
8
8
|
'transactionID'
|
|
9
9
|
]);
|
|
10
|
-
const select = context.select = args.select ? buildSelectForCollectionMany(info) : undefined;
|
|
10
|
+
const select = context.select = args.select ? buildSelectForCollectionMany(info, context) : undefined;
|
|
11
11
|
req.locale = args.locale || req.locale;
|
|
12
12
|
req.fallbackLocale = args.fallbackLocale || req.fallbackLocale;
|
|
13
13
|
req.query = req.query || {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/resolvers/collections/findVersions.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Collection, PaginatedDocs, Where } from 'payload'\n\nimport { findVersionsOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollectionMany } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n draft?: boolean\n fallbackLocale?: string\n limit?: number\n locale?: string\n page?: number\n pagination?: boolean\n select?: boolean\n sort?: string\n trash?: boolean\n where: Where\n },\n context: Context,\n info: GraphQLResolveInfo,\n) => Promise<PaginatedDocs<any>>\n\nexport function findVersionsResolver(collection: Collection): Resolver {\n return async function resolver(_, args, context, info) {\n const req = (context.req = isolateObjectProperty(context.req, [\n 'locale',\n 'fallbackLocale',\n 'transactionID',\n ]))\n const select = (context.select = args.select ? buildSelectForCollectionMany(info) : undefined)\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const draft: boolean =\n (args.draft ?? req.query?.draft === 'false')\n ? false\n : req.query?.draft === 'true'\n ? true\n : undefined\n if (typeof draft === 'boolean') {\n req.query.draft = String(draft)\n }\n\n const { sort } = args\n\n const options = {\n collection,\n depth: 0,\n limit: args.limit,\n page: args.page,\n pagination: args.pagination,\n req,\n select,\n sort: sort && typeof sort === 'string' ? sort.split(',') : undefined,\n trash: args.trash,\n where: args.where,\n }\n\n const result = await findVersionsOperation(options)\n return result\n }\n}\n"],"names":["findVersionsOperation","isolateObjectProperty","buildSelectForCollectionMany","findVersionsResolver","collection","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","draft","String","sort","options","depth","limit","page","pagination","split","trash","where","result"],"mappings":"AAGA,SAASA,qBAAqB,EAAEC,qBAAqB,QAAQ,UAAS;AAItE,SAASC,4BAA4B,QAAQ,4BAA2B;AAoBxE,OAAO,SAASC,qBAAqBC,UAAsB;IACzD,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAOF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAC5D;YACA;YACA;SACD;QACD,MAAMC,SAAUH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,6BAA6BO,
|
|
1
|
+
{"version":3,"sources":["../../../src/resolvers/collections/findVersions.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Collection, PaginatedDocs, Where } from 'payload'\n\nimport { findVersionsOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollectionMany } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n draft?: boolean\n fallbackLocale?: string\n limit?: number\n locale?: string\n page?: number\n pagination?: boolean\n select?: boolean\n sort?: string\n trash?: boolean\n where: Where\n },\n context: Context,\n info: GraphQLResolveInfo,\n) => Promise<PaginatedDocs<any>>\n\nexport function findVersionsResolver(collection: Collection): Resolver {\n return async function resolver(_, args, context, info) {\n const req = (context.req = isolateObjectProperty(context.req, [\n 'locale',\n 'fallbackLocale',\n 'transactionID',\n ]))\n const select = (context.select = args.select ? buildSelectForCollectionMany(info, context) : undefined)\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const draft: boolean =\n (args.draft ?? req.query?.draft === 'false')\n ? false\n : req.query?.draft === 'true'\n ? true\n : undefined\n if (typeof draft === 'boolean') {\n req.query.draft = String(draft)\n }\n\n const { sort } = args\n\n const options = {\n collection,\n depth: 0,\n limit: args.limit,\n page: args.page,\n pagination: args.pagination,\n req,\n select,\n sort: sort && typeof sort === 'string' ? sort.split(',') : undefined,\n trash: args.trash,\n where: args.where,\n }\n\n const result = await findVersionsOperation(options)\n return result\n }\n}\n"],"names":["findVersionsOperation","isolateObjectProperty","buildSelectForCollectionMany","findVersionsResolver","collection","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","draft","String","sort","options","depth","limit","page","pagination","split","trash","where","result"],"mappings":"AAGA,SAASA,qBAAqB,EAAEC,qBAAqB,QAAQ,UAAS;AAItE,SAASC,4BAA4B,QAAQ,4BAA2B;AAoBxE,OAAO,SAASC,qBAAqBC,UAAsB;IACzD,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAOF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAC5D;YACA;YACA;SACD;QACD,MAAMC,SAAUH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,6BAA6BO,MAAMD,WAAWI;QAE7FF,IAAIG,MAAM,GAAGN,KAAKM,MAAM,IAAIH,IAAIG,MAAM;QACtCH,IAAII,cAAc,GAAGP,KAAKO,cAAc,IAAIJ,IAAII,cAAc;QAC9DJ,IAAIK,KAAK,GAAGL,IAAIK,KAAK,IAAI,CAAC;QAE1B,MAAMC,QACJ,AAACT,KAAKS,KAAK,IAAIN,IAAIK,KAAK,EAAEC,UAAU,UAChC,QACAN,IAAIK,KAAK,EAAEC,UAAU,SACnB,OACAJ;QACR,IAAI,OAAOI,UAAU,WAAW;YAC9BN,IAAIK,KAAK,CAACC,KAAK,GAAGC,OAAOD;QAC3B;QAEA,MAAM,EAAEE,IAAI,EAAE,GAAGX;QAEjB,MAAMY,UAAU;YACdf;YACAgB,OAAO;YACPC,OAAOd,KAAKc,KAAK;YACjBC,MAAMf,KAAKe,IAAI;YACfC,YAAYhB,KAAKgB,UAAU;YAC3Bb;YACAC;YACAO,MAAMA,QAAQ,OAAOA,SAAS,WAAWA,KAAKM,KAAK,CAAC,OAAOZ;YAC3Da,OAAOlB,KAAKkB,KAAK;YACjBC,OAAOnB,KAAKmB,KAAK;QACnB;QAEA,MAAMC,SAAS,MAAM3B,sBAAsBmB;QAC3C,OAAOQ;IACT;AACF"}
|
|
@@ -7,7 +7,7 @@ export function findOne(globalConfig) {
|
|
|
7
7
|
'fallbackLocale',
|
|
8
8
|
'transactionID'
|
|
9
9
|
]);
|
|
10
|
-
const select = context.select = args.select ? buildSelectForCollection(info) : undefined;
|
|
10
|
+
const select = context.select = args.select ? buildSelectForCollection(info, context) : undefined;
|
|
11
11
|
const { slug } = globalConfig;
|
|
12
12
|
req.locale = args.locale || req.locale;
|
|
13
13
|
req.fallbackLocale = args.fallbackLocale || req.fallbackLocale;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/resolvers/globals/findOne.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Document, SanitizedGlobalConfig } from 'payload'\n\nimport { findOneOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollection } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n draft?: boolean\n fallbackLocale?: string\n id: number | string\n locale?: string\n select?: boolean\n },\n context: Context,\n info: GraphQLResolveInfo\n) => Promise<Document>\n\nexport function findOne(globalConfig: SanitizedGlobalConfig): Resolver {\n return async function resolver(_, args, context, info) {\n const req = context.req = isolateObjectProperty(context.req, ['locale', 'fallbackLocale', 'transactionID'])\n const select = context.select = args.select ? buildSelectForCollection(info) : undefined\n const { slug } = globalConfig\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const options = {\n slug,\n depth: 0,\n draft: args.draft,\n globalConfig,\n req,\n select,\n }\n\n const result = await findOneOperation(options)\n return result\n }\n}\n"],"names":["findOneOperation","isolateObjectProperty","buildSelectForCollection","findOne","globalConfig","resolver","_","args","context","info","req","select","undefined","slug","locale","fallbackLocale","query","options","depth","draft","result"],"mappings":"AAGA,SAASA,gBAAgB,EAAEC,qBAAqB,QAAQ,UAAS;AAIjE,SAASC,wBAAwB,QAAQ,4BAA2B;AAepE,OAAO,SAASC,QAAQC,YAAmC;IACzD,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAMF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAAC;YAAU;YAAkB;SAAgB;QAC1G,MAAMC,SAASH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,yBAAyBO,
|
|
1
|
+
{"version":3,"sources":["../../../src/resolvers/globals/findOne.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Document, SanitizedGlobalConfig } from 'payload'\n\nimport { findOneOperation, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollection } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n draft?: boolean\n fallbackLocale?: string\n id: number | string\n locale?: string\n select?: boolean\n },\n context: Context,\n info: GraphQLResolveInfo\n) => Promise<Document>\n\nexport function findOne(globalConfig: SanitizedGlobalConfig): Resolver {\n return async function resolver(_, args, context, info) {\n const req = context.req = isolateObjectProperty(context.req, ['locale', 'fallbackLocale', 'transactionID'])\n const select = context.select = args.select ? buildSelectForCollection(info, context) : undefined\n const { slug } = globalConfig\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const options = {\n slug,\n depth: 0,\n draft: args.draft,\n globalConfig,\n req,\n select,\n }\n\n const result = await findOneOperation(options)\n return result\n }\n}\n"],"names":["findOneOperation","isolateObjectProperty","buildSelectForCollection","findOne","globalConfig","resolver","_","args","context","info","req","select","undefined","slug","locale","fallbackLocale","query","options","depth","draft","result"],"mappings":"AAGA,SAASA,gBAAgB,EAAEC,qBAAqB,QAAQ,UAAS;AAIjE,SAASC,wBAAwB,QAAQ,4BAA2B;AAepE,OAAO,SAASC,QAAQC,YAAmC;IACzD,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAMF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAAC;YAAU;YAAkB;SAAgB;QAC1G,MAAMC,SAASH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,yBAAyBO,MAAMD,WAAWI;QACxF,MAAM,EAAEC,IAAI,EAAE,GAAGT;QAEjBM,IAAII,MAAM,GAAGP,KAAKO,MAAM,IAAIJ,IAAII,MAAM;QACtCJ,IAAIK,cAAc,GAAGR,KAAKQ,cAAc,IAAIL,IAAIK,cAAc;QAC9DL,IAAIM,KAAK,GAAGN,IAAIM,KAAK,IAAI,CAAC;QAE1B,MAAMC,UAAU;YACdJ;YACAK,OAAO;YACPC,OAAOZ,KAAKY,KAAK;YACjBf;YACAM;YACAC;QACF;QAEA,MAAMS,SAAS,MAAMpB,iBAAiBiB;QACtC,OAAOG;IACT;AACF"}
|
|
@@ -7,7 +7,7 @@ export function findVersionByID(globalConfig) {
|
|
|
7
7
|
'fallbackLocale',
|
|
8
8
|
'transactionID'
|
|
9
9
|
]);
|
|
10
|
-
const select = context.select = args.select ? buildSelectForCollection(info) : undefined;
|
|
10
|
+
const select = context.select = args.select ? buildSelectForCollection(info, context) : undefined;
|
|
11
11
|
req.locale = args.locale || req.locale;
|
|
12
12
|
req.fallbackLocale = args.fallbackLocale || req.fallbackLocale;
|
|
13
13
|
req.query = req.query || {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/resolvers/globals/findVersionByID.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Document, SanitizedGlobalConfig } from 'payload'\n\nimport { findVersionByIDOperationGlobal, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollection } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n draft?: boolean\n fallbackLocale?: string\n id: number | string\n locale?: string\n select?: boolean\n },\n context: Context,\n info: GraphQLResolveInfo\n) => Promise<Document>\n\nexport function findVersionByID(globalConfig: SanitizedGlobalConfig): Resolver {\n return async function resolver(_, args, context, info) {\n const req = context.req = isolateObjectProperty(context.req, ['locale', 'fallbackLocale', 'transactionID'])\n const select = context.select = args.select ? buildSelectForCollection(info) : undefined\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const options = {\n id: args.id,\n depth: 0,\n draft: args.draft,\n globalConfig,\n req,\n select,\n }\n\n const result = await findVersionByIDOperationGlobal(options)\n return result\n }\n}\n"],"names":["findVersionByIDOperationGlobal","isolateObjectProperty","buildSelectForCollection","findVersionByID","globalConfig","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","options","id","depth","draft","result"],"mappings":"AAGA,SAASA,8BAA8B,EAAEC,qBAAqB,QAAQ,UAAS;AAI/E,SAASC,wBAAwB,QAAQ,4BAA2B;AAepE,OAAO,SAASC,gBAAgBC,YAAmC;IACjE,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAMF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAAC;YAAU;YAAkB;SAAgB;QAC1G,MAAMC,SAASH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,yBAAyBO,
|
|
1
|
+
{"version":3,"sources":["../../../src/resolvers/globals/findVersionByID.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Document, SanitizedGlobalConfig } from 'payload'\n\nimport { findVersionByIDOperationGlobal, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollection } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n draft?: boolean\n fallbackLocale?: string\n id: number | string\n locale?: string\n select?: boolean\n },\n context: Context,\n info: GraphQLResolveInfo\n) => Promise<Document>\n\nexport function findVersionByID(globalConfig: SanitizedGlobalConfig): Resolver {\n return async function resolver(_, args, context, info) {\n const req = context.req = isolateObjectProperty(context.req, ['locale', 'fallbackLocale', 'transactionID'])\n const select = context.select = args.select ? buildSelectForCollection(info, context) : undefined\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const options = {\n id: args.id,\n depth: 0,\n draft: args.draft,\n globalConfig,\n req,\n select,\n }\n\n const result = await findVersionByIDOperationGlobal(options)\n return result\n }\n}\n"],"names":["findVersionByIDOperationGlobal","isolateObjectProperty","buildSelectForCollection","findVersionByID","globalConfig","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","options","id","depth","draft","result"],"mappings":"AAGA,SAASA,8BAA8B,EAAEC,qBAAqB,QAAQ,UAAS;AAI/E,SAASC,wBAAwB,QAAQ,4BAA2B;AAepE,OAAO,SAASC,gBAAgBC,YAAmC;IACjE,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAMF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAAC;YAAU;YAAkB;SAAgB;QAC1G,MAAMC,SAASH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,yBAAyBO,MAAMD,WAAWI;QAExFF,IAAIG,MAAM,GAAGN,KAAKM,MAAM,IAAIH,IAAIG,MAAM;QACtCH,IAAII,cAAc,GAAGP,KAAKO,cAAc,IAAIJ,IAAII,cAAc;QAC9DJ,IAAIK,KAAK,GAAGL,IAAIK,KAAK,IAAI,CAAC;QAE1B,MAAMC,UAAU;YACdC,IAAIV,KAAKU,EAAE;YACXC,OAAO;YACPC,OAAOZ,KAAKY,KAAK;YACjBf;YACAM;YACAC;QACF;QAEA,MAAMS,SAAS,MAAMpB,+BAA+BgB;QACpD,OAAOI;IACT;AACF"}
|
|
@@ -7,7 +7,7 @@ export function findVersions(globalConfig) {
|
|
|
7
7
|
'fallbackLocale',
|
|
8
8
|
'transactionID'
|
|
9
9
|
]);
|
|
10
|
-
const select = context.select = args.select ? buildSelectForCollectionMany(info) : undefined;
|
|
10
|
+
const select = context.select = args.select ? buildSelectForCollectionMany(info, context) : undefined;
|
|
11
11
|
req.locale = args.locale || req.locale;
|
|
12
12
|
req.fallbackLocale = args.fallbackLocale || req.fallbackLocale;
|
|
13
13
|
req.query = req.query || {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/resolvers/globals/findVersions.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Document, SanitizedGlobalConfig, Where } from 'payload'\n\nimport { findVersionsOperationGlobal, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollectionMany } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n fallbackLocale?: string\n limit?: number\n locale?: string\n page?: number\n pagination?: boolean\n select?: boolean\n sort?: string\n where: Where\n },\n context: Context,\n info: GraphQLResolveInfo,\n) => Promise<Document>\n\nexport function findVersions(globalConfig: SanitizedGlobalConfig): Resolver {\n return async function resolver(_, args, context, info) {\n const req = (context.req = isolateObjectProperty(context.req, [\n 'locale',\n 'fallbackLocale',\n 'transactionID',\n ]))\n const select = (context.select = args.select ? buildSelectForCollectionMany(info) : undefined)\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const { sort } = args\n\n const options = {\n depth: 0,\n globalConfig,\n limit: args.limit,\n page: args.page,\n pagination: args.pagination,\n req,\n select,\n sort: sort && typeof sort === 'string' ? sort.split(',') : undefined,\n where: args.where,\n }\n\n const result = await findVersionsOperationGlobal(options)\n return result\n }\n}\n"],"names":["findVersionsOperationGlobal","isolateObjectProperty","buildSelectForCollectionMany","findVersions","globalConfig","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","sort","options","depth","limit","page","pagination","split","where","result"],"mappings":"AAGA,SAASA,2BAA2B,EAAEC,qBAAqB,QAAQ,UAAS;AAI5E,SAASC,4BAA4B,QAAQ,4BAA2B;AAkBxE,OAAO,SAASC,aAAaC,YAAmC;IAC9D,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAOF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAC5D;YACA;YACA;SACD;QACD,MAAMC,SAAUH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,6BAA6BO,
|
|
1
|
+
{"version":3,"sources":["../../../src/resolvers/globals/findVersions.ts"],"sourcesContent":["import type { GraphQLResolveInfo } from 'graphql'\nimport type { Document, SanitizedGlobalConfig, Where } from 'payload'\n\nimport { findVersionsOperationGlobal, isolateObjectProperty } from 'payload'\n\nimport type { Context } from '../types.js'\n\nimport { buildSelectForCollectionMany } from '../../utilities/select.js'\n\nexport type Resolver = (\n _: unknown,\n args: {\n fallbackLocale?: string\n limit?: number\n locale?: string\n page?: number\n pagination?: boolean\n select?: boolean\n sort?: string\n where: Where\n },\n context: Context,\n info: GraphQLResolveInfo,\n) => Promise<Document>\n\nexport function findVersions(globalConfig: SanitizedGlobalConfig): Resolver {\n return async function resolver(_, args, context, info) {\n const req = (context.req = isolateObjectProperty(context.req, [\n 'locale',\n 'fallbackLocale',\n 'transactionID',\n ]))\n const select = (context.select = args.select ? buildSelectForCollectionMany(info, context) : undefined)\n\n req.locale = args.locale || req.locale\n req.fallbackLocale = args.fallbackLocale || req.fallbackLocale\n req.query = req.query || {}\n\n const { sort } = args\n\n const options = {\n depth: 0,\n globalConfig,\n limit: args.limit,\n page: args.page,\n pagination: args.pagination,\n req,\n select,\n sort: sort && typeof sort === 'string' ? sort.split(',') : undefined,\n where: args.where,\n }\n\n const result = await findVersionsOperationGlobal(options)\n return result\n }\n}\n"],"names":["findVersionsOperationGlobal","isolateObjectProperty","buildSelectForCollectionMany","findVersions","globalConfig","resolver","_","args","context","info","req","select","undefined","locale","fallbackLocale","query","sort","options","depth","limit","page","pagination","split","where","result"],"mappings":"AAGA,SAASA,2BAA2B,EAAEC,qBAAqB,QAAQ,UAAS;AAI5E,SAASC,4BAA4B,QAAQ,4BAA2B;AAkBxE,OAAO,SAASC,aAAaC,YAAmC;IAC9D,OAAO,eAAeC,SAASC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAEC,IAAI;QACnD,MAAMC,MAAOF,QAAQE,GAAG,GAAGT,sBAAsBO,QAAQE,GAAG,EAAE;YAC5D;YACA;YACA;SACD;QACD,MAAMC,SAAUH,QAAQG,MAAM,GAAGJ,KAAKI,MAAM,GAAGT,6BAA6BO,MAAMD,WAAWI;QAE7FF,IAAIG,MAAM,GAAGN,KAAKM,MAAM,IAAIH,IAAIG,MAAM;QACtCH,IAAII,cAAc,GAAGP,KAAKO,cAAc,IAAIJ,IAAII,cAAc;QAC9DJ,IAAIK,KAAK,GAAGL,IAAIK,KAAK,IAAI,CAAC;QAE1B,MAAM,EAAEC,IAAI,EAAE,GAAGT;QAEjB,MAAMU,UAAU;YACdC,OAAO;YACPd;YACAe,OAAOZ,KAAKY,KAAK;YACjBC,MAAMb,KAAKa,IAAI;YACfC,YAAYd,KAAKc,UAAU;YAC3BX;YACAC;YACAK,MAAMA,QAAQ,OAAOA,SAAS,WAAWA,KAAKM,KAAK,CAAC,OAAOV;YAC3DW,OAAOhB,KAAKgB,KAAK;QACnB;QAEA,MAAMC,SAAS,MAAMxB,4BAA4BiB;QACjD,OAAOO;IACT;AACF"}
|
|
@@ -298,7 +298,7 @@ export const fieldToSchemaMap = {
|
|
|
298
298
|
const { count = false, limit, page, sort, where } = args;
|
|
299
299
|
const { req } = context;
|
|
300
300
|
const draft = Boolean(args.draft ?? context.req.query?.draft);
|
|
301
|
-
const select = resolveSelect(info, context.select);
|
|
301
|
+
const select = resolveSelect(info, context.select, context);
|
|
302
302
|
const targetField = field.targetField;
|
|
303
303
|
const fullWhere = combineQueries(where, Array.isArray(targetField.relationTo) ? {
|
|
304
304
|
[field.on]: {
|
|
@@ -493,7 +493,7 @@ export const fieldToSchemaMap = {
|
|
|
493
493
|
const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
|
|
494
494
|
let relatedCollectionSlug = field.relationTo;
|
|
495
495
|
const draft = Boolean(args.draft ?? context.req.query?.draft);
|
|
496
|
-
const select = resolveSelect(info, context.select);
|
|
496
|
+
const select = resolveSelect(info, context.select, context);
|
|
497
497
|
if (hasManyValues) {
|
|
498
498
|
const results = [];
|
|
499
499
|
const resultPromises = [];
|
|
@@ -838,7 +838,7 @@ export const fieldToSchemaMap = {
|
|
|
838
838
|
const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
|
|
839
839
|
let relatedCollectionSlug = field.relationTo;
|
|
840
840
|
const draft = Boolean(args.draft ?? context.req.query?.draft);
|
|
841
|
-
const select = resolveSelect(info, context.select);
|
|
841
|
+
const select = resolveSelect(info, context.select, context);
|
|
842
842
|
if (hasManyValues) {
|
|
843
843
|
const results = [];
|
|
844
844
|
const resultPromises = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/fieldToSchemaMap.ts"],"sourcesContent":["import type { GraphQLArgumentConfig, GraphQLFieldConfig, GraphQLOutputType } from 'graphql'\nimport type {\n ArrayField,\n BlocksField,\n CheckboxField,\n CodeField,\n CollapsibleField,\n DateField,\n EmailField,\n Field,\n FlattenedJoinField,\n GraphQLInfo,\n GroupField,\n JoinField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RichTextAdapter,\n RichTextField,\n RowField,\n SanitizedConfig,\n SelectField,\n SlugField,\n TabsField,\n TextareaField,\n TextField,\n UploadField,\n} from 'payload'\n\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLString,\n GraphQLUnionType,\n} from 'graphql'\nimport { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars'\nimport { combineQueries, createDataloaderCacheKey, MissingEditorProp, toWords } from 'payload'\nimport { fieldAffectsData, tabHasName } from 'payload/shared'\n\nimport type { Context } from '../resolvers/types.js'\n\nimport { GraphQLJSON } from '../packages/graphql-type-json/index.js'\nimport { combineParentName } from '../utilities/combineParentName.js'\nimport { formatName } from '../utilities/formatName.js'\nimport { formatOptions } from '../utilities/formatOptions.js'\nimport { resolveSelect } from '../utilities/select.js'\nimport { buildObjectType, type ObjectTypeConfig } from './buildObjectType.js'\nimport { isFieldNullable } from './isFieldNullable.js'\nimport { withNullableType } from './withNullableType.js'\n\nfunction formattedNameResolver({\n field,\n ...rest\n}: { field: Field } & GraphQLFieldConfig<any, Context, any>): GraphQLFieldConfig<\n any,\n Context,\n any\n> {\n if ('name' in field) {\n if (formatName(field.name) !== field.name) {\n return {\n ...rest,\n extensions: { ...rest.extensions, field },\n resolve: (parent) => parent[field.name],\n }\n }\n }\n return rest\n}\n\ntype SharedArgs = {\n collectionSlug?: string\n config: SanitizedConfig\n forceNullable?: boolean\n graphqlResult: GraphQLInfo\n newlyCreatedBlockType: GraphQLObjectType\n objectTypeConfig: ObjectTypeConfig\n parentIsLocalized?: boolean\n parentName: string\n}\n\ntype GenericFieldToSchemaMap = (args: { field: Field } & SharedArgs) => ObjectTypeConfig\n\ntype FieldToSchemaMap = {\n array: (args: { field: ArrayField } & SharedArgs) => ObjectTypeConfig\n blocks: (args: { field: BlocksField } & SharedArgs) => ObjectTypeConfig\n checkbox: (args: { field: CheckboxField } & SharedArgs) => ObjectTypeConfig\n code: (args: { field: CodeField } & SharedArgs) => ObjectTypeConfig\n collapsible: (args: { field: CollapsibleField } & SharedArgs) => ObjectTypeConfig\n date: (args: { field: DateField } & SharedArgs) => ObjectTypeConfig\n email: (args: { field: EmailField } & SharedArgs) => ObjectTypeConfig\n group: (args: { field: GroupField } & SharedArgs) => ObjectTypeConfig\n join: (args: { field: JoinField } & SharedArgs) => ObjectTypeConfig\n json: (args: { field: JSONField } & SharedArgs) => ObjectTypeConfig\n number: (args: { field: NumberField } & SharedArgs) => ObjectTypeConfig\n point: (args: { field: PointField } & SharedArgs) => ObjectTypeConfig\n radio: (args: { field: RadioField } & SharedArgs) => ObjectTypeConfig\n relationship: (args: { field: RelationshipField } & SharedArgs) => ObjectTypeConfig\n richText: (args: { field: RichTextField } & SharedArgs) => ObjectTypeConfig\n row: (args: { field: RowField } & SharedArgs) => ObjectTypeConfig\n select: (args: { field: SelectField } & SharedArgs) => ObjectTypeConfig\n slug: (args: { field: SlugField } & SharedArgs) => ObjectTypeConfig\n tabs: (args: { field: TabsField } & SharedArgs) => ObjectTypeConfig\n text: (args: { field: TextField } & SharedArgs) => ObjectTypeConfig\n textarea: (args: { field: TextareaField } & SharedArgs) => ObjectTypeConfig\n upload: (args: { field: UploadField } & SharedArgs) => ObjectTypeConfig\n}\n\nexport const fieldToSchemaMap: FieldToSchemaMap = {\n slug: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLString,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n array: ({\n config,\n field,\n forceNullable,\n graphqlResult,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n const interfaceName =\n field?.interfaceName || combineParentName(parentName, toWords(field.name, true))\n\n if (!graphqlResult.types.arrayTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: field.fields,\n forceNullable: isFieldNullable({ field, forceNullable, parentIsLocalized }),\n graphqlResult,\n parentIsLocalized: field.localized || parentIsLocalized,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.arrayTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.arrayTypes[interfaceName]) {\n return objectTypeConfig\n }\n\n const arrayType = new GraphQLList(\n new GraphQLNonNull(graphqlResult.types.arrayTypes[interfaceName]),\n )\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({ type: arrayType, field, parentIsLocalized }) as GraphQLOutputType,\n field,\n }),\n }\n },\n blocks: ({\n config,\n field,\n forceNullable,\n graphqlResult,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n const blockTypes: GraphQLObjectType<any, any>[] = field.blocks.reduce((acc, _block) => {\n const blockSlug = typeof _block === 'string' ? _block : _block.slug\n if (!graphqlResult.types.blockTypes[blockSlug]) {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config.blocks.find((b) => b.slug === _block) : _block\n\n const interfaceName =\n block?.interfaceName || block?.graphQL?.singularName || toWords(block.slug, true)\n\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: [\n ...block.fields,\n {\n name: 'blockType',\n type: 'text',\n },\n ],\n forceNullable,\n graphqlResult,\n parentIsLocalized,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n // Store block slug in extensions for use in select building\n objectType.extensions = {\n ...objectType.extensions,\n blockSlug: block.slug,\n }\n graphqlResult.types.blockTypes[block.slug] = objectType\n }\n }\n\n if (graphqlResult.types.blockTypes[blockSlug]) {\n acc.push(graphqlResult.types.blockTypes[blockSlug])\n }\n\n return acc\n }, [])\n\n if (blockTypes.length === 0) {\n return objectTypeConfig\n }\n\n const fullName = combineParentName(parentName, toWords(field.name, true))\n\n const type = new GraphQLList(\n new GraphQLNonNull(\n new GraphQLUnionType({\n name: fullName,\n resolveType: (data) => graphqlResult.types.blockTypes[data.blockType].name,\n types: blockTypes,\n }),\n ),\n ) as GraphQLOutputType\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({ type, field, parentIsLocalized }) as GraphQLOutputType,\n field,\n }),\n }\n },\n checkbox: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLBoolean,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n code: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLString,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n collapsible: ({\n collectionSlug,\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) =>\n field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField) => {\n const addSubField: GenericFieldToSchemaMap = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField({\n collectionSlug,\n config,\n field: subField,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig: objectTypeConfigWithCollapsibleFields,\n parentIsLocalized,\n parentName,\n })\n }\n return objectTypeConfigWithCollapsibleFields\n }, objectTypeConfig),\n date: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: DateTimeResolver,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n email: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: EmailAddressResolver,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n group: ({\n collectionSlug,\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n if (fieldAffectsData(field)) {\n const interfaceName =\n field?.interfaceName || combineParentName(parentName, toWords(field.name, true))\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: field.fields,\n forceNullable: isFieldNullable({ field, forceNullable, parentIsLocalized }),\n graphqlResult,\n parentIsLocalized: field.localized || parentIsLocalized,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.groupTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n return objectTypeConfig\n }\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: {\n type: graphqlResult.types.groupTypes[interfaceName],\n extensions: { field },\n resolve: (parent, args, context) => {\n return {\n ...parent[field.name],\n _id: parent._id ?? parent.id,\n }\n },\n } satisfies GraphQLFieldConfig<any, Context, any>,\n }\n } else {\n return field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField) => {\n const addSubField: GenericFieldToSchemaMap = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField({\n collectionSlug,\n config,\n field: subField,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig: objectTypeConfigWithCollapsibleFields,\n parentIsLocalized,\n parentName,\n })\n }\n return objectTypeConfigWithCollapsibleFields\n }, objectTypeConfig)\n }\n },\n join: ({ collectionSlug, field, graphqlResult, objectTypeConfig, parentName }) => {\n const joinName = combineParentName(parentName, toWords(field.name, true))\n\n const joinType: GraphQLFieldConfig<any, Context, any> = {\n type: new GraphQLObjectType({\n name: joinName,\n fields: {\n docs: {\n type: new GraphQLNonNull(\n Array.isArray(field.collection)\n ? GraphQLJSON\n : new GraphQLList(\n new GraphQLNonNull(graphqlResult.collections[field.collection].graphQL.type),\n ),\n ),\n },\n hasNextPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n totalDocs: { type: GraphQLInt },\n },\n }),\n args: {\n count: { type: GraphQLBoolean },\n limit: {\n type: GraphQLInt,\n },\n page: {\n type: GraphQLInt,\n },\n sort: {\n type: GraphQLString,\n },\n where: {\n type: Array.isArray(field.collection)\n ? GraphQLJSON\n : graphqlResult.collections[field.collection].graphQL.whereInputType,\n },\n },\n extensions: {\n complexity: typeof field?.graphQL?.complexity === 'number' ? field.graphQL.complexity : 10,\n field,\n },\n async resolve(parent, args, context, info) {\n const { collection } = field\n const { count = false, limit, page, sort, where } = args\n const { req } = context\n\n const draft = Boolean(args.draft ?? context.req.query?.draft)\n const select = resolveSelect(info, context.select)\n\n const targetField = (field as FlattenedJoinField).targetField\n\n const fullWhere = combineQueries(\n where,\n Array.isArray(targetField.relationTo)\n ? {\n [field.on]: {\n equals: {\n relationTo: collectionSlug,\n value: parent._id ?? parent.id,\n },\n },\n }\n : {\n [field.on]: { equals: parent._id ?? parent.id },\n },\n )\n\n if (Array.isArray(collection)) {\n throw new Error('GraphQL with array of join.field.collection is not implemented')\n }\n\n if (count && limit === 0) {\n return await req.payload.count({\n collection,\n overrideAccess: false,\n req,\n where: fullWhere,\n })\n }\n\n const { docs, totalDocs } = await req.payload.find({\n collection,\n depth: 0,\n draft,\n fallbackLocale: req.fallbackLocale,\n // Fetch one extra document to determine if there are more documents beyond the requested limit (used for hasNextPage calculation).\n limit: typeof limit === 'number' && limit > 0 ? limit + 1 : 0,\n locale: req.locale,\n overrideAccess: false,\n page,\n pagination: count ? true : false,\n req,\n select,\n sort,\n where: fullWhere,\n })\n\n let shouldSlice = false\n\n if (typeof limit === 'number' && limit !== 0 && limit < docs.length) {\n shouldSlice = true\n }\n\n return {\n docs: shouldSlice ? docs.slice(0, -1) : docs,\n hasNextPage: limit === 0 ? false : limit < docs.length,\n ...(count ? { totalDocs } : {}),\n }\n },\n }\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: joinType,\n }\n },\n json: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLJSON,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n number: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => {\n const type = field?.name === 'id' ? GraphQLInt : GraphQLFloat\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: field?.hasMany === true ? new GraphQLList(new GraphQLNonNull(type)) : type,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }\n },\n point: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: new GraphQLList(new GraphQLNonNull(GraphQLFloat)),\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n radio: ({ field, forceNullable, objectTypeConfig, parentIsLocalized, parentName }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: new GraphQLEnumType({\n name: combineParentName(parentName, field.name),\n values: formatOptions(field),\n }),\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n relationship: ({\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n const { relationTo } = field\n const isRelatedToManyCollections = Array.isArray(relationTo)\n const hasManyValues = field.hasMany\n const relationshipName = combineParentName(parentName, toWords(field.name, true))\n\n let type: GraphQLOutputType\n let relationToType = null\n\n const graphQLCollections = config.collections.filter(\n (collectionConfig) => collectionConfig.graphQL !== false,\n )\n\n if (Array.isArray(relationTo)) {\n relationToType = new GraphQLEnumType({\n name: `${relationshipName}_RelationTo`,\n values: relationTo\n .filter((relation) =>\n graphQLCollections.some((collection) => collection.slug === relation),\n )\n .reduce(\n (relations, relation) => ({\n ...relations,\n [formatName(relation)]: {\n value: relation,\n },\n }),\n {},\n ),\n })\n\n // Only pass collections that are GraphQL enabled\n const types = relationTo\n .filter((relation) => graphQLCollections.some((collection) => collection.slug === relation))\n .map((relation) => graphqlResult.collections[relation]?.graphQL.type)\n\n type = new GraphQLObjectType({\n name: `${relationshipName}_Relationship`,\n fields: {\n relationTo: {\n type: relationToType,\n },\n value: {\n type: new GraphQLUnionType({\n name: relationshipName,\n resolveType(data) {\n return graphqlResult.collections[data.collection].graphQL.type.name\n },\n types,\n }) as GraphQLOutputType,\n },\n },\n }) as GraphQLOutputType\n } else {\n ;({ type } = graphqlResult.collections[relationTo].graphQL)\n }\n\n // If the relationshipType is undefined at this point,\n // it can be assumed that this blockType can have a relationship\n // to itself. Therefore, we set the relationshipType equal to the blockType\n // that is currently being created.\n\n type = type || newlyCreatedBlockType\n\n const relationshipArgs: {\n draft: GraphQLArgumentConfig\n fallbackLocale: GraphQLArgumentConfig\n limit: GraphQLArgumentConfig\n locale: GraphQLArgumentConfig\n page: GraphQLArgumentConfig\n where: GraphQLArgumentConfig\n } = {} as any\n\n const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [relationTo])\n .filter((relation) => graphQLCollections.some((collection) => collection.slug === relation))\n .some((relation) => graphqlResult.collections[relation].config.versions?.drafts)\n\n if (relationsUseDrafts) {\n relationshipArgs.draft = {\n type: GraphQLBoolean,\n }\n }\n\n if (config.localization) {\n relationshipArgs.locale = {\n type: graphqlResult.types.localeInputType,\n }\n\n relationshipArgs.fallbackLocale = {\n type: graphqlResult.types.fallbackLocaleInputType,\n }\n }\n\n const relationship: GraphQLFieldConfig<any, Context, any> = {\n type: withNullableType({\n type: hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type,\n field,\n // can be null if the related doc is deleted even if the field is required, unless hasMany\n forceNullable: !field.hasMany,\n parentIsLocalized,\n }) as GraphQLOutputType,\n args: relationshipArgs,\n extensions: {\n complexity: typeof field?.graphQL?.complexity === 'number' ? field.graphQL.complexity : 10,\n field,\n },\n async resolve(parent, args, context, info) {\n const value = parent[field.name]\n const locale = args.locale || context.req.locale\n const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale\n let relatedCollectionSlug = field.relationTo\n const draft = Boolean(args.draft ?? context.req.query?.draft)\n const select = resolveSelect(info, context.select)\n\n if (hasManyValues) {\n const results = []\n const resultPromises = []\n\n const createPopulationPromise = async (relatedDoc, i) => {\n let id = relatedDoc\n let collectionSlug = field.relationTo\n const isValidGraphQLCollection = isRelatedToManyCollections\n ? graphQLCollections.some((collection) => collectionSlug.includes(collection.slug))\n : graphQLCollections.some((collection) => collectionSlug === collection.slug)\n\n if (isValidGraphQLCollection) {\n if (isRelatedToManyCollections) {\n collectionSlug = relatedDoc.relationTo\n id = relatedDoc.value\n }\n\n const result = await context.req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: collectionSlug as string,\n currentDepth: 0,\n depth: 0,\n docID: id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: false,\n select,\n showHiddenFields: false,\n transactionID: context.req.transactionID,\n }),\n )\n\n if (result) {\n if (isRelatedToManyCollections) {\n results.push({\n relationTo: collectionSlug,\n value: {\n ...result,\n collection: collectionSlug,\n },\n })\n } else {\n results.push(result)\n }\n }\n }\n }\n\n if (value) {\n value.forEach((relatedDoc, i) => {\n resultPromises.push(createPopulationPromise(relatedDoc, i))\n })\n }\n\n await Promise.all(resultPromises)\n return results\n }\n\n let id = value\n if (isRelatedToManyCollections && value) {\n id = value.value\n relatedCollectionSlug = value.relationTo\n }\n\n if (id) {\n if (graphQLCollections.some((collection) => collection.slug === relatedCollectionSlug)) {\n const relatedDocument = await context.req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: relatedCollectionSlug as string,\n currentDepth: 0,\n depth: 0,\n docID: id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: false,\n select,\n showHiddenFields: false,\n transactionID: context.req.transactionID,\n }),\n )\n\n if (relatedDocument) {\n if (isRelatedToManyCollections) {\n return {\n relationTo: relatedCollectionSlug,\n value: {\n ...relatedDocument,\n collection: relatedCollectionSlug,\n },\n }\n }\n\n return relatedDocument\n }\n }\n\n return null\n }\n\n return null\n },\n }\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: relationship,\n }\n },\n richText: ({ config, field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: {\n type: withNullableType({\n type: GraphQLJSON,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n args: {\n depth: {\n type: GraphQLInt,\n },\n },\n extensions: {\n field,\n },\n async resolve(parent, args, context: Context) {\n let depth = config.defaultDepth\n if (typeof args.depth !== 'undefined') {\n depth = args.depth\n }\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof field?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = field?.editor\n\n // RichText fields have their own depth argument in GraphQL.\n // This is why the populationPromise (which populates richtext fields like uploads and relationships)\n // is run here again, with the provided depth.\n // In the graphql find.ts resolver, the depth is then hard-coded to 0.\n // Effectively, this means that the populationPromise for GraphQL is only run here, and not in the find.ts resolver / normal population promise.\n if (editor?.graphQLPopulationPromises) {\n const fieldPromises = []\n const populationPromises = []\n const populateDepth =\n field?.maxDepth !== undefined && field?.maxDepth < depth ? field?.maxDepth : depth\n\n editor?.graphQLPopulationPromises({\n context,\n depth: populateDepth,\n draft: args.draft,\n field,\n fieldPromises,\n findMany: false,\n flattenLocales: false,\n overrideAccess: false,\n parentIsLocalized,\n populationPromises,\n req: context.req,\n showHiddenFields: false,\n siblingDoc: parent,\n })\n await Promise.all(fieldPromises)\n await Promise.all(populationPromises)\n }\n\n return parent[field.name]\n },\n },\n }),\n row: ({ field, objectTypeConfig, ...rest }) =>\n field.fields.reduce((objectTypeConfigWithRowFields, subField) => {\n const addSubField: GenericFieldToSchemaMap = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField({\n field: subField,\n objectTypeConfig: objectTypeConfigWithRowFields,\n ...rest,\n })\n }\n return objectTypeConfigWithRowFields\n }, objectTypeConfig),\n select: ({ field, forceNullable, objectTypeConfig, parentIsLocalized, parentName }) => {\n const fullName = combineParentName(parentName, field.name)\n\n let type: GraphQLOutputType = new GraphQLEnumType({\n name: fullName,\n values: formatOptions(field),\n })\n\n type = field.hasMany ? new GraphQLList(new GraphQLNonNull(type)) : type\n type = withNullableType({ type, field, forceNullable, parentIsLocalized }) as GraphQLOutputType\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({ type, field }),\n }\n },\n tabs: ({\n collectionSlug,\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) =>\n field.tabs.reduce((tabSchema, tab) => {\n if (tabHasName(tab)) {\n const interfaceName =\n tab?.interfaceName || combineParentName(parentName, toWords(tab.name, true))\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n collectionSlug,\n config,\n fields: tab.fields,\n forceNullable,\n graphqlResult,\n parentIsLocalized: tab.localized || parentIsLocalized,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.groupTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n return tabSchema\n }\n\n return {\n ...tabSchema,\n [tab.name]: {\n type: graphqlResult.types.groupTypes[interfaceName],\n resolve(parent, args, context: Context) {\n return {\n ...parent[tab.name],\n _id: parent._id ?? parent.id,\n }\n },\n },\n }\n }\n\n return {\n ...tabSchema,\n ...tab.fields.reduce((subFieldSchema, subField) => {\n const addSubField: GenericFieldToSchemaMap = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField({\n collectionSlug,\n config,\n field: subField,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig: subFieldSchema,\n parentIsLocalized,\n parentName,\n })\n }\n return subFieldSchema\n }, tabSchema),\n }\n }, objectTypeConfig),\n text: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type:\n field.hasMany === true\n ? new GraphQLList(new GraphQLNonNull(GraphQLString))\n : GraphQLString,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n textarea: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLString,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n upload: ({\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n const { relationTo } = field\n const isRelatedToManyCollections = Array.isArray(relationTo)\n const hasManyValues = field.hasMany\n const relationshipName = combineParentName(parentName, toWords(field.name, true))\n\n let type\n let relationToType = null\n\n const graphQLCollections = config.collections.filter(\n (collectionConfig) => collectionConfig.graphQL !== false,\n )\n\n if (Array.isArray(relationTo)) {\n relationToType = new GraphQLEnumType({\n name: `${relationshipName}_RelationTo`,\n values: relationTo.reduce(\n (relations, relation) => ({\n ...relations,\n [formatName(relation)]: {\n value: relation,\n },\n }),\n {},\n ),\n })\n\n const types = relationTo.map((relation) => graphqlResult.collections[relation].graphQL.type)\n\n type = new GraphQLObjectType({\n name: `${relationshipName}_Relationship`,\n fields: {\n relationTo: {\n type: relationToType,\n },\n value: {\n type: new GraphQLUnionType({\n name: relationshipName,\n resolveType(data) {\n return graphqlResult.collections[data.collection].graphQL.type.name\n },\n types,\n }),\n },\n },\n })\n } else {\n ;({ type } = graphqlResult.collections[relationTo].graphQL)\n }\n\n // If the relationshipType is undefined at this point,\n // it can be assumed that this blockType can have a relationship\n // to itself. Therefore, we set the relationshipType equal to the blockType\n // that is currently being created.\n\n type = type || newlyCreatedBlockType\n\n const relationshipArgs: {\n draft?: GraphQLArgumentConfig\n fallbackLocale?: GraphQLArgumentConfig\n limit?: GraphQLArgumentConfig\n locale?: GraphQLArgumentConfig\n page?: GraphQLArgumentConfig\n where?: GraphQLArgumentConfig\n } = {} as any\n\n const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [relationTo]).some(\n (relation) => graphqlResult.collections[relation].config.versions?.drafts,\n )\n\n if (relationsUseDrafts) {\n relationshipArgs.draft = {\n type: GraphQLBoolean,\n }\n }\n\n if (config.localization) {\n relationshipArgs.locale = {\n type: graphqlResult.types.localeInputType,\n }\n\n relationshipArgs.fallbackLocale = {\n type: graphqlResult.types.fallbackLocaleInputType,\n }\n }\n\n const relationship: GraphQLFieldConfig<any, Context, any> = {\n type: withNullableType({\n type: hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type,\n field,\n // can be null if the related doc is deleted even if the field is required, unless hasMany\n forceNullable: !field.hasMany,\n parentIsLocalized,\n }) as GraphQLOutputType,\n args: relationshipArgs,\n extensions: {\n complexity: typeof field?.graphQL?.complexity === 'number' ? field.graphQL.complexity : 10,\n field,\n },\n async resolve(parent, args, context, info) {\n const value = parent[field.name]\n const locale = args.locale || context.req.locale\n const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale\n let relatedCollectionSlug = field.relationTo\n const draft = Boolean(args.draft ?? context.req.query?.draft)\n const select = resolveSelect(info, context.select)\n\n if (hasManyValues) {\n const results = []\n const resultPromises = []\n\n const createPopulationPromise = async (relatedDoc, i) => {\n let id = relatedDoc\n let collectionSlug = field.relationTo\n const isValidGraphQLCollection = isRelatedToManyCollections\n ? graphQLCollections.some((collection) => collectionSlug.includes(collection.slug))\n : graphQLCollections.some((collection) => collectionSlug === collection.slug)\n\n if (isValidGraphQLCollection) {\n if (isRelatedToManyCollections) {\n collectionSlug = relatedDoc.relationTo\n id = relatedDoc.value\n }\n\n const result = await context.req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: collectionSlug as string,\n currentDepth: 0,\n depth: 0,\n docID: id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: false,\n select,\n showHiddenFields: false,\n transactionID: context.req.transactionID,\n }),\n )\n\n if (result) {\n if (isRelatedToManyCollections) {\n results.push({\n relationTo: collectionSlug,\n value: {\n ...result,\n collection: collectionSlug,\n },\n })\n } else {\n results.push(result)\n }\n }\n }\n }\n\n if (value) {\n value.forEach((relatedDoc, i) => {\n resultPromises.push(createPopulationPromise(relatedDoc, i))\n })\n }\n\n await Promise.all(resultPromises)\n return results\n }\n\n let id = value\n if (isRelatedToManyCollections && value) {\n id = value.value\n relatedCollectionSlug = value.relationTo\n }\n\n if (id) {\n if (graphQLCollections.some((collection) => collection.slug === relatedCollectionSlug)) {\n const relatedDocument = await context.req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: relatedCollectionSlug as string,\n currentDepth: 0,\n depth: 0,\n docID: id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: false,\n select,\n showHiddenFields: false,\n transactionID: context.req.transactionID,\n }),\n )\n\n if (relatedDocument) {\n if (isRelatedToManyCollections) {\n return {\n relationTo: relatedCollectionSlug,\n value: {\n ...relatedDocument,\n collection: relatedCollectionSlug,\n },\n }\n }\n\n return relatedDocument\n }\n }\n\n return null\n }\n\n return null\n },\n }\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: relationship,\n }\n },\n}\n"],"names":["GraphQLBoolean","GraphQLEnumType","GraphQLFloat","GraphQLInt","GraphQLList","GraphQLNonNull","GraphQLObjectType","GraphQLString","GraphQLUnionType","DateTimeResolver","EmailAddressResolver","combineQueries","createDataloaderCacheKey","MissingEditorProp","toWords","fieldAffectsData","tabHasName","GraphQLJSON","combineParentName","formatName","formatOptions","resolveSelect","buildObjectType","isFieldNullable","withNullableType","formattedNameResolver","field","rest","name","extensions","resolve","parent","fieldToSchemaMap","slug","forceNullable","objectTypeConfig","parentIsLocalized","type","array","config","graphqlResult","parentName","interfaceName","types","arrayTypes","objectType","fields","localized","Object","keys","getFields","length","arrayType","blocks","blockTypes","reduce","acc","_block","blockSlug","block","find","b","graphQL","singularName","push","fullName","resolveType","data","blockType","checkbox","code","collapsible","collectionSlug","newlyCreatedBlockType","objectTypeConfigWithCollapsibleFields","subField","addSubField","date","email","group","groupTypes","args","context","_id","id","join","joinName","joinType","docs","Array","isArray","collection","collections","hasNextPage","totalDocs","count","limit","page","sort","where","whereInputType","complexity","info","req","draft","Boolean","query","select","targetField","fullWhere","relationTo","on","equals","value","Error","payload","overrideAccess","depth","fallbackLocale","locale","pagination","shouldSlice","slice","json","number","hasMany","point","radio","values","relationship","isRelatedToManyCollections","hasManyValues","relationshipName","relationToType","graphQLCollections","filter","collectionConfig","relation","some","relations","map","relationshipArgs","relationsUseDrafts","versions","drafts","localization","localeInputType","fallbackLocaleInputType","relatedCollectionSlug","results","resultPromises","createPopulationPromise","relatedDoc","i","isValidGraphQLCollection","includes","result","payloadDataLoader","load","currentDepth","docID","showHiddenFields","transactionID","forEach","Promise","all","relatedDocument","richText","defaultDepth","editor","graphQLPopulationPromises","fieldPromises","populationPromises","populateDepth","maxDepth","undefined","findMany","flattenLocales","siblingDoc","row","objectTypeConfigWithRowFields","tabs","tabSchema","tab","subFieldSchema","text","textarea","upload"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/schema/fieldToSchemaMap.ts"],"sourcesContent":["import type { GraphQLArgumentConfig, GraphQLFieldConfig, GraphQLOutputType } from 'graphql'\nimport type {\n ArrayField,\n BlocksField,\n CheckboxField,\n CodeField,\n CollapsibleField,\n DateField,\n EmailField,\n Field,\n FlattenedJoinField,\n GraphQLInfo,\n GroupField,\n JoinField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RichTextAdapter,\n RichTextField,\n RowField,\n SanitizedConfig,\n SelectField,\n SlugField,\n TabsField,\n TextareaField,\n TextField,\n UploadField,\n} from 'payload'\n\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLString,\n GraphQLUnionType,\n} from 'graphql'\nimport { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars'\nimport { combineQueries, createDataloaderCacheKey, MissingEditorProp, toWords } from 'payload'\nimport { fieldAffectsData, tabHasName } from 'payload/shared'\n\nimport type { Context } from '../resolvers/types.js'\n\nimport { GraphQLJSON } from '../packages/graphql-type-json/index.js'\nimport { combineParentName } from '../utilities/combineParentName.js'\nimport { formatName } from '../utilities/formatName.js'\nimport { formatOptions } from '../utilities/formatOptions.js'\nimport { resolveSelect } from '../utilities/select.js'\nimport { buildObjectType, type ObjectTypeConfig } from './buildObjectType.js'\nimport { isFieldNullable } from './isFieldNullable.js'\nimport { withNullableType } from './withNullableType.js'\n\nfunction formattedNameResolver({\n field,\n ...rest\n}: { field: Field } & GraphQLFieldConfig<any, Context, any>): GraphQLFieldConfig<\n any,\n Context,\n any\n> {\n if ('name' in field) {\n if (formatName(field.name) !== field.name) {\n return {\n ...rest,\n extensions: { ...rest.extensions, field },\n resolve: (parent) => parent[field.name],\n }\n }\n }\n return rest\n}\n\ntype SharedArgs = {\n collectionSlug?: string\n config: SanitizedConfig\n forceNullable?: boolean\n graphqlResult: GraphQLInfo\n newlyCreatedBlockType: GraphQLObjectType\n objectTypeConfig: ObjectTypeConfig\n parentIsLocalized?: boolean\n parentName: string\n}\n\ntype GenericFieldToSchemaMap = (args: { field: Field } & SharedArgs) => ObjectTypeConfig\n\ntype FieldToSchemaMap = {\n array: (args: { field: ArrayField } & SharedArgs) => ObjectTypeConfig\n blocks: (args: { field: BlocksField } & SharedArgs) => ObjectTypeConfig\n checkbox: (args: { field: CheckboxField } & SharedArgs) => ObjectTypeConfig\n code: (args: { field: CodeField } & SharedArgs) => ObjectTypeConfig\n collapsible: (args: { field: CollapsibleField } & SharedArgs) => ObjectTypeConfig\n date: (args: { field: DateField } & SharedArgs) => ObjectTypeConfig\n email: (args: { field: EmailField } & SharedArgs) => ObjectTypeConfig\n group: (args: { field: GroupField } & SharedArgs) => ObjectTypeConfig\n join: (args: { field: JoinField } & SharedArgs) => ObjectTypeConfig\n json: (args: { field: JSONField } & SharedArgs) => ObjectTypeConfig\n number: (args: { field: NumberField } & SharedArgs) => ObjectTypeConfig\n point: (args: { field: PointField } & SharedArgs) => ObjectTypeConfig\n radio: (args: { field: RadioField } & SharedArgs) => ObjectTypeConfig\n relationship: (args: { field: RelationshipField } & SharedArgs) => ObjectTypeConfig\n richText: (args: { field: RichTextField } & SharedArgs) => ObjectTypeConfig\n row: (args: { field: RowField } & SharedArgs) => ObjectTypeConfig\n select: (args: { field: SelectField } & SharedArgs) => ObjectTypeConfig\n slug: (args: { field: SlugField } & SharedArgs) => ObjectTypeConfig\n tabs: (args: { field: TabsField } & SharedArgs) => ObjectTypeConfig\n text: (args: { field: TextField } & SharedArgs) => ObjectTypeConfig\n textarea: (args: { field: TextareaField } & SharedArgs) => ObjectTypeConfig\n upload: (args: { field: UploadField } & SharedArgs) => ObjectTypeConfig\n}\n\nexport const fieldToSchemaMap: FieldToSchemaMap = {\n slug: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLString,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n array: ({\n config,\n field,\n forceNullable,\n graphqlResult,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n const interfaceName =\n field?.interfaceName || combineParentName(parentName, toWords(field.name, true))\n\n if (!graphqlResult.types.arrayTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: field.fields,\n forceNullable: isFieldNullable({ field, forceNullable, parentIsLocalized }),\n graphqlResult,\n parentIsLocalized: field.localized || parentIsLocalized,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.arrayTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.arrayTypes[interfaceName]) {\n return objectTypeConfig\n }\n\n const arrayType = new GraphQLList(\n new GraphQLNonNull(graphqlResult.types.arrayTypes[interfaceName]),\n )\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({ type: arrayType, field, parentIsLocalized }) as GraphQLOutputType,\n field,\n }),\n }\n },\n blocks: ({\n config,\n field,\n forceNullable,\n graphqlResult,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n const blockTypes: GraphQLObjectType<any, any>[] = field.blocks.reduce((acc, _block) => {\n const blockSlug = typeof _block === 'string' ? _block : _block.slug\n if (!graphqlResult.types.blockTypes[blockSlug]) {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config.blocks.find((b) => b.slug === _block) : _block\n\n const interfaceName =\n block?.interfaceName || block?.graphQL?.singularName || toWords(block.slug, true)\n\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: [\n ...block.fields,\n {\n name: 'blockType',\n type: 'text',\n },\n ],\n forceNullable,\n graphqlResult,\n parentIsLocalized,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n // Store block slug in extensions for use in select building\n objectType.extensions = {\n ...objectType.extensions,\n blockSlug: block.slug,\n }\n graphqlResult.types.blockTypes[block.slug] = objectType\n }\n }\n\n if (graphqlResult.types.blockTypes[blockSlug]) {\n acc.push(graphqlResult.types.blockTypes[blockSlug])\n }\n\n return acc\n }, [])\n\n if (blockTypes.length === 0) {\n return objectTypeConfig\n }\n\n const fullName = combineParentName(parentName, toWords(field.name, true))\n\n const type = new GraphQLList(\n new GraphQLNonNull(\n new GraphQLUnionType({\n name: fullName,\n resolveType: (data) => graphqlResult.types.blockTypes[data.blockType].name,\n types: blockTypes,\n }),\n ),\n ) as GraphQLOutputType\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({ type, field, parentIsLocalized }) as GraphQLOutputType,\n field,\n }),\n }\n },\n checkbox: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLBoolean,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n code: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLString,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n collapsible: ({\n collectionSlug,\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) =>\n field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField) => {\n const addSubField: GenericFieldToSchemaMap = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField({\n collectionSlug,\n config,\n field: subField,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig: objectTypeConfigWithCollapsibleFields,\n parentIsLocalized,\n parentName,\n })\n }\n return objectTypeConfigWithCollapsibleFields\n }, objectTypeConfig),\n date: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: DateTimeResolver,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n email: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: EmailAddressResolver,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n group: ({\n collectionSlug,\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n if (fieldAffectsData(field)) {\n const interfaceName =\n field?.interfaceName || combineParentName(parentName, toWords(field.name, true))\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: field.fields,\n forceNullable: isFieldNullable({ field, forceNullable, parentIsLocalized }),\n graphqlResult,\n parentIsLocalized: field.localized || parentIsLocalized,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.groupTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n return objectTypeConfig\n }\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: {\n type: graphqlResult.types.groupTypes[interfaceName],\n extensions: { field },\n resolve: (parent, args, context) => {\n return {\n ...parent[field.name],\n _id: parent._id ?? parent.id,\n }\n },\n } satisfies GraphQLFieldConfig<any, Context, any>,\n }\n } else {\n return field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField) => {\n const addSubField: GenericFieldToSchemaMap = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField({\n collectionSlug,\n config,\n field: subField,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig: objectTypeConfigWithCollapsibleFields,\n parentIsLocalized,\n parentName,\n })\n }\n return objectTypeConfigWithCollapsibleFields\n }, objectTypeConfig)\n }\n },\n join: ({ collectionSlug, field, graphqlResult, objectTypeConfig, parentName }) => {\n const joinName = combineParentName(parentName, toWords(field.name, true))\n\n const joinType: GraphQLFieldConfig<any, Context, any> = {\n type: new GraphQLObjectType({\n name: joinName,\n fields: {\n docs: {\n type: new GraphQLNonNull(\n Array.isArray(field.collection)\n ? GraphQLJSON\n : new GraphQLList(\n new GraphQLNonNull(graphqlResult.collections[field.collection].graphQL.type),\n ),\n ),\n },\n hasNextPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n totalDocs: { type: GraphQLInt },\n },\n }),\n args: {\n count: { type: GraphQLBoolean },\n limit: {\n type: GraphQLInt,\n },\n page: {\n type: GraphQLInt,\n },\n sort: {\n type: GraphQLString,\n },\n where: {\n type: Array.isArray(field.collection)\n ? GraphQLJSON\n : graphqlResult.collections[field.collection].graphQL.whereInputType,\n },\n },\n extensions: {\n complexity: typeof field?.graphQL?.complexity === 'number' ? field.graphQL.complexity : 10,\n field,\n },\n async resolve(parent, args, context, info) {\n const { collection } = field\n const { count = false, limit, page, sort, where } = args\n const { req } = context\n\n const draft = Boolean(args.draft ?? context.req.query?.draft)\n const select = resolveSelect(info, context.select, context)\n\n const targetField = (field as FlattenedJoinField).targetField\n\n const fullWhere = combineQueries(\n where,\n Array.isArray(targetField.relationTo)\n ? {\n [field.on]: {\n equals: {\n relationTo: collectionSlug,\n value: parent._id ?? parent.id,\n },\n },\n }\n : {\n [field.on]: { equals: parent._id ?? parent.id },\n },\n )\n\n if (Array.isArray(collection)) {\n throw new Error('GraphQL with array of join.field.collection is not implemented')\n }\n\n if (count && limit === 0) {\n return await req.payload.count({\n collection,\n overrideAccess: false,\n req,\n where: fullWhere,\n })\n }\n\n const { docs, totalDocs } = await req.payload.find({\n collection,\n depth: 0,\n draft,\n fallbackLocale: req.fallbackLocale,\n // Fetch one extra document to determine if there are more documents beyond the requested limit (used for hasNextPage calculation).\n limit: typeof limit === 'number' && limit > 0 ? limit + 1 : 0,\n locale: req.locale,\n overrideAccess: false,\n page,\n pagination: count ? true : false,\n req,\n select,\n sort,\n where: fullWhere,\n })\n\n let shouldSlice = false\n\n if (typeof limit === 'number' && limit !== 0 && limit < docs.length) {\n shouldSlice = true\n }\n\n return {\n docs: shouldSlice ? docs.slice(0, -1) : docs,\n hasNextPage: limit === 0 ? false : limit < docs.length,\n ...(count ? { totalDocs } : {}),\n }\n },\n }\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: joinType,\n }\n },\n json: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLJSON,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n number: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => {\n const type = field?.name === 'id' ? GraphQLInt : GraphQLFloat\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: field?.hasMany === true ? new GraphQLList(new GraphQLNonNull(type)) : type,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }\n },\n point: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: new GraphQLList(new GraphQLNonNull(GraphQLFloat)),\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n radio: ({ field, forceNullable, objectTypeConfig, parentIsLocalized, parentName }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: new GraphQLEnumType({\n name: combineParentName(parentName, field.name),\n values: formatOptions(field),\n }),\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n relationship: ({\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n const { relationTo } = field\n const isRelatedToManyCollections = Array.isArray(relationTo)\n const hasManyValues = field.hasMany\n const relationshipName = combineParentName(parentName, toWords(field.name, true))\n\n let type: GraphQLOutputType\n let relationToType = null\n\n const graphQLCollections = config.collections.filter(\n (collectionConfig) => collectionConfig.graphQL !== false,\n )\n\n if (Array.isArray(relationTo)) {\n relationToType = new GraphQLEnumType({\n name: `${relationshipName}_RelationTo`,\n values: relationTo\n .filter((relation) =>\n graphQLCollections.some((collection) => collection.slug === relation),\n )\n .reduce(\n (relations, relation) => ({\n ...relations,\n [formatName(relation)]: {\n value: relation,\n },\n }),\n {},\n ),\n })\n\n // Only pass collections that are GraphQL enabled\n const types = relationTo\n .filter((relation) => graphQLCollections.some((collection) => collection.slug === relation))\n .map((relation) => graphqlResult.collections[relation]?.graphQL.type)\n\n type = new GraphQLObjectType({\n name: `${relationshipName}_Relationship`,\n fields: {\n relationTo: {\n type: relationToType,\n },\n value: {\n type: new GraphQLUnionType({\n name: relationshipName,\n resolveType(data) {\n return graphqlResult.collections[data.collection].graphQL.type.name\n },\n types,\n }) as GraphQLOutputType,\n },\n },\n }) as GraphQLOutputType\n } else {\n ;({ type } = graphqlResult.collections[relationTo].graphQL)\n }\n\n // If the relationshipType is undefined at this point,\n // it can be assumed that this blockType can have a relationship\n // to itself. Therefore, we set the relationshipType equal to the blockType\n // that is currently being created.\n\n type = type || newlyCreatedBlockType\n\n const relationshipArgs: {\n draft: GraphQLArgumentConfig\n fallbackLocale: GraphQLArgumentConfig\n limit: GraphQLArgumentConfig\n locale: GraphQLArgumentConfig\n page: GraphQLArgumentConfig\n where: GraphQLArgumentConfig\n } = {} as any\n\n const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [relationTo])\n .filter((relation) => graphQLCollections.some((collection) => collection.slug === relation))\n .some((relation) => graphqlResult.collections[relation].config.versions?.drafts)\n\n if (relationsUseDrafts) {\n relationshipArgs.draft = {\n type: GraphQLBoolean,\n }\n }\n\n if (config.localization) {\n relationshipArgs.locale = {\n type: graphqlResult.types.localeInputType,\n }\n\n relationshipArgs.fallbackLocale = {\n type: graphqlResult.types.fallbackLocaleInputType,\n }\n }\n\n const relationship: GraphQLFieldConfig<any, Context, any> = {\n type: withNullableType({\n type: hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type,\n field,\n // can be null if the related doc is deleted even if the field is required, unless hasMany\n forceNullable: !field.hasMany,\n parentIsLocalized,\n }) as GraphQLOutputType,\n args: relationshipArgs,\n extensions: {\n complexity: typeof field?.graphQL?.complexity === 'number' ? field.graphQL.complexity : 10,\n field,\n },\n async resolve(parent, args, context, info) {\n const value = parent[field.name]\n const locale = args.locale || context.req.locale\n const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale\n let relatedCollectionSlug = field.relationTo\n const draft = Boolean(args.draft ?? context.req.query?.draft)\n const select = resolveSelect(info, context.select, context)\n\n if (hasManyValues) {\n const results = []\n const resultPromises = []\n\n const createPopulationPromise = async (relatedDoc, i) => {\n let id = relatedDoc\n let collectionSlug = field.relationTo\n const isValidGraphQLCollection = isRelatedToManyCollections\n ? graphQLCollections.some((collection) => collectionSlug.includes(collection.slug))\n : graphQLCollections.some((collection) => collectionSlug === collection.slug)\n\n if (isValidGraphQLCollection) {\n if (isRelatedToManyCollections) {\n collectionSlug = relatedDoc.relationTo\n id = relatedDoc.value\n }\n\n const result = await context.req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: collectionSlug as string,\n currentDepth: 0,\n depth: 0,\n docID: id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: false,\n select,\n showHiddenFields: false,\n transactionID: context.req.transactionID,\n }),\n )\n\n if (result) {\n if (isRelatedToManyCollections) {\n results.push({\n relationTo: collectionSlug,\n value: {\n ...result,\n collection: collectionSlug,\n },\n })\n } else {\n results.push(result)\n }\n }\n }\n }\n\n if (value) {\n value.forEach((relatedDoc, i) => {\n resultPromises.push(createPopulationPromise(relatedDoc, i))\n })\n }\n\n await Promise.all(resultPromises)\n return results\n }\n\n let id = value\n if (isRelatedToManyCollections && value) {\n id = value.value\n relatedCollectionSlug = value.relationTo\n }\n\n if (id) {\n if (graphQLCollections.some((collection) => collection.slug === relatedCollectionSlug)) {\n const relatedDocument = await context.req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: relatedCollectionSlug as string,\n currentDepth: 0,\n depth: 0,\n docID: id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: false,\n select,\n showHiddenFields: false,\n transactionID: context.req.transactionID,\n }),\n )\n\n if (relatedDocument) {\n if (isRelatedToManyCollections) {\n return {\n relationTo: relatedCollectionSlug,\n value: {\n ...relatedDocument,\n collection: relatedCollectionSlug,\n },\n }\n }\n\n return relatedDocument\n }\n }\n\n return null\n }\n\n return null\n },\n }\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: relationship,\n }\n },\n richText: ({ config, field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: {\n type: withNullableType({\n type: GraphQLJSON,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n args: {\n depth: {\n type: GraphQLInt,\n },\n },\n extensions: {\n field,\n },\n async resolve(parent, args, context: Context) {\n let depth = config.defaultDepth\n if (typeof args.depth !== 'undefined') {\n depth = args.depth\n }\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof field?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = field?.editor\n\n // RichText fields have their own depth argument in GraphQL.\n // This is why the populationPromise (which populates richtext fields like uploads and relationships)\n // is run here again, with the provided depth.\n // In the graphql find.ts resolver, the depth is then hard-coded to 0.\n // Effectively, this means that the populationPromise for GraphQL is only run here, and not in the find.ts resolver / normal population promise.\n if (editor?.graphQLPopulationPromises) {\n const fieldPromises = []\n const populationPromises = []\n const populateDepth =\n field?.maxDepth !== undefined && field?.maxDepth < depth ? field?.maxDepth : depth\n\n editor?.graphQLPopulationPromises({\n context,\n depth: populateDepth,\n draft: args.draft,\n field,\n fieldPromises,\n findMany: false,\n flattenLocales: false,\n overrideAccess: false,\n parentIsLocalized,\n populationPromises,\n req: context.req,\n showHiddenFields: false,\n siblingDoc: parent,\n })\n await Promise.all(fieldPromises)\n await Promise.all(populationPromises)\n }\n\n return parent[field.name]\n },\n },\n }),\n row: ({ field, objectTypeConfig, ...rest }) =>\n field.fields.reduce((objectTypeConfigWithRowFields, subField) => {\n const addSubField: GenericFieldToSchemaMap = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField({\n field: subField,\n objectTypeConfig: objectTypeConfigWithRowFields,\n ...rest,\n })\n }\n return objectTypeConfigWithRowFields\n }, objectTypeConfig),\n select: ({ field, forceNullable, objectTypeConfig, parentIsLocalized, parentName }) => {\n const fullName = combineParentName(parentName, field.name)\n\n let type: GraphQLOutputType = new GraphQLEnumType({\n name: fullName,\n values: formatOptions(field),\n })\n\n type = field.hasMany ? new GraphQLList(new GraphQLNonNull(type)) : type\n type = withNullableType({ type, field, forceNullable, parentIsLocalized }) as GraphQLOutputType\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({ type, field }),\n }\n },\n tabs: ({\n collectionSlug,\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) =>\n field.tabs.reduce((tabSchema, tab) => {\n if (tabHasName(tab)) {\n const interfaceName =\n tab?.interfaceName || combineParentName(parentName, toWords(tab.name, true))\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n collectionSlug,\n config,\n fields: tab.fields,\n forceNullable,\n graphqlResult,\n parentIsLocalized: tab.localized || parentIsLocalized,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.groupTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n return tabSchema\n }\n\n return {\n ...tabSchema,\n [tab.name]: {\n type: graphqlResult.types.groupTypes[interfaceName],\n resolve(parent, args, context: Context) {\n return {\n ...parent[tab.name],\n _id: parent._id ?? parent.id,\n }\n },\n },\n }\n }\n\n return {\n ...tabSchema,\n ...tab.fields.reduce((subFieldSchema, subField) => {\n const addSubField: GenericFieldToSchemaMap = fieldToSchemaMap[subField.type]\n if (addSubField) {\n return addSubField({\n collectionSlug,\n config,\n field: subField,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig: subFieldSchema,\n parentIsLocalized,\n parentName,\n })\n }\n return subFieldSchema\n }, tabSchema),\n }\n }, objectTypeConfig),\n text: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type:\n field.hasMany === true\n ? new GraphQLList(new GraphQLNonNull(GraphQLString))\n : GraphQLString,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n textarea: ({ field, forceNullable, objectTypeConfig, parentIsLocalized }) => ({\n ...objectTypeConfig,\n [formatName(field.name)]: formattedNameResolver({\n type: withNullableType({\n type: GraphQLString,\n field,\n forceNullable,\n parentIsLocalized,\n }) as GraphQLOutputType,\n field,\n }),\n }),\n upload: ({\n config,\n field,\n forceNullable,\n graphqlResult,\n newlyCreatedBlockType,\n objectTypeConfig,\n parentIsLocalized,\n parentName,\n }) => {\n const { relationTo } = field\n const isRelatedToManyCollections = Array.isArray(relationTo)\n const hasManyValues = field.hasMany\n const relationshipName = combineParentName(parentName, toWords(field.name, true))\n\n let type\n let relationToType = null\n\n const graphQLCollections = config.collections.filter(\n (collectionConfig) => collectionConfig.graphQL !== false,\n )\n\n if (Array.isArray(relationTo)) {\n relationToType = new GraphQLEnumType({\n name: `${relationshipName}_RelationTo`,\n values: relationTo.reduce(\n (relations, relation) => ({\n ...relations,\n [formatName(relation)]: {\n value: relation,\n },\n }),\n {},\n ),\n })\n\n const types = relationTo.map((relation) => graphqlResult.collections[relation].graphQL.type)\n\n type = new GraphQLObjectType({\n name: `${relationshipName}_Relationship`,\n fields: {\n relationTo: {\n type: relationToType,\n },\n value: {\n type: new GraphQLUnionType({\n name: relationshipName,\n resolveType(data) {\n return graphqlResult.collections[data.collection].graphQL.type.name\n },\n types,\n }),\n },\n },\n })\n } else {\n ;({ type } = graphqlResult.collections[relationTo].graphQL)\n }\n\n // If the relationshipType is undefined at this point,\n // it can be assumed that this blockType can have a relationship\n // to itself. Therefore, we set the relationshipType equal to the blockType\n // that is currently being created.\n\n type = type || newlyCreatedBlockType\n\n const relationshipArgs: {\n draft?: GraphQLArgumentConfig\n fallbackLocale?: GraphQLArgumentConfig\n limit?: GraphQLArgumentConfig\n locale?: GraphQLArgumentConfig\n page?: GraphQLArgumentConfig\n where?: GraphQLArgumentConfig\n } = {} as any\n\n const relationsUseDrafts = (Array.isArray(relationTo) ? relationTo : [relationTo]).some(\n (relation) => graphqlResult.collections[relation].config.versions?.drafts,\n )\n\n if (relationsUseDrafts) {\n relationshipArgs.draft = {\n type: GraphQLBoolean,\n }\n }\n\n if (config.localization) {\n relationshipArgs.locale = {\n type: graphqlResult.types.localeInputType,\n }\n\n relationshipArgs.fallbackLocale = {\n type: graphqlResult.types.fallbackLocaleInputType,\n }\n }\n\n const relationship: GraphQLFieldConfig<any, Context, any> = {\n type: withNullableType({\n type: hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type,\n field,\n // can be null if the related doc is deleted even if the field is required, unless hasMany\n forceNullable: !field.hasMany,\n parentIsLocalized,\n }) as GraphQLOutputType,\n args: relationshipArgs,\n extensions: {\n complexity: typeof field?.graphQL?.complexity === 'number' ? field.graphQL.complexity : 10,\n field,\n },\n async resolve(parent, args, context, info) {\n const value = parent[field.name]\n const locale = args.locale || context.req.locale\n const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale\n let relatedCollectionSlug = field.relationTo\n const draft = Boolean(args.draft ?? context.req.query?.draft)\n const select = resolveSelect(info, context.select, context)\n\n if (hasManyValues) {\n const results = []\n const resultPromises = []\n\n const createPopulationPromise = async (relatedDoc, i) => {\n let id = relatedDoc\n let collectionSlug = field.relationTo\n const isValidGraphQLCollection = isRelatedToManyCollections\n ? graphQLCollections.some((collection) => collectionSlug.includes(collection.slug))\n : graphQLCollections.some((collection) => collectionSlug === collection.slug)\n\n if (isValidGraphQLCollection) {\n if (isRelatedToManyCollections) {\n collectionSlug = relatedDoc.relationTo\n id = relatedDoc.value\n }\n\n const result = await context.req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: collectionSlug as string,\n currentDepth: 0,\n depth: 0,\n docID: id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: false,\n select,\n showHiddenFields: false,\n transactionID: context.req.transactionID,\n }),\n )\n\n if (result) {\n if (isRelatedToManyCollections) {\n results.push({\n relationTo: collectionSlug,\n value: {\n ...result,\n collection: collectionSlug,\n },\n })\n } else {\n results.push(result)\n }\n }\n }\n }\n\n if (value) {\n value.forEach((relatedDoc, i) => {\n resultPromises.push(createPopulationPromise(relatedDoc, i))\n })\n }\n\n await Promise.all(resultPromises)\n return results\n }\n\n let id = value\n if (isRelatedToManyCollections && value) {\n id = value.value\n relatedCollectionSlug = value.relationTo\n }\n\n if (id) {\n if (graphQLCollections.some((collection) => collection.slug === relatedCollectionSlug)) {\n const relatedDocument = await context.req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: relatedCollectionSlug as string,\n currentDepth: 0,\n depth: 0,\n docID: id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: false,\n select,\n showHiddenFields: false,\n transactionID: context.req.transactionID,\n }),\n )\n\n if (relatedDocument) {\n if (isRelatedToManyCollections) {\n return {\n relationTo: relatedCollectionSlug,\n value: {\n ...relatedDocument,\n collection: relatedCollectionSlug,\n },\n }\n }\n\n return relatedDocument\n }\n }\n\n return null\n }\n\n return null\n },\n }\n\n return {\n ...objectTypeConfig,\n [formatName(field.name)]: relationship,\n }\n },\n}\n"],"names":["GraphQLBoolean","GraphQLEnumType","GraphQLFloat","GraphQLInt","GraphQLList","GraphQLNonNull","GraphQLObjectType","GraphQLString","GraphQLUnionType","DateTimeResolver","EmailAddressResolver","combineQueries","createDataloaderCacheKey","MissingEditorProp","toWords","fieldAffectsData","tabHasName","GraphQLJSON","combineParentName","formatName","formatOptions","resolveSelect","buildObjectType","isFieldNullable","withNullableType","formattedNameResolver","field","rest","name","extensions","resolve","parent","fieldToSchemaMap","slug","forceNullable","objectTypeConfig","parentIsLocalized","type","array","config","graphqlResult","parentName","interfaceName","types","arrayTypes","objectType","fields","localized","Object","keys","getFields","length","arrayType","blocks","blockTypes","reduce","acc","_block","blockSlug","block","find","b","graphQL","singularName","push","fullName","resolveType","data","blockType","checkbox","code","collapsible","collectionSlug","newlyCreatedBlockType","objectTypeConfigWithCollapsibleFields","subField","addSubField","date","email","group","groupTypes","args","context","_id","id","join","joinName","joinType","docs","Array","isArray","collection","collections","hasNextPage","totalDocs","count","limit","page","sort","where","whereInputType","complexity","info","req","draft","Boolean","query","select","targetField","fullWhere","relationTo","on","equals","value","Error","payload","overrideAccess","depth","fallbackLocale","locale","pagination","shouldSlice","slice","json","number","hasMany","point","radio","values","relationship","isRelatedToManyCollections","hasManyValues","relationshipName","relationToType","graphQLCollections","filter","collectionConfig","relation","some","relations","map","relationshipArgs","relationsUseDrafts","versions","drafts","localization","localeInputType","fallbackLocaleInputType","relatedCollectionSlug","results","resultPromises","createPopulationPromise","relatedDoc","i","isValidGraphQLCollection","includes","result","payloadDataLoader","load","currentDepth","docID","showHiddenFields","transactionID","forEach","Promise","all","relatedDocument","richText","defaultDepth","editor","graphQLPopulationPromises","fieldPromises","populationPromises","populateDepth","maxDepth","undefined","findMany","flattenLocales","siblingDoc","row","objectTypeConfigWithRowFields","tabs","tabSchema","tab","subFieldSchema","text","textarea","upload"],"mappings":"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"}
|
|
@@ -11,6 +11,12 @@ import { GraphQLInputObjectType } from 'graphql';
|
|
|
11
11
|
* @param field the field for which their valid operators inside a "where" argument is being defined
|
|
12
12
|
* @param parentName the name of the parent field (if any)
|
|
13
13
|
* @returns all the operators (including their types) which can be used as a condition for a given field inside a where
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* A has-many relationship accepts a nested query with its relationship operators:
|
|
17
|
+
* ```graphql
|
|
18
|
+
* Burgers(where: { ingredients: { not_equals: { isHealthy: { equals: false } } } })
|
|
19
|
+
* ```
|
|
14
20
|
*/
|
|
15
21
|
export declare const withOperators: (field: FieldAffectingData, parentName: string) => GraphQLInputObjectType;
|
|
16
22
|
//# sourceMappingURL=withOperators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withOperators.d.ts","sourceRoot":"","sources":["../../src/schema/withOperators.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAwC,MAAM,SAAS,CAAA;AAEvF,OAAO,EAIL,sBAAsB,EAIvB,MAAM,SAAS,CAAA;AA8OhB
|
|
1
|
+
{"version":3,"file":"withOperators.d.ts","sourceRoot":"","sources":["../../src/schema/withOperators.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAwC,MAAM,SAAS,CAAA;AAEvF,OAAO,EAIL,sBAAsB,EAIvB,MAAM,SAAS,CAAA;AA8OhB;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,UACjB,kBAAkB,cACb,MAAM,KACjB,sBA4DF,CAAA"}
|
|
@@ -249,6 +249,12 @@ const gqlTypeCache = {};
|
|
|
249
249
|
* @param field the field for which their valid operators inside a "where" argument is being defined
|
|
250
250
|
* @param parentName the name of the parent field (if any)
|
|
251
251
|
* @returns all the operators (including their types) which can be used as a condition for a given field inside a where
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* A has-many relationship accepts a nested query with its relationship operators:
|
|
255
|
+
* ```graphql
|
|
256
|
+
* Burgers(where: { ingredients: { not_equals: { isHealthy: { equals: false } } } })
|
|
257
|
+
* ```
|
|
252
258
|
*/ export const withOperators = (field, parentName)=>{
|
|
253
259
|
if (!defaults?.[field.type]) {
|
|
254
260
|
throw new Error(`Error: ${field.type} has no defaults configured.`);
|
|
@@ -258,6 +264,15 @@ const gqlTypeCache = {};
|
|
|
258
264
|
const fieldOperators = [
|
|
259
265
|
...defaults[field.type].operators
|
|
260
266
|
];
|
|
267
|
+
// These operators accept a complete `where` query for the one collection targeted by the
|
|
268
|
+
// relationship. Polymorphic relationships are excluded because they can target multiple schemas.
|
|
269
|
+
if ((field.type === 'relationship' || field.type === 'upload') && field.hasMany && typeof field.relationTo === 'string') {
|
|
270
|
+
// `equals` and `not_equals` already exist for relationship fields.
|
|
271
|
+
fieldOperators.push({
|
|
272
|
+
name: 'contains',
|
|
273
|
+
type: GraphQLJSON
|
|
274
|
+
});
|
|
275
|
+
}
|
|
261
276
|
if (!('required' in field) || !field.required) {
|
|
262
277
|
fieldOperators.push({
|
|
263
278
|
name: 'exists',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/withOperators.ts"],"sourcesContent":["import type { GraphQLType } from 'graphql'\nimport type { FieldAffectingData, NumberField, RadioField, SelectField } from 'payload'\n\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLString,\n} from 'graphql'\nimport { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars'\nimport { optionIsObject } from 'payload/shared'\n\nimport { GraphQLJSON } from '../packages/graphql-type-json/index.js'\nimport { combineParentName } from '../utilities/combineParentName.js'\nimport { formatName } from '../utilities/formatName.js'\nimport { operators } from './operators.js'\n\ntype staticTypes =\n | 'checkbox'\n | 'code'\n | 'date'\n | 'email'\n | 'json'\n | 'number'\n | 'point'\n | 'relationship'\n | 'richText'\n | 'text'\n | 'textarea'\n | 'upload'\n\ntype dynamicTypes = 'radio' | 'select'\n\nconst GeoJSONObject = new GraphQLInputObjectType({\n name: 'GeoJSONObject',\n fields: {\n type: { type: GraphQLString },\n coordinates: {\n type: GraphQLJSON,\n },\n },\n})\n\ntype DefaultsType = {\n [key in dynamicTypes]: {\n operators: {\n name: string\n type: (field: FieldAffectingData, parentName: string) => GraphQLType\n }[]\n }\n} & {\n [key in staticTypes]: {\n operators: {\n name: string\n type: ((field: FieldAffectingData, parentName: string) => GraphQLType) | GraphQLType\n }[]\n }\n}\n\nconst defaults: DefaultsType = {\n checkbox: {\n operators: [\n ...operators.equality.map((operator) => ({\n name: operator,\n type: GraphQLBoolean,\n })),\n ],\n },\n code: {\n operators: [\n ...[...operators.equality, ...operators.partial].map((operator) => ({\n name: operator,\n type: GraphQLString,\n })),\n ],\n },\n date: {\n operators: [\n ...[...operators.equality, ...operators.comparison, 'like'].map((operator) => ({\n name: operator,\n type: DateTimeResolver,\n })),\n ],\n },\n email: {\n operators: [\n ...[...operators.equality, ...operators.partial, ...operators.contains].map((operator) => ({\n name: operator,\n type: EmailAddressResolver,\n })),\n ],\n },\n json: {\n operators: [\n ...[...operators.equality, ...operators.partial, ...operators.geojson].map((operator) => ({\n name: operator,\n type: GraphQLJSON,\n })),\n ],\n },\n number: {\n operators: [\n ...[...operators.equality, ...operators.comparison].map((operator) => ({\n name: operator,\n type: (field: NumberField): GraphQLType => {\n return field?.name === 'id' ? GraphQLInt : GraphQLFloat\n },\n })),\n ],\n },\n point: {\n operators: [\n ...[...operators.equality, ...operators.comparison, ...operators.geo].map((operator) => ({\n name: operator,\n type: new GraphQLList(GraphQLFloat),\n })),\n ...operators.geojson.map((operator) => ({\n name: operator,\n /**\n * @example:\n * within: {\n * type: \"Polygon\",\n * coordinates: [[\n * [0.0, 0.0],\n * [1.0, 1.0],\n * [1.0, 0.0],\n * [0.0, 0.0],\n * ]],\n * }\n * @example\n * intersects: {\n * type: \"Point\",\n * coordinates: [ 0.5, 0.5 ]\n * }\n */\n type: GeoJSONObject,\n })),\n ],\n },\n radio: {\n operators: [\n ...[...operators.equality, ...operators.partial].map((operator) => ({\n name: operator,\n type: (field: RadioField, parentName): GraphQLType =>\n new GraphQLEnumType({\n name: `${combineParentName(parentName, field.name)}_Input`,\n values: field.options.reduce((values, option) => {\n if (optionIsObject(option)) {\n return {\n ...values,\n [formatName(option.value)]: {\n value: option.value,\n },\n }\n }\n\n return {\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }\n }, {}),\n }),\n })),\n ],\n },\n relationship: {\n operators: [\n ...[...operators.equality, ...operators.contains].map((operator) => ({\n name: operator,\n type: GraphQLJSON,\n })),\n ],\n },\n richText: {\n operators: [\n ...[...operators.equality, ...operators.partial].map((operator) => ({\n name: operator,\n type: GraphQLJSON,\n })),\n ],\n },\n select: {\n operators: [\n ...[...operators.equality, ...operators.contains].map((operator) => ({\n name: operator,\n type: (field: SelectField, parentName): GraphQLType =>\n new GraphQLEnumType({\n name: `${combineParentName(parentName, field.name)}_Input`,\n values: field.options.reduce((values, option) => {\n if (optionIsObject(option)) {\n return {\n ...values,\n [formatName(option.value)]: {\n value: option.value,\n },\n }\n }\n\n return {\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }\n }, {}),\n }),\n })),\n ],\n },\n text: {\n operators: [\n ...[...operators.equality, ...operators.partial, ...operators.contains].map((operator) => ({\n name: operator,\n type: GraphQLString,\n })),\n ],\n },\n textarea: {\n operators: [\n ...[...operators.equality, ...operators.partial].map((operator) => ({\n name: operator,\n type: GraphQLString,\n })),\n ],\n },\n upload: {\n operators: [\n ...[...operators.equality, ...operators.contains].map((operator) => ({\n name: operator,\n type: GraphQLJSON,\n })),\n ],\n },\n // array: n/a\n // group: n/a\n // row: n/a\n // collapsible: n/a\n // tabs: n/a\n}\n\nconst listOperators = ['in', 'not_in', 'all']\n\nconst gqlTypeCache: Record<string, GraphQLType> = {}\n\n/**\n * In GraphQL, you can use \"where\" as an argument to filter a collection. Example:\n * { Posts(where: { title: { equals: \"Hello\" } }) { text } }\n * This function defines the operators for a field's condition in the \"where\" argument of the collection (it thus gets called for every field).\n * For example, in the example above, it would control that\n * - \"equals\" is a valid operator for the \"title\" field\n * - the accepted type of the \"equals\" argument has to be a string.\n *\n * @param field the field for which their valid operators inside a \"where\" argument is being defined\n * @param parentName the name of the parent field (if any)\n * @returns all the operators (including their types) which can be used as a condition for a given field inside a where\n */\nexport const withOperators = (\n field: FieldAffectingData,\n parentName: string,\n): GraphQLInputObjectType => {\n if (!defaults?.[field.type]) {\n throw new Error(`Error: ${field.type} has no defaults configured.`)\n }\n\n const name = `${combineParentName(parentName, field.name)}_operator`\n\n // Get the default operators for the field type which are hard-coded above\n const fieldOperators = [...defaults[field.type].operators]\n\n if (!('required' in field) || !field.required) {\n fieldOperators.push({\n name: 'exists',\n type: fieldOperators[0].type,\n })\n }\n\n return new GraphQLInputObjectType({\n name,\n fields: fieldOperators.reduce((objectTypeFields, operator) => {\n // Get the type of the operator. It can be either static, or dynamic (=> a function)\n let gqlType: GraphQLType =\n typeof operator.type === 'function' ? operator.type(field, parentName) : operator.type\n\n // GraphQL does not allow types with duplicate names, so we use this cache to avoid that.\n // Without this, select and radio fields would have the same name, and GraphQL would throw an error\n // This usually only happens if a custom type is returned from the operator.type function\n if (typeof operator.type === 'function' && 'name' in gqlType) {\n if (gqlTypeCache[gqlType.name]) {\n gqlType = gqlTypeCache[gqlType.name]\n } else {\n gqlTypeCache[gqlType.name] = gqlType\n }\n }\n\n if (listOperators.includes(operator.name)) {\n gqlType = new GraphQLList(gqlType)\n } else if (operator.name === 'exists') {\n gqlType = GraphQLBoolean\n }\n\n return {\n ...objectTypeFields,\n [operator.name]: {\n type: gqlType,\n },\n }\n }, {}),\n })\n}\n"],"names":["GraphQLBoolean","GraphQLEnumType","GraphQLFloat","GraphQLInputObjectType","GraphQLInt","GraphQLList","GraphQLString","DateTimeResolver","EmailAddressResolver","optionIsObject","GraphQLJSON","combineParentName","formatName","operators","GeoJSONObject","name","fields","type","coordinates","defaults","checkbox","equality","map","operator","code","partial","date","comparison","email","contains","json","geojson","number","field","point","geo","radio","parentName","values","options","reduce","option","value","relationship","richText","select","text","textarea","upload","listOperators","gqlTypeCache","withOperators","Error","fieldOperators","required","push","objectTypeFields","gqlType","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/schema/withOperators.ts"],"sourcesContent":["import type { GraphQLType } from 'graphql'\nimport type { FieldAffectingData, NumberField, RadioField, SelectField } from 'payload'\n\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLString,\n} from 'graphql'\nimport { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars'\nimport { optionIsObject } from 'payload/shared'\n\nimport { GraphQLJSON } from '../packages/graphql-type-json/index.js'\nimport { combineParentName } from '../utilities/combineParentName.js'\nimport { formatName } from '../utilities/formatName.js'\nimport { operators } from './operators.js'\n\ntype staticTypes =\n | 'checkbox'\n | 'code'\n | 'date'\n | 'email'\n | 'json'\n | 'number'\n | 'point'\n | 'relationship'\n | 'richText'\n | 'text'\n | 'textarea'\n | 'upload'\n\ntype dynamicTypes = 'radio' | 'select'\n\nconst GeoJSONObject = new GraphQLInputObjectType({\n name: 'GeoJSONObject',\n fields: {\n type: { type: GraphQLString },\n coordinates: {\n type: GraphQLJSON,\n },\n },\n})\n\ntype DefaultsType = {\n [key in dynamicTypes]: {\n operators: {\n name: string\n type: (field: FieldAffectingData, parentName: string) => GraphQLType\n }[]\n }\n} & {\n [key in staticTypes]: {\n operators: {\n name: string\n type: ((field: FieldAffectingData, parentName: string) => GraphQLType) | GraphQLType\n }[]\n }\n}\n\nconst defaults: DefaultsType = {\n checkbox: {\n operators: [\n ...operators.equality.map((operator) => ({\n name: operator,\n type: GraphQLBoolean,\n })),\n ],\n },\n code: {\n operators: [\n ...[...operators.equality, ...operators.partial].map((operator) => ({\n name: operator,\n type: GraphQLString,\n })),\n ],\n },\n date: {\n operators: [\n ...[...operators.equality, ...operators.comparison, 'like'].map((operator) => ({\n name: operator,\n type: DateTimeResolver,\n })),\n ],\n },\n email: {\n operators: [\n ...[...operators.equality, ...operators.partial, ...operators.contains].map((operator) => ({\n name: operator,\n type: EmailAddressResolver,\n })),\n ],\n },\n json: {\n operators: [\n ...[...operators.equality, ...operators.partial, ...operators.geojson].map((operator) => ({\n name: operator,\n type: GraphQLJSON,\n })),\n ],\n },\n number: {\n operators: [\n ...[...operators.equality, ...operators.comparison].map((operator) => ({\n name: operator,\n type: (field: NumberField): GraphQLType => {\n return field?.name === 'id' ? GraphQLInt : GraphQLFloat\n },\n })),\n ],\n },\n point: {\n operators: [\n ...[...operators.equality, ...operators.comparison, ...operators.geo].map((operator) => ({\n name: operator,\n type: new GraphQLList(GraphQLFloat),\n })),\n ...operators.geojson.map((operator) => ({\n name: operator,\n /**\n * @example:\n * within: {\n * type: \"Polygon\",\n * coordinates: [[\n * [0.0, 0.0],\n * [1.0, 1.0],\n * [1.0, 0.0],\n * [0.0, 0.0],\n * ]],\n * }\n * @example\n * intersects: {\n * type: \"Point\",\n * coordinates: [ 0.5, 0.5 ]\n * }\n */\n type: GeoJSONObject,\n })),\n ],\n },\n radio: {\n operators: [\n ...[...operators.equality, ...operators.partial].map((operator) => ({\n name: operator,\n type: (field: RadioField, parentName): GraphQLType =>\n new GraphQLEnumType({\n name: `${combineParentName(parentName, field.name)}_Input`,\n values: field.options.reduce((values, option) => {\n if (optionIsObject(option)) {\n return {\n ...values,\n [formatName(option.value)]: {\n value: option.value,\n },\n }\n }\n\n return {\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }\n }, {}),\n }),\n })),\n ],\n },\n relationship: {\n operators: [\n ...[...operators.equality, ...operators.contains].map((operator) => ({\n name: operator,\n type: GraphQLJSON,\n })),\n ],\n },\n richText: {\n operators: [\n ...[...operators.equality, ...operators.partial].map((operator) => ({\n name: operator,\n type: GraphQLJSON,\n })),\n ],\n },\n select: {\n operators: [\n ...[...operators.equality, ...operators.contains].map((operator) => ({\n name: operator,\n type: (field: SelectField, parentName): GraphQLType =>\n new GraphQLEnumType({\n name: `${combineParentName(parentName, field.name)}_Input`,\n values: field.options.reduce((values, option) => {\n if (optionIsObject(option)) {\n return {\n ...values,\n [formatName(option.value)]: {\n value: option.value,\n },\n }\n }\n\n return {\n ...values,\n [formatName(option)]: {\n value: option,\n },\n }\n }, {}),\n }),\n })),\n ],\n },\n text: {\n operators: [\n ...[...operators.equality, ...operators.partial, ...operators.contains].map((operator) => ({\n name: operator,\n type: GraphQLString,\n })),\n ],\n },\n textarea: {\n operators: [\n ...[...operators.equality, ...operators.partial].map((operator) => ({\n name: operator,\n type: GraphQLString,\n })),\n ],\n },\n upload: {\n operators: [\n ...[...operators.equality, ...operators.contains].map((operator) => ({\n name: operator,\n type: GraphQLJSON,\n })),\n ],\n },\n // array: n/a\n // group: n/a\n // row: n/a\n // collapsible: n/a\n // tabs: n/a\n}\n\nconst listOperators = ['in', 'not_in', 'all']\n\nconst gqlTypeCache: Record<string, GraphQLType> = {}\n\n/**\n * In GraphQL, you can use \"where\" as an argument to filter a collection. Example:\n * { Posts(where: { title: { equals: \"Hello\" } }) { text } }\n * This function defines the operators for a field's condition in the \"where\" argument of the collection (it thus gets called for every field).\n * For example, in the example above, it would control that\n * - \"equals\" is a valid operator for the \"title\" field\n * - the accepted type of the \"equals\" argument has to be a string.\n *\n * @param field the field for which their valid operators inside a \"where\" argument is being defined\n * @param parentName the name of the parent field (if any)\n * @returns all the operators (including their types) which can be used as a condition for a given field inside a where\n *\n * @example\n * A has-many relationship accepts a nested query with its relationship operators:\n * ```graphql\n * Burgers(where: { ingredients: { not_equals: { isHealthy: { equals: false } } } })\n * ```\n */\nexport const withOperators = (\n field: FieldAffectingData,\n parentName: string,\n): GraphQLInputObjectType => {\n if (!defaults?.[field.type]) {\n throw new Error(`Error: ${field.type} has no defaults configured.`)\n }\n\n const name = `${combineParentName(parentName, field.name)}_operator`\n\n // Get the default operators for the field type which are hard-coded above\n const fieldOperators = [...defaults[field.type].operators]\n\n // These operators accept a complete `where` query for the one collection targeted by the\n // relationship. Polymorphic relationships are excluded because they can target multiple schemas.\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n field.hasMany &&\n typeof field.relationTo === 'string'\n ) {\n // `equals` and `not_equals` already exist for relationship fields.\n fieldOperators.push({ name: 'contains', type: GraphQLJSON })\n }\n\n if (!('required' in field) || !field.required) {\n fieldOperators.push({\n name: 'exists',\n type: fieldOperators[0].type,\n })\n }\n\n return new GraphQLInputObjectType({\n name,\n fields: fieldOperators.reduce((objectTypeFields, operator) => {\n // Get the type of the operator. It can be either static, or dynamic (=> a function)\n let gqlType: GraphQLType =\n typeof operator.type === 'function' ? operator.type(field, parentName) : operator.type\n\n // GraphQL does not allow types with duplicate names, so we use this cache to avoid that.\n // Without this, select and radio fields would have the same name, and GraphQL would throw an error\n // This usually only happens if a custom type is returned from the operator.type function\n if (typeof operator.type === 'function' && 'name' in gqlType) {\n if (gqlTypeCache[gqlType.name]) {\n gqlType = gqlTypeCache[gqlType.name]\n } else {\n gqlTypeCache[gqlType.name] = gqlType\n }\n }\n\n if (listOperators.includes(operator.name)) {\n gqlType = new GraphQLList(gqlType)\n } else if (operator.name === 'exists') {\n gqlType = GraphQLBoolean\n }\n\n return {\n ...objectTypeFields,\n [operator.name]: {\n type: gqlType,\n },\n }\n }, {}),\n })\n}\n"],"names":["GraphQLBoolean","GraphQLEnumType","GraphQLFloat","GraphQLInputObjectType","GraphQLInt","GraphQLList","GraphQLString","DateTimeResolver","EmailAddressResolver","optionIsObject","GraphQLJSON","combineParentName","formatName","operators","GeoJSONObject","name","fields","type","coordinates","defaults","checkbox","equality","map","operator","code","partial","date","comparison","email","contains","json","geojson","number","field","point","geo","radio","parentName","values","options","reduce","option","value","relationship","richText","select","text","textarea","upload","listOperators","gqlTypeCache","withOperators","Error","fieldOperators","hasMany","relationTo","push","required","objectTypeFields","gqlType","includes"],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { GraphQLResolveInfo } from 'graphql';
|
|
2
2
|
import type { TypedCollectionSelect } from 'payload';
|
|
3
|
-
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
3
|
+
import type { Context } from '../resolvers/types.js';
|
|
4
|
+
export declare function buildSelectForCollection(info: GraphQLResolveInfo, context?: Context): SelectType;
|
|
5
|
+
export declare function buildSelectForCollectionMany(info: GraphQLResolveInfo, context?: Context): SelectType;
|
|
6
|
+
export declare function resolveSelect(info: GraphQLResolveInfo, select: SelectType, context?: Context): SelectType;
|
|
6
7
|
type SelectType = TypedCollectionSelect['any'];
|
|
7
8
|
export {};
|
|
8
9
|
//# sourceMappingURL=select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/utilities/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,kBAAkB,EAAoB,MAAM,SAAS,CAAA;AACtF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/utilities/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,kBAAkB,EAAoB,MAAM,SAAS,CAAA;AACtF,OAAO,KAAK,EAKV,qBAAqB,EAEtB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AASpD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAMhG;AACD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,kBAAkB,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,UAAU,CAMZ;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,UAAU,CA0BZ;AA+JD,KAAK,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA"}
|
package/dist/utilities/select.js
CHANGED
|
@@ -1,52 +1,47 @@
|
|
|
1
1
|
import { getNamedType, isInterfaceType, isObjectType, isUnionType, Kind } from 'graphql';
|
|
2
|
-
|
|
2
|
+
const selectRootPathsByContext = new WeakMap();
|
|
3
|
+
export function buildSelectForCollection(info, context) {
|
|
4
|
+
if (context) {
|
|
5
|
+
registerSelectRootPath(context, info);
|
|
6
|
+
}
|
|
3
7
|
return buildSelect(info);
|
|
4
8
|
}
|
|
5
|
-
export function buildSelectForCollectionMany(info) {
|
|
6
|
-
|
|
9
|
+
export function buildSelectForCollectionMany(info, context) {
|
|
10
|
+
if (context) {
|
|
11
|
+
registerSelectRootPath(context, info);
|
|
12
|
+
}
|
|
13
|
+
return buildSelect(info)?.docs;
|
|
7
14
|
}
|
|
8
|
-
export function resolveSelect(info, select) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const pathKey = path.key;
|
|
13
|
-
const pathType = info.schema.getType(path.typename);
|
|
14
|
-
if (pathType) {
|
|
15
|
-
const field = pathType?.getFields()?.[pathKey]?.extensions?.field;
|
|
16
|
-
if (field?.type === 'join') {
|
|
17
|
-
path = path.prev;
|
|
18
|
-
traversePath.unshift('docs');
|
|
19
|
-
}
|
|
20
|
-
if (field?.type === 'relationship' && Array.isArray(field.relationTo)) {
|
|
21
|
-
path = path.prev;
|
|
22
|
-
traversePath.unshift('value');
|
|
23
|
-
}
|
|
24
|
-
if (field) {
|
|
25
|
-
traversePath.unshift(field.name);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
if (path.prev) {
|
|
29
|
-
traverseTree(path.prev);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
traverseTree(info.path);
|
|
33
|
-
traversePath.forEach((key)=>{
|
|
34
|
-
select = select?.[key];
|
|
35
|
-
});
|
|
15
|
+
export function resolveSelect(info, select, context) {
|
|
16
|
+
const isSelectEnabled = context ? hasSelectRootPath(context, info) : typeof select !== 'undefined';
|
|
17
|
+
if (!isSelectEnabled) {
|
|
18
|
+
return undefined;
|
|
36
19
|
}
|
|
37
|
-
|
|
20
|
+
const field = info.parentType.getFields()[info.fieldName]?.extensions?.field;
|
|
21
|
+
const fieldSelect = buildSelect(info);
|
|
22
|
+
if (field?.type === 'join') {
|
|
23
|
+
return fieldSelect?.docs;
|
|
24
|
+
}
|
|
25
|
+
if ((field?.type === 'relationship' || field?.type === 'upload') && Array.isArray(field.relationTo)) {
|
|
26
|
+
return fieldSelect?.value;
|
|
27
|
+
}
|
|
28
|
+
return fieldSelect;
|
|
38
29
|
}
|
|
39
30
|
function buildSelect(info) {
|
|
40
31
|
const returnType = getNamedType(info.returnType);
|
|
41
|
-
const selectionSet = info.fieldNodes[0].selectionSet;
|
|
42
32
|
if (!returnType) {
|
|
43
33
|
return;
|
|
44
34
|
}
|
|
45
|
-
return
|
|
35
|
+
return info.fieldNodes.reduce((fieldTree, fieldNode)=>{
|
|
36
|
+
if (!fieldNode.selectionSet) {
|
|
37
|
+
return fieldTree;
|
|
38
|
+
}
|
|
39
|
+
return mergeSelectTrees(fieldTree, buildSelectTree(info, fieldNode.selectionSet, returnType));
|
|
40
|
+
}, {});
|
|
46
41
|
}
|
|
47
42
|
function buildSelectTree(info, selectionSet, type) {
|
|
48
43
|
const fieldMap = type.getFields?.();
|
|
49
|
-
|
|
44
|
+
let fieldTree = {};
|
|
50
45
|
for (const selection of selectionSet.selections){
|
|
51
46
|
switch(selection.kind){
|
|
52
47
|
case Kind.FIELD:
|
|
@@ -64,11 +59,15 @@ function buildSelectTree(info, selectionSet, type) {
|
|
|
64
59
|
if (selection.selectionSet) {
|
|
65
60
|
const type = getNamedType(fieldSchema.type);
|
|
66
61
|
if (isObjectType(type) || isInterfaceType(type) || isUnionType(type)) {
|
|
67
|
-
fieldTree
|
|
62
|
+
fieldTree = mergeSelectTrees(fieldTree, {
|
|
63
|
+
[fieldNameOriginal]: buildSelectTree(info, selection.selectionSet, type)
|
|
64
|
+
});
|
|
68
65
|
continue;
|
|
69
66
|
}
|
|
70
67
|
}
|
|
71
|
-
fieldTree
|
|
68
|
+
fieldTree = mergeSelectTrees(fieldTree, {
|
|
69
|
+
[fieldNameOriginal]: true
|
|
70
|
+
});
|
|
72
71
|
break;
|
|
73
72
|
}
|
|
74
73
|
case Kind.FRAGMENT_SPREAD:
|
|
@@ -77,7 +76,7 @@ function buildSelectTree(info, selectionSet, type) {
|
|
|
77
76
|
const fragment = info.fragments[fragmentName];
|
|
78
77
|
const fragmentType = fragment && info.schema.getType(fragment.typeCondition.name.value);
|
|
79
78
|
if (fragmentType) {
|
|
80
|
-
|
|
79
|
+
fieldTree = mergeSelectTrees(fieldTree, buildFragmentSelectTree(info, fragment.selectionSet, fragmentType, type));
|
|
81
80
|
}
|
|
82
81
|
break;
|
|
83
82
|
}
|
|
@@ -85,13 +84,7 @@ function buildSelectTree(info, selectionSet, type) {
|
|
|
85
84
|
{
|
|
86
85
|
const fragmentType = selection.typeCondition ? info.schema.getType(selection.typeCondition.name.value) : type;
|
|
87
86
|
if (fragmentType) {
|
|
88
|
-
|
|
89
|
-
const blockSlug = fragmentType.extensions?.blockSlug;
|
|
90
|
-
if (blockSlug && isUnionType(type)) {
|
|
91
|
-
fieldTree[blockSlug] = buildSelectTree(info, selection.selectionSet, fragmentType);
|
|
92
|
-
} else {
|
|
93
|
-
Object.assign(fieldTree, buildSelectTree(info, selection.selectionSet, fragmentType));
|
|
94
|
-
}
|
|
87
|
+
fieldTree = mergeSelectTrees(fieldTree, buildFragmentSelectTree(info, selection.selectionSet, fragmentType, type));
|
|
95
88
|
}
|
|
96
89
|
break;
|
|
97
90
|
}
|
|
@@ -99,5 +92,50 @@ function buildSelectTree(info, selectionSet, type) {
|
|
|
99
92
|
}
|
|
100
93
|
return fieldTree;
|
|
101
94
|
}
|
|
95
|
+
function buildFragmentSelectTree(info, selectionSet, fragmentType, parentType) {
|
|
96
|
+
const fragmentSelectTree = buildSelectTree(info, selectionSet, fragmentType);
|
|
97
|
+
const blockSlug = fragmentType.extensions?.blockSlug;
|
|
98
|
+
if (blockSlug && isUnionType(parentType)) {
|
|
99
|
+
return {
|
|
100
|
+
[blockSlug]: fragmentSelectTree
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return fragmentSelectTree;
|
|
104
|
+
}
|
|
105
|
+
function getRootPathKey(path) {
|
|
106
|
+
while(path.prev){
|
|
107
|
+
path = path.prev;
|
|
108
|
+
}
|
|
109
|
+
return path.key;
|
|
110
|
+
}
|
|
111
|
+
function hasSelectRootPath(context, info) {
|
|
112
|
+
return Boolean(selectRootPathsByContext.get(context)?.get(info.operation)?.has(getRootPathKey(info.path)));
|
|
113
|
+
}
|
|
114
|
+
function isSelectTree(value) {
|
|
115
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
116
|
+
}
|
|
117
|
+
function mergeSelectTrees(firstTree, secondTree) {
|
|
118
|
+
const mergedTree = {
|
|
119
|
+
...firstTree
|
|
120
|
+
};
|
|
121
|
+
for (const [fieldName, fieldSelect] of Object.entries(secondTree)){
|
|
122
|
+
const existingFieldSelect = mergedTree[fieldName];
|
|
123
|
+
mergedTree[fieldName] = isSelectTree(existingFieldSelect) && isSelectTree(fieldSelect) ? mergeSelectTrees(existingFieldSelect, fieldSelect) : fieldSelect;
|
|
124
|
+
}
|
|
125
|
+
return mergedTree;
|
|
126
|
+
}
|
|
127
|
+
function registerSelectRootPath(context, info) {
|
|
128
|
+
let selectRootPathsByOperation = selectRootPathsByContext.get(context);
|
|
129
|
+
if (!selectRootPathsByOperation) {
|
|
130
|
+
selectRootPathsByOperation = new WeakMap();
|
|
131
|
+
selectRootPathsByContext.set(context, selectRootPathsByOperation);
|
|
132
|
+
}
|
|
133
|
+
let selectRootPaths = selectRootPathsByOperation.get(info.operation);
|
|
134
|
+
if (!selectRootPaths) {
|
|
135
|
+
selectRootPaths = new Set();
|
|
136
|
+
selectRootPathsByOperation.set(info.operation, selectRootPaths);
|
|
137
|
+
}
|
|
138
|
+
selectRootPaths.add(getRootPathKey(info.path));
|
|
139
|
+
}
|
|
102
140
|
|
|
103
141
|
//# sourceMappingURL=select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/select.ts"],"sourcesContent":["import type { GraphQLObjectType, GraphQLResolveInfo, SelectionSetNode } from 'graphql'\nimport type { FieldBase, JoinField, RelationshipField, TypedCollectionSelect } from 'payload'\n\nimport { getNamedType, isInterfaceType, isObjectType, isUnionType, Kind } from 'graphql'\n\nexport function buildSelectForCollection(info: GraphQLResolveInfo): SelectType {\n return buildSelect(info)\n}\nexport function buildSelectForCollectionMany(info: GraphQLResolveInfo): SelectType {\n return buildSelect(info).docs as SelectType\n}\n\nexport function resolveSelect(info: GraphQLResolveInfo, select: SelectType): SelectType {\n if (select) {\n const traversePath: string[] = []\n const traverseTree = (path: GraphQLResolveInfo['path']) => {\n const pathKey = path.key\n const pathType = info.schema.getType(path.typename) as GraphQLObjectType\n\n if (pathType) {\n const field = pathType?.getFields()?.[pathKey]?.extensions?.field as\n | JoinField\n | RelationshipField\n\n if (field?.type === 'join') {\n path = path.prev\n traversePath.unshift('docs')\n }\n if (field?.type === 'relationship' && Array.isArray(field.relationTo)) {\n path = path.prev\n traversePath.unshift('value')\n }\n if (field) {\n traversePath.unshift(field.name)\n }\n }\n\n if (path.prev) {\n traverseTree(path.prev)\n }\n }\n\n traverseTree(info.path)\n traversePath.forEach((key) => {\n select = select?.[key] as SelectType\n })\n }\n\n return select\n}\n\nfunction buildSelect(info: GraphQLResolveInfo) {\n const returnType = getNamedType(info.returnType) as GraphQLObjectType\n const selectionSet = info.fieldNodes[0].selectionSet\n\n if (!returnType) {\n return\n }\n\n return buildSelectTree(info, selectionSet, returnType)\n}\nfunction buildSelectTree(\n info: GraphQLResolveInfo,\n selectionSet: SelectionSetNode,\n type: GraphQLObjectType,\n): SelectType {\n const fieldMap = type.getFields?.()\n const fieldTree: SelectType = {}\n\n for (const selection of selectionSet.selections) {\n switch (selection.kind) {\n case Kind.FIELD: {\n const fieldName = selection.name.value\n const fieldSchema = fieldMap?.[fieldName]\n\n const field = fieldSchema?.extensions?.field as FieldBase\n const fieldNameOriginal = field?.name || fieldName\n\n if (fieldName === '__typename') {\n continue\n }\n if (fieldSchema == undefined) {\n continue\n }\n\n if (selection.selectionSet) {\n const type = getNamedType(fieldSchema.type) as GraphQLObjectType\n\n if (isObjectType(type) || isInterfaceType(type) || isUnionType(type)) {\n fieldTree[fieldNameOriginal] = buildSelectTree(info, selection.selectionSet, type)\n continue\n }\n }\n\n fieldTree[fieldNameOriginal] = true\n break\n }\n\n case Kind.FRAGMENT_SPREAD: {\n const fragmentName = selection.name.value\n const fragment = info.fragments[fragmentName]\n const fragmentType =\n fragment && (info.schema.getType(fragment.typeCondition.name.value) as GraphQLObjectType)\n\n if (fragmentType) {\n Object.assign(fieldTree, buildSelectTree(info, fragment.selectionSet, fragmentType))\n }\n break\n }\n\n case Kind.INLINE_FRAGMENT: {\n const fragmentType = selection.typeCondition\n ? (info.schema.getType(selection.typeCondition.name.value) as GraphQLObjectType)\n : type\n\n if (fragmentType) {\n // Block types in unions need selections nested under their slug\n const blockSlug = fragmentType.extensions?.blockSlug as string | undefined\n\n if (blockSlug && isUnionType(type)) {\n fieldTree[blockSlug] = buildSelectTree(info, selection.selectionSet, fragmentType)\n } else {\n Object.assign(fieldTree, buildSelectTree(info, selection.selectionSet, fragmentType))\n }\n }\n break\n }\n }\n }\n\n return fieldTree\n}\n\ntype SelectType = TypedCollectionSelect['any']\n"],"names":["getNamedType","isInterfaceType","isObjectType","isUnionType","Kind","buildSelectForCollection","info","buildSelect","buildSelectForCollectionMany","docs","resolveSelect","select","traversePath","traverseTree","path","pathKey","key","pathType","schema","getType","typename","field","getFields","extensions","type","prev","unshift","Array","isArray","relationTo","name","forEach","returnType","selectionSet","fieldNodes","buildSelectTree","fieldMap","fieldTree","selection","selections","kind","FIELD","fieldName","value","fieldSchema","fieldNameOriginal","undefined","FRAGMENT_SPREAD","fragmentName","fragment","fragments","fragmentType","typeCondition","Object","assign","INLINE_FRAGMENT","blockSlug"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/select.ts"],"sourcesContent":["import type { GraphQLObjectType, GraphQLResolveInfo, SelectionSetNode } from 'graphql'\nimport type {\n FieldBase,\n JoinField,\n RelationshipField,\n SelectIncludeType,\n TypedCollectionSelect,\n UploadField,\n} from 'payload'\n\nimport { getNamedType, isInterfaceType, isObjectType, isUnionType, Kind } from 'graphql'\n\nimport type { Context } from '../resolvers/types.js'\n\ntype SelectRootPathsByOperation = WeakMap<\n GraphQLResolveInfo['operation'],\n Set<GraphQLResolveInfo['path']['key']>\n>\n\nconst selectRootPathsByContext = new WeakMap<Context, SelectRootPathsByOperation>()\n\nexport function buildSelectForCollection(info: GraphQLResolveInfo, context?: Context): SelectType {\n if (context) {\n registerSelectRootPath(context, info)\n }\n\n return buildSelect(info)\n}\nexport function buildSelectForCollectionMany(\n info: GraphQLResolveInfo,\n context?: Context,\n): SelectType {\n if (context) {\n registerSelectRootPath(context, info)\n }\n\n return buildSelect(info)?.docs as SelectType\n}\n\nexport function resolveSelect(\n info: GraphQLResolveInfo,\n select: SelectType,\n context?: Context,\n): SelectType {\n const isSelectEnabled = context ? hasSelectRootPath(context, info) : typeof select !== 'undefined'\n\n if (!isSelectEnabled) {\n return undefined\n }\n\n const field = info.parentType.getFields()[info.fieldName]?.extensions?.field as\n | JoinField\n | RelationshipField\n | undefined\n | UploadField\n const fieldSelect = buildSelect(info)\n\n if (field?.type === 'join') {\n return fieldSelect?.docs as SelectType\n }\n\n if (\n (field?.type === 'relationship' || field?.type === 'upload') &&\n Array.isArray(field.relationTo)\n ) {\n return fieldSelect?.value as SelectType\n }\n\n return fieldSelect\n}\n\nfunction buildSelect(info: GraphQLResolveInfo) {\n const returnType = getNamedType(info.returnType) as GraphQLObjectType\n\n if (!returnType) {\n return\n }\n\n return info.fieldNodes.reduce<SelectTree>((fieldTree, fieldNode) => {\n if (!fieldNode.selectionSet) {\n return fieldTree\n }\n\n return mergeSelectTrees(fieldTree, buildSelectTree(info, fieldNode.selectionSet, returnType))\n }, {})\n}\n\nfunction buildSelectTree(\n info: GraphQLResolveInfo,\n selectionSet: SelectionSetNode,\n type: GraphQLObjectType,\n): SelectTree {\n const fieldMap = type.getFields?.()\n let fieldTree: SelectTree = {}\n\n for (const selection of selectionSet.selections) {\n switch (selection.kind) {\n case Kind.FIELD: {\n const fieldName = selection.name.value\n const fieldSchema = fieldMap?.[fieldName]\n\n const field = fieldSchema?.extensions?.field as FieldBase\n const fieldNameOriginal = field?.name || fieldName\n\n if (fieldName === '__typename') {\n continue\n }\n if (fieldSchema == undefined) {\n continue\n }\n\n if (selection.selectionSet) {\n const type = getNamedType(fieldSchema.type) as GraphQLObjectType\n\n if (isObjectType(type) || isInterfaceType(type) || isUnionType(type)) {\n fieldTree = mergeSelectTrees(fieldTree, {\n [fieldNameOriginal]: buildSelectTree(info, selection.selectionSet, type),\n })\n continue\n }\n }\n\n fieldTree = mergeSelectTrees(fieldTree, { [fieldNameOriginal]: true })\n break\n }\n\n case Kind.FRAGMENT_SPREAD: {\n const fragmentName = selection.name.value\n const fragment = info.fragments[fragmentName]\n const fragmentType =\n fragment && (info.schema.getType(fragment.typeCondition.name.value) as GraphQLObjectType)\n\n if (fragmentType) {\n fieldTree = mergeSelectTrees(\n fieldTree,\n buildFragmentSelectTree(info, fragment.selectionSet, fragmentType, type),\n )\n }\n break\n }\n\n case Kind.INLINE_FRAGMENT: {\n const fragmentType = selection.typeCondition\n ? (info.schema.getType(selection.typeCondition.name.value) as GraphQLObjectType)\n : type\n\n if (fragmentType) {\n fieldTree = mergeSelectTrees(\n fieldTree,\n buildFragmentSelectTree(info, selection.selectionSet, fragmentType, type),\n )\n }\n break\n }\n }\n }\n\n return fieldTree\n}\n\nfunction buildFragmentSelectTree(\n info: GraphQLResolveInfo,\n selectionSet: SelectionSetNode,\n fragmentType: GraphQLObjectType,\n parentType: GraphQLObjectType,\n): SelectTree {\n const fragmentSelectTree = buildSelectTree(info, selectionSet, fragmentType)\n const blockSlug = fragmentType.extensions?.blockSlug as string | undefined\n\n if (blockSlug && isUnionType(parentType)) {\n return { [blockSlug]: fragmentSelectTree }\n }\n\n return fragmentSelectTree\n}\n\nfunction getRootPathKey(path: GraphQLResolveInfo['path']): GraphQLResolveInfo['path']['key'] {\n while (path.prev) {\n path = path.prev\n }\n\n return path.key\n}\n\nfunction hasSelectRootPath(context: Context, info: GraphQLResolveInfo): boolean {\n return Boolean(\n selectRootPathsByContext.get(context)?.get(info.operation)?.has(getRootPathKey(info.path)),\n )\n}\n\nfunction isSelectTree(value: unknown): value is SelectTree {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction mergeSelectTrees(firstTree: SelectTree, secondTree: SelectTree): SelectTree {\n const mergedTree = { ...firstTree }\n\n for (const [fieldName, fieldSelect] of Object.entries(secondTree)) {\n const existingFieldSelect = mergedTree[fieldName]\n\n mergedTree[fieldName] =\n isSelectTree(existingFieldSelect) && isSelectTree(fieldSelect)\n ? mergeSelectTrees(existingFieldSelect, fieldSelect)\n : fieldSelect\n }\n\n return mergedTree\n}\n\nfunction registerSelectRootPath(context: Context, info: GraphQLResolveInfo): void {\n let selectRootPathsByOperation = selectRootPathsByContext.get(context)\n\n if (!selectRootPathsByOperation) {\n selectRootPathsByOperation = new WeakMap()\n selectRootPathsByContext.set(context, selectRootPathsByOperation)\n }\n\n let selectRootPaths = selectRootPathsByOperation.get(info.operation)\n\n if (!selectRootPaths) {\n selectRootPaths = new Set()\n selectRootPathsByOperation.set(info.operation, selectRootPaths)\n }\n\n selectRootPaths.add(getRootPathKey(info.path))\n}\n\ntype SelectTree = SelectIncludeType\ntype SelectType = TypedCollectionSelect['any']\n"],"names":["getNamedType","isInterfaceType","isObjectType","isUnionType","Kind","selectRootPathsByContext","WeakMap","buildSelectForCollection","info","context","registerSelectRootPath","buildSelect","buildSelectForCollectionMany","docs","resolveSelect","select","isSelectEnabled","hasSelectRootPath","undefined","field","parentType","getFields","fieldName","extensions","fieldSelect","type","Array","isArray","relationTo","value","returnType","fieldNodes","reduce","fieldTree","fieldNode","selectionSet","mergeSelectTrees","buildSelectTree","fieldMap","selection","selections","kind","FIELD","name","fieldSchema","fieldNameOriginal","FRAGMENT_SPREAD","fragmentName","fragment","fragments","fragmentType","schema","getType","typeCondition","buildFragmentSelectTree","INLINE_FRAGMENT","fragmentSelectTree","blockSlug","getRootPathKey","path","prev","key","Boolean","get","operation","has","isSelectTree","firstTree","secondTree","mergedTree","Object","entries","existingFieldSelect","selectRootPathsByOperation","set","selectRootPaths","Set","add"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/graphql",
|
|
3
|
-
"version": "4.0.0-internal.
|
|
3
|
+
"version": "4.0.0-internal.f15737c",
|
|
4
4
|
"homepage": "https://payloadcms.com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -47,17 +47,17 @@
|
|
|
47
47
|
"graphql-scalars": "1.22.2",
|
|
48
48
|
"pluralize": "8.0.0",
|
|
49
49
|
"ts-essentials": "10.0.3",
|
|
50
|
-
"tsx": "4.
|
|
50
|
+
"tsx": "4.23.15"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/pluralize": "^0.0.33",
|
|
54
54
|
"graphql-http": "1.22.4",
|
|
55
55
|
"@payloadcms/eslint-config": "3.28.0",
|
|
56
|
-
"payload": "4.0.0-internal.
|
|
56
|
+
"payload": "4.0.0-internal.f15737c"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"graphql": "^16.8.1",
|
|
60
|
-
"payload": "4.0.0-internal.
|
|
60
|
+
"payload": "4.0.0-internal.f15737c"
|
|
61
61
|
},
|
|
62
62
|
"scripts": {
|
|
63
63
|
"build": "pnpm build:types && pnpm build:swc",
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { formatName } from './formatName';
|
|
3
|
-
describe('formatName', ()=>{
|
|
4
|
-
it.each`
|
|
5
|
-
char | expected
|
|
6
|
-
${'á'} | ${'a'}
|
|
7
|
-
${'è'} | ${'e'}
|
|
8
|
-
${'í'} | ${'i'}
|
|
9
|
-
${'ó'} | ${'o'}
|
|
10
|
-
${'ú'} | ${'u'}
|
|
11
|
-
${'ñ'} | ${'n'}
|
|
12
|
-
${'ü'} | ${'u'}
|
|
13
|
-
`('should convert accented character: $char', ({ char, expected })=>{
|
|
14
|
-
expect(formatName(char)).toEqual(expected);
|
|
15
|
-
});
|
|
16
|
-
describe('UTC offset handling', ()=>{
|
|
17
|
-
it.each`
|
|
18
|
-
offset | expected
|
|
19
|
-
${'+00:00'} | ${'_TZOFFSET_PLUS_00_00'}
|
|
20
|
-
${'+05:30'} | ${'_TZOFFSET_PLUS_05_30'}
|
|
21
|
-
${'+05:45'} | ${'_TZOFFSET_PLUS_05_45'}
|
|
22
|
-
${'+08:00'} | ${'_TZOFFSET_PLUS_08_00'}
|
|
23
|
-
${'+12:00'} | ${'_TZOFFSET_PLUS_12_00'}
|
|
24
|
-
${'+14:00'} | ${'_TZOFFSET_PLUS_14_00'}
|
|
25
|
-
${'-00:00'} | ${'_TZOFFSET_MINUS_00_00'}
|
|
26
|
-
${'-03:30'} | ${'_TZOFFSET_MINUS_03_30'}
|
|
27
|
-
${'-05:00'} | ${'_TZOFFSET_MINUS_05_00'}
|
|
28
|
-
${'-08:00'} | ${'_TZOFFSET_MINUS_08_00'}
|
|
29
|
-
${'-12:00'} | ${'_TZOFFSET_MINUS_12_00'}
|
|
30
|
-
`('should convert UTC offset $offset to $expected', ({ offset, expected })=>{
|
|
31
|
-
expect(formatName(offset)).toEqual(expected);
|
|
32
|
-
});
|
|
33
|
-
it('should not collide between positive and negative offsets', ()=>{
|
|
34
|
-
const plusFive = formatName('+05:00');
|
|
35
|
-
const minusFive = formatName('-05:00');
|
|
36
|
-
expect(plusFive).not.toEqual(minusFive);
|
|
37
|
-
expect(plusFive).toEqual('_TZOFFSET_PLUS_05_00');
|
|
38
|
-
expect(minusFive).toEqual('_TZOFFSET_MINUS_05_00');
|
|
39
|
-
});
|
|
40
|
-
it('should not treat IANA timezone names as offsets', ()=>{
|
|
41
|
-
// These should use standard formatting, not UTC offset formatting
|
|
42
|
-
expect(formatName('America/New_York')).toEqual('America_New_York');
|
|
43
|
-
expect(formatName('Europe/London')).toEqual('Europe_London');
|
|
44
|
-
expect(formatName('Asia/Tokyo')).toEqual('Asia_Tokyo');
|
|
45
|
-
});
|
|
46
|
-
it('should not treat partial offset patterns as offsets', ()=>{
|
|
47
|
-
// These don't match the strict ±HH:mm pattern, so they use standard formatting
|
|
48
|
-
expect(formatName('+5')).toEqual('_5');
|
|
49
|
-
expect(formatName('+05')).toEqual('_05');
|
|
50
|
-
expect(formatName('+0530')).toEqual('_0530');
|
|
51
|
-
// 05:30 without sign is not a UTC offset, starts with number so gets _ prefix
|
|
52
|
-
expect(formatName('05:30')).toEqual('_05:30');
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
//# sourceMappingURL=formatName.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/formatName.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { formatName } from './formatName'\n\ndescribe('formatName', () => {\n it.each`\n char | expected\n ${'á'} | ${'a'}\n ${'è'} | ${'e'}\n ${'í'} | ${'i'}\n ${'ó'} | ${'o'}\n ${'ú'} | ${'u'}\n ${'ñ'} | ${'n'}\n ${'ü'} | ${'u'}\n `('should convert accented character: $char', ({ char, expected }) => {\n expect(formatName(char)).toEqual(expected)\n })\n\n describe('UTC offset handling', () => {\n it.each`\n offset | expected\n ${'+00:00'} | ${'_TZOFFSET_PLUS_00_00'}\n ${'+05:30'} | ${'_TZOFFSET_PLUS_05_30'}\n ${'+05:45'} | ${'_TZOFFSET_PLUS_05_45'}\n ${'+08:00'} | ${'_TZOFFSET_PLUS_08_00'}\n ${'+12:00'} | ${'_TZOFFSET_PLUS_12_00'}\n ${'+14:00'} | ${'_TZOFFSET_PLUS_14_00'}\n ${'-00:00'} | ${'_TZOFFSET_MINUS_00_00'}\n ${'-03:30'} | ${'_TZOFFSET_MINUS_03_30'}\n ${'-05:00'} | ${'_TZOFFSET_MINUS_05_00'}\n ${'-08:00'} | ${'_TZOFFSET_MINUS_08_00'}\n ${'-12:00'} | ${'_TZOFFSET_MINUS_12_00'}\n `('should convert UTC offset $offset to $expected', ({ offset, expected }) => {\n expect(formatName(offset)).toEqual(expected)\n })\n\n it('should not collide between positive and negative offsets', () => {\n const plusFive = formatName('+05:00')\n const minusFive = formatName('-05:00')\n expect(plusFive).not.toEqual(minusFive)\n expect(plusFive).toEqual('_TZOFFSET_PLUS_05_00')\n expect(minusFive).toEqual('_TZOFFSET_MINUS_05_00')\n })\n\n it('should not treat IANA timezone names as offsets', () => {\n // These should use standard formatting, not UTC offset formatting\n expect(formatName('America/New_York')).toEqual('America_New_York')\n expect(formatName('Europe/London')).toEqual('Europe_London')\n expect(formatName('Asia/Tokyo')).toEqual('Asia_Tokyo')\n })\n\n it('should not treat partial offset patterns as offsets', () => {\n // These don't match the strict ±HH:mm pattern, so they use standard formatting\n expect(formatName('+5')).toEqual('_5')\n expect(formatName('+05')).toEqual('_05')\n expect(formatName('+0530')).toEqual('_0530')\n // 05:30 without sign is not a UTC offset, starts with number so gets _ prefix\n expect(formatName('05:30')).toEqual('_05:30')\n })\n })\n})\n"],"names":["describe","it","expect","formatName","each","char","expected","toEqual","offset","plusFive","minusFive","not"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,EAAEC,MAAM,QAAQ,SAAQ;AAC7C,SAASC,UAAU,QAAQ,eAAc;AAEzCH,SAAS,cAAc;IACrBC,GAAGG,IAAI,CAAC;;IAEN,EAAE,IAAI,GAAG,EAAE,IAAI;IACf,EAAE,IAAI,GAAG,EAAE,IAAI;IACf,EAAE,IAAI,GAAG,EAAE,IAAI;IACf,EAAE,IAAI,GAAG,EAAE,IAAI;IACf,EAAE,IAAI,GAAG,EAAE,IAAI;IACf,EAAE,IAAI,GAAG,EAAE,IAAI;IACf,EAAE,IAAI,GAAG,EAAE,IAAI;EACjB,CAAC,CAAC,4CAA4C,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAE;QAC/DJ,OAAOC,WAAWE,OAAOE,OAAO,CAACD;IACnC;IAEAN,SAAS,uBAAuB;QAC9BC,GAAGG,IAAI,CAAC;;MAEN,EAAE,SAAS,GAAG,EAAE,uBAAuB;MACvC,EAAE,SAAS,GAAG,EAAE,uBAAuB;MACvC,EAAE,SAAS,GAAG,EAAE,uBAAuB;MACvC,EAAE,SAAS,GAAG,EAAE,uBAAuB;MACvC,EAAE,SAAS,GAAG,EAAE,uBAAuB;MACvC,EAAE,SAAS,GAAG,EAAE,uBAAuB;MACvC,EAAE,SAAS,GAAG,EAAE,wBAAwB;MACxC,EAAE,SAAS,GAAG,EAAE,wBAAwB;MACxC,EAAE,SAAS,GAAG,EAAE,wBAAwB;MACxC,EAAE,SAAS,GAAG,EAAE,wBAAwB;MACxC,EAAE,SAAS,GAAG,EAAE,wBAAwB;IAC1C,CAAC,CAAC,kDAAkD,CAAC,EAAEI,MAAM,EAAEF,QAAQ,EAAE;YACvEJ,OAAOC,WAAWK,SAASD,OAAO,CAACD;QACrC;QAEAL,GAAG,4DAA4D;YAC7D,MAAMQ,WAAWN,WAAW;YAC5B,MAAMO,YAAYP,WAAW;YAC7BD,OAAOO,UAAUE,GAAG,CAACJ,OAAO,CAACG;YAC7BR,OAAOO,UAAUF,OAAO,CAAC;YACzBL,OAAOQ,WAAWH,OAAO,CAAC;QAC5B;QAEAN,GAAG,mDAAmD;YACpD,kEAAkE;YAClEC,OAAOC,WAAW,qBAAqBI,OAAO,CAAC;YAC/CL,OAAOC,WAAW,kBAAkBI,OAAO,CAAC;YAC5CL,OAAOC,WAAW,eAAeI,OAAO,CAAC;QAC3C;QAEAN,GAAG,uDAAuD;YACxD,+EAA+E;YAC/EC,OAAOC,WAAW,OAAOI,OAAO,CAAC;YACjCL,OAAOC,WAAW,QAAQI,OAAO,CAAC;YAClCL,OAAOC,WAAW,UAAUI,OAAO,CAAC;YACpC,8EAA8E;YAC9EL,OAAOC,WAAW,UAAUI,OAAO,CAAC;QACtC;IACF;AACF"}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { formatUtcOffset } from './formatUtcOffset.js';
|
|
3
|
-
describe('formatUtcOffset', ()=>{
|
|
4
|
-
describe('valid UTC offsets', ()=>{
|
|
5
|
-
it.each([
|
|
6
|
-
[
|
|
7
|
-
'+00:00',
|
|
8
|
-
'_TZOFFSET_PLUS_00_00'
|
|
9
|
-
],
|
|
10
|
-
[
|
|
11
|
-
'+05:30',
|
|
12
|
-
'_TZOFFSET_PLUS_05_30'
|
|
13
|
-
],
|
|
14
|
-
[
|
|
15
|
-
'+05:45',
|
|
16
|
-
'_TZOFFSET_PLUS_05_45'
|
|
17
|
-
],
|
|
18
|
-
[
|
|
19
|
-
'+08:00',
|
|
20
|
-
'_TZOFFSET_PLUS_08_00'
|
|
21
|
-
],
|
|
22
|
-
[
|
|
23
|
-
'+09:30',
|
|
24
|
-
'_TZOFFSET_PLUS_09_30'
|
|
25
|
-
],
|
|
26
|
-
[
|
|
27
|
-
'+12:00',
|
|
28
|
-
'_TZOFFSET_PLUS_12_00'
|
|
29
|
-
],
|
|
30
|
-
[
|
|
31
|
-
'+14:00',
|
|
32
|
-
'_TZOFFSET_PLUS_14_00'
|
|
33
|
-
]
|
|
34
|
-
])('should convert positive offset %s to %s', (offset, expected)=>{
|
|
35
|
-
expect(formatUtcOffset(offset)).toEqual(expected);
|
|
36
|
-
});
|
|
37
|
-
it.each([
|
|
38
|
-
[
|
|
39
|
-
'-00:00',
|
|
40
|
-
'_TZOFFSET_MINUS_00_00'
|
|
41
|
-
],
|
|
42
|
-
[
|
|
43
|
-
'-03:30',
|
|
44
|
-
'_TZOFFSET_MINUS_03_30'
|
|
45
|
-
],
|
|
46
|
-
[
|
|
47
|
-
'-05:00',
|
|
48
|
-
'_TZOFFSET_MINUS_05_00'
|
|
49
|
-
],
|
|
50
|
-
[
|
|
51
|
-
'-08:00',
|
|
52
|
-
'_TZOFFSET_MINUS_08_00'
|
|
53
|
-
],
|
|
54
|
-
[
|
|
55
|
-
'-09:30',
|
|
56
|
-
'_TZOFFSET_MINUS_09_30'
|
|
57
|
-
],
|
|
58
|
-
[
|
|
59
|
-
'-12:00',
|
|
60
|
-
'_TZOFFSET_MINUS_12_00'
|
|
61
|
-
]
|
|
62
|
-
])('should convert negative offset %s to %s', (offset, expected)=>{
|
|
63
|
-
expect(formatUtcOffset(offset)).toEqual(expected);
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
describe('non-offset values', ()=>{
|
|
67
|
-
it.each([
|
|
68
|
-
'UTC',
|
|
69
|
-
'America/New_York',
|
|
70
|
-
'Europe/London',
|
|
71
|
-
'Asia/Tokyo',
|
|
72
|
-
'Pacific/Auckland'
|
|
73
|
-
])('should return null for IANA timezone: %s', (timezone)=>{
|
|
74
|
-
expect(formatUtcOffset(timezone)).toBeNull();
|
|
75
|
-
});
|
|
76
|
-
it.each([
|
|
77
|
-
'+5',
|
|
78
|
-
'-8',
|
|
79
|
-
'+05',
|
|
80
|
-
'-08',
|
|
81
|
-
'+0530',
|
|
82
|
-
'-0800',
|
|
83
|
-
'05:30',
|
|
84
|
-
'0530',
|
|
85
|
-
'invalid',
|
|
86
|
-
''
|
|
87
|
-
])('should return null for non-standard format: %s', (value)=>{
|
|
88
|
-
expect(formatUtcOffset(value)).toBeNull();
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
describe('uniqueness', ()=>{
|
|
92
|
-
it('should produce unique names for positive and negative offsets', ()=>{
|
|
93
|
-
const testCases = [
|
|
94
|
-
[
|
|
95
|
-
'+05:00',
|
|
96
|
-
'-05:00'
|
|
97
|
-
],
|
|
98
|
-
[
|
|
99
|
-
'+08:00',
|
|
100
|
-
'-08:00'
|
|
101
|
-
],
|
|
102
|
-
[
|
|
103
|
-
'+00:00',
|
|
104
|
-
'-00:00'
|
|
105
|
-
],
|
|
106
|
-
[
|
|
107
|
-
'+12:00',
|
|
108
|
-
'-12:00'
|
|
109
|
-
]
|
|
110
|
-
];
|
|
111
|
-
for (const [positive, negative] of testCases){
|
|
112
|
-
const positiveName = formatUtcOffset(positive);
|
|
113
|
-
const negativeName = formatUtcOffset(negative);
|
|
114
|
-
expect(positiveName).not.toEqual(negativeName);
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
it('should produce unique names for different hour offsets', ()=>{
|
|
118
|
-
const offsets = [
|
|
119
|
-
'+05:00',
|
|
120
|
-
'+06:00',
|
|
121
|
-
'+07:00',
|
|
122
|
-
'+08:00'
|
|
123
|
-
];
|
|
124
|
-
const names = offsets.map(formatUtcOffset);
|
|
125
|
-
const uniqueNames = new Set(names);
|
|
126
|
-
expect(uniqueNames.size).toEqual(offsets.length);
|
|
127
|
-
});
|
|
128
|
-
it('should produce unique names for different minute offsets', ()=>{
|
|
129
|
-
const offsets = [
|
|
130
|
-
'+05:00',
|
|
131
|
-
'+05:15',
|
|
132
|
-
'+05:30',
|
|
133
|
-
'+05:45'
|
|
134
|
-
];
|
|
135
|
-
const names = offsets.map(formatUtcOffset);
|
|
136
|
-
const uniqueNames = new Set(names);
|
|
137
|
-
expect(uniqueNames.size).toEqual(offsets.length);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
//# sourceMappingURL=formatUtcOffset.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/formatUtcOffset.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { formatUtcOffset } from './formatUtcOffset.js'\n\ndescribe('formatUtcOffset', () => {\n describe('valid UTC offsets', () => {\n it.each([\n ['+00:00', '_TZOFFSET_PLUS_00_00'],\n ['+05:30', '_TZOFFSET_PLUS_05_30'],\n ['+05:45', '_TZOFFSET_PLUS_05_45'],\n ['+08:00', '_TZOFFSET_PLUS_08_00'],\n ['+09:30', '_TZOFFSET_PLUS_09_30'],\n ['+12:00', '_TZOFFSET_PLUS_12_00'],\n ['+14:00', '_TZOFFSET_PLUS_14_00'],\n ])('should convert positive offset %s to %s', (offset, expected) => {\n expect(formatUtcOffset(offset)).toEqual(expected)\n })\n\n it.each([\n ['-00:00', '_TZOFFSET_MINUS_00_00'],\n ['-03:30', '_TZOFFSET_MINUS_03_30'],\n ['-05:00', '_TZOFFSET_MINUS_05_00'],\n ['-08:00', '_TZOFFSET_MINUS_08_00'],\n ['-09:30', '_TZOFFSET_MINUS_09_30'],\n ['-12:00', '_TZOFFSET_MINUS_12_00'],\n ])('should convert negative offset %s to %s', (offset, expected) => {\n expect(formatUtcOffset(offset)).toEqual(expected)\n })\n })\n\n describe('non-offset values', () => {\n it.each(['UTC', 'America/New_York', 'Europe/London', 'Asia/Tokyo', 'Pacific/Auckland'])(\n 'should return null for IANA timezone: %s',\n (timezone) => {\n expect(formatUtcOffset(timezone)).toBeNull()\n },\n )\n\n it.each(['+5', '-8', '+05', '-08', '+0530', '-0800', '05:30', '0530', 'invalid', ''])(\n 'should return null for non-standard format: %s',\n (value) => {\n expect(formatUtcOffset(value)).toBeNull()\n },\n )\n })\n\n describe('uniqueness', () => {\n it('should produce unique names for positive and negative offsets', () => {\n const testCases = [\n ['+05:00', '-05:00'],\n ['+08:00', '-08:00'],\n ['+00:00', '-00:00'],\n ['+12:00', '-12:00'],\n ]\n\n for (const [positive, negative] of testCases) {\n const positiveName = formatUtcOffset(positive)\n const negativeName = formatUtcOffset(negative)\n expect(positiveName).not.toEqual(negativeName)\n }\n })\n\n it('should produce unique names for different hour offsets', () => {\n const offsets = ['+05:00', '+06:00', '+07:00', '+08:00']\n const names = offsets.map(formatUtcOffset)\n const uniqueNames = new Set(names)\n expect(uniqueNames.size).toEqual(offsets.length)\n })\n\n it('should produce unique names for different minute offsets', () => {\n const offsets = ['+05:00', '+05:15', '+05:30', '+05:45']\n const names = offsets.map(formatUtcOffset)\n const uniqueNames = new Set(names)\n expect(uniqueNames.size).toEqual(offsets.length)\n })\n })\n})\n"],"names":["describe","expect","it","formatUtcOffset","each","offset","expected","toEqual","timezone","toBeNull","value","testCases","positive","negative","positiveName","negativeName","not","offsets","names","map","uniqueNames","Set","size","length"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,eAAe,QAAQ,uBAAsB;AAEtDH,SAAS,mBAAmB;IAC1BA,SAAS,qBAAqB;QAC5BE,GAAGE,IAAI,CAAC;YACN;gBAAC;gBAAU;aAAuB;YAClC;gBAAC;gBAAU;aAAuB;YAClC;gBAAC;gBAAU;aAAuB;YAClC;gBAAC;gBAAU;aAAuB;YAClC;gBAAC;gBAAU;aAAuB;YAClC;gBAAC;gBAAU;aAAuB;YAClC;gBAAC;gBAAU;aAAuB;SACnC,EAAE,2CAA2C,CAACC,QAAQC;YACrDL,OAAOE,gBAAgBE,SAASE,OAAO,CAACD;QAC1C;QAEAJ,GAAGE,IAAI,CAAC;YACN;gBAAC;gBAAU;aAAwB;YACnC;gBAAC;gBAAU;aAAwB;YACnC;gBAAC;gBAAU;aAAwB;YACnC;gBAAC;gBAAU;aAAwB;YACnC;gBAAC;gBAAU;aAAwB;YACnC;gBAAC;gBAAU;aAAwB;SACpC,EAAE,2CAA2C,CAACC,QAAQC;YACrDL,OAAOE,gBAAgBE,SAASE,OAAO,CAACD;QAC1C;IACF;IAEAN,SAAS,qBAAqB;QAC5BE,GAAGE,IAAI,CAAC;YAAC;YAAO;YAAoB;YAAiB;YAAc;SAAmB,EACpF,4CACA,CAACI;YACCP,OAAOE,gBAAgBK,WAAWC,QAAQ;QAC5C;QAGFP,GAAGE,IAAI,CAAC;YAAC;YAAM;YAAM;YAAO;YAAO;YAAS;YAAS;YAAS;YAAQ;YAAW;SAAG,EAClF,kDACA,CAACM;YACCT,OAAOE,gBAAgBO,QAAQD,QAAQ;QACzC;IAEJ;IAEAT,SAAS,cAAc;QACrBE,GAAG,iEAAiE;YAClE,MAAMS,YAAY;gBAChB;oBAAC;oBAAU;iBAAS;gBACpB;oBAAC;oBAAU;iBAAS;gBACpB;oBAAC;oBAAU;iBAAS;gBACpB;oBAAC;oBAAU;iBAAS;aACrB;YAED,KAAK,MAAM,CAACC,UAAUC,SAAS,IAAIF,UAAW;gBAC5C,MAAMG,eAAeX,gBAAgBS;gBACrC,MAAMG,eAAeZ,gBAAgBU;gBACrCZ,OAAOa,cAAcE,GAAG,CAACT,OAAO,CAACQ;YACnC;QACF;QAEAb,GAAG,0DAA0D;YAC3D,MAAMe,UAAU;gBAAC;gBAAU;gBAAU;gBAAU;aAAS;YACxD,MAAMC,QAAQD,QAAQE,GAAG,CAAChB;YAC1B,MAAMiB,cAAc,IAAIC,IAAIH;YAC5BjB,OAAOmB,YAAYE,IAAI,EAAEf,OAAO,CAACU,QAAQM,MAAM;QACjD;QAEArB,GAAG,4DAA4D;YAC7D,MAAMe,UAAU;gBAAC;gBAAU;gBAAU;gBAAU;aAAS;YACxD,MAAMC,QAAQD,QAAQE,GAAG,CAAChB;YAC1B,MAAMiB,cAAc,IAAIC,IAAIH;YAC5BjB,OAAOmB,YAAYE,IAAI,EAAEf,OAAO,CAACU,QAAQM,MAAM;QACjD;IACF;AACF"}
|