{"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      // Collection Types\n      if (kind === 'collectionType') {\n        if (!multiple) {\n          return {\n            documentId: nonNull(idArg()),\n            status: args.PublicationStatusArg,\n          };\n        }\n\n        const params = {\n          filters: naming.getFiltersInputTypeName(contentType),\n          pagination: args.PaginationArg,\n          sort: args.SortArg,\n        };\n\n        if (!isNested) {\n          Object.assign(params, { status: args.PublicationStatusArg });\n        }\n\n        return params;\n      }\n\n      // Single Types\n      if (kind === 'singleType') {\n        const params = {};\n\n        if (!isNested) {\n          Object.assign(params, { status: args.PublicationStatusArg });\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","documentId","nonNull","idArg","status","PublicationStatusArg","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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"}