@strapi/plugin-graphql 5.40.0 → 5.41.0

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.
@@ -22,42 +22,46 @@ var utils = (({ strapi })=>{
22
22
  };
23
23
  }
24
24
  const { kind } = contentType;
25
- const hasDraftAndPublish = utils$1.contentTypes.hasDraftAndPublish(contentType);
25
+ // On non–D&P roots (e.g. User) these args do not version the parent document, but they
26
+ // are required: association resolvers inherit them into nested D&P relations (see
27
+ // builders/resolvers/association.ts + rootQueryArgs). Omitting them broke draft/published
28
+ // control for populated relations (e.g. github.com/strapi/strapi/issues/25746).
29
+ //
30
+ // Future direction: add `status` / `hasPublishedVersion` to GraphQL args on nested
31
+ // to-many (and to-one) relation fields when the *target* content type has D&P, instead
32
+ // of relying on root-level “context” that is easy to misread (args on User affecting
33
+ // Articles). That would allow different publication settings per relation branch, match
34
+ // how developers think about the graph, and let non-DP roots drop these args if desired.
35
+ // Would require extending getContentTypeArgs(..., { isNested: true }) for D&P targets
36
+ // and teaching association.ts to honor args.hasPublishedVersion on nested fields, not
37
+ // only root inheritance.
38
+ const publicationArgs = {
39
+ status: args.PublicationStatusArg,
40
+ hasPublishedVersion: args.HasPublishedVersionArg
41
+ };
26
42
  // Collection Types
27
43
  if (kind === 'collectionType') {
28
44
  if (!multiple) {
29
- const params = {
30
- documentId: nexus.nonNull(nexus.idArg())
45
+ return {
46
+ documentId: nexus.nonNull(nexus.idArg()),
47
+ ...publicationArgs
31
48
  };
32
- if (hasDraftAndPublish) {
33
- Object.assign(params, {
34
- status: args.PublicationStatusArg,
35
- hasPublishedVersion: args.HasPublishedVersionArg
36
- });
37
- }
38
- return params;
39
49
  }
40
50
  const params = {
41
51
  filters: naming.getFiltersInputTypeName(contentType),
42
52
  pagination: args.PaginationArg,
43
53
  sort: args.SortArg
44
54
  };
45
- if (!isNested && hasDraftAndPublish) {
46
- Object.assign(params, {
47
- status: args.PublicationStatusArg,
48
- hasPublishedVersion: args.HasPublishedVersionArg
49
- });
55
+ if (!isNested) {
56
+ Object.assign(params, publicationArgs);
50
57
  }
51
58
  return params;
52
59
  }
53
60
  // Single Types
54
61
  if (kind === 'singleType') {
55
62
  const params = {};
56
- if (!isNested && hasDraftAndPublish) {
57
- Object.assign(params, {
58
- status: args.PublicationStatusArg,
59
- hasPublishedVersion: args.HasPublishedVersionArg
60
- });
63
+ if (!isNested) {
64
+ Object.assign(params, publicationArgs);
61
65
  }
62
66
  return params;
63
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../server/src/services/builders/utils.ts"],"sourcesContent":["import { entries, mapValues, omit } from 'lodash/fp';\nimport { idArg, nonNull } from 'nexus';\nimport { contentTypes, pagination } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nconst { withDefaultPagination } = pagination;\n\ntype ContentTypeArgsOptions = {\n multiple?: boolean;\n isNested?: boolean;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const { service: getService } = strapi.plugin('graphql');\n\n return {\n getContentTypeArgs(\n contentType: Struct.Schema,\n { multiple = true, isNested = false }: ContentTypeArgsOptions = {}\n ) {\n const { naming } = getService('utils');\n const { args } = getService('internals');\n\n const { modelType } = contentType;\n\n // Components\n if (modelType === 'component') {\n if (!multiple) return {};\n\n return {\n filters: naming.getFiltersInputTypeName(contentType),\n pagination: args.PaginationArg,\n sort: args.SortArg,\n };\n }\n\n const { kind } = contentType;\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);\n\n // Collection Types\n if (kind === 'collectionType') {\n if (!multiple) {\n const params: Record<string, unknown> = {\n documentId: nonNull(idArg()),\n };\n\n if (hasDraftAndPublish) {\n Object.assign(params, {\n status: args.PublicationStatusArg,\n hasPublishedVersion: args.HasPublishedVersionArg,\n });\n }\n\n return params;\n }\n\n const params = {\n filters: naming.getFiltersInputTypeName(contentType),\n pagination: args.PaginationArg,\n sort: args.SortArg,\n };\n\n if (!isNested && hasDraftAndPublish) {\n Object.assign(params, {\n status: args.PublicationStatusArg,\n hasPublishedVersion: args.HasPublishedVersionArg,\n });\n }\n\n return params;\n }\n\n // Single Types\n if (kind === 'singleType') {\n const params = {};\n\n if (!isNested && hasDraftAndPublish) {\n Object.assign(params, {\n status: args.PublicationStatusArg,\n hasPublishedVersion: args.HasPublishedVersionArg,\n });\n }\n\n return params;\n }\n },\n\n /**\n * Filter an object entries and keep only those whose value is a unique scalar attribute\n */\n getUniqueScalarAttributes(attributes: Struct.SchemaAttributes) {\n const { isStrapiScalar } = getService('utils').attributes;\n\n const uniqueAttributes = entries(attributes).filter(\n ([, attribute]) => isStrapiScalar(attribute) && 'unique' in attribute && attribute.unique\n );\n\n return Object.fromEntries(uniqueAttributes);\n },\n\n /**\n * Map each value from an attribute to a FiltersInput type name\n * @param {object} attributes - The attributes object to transform\n * @return {Object<string, string>}\n */\n scalarAttributesToFiltersMap(attributes: Struct.SchemaAttributes) {\n return mapValues((attribute) => {\n const { mappers, naming } = getService('utils');\n\n const gqlScalar = mappers.strapiScalarToGraphQLScalar(attribute.type);\n\n return naming.getScalarFilterInputTypeName(gqlScalar);\n }, attributes);\n },\n\n /**\n * Apply basic transform to GQL args\n */\n transformArgs(\n args: any,\n {\n contentType,\n usePagination = false,\n }: { contentType: Struct.ContentTypeSchema; usePagination?: boolean }\n ) {\n const { mappers } = getService('utils');\n const { config } = strapi.plugin('graphql');\n const { pagination = {}, filters = {} } = args;\n\n // Init\n const newArgs = omit(['pagination', 'filters'], args);\n\n // Pagination\n if (usePagination) {\n const defaultLimit: number = config('defaultLimit');\n const maxLimit: number = config('maxLimit');\n\n Object.assign(\n newArgs,\n withDefaultPagination(pagination, {\n maxLimit,\n defaults: {\n offset: { limit: defaultLimit },\n page: { pageSize: defaultLimit },\n },\n })\n );\n }\n\n // Filters\n if (args.filters) {\n Object.assign(newArgs, {\n filters: mappers.graphQLFiltersToStrapiQuery(filters, contentType),\n });\n }\n\n return newArgs;\n },\n };\n};\n"],"names":["withDefaultPagination","pagination","strapi","service","getService","plugin","getContentTypeArgs","contentType","multiple","isNested","naming","args","modelType","filters","getFiltersInputTypeName","PaginationArg","sort","SortArg","kind","hasDraftAndPublish","contentTypes","params","documentId","nonNull","idArg","Object","assign","status","PublicationStatusArg","hasPublishedVersion","HasPublishedVersionArg","getUniqueScalarAttributes","attributes","isStrapiScalar","uniqueAttributes","entries","filter","attribute","unique","fromEntries","scalarAttributesToFiltersMap","mapValues","mappers","gqlScalar","strapiScalarToGraphQLScalar","type","getScalarFilterInputTypeName","transformArgs","usePagination","config","newArgs","omit","defaultLimit","maxLimit","defaults","offset","limit","page","pageSize","graphQLFiltersToStrapiQuery"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../server/src/services/builders/utils.ts"],"sourcesContent":["import { entries, mapValues, omit } from 'lodash/fp';\nimport { idArg, nonNull } from 'nexus';\nimport { pagination } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nconst { withDefaultPagination } = pagination;\n\ntype ContentTypeArgsOptions = {\n multiple?: boolean;\n isNested?: boolean;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const { service: getService } = strapi.plugin('graphql');\n\n return {\n getContentTypeArgs(\n contentType: Struct.Schema,\n { multiple = true, isNested = false }: ContentTypeArgsOptions = {}\n ) {\n const { naming } = getService('utils');\n const { args } = getService('internals');\n\n const { modelType } = contentType;\n\n // Components\n if (modelType === 'component') {\n if (!multiple) return {};\n\n return {\n filters: naming.getFiltersInputTypeName(contentType),\n pagination: args.PaginationArg,\n sort: args.SortArg,\n };\n }\n\n const { kind } = contentType;\n\n // On non–D&P roots (e.g. User) these args do not version the parent document, but they\n // are required: association resolvers inherit them into nested D&P relations (see\n // builders/resolvers/association.ts + rootQueryArgs). Omitting them broke draft/published\n // control for populated relations (e.g. github.com/strapi/strapi/issues/25746).\n //\n // Future direction: add `status` / `hasPublishedVersion` to GraphQL args on nested\n // to-many (and to-one) relation fields when the *target* content type has D&P, instead\n // of relying on root-level “context” that is easy to misread (args on User affecting\n // Articles). That would allow different publication settings per relation branch, match\n // how developers think about the graph, and let non-DP roots drop these args if desired.\n // Would require extending getContentTypeArgs(..., { isNested: true }) for D&P targets\n // and teaching association.ts to honor args.hasPublishedVersion on nested fields, not\n // only root inheritance.\n const publicationArgs = {\n status: args.PublicationStatusArg,\n hasPublishedVersion: args.HasPublishedVersionArg,\n };\n\n // Collection Types\n if (kind === 'collectionType') {\n if (!multiple) {\n return {\n documentId: nonNull(idArg()),\n ...publicationArgs,\n };\n }\n\n const params: Record<string, unknown> = {\n filters: naming.getFiltersInputTypeName(contentType),\n pagination: args.PaginationArg,\n sort: args.SortArg,\n };\n\n if (!isNested) {\n Object.assign(params, publicationArgs);\n }\n\n return params;\n }\n\n // Single Types\n if (kind === 'singleType') {\n const params: Record<string, unknown> = {};\n\n if (!isNested) {\n Object.assign(params, publicationArgs);\n }\n\n return params;\n }\n },\n\n /**\n * Filter an object entries and keep only those whose value is a unique scalar attribute\n */\n getUniqueScalarAttributes(attributes: Struct.SchemaAttributes) {\n const { isStrapiScalar } = getService('utils').attributes;\n\n const uniqueAttributes = entries(attributes).filter(\n ([, attribute]) => isStrapiScalar(attribute) && 'unique' in attribute && attribute.unique\n );\n\n return Object.fromEntries(uniqueAttributes);\n },\n\n /**\n * Map each value from an attribute to a FiltersInput type name\n * @param {object} attributes - The attributes object to transform\n * @return {Object<string, string>}\n */\n scalarAttributesToFiltersMap(attributes: Struct.SchemaAttributes) {\n return mapValues((attribute) => {\n const { mappers, naming } = getService('utils');\n\n const gqlScalar = mappers.strapiScalarToGraphQLScalar(attribute.type);\n\n return naming.getScalarFilterInputTypeName(gqlScalar);\n }, attributes);\n },\n\n /**\n * Apply basic transform to GQL args\n */\n transformArgs(\n args: any,\n {\n contentType,\n usePagination = false,\n }: { contentType: Struct.ContentTypeSchema; usePagination?: boolean }\n ) {\n const { mappers } = getService('utils');\n const { config } = strapi.plugin('graphql');\n const { pagination = {}, filters = {} } = args;\n\n // Init\n const newArgs = omit(['pagination', 'filters'], args);\n\n // Pagination\n if (usePagination) {\n const defaultLimit: number = config('defaultLimit');\n const maxLimit: number = config('maxLimit');\n\n Object.assign(\n newArgs,\n withDefaultPagination(pagination, {\n maxLimit,\n defaults: {\n offset: { limit: defaultLimit },\n page: { pageSize: defaultLimit },\n },\n })\n );\n }\n\n // Filters\n if (args.filters) {\n Object.assign(newArgs, {\n filters: mappers.graphQLFiltersToStrapiQuery(filters, contentType),\n });\n }\n\n return newArgs;\n },\n };\n};\n"],"names":["withDefaultPagination","pagination","strapi","service","getService","plugin","getContentTypeArgs","contentType","multiple","isNested","naming","args","modelType","filters","getFiltersInputTypeName","PaginationArg","sort","SortArg","kind","publicationArgs","status","PublicationStatusArg","hasPublishedVersion","HasPublishedVersionArg","documentId","nonNull","idArg","params","Object","assign","getUniqueScalarAttributes","attributes","isStrapiScalar","uniqueAttributes","entries","filter","attribute","unique","fromEntries","scalarAttributesToFiltersMap","mapValues","mappers","gqlScalar","strapiScalarToGraphQLScalar","type","getScalarFilterInputTypeName","transformArgs","usePagination","config","newArgs","omit","defaultLimit","maxLimit","defaults","offset","limit","page","pageSize","graphQLFiltersToStrapiQuery"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { omit, mapValues, entries } from 'lodash/fp';
2
2
  import { nonNull, idArg } from 'nexus';
3
- import { pagination, contentTypes } from '@strapi/utils';
3
+ import { pagination } from '@strapi/utils';
4
4
 
5
5
  const { withDefaultPagination } = pagination;
6
6
  var utils = (({ strapi })=>{
@@ -20,42 +20,46 @@ var utils = (({ strapi })=>{
20
20
  };
21
21
  }
22
22
  const { kind } = contentType;
23
- const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);
23
+ // On non–D&P roots (e.g. User) these args do not version the parent document, but they
24
+ // are required: association resolvers inherit them into nested D&P relations (see
25
+ // builders/resolvers/association.ts + rootQueryArgs). Omitting them broke draft/published
26
+ // control for populated relations (e.g. github.com/strapi/strapi/issues/25746).
27
+ //
28
+ // Future direction: add `status` / `hasPublishedVersion` to GraphQL args on nested
29
+ // to-many (and to-one) relation fields when the *target* content type has D&P, instead
30
+ // of relying on root-level “context” that is easy to misread (args on User affecting
31
+ // Articles). That would allow different publication settings per relation branch, match
32
+ // how developers think about the graph, and let non-DP roots drop these args if desired.
33
+ // Would require extending getContentTypeArgs(..., { isNested: true }) for D&P targets
34
+ // and teaching association.ts to honor args.hasPublishedVersion on nested fields, not
35
+ // only root inheritance.
36
+ const publicationArgs = {
37
+ status: args.PublicationStatusArg,
38
+ hasPublishedVersion: args.HasPublishedVersionArg
39
+ };
24
40
  // Collection Types
25
41
  if (kind === 'collectionType') {
26
42
  if (!multiple) {
27
- const params = {
28
- documentId: nonNull(idArg())
43
+ return {
44
+ documentId: nonNull(idArg()),
45
+ ...publicationArgs
29
46
  };
30
- if (hasDraftAndPublish) {
31
- Object.assign(params, {
32
- status: args.PublicationStatusArg,
33
- hasPublishedVersion: args.HasPublishedVersionArg
34
- });
35
- }
36
- return params;
37
47
  }
38
48
  const params = {
39
49
  filters: naming.getFiltersInputTypeName(contentType),
40
50
  pagination: args.PaginationArg,
41
51
  sort: args.SortArg
42
52
  };
43
- if (!isNested && hasDraftAndPublish) {
44
- Object.assign(params, {
45
- status: args.PublicationStatusArg,
46
- hasPublishedVersion: args.HasPublishedVersionArg
47
- });
53
+ if (!isNested) {
54
+ Object.assign(params, publicationArgs);
48
55
  }
49
56
  return params;
50
57
  }
51
58
  // Single Types
52
59
  if (kind === 'singleType') {
53
60
  const params = {};
54
- if (!isNested && hasDraftAndPublish) {
55
- Object.assign(params, {
56
- status: args.PublicationStatusArg,
57
- hasPublishedVersion: args.HasPublishedVersionArg
58
- });
61
+ if (!isNested) {
62
+ Object.assign(params, publicationArgs);
59
63
  }
60
64
  return params;
61
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../../server/src/services/builders/utils.ts"],"sourcesContent":["import { entries, mapValues, omit } from 'lodash/fp';\nimport { idArg, nonNull } from 'nexus';\nimport { contentTypes, pagination } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nconst { withDefaultPagination } = pagination;\n\ntype ContentTypeArgsOptions = {\n multiple?: boolean;\n isNested?: boolean;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const { service: getService } = strapi.plugin('graphql');\n\n return {\n getContentTypeArgs(\n contentType: Struct.Schema,\n { multiple = true, isNested = false }: ContentTypeArgsOptions = {}\n ) {\n const { naming } = getService('utils');\n const { args } = getService('internals');\n\n const { modelType } = contentType;\n\n // Components\n if (modelType === 'component') {\n if (!multiple) return {};\n\n return {\n filters: naming.getFiltersInputTypeName(contentType),\n pagination: args.PaginationArg,\n sort: args.SortArg,\n };\n }\n\n const { kind } = contentType;\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);\n\n // Collection Types\n if (kind === 'collectionType') {\n if (!multiple) {\n const params: Record<string, unknown> = {\n documentId: nonNull(idArg()),\n };\n\n if (hasDraftAndPublish) {\n Object.assign(params, {\n status: args.PublicationStatusArg,\n hasPublishedVersion: args.HasPublishedVersionArg,\n });\n }\n\n return params;\n }\n\n const params = {\n filters: naming.getFiltersInputTypeName(contentType),\n pagination: args.PaginationArg,\n sort: args.SortArg,\n };\n\n if (!isNested && hasDraftAndPublish) {\n Object.assign(params, {\n status: args.PublicationStatusArg,\n hasPublishedVersion: args.HasPublishedVersionArg,\n });\n }\n\n return params;\n }\n\n // Single Types\n if (kind === 'singleType') {\n const params = {};\n\n if (!isNested && hasDraftAndPublish) {\n Object.assign(params, {\n status: args.PublicationStatusArg,\n hasPublishedVersion: args.HasPublishedVersionArg,\n });\n }\n\n return params;\n }\n },\n\n /**\n * Filter an object entries and keep only those whose value is a unique scalar attribute\n */\n getUniqueScalarAttributes(attributes: Struct.SchemaAttributes) {\n const { isStrapiScalar } = getService('utils').attributes;\n\n const uniqueAttributes = entries(attributes).filter(\n ([, attribute]) => isStrapiScalar(attribute) && 'unique' in attribute && attribute.unique\n );\n\n return Object.fromEntries(uniqueAttributes);\n },\n\n /**\n * Map each value from an attribute to a FiltersInput type name\n * @param {object} attributes - The attributes object to transform\n * @return {Object<string, string>}\n */\n scalarAttributesToFiltersMap(attributes: Struct.SchemaAttributes) {\n return mapValues((attribute) => {\n const { mappers, naming } = getService('utils');\n\n const gqlScalar = mappers.strapiScalarToGraphQLScalar(attribute.type);\n\n return naming.getScalarFilterInputTypeName(gqlScalar);\n }, attributes);\n },\n\n /**\n * Apply basic transform to GQL args\n */\n transformArgs(\n args: any,\n {\n contentType,\n usePagination = false,\n }: { contentType: Struct.ContentTypeSchema; usePagination?: boolean }\n ) {\n const { mappers } = getService('utils');\n const { config } = strapi.plugin('graphql');\n const { pagination = {}, filters = {} } = args;\n\n // Init\n const newArgs = omit(['pagination', 'filters'], args);\n\n // Pagination\n if (usePagination) {\n const defaultLimit: number = config('defaultLimit');\n const maxLimit: number = config('maxLimit');\n\n Object.assign(\n newArgs,\n withDefaultPagination(pagination, {\n maxLimit,\n defaults: {\n offset: { limit: defaultLimit },\n page: { pageSize: defaultLimit },\n },\n })\n );\n }\n\n // Filters\n if (args.filters) {\n Object.assign(newArgs, {\n filters: mappers.graphQLFiltersToStrapiQuery(filters, contentType),\n });\n }\n\n return newArgs;\n },\n };\n};\n"],"names":["withDefaultPagination","pagination","strapi","service","getService","plugin","getContentTypeArgs","contentType","multiple","isNested","naming","args","modelType","filters","getFiltersInputTypeName","PaginationArg","sort","SortArg","kind","hasDraftAndPublish","contentTypes","params","documentId","nonNull","idArg","Object","assign","status","PublicationStatusArg","hasPublishedVersion","HasPublishedVersionArg","getUniqueScalarAttributes","attributes","isStrapiScalar","uniqueAttributes","entries","filter","attribute","unique","fromEntries","scalarAttributesToFiltersMap","mapValues","mappers","gqlScalar","strapiScalarToGraphQLScalar","type","getScalarFilterInputTypeName","transformArgs","usePagination","config","newArgs","omit","defaultLimit","maxLimit","defaults","offset","limit","page","pageSize","graphQLFiltersToStrapiQuery"],"mappings":"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"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../server/src/services/builders/utils.ts"],"sourcesContent":["import { entries, mapValues, omit } from 'lodash/fp';\nimport { idArg, nonNull } from 'nexus';\nimport { pagination } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nconst { withDefaultPagination } = pagination;\n\ntype ContentTypeArgsOptions = {\n multiple?: boolean;\n isNested?: boolean;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const { service: getService } = strapi.plugin('graphql');\n\n return {\n getContentTypeArgs(\n contentType: Struct.Schema,\n { multiple = true, isNested = false }: ContentTypeArgsOptions = {}\n ) {\n const { naming } = getService('utils');\n const { args } = getService('internals');\n\n const { modelType } = contentType;\n\n // Components\n if (modelType === 'component') {\n if (!multiple) return {};\n\n return {\n filters: naming.getFiltersInputTypeName(contentType),\n pagination: args.PaginationArg,\n sort: args.SortArg,\n };\n }\n\n const { kind } = contentType;\n\n // On non–D&P roots (e.g. User) these args do not version the parent document, but they\n // are required: association resolvers inherit them into nested D&P relations (see\n // builders/resolvers/association.ts + rootQueryArgs). Omitting them broke draft/published\n // control for populated relations (e.g. github.com/strapi/strapi/issues/25746).\n //\n // Future direction: add `status` / `hasPublishedVersion` to GraphQL args on nested\n // to-many (and to-one) relation fields when the *target* content type has D&P, instead\n // of relying on root-level “context” that is easy to misread (args on User affecting\n // Articles). That would allow different publication settings per relation branch, match\n // how developers think about the graph, and let non-DP roots drop these args if desired.\n // Would require extending getContentTypeArgs(..., { isNested: true }) for D&P targets\n // and teaching association.ts to honor args.hasPublishedVersion on nested fields, not\n // only root inheritance.\n const publicationArgs = {\n status: args.PublicationStatusArg,\n hasPublishedVersion: args.HasPublishedVersionArg,\n };\n\n // Collection Types\n if (kind === 'collectionType') {\n if (!multiple) {\n return {\n documentId: nonNull(idArg()),\n ...publicationArgs,\n };\n }\n\n const params: Record<string, unknown> = {\n filters: naming.getFiltersInputTypeName(contentType),\n pagination: args.PaginationArg,\n sort: args.SortArg,\n };\n\n if (!isNested) {\n Object.assign(params, publicationArgs);\n }\n\n return params;\n }\n\n // Single Types\n if (kind === 'singleType') {\n const params: Record<string, unknown> = {};\n\n if (!isNested) {\n Object.assign(params, publicationArgs);\n }\n\n return params;\n }\n },\n\n /**\n * Filter an object entries and keep only those whose value is a unique scalar attribute\n */\n getUniqueScalarAttributes(attributes: Struct.SchemaAttributes) {\n const { isStrapiScalar } = getService('utils').attributes;\n\n const uniqueAttributes = entries(attributes).filter(\n ([, attribute]) => isStrapiScalar(attribute) && 'unique' in attribute && attribute.unique\n );\n\n return Object.fromEntries(uniqueAttributes);\n },\n\n /**\n * Map each value from an attribute to a FiltersInput type name\n * @param {object} attributes - The attributes object to transform\n * @return {Object<string, string>}\n */\n scalarAttributesToFiltersMap(attributes: Struct.SchemaAttributes) {\n return mapValues((attribute) => {\n const { mappers, naming } = getService('utils');\n\n const gqlScalar = mappers.strapiScalarToGraphQLScalar(attribute.type);\n\n return naming.getScalarFilterInputTypeName(gqlScalar);\n }, attributes);\n },\n\n /**\n * Apply basic transform to GQL args\n */\n transformArgs(\n args: any,\n {\n contentType,\n usePagination = false,\n }: { contentType: Struct.ContentTypeSchema; usePagination?: boolean }\n ) {\n const { mappers } = getService('utils');\n const { config } = strapi.plugin('graphql');\n const { pagination = {}, filters = {} } = args;\n\n // Init\n const newArgs = omit(['pagination', 'filters'], args);\n\n // Pagination\n if (usePagination) {\n const defaultLimit: number = config('defaultLimit');\n const maxLimit: number = config('maxLimit');\n\n Object.assign(\n newArgs,\n withDefaultPagination(pagination, {\n maxLimit,\n defaults: {\n offset: { limit: defaultLimit },\n page: { pageSize: defaultLimit },\n },\n })\n );\n }\n\n // Filters\n if (args.filters) {\n Object.assign(newArgs, {\n filters: mappers.graphQLFiltersToStrapiQuery(filters, contentType),\n });\n }\n\n return newArgs;\n },\n };\n};\n"],"names":["withDefaultPagination","pagination","strapi","service","getService","plugin","getContentTypeArgs","contentType","multiple","isNested","naming","args","modelType","filters","getFiltersInputTypeName","PaginationArg","sort","SortArg","kind","publicationArgs","status","PublicationStatusArg","hasPublishedVersion","HasPublishedVersionArg","documentId","nonNull","idArg","params","Object","assign","getUniqueScalarAttributes","attributes","isStrapiScalar","uniqueAttributes","entries","filter","attribute","unique","fromEntries","scalarAttributesToFiltersMap","mapValues","mappers","gqlScalar","strapiScalarToGraphQLScalar","type","getScalarFilterInputTypeName","transformArgs","usePagination","config","newArgs","omit","defaultLimit","maxLimit","defaults","offset","limit","page","pageSize","graphQLFiltersToStrapiQuery"],"mappings":"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"}
@@ -34,6 +34,13 @@ declare const _default: {
34
34
  filters: any;
35
35
  pagination: any;
36
36
  sort: any;
37
+ } | {
38
+ status: any;
39
+ hasPublishedVersion: any;
40
+ documentId: import("nexus/dist/core").NexusNonNullDef<any>;
41
+ filters?: undefined;
42
+ pagination?: undefined;
43
+ sort?: undefined;
37
44
  } | undefined;
38
45
  getUniqueScalarAttributes(attributes: import("@strapi/types/dist/struct").SchemaAttributes): {
39
46
  [k: string]: import("@strapi/types/dist/schema/attribute").AnyAttribute;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGxC,wBAIE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGxC,wBAIE"}
@@ -33,6 +33,13 @@ declare const _default: ({ strapi }: {
33
33
  filters: any;
34
34
  pagination: any;
35
35
  sort: any;
36
+ } | {
37
+ status: any;
38
+ hasPublishedVersion: any;
39
+ documentId: import("nexus/dist/core").NexusNonNullDef<any>;
40
+ filters?: undefined;
41
+ pagination?: undefined;
42
+ sort?: undefined;
36
43
  } | undefined;
37
44
  getUniqueScalarAttributes(attributes: import("@strapi/types/dist/struct").SchemaAttributes): {
38
45
  [k: string]: import("@strapi/types/dist/schema/attribute").AnyAttribute;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/builders/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAsB1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;qCAkBzB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;IAI/C;;OAEG;gBACO,MAAM,YAAY,YAAY;IAexC;;;OAGG;iBACU,MAAM;IAInB;;;OAGG;cACO,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;AAlCpB,wBA4CE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/builders/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAsB1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;qCAkBzB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;IAI/C;;OAEG;gBACO,MAAM,YAAY,YAAY;IAexC;;;OAGG;iBACU,MAAM;IAInB;;;OAGG;cACO,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAlCpB,wBA4CE"}
@@ -11,6 +11,13 @@ declare const _default: ({ strapi }: {
11
11
  filters: any;
12
12
  pagination: any;
13
13
  sort: any;
14
+ } | {
15
+ status: any;
16
+ hasPublishedVersion: any;
17
+ documentId: import("nexus/dist/core").NexusNonNullDef<any>;
18
+ filters?: undefined;
19
+ pagination?: undefined;
20
+ sort?: undefined;
14
21
  } | undefined;
15
22
  /**
16
23
  * Filter an object entries and keep only those whose value is a unique scalar attribute
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/builders/utils.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIlD,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;qCAE0B;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;oCAKhC,OAAO,MAAM,2BACa,sBAAsB;;;;;IAsE/D;;OAEG;0CACmC,OAAO,gBAAgB;;;IAU7D;;;;OAIG;6CACsC,OAAO,gBAAgB;IAUhE;;OAEG;wBAEK,GAAG,mCAIN;QAAE,WAAW,EAAE,OAAO,iBAAiB,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE;;AAhH3E,wBAoJE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/builders/utils.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIlD,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;qCAE0B;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;oCAKhC,OAAO,MAAM,2BACa,sBAAsB;;;;;;;;;;;;IAwE/D;;OAEG;0CACmC,OAAO,gBAAgB;;;IAU7D;;;;OAIG;6CACsC,OAAO,gBAAgB;IAUhE;;OAEG;wBAEK,GAAG,mCAIN;QAAE,WAAW,EAAE,OAAO,iBAAiB,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE;;AAlH3E,wBAsJE"}
@@ -21,6 +21,13 @@ export declare const services: {
21
21
  filters: any;
22
22
  pagination: any;
23
23
  sort: any;
24
+ } | {
25
+ status: any;
26
+ hasPublishedVersion: any;
27
+ documentId: import("nexus/dist/core").NexusNonNullDef<any>;
28
+ filters?: undefined;
29
+ pagination?: undefined;
30
+ sort?: undefined;
24
31
  } | undefined;
25
32
  getUniqueScalarAttributes(attributes: import("@strapi/types/dist/struct").SchemaAttributes): {
26
33
  [k: string]: import("@strapi/types/dist/schema/attribute").AnyAttribute;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";AASA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASpB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";AASA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/plugin-graphql",
3
- "version": "5.40.0",
3
+ "version": "5.41.0",
4
4
  "description": "Adds GraphQL endpoint with default API methods.",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -65,7 +65,7 @@
65
65
  "@koa/cors": "5.0.0",
66
66
  "@strapi/design-system": "2.2.0",
67
67
  "@strapi/icons": "2.2.0",
68
- "@strapi/utils": "5.40.0",
68
+ "@strapi/utils": "5.41.0",
69
69
  "graphql": "^16.8.1",
70
70
  "graphql-depth-limit": "^1.1.0",
71
71
  "graphql-playground-middleware-koa": "^1.6.21",
@@ -77,19 +77,19 @@
77
77
  "pluralize": "8.0.0"
78
78
  },
79
79
  "devDependencies": {
80
- "@strapi/strapi": "5.40.0",
81
- "@strapi/types": "5.40.0",
80
+ "@strapi/strapi": "5.41.0",
81
+ "@strapi/types": "5.41.0",
82
82
  "@types/graphql-depth-limit": "1.1.5",
83
83
  "@types/koa-bodyparser": "4.3.12",
84
84
  "@types/koa__cors": "5.0.0",
85
85
  "cross-env": "^7.0.3",
86
- "eslint-config-custom": "5.40.0",
86
+ "eslint-config-custom": "5.41.0",
87
87
  "koa": "2.16.4",
88
88
  "react": "18.3.1",
89
89
  "react-dom": "18.3.1",
90
90
  "react-router-dom": "6.30.3",
91
91
  "styled-components": "6.1.8",
92
- "tsconfig": "5.40.0",
92
+ "tsconfig": "5.41.0",
93
93
  "typescript": "5.4.4"
94
94
  },
95
95
  "peerDependencies": {