{"version":3,"file":"graphql.mjs","sources":["../../server/src/graphql.ts"],"sourcesContent":["import { propEq, identity } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst { ValidationError } = errors;\n\nconst LOCALE_SCALAR_TYPENAME = 'I18NLocaleCode';\nconst LOCALE_ARG_PLUGIN_NAME = 'I18NLocaleArg';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n  register() {\n    const { service: getGraphQLService } = strapi.plugin('graphql');\n    const { service: getI18NService } = strapi.plugin('i18n');\n\n    const { isLocalizedContentType } = getI18NService('content-types');\n\n    const extensionService = getGraphQLService('extension');\n\n    extensionService.shadowCRUD('plugin::i18n.locale').disableMutations();\n\n    // Disable unwanted fields for localized content types\n    Object.entries(strapi.contentTypes).forEach(([uid, ct]) => {\n      if (isLocalizedContentType(ct)) {\n        // Disable locale field in localized inputs\n        extensionService.shadowCRUD(uid).field('locale').disableInput();\n\n        // Disable localizations field in localized inputs\n        extensionService.shadowCRUD(uid).field('localizations').disableInput();\n      }\n    });\n\n    extensionService.use(({ nexus, typeRegistry }: any) => {\n      const i18nLocaleArgPlugin = getI18nLocaleArgPlugin({ nexus, typeRegistry });\n      const i18nLocaleScalar = getLocaleScalar({ nexus });\n      return {\n        plugins: [i18nLocaleArgPlugin],\n        types: [i18nLocaleScalar],\n\n        resolversConfig: {\n          // Modify the default scope associated to find and findOne locale queries to match the actual action name\n          'Query.i18NLocale': { auth: { scope: 'plugin::i18n.locales.listLocales' } },\n          'Query.i18NLocales': { auth: { scope: 'plugin::i18n.locales.listLocales' } },\n        },\n      };\n    });\n  },\n});\n\nconst getLocaleScalar = ({ nexus }: any) => {\n  const { service: getI18NService } = strapi.plugin('i18n');\n\n  const locales = getI18NService('iso-locales').getIsoLocales();\n\n  return nexus.scalarType({\n    name: LOCALE_SCALAR_TYPENAME,\n\n    description: 'A string used to identify an i18n locale',\n\n    serialize: identity,\n    parseValue: identity,\n\n    parseLiteral(ast: any) {\n      if (ast.kind !== 'StringValue') {\n        throw new ValidationError('Locale cannot represent non string type');\n      }\n\n      const isValidLocale = ast.value === '*' || locales.find(propEq('code', ast.value));\n\n      if (!isValidLocale) {\n        throw new ValidationError('Unknown locale supplied');\n      }\n\n      return ast.value;\n    },\n  });\n};\n\nconst getI18nLocaleArgPlugin = ({ nexus, typeRegistry }: any) => {\n  const { service: getI18NService } = strapi.plugin('i18n');\n\n  const { isLocalizedContentType } = getI18NService('content-types');\n\n  return nexus.plugin({\n    name: LOCALE_ARG_PLUGIN_NAME,\n\n    onAddOutputField(config: any) {\n      // Add the locale arg to the queries on localized CTs\n\n      const { parentType } = config;\n\n      // Only target queries or mutations\n      if (parentType !== 'Query' && parentType !== 'Mutation') {\n        return;\n      }\n\n      let contentType;\n\n      if (config?.extensions?.strapi?.contentType) {\n        contentType = config.extensions.strapi.contentType;\n      } else {\n        const registryType = typeRegistry.get(config.type);\n\n        if (!registryType) {\n          return;\n        }\n\n        contentType = registryType.config.contentType;\n      }\n\n      // Ignore non-localized content types\n      if (!isLocalizedContentType(contentType)) {\n        return;\n      }\n\n      if (!config.args) {\n        config.args = {};\n      }\n\n      config.args.locale = nexus.arg({\n        type: LOCALE_SCALAR_TYPENAME,\n        description: 'The locale to use for the query',\n      });\n    },\n  });\n};\n"],"names":["ValidationError","errors","LOCALE_SCALAR_TYPENAME","LOCALE_ARG_PLUGIN_NAME","strapi","register","service","getGraphQLService","plugin","getI18NService","isLocalizedContentType","extensionService","shadowCRUD","disableMutations","Object","entries","contentTypes","forEach","uid","ct","field","disableInput","use","nexus","typeRegistry","i18nLocaleArgPlugin","getI18nLocaleArgPlugin","i18nLocaleScalar","getLocaleScalar","plugins","types","resolversConfig","auth","scope","locales","getIsoLocales","scalarType","name","description","serialize","identity","parseValue","parseLiteral","ast","kind","isValidLocale","value","find","propEq","onAddOutputField","config","parentType","contentType","extensions","registryType","get","type","args","locale","arg"],"mappings":"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"}