@strapi/plugin-graphql 0.0.0-experimental.62ce06180fe9a772eaeb3d43d238b26644f39f7c → 0.0.0-experimental.6340da17068c3bed7fb006e7bcc554c71129e282
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/LICENSE +18 -3
- package/dist/admin/index.js +58 -167
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +54 -168
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +13 -0
- package/dist/admin/package.json.js.map +1 -0
- package/dist/admin/package.json.mjs +8 -0
- package/dist/admin/package.json.mjs.map +1 -0
- package/dist/admin/pluginId.js +6 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +4 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/translations/cs.json.js +10 -0
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/translations/cs.json.mjs +8 -0
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/translations/da.json.js +10 -0
- package/dist/admin/translations/da.json.js.map +1 -0
- package/dist/admin/translations/da.json.mjs +8 -0
- package/dist/admin/translations/da.json.mjs.map +1 -0
- package/dist/admin/translations/en.json.js +10 -0
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/translations/en.json.mjs +8 -0
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/translations/es.json.js +10 -0
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/translations/es.json.mjs +8 -0
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/translations/fr.json.js +10 -0
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/translations/fr.json.mjs +8 -0
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/translations/pl.json.js +10 -0
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/translations/pl.json.mjs +8 -0
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/translations/ru.json.js +10 -0
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/translations/ru.json.mjs +8 -0
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/translations/sk.json.js +10 -0
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/translations/sk.json.mjs +8 -0
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/translations/sv.json.js +10 -0
- package/dist/admin/translations/sv.json.js.map +1 -0
- package/dist/admin/translations/sv.json.mjs +8 -0
- package/dist/admin/translations/sv.json.mjs.map +1 -0
- package/dist/admin/translations/tr.json.js +10 -0
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/translations/tr.json.mjs +8 -0
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/translations/uk.json.js +10 -0
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/translations/uk.json.mjs +8 -0
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/translations/zh-Hans.json.js +10 -0
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/translations/zh-Hans.json.mjs +8 -0
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/translations/zh.json.js +10 -0
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/translations/zh.json.mjs +8 -0
- package/dist/admin/translations/zh.json.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/server/bootstrap.js +221 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +212 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/config/default-config.js +13 -0
- package/dist/server/config/default-config.js.map +1 -0
- package/dist/server/config/default-config.mjs +11 -0
- package/dist/server/config/default-config.mjs.map +1 -0
- package/dist/server/config/index.js +10 -0
- package/dist/server/config/index.js.map +1 -0
- package/dist/server/config/index.mjs +8 -0
- package/dist/server/config/index.mjs.map +1 -0
- package/dist/server/format-graphql-error.js +60 -0
- package/dist/server/format-graphql-error.js.map +1 -0
- package/dist/server/format-graphql-error.mjs +58 -0
- package/dist/server/format-graphql-error.mjs.map +1 -0
- package/dist/server/index.js +12 -3112
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +11 -3092
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/services/builders/dynamic-zones.js +75 -0
- package/dist/server/services/builders/dynamic-zones.js.map +1 -0
- package/dist/server/services/builders/dynamic-zones.mjs +73 -0
- package/dist/server/services/builders/dynamic-zones.mjs.map +1 -0
- package/dist/server/services/builders/entity.js +38 -0
- package/dist/server/services/builders/entity.js.map +1 -0
- package/dist/server/services/builders/entity.mjs +36 -0
- package/dist/server/services/builders/entity.mjs.map +1 -0
- package/dist/server/services/builders/enums.js +24 -0
- package/dist/server/services/builders/enums.js.map +1 -0
- package/dist/server/services/builders/enums.mjs +22 -0
- package/dist/server/services/builders/enums.mjs.map +1 -0
- package/dist/server/services/builders/filters/content-type.js +94 -0
- package/dist/server/services/builders/filters/content-type.js.map +1 -0
- package/dist/server/services/builders/filters/content-type.mjs +92 -0
- package/dist/server/services/builders/filters/content-type.mjs.map +1 -0
- package/dist/server/services/builders/filters/index.js +10 -0
- package/dist/server/services/builders/filters/index.js.map +1 -0
- package/dist/server/services/builders/filters/index.mjs +8 -0
- package/dist/server/services/builders/filters/index.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/and.js +17 -0
- package/dist/server/services/builders/filters/operators/and.js.map +1 -0
- package/dist/server/services/builders/filters/operators/and.mjs +15 -0
- package/dist/server/services/builders/filters/operators/and.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/between.js +17 -0
- package/dist/server/services/builders/filters/operators/between.js.map +1 -0
- package/dist/server/services/builders/filters/operators/between.mjs +15 -0
- package/dist/server/services/builders/filters/operators/between.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/contains.js +15 -0
- package/dist/server/services/builders/filters/operators/contains.js.map +1 -0
- package/dist/server/services/builders/filters/operators/contains.mjs +13 -0
- package/dist/server/services/builders/filters/operators/contains.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/containsi.js +15 -0
- package/dist/server/services/builders/filters/operators/containsi.js.map +1 -0
- package/dist/server/services/builders/filters/operators/containsi.mjs +13 -0
- package/dist/server/services/builders/filters/operators/containsi.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/ends-with.js +15 -0
- package/dist/server/services/builders/filters/operators/ends-with.js.map +1 -0
- package/dist/server/services/builders/filters/operators/ends-with.mjs +13 -0
- package/dist/server/services/builders/filters/operators/ends-with.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/eq.js +22 -0
- package/dist/server/services/builders/filters/operators/eq.js.map +1 -0
- package/dist/server/services/builders/filters/operators/eq.mjs +20 -0
- package/dist/server/services/builders/filters/operators/eq.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/eqi.js +15 -0
- package/dist/server/services/builders/filters/operators/eqi.js.map +1 -0
- package/dist/server/services/builders/filters/operators/eqi.mjs +13 -0
- package/dist/server/services/builders/filters/operators/eqi.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/gt.js +15 -0
- package/dist/server/services/builders/filters/operators/gt.js.map +1 -0
- package/dist/server/services/builders/filters/operators/gt.mjs +13 -0
- package/dist/server/services/builders/filters/operators/gt.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/gte.js +15 -0
- package/dist/server/services/builders/filters/operators/gte.js.map +1 -0
- package/dist/server/services/builders/filters/operators/gte.mjs +13 -0
- package/dist/server/services/builders/filters/operators/gte.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/in.js +17 -0
- package/dist/server/services/builders/filters/operators/in.js.map +1 -0
- package/dist/server/services/builders/filters/operators/in.mjs +15 -0
- package/dist/server/services/builders/filters/operators/in.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/index.js +57 -0
- package/dist/server/services/builders/filters/operators/index.js.map +1 -0
- package/dist/server/services/builders/filters/operators/index.mjs +55 -0
- package/dist/server/services/builders/filters/operators/index.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/lt.js +15 -0
- package/dist/server/services/builders/filters/operators/lt.js.map +1 -0
- package/dist/server/services/builders/filters/operators/lt.mjs +13 -0
- package/dist/server/services/builders/filters/operators/lt.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/lte.js +15 -0
- package/dist/server/services/builders/filters/operators/lte.js.map +1 -0
- package/dist/server/services/builders/filters/operators/lte.mjs +13 -0
- package/dist/server/services/builders/filters/operators/lte.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/ne.js +15 -0
- package/dist/server/services/builders/filters/operators/ne.js.map +1 -0
- package/dist/server/services/builders/filters/operators/ne.mjs +13 -0
- package/dist/server/services/builders/filters/operators/ne.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/nei.js +15 -0
- package/dist/server/services/builders/filters/operators/nei.js.map +1 -0
- package/dist/server/services/builders/filters/operators/nei.mjs +13 -0
- package/dist/server/services/builders/filters/operators/nei.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/not-contains.js +15 -0
- package/dist/server/services/builders/filters/operators/not-contains.js.map +1 -0
- package/dist/server/services/builders/filters/operators/not-contains.mjs +13 -0
- package/dist/server/services/builders/filters/operators/not-contains.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/not-containsi.js +15 -0
- package/dist/server/services/builders/filters/operators/not-containsi.js.map +1 -0
- package/dist/server/services/builders/filters/operators/not-containsi.mjs +13 -0
- package/dist/server/services/builders/filters/operators/not-containsi.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/not-in.js +17 -0
- package/dist/server/services/builders/filters/operators/not-in.js.map +1 -0
- package/dist/server/services/builders/filters/operators/not-in.mjs +15 -0
- package/dist/server/services/builders/filters/operators/not-in.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/not-null.js +13 -0
- package/dist/server/services/builders/filters/operators/not-null.js.map +1 -0
- package/dist/server/services/builders/filters/operators/not-null.mjs +11 -0
- package/dist/server/services/builders/filters/operators/not-null.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/not.js +24 -0
- package/dist/server/services/builders/filters/operators/not.js.map +1 -0
- package/dist/server/services/builders/filters/operators/not.mjs +22 -0
- package/dist/server/services/builders/filters/operators/not.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/null.js +13 -0
- package/dist/server/services/builders/filters/operators/null.js.map +1 -0
- package/dist/server/services/builders/filters/operators/null.mjs +11 -0
- package/dist/server/services/builders/filters/operators/null.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/or.js +17 -0
- package/dist/server/services/builders/filters/operators/or.js.map +1 -0
- package/dist/server/services/builders/filters/operators/or.mjs +15 -0
- package/dist/server/services/builders/filters/operators/or.mjs.map +1 -0
- package/dist/server/services/builders/filters/operators/starts-with.js +15 -0
- package/dist/server/services/builders/filters/operators/starts-with.js.map +1 -0
- package/dist/server/services/builders/filters/operators/starts-with.mjs +13 -0
- package/dist/server/services/builders/filters/operators/starts-with.mjs.map +1 -0
- package/dist/server/services/builders/generic-morph.js +38 -0
- package/dist/server/services/builders/generic-morph.js.map +1 -0
- package/dist/server/services/builders/generic-morph.mjs +36 -0
- package/dist/server/services/builders/generic-morph.mjs.map +1 -0
- package/dist/server/services/builders/index.js +75 -0
- package/dist/server/services/builders/index.js.map +1 -0
- package/dist/server/services/builders/index.mjs +73 -0
- package/dist/server/services/builders/index.mjs.map +1 -0
- package/dist/server/services/builders/input.js +89 -0
- package/dist/server/services/builders/input.js.map +1 -0
- package/dist/server/services/builders/input.mjs +87 -0
- package/dist/server/services/builders/input.mjs.map +1 -0
- package/dist/server/services/builders/mutations/collection-type.js +155 -0
- package/dist/server/services/builders/mutations/collection-type.js.map +1 -0
- package/dist/server/services/builders/mutations/collection-type.mjs +153 -0
- package/dist/server/services/builders/mutations/collection-type.mjs.map +1 -0
- package/dist/server/services/builders/mutations/index.js +12 -0
- package/dist/server/services/builders/mutations/index.js.map +1 -0
- package/dist/server/services/builders/mutations/index.mjs +10 -0
- package/dist/server/services/builders/mutations/index.mjs.map +1 -0
- package/dist/server/services/builders/mutations/single-type.js +123 -0
- package/dist/server/services/builders/mutations/single-type.js.map +1 -0
- package/dist/server/services/builders/mutations/single-type.mjs +121 -0
- package/dist/server/services/builders/mutations/single-type.mjs.map +1 -0
- package/dist/server/services/builders/queries/collection-type.js +152 -0
- package/dist/server/services/builders/queries/collection-type.js.map +1 -0
- package/dist/server/services/builders/queries/collection-type.mjs +150 -0
- package/dist/server/services/builders/queries/collection-type.mjs.map +1 -0
- package/dist/server/services/builders/queries/index.js +12 -0
- package/dist/server/services/builders/queries/index.js.map +1 -0
- package/dist/server/services/builders/queries/index.mjs +10 -0
- package/dist/server/services/builders/queries/index.mjs.map +1 -0
- package/dist/server/services/builders/queries/single-type.js +70 -0
- package/dist/server/services/builders/queries/single-type.js.map +1 -0
- package/dist/server/services/builders/queries/single-type.mjs +68 -0
- package/dist/server/services/builders/queries/single-type.mjs.map +1 -0
- package/dist/server/services/builders/relation-response-collection.js +35 -0
- package/dist/server/services/builders/relation-response-collection.js.map +1 -0
- package/dist/server/services/builders/relation-response-collection.mjs +33 -0
- package/dist/server/services/builders/relation-response-collection.mjs.map +1 -0
- package/dist/server/services/builders/resolvers/association.js +141 -0
- package/dist/server/services/builders/resolvers/association.js.map +1 -0
- package/dist/server/services/builders/resolvers/association.mjs +139 -0
- package/dist/server/services/builders/resolvers/association.mjs.map +1 -0
- package/dist/server/services/builders/resolvers/component.js +27 -0
- package/dist/server/services/builders/resolvers/component.js.map +1 -0
- package/dist/server/services/builders/resolvers/component.mjs +25 -0
- package/dist/server/services/builders/resolvers/component.mjs.map +1 -0
- package/dist/server/services/builders/resolvers/dynamic-zone.js +12 -0
- package/dist/server/services/builders/resolvers/dynamic-zone.js.map +1 -0
- package/dist/server/services/builders/resolvers/dynamic-zone.mjs +10 -0
- package/dist/server/services/builders/resolvers/dynamic-zone.mjs.map +1 -0
- package/dist/server/services/builders/resolvers/index.js +20 -0
- package/dist/server/services/builders/resolvers/index.js.map +1 -0
- package/dist/server/services/builders/resolvers/index.mjs +18 -0
- package/dist/server/services/builders/resolvers/index.mjs.map +1 -0
- package/dist/server/services/builders/resolvers/merge-publication-args.js +23 -0
- package/dist/server/services/builders/resolvers/merge-publication-args.js.map +1 -0
- package/dist/server/services/builders/resolvers/merge-publication-args.mjs +21 -0
- package/dist/server/services/builders/resolvers/merge-publication-args.mjs.map +1 -0
- package/dist/server/services/builders/resolvers/pagination.js +40 -0
- package/dist/server/services/builders/resolvers/pagination.js.map +1 -0
- package/dist/server/services/builders/resolvers/pagination.mjs +38 -0
- package/dist/server/services/builders/resolvers/pagination.mjs.map +1 -0
- package/dist/server/services/builders/resolvers/query.js +62 -0
- package/dist/server/services/builders/resolvers/query.js.map +1 -0
- package/dist/server/services/builders/resolvers/query.mjs +60 -0
- package/dist/server/services/builders/resolvers/query.mjs.map +1 -0
- package/dist/server/services/builders/response-collection.js +50 -0
- package/dist/server/services/builders/response-collection.js.map +1 -0
- package/dist/server/services/builders/response-collection.mjs +48 -0
- package/dist/server/services/builders/response-collection.mjs.map +1 -0
- package/dist/server/services/builders/response.js +28 -0
- package/dist/server/services/builders/response.js.map +1 -0
- package/dist/server/services/builders/response.mjs +26 -0
- package/dist/server/services/builders/response.mjs.map +1 -0
- package/dist/server/services/builders/type.js +345 -0
- package/dist/server/services/builders/type.js.map +1 -0
- package/dist/server/services/builders/type.mjs +343 -0
- package/dist/server/services/builders/type.mjs.map +1 -0
- package/dist/server/services/builders/utils.js +132 -0
- package/dist/server/services/builders/utils.js.map +1 -0
- package/dist/server/services/builders/utils.mjs +130 -0
- package/dist/server/services/builders/utils.mjs.map +1 -0
- package/dist/server/services/constants.js +141 -0
- package/dist/server/services/constants.js.map +1 -0
- package/dist/server/services/constants.mjs +139 -0
- package/dist/server/services/constants.mjs.map +1 -0
- package/dist/server/services/content-api/index.js +198 -0
- package/dist/server/services/content-api/index.js.map +1 -0
- package/dist/server/services/content-api/index.mjs +196 -0
- package/dist/server/services/content-api/index.mjs.map +1 -0
- package/dist/server/services/content-api/policy.js +54 -0
- package/dist/server/services/content-api/policy.js.map +1 -0
- package/dist/server/services/content-api/policy.mjs +52 -0
- package/dist/server/services/content-api/policy.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/collection-type.js +41 -0
- package/dist/server/services/content-api/register-functions/collection-type.js.map +1 -0
- package/dist/server/services/content-api/register-functions/collection-type.mjs +39 -0
- package/dist/server/services/content-api/register-functions/collection-type.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/component.js +16 -0
- package/dist/server/services/content-api/register-functions/component.js.map +1 -0
- package/dist/server/services/content-api/register-functions/component.mjs +14 -0
- package/dist/server/services/content-api/register-functions/component.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/dynamic-zones.js +31 -0
- package/dist/server/services/content-api/register-functions/dynamic-zones.js.map +1 -0
- package/dist/server/services/content-api/register-functions/dynamic-zones.mjs +29 -0
- package/dist/server/services/content-api/register-functions/dynamic-zones.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/enums.js +23 -0
- package/dist/server/services/content-api/register-functions/enums.js.map +1 -0
- package/dist/server/services/content-api/register-functions/enums.mjs +21 -0
- package/dist/server/services/content-api/register-functions/enums.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/filters.js +16 -0
- package/dist/server/services/content-api/register-functions/filters.js.map +1 -0
- package/dist/server/services/content-api/register-functions/filters.mjs +14 -0
- package/dist/server/services/content-api/register-functions/filters.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/inputs.js +17 -0
- package/dist/server/services/content-api/register-functions/inputs.js.map +1 -0
- package/dist/server/services/content-api/register-functions/inputs.mjs +15 -0
- package/dist/server/services/content-api/register-functions/inputs.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/internals.js +16 -0
- package/dist/server/services/content-api/register-functions/internals.js.map +1 -0
- package/dist/server/services/content-api/register-functions/internals.mjs +14 -0
- package/dist/server/services/content-api/register-functions/internals.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/polymorphic.js +49 -0
- package/dist/server/services/content-api/register-functions/polymorphic.js.map +1 -0
- package/dist/server/services/content-api/register-functions/polymorphic.mjs +47 -0
- package/dist/server/services/content-api/register-functions/polymorphic.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/scalars.js +15 -0
- package/dist/server/services/content-api/register-functions/scalars.js.map +1 -0
- package/dist/server/services/content-api/register-functions/scalars.mjs +13 -0
- package/dist/server/services/content-api/register-functions/scalars.mjs.map +1 -0
- package/dist/server/services/content-api/register-functions/single-type.js +41 -0
- package/dist/server/services/content-api/register-functions/single-type.js.map +1 -0
- package/dist/server/services/content-api/register-functions/single-type.mjs +39 -0
- package/dist/server/services/content-api/register-functions/single-type.mjs.map +1 -0
- package/dist/server/services/content-api/wrap-resolvers.js +119 -0
- package/dist/server/services/content-api/wrap-resolvers.js.map +1 -0
- package/dist/server/services/content-api/wrap-resolvers.mjs +117 -0
- package/dist/server/services/content-api/wrap-resolvers.mjs.map +1 -0
- package/dist/server/services/extension/extension.js +85 -0
- package/dist/server/services/extension/extension.js.map +1 -0
- package/dist/server/services/extension/extension.mjs +63 -0
- package/dist/server/services/extension/extension.mjs.map +1 -0
- package/dist/server/services/extension/index.js +8 -0
- package/dist/server/services/extension/index.js.map +1 -0
- package/dist/server/services/extension/index.mjs +6 -0
- package/dist/server/services/extension/index.mjs.map +1 -0
- package/dist/server/services/extension/shadow-crud-manager.js +121 -0
- package/dist/server/services/extension/shadow-crud-manager.js.map +1 -0
- package/dist/server/services/extension/shadow-crud-manager.mjs +119 -0
- package/dist/server/services/extension/shadow-crud-manager.mjs.map +1 -0
- package/dist/server/services/format/index.js +10 -0
- package/dist/server/services/format/index.js.map +1 -0
- package/dist/server/services/format/index.mjs +8 -0
- package/dist/server/services/format/index.mjs.map +1 -0
- package/dist/server/services/format/return-types.js +27 -0
- package/dist/server/services/format/return-types.js.map +1 -0
- package/dist/server/services/format/return-types.mjs +25 -0
- package/dist/server/services/format/return-types.mjs.map +1 -0
- package/dist/server/services/index.js +24 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +22 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/internals/args/has-published-version.js +11 -0
- package/dist/server/services/internals/args/has-published-version.js.map +1 -0
- package/dist/server/services/internals/args/has-published-version.mjs +9 -0
- package/dist/server/services/internals/args/has-published-version.mjs.map +1 -0
- package/dist/server/services/internals/args/index.js +18 -0
- package/dist/server/services/internals/args/index.js.map +1 -0
- package/dist/server/services/internals/args/index.mjs +16 -0
- package/dist/server/services/internals/args/index.mjs.map +1 -0
- package/dist/server/services/internals/args/pagination.js +20 -0
- package/dist/server/services/internals/args/pagination.js.map +1 -0
- package/dist/server/services/internals/args/pagination.mjs +18 -0
- package/dist/server/services/internals/args/pagination.mjs.map +1 -0
- package/dist/server/services/internals/args/publication-filter.js +13 -0
- package/dist/server/services/internals/args/publication-filter.js.map +1 -0
- package/dist/server/services/internals/args/publication-filter.mjs +11 -0
- package/dist/server/services/internals/args/publication-filter.mjs.map +1 -0
- package/dist/server/services/internals/args/publication-status.js +14 -0
- package/dist/server/services/internals/args/publication-status.js.map +1 -0
- package/dist/server/services/internals/args/publication-status.mjs +12 -0
- package/dist/server/services/internals/args/publication-status.mjs.map +1 -0
- package/dist/server/services/internals/args/sort.js +11 -0
- package/dist/server/services/internals/args/sort.js.map +1 -0
- package/dist/server/services/internals/args/sort.mjs +9 -0
- package/dist/server/services/internals/args/sort.mjs.map +1 -0
- package/dist/server/services/internals/helpers/get-enabled-scalars.js +13 -0
- package/dist/server/services/internals/helpers/get-enabled-scalars.js.map +1 -0
- package/dist/server/services/internals/helpers/get-enabled-scalars.mjs +11 -0
- package/dist/server/services/internals/helpers/get-enabled-scalars.mjs.map +1 -0
- package/dist/server/services/internals/helpers/index.js +10 -0
- package/dist/server/services/internals/helpers/index.js.map +1 -0
- package/dist/server/services/internals/helpers/index.mjs +8 -0
- package/dist/server/services/internals/helpers/index.mjs.map +1 -0
- package/dist/server/services/internals/index.js +16 -0
- package/dist/server/services/internals/index.js.map +1 -0
- package/dist/server/services/internals/index.mjs +14 -0
- package/dist/server/services/internals/index.mjs.map +1 -0
- package/dist/server/services/internals/scalars/date.js +18 -0
- package/dist/server/services/internals/scalars/date.js.map +1 -0
- package/dist/server/services/internals/scalars/date.mjs +15 -0
- package/dist/server/services/internals/scalars/date.mjs.map +1 -0
- package/dist/server/services/internals/scalars/index.js +17 -0
- package/dist/server/services/internals/scalars/index.js.map +1 -0
- package/dist/server/services/internals/scalars/index.mjs +15 -0
- package/dist/server/services/internals/scalars/index.mjs.map +1 -0
- package/dist/server/services/internals/scalars/time.js +38 -0
- package/dist/server/services/internals/scalars/time.js.map +1 -0
- package/dist/server/services/internals/scalars/time.mjs +36 -0
- package/dist/server/services/internals/scalars/time.mjs.map +1 -0
- package/dist/server/services/internals/types/delete-mutation-response.js +18 -0
- package/dist/server/services/internals/types/delete-mutation-response.js.map +1 -0
- package/dist/server/services/internals/types/delete-mutation-response.mjs +16 -0
- package/dist/server/services/internals/types/delete-mutation-response.mjs.map +1 -0
- package/dist/server/services/internals/types/error.js +32 -0
- package/dist/server/services/internals/types/error.js.map +1 -0
- package/dist/server/services/internals/types/error.mjs +30 -0
- package/dist/server/services/internals/types/error.mjs.map +1 -0
- package/dist/server/services/internals/types/filters.js +35 -0
- package/dist/server/services/internals/types/filters.js.map +1 -0
- package/dist/server/services/internals/types/filters.mjs +33 -0
- package/dist/server/services/internals/types/filters.mjs.map +1 -0
- package/dist/server/services/internals/types/index.js +32 -0
- package/dist/server/services/internals/types/index.js.map +1 -0
- package/dist/server/services/internals/types/index.mjs +30 -0
- package/dist/server/services/internals/types/index.mjs.map +1 -0
- package/dist/server/services/internals/types/pagination.js +24 -0
- package/dist/server/services/internals/types/pagination.js.map +1 -0
- package/dist/server/services/internals/types/pagination.mjs +22 -0
- package/dist/server/services/internals/types/pagination.mjs.map +1 -0
- package/dist/server/services/internals/types/publication-filter.js +25 -0
- package/dist/server/services/internals/types/publication-filter.js.map +1 -0
- package/dist/server/services/internals/types/publication-filter.mjs +23 -0
- package/dist/server/services/internals/types/publication-filter.mjs.map +1 -0
- package/dist/server/services/internals/types/publication-status.js +22 -0
- package/dist/server/services/internals/types/publication-status.js.map +1 -0
- package/dist/server/services/internals/types/publication-status.mjs +20 -0
- package/dist/server/services/internals/types/publication-status.mjs.map +1 -0
- package/dist/server/services/internals/types/response-collection-meta.js +27 -0
- package/dist/server/services/internals/types/response-collection-meta.js.map +1 -0
- package/dist/server/services/internals/types/response-collection-meta.mjs +25 -0
- package/dist/server/services/internals/types/response-collection-meta.mjs.map +1 -0
- package/dist/server/services/type-registry.js +81 -0
- package/dist/server/services/type-registry.js.map +1 -0
- package/dist/server/services/type-registry.mjs +79 -0
- package/dist/server/services/type-registry.mjs.map +1 -0
- package/dist/server/services/utils/attributes.js +65 -0
- package/dist/server/services/utils/attributes.js.map +1 -0
- package/dist/server/services/utils/attributes.mjs +63 -0
- package/dist/server/services/utils/attributes.mjs.map +1 -0
- package/dist/server/services/utils/index.js +16 -0
- package/dist/server/services/utils/index.js.map +1 -0
- package/dist/server/services/utils/index.mjs +14 -0
- package/dist/server/services/utils/index.mjs.map +1 -0
- package/dist/server/services/utils/mappers/entity-to-response-entity.js +16 -0
- package/dist/server/services/utils/mappers/entity-to-response-entity.js.map +1 -0
- package/dist/server/services/utils/mappers/entity-to-response-entity.mjs +14 -0
- package/dist/server/services/utils/mappers/entity-to-response-entity.mjs.map +1 -0
- package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.js +95 -0
- package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.js.map +1 -0
- package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.mjs +93 -0
- package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.mjs.map +1 -0
- package/dist/server/services/utils/mappers/graphql-scalar-to-operators.js +15 -0
- package/dist/server/services/utils/mappers/graphql-scalar-to-operators.js.map +1 -0
- package/dist/server/services/utils/mappers/graphql-scalar-to-operators.mjs +13 -0
- package/dist/server/services/utils/mappers/graphql-scalar-to-operators.mjs.map +1 -0
- package/dist/server/services/utils/mappers/index.js +16 -0
- package/dist/server/services/utils/mappers/index.js.map +1 -0
- package/dist/server/services/utils/mappers/index.mjs +14 -0
- package/dist/server/services/utils/mappers/index.mjs.map +1 -0
- package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.js +23 -0
- package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.js.map +1 -0
- package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.mjs +21 -0
- package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.mjs.map +1 -0
- package/dist/server/services/utils/naming.js +187 -0
- package/dist/server/services/utils/naming.js.map +1 -0
- package/dist/server/services/utils/naming.mjs +185 -0
- package/dist/server/services/utils/naming.mjs.map +1 -0
- package/dist/server/services/utils/playground.js +19 -0
- package/dist/server/services/utils/playground.js.map +1 -0
- package/dist/server/services/utils/playground.mjs +17 -0
- package/dist/server/services/utils/playground.mjs.map +1 -0
- package/dist/server/src/bootstrap.d.ts +7 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +35 -33
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/dynamic-zones.d.ts.map +1 -1
- package/dist/server/src/services/builders/entity.d.ts.map +1 -1
- package/dist/server/src/services/builders/enums.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/content-type.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/and.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/between.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/contains.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/containsi.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/ends-with.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/eq.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/eqi.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/gt.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/gte.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/in.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/index.d.ts +0 -1
- package/dist/server/src/services/builders/filters/operators/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/lt.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/lte.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/ne.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/nei.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/not-contains.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/not-containsi.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/not-in.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/not-null.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/not.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/null.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/or.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/starts-with.d.ts.map +1 -1
- package/dist/server/src/services/builders/generic-morph.d.ts.map +1 -1
- package/dist/server/src/services/builders/index.d.ts +7 -14
- package/dist/server/src/services/builders/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/input.d.ts.map +1 -1
- package/dist/server/src/services/builders/mutations/collection-type.d.ts.map +1 -1
- package/dist/server/src/services/builders/mutations/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/mutations/single-type.d.ts.map +1 -1
- package/dist/server/src/services/builders/queries/collection-type.d.ts.map +1 -1
- package/dist/server/src/services/builders/queries/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/queries/single-type.d.ts.map +1 -1
- package/dist/server/src/services/builders/relation-response-collection.d.ts.map +1 -1
- package/dist/server/src/services/builders/resolvers/association.d.ts +1 -1
- package/dist/server/src/services/builders/resolvers/association.d.ts.map +1 -1
- package/dist/server/src/services/builders/resolvers/component.d.ts.map +1 -1
- package/dist/server/src/services/builders/resolvers/dynamic-zone.d.ts.map +1 -1
- package/dist/server/src/services/builders/resolvers/index.d.ts +5 -5
- package/dist/server/src/services/builders/resolvers/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/resolvers/merge-publication-args.d.ts +9 -0
- package/dist/server/src/services/builders/resolvers/merge-publication-args.d.ts.map +1 -0
- package/dist/server/src/services/builders/resolvers/pagination.d.ts.map +1 -1
- package/dist/server/src/services/builders/resolvers/query.d.ts.map +1 -1
- package/dist/server/src/services/builders/response-collection.d.ts.map +1 -1
- package/dist/server/src/services/builders/response.d.ts.map +1 -1
- package/dist/server/src/services/builders/type.d.ts.map +1 -1
- package/dist/server/src/services/builders/utils.d.ts +4 -11
- package/dist/server/src/services/builders/utils.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +1 -0
- package/dist/server/src/services/constants.d.ts.map +1 -1
- package/dist/server/src/services/content-api/index.d.ts +2 -0
- package/dist/server/src/services/content-api/index.d.ts.map +1 -1
- package/dist/server/src/services/content-api/policy.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/collection-type.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/component.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/dynamic-zones.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/enums.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/filters.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/inputs.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/internals.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/polymorphic.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/scalars.d.ts.map +1 -1
- package/dist/server/src/services/content-api/register-functions/single-type.d.ts.map +1 -1
- package/dist/server/src/services/content-api/wrap-resolvers.d.ts.map +1 -1
- package/dist/server/src/services/extension/extension.d.ts +10 -10
- package/dist/server/src/services/extension/extension.d.ts.map +1 -1
- package/dist/server/src/services/extension/shadow-crud-manager.d.ts +9 -9
- package/dist/server/src/services/extension/shadow-crud-manager.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +35 -33
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/internals/args/has-published-version.d.ts +7 -0
- package/dist/server/src/services/internals/args/has-published-version.d.ts.map +1 -0
- package/dist/server/src/services/internals/args/index.d.ts +3 -0
- package/dist/server/src/services/internals/args/index.d.ts.map +1 -1
- package/dist/server/src/services/internals/args/publication-filter.d.ts +4 -0
- package/dist/server/src/services/internals/args/publication-filter.d.ts.map +1 -0
- package/dist/server/src/services/internals/args/publication-status.d.ts.map +1 -1
- package/dist/server/src/services/internals/helpers/get-enabled-scalars.d.ts.map +1 -1
- package/dist/server/src/services/internals/helpers/index.d.ts.map +1 -1
- package/dist/server/src/services/internals/index.d.ts +7 -0
- package/dist/server/src/services/internals/index.d.ts.map +1 -1
- package/dist/server/src/services/internals/types/delete-mutation-response.d.ts.map +1 -1
- package/dist/server/src/services/internals/types/error.d.ts.map +1 -1
- package/dist/server/src/services/internals/types/filters.d.ts.map +1 -1
- package/dist/server/src/services/internals/types/index.d.ts +5 -0
- package/dist/server/src/services/internals/types/index.d.ts.map +1 -1
- package/dist/server/src/services/internals/types/pagination.d.ts.map +1 -1
- package/dist/server/src/services/internals/types/publication-filter.d.ts +6 -0
- package/dist/server/src/services/internals/types/publication-filter.d.ts.map +1 -0
- package/dist/server/src/services/internals/types/publication-status.d.ts.map +1 -1
- package/dist/server/src/services/internals/types/response-collection-meta.d.ts.map +1 -1
- package/dist/server/src/services/type-registry.d.ts.map +1 -1
- package/dist/server/src/services/utils/attributes.d.ts.map +1 -1
- package/dist/server/src/services/utils/index.d.ts +8 -9
- package/dist/server/src/services/utils/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/mappers/entity-to-response-entity.d.ts +1 -3
- package/dist/server/src/services/utils/mappers/entity-to-response-entity.d.ts.map +1 -1
- package/dist/server/src/services/utils/mappers/graphql-filters-to-strapi-query.d.ts.map +1 -1
- package/dist/server/src/services/utils/mappers/graphql-scalar-to-operators.d.ts.map +1 -1
- package/dist/server/src/services/utils/mappers/index.d.ts +1 -3
- package/dist/server/src/services/utils/mappers/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/mappers/strapi-scalar-to-graphql-scalar.d.ts.map +1 -1
- package/dist/server/src/services/utils/naming.d.ts +3 -3
- package/dist/server/src/services/utils/naming.d.ts.map +1 -1
- package/dist/server/src/services/utils/playground.d.ts +1 -0
- package/dist/server/src/services/utils/playground.d.ts.map +1 -1
- package/package.json +30 -22
- package/dist/_chunks/dk-BbJCmDw6.mjs +0 -9
- package/dist/_chunks/dk-BbJCmDw6.mjs.map +0 -1
- package/dist/_chunks/dk-C9NcSzyg.js +0 -9
- package/dist/_chunks/dk-C9NcSzyg.js.map +0 -1
- package/dist/_chunks/en-BiKpmhCU.js +0 -9
- package/dist/_chunks/en-BiKpmhCU.js.map +0 -1
- package/dist/_chunks/en-YIQYYlvv.mjs +0 -9
- package/dist/_chunks/en-YIQYYlvv.mjs.map +0 -1
- package/dist/_chunks/es-BbsZ5Fh0.mjs +0 -9
- package/dist/_chunks/es-BbsZ5Fh0.mjs.map +0 -1
- package/dist/_chunks/es-DE22V9D4.js +0 -9
- package/dist/_chunks/es-DE22V9D4.js.map +0 -1
- package/dist/_chunks/fr-BgqFw7G8.mjs +0 -9
- package/dist/_chunks/fr-BgqFw7G8.mjs.map +0 -1
- package/dist/_chunks/fr-Ca-HowfR.js +0 -9
- package/dist/_chunks/fr-Ca-HowfR.js.map +0 -1
- package/dist/_chunks/pl-CbET57Jb.mjs +0 -9
- package/dist/_chunks/pl-CbET57Jb.mjs.map +0 -1
- package/dist/_chunks/pl-DVnJGR87.js +0 -9
- package/dist/_chunks/pl-DVnJGR87.js.map +0 -1
- package/dist/_chunks/ru-BFz40YSA.mjs +0 -9
- package/dist/_chunks/ru-BFz40YSA.mjs.map +0 -1
- package/dist/_chunks/ru-o4zaP02C.js +0 -9
- package/dist/_chunks/ru-o4zaP02C.js.map +0 -1
- package/dist/_chunks/sv-9qK4y9fb.js +0 -9
- package/dist/_chunks/sv-9qK4y9fb.js.map +0 -1
- package/dist/_chunks/sv-CNYcKBn2.mjs +0 -9
- package/dist/_chunks/sv-CNYcKBn2.mjs.map +0 -1
- package/dist/_chunks/tr-H1PrR6RM.mjs +0 -9
- package/dist/_chunks/tr-H1PrR6RM.mjs.map +0 -1
- package/dist/_chunks/tr-fBBDNMBY.js +0 -9
- package/dist/_chunks/tr-fBBDNMBY.js.map +0 -1
- package/dist/_chunks/zh-BEh3jejH.mjs +0 -9
- package/dist/_chunks/zh-BEh3jejH.mjs.map +0 -1
- package/dist/_chunks/zh-CyCKPuL0.js +0 -9
- package/dist/_chunks/zh-CyCKPuL0.js.map +0 -1
- package/dist/_chunks/zh-Hans-Btuz6Y7W.js +0 -9
- package/dist/_chunks/zh-Hans-Btuz6Y7W.js.map +0 -1
- package/dist/_chunks/zh-Hans-CRQss50D.mjs +0 -9
- package/dist/_chunks/zh-Hans-CRQss50D.mjs.map +0 -1
- package/strapi-server.js +0 -3
package/dist/server/index.js
CHANGED
|
@@ -1,3114 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const nexus = require("nexus");
|
|
14
|
-
const pluralize = require("pluralize");
|
|
15
|
-
const graphqlScalars = require("graphql-scalars");
|
|
16
|
-
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
17
|
-
function _interopNamespace(e) {
|
|
18
|
-
if (e && e.__esModule)
|
|
19
|
-
return e;
|
|
20
|
-
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
21
|
-
if (e) {
|
|
22
|
-
for (const k in e) {
|
|
23
|
-
if (k !== "default") {
|
|
24
|
-
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
25
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: () => e[k]
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
n.default = e;
|
|
33
|
-
return Object.freeze(n);
|
|
34
|
-
}
|
|
35
|
-
const depthLimit__default = /* @__PURE__ */ _interopDefault(depthLimit);
|
|
36
|
-
const bodyParser__default = /* @__PURE__ */ _interopDefault(bodyParser);
|
|
37
|
-
const cors__default = /* @__PURE__ */ _interopDefault(cors);
|
|
38
|
-
const nexus__namespace = /* @__PURE__ */ _interopNamespace(nexus);
|
|
39
|
-
const defaultConfig = {
|
|
40
|
-
shadowCRUD: true,
|
|
41
|
-
endpoint: "/graphql",
|
|
42
|
-
subscriptions: false,
|
|
43
|
-
maxLimit: -1,
|
|
44
|
-
apolloServer: {},
|
|
45
|
-
v4CompatibilityMode: process.env.STRAPI_GRAPHQL_V4_COMPATIBILITY_MODE ?? false
|
|
46
|
-
};
|
|
47
|
-
const config = {
|
|
48
|
-
default: defaultConfig
|
|
49
|
-
};
|
|
50
|
-
const { HttpError, ForbiddenError: ForbiddenError$1, UnauthorizedError, ApplicationError: ApplicationError$5, ValidationError: ValidationError$3 } = utils$2.errors;
|
|
51
|
-
const formatToCode = (name) => `STRAPI_${fp.toUpper(fp.snakeCase(name))}`;
|
|
52
|
-
const formatErrorToExtension = (error2) => ({
|
|
53
|
-
error: fp.pick(["name", "message", "details"])(error2)
|
|
54
|
-
});
|
|
55
|
-
function createFormattedError(formattedError, message, code, originalError) {
|
|
56
|
-
const options = {
|
|
57
|
-
...formattedError,
|
|
58
|
-
extensions: {
|
|
59
|
-
...formattedError.extensions,
|
|
60
|
-
...formatErrorToExtension(originalError),
|
|
61
|
-
code
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
return new graphql.GraphQLError(message, options);
|
|
65
|
-
}
|
|
66
|
-
function formatGraphqlError(formattedError, error2) {
|
|
67
|
-
const originalError = errors.unwrapResolverError(error2);
|
|
68
|
-
if (fp.isEmpty(originalError)) {
|
|
69
|
-
return formattedError;
|
|
70
|
-
}
|
|
71
|
-
const { message = "", name = "UNKNOWN" } = originalError;
|
|
72
|
-
if (originalError instanceof ForbiddenError$1 || originalError instanceof UnauthorizedError) {
|
|
73
|
-
return createFormattedError(formattedError, message, "FORBIDDEN", originalError);
|
|
74
|
-
}
|
|
75
|
-
if (originalError instanceof ValidationError$3) {
|
|
76
|
-
return createFormattedError(formattedError, message, "BAD_USER_INPUT", originalError);
|
|
77
|
-
}
|
|
78
|
-
if (originalError instanceof ApplicationError$5 || originalError instanceof HttpError) {
|
|
79
|
-
const errorName = formatToCode(name);
|
|
80
|
-
return createFormattedError(formattedError, message, errorName, originalError);
|
|
81
|
-
}
|
|
82
|
-
if (originalError instanceof graphql.GraphQLError) {
|
|
83
|
-
return formattedError;
|
|
84
|
-
}
|
|
85
|
-
strapi.log.error(originalError);
|
|
86
|
-
return createFormattedError(
|
|
87
|
-
new graphql.GraphQLError("Internal Server Error"),
|
|
88
|
-
"Internal Server Error",
|
|
89
|
-
"INTERNAL_SERVER_ERROR",
|
|
90
|
-
originalError
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
const merge = fp.mergeWith((a, b) => {
|
|
94
|
-
if (fp.isArray(a) && fp.isArray(b)) {
|
|
95
|
-
return a.concat(b);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
async function bootstrap({ strapi: strapi2 }) {
|
|
99
|
-
const schema = strapi2.plugin("graphql").service("content-api").buildSchema();
|
|
100
|
-
if (fp.isEmpty(schema)) {
|
|
101
|
-
strapi2.log.warn("The GraphQL schema has not been generated because it is empty");
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const { config: config2 } = strapi2.plugin("graphql");
|
|
105
|
-
const path = config2("endpoint");
|
|
106
|
-
const playgroundEnabled = !(process.env.NODE_ENV === "production" && !config2("playgroundAlways"));
|
|
107
|
-
let landingPage;
|
|
108
|
-
if (playgroundEnabled) {
|
|
109
|
-
landingPage = _default.ApolloServerPluginLandingPageLocalDefault();
|
|
110
|
-
strapi2.log.debug("Using Apollo sandbox landing page");
|
|
111
|
-
} else {
|
|
112
|
-
landingPage = _default.ApolloServerPluginLandingPageProductionDefault();
|
|
113
|
-
strapi2.log.debug("Using Apollo production landing page");
|
|
114
|
-
}
|
|
115
|
-
const defaultServerConfig = {
|
|
116
|
-
// Schema
|
|
117
|
-
schema,
|
|
118
|
-
// Validation
|
|
119
|
-
validationRules: [depthLimit__default.default(config2("depthLimit"))],
|
|
120
|
-
// Errors
|
|
121
|
-
formatError: formatGraphqlError,
|
|
122
|
-
// Misc
|
|
123
|
-
cors: false,
|
|
124
|
-
uploads: false,
|
|
125
|
-
bodyParserConfig: true,
|
|
126
|
-
// send 400 http status instead of 200 for input validation errors
|
|
127
|
-
status400ForVariableCoercionErrors: true,
|
|
128
|
-
plugins: [landingPage],
|
|
129
|
-
cache: "bounded"
|
|
130
|
-
};
|
|
131
|
-
const serverConfig = merge(
|
|
132
|
-
defaultServerConfig,
|
|
133
|
-
config2("apolloServer")
|
|
134
|
-
);
|
|
135
|
-
const server$1 = new server.ApolloServer(serverConfig);
|
|
136
|
-
try {
|
|
137
|
-
await server$1.start();
|
|
138
|
-
} catch (error2) {
|
|
139
|
-
if (error2 instanceof Error) {
|
|
140
|
-
strapi2.log.error("Failed to start the Apollo server", error2.message);
|
|
141
|
-
}
|
|
142
|
-
throw error2;
|
|
143
|
-
}
|
|
144
|
-
const handler = [];
|
|
145
|
-
if (cors__default.default) {
|
|
146
|
-
handler.push(cors__default.default());
|
|
147
|
-
}
|
|
148
|
-
if (fp.isObject(serverConfig.bodyParserConfig)) {
|
|
149
|
-
handler.push(bodyParser__default.default(serverConfig.bodyParserConfig));
|
|
150
|
-
} else if (serverConfig.bodyParserConfig) {
|
|
151
|
-
handler.push(bodyParser__default.default());
|
|
152
|
-
} else {
|
|
153
|
-
strapi2.log.debug("Body parser has been disabled for Apollo server");
|
|
154
|
-
}
|
|
155
|
-
handler.push((ctx, next) => {
|
|
156
|
-
ctx.state.route = {
|
|
157
|
-
info: {
|
|
158
|
-
// Indicate it's a content API route
|
|
159
|
-
type: "content-api"
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
return strapi2.auth.authenticate(ctx, next);
|
|
163
|
-
});
|
|
164
|
-
handler.push(
|
|
165
|
-
koa.koaMiddleware(server$1, {
|
|
166
|
-
// Initialize loaders for this request.
|
|
167
|
-
context: async ({ ctx }) => ({
|
|
168
|
-
state: ctx.state,
|
|
169
|
-
koaContext: ctx
|
|
170
|
-
})
|
|
171
|
-
})
|
|
172
|
-
);
|
|
173
|
-
strapi2.server.routes([
|
|
174
|
-
{
|
|
175
|
-
method: "ALL",
|
|
176
|
-
path,
|
|
177
|
-
handler,
|
|
178
|
-
config: {
|
|
179
|
-
auth: false
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
]);
|
|
183
|
-
strapi2.plugin("graphql").destroy = async () => {
|
|
184
|
-
await server$1.stop();
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
const { PolicyError } = utils$2.errors;
|
|
188
|
-
const getPoliciesConfig = fp.propOr([], "policies");
|
|
189
|
-
const createPoliciesMiddleware = (resolverConfig, { strapi: strapi2 }) => {
|
|
190
|
-
const resolverPolicies = getPoliciesConfig(resolverConfig);
|
|
191
|
-
const policies = strapi2.get("policies").resolve(resolverPolicies, {});
|
|
192
|
-
return async (resolve, parent, args2, context, info) => {
|
|
193
|
-
const policyContext = createGraphQLPolicyContext(parent, args2, context, info);
|
|
194
|
-
for (const { handler, config: config2 } of policies) {
|
|
195
|
-
const result = await handler(policyContext, config2, { strapi: strapi2 });
|
|
196
|
-
if (![true, void 0].includes(result)) {
|
|
197
|
-
throw new PolicyError();
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return resolve(parent, args2, context, info);
|
|
201
|
-
};
|
|
202
|
-
};
|
|
203
|
-
const createGraphQLPolicyContext = (parent, args2, context, info) => {
|
|
204
|
-
const policyContext = {
|
|
205
|
-
get parent() {
|
|
206
|
-
return parent;
|
|
207
|
-
},
|
|
208
|
-
get args() {
|
|
209
|
-
return args2;
|
|
210
|
-
},
|
|
211
|
-
get context() {
|
|
212
|
-
return context;
|
|
213
|
-
},
|
|
214
|
-
get info() {
|
|
215
|
-
return info;
|
|
216
|
-
},
|
|
217
|
-
get state() {
|
|
218
|
-
return this.context.state;
|
|
219
|
-
},
|
|
220
|
-
get http() {
|
|
221
|
-
return this.context.koaContext;
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
return utils$2.policy.createPolicyContext("graphql", policyContext);
|
|
225
|
-
};
|
|
226
|
-
const { ForbiddenError } = utils$2.errors;
|
|
227
|
-
const introspectionQueries = [
|
|
228
|
-
"__Schema",
|
|
229
|
-
"__Type",
|
|
230
|
-
"__Field",
|
|
231
|
-
"__InputValue",
|
|
232
|
-
"__EnumValue",
|
|
233
|
-
"__Directive"
|
|
234
|
-
];
|
|
235
|
-
const parseMiddlewares = (resolverConfig, strapi2) => {
|
|
236
|
-
const resolverMiddlewares = fp.getOr([], "middlewares", resolverConfig);
|
|
237
|
-
return resolverMiddlewares.map(
|
|
238
|
-
(middleware) => {
|
|
239
|
-
if (fp.isFunction(middleware)) {
|
|
240
|
-
return middleware;
|
|
241
|
-
}
|
|
242
|
-
if (typeof middleware === "string") {
|
|
243
|
-
return strapi2.middleware(middleware);
|
|
244
|
-
}
|
|
245
|
-
if (typeof middleware === "object") {
|
|
246
|
-
const { name, options = {} } = middleware;
|
|
247
|
-
return strapi2.middleware(name)(options, { strapi: strapi2 });
|
|
248
|
-
}
|
|
249
|
-
throw new Error(
|
|
250
|
-
`Invalid middleware type, expected (function,string,object), received ${typeof middleware}`
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
);
|
|
254
|
-
};
|
|
255
|
-
const wrapResolvers = ({
|
|
256
|
-
schema,
|
|
257
|
-
strapi: strapi2,
|
|
258
|
-
extension = {}
|
|
259
|
-
}) => {
|
|
260
|
-
const { resolversConfig = {} } = extension;
|
|
261
|
-
const isValidFieldName = (field) => !field.startsWith("__");
|
|
262
|
-
const typeMap = schema.getTypeMap();
|
|
263
|
-
Object.entries(typeMap).forEach(([type, definition]) => {
|
|
264
|
-
const isGraphQLObjectType = definition instanceof graphql.GraphQLObjectType;
|
|
265
|
-
const isIgnoredType = introspectionQueries.includes(type);
|
|
266
|
-
if (!isGraphQLObjectType || isIgnoredType) {
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
const fields = definition.getFields();
|
|
270
|
-
const fieldsToProcess = Object.entries(fields).filter(([field]) => isValidFieldName(field));
|
|
271
|
-
for (const [fieldName, fieldDefinition] of fieldsToProcess) {
|
|
272
|
-
const defaultResolver = fp.get(fieldName);
|
|
273
|
-
const path = `${type}.${fieldName}`;
|
|
274
|
-
const resolverConfig = fp.getOr({}, path, resolversConfig);
|
|
275
|
-
const { resolve: baseResolver = defaultResolver } = fieldDefinition;
|
|
276
|
-
const middlewares = parseMiddlewares(resolverConfig, strapi2);
|
|
277
|
-
const policyMiddleware = createPoliciesMiddleware(resolverConfig, { strapi: strapi2 });
|
|
278
|
-
middlewares.push(policyMiddleware);
|
|
279
|
-
const boundMiddlewares = middlewares.map((middleware, index2, collection) => {
|
|
280
|
-
return (parents, args2, context, info) => middleware(
|
|
281
|
-
// Make sure the last middleware in the list calls the baseResolver
|
|
282
|
-
index2 >= collection.length - 1 ? baseResolver : boundMiddlewares[index2 + 1],
|
|
283
|
-
parents,
|
|
284
|
-
args2,
|
|
285
|
-
context,
|
|
286
|
-
info
|
|
287
|
-
);
|
|
288
|
-
});
|
|
289
|
-
const authorize = async ({ context }) => {
|
|
290
|
-
const authConfig = fp.get("auth", resolverConfig);
|
|
291
|
-
const authContext = fp.get("state.auth", context);
|
|
292
|
-
const isValidType = ["Mutation", "Query", "Subscription"].includes(type);
|
|
293
|
-
const hasConfig = !fp.isNil(authConfig);
|
|
294
|
-
const isAuthDisabled = authConfig === false;
|
|
295
|
-
if ((isValidType || hasConfig) && !isAuthDisabled) {
|
|
296
|
-
try {
|
|
297
|
-
await strapi2.auth.verify(authContext, authConfig);
|
|
298
|
-
} catch (error2) {
|
|
299
|
-
throw new ForbiddenError();
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
};
|
|
303
|
-
fieldDefinition.resolve = async (parent, args2, context, info) => {
|
|
304
|
-
await authorize({ context });
|
|
305
|
-
return fp.first(boundMiddlewares)(parent, args2, context, info);
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
return schema;
|
|
310
|
-
};
|
|
311
|
-
const registerCollectionType = (contentType2, {
|
|
312
|
-
registry,
|
|
313
|
-
strapi: strapi2,
|
|
314
|
-
builders: builders2
|
|
315
|
-
}) => {
|
|
316
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
317
|
-
const { naming: naming2 } = getService("utils");
|
|
318
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
319
|
-
const extension = getService("extension");
|
|
320
|
-
const types2 = {
|
|
321
|
-
base: naming2.getTypeName(contentType2),
|
|
322
|
-
entity: naming2.getEntityName(contentType2),
|
|
323
|
-
response: naming2.getEntityResponseName(contentType2),
|
|
324
|
-
responseCollection: naming2.getEntityResponseCollectionName(contentType2),
|
|
325
|
-
relationResponseCollection: naming2.getRelationResponseCollectionName(contentType2),
|
|
326
|
-
queries: naming2.getEntityQueriesTypeName(contentType2),
|
|
327
|
-
mutations: naming2.getEntityMutationsTypeName(contentType2)
|
|
328
|
-
};
|
|
329
|
-
const getConfig = (kind) => ({ kind, contentType: contentType2 });
|
|
330
|
-
registry.register(types2.base, builders2.buildTypeDefinition(contentType2), getConfig(KINDS2.type));
|
|
331
|
-
registry.register(
|
|
332
|
-
types2.entity,
|
|
333
|
-
builders2.buildEntityDefinition(contentType2),
|
|
334
|
-
getConfig(KINDS2.entity)
|
|
335
|
-
);
|
|
336
|
-
registry.register(
|
|
337
|
-
types2.response,
|
|
338
|
-
builders2.buildResponseDefinition(contentType2),
|
|
339
|
-
getConfig(KINDS2.entityResponse)
|
|
340
|
-
);
|
|
341
|
-
registry.register(
|
|
342
|
-
types2.responseCollection,
|
|
343
|
-
builders2.buildResponseCollectionDefinition(contentType2),
|
|
344
|
-
getConfig(KINDS2.entityResponseCollection)
|
|
345
|
-
);
|
|
346
|
-
registry.register(
|
|
347
|
-
types2.relationResponseCollection,
|
|
348
|
-
builders2.buildRelationResponseCollectionDefinition(contentType2),
|
|
349
|
-
getConfig(KINDS2.relationResponseCollection)
|
|
350
|
-
);
|
|
351
|
-
if (extension.shadowCRUD(contentType2.uid).areQueriesEnabled()) {
|
|
352
|
-
registry.register(
|
|
353
|
-
types2.queries,
|
|
354
|
-
builders2.buildCollectionTypeQueries(contentType2),
|
|
355
|
-
getConfig(KINDS2.query)
|
|
356
|
-
);
|
|
357
|
-
}
|
|
358
|
-
if (extension.shadowCRUD(contentType2.uid).areMutationsEnabled()) {
|
|
359
|
-
registry.register(
|
|
360
|
-
types2.mutations,
|
|
361
|
-
builders2.buildCollectionTypeMutations(contentType2),
|
|
362
|
-
getConfig(KINDS2.mutation)
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
};
|
|
366
|
-
const registerSingleType = (contentType2, {
|
|
367
|
-
registry,
|
|
368
|
-
strapi: strapi2,
|
|
369
|
-
builders: builders2
|
|
370
|
-
}) => {
|
|
371
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
372
|
-
const { naming: naming2 } = getService("utils");
|
|
373
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
374
|
-
const extension = getService("extension");
|
|
375
|
-
const types2 = {
|
|
376
|
-
base: naming2.getTypeName(contentType2),
|
|
377
|
-
entity: naming2.getEntityName(contentType2),
|
|
378
|
-
response: naming2.getEntityResponseName(contentType2),
|
|
379
|
-
responseCollection: naming2.getEntityResponseCollectionName(contentType2),
|
|
380
|
-
relationResponseCollection: naming2.getRelationResponseCollectionName(contentType2),
|
|
381
|
-
queries: naming2.getEntityQueriesTypeName(contentType2),
|
|
382
|
-
mutations: naming2.getEntityMutationsTypeName(contentType2)
|
|
383
|
-
};
|
|
384
|
-
const getConfig = (kind) => ({ kind, contentType: contentType2 });
|
|
385
|
-
registry.register(types2.base, builders2.buildTypeDefinition(contentType2), getConfig(KINDS2.type));
|
|
386
|
-
registry.register(
|
|
387
|
-
types2.entity,
|
|
388
|
-
builders2.buildEntityDefinition(contentType2),
|
|
389
|
-
getConfig(KINDS2.entity)
|
|
390
|
-
);
|
|
391
|
-
registry.register(
|
|
392
|
-
types2.response,
|
|
393
|
-
builders2.buildResponseDefinition(contentType2),
|
|
394
|
-
getConfig(KINDS2.entityResponse)
|
|
395
|
-
);
|
|
396
|
-
registry.register(
|
|
397
|
-
types2.responseCollection,
|
|
398
|
-
builders2.buildResponseCollectionDefinition(contentType2),
|
|
399
|
-
getConfig(KINDS2.entityResponseCollection)
|
|
400
|
-
);
|
|
401
|
-
registry.register(
|
|
402
|
-
types2.relationResponseCollection,
|
|
403
|
-
builders2.buildRelationResponseCollectionDefinition(contentType2),
|
|
404
|
-
getConfig(KINDS2.relationResponseCollection)
|
|
405
|
-
);
|
|
406
|
-
if (extension.shadowCRUD(contentType2.uid).areQueriesEnabled()) {
|
|
407
|
-
registry.register(
|
|
408
|
-
types2.queries,
|
|
409
|
-
builders2.buildSingleTypeQueries(contentType2),
|
|
410
|
-
getConfig(KINDS2.query)
|
|
411
|
-
);
|
|
412
|
-
}
|
|
413
|
-
if (extension.shadowCRUD(contentType2.uid).areMutationsEnabled()) {
|
|
414
|
-
registry.register(
|
|
415
|
-
types2.mutations,
|
|
416
|
-
builders2.buildSingleTypeMutations(contentType2),
|
|
417
|
-
getConfig(KINDS2.mutation)
|
|
418
|
-
);
|
|
419
|
-
}
|
|
420
|
-
};
|
|
421
|
-
const registerComponent = (contentType2, {
|
|
422
|
-
registry,
|
|
423
|
-
strapi: strapi2,
|
|
424
|
-
builders: builders2
|
|
425
|
-
}) => {
|
|
426
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
427
|
-
const { getComponentName } = getService("utils").naming;
|
|
428
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
429
|
-
const name = getComponentName(contentType2);
|
|
430
|
-
const definition = builders2.buildTypeDefinition(contentType2);
|
|
431
|
-
registry.register(name, definition, { kind: KINDS2.component, contentType: contentType2 });
|
|
432
|
-
};
|
|
433
|
-
const registerPolymorphicContentType = (contentType2, { registry, strapi: strapi2 }) => {
|
|
434
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
435
|
-
const {
|
|
436
|
-
naming: naming2,
|
|
437
|
-
attributes: { isMorphRelation }
|
|
438
|
-
} = getService("utils");
|
|
439
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
440
|
-
const { attributes: attributes2 = {} } = contentType2;
|
|
441
|
-
const morphAttributes = Object.entries(attributes2).filter(
|
|
442
|
-
([, attribute]) => isMorphRelation(attribute)
|
|
443
|
-
);
|
|
444
|
-
for (const [attributeName, attribute] of morphAttributes) {
|
|
445
|
-
const name = naming2.getMorphRelationTypeName(contentType2, attributeName);
|
|
446
|
-
const { target } = attribute;
|
|
447
|
-
if (!Array.isArray(target)) {
|
|
448
|
-
continue;
|
|
449
|
-
}
|
|
450
|
-
const members = target.map((uid) => strapi2.getModel(uid)).map((contentType22) => naming2.getTypeName(contentType22));
|
|
451
|
-
registry.register(
|
|
452
|
-
name,
|
|
453
|
-
nexus.unionType({
|
|
454
|
-
name,
|
|
455
|
-
resolveType(obj) {
|
|
456
|
-
const contentType22 = strapi2.getModel(obj.__type);
|
|
457
|
-
if (!contentType22) {
|
|
458
|
-
return null;
|
|
459
|
-
}
|
|
460
|
-
if (contentType22.modelType === "component") {
|
|
461
|
-
return naming2.getComponentName(contentType22);
|
|
462
|
-
}
|
|
463
|
-
return naming2.getTypeName(contentType22);
|
|
464
|
-
},
|
|
465
|
-
definition(t) {
|
|
466
|
-
t.members(...members);
|
|
467
|
-
}
|
|
468
|
-
}),
|
|
469
|
-
{ kind: KINDS2.morph, contentType: contentType2, attributeName }
|
|
470
|
-
);
|
|
471
|
-
}
|
|
472
|
-
};
|
|
473
|
-
const registerScalars = ({ registry, strapi: strapi2 }) => {
|
|
474
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
475
|
-
const { scalars: scalars2 } = getService("internals");
|
|
476
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
477
|
-
Object.entries(scalars2).forEach(([name, definition]) => {
|
|
478
|
-
registry.register(name, definition, { kind: KINDS2.scalar });
|
|
479
|
-
});
|
|
480
|
-
};
|
|
481
|
-
const registerInternals = ({ registry, strapi: strapi2 }) => {
|
|
482
|
-
const { buildInternalTypes } = strapi2.plugin("graphql").service("internals");
|
|
483
|
-
const internalTypes = buildInternalTypes({ strapi: strapi2 });
|
|
484
|
-
for (const [kind, definitions] of Object.entries(internalTypes)) {
|
|
485
|
-
registry.registerMany(Object.entries(definitions), { kind });
|
|
486
|
-
}
|
|
487
|
-
};
|
|
488
|
-
const registerDynamicZonesDefinition = (contentType2, {
|
|
489
|
-
registry,
|
|
490
|
-
strapi: strapi2,
|
|
491
|
-
builders: builders2
|
|
492
|
-
}) => {
|
|
493
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
494
|
-
const {
|
|
495
|
-
naming: naming2,
|
|
496
|
-
attributes: { isDynamicZone }
|
|
497
|
-
} = getService("utils");
|
|
498
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
499
|
-
const { attributes: attributes2 } = contentType2;
|
|
500
|
-
const dynamicZoneAttributes = Object.keys(attributes2).filter(
|
|
501
|
-
(attributeName) => isDynamicZone(attributes2[attributeName])
|
|
502
|
-
);
|
|
503
|
-
for (const attributeName of dynamicZoneAttributes) {
|
|
504
|
-
const attribute = attributes2[attributeName];
|
|
505
|
-
const dzName = naming2.getDynamicZoneName(contentType2, attributeName);
|
|
506
|
-
const dzInputName = naming2.getDynamicZoneInputName(contentType2, attributeName);
|
|
507
|
-
const [type, input] = builders2.buildDynamicZoneDefinition(attribute, dzName, dzInputName);
|
|
508
|
-
const baseConfig = {
|
|
509
|
-
contentType: contentType2,
|
|
510
|
-
attributeName,
|
|
511
|
-
attribute
|
|
512
|
-
};
|
|
513
|
-
registry.register(dzName, type, { kind: KINDS2.dynamicZone, ...baseConfig });
|
|
514
|
-
registry.register(dzInputName, input, { kind: KINDS2.input, ...baseConfig });
|
|
515
|
-
}
|
|
516
|
-
};
|
|
517
|
-
const registerEnumsDefinition = (contentType2, {
|
|
518
|
-
registry,
|
|
519
|
-
strapi: strapi2,
|
|
520
|
-
builders: builders2
|
|
521
|
-
}) => {
|
|
522
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
523
|
-
const {
|
|
524
|
-
naming: naming2,
|
|
525
|
-
attributes: { isEnumeration }
|
|
526
|
-
} = getService("utils");
|
|
527
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
528
|
-
const { attributes: attributes2 } = contentType2;
|
|
529
|
-
const enumAttributes = Object.keys(attributes2).filter(
|
|
530
|
-
(attributeName) => isEnumeration(attributes2[attributeName])
|
|
531
|
-
);
|
|
532
|
-
for (const attributeName of enumAttributes) {
|
|
533
|
-
const attribute = attributes2[attributeName];
|
|
534
|
-
const enumName = naming2.getEnumName(contentType2, attributeName);
|
|
535
|
-
const enumDefinition = builders2.buildEnumTypeDefinition(attribute, enumName);
|
|
536
|
-
registry.register(enumName, enumDefinition, {
|
|
537
|
-
kind: KINDS2.enum,
|
|
538
|
-
contentType: contentType2,
|
|
539
|
-
attributeName,
|
|
540
|
-
attribute
|
|
541
|
-
});
|
|
542
|
-
}
|
|
543
|
-
};
|
|
544
|
-
const registerInputsDefinition = (contentType2, {
|
|
545
|
-
registry,
|
|
546
|
-
strapi: strapi2,
|
|
547
|
-
builders: builders2
|
|
548
|
-
}) => {
|
|
549
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
550
|
-
const { getComponentInputName, getContentTypeInputName } = getService("utils").naming;
|
|
551
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
552
|
-
const { modelType } = contentType2;
|
|
553
|
-
const type = (modelType === "component" ? getComponentInputName : getContentTypeInputName).call(
|
|
554
|
-
null,
|
|
555
|
-
contentType2
|
|
556
|
-
);
|
|
557
|
-
const definition = builders2.buildInputType(contentType2);
|
|
558
|
-
registry.register(type, definition, { kind: KINDS2.input, contentType: contentType2 });
|
|
559
|
-
};
|
|
560
|
-
const registerFiltersDefinition = (contentType2, {
|
|
561
|
-
registry,
|
|
562
|
-
strapi: strapi2,
|
|
563
|
-
builders: builders2
|
|
564
|
-
}) => {
|
|
565
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
566
|
-
const { getFiltersInputTypeName } = getService("utils").naming;
|
|
567
|
-
const { KINDS: KINDS2 } = getService("constants");
|
|
568
|
-
const type = getFiltersInputTypeName(contentType2);
|
|
569
|
-
const definition = builders2.buildContentTypeFilters(contentType2);
|
|
570
|
-
registry.register(type, definition, { kind: KINDS2.filtersInput, contentType: contentType2 });
|
|
571
|
-
};
|
|
572
|
-
const contentAPI = ({ strapi: strapi2 }) => {
|
|
573
|
-
const { mergeSchemas, addResolversToSchema } = require("@graphql-tools/schema");
|
|
574
|
-
const { service: getGraphQLService } = strapi2.plugin("graphql");
|
|
575
|
-
const { config: config2 } = strapi2.plugin("graphql");
|
|
576
|
-
const { KINDS: KINDS2, GENERIC_MORPH_TYPENAME: GENERIC_MORPH_TYPENAME2 } = getGraphQLService("constants");
|
|
577
|
-
const extensionService = getGraphQLService("extension");
|
|
578
|
-
let registry;
|
|
579
|
-
let builders2;
|
|
580
|
-
const buildSchema = () => {
|
|
581
|
-
const isShadowCRUDEnabled = !!config2("shadowCRUD");
|
|
582
|
-
registry = getGraphQLService("type-registry").new();
|
|
583
|
-
builders2 = getGraphQLService("builders").new("content-api", registry);
|
|
584
|
-
registerScalars({ registry, strapi: strapi2 });
|
|
585
|
-
registerInternals({ registry, strapi: strapi2 });
|
|
586
|
-
if (isShadowCRUDEnabled) {
|
|
587
|
-
shadowCRUD();
|
|
588
|
-
}
|
|
589
|
-
const schema = buildMergedSchema({ registry });
|
|
590
|
-
const extension = extensionService.generate({ typeRegistry: registry });
|
|
591
|
-
const schemaWithResolvers = addResolversToSchema({
|
|
592
|
-
schema,
|
|
593
|
-
resolvers: extension.resolvers
|
|
594
|
-
});
|
|
595
|
-
const outputs = {
|
|
596
|
-
schema: config2("artifacts.schema", false),
|
|
597
|
-
typegen: config2("artifacts.typegen", false)
|
|
598
|
-
};
|
|
599
|
-
const currentEnv = strapi2.config.get("environment");
|
|
600
|
-
const nexusSchema = nexus.makeSchema({
|
|
601
|
-
types: [],
|
|
602
|
-
// Build the schema from the merged GraphQL schema.
|
|
603
|
-
// Since we're passing the schema to the mergeSchema property, it'll transform our SDL type definitions
|
|
604
|
-
// into Nexus type definition, thus allowing them to be handled by Nexus plugins & other processing
|
|
605
|
-
mergeSchema: { schema: schemaWithResolvers },
|
|
606
|
-
// Apply user-defined plugins
|
|
607
|
-
plugins: extension.plugins,
|
|
608
|
-
// Whether to generate artifacts (GraphQL schema, TS types definitions) or not.
|
|
609
|
-
// By default, we generate artifacts only on development environment
|
|
610
|
-
shouldGenerateArtifacts: config2("generateArtifacts", currentEnv === "development"),
|
|
611
|
-
// Artifacts generation configuration
|
|
612
|
-
outputs
|
|
613
|
-
});
|
|
614
|
-
const wrappedNexusSchema = wrapResolvers({ schema: nexusSchema, strapi: strapi2, extension });
|
|
615
|
-
const prunedNexusSchema = utils$3.pruneSchema(wrappedNexusSchema);
|
|
616
|
-
return prunedNexusSchema;
|
|
617
|
-
};
|
|
618
|
-
const buildMergedSchema = ({ registry: registry2 }) => {
|
|
619
|
-
const { types: types2, typeDefs = [] } = extensionService.generate({ typeRegistry: registry2 });
|
|
620
|
-
const nexusSchema = nexus.makeSchema({ types: [registry2.definitions, types2] });
|
|
621
|
-
return mergeSchemas({
|
|
622
|
-
typeDefs,
|
|
623
|
-
// Give access to the shadowCRUD & nexus based types
|
|
624
|
-
// Note: This is necessary so that types defined in SDL can reference types defined with Nexus
|
|
625
|
-
schemas: [nexusSchema]
|
|
626
|
-
});
|
|
627
|
-
};
|
|
628
|
-
const shadowCRUD = () => {
|
|
629
|
-
const extensionService2 = getGraphQLService("extension");
|
|
630
|
-
const contentTypes = [
|
|
631
|
-
...Object.values(strapi2.components),
|
|
632
|
-
...Object.values(strapi2.contentTypes)
|
|
633
|
-
];
|
|
634
|
-
contentTypes.map(fp.prop("uid")).filter(fp.startsWith("admin::")).forEach((uid) => extensionService2.shadowCRUD(uid).disable());
|
|
635
|
-
const contentTypesWithShadowCRUD = contentTypes.filter(
|
|
636
|
-
(ct) => extensionService2.shadowCRUD(ct.uid).isEnabled()
|
|
637
|
-
);
|
|
638
|
-
registerAPITypes(contentTypesWithShadowCRUD);
|
|
639
|
-
registerMorphTypes(contentTypesWithShadowCRUD);
|
|
640
|
-
};
|
|
641
|
-
const registerAPITypes = (contentTypes) => {
|
|
642
|
-
for (const contentType2 of contentTypes) {
|
|
643
|
-
const { modelType } = contentType2;
|
|
644
|
-
const registerOptions = { registry, strapi: strapi2, builders: builders2 };
|
|
645
|
-
registerEnumsDefinition(contentType2, registerOptions);
|
|
646
|
-
registerDynamicZonesDefinition(contentType2, registerOptions);
|
|
647
|
-
registerFiltersDefinition(contentType2, registerOptions);
|
|
648
|
-
registerInputsDefinition(contentType2, registerOptions);
|
|
649
|
-
if (modelType === "component") {
|
|
650
|
-
registerComponent(contentType2, registerOptions);
|
|
651
|
-
continue;
|
|
652
|
-
}
|
|
653
|
-
const { kind } = contentType2;
|
|
654
|
-
if (kind === "singleType") {
|
|
655
|
-
registerSingleType(contentType2, registerOptions);
|
|
656
|
-
} else if (kind === "collectionType") {
|
|
657
|
-
registerCollectionType(contentType2, registerOptions);
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
};
|
|
661
|
-
const registerMorphTypes = (contentTypes) => {
|
|
662
|
-
const genericMorphType = builders2.buildGenericMorphDefinition();
|
|
663
|
-
registry.register(GENERIC_MORPH_TYPENAME2, genericMorphType, { kind: KINDS2.morph });
|
|
664
|
-
for (const contentType2 of contentTypes) {
|
|
665
|
-
registerPolymorphicContentType(contentType2, { registry, strapi: strapi2 });
|
|
666
|
-
}
|
|
667
|
-
};
|
|
668
|
-
return { buildSchema };
|
|
669
|
-
};
|
|
670
|
-
const { ApplicationError: ApplicationError$4 } = utils$2.errors;
|
|
671
|
-
const createTypeRegistry = () => {
|
|
672
|
-
const registry = /* @__PURE__ */ new Map();
|
|
673
|
-
const typeRegistry2 = {
|
|
674
|
-
/**
|
|
675
|
-
* Register a new type definition
|
|
676
|
-
*/
|
|
677
|
-
register(name, definition, config2 = {}) {
|
|
678
|
-
if (registry.has(name)) {
|
|
679
|
-
throw new ApplicationError$4(`"${name}" has already been registered`);
|
|
680
|
-
}
|
|
681
|
-
registry.set(name, { name, definition, config: config2 });
|
|
682
|
-
return this;
|
|
683
|
-
},
|
|
684
|
-
/**
|
|
685
|
-
* Register many types definitions at once
|
|
686
|
-
* @param {[string, NexusAcceptedTypeDef][]} definitionsEntries
|
|
687
|
-
* @param {object | function} [config]
|
|
688
|
-
*/
|
|
689
|
-
registerMany(definitionsEntries, config2 = {}) {
|
|
690
|
-
for (const [name, definition] of definitionsEntries) {
|
|
691
|
-
this.register(name, definition, fp.isFunction(config2) ? config2(name, definition) : config2);
|
|
692
|
-
}
|
|
693
|
-
return this;
|
|
694
|
-
},
|
|
695
|
-
/**
|
|
696
|
-
* Check if the given type name has already been added to the registry
|
|
697
|
-
* @param {string} name
|
|
698
|
-
* @return {boolean}
|
|
699
|
-
*/
|
|
700
|
-
has(name) {
|
|
701
|
-
return registry.has(name);
|
|
702
|
-
},
|
|
703
|
-
/**
|
|
704
|
-
* Get the type definition for `name`
|
|
705
|
-
* @param {string} name - The name of the type
|
|
706
|
-
*/
|
|
707
|
-
get(name) {
|
|
708
|
-
return registry.get(name);
|
|
709
|
-
},
|
|
710
|
-
/**
|
|
711
|
-
* Transform and return the registry as an object
|
|
712
|
-
* @return {Object<string, RegisteredTypeDef>}
|
|
713
|
-
*/
|
|
714
|
-
toObject() {
|
|
715
|
-
return Object.fromEntries(registry.entries());
|
|
716
|
-
},
|
|
717
|
-
/**
|
|
718
|
-
* Return the name of every registered type
|
|
719
|
-
* @return {string[]}
|
|
720
|
-
*/
|
|
721
|
-
get types() {
|
|
722
|
-
return Array.from(registry.keys());
|
|
723
|
-
},
|
|
724
|
-
/**
|
|
725
|
-
* Return all the registered definitions as an array
|
|
726
|
-
* @return {RegisteredTypeDef[]}
|
|
727
|
-
*/
|
|
728
|
-
get definitions() {
|
|
729
|
-
return Array.from(registry.values());
|
|
730
|
-
},
|
|
731
|
-
/**
|
|
732
|
-
* Filter and return the types definitions that matches the given predicate
|
|
733
|
-
* @param {function(RegisteredTypeDef): boolean} predicate
|
|
734
|
-
* @return {RegisteredTypeDef[]}
|
|
735
|
-
*/
|
|
736
|
-
where(predicate) {
|
|
737
|
-
return this.definitions.filter(predicate);
|
|
738
|
-
}
|
|
739
|
-
};
|
|
740
|
-
return typeRegistry2;
|
|
741
|
-
};
|
|
742
|
-
const typeRegistry = () => ({
|
|
743
|
-
new: createTypeRegistry
|
|
744
|
-
});
|
|
745
|
-
const { ApplicationError: ApplicationError$3 } = utils$2.errors;
|
|
746
|
-
const strapiScalarToGraphQLScalar = ({ strapi: strapi2 }) => {
|
|
747
|
-
const { STRAPI_SCALARS: STRAPI_SCALARS2, SCALARS_ASSOCIATIONS: SCALARS_ASSOCIATIONS2 } = strapi2.plugin("graphql").service("constants");
|
|
748
|
-
const missingStrapiScalars = fp.difference(STRAPI_SCALARS2, Object.keys(SCALARS_ASSOCIATIONS2));
|
|
749
|
-
if (missingStrapiScalars.length > 0) {
|
|
750
|
-
throw new ApplicationError$3("Some Strapi scalars are not handled in the GraphQL scalars mapper");
|
|
751
|
-
}
|
|
752
|
-
return {
|
|
753
|
-
/**
|
|
754
|
-
* Used to transform a Strapi scalar type into its GraphQL equivalent
|
|
755
|
-
*/
|
|
756
|
-
strapiScalarToGraphQLScalar(strapiScalar) {
|
|
757
|
-
return fp.get(strapiScalar, SCALARS_ASSOCIATIONS2);
|
|
758
|
-
}
|
|
759
|
-
};
|
|
760
|
-
};
|
|
761
|
-
const virtualScalarAttributes = ["id", "documentId"];
|
|
762
|
-
const graphQLFiltersToStrapiQuery = ({ strapi: strapi2 }) => {
|
|
763
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
764
|
-
const recursivelyReplaceScalarOperators = (data) => {
|
|
765
|
-
const { operators: operators2 } = getService("builders").filters;
|
|
766
|
-
if (Array.isArray(data)) {
|
|
767
|
-
return data.map(recursivelyReplaceScalarOperators);
|
|
768
|
-
}
|
|
769
|
-
if (fp.isDate(data) || !fp.isObject(data)) {
|
|
770
|
-
return data;
|
|
771
|
-
}
|
|
772
|
-
const result = {};
|
|
773
|
-
for (const [key, value] of Object.entries(data)) {
|
|
774
|
-
const isOperator = !!operators2[key];
|
|
775
|
-
const newKey = isOperator ? operators2[key].strapiOperator : key;
|
|
776
|
-
result[newKey] = recursivelyReplaceScalarOperators(value);
|
|
777
|
-
}
|
|
778
|
-
return result;
|
|
779
|
-
};
|
|
780
|
-
return {
|
|
781
|
-
/**
|
|
782
|
-
* Transform one or many GraphQL filters object into a valid Strapi query
|
|
783
|
-
* @param {object | object[]} filters
|
|
784
|
-
* @param {object} contentType
|
|
785
|
-
* @return {object | object[]}
|
|
786
|
-
*/
|
|
787
|
-
graphQLFiltersToStrapiQuery(filters2, contentType2) {
|
|
788
|
-
const { isStrapiScalar, isMedia, isRelation, isComponent } = getService("utils").attributes;
|
|
789
|
-
const { operators: operators2 } = getService("builders").filters;
|
|
790
|
-
const ROOT_LEVEL_OPERATORS = [operators2.and, operators2.or, operators2.not];
|
|
791
|
-
if (fp.isNil(filters2)) {
|
|
792
|
-
return {};
|
|
793
|
-
}
|
|
794
|
-
if (Array.isArray(filters2)) {
|
|
795
|
-
return filters2.map(
|
|
796
|
-
(filtersItem) => this.graphQLFiltersToStrapiQuery(filtersItem, contentType2)
|
|
797
|
-
);
|
|
798
|
-
}
|
|
799
|
-
const resultMap = {};
|
|
800
|
-
const { attributes: attributes2 } = contentType2;
|
|
801
|
-
const isAttribute = (attributeName) => {
|
|
802
|
-
return virtualScalarAttributes.includes(attributeName) || fp.has(attributeName, attributes2);
|
|
803
|
-
};
|
|
804
|
-
for (const [key, value] of Object.entries(filters2)) {
|
|
805
|
-
if (isAttribute(key)) {
|
|
806
|
-
const attribute = attributes2[key];
|
|
807
|
-
if (virtualScalarAttributes.includes(key) || isStrapiScalar(attribute)) {
|
|
808
|
-
resultMap[key] = recursivelyReplaceScalarOperators(value);
|
|
809
|
-
} else if (isRelation(attribute) || isMedia(attribute)) {
|
|
810
|
-
const relModel = strapi2.getModel(attribute.target);
|
|
811
|
-
resultMap[key] = this.graphQLFiltersToStrapiQuery(value, relModel);
|
|
812
|
-
} else if (isComponent(attribute)) {
|
|
813
|
-
const componentModel = strapi2.getModel(attribute.component);
|
|
814
|
-
resultMap[key] = this.graphQLFiltersToStrapiQuery(value, componentModel);
|
|
815
|
-
}
|
|
816
|
-
} else {
|
|
817
|
-
const rootLevelOperator = ROOT_LEVEL_OPERATORS.find(fp.propEq("fieldName", key));
|
|
818
|
-
if (rootLevelOperator) {
|
|
819
|
-
const { strapiOperator } = rootLevelOperator;
|
|
820
|
-
resultMap[strapiOperator] = this.graphQLFiltersToStrapiQuery(value, contentType2);
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
}
|
|
824
|
-
return resultMap;
|
|
825
|
-
}
|
|
826
|
-
};
|
|
827
|
-
};
|
|
828
|
-
const graphqlScalarToOperators = ({ strapi: strapi2 }) => ({
|
|
829
|
-
graphqlScalarToOperators(graphqlScalar) {
|
|
830
|
-
const { GRAPHQL_SCALAR_OPERATORS: GRAPHQL_SCALAR_OPERATORS2 } = strapi2.plugin("graphql").service("constants");
|
|
831
|
-
const { operators: operators2 } = strapi2.plugin("graphql").service("builders").filters;
|
|
832
|
-
const associations = fp.mapValues(
|
|
833
|
-
fp.map((operatorName) => operators2[operatorName]),
|
|
834
|
-
GRAPHQL_SCALAR_OPERATORS2
|
|
835
|
-
);
|
|
836
|
-
return fp.get(graphqlScalar, associations);
|
|
837
|
-
}
|
|
838
|
-
});
|
|
839
|
-
const entityToResponseEntity = (entity2) => ({
|
|
840
|
-
id: entity2.id,
|
|
841
|
-
attributes: entity2
|
|
842
|
-
});
|
|
843
|
-
const entitiesToResponseEntities = fp.map(entityToResponseEntity);
|
|
844
|
-
const entityToResponseEntity$1 = () => ({
|
|
845
|
-
entityToResponseEntity,
|
|
846
|
-
entitiesToResponseEntities
|
|
847
|
-
});
|
|
848
|
-
const mappers = (context) => ({
|
|
849
|
-
...strapiScalarToGraphQLScalar(context),
|
|
850
|
-
...graphQLFiltersToStrapiQuery(context),
|
|
851
|
-
...graphqlScalarToOperators(context),
|
|
852
|
-
...entityToResponseEntity$1()
|
|
853
|
-
});
|
|
854
|
-
const attributes = ({ strapi: strapi2 }) => {
|
|
855
|
-
const isStrapiScalar = (attribute) => {
|
|
856
|
-
return strapi2.plugin("graphql").service("constants").STRAPI_SCALARS.includes(attribute.type);
|
|
857
|
-
};
|
|
858
|
-
const isGraphQLScalar = (attribute) => {
|
|
859
|
-
return strapi2.plugin("graphql").service("constants").GRAPHQL_SCALARS.includes(attribute.type);
|
|
860
|
-
};
|
|
861
|
-
const isMorphRelation = (attribute) => {
|
|
862
|
-
return attribute.type === "relation" && attribute.relation.includes("morph");
|
|
863
|
-
};
|
|
864
|
-
const isMedia = fp.propEq("type", "media");
|
|
865
|
-
const isRelation = fp.propEq("type", "relation");
|
|
866
|
-
const isEnumeration = fp.propEq("type", "enumeration");
|
|
867
|
-
const isComponent = fp.propEq("type", "component");
|
|
868
|
-
const isDynamicZone = fp.propEq("type", "dynamiczone");
|
|
869
|
-
return {
|
|
870
|
-
isStrapiScalar,
|
|
871
|
-
isGraphQLScalar,
|
|
872
|
-
isMorphRelation,
|
|
873
|
-
isMedia,
|
|
874
|
-
isRelation,
|
|
875
|
-
isEnumeration,
|
|
876
|
-
isComponent,
|
|
877
|
-
isDynamicZone
|
|
878
|
-
};
|
|
879
|
-
};
|
|
880
|
-
const { ApplicationError: ApplicationError$2 } = utils$2.errors;
|
|
881
|
-
const naming = ({ strapi: strapi2 }) => {
|
|
882
|
-
const getEnumName = (contentType2, attributeName) => {
|
|
883
|
-
const { attributes: attributes2 } = contentType2;
|
|
884
|
-
const { enumName } = attributes2[attributeName];
|
|
885
|
-
const { modelType } = contentType2;
|
|
886
|
-
const typeName = modelType === "component" ? getComponentName(contentType2) : getTypeName(contentType2);
|
|
887
|
-
const defaultEnumName = `ENUM_${typeName.toUpperCase()}_${attributeName.toUpperCase()}`;
|
|
888
|
-
return enumName || defaultEnumName;
|
|
889
|
-
};
|
|
890
|
-
const getTypeName = (contentType2, {
|
|
891
|
-
plurality = "singular"
|
|
892
|
-
} = {}) => {
|
|
893
|
-
const plugin = fp.get("plugin", contentType2);
|
|
894
|
-
const modelName = fp.get("modelName", contentType2);
|
|
895
|
-
const name = plurality === "singular" ? fp.get("info.singularName", contentType2) : fp.get("info.pluralName", contentType2);
|
|
896
|
-
const transformedPlugin = fp.upperFirst(fp.camelCase(plugin));
|
|
897
|
-
const transformedModelName = fp.upperFirst(fp.camelCase(name || pluralize.singular(modelName)));
|
|
898
|
-
return `${transformedPlugin}${transformedModelName}`;
|
|
899
|
-
};
|
|
900
|
-
const getEntityName = (contentType2) => {
|
|
901
|
-
return `${getTypeName(contentType2)}Entity`;
|
|
902
|
-
};
|
|
903
|
-
const getEntityMetaName = (contentType2) => {
|
|
904
|
-
return `${getEntityName(contentType2)}Meta`;
|
|
905
|
-
};
|
|
906
|
-
const getEntityResponseName = (contentType2) => {
|
|
907
|
-
return `${getEntityName(contentType2)}Response`;
|
|
908
|
-
};
|
|
909
|
-
const getEntityResponseCollectionName = (contentType2) => {
|
|
910
|
-
return `${getEntityName(contentType2)}ResponseCollection`;
|
|
911
|
-
};
|
|
912
|
-
const getRelationResponseCollectionName = (contentType2) => {
|
|
913
|
-
return `${getTypeName(contentType2)}RelationResponseCollection`;
|
|
914
|
-
};
|
|
915
|
-
const getComponentName = (contentType2) => {
|
|
916
|
-
return contentType2.globalId;
|
|
917
|
-
};
|
|
918
|
-
const getComponentNameFromAttribute = (attribute) => {
|
|
919
|
-
return strapi2.components[attribute.component].globalId;
|
|
920
|
-
};
|
|
921
|
-
const getDynamicZoneName = (contentType2, attributeName) => {
|
|
922
|
-
const typeName = getTypeName(contentType2);
|
|
923
|
-
const dzName = fp.upperFirst(fp.camelCase(attributeName));
|
|
924
|
-
const suffix = "DynamicZone";
|
|
925
|
-
return `${typeName}${dzName}${suffix}`;
|
|
926
|
-
};
|
|
927
|
-
const getDynamicZoneInputName = (contentType2, attributeName) => {
|
|
928
|
-
const dzName = getDynamicZoneName(contentType2, attributeName);
|
|
929
|
-
return `${dzName}Input`;
|
|
930
|
-
};
|
|
931
|
-
const getComponentInputName = (contentType2) => {
|
|
932
|
-
const componentName = getComponentName(contentType2);
|
|
933
|
-
return `${componentName}Input`;
|
|
934
|
-
};
|
|
935
|
-
const getContentTypeInputName = (contentType2) => {
|
|
936
|
-
const typeName = getTypeName(contentType2);
|
|
937
|
-
return `${typeName}Input`;
|
|
938
|
-
};
|
|
939
|
-
const getEntityQueriesTypeName = (contentType2) => {
|
|
940
|
-
return `${getEntityName(contentType2)}Queries`;
|
|
941
|
-
};
|
|
942
|
-
const getEntityMutationsTypeName = (contentType2) => {
|
|
943
|
-
return `${getEntityName(contentType2)}Mutations`;
|
|
944
|
-
};
|
|
945
|
-
const getFiltersInputTypeName = (contentType2) => {
|
|
946
|
-
const isComponent = contentType2.modelType === "component";
|
|
947
|
-
const baseName = isComponent ? getComponentName(contentType2) : getTypeName(contentType2);
|
|
948
|
-
return `${baseName}FiltersInput`;
|
|
949
|
-
};
|
|
950
|
-
const getScalarFilterInputTypeName = (scalarType) => {
|
|
951
|
-
return `${scalarType}FilterInput`;
|
|
952
|
-
};
|
|
953
|
-
const getMorphRelationTypeName = (contentType2, attributeName) => {
|
|
954
|
-
const typeName = getTypeName(contentType2);
|
|
955
|
-
const formattedAttr = fp.upperFirst(fp.camelCase(attributeName));
|
|
956
|
-
return `${typeName}${formattedAttr}Morph`;
|
|
957
|
-
};
|
|
958
|
-
const buildCustomTypeNameGenerator = (options) => {
|
|
959
|
-
const { prefix = "", suffix = "", plurality = "singular", firstLetterCase = "upper" } = options;
|
|
960
|
-
if (!["plural", "singular"].includes(plurality)) {
|
|
961
|
-
throw new ApplicationError$2(
|
|
962
|
-
`"plurality" param must be either "plural" or "singular", but got: "${plurality}"`
|
|
963
|
-
);
|
|
964
|
-
}
|
|
965
|
-
const getCustomTypeName = fp.pipe(
|
|
966
|
-
(ct) => getTypeName(ct, { plurality }),
|
|
967
|
-
firstLetterCase === "upper" ? fp.upperFirst : fp.lowerFirst
|
|
968
|
-
);
|
|
969
|
-
return (contentType2) => `${prefix}${getCustomTypeName(contentType2)}${suffix}`;
|
|
970
|
-
};
|
|
971
|
-
const getFindQueryName = buildCustomTypeNameGenerator({
|
|
972
|
-
plurality: "plural",
|
|
973
|
-
firstLetterCase: "lower"
|
|
974
|
-
});
|
|
975
|
-
const getFindConnectionQueryName = (contentType2) => {
|
|
976
|
-
return `${getFindQueryName(contentType2)}_connection`;
|
|
977
|
-
};
|
|
978
|
-
const getFindOneQueryName = buildCustomTypeNameGenerator({ firstLetterCase: "lower" });
|
|
979
|
-
const getCreateMutationTypeName = buildCustomTypeNameGenerator({
|
|
980
|
-
prefix: "create",
|
|
981
|
-
firstLetterCase: "upper"
|
|
982
|
-
});
|
|
983
|
-
const getUpdateMutationTypeName = buildCustomTypeNameGenerator({
|
|
984
|
-
prefix: "update",
|
|
985
|
-
firstLetterCase: "upper"
|
|
986
|
-
});
|
|
987
|
-
const getDeleteMutationTypeName = buildCustomTypeNameGenerator({
|
|
988
|
-
prefix: "delete",
|
|
989
|
-
firstLetterCase: "upper"
|
|
990
|
-
});
|
|
991
|
-
return {
|
|
992
|
-
getEnumName,
|
|
993
|
-
getTypeName,
|
|
994
|
-
getEntityName,
|
|
995
|
-
getEntityMetaName,
|
|
996
|
-
getEntityResponseName,
|
|
997
|
-
getEntityResponseCollectionName,
|
|
998
|
-
getRelationResponseCollectionName,
|
|
999
|
-
getComponentName,
|
|
1000
|
-
getComponentNameFromAttribute,
|
|
1001
|
-
getDynamicZoneName,
|
|
1002
|
-
getDynamicZoneInputName,
|
|
1003
|
-
getComponentInputName,
|
|
1004
|
-
getContentTypeInputName,
|
|
1005
|
-
getEntityQueriesTypeName,
|
|
1006
|
-
getEntityMutationsTypeName,
|
|
1007
|
-
getFiltersInputTypeName,
|
|
1008
|
-
getScalarFilterInputTypeName,
|
|
1009
|
-
getMorphRelationTypeName,
|
|
1010
|
-
buildCustomTypeNameGenerator,
|
|
1011
|
-
getFindQueryName,
|
|
1012
|
-
getFindOneQueryName,
|
|
1013
|
-
getCreateMutationTypeName,
|
|
1014
|
-
getUpdateMutationTypeName,
|
|
1015
|
-
getDeleteMutationTypeName,
|
|
1016
|
-
getFindConnectionQueryName
|
|
1017
|
-
};
|
|
1018
|
-
};
|
|
1019
|
-
const playground = (ctx) => {
|
|
1020
|
-
return {
|
|
1021
|
-
isEnabled() {
|
|
1022
|
-
return !(process.env.NODE_ENV === "production" && !ctx.strapi.plugin("graphql").config("playgroundAlways"));
|
|
1023
|
-
}
|
|
1024
|
-
};
|
|
1025
|
-
};
|
|
1026
|
-
const utils$1 = (context) => ({
|
|
1027
|
-
playground: playground(context),
|
|
1028
|
-
naming: naming(context),
|
|
1029
|
-
attributes: attributes(context),
|
|
1030
|
-
mappers: mappers(context)
|
|
1031
|
-
});
|
|
1032
|
-
const PAGINATION_TYPE_NAME = "Pagination";
|
|
1033
|
-
const DELETE_MUTATION_RESPONSE_TYPE_NAME = "DeleteMutationResponse";
|
|
1034
|
-
const PUBLICATION_STATUS_TYPE_NAME = "PublicationStatus";
|
|
1035
|
-
const ERROR_TYPE_NAME = "Error";
|
|
1036
|
-
const RESPONSE_COLLECTION_META_TYPE_NAME = "ResponseCollectionMeta";
|
|
1037
|
-
const GRAPHQL_SCALARS = [
|
|
1038
|
-
"ID",
|
|
1039
|
-
"Boolean",
|
|
1040
|
-
"Int",
|
|
1041
|
-
"String",
|
|
1042
|
-
"Long",
|
|
1043
|
-
"Float",
|
|
1044
|
-
"JSON",
|
|
1045
|
-
"Date",
|
|
1046
|
-
"Time",
|
|
1047
|
-
"DateTime"
|
|
1048
|
-
];
|
|
1049
|
-
const STRAPI_SCALARS = [
|
|
1050
|
-
"boolean",
|
|
1051
|
-
"integer",
|
|
1052
|
-
"string",
|
|
1053
|
-
"richtext",
|
|
1054
|
-
"blocks",
|
|
1055
|
-
"enumeration",
|
|
1056
|
-
"biginteger",
|
|
1057
|
-
"float",
|
|
1058
|
-
"decimal",
|
|
1059
|
-
"json",
|
|
1060
|
-
"date",
|
|
1061
|
-
"time",
|
|
1062
|
-
"datetime",
|
|
1063
|
-
"timestamp",
|
|
1064
|
-
"uid",
|
|
1065
|
-
"email",
|
|
1066
|
-
"password",
|
|
1067
|
-
"text"
|
|
1068
|
-
];
|
|
1069
|
-
const SCALARS_ASSOCIATIONS = {
|
|
1070
|
-
uid: "String",
|
|
1071
|
-
email: "String",
|
|
1072
|
-
password: "String",
|
|
1073
|
-
text: "String",
|
|
1074
|
-
boolean: "Boolean",
|
|
1075
|
-
integer: "Int",
|
|
1076
|
-
string: "String",
|
|
1077
|
-
enumeration: "String",
|
|
1078
|
-
richtext: "String",
|
|
1079
|
-
blocks: "JSON",
|
|
1080
|
-
biginteger: "Long",
|
|
1081
|
-
float: "Float",
|
|
1082
|
-
decimal: "Float",
|
|
1083
|
-
json: "JSON",
|
|
1084
|
-
date: "Date",
|
|
1085
|
-
time: "Time",
|
|
1086
|
-
datetime: "DateTime",
|
|
1087
|
-
timestamp: "DateTime"
|
|
1088
|
-
};
|
|
1089
|
-
const GENERIC_MORPH_TYPENAME = "GenericMorph";
|
|
1090
|
-
const KINDS = {
|
|
1091
|
-
type: "type",
|
|
1092
|
-
component: "component",
|
|
1093
|
-
dynamicZone: "dynamic-zone",
|
|
1094
|
-
enum: "enum",
|
|
1095
|
-
entity: "entity",
|
|
1096
|
-
entityResponse: "entity-response",
|
|
1097
|
-
entityResponseCollection: "entity-response-collection",
|
|
1098
|
-
relationResponseCollection: "relation-response-collection",
|
|
1099
|
-
query: "query",
|
|
1100
|
-
mutation: "mutation",
|
|
1101
|
-
input: "input",
|
|
1102
|
-
filtersInput: "filters-input",
|
|
1103
|
-
scalar: "scalar",
|
|
1104
|
-
morph: "polymorphic",
|
|
1105
|
-
internal: "internal"
|
|
1106
|
-
};
|
|
1107
|
-
const allOperators = [
|
|
1108
|
-
"and",
|
|
1109
|
-
"or",
|
|
1110
|
-
"not",
|
|
1111
|
-
"eq",
|
|
1112
|
-
"eqi",
|
|
1113
|
-
"ne",
|
|
1114
|
-
"nei",
|
|
1115
|
-
"startsWith",
|
|
1116
|
-
"endsWith",
|
|
1117
|
-
"contains",
|
|
1118
|
-
"notContains",
|
|
1119
|
-
"containsi",
|
|
1120
|
-
"notContainsi",
|
|
1121
|
-
"gt",
|
|
1122
|
-
"gte",
|
|
1123
|
-
"lt",
|
|
1124
|
-
"lte",
|
|
1125
|
-
"null",
|
|
1126
|
-
"notNull",
|
|
1127
|
-
"in",
|
|
1128
|
-
"notIn",
|
|
1129
|
-
"between"
|
|
1130
|
-
];
|
|
1131
|
-
const GRAPHQL_SCALAR_OPERATORS = {
|
|
1132
|
-
// ID
|
|
1133
|
-
ID: allOperators,
|
|
1134
|
-
// Booleans
|
|
1135
|
-
Boolean: allOperators,
|
|
1136
|
-
// Strings
|
|
1137
|
-
String: allOperators,
|
|
1138
|
-
// Numbers
|
|
1139
|
-
Int: allOperators,
|
|
1140
|
-
Long: allOperators,
|
|
1141
|
-
Float: allOperators,
|
|
1142
|
-
// Dates
|
|
1143
|
-
Date: allOperators,
|
|
1144
|
-
Time: allOperators,
|
|
1145
|
-
DateTime: allOperators,
|
|
1146
|
-
// Others
|
|
1147
|
-
JSON: allOperators
|
|
1148
|
-
};
|
|
1149
|
-
const ERROR_CODES = {
|
|
1150
|
-
emptyDynamicZone: "dynamiczone.empty"
|
|
1151
|
-
};
|
|
1152
|
-
const constants = () => ({
|
|
1153
|
-
PAGINATION_TYPE_NAME,
|
|
1154
|
-
RESPONSE_COLLECTION_META_TYPE_NAME,
|
|
1155
|
-
DELETE_MUTATION_RESPONSE_TYPE_NAME,
|
|
1156
|
-
PUBLICATION_STATUS_TYPE_NAME,
|
|
1157
|
-
GRAPHQL_SCALARS,
|
|
1158
|
-
STRAPI_SCALARS,
|
|
1159
|
-
GENERIC_MORPH_TYPENAME,
|
|
1160
|
-
KINDS,
|
|
1161
|
-
GRAPHQL_SCALAR_OPERATORS,
|
|
1162
|
-
SCALARS_ASSOCIATIONS,
|
|
1163
|
-
ERROR_CODES,
|
|
1164
|
-
ERROR_TYPE_NAME
|
|
1165
|
-
});
|
|
1166
|
-
const SortArg = nexus.arg({
|
|
1167
|
-
type: nexus.list("String"),
|
|
1168
|
-
default: []
|
|
1169
|
-
});
|
|
1170
|
-
const publicationStatus$1 = ({ strapi: strapi2 }) => {
|
|
1171
|
-
const { PUBLICATION_STATUS_TYPE_NAME: PUBLICATION_STATUS_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
|
|
1172
|
-
return nexus.arg({
|
|
1173
|
-
type: PUBLICATION_STATUS_TYPE_NAME2,
|
|
1174
|
-
default: "published"
|
|
1175
|
-
});
|
|
1176
|
-
};
|
|
1177
|
-
const PaginationInputType = nexus.inputObjectType({
|
|
1178
|
-
name: "PaginationArg",
|
|
1179
|
-
definition(t) {
|
|
1180
|
-
t.int("page");
|
|
1181
|
-
t.int("pageSize");
|
|
1182
|
-
t.int("start");
|
|
1183
|
-
t.int("limit");
|
|
1184
|
-
}
|
|
1185
|
-
});
|
|
1186
|
-
const PaginationArg = nexus.arg({
|
|
1187
|
-
type: PaginationInputType,
|
|
1188
|
-
default: {}
|
|
1189
|
-
});
|
|
1190
|
-
const args = (context) => ({
|
|
1191
|
-
SortArg,
|
|
1192
|
-
PaginationArg,
|
|
1193
|
-
PublicationStatusArg: publicationStatus$1(context)
|
|
1194
|
-
});
|
|
1195
|
-
const { ValidationError: ValidationError$2 } = utils$2.errors;
|
|
1196
|
-
const TimeScalar = new graphql.GraphQLScalarType({
|
|
1197
|
-
name: "Time",
|
|
1198
|
-
description: "A time string with format HH:mm:ss.SSS",
|
|
1199
|
-
serialize(value) {
|
|
1200
|
-
return utils$2.parseType({ type: "time", value });
|
|
1201
|
-
},
|
|
1202
|
-
parseValue(value) {
|
|
1203
|
-
return utils$2.parseType({ type: "time", value });
|
|
1204
|
-
},
|
|
1205
|
-
parseLiteral(ast) {
|
|
1206
|
-
if (ast.kind !== graphql.Kind.STRING) {
|
|
1207
|
-
throw new ValidationError$2("Time cannot represent non string type");
|
|
1208
|
-
}
|
|
1209
|
-
const { value } = ast;
|
|
1210
|
-
return utils$2.parseType({ type: "time", value });
|
|
1211
|
-
}
|
|
1212
|
-
});
|
|
1213
|
-
const parseAndCast = (parseFn) => (...args2) => {
|
|
1214
|
-
const parsedValue = parseFn(...args2);
|
|
1215
|
-
if (parsedValue instanceof Date) {
|
|
1216
|
-
return parsedValue.toISOString().split("T")[0];
|
|
1217
|
-
}
|
|
1218
|
-
return parsedValue;
|
|
1219
|
-
};
|
|
1220
|
-
graphqlScalars.GraphQLDate.parseValue = parseAndCast(graphqlScalars.GraphQLDate.parseValue);
|
|
1221
|
-
graphqlScalars.GraphQLDate.parseLiteral = parseAndCast(graphqlScalars.GraphQLDate.parseLiteral);
|
|
1222
|
-
const scalars = () => ({
|
|
1223
|
-
JSON: nexus.asNexusMethod(graphqlScalars.GraphQLJSON, "json"),
|
|
1224
|
-
DateTime: nexus.asNexusMethod(graphqlScalars.GraphQLDateTime, "dateTime"),
|
|
1225
|
-
Time: nexus.asNexusMethod(TimeScalar, "time"),
|
|
1226
|
-
Date: nexus.asNexusMethod(graphqlScalars.GraphQLDate, "date"),
|
|
1227
|
-
Long: nexus.asNexusMethod(graphqlScalars.GraphQLLong, "long")
|
|
1228
|
-
});
|
|
1229
|
-
const pagination = ({ strapi: strapi2 }) => {
|
|
1230
|
-
const { PAGINATION_TYPE_NAME: PAGINATION_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
|
|
1231
|
-
return {
|
|
1232
|
-
/**
|
|
1233
|
-
* Type definition for a Pagination object
|
|
1234
|
-
* @type {NexusObjectTypeDef}
|
|
1235
|
-
*/
|
|
1236
|
-
Pagination: nexus.objectType({
|
|
1237
|
-
name: PAGINATION_TYPE_NAME2,
|
|
1238
|
-
definition(t) {
|
|
1239
|
-
t.nonNull.int("total");
|
|
1240
|
-
t.nonNull.int("page");
|
|
1241
|
-
t.nonNull.int("pageSize");
|
|
1242
|
-
t.nonNull.int("pageCount");
|
|
1243
|
-
}
|
|
1244
|
-
})
|
|
1245
|
-
};
|
|
1246
|
-
};
|
|
1247
|
-
const buildResponseCollectionMeta = ({ strapi: strapi2 }) => {
|
|
1248
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
1249
|
-
const { RESPONSE_COLLECTION_META_TYPE_NAME: RESPONSE_COLLECTION_META_TYPE_NAME2, PAGINATION_TYPE_NAME: PAGINATION_TYPE_NAME2 } = getService("constants");
|
|
1250
|
-
return {
|
|
1251
|
-
/**
|
|
1252
|
-
* A shared type definition used in EntitiesResponseCollection
|
|
1253
|
-
* to have information about the collection as a whole
|
|
1254
|
-
* @type {NexusObjectTypeDef}
|
|
1255
|
-
*/
|
|
1256
|
-
ResponseCollectionMeta: nexus.objectType({
|
|
1257
|
-
name: RESPONSE_COLLECTION_META_TYPE_NAME2,
|
|
1258
|
-
definition(t) {
|
|
1259
|
-
const { resolvePagination } = getService("builders").get("content-api");
|
|
1260
|
-
t.nonNull.field("pagination", {
|
|
1261
|
-
type: PAGINATION_TYPE_NAME2,
|
|
1262
|
-
resolve: resolvePagination
|
|
1263
|
-
});
|
|
1264
|
-
}
|
|
1265
|
-
})
|
|
1266
|
-
};
|
|
1267
|
-
};
|
|
1268
|
-
const buildDeleteMutationResponse = ({ strapi: strapi2 }) => {
|
|
1269
|
-
const { DELETE_MUTATION_RESPONSE_TYPE_NAME: DELETE_MUTATION_RESPONSE_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
|
|
1270
|
-
return {
|
|
1271
|
-
DeleteMutationResponse: nexus.objectType({
|
|
1272
|
-
name: DELETE_MUTATION_RESPONSE_TYPE_NAME2,
|
|
1273
|
-
definition(t) {
|
|
1274
|
-
t.nonNull.id("documentId");
|
|
1275
|
-
}
|
|
1276
|
-
})
|
|
1277
|
-
};
|
|
1278
|
-
};
|
|
1279
|
-
const publicationStatus = ({ strapi: strapi2 }) => {
|
|
1280
|
-
const { PUBLICATION_STATUS_TYPE_NAME: PUBLICATION_STATUS_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
|
|
1281
|
-
return {
|
|
1282
|
-
/**
|
|
1283
|
-
* An enum type definition representing a publication status
|
|
1284
|
-
* @type {NexusEnumTypeDef}
|
|
1285
|
-
*/
|
|
1286
|
-
PublicationStatus: nexus.enumType({
|
|
1287
|
-
name: PUBLICATION_STATUS_TYPE_NAME2,
|
|
1288
|
-
members: {
|
|
1289
|
-
DRAFT: "draft",
|
|
1290
|
-
PUBLISHED: "published"
|
|
1291
|
-
}
|
|
1292
|
-
})
|
|
1293
|
-
};
|
|
1294
|
-
};
|
|
1295
|
-
const buildScalarFilters = ({ strapi: strapi2 }) => {
|
|
1296
|
-
const { naming: naming2, mappers: mappers2 } = strapi2.plugin("graphql").service("utils");
|
|
1297
|
-
const { helpers: helpers2 } = strapi2.plugin("graphql").service("internals");
|
|
1298
|
-
return helpers2.getEnabledScalars().reduce((acc, type) => {
|
|
1299
|
-
const operators2 = mappers2.graphqlScalarToOperators(type);
|
|
1300
|
-
const typeName = naming2.getScalarFilterInputTypeName(type);
|
|
1301
|
-
if (!operators2 || operators2.length === 0) {
|
|
1302
|
-
return acc;
|
|
1303
|
-
}
|
|
1304
|
-
return {
|
|
1305
|
-
...acc,
|
|
1306
|
-
[typeName]: nexus.inputObjectType({
|
|
1307
|
-
name: typeName,
|
|
1308
|
-
definition(t) {
|
|
1309
|
-
for (const operator of operators2) {
|
|
1310
|
-
operator.add(t, type);
|
|
1311
|
-
}
|
|
1312
|
-
}
|
|
1313
|
-
})
|
|
1314
|
-
};
|
|
1315
|
-
}, {});
|
|
1316
|
-
};
|
|
1317
|
-
const filters$1 = (context) => ({
|
|
1318
|
-
scalars: buildScalarFilters(context)
|
|
1319
|
-
});
|
|
1320
|
-
const { ValidationError: ValidationError$1 } = utils$2.errors;
|
|
1321
|
-
const error = ({ strapi: strapi2 }) => {
|
|
1322
|
-
const { ERROR_CODES: ERROR_CODES2, ERROR_TYPE_NAME: ERROR_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
|
|
1323
|
-
return nexus.objectType({
|
|
1324
|
-
name: ERROR_TYPE_NAME2,
|
|
1325
|
-
definition(t) {
|
|
1326
|
-
t.nonNull.string("code", {
|
|
1327
|
-
resolve(parent) {
|
|
1328
|
-
const code = fp.get("code", parent);
|
|
1329
|
-
const isValidPlaceholderCode = Object.values(ERROR_CODES2).includes(code);
|
|
1330
|
-
if (!isValidPlaceholderCode) {
|
|
1331
|
-
throw new ValidationError$1(`"${code}" is not a valid code value`);
|
|
1332
|
-
}
|
|
1333
|
-
return code;
|
|
1334
|
-
}
|
|
1335
|
-
});
|
|
1336
|
-
t.string("message");
|
|
1337
|
-
}
|
|
1338
|
-
});
|
|
1339
|
-
};
|
|
1340
|
-
const types = (context) => () => {
|
|
1341
|
-
const { strapi: strapi2 } = context;
|
|
1342
|
-
const { KINDS: KINDS2 } = strapi2.plugin("graphql").service("constants");
|
|
1343
|
-
return {
|
|
1344
|
-
[KINDS2.internal]: {
|
|
1345
|
-
error: error(context),
|
|
1346
|
-
pagination: pagination(context),
|
|
1347
|
-
responseCollectionMeta: buildResponseCollectionMeta(context),
|
|
1348
|
-
deleteDocumentResponse: buildDeleteMutationResponse(context)
|
|
1349
|
-
},
|
|
1350
|
-
[KINDS2.enum]: {
|
|
1351
|
-
publicationStatus: publicationStatus(context)
|
|
1352
|
-
},
|
|
1353
|
-
[KINDS2.filtersInput]: {
|
|
1354
|
-
...filters$1(context)
|
|
1355
|
-
}
|
|
1356
|
-
};
|
|
1357
|
-
};
|
|
1358
|
-
const getEnabledScalars = ({ strapi: strapi2 }) => () => {
|
|
1359
|
-
const { GRAPHQL_SCALAR_OPERATORS: GRAPHQL_SCALAR_OPERATORS2 } = strapi2.plugin("graphql").service("constants");
|
|
1360
|
-
return Object.entries(GRAPHQL_SCALAR_OPERATORS2).filter(([, value]) => value.length > 0).map(fp.first);
|
|
1361
|
-
};
|
|
1362
|
-
const helpers = (context) => ({
|
|
1363
|
-
getEnabledScalars: getEnabledScalars(context)
|
|
1364
|
-
});
|
|
1365
|
-
const internals = (context) => ({
|
|
1366
|
-
args: args(context),
|
|
1367
|
-
scalars: scalars(),
|
|
1368
|
-
buildInternalTypes: types(context),
|
|
1369
|
-
helpers: helpers(context)
|
|
1370
|
-
});
|
|
1371
|
-
const buildEnumTypeDefinition = (definition, name) => {
|
|
1372
|
-
return nexus.enumType({
|
|
1373
|
-
name,
|
|
1374
|
-
members: definition.enum.reduce(
|
|
1375
|
-
(acc, value) => fp.set(utils$2.strings.toRegressedEnumValue(value), value, acc),
|
|
1376
|
-
{}
|
|
1377
|
-
)
|
|
1378
|
-
});
|
|
1379
|
-
};
|
|
1380
|
-
const enums = () => ({
|
|
1381
|
-
buildEnumTypeDefinition
|
|
1382
|
-
});
|
|
1383
|
-
const { ApplicationError: ApplicationError$1 } = utils$2.errors;
|
|
1384
|
-
const dynamicZone = ({ strapi: strapi2 }) => {
|
|
1385
|
-
const buildTypeDefinition = (name, components) => {
|
|
1386
|
-
const { ERROR_TYPE_NAME: ERROR_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
|
|
1387
|
-
const isEmpty = components.length === 0;
|
|
1388
|
-
const componentsTypeNames = components.map((componentUID) => {
|
|
1389
|
-
const component = strapi2.components[componentUID];
|
|
1390
|
-
if (!component) {
|
|
1391
|
-
throw new ApplicationError$1(
|
|
1392
|
-
`Trying to create a dynamic zone type with an unknown component: "${componentUID}"`
|
|
1393
|
-
);
|
|
1394
|
-
}
|
|
1395
|
-
return component.globalId;
|
|
1396
|
-
});
|
|
1397
|
-
return nexus.unionType({
|
|
1398
|
-
name,
|
|
1399
|
-
resolveType(obj) {
|
|
1400
|
-
if (isEmpty) {
|
|
1401
|
-
return ERROR_TYPE_NAME2;
|
|
1402
|
-
}
|
|
1403
|
-
return strapi2.components[obj.__component].globalId;
|
|
1404
|
-
},
|
|
1405
|
-
definition(t) {
|
|
1406
|
-
t.members(...componentsTypeNames, ERROR_TYPE_NAME2);
|
|
1407
|
-
}
|
|
1408
|
-
});
|
|
1409
|
-
};
|
|
1410
|
-
const buildInputDefinition = (name, components) => {
|
|
1411
|
-
const parseData = (value) => {
|
|
1412
|
-
const component = Object.values(strapi2.components).find(
|
|
1413
|
-
(component2) => component2.globalId === value.__typename
|
|
1414
|
-
);
|
|
1415
|
-
if (!component) {
|
|
1416
|
-
throw new ApplicationError$1(
|
|
1417
|
-
`Component not found. expected one of: ${components.map((uid) => strapi2.components[uid].globalId).join(", ")}`
|
|
1418
|
-
);
|
|
1419
|
-
}
|
|
1420
|
-
return {
|
|
1421
|
-
__component: component.uid,
|
|
1422
|
-
...fp.omit(["__typename"], value)
|
|
1423
|
-
};
|
|
1424
|
-
};
|
|
1425
|
-
return nexus.scalarType({
|
|
1426
|
-
name,
|
|
1427
|
-
serialize: (value) => value,
|
|
1428
|
-
parseValue: (value) => parseData(value),
|
|
1429
|
-
parseLiteral(ast, variables) {
|
|
1430
|
-
if (ast.kind !== graphql.Kind.OBJECT) {
|
|
1431
|
-
return void 0;
|
|
1432
|
-
}
|
|
1433
|
-
const value = graphql.valueFromASTUntyped(ast, variables);
|
|
1434
|
-
return parseData(value);
|
|
1435
|
-
}
|
|
1436
|
-
});
|
|
1437
|
-
};
|
|
1438
|
-
return {
|
|
1439
|
-
/**
|
|
1440
|
-
* Build a Nexus dynamic zone type from a Strapi dz attribute
|
|
1441
|
-
*/
|
|
1442
|
-
buildDynamicZoneDefinition(definition, name, inputName) {
|
|
1443
|
-
const { components } = definition;
|
|
1444
|
-
const typeDefinition = buildTypeDefinition(name, components);
|
|
1445
|
-
const inputDefinition = buildInputDefinition(inputName, components);
|
|
1446
|
-
return [typeDefinition, inputDefinition];
|
|
1447
|
-
}
|
|
1448
|
-
};
|
|
1449
|
-
};
|
|
1450
|
-
const entity = ({ strapi: strapi2 }) => {
|
|
1451
|
-
const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
|
|
1452
|
-
return {
|
|
1453
|
-
/**
|
|
1454
|
-
* Build a higher level type for a content type which contains the attributes, the ID and the metadata
|
|
1455
|
-
* @param {object} contentType The content type which will be used to build its entity type
|
|
1456
|
-
* @return {NexusObjectTypeDef}
|
|
1457
|
-
*/
|
|
1458
|
-
buildEntityDefinition(contentType2) {
|
|
1459
|
-
const { attributes: attributes2 } = contentType2;
|
|
1460
|
-
const name = naming2.getEntityName(contentType2);
|
|
1461
|
-
const typeName = naming2.getTypeName(contentType2);
|
|
1462
|
-
return nexus.objectType({
|
|
1463
|
-
name,
|
|
1464
|
-
definition(t) {
|
|
1465
|
-
t.id("id", { resolve: fp.prop("id") });
|
|
1466
|
-
if (!fp.isEmpty(attributes2)) {
|
|
1467
|
-
t.field("attributes", {
|
|
1468
|
-
type: typeName,
|
|
1469
|
-
resolve: fp.identity
|
|
1470
|
-
});
|
|
1471
|
-
}
|
|
1472
|
-
}
|
|
1473
|
-
});
|
|
1474
|
-
}
|
|
1475
|
-
};
|
|
1476
|
-
};
|
|
1477
|
-
const typeBuilder = (context) => {
|
|
1478
|
-
const { strapi: strapi2 } = context;
|
|
1479
|
-
const getGraphQLService = strapi2.plugin("graphql").service;
|
|
1480
|
-
const extension = getGraphQLService("extension");
|
|
1481
|
-
const addScalarAttribute = (options) => {
|
|
1482
|
-
const { builder, attributeName, attribute } = options;
|
|
1483
|
-
const { mappers: mappers2 } = getGraphQLService("utils");
|
|
1484
|
-
const gqlType = mappers2.strapiScalarToGraphQLScalar(attribute.type);
|
|
1485
|
-
builder.field(attributeName, { type: gqlType });
|
|
1486
|
-
};
|
|
1487
|
-
const addComponentAttribute = (options) => {
|
|
1488
|
-
const { builder, attributeName, contentType: contentType2, attribute } = options;
|
|
1489
|
-
let localBuilder = builder;
|
|
1490
|
-
const { naming: naming2 } = getGraphQLService("utils");
|
|
1491
|
-
const { getContentTypeArgs } = getGraphQLService("builders").utils;
|
|
1492
|
-
const { buildComponentResolver } = getGraphQLService("builders").get("content-api");
|
|
1493
|
-
const type = naming2.getComponentNameFromAttribute(attribute);
|
|
1494
|
-
if (attribute.repeatable) {
|
|
1495
|
-
localBuilder = localBuilder.list;
|
|
1496
|
-
}
|
|
1497
|
-
const targetComponent = strapi2.getModel(attribute.component);
|
|
1498
|
-
const resolve = buildComponentResolver({
|
|
1499
|
-
contentTypeUID: contentType2.uid,
|
|
1500
|
-
attributeName,
|
|
1501
|
-
strapi: strapi2
|
|
1502
|
-
});
|
|
1503
|
-
const args2 = getContentTypeArgs(targetComponent, {
|
|
1504
|
-
multiple: !!attribute.repeatable,
|
|
1505
|
-
isNested: true
|
|
1506
|
-
});
|
|
1507
|
-
localBuilder.field(attributeName, { type, resolve, args: args2 });
|
|
1508
|
-
};
|
|
1509
|
-
const addDynamicZoneAttribute = (options) => {
|
|
1510
|
-
const { builder, attributeName, contentType: contentType2 } = options;
|
|
1511
|
-
const { naming: naming2 } = getGraphQLService("utils");
|
|
1512
|
-
const { ERROR_CODES: ERROR_CODES2 } = getGraphQLService("constants");
|
|
1513
|
-
const { buildDynamicZoneResolver } = getGraphQLService("builders").get("content-api");
|
|
1514
|
-
const { components } = contentType2.attributes[attributeName];
|
|
1515
|
-
const isEmpty = components.length === 0;
|
|
1516
|
-
const type = naming2.getDynamicZoneName(contentType2, attributeName);
|
|
1517
|
-
const resolve = isEmpty ? (
|
|
1518
|
-
// If the dynamic zone don't have any component, then return an error payload
|
|
1519
|
-
fp.constant({
|
|
1520
|
-
code: ERROR_CODES2.emptyDynamicZone,
|
|
1521
|
-
message: `This dynamic zone don't have any component attached to it`
|
|
1522
|
-
})
|
|
1523
|
-
) : (
|
|
1524
|
-
// Else, return a classic dynamic-zone resolver
|
|
1525
|
-
buildDynamicZoneResolver({
|
|
1526
|
-
contentTypeUID: contentType2.uid,
|
|
1527
|
-
attributeName
|
|
1528
|
-
})
|
|
1529
|
-
);
|
|
1530
|
-
builder.list.field(attributeName, { type, resolve });
|
|
1531
|
-
};
|
|
1532
|
-
const addEnumAttribute = (options) => {
|
|
1533
|
-
const { builder, attributeName, contentType: contentType2 } = options;
|
|
1534
|
-
const { naming: naming2 } = getGraphQLService("utils");
|
|
1535
|
-
const type = naming2.getEnumName(contentType2, attributeName);
|
|
1536
|
-
builder.field(attributeName, { type });
|
|
1537
|
-
};
|
|
1538
|
-
const addMediaAttribute = (options) => {
|
|
1539
|
-
const { naming: naming2 } = getGraphQLService("utils");
|
|
1540
|
-
const { getContentTypeArgs } = getGraphQLService("builders").utils;
|
|
1541
|
-
const { buildAssociationResolver } = getGraphQLService("builders").get("content-api");
|
|
1542
|
-
const extension2 = getGraphQLService("extension");
|
|
1543
|
-
const { builder } = options;
|
|
1544
|
-
const { attributeName, attribute, contentType: contentType2 } = options;
|
|
1545
|
-
const fileUID = "plugin::upload.file";
|
|
1546
|
-
if (extension2.shadowCRUD(fileUID).isDisabled()) {
|
|
1547
|
-
return;
|
|
1548
|
-
}
|
|
1549
|
-
const fileContentType = strapi2.contentTypes[fileUID];
|
|
1550
|
-
const resolve = buildAssociationResolver({
|
|
1551
|
-
contentTypeUID: contentType2.uid,
|
|
1552
|
-
attributeName,
|
|
1553
|
-
strapi: strapi2
|
|
1554
|
-
});
|
|
1555
|
-
const args2 = attribute.multiple ? getContentTypeArgs(fileContentType, { isNested: true }) : void 0;
|
|
1556
|
-
const typeName = naming2.getTypeName(fileContentType);
|
|
1557
|
-
if (attribute.multiple) {
|
|
1558
|
-
builder.field(`${attributeName}_connection`, {
|
|
1559
|
-
type: naming2.getRelationResponseCollectionName(fileContentType),
|
|
1560
|
-
resolve,
|
|
1561
|
-
args: args2
|
|
1562
|
-
});
|
|
1563
|
-
builder.field(attributeName, {
|
|
1564
|
-
type: nexus.nonNull(nexus.list(typeName)),
|
|
1565
|
-
async resolve(...args22) {
|
|
1566
|
-
const res = await resolve(...args22);
|
|
1567
|
-
return res.nodes ?? [];
|
|
1568
|
-
},
|
|
1569
|
-
args: args2
|
|
1570
|
-
});
|
|
1571
|
-
} else {
|
|
1572
|
-
builder.field(attributeName, {
|
|
1573
|
-
type: typeName,
|
|
1574
|
-
async resolve(...args22) {
|
|
1575
|
-
const res = await resolve(...args22);
|
|
1576
|
-
return res.value;
|
|
1577
|
-
},
|
|
1578
|
-
args: args2
|
|
1579
|
-
});
|
|
1580
|
-
}
|
|
1581
|
-
};
|
|
1582
|
-
const addPolymorphicRelationalAttribute = (options) => {
|
|
1583
|
-
const { GENERIC_MORPH_TYPENAME: GENERIC_MORPH_TYPENAME2 } = getGraphQLService("constants");
|
|
1584
|
-
const { naming: naming2 } = getGraphQLService("utils");
|
|
1585
|
-
const { buildAssociationResolver } = getGraphQLService("builders").get("content-api");
|
|
1586
|
-
let { builder } = options;
|
|
1587
|
-
const { attributeName, attribute, contentType: contentType2 } = options;
|
|
1588
|
-
const { target } = attribute;
|
|
1589
|
-
const isToManyRelation = attribute.relation.endsWith("Many");
|
|
1590
|
-
if (isToManyRelation) {
|
|
1591
|
-
builder = builder.list;
|
|
1592
|
-
}
|
|
1593
|
-
const resolve = buildAssociationResolver({
|
|
1594
|
-
contentTypeUID: contentType2.uid,
|
|
1595
|
-
attributeName,
|
|
1596
|
-
strapi: strapi2
|
|
1597
|
-
});
|
|
1598
|
-
if (fp.isUndefined(target)) {
|
|
1599
|
-
builder.field(attributeName, {
|
|
1600
|
-
type: GENERIC_MORPH_TYPENAME2,
|
|
1601
|
-
resolve
|
|
1602
|
-
});
|
|
1603
|
-
} else if (fp.isArray(target) && target.every(fp.isString)) {
|
|
1604
|
-
const type = naming2.getMorphRelationTypeName(contentType2, attributeName);
|
|
1605
|
-
builder.field(attributeName, { type, resolve });
|
|
1606
|
-
}
|
|
1607
|
-
};
|
|
1608
|
-
const addRegularRelationalAttribute = (options) => {
|
|
1609
|
-
const { naming: naming2 } = getGraphQLService("utils");
|
|
1610
|
-
const { getContentTypeArgs } = getGraphQLService("builders").utils;
|
|
1611
|
-
const { buildAssociationResolver } = getGraphQLService("builders").get("content-api");
|
|
1612
|
-
const extension2 = getGraphQLService("extension");
|
|
1613
|
-
const { builder } = options;
|
|
1614
|
-
const { attributeName, attribute, contentType: contentType2 } = options;
|
|
1615
|
-
if (extension2.shadowCRUD(attribute.target).isDisabled()) {
|
|
1616
|
-
return;
|
|
1617
|
-
}
|
|
1618
|
-
const isToManyRelation = attribute.relation.endsWith("Many");
|
|
1619
|
-
const resolve = buildAssociationResolver({
|
|
1620
|
-
contentTypeUID: contentType2.uid,
|
|
1621
|
-
attributeName,
|
|
1622
|
-
strapi: strapi2
|
|
1623
|
-
});
|
|
1624
|
-
const targetContentType = strapi2.getModel(attribute.target);
|
|
1625
|
-
const typeName = naming2.getTypeName(targetContentType);
|
|
1626
|
-
const args2 = isToManyRelation ? getContentTypeArgs(targetContentType, { isNested: true }) : void 0;
|
|
1627
|
-
const resolverScope = `${targetContentType.uid}.find`;
|
|
1628
|
-
const resolverPath = `${naming2.getTypeName(contentType2)}.${attributeName}`;
|
|
1629
|
-
extension2.use({ resolversConfig: { [resolverPath]: { auth: { scope: [resolverScope] } } } });
|
|
1630
|
-
if (isToManyRelation) {
|
|
1631
|
-
builder.field(`${attributeName}_connection`, {
|
|
1632
|
-
type: naming2.getRelationResponseCollectionName(targetContentType),
|
|
1633
|
-
resolve,
|
|
1634
|
-
args: args2
|
|
1635
|
-
});
|
|
1636
|
-
extension2.use({
|
|
1637
|
-
resolversConfig: { [`${resolverPath}_connection`]: { auth: { scope: [resolverScope] } } }
|
|
1638
|
-
});
|
|
1639
|
-
builder.field(attributeName, {
|
|
1640
|
-
type: nexus.nonNull(nexus.list(typeName)),
|
|
1641
|
-
async resolve(...args22) {
|
|
1642
|
-
const res = await resolve(...args22);
|
|
1643
|
-
return res.nodes ?? [];
|
|
1644
|
-
},
|
|
1645
|
-
args: args2
|
|
1646
|
-
});
|
|
1647
|
-
} else {
|
|
1648
|
-
builder.field(attributeName, {
|
|
1649
|
-
type: typeName,
|
|
1650
|
-
async resolve(...args22) {
|
|
1651
|
-
const res = await resolve(...args22);
|
|
1652
|
-
return res.value;
|
|
1653
|
-
},
|
|
1654
|
-
args: args2
|
|
1655
|
-
});
|
|
1656
|
-
}
|
|
1657
|
-
};
|
|
1658
|
-
const isNotPrivate = (contentType2) => (attributeName) => {
|
|
1659
|
-
return !utils$2.contentTypes.isPrivateAttribute(contentType2, attributeName);
|
|
1660
|
-
};
|
|
1661
|
-
const isNotDisabled = (contentType2) => (attributeName) => {
|
|
1662
|
-
return extension.shadowCRUD(contentType2.uid).field(attributeName).hasOutputEnabled();
|
|
1663
|
-
};
|
|
1664
|
-
return {
|
|
1665
|
-
/**
|
|
1666
|
-
* Create a type definition for a given content type
|
|
1667
|
-
* @param contentType - The content type used to created the definition
|
|
1668
|
-
* @return {NexusObjectTypeDef}
|
|
1669
|
-
*/
|
|
1670
|
-
buildTypeDefinition(contentType2) {
|
|
1671
|
-
const utils2 = getGraphQLService("utils");
|
|
1672
|
-
const { getComponentName, getTypeName } = utils2.naming;
|
|
1673
|
-
const {
|
|
1674
|
-
isStrapiScalar,
|
|
1675
|
-
isComponent,
|
|
1676
|
-
isDynamicZone,
|
|
1677
|
-
isEnumeration,
|
|
1678
|
-
isMedia,
|
|
1679
|
-
isMorphRelation,
|
|
1680
|
-
isRelation
|
|
1681
|
-
} = utils2.attributes;
|
|
1682
|
-
const { attributes: attributes2, modelType } = contentType2;
|
|
1683
|
-
const attributesKey = Object.keys(attributes2);
|
|
1684
|
-
const name = (modelType === "component" ? getComponentName : getTypeName).call(
|
|
1685
|
-
null,
|
|
1686
|
-
contentType2
|
|
1687
|
-
);
|
|
1688
|
-
return nexus.objectType({
|
|
1689
|
-
name,
|
|
1690
|
-
definition(t) {
|
|
1691
|
-
if (modelType !== "component" && isNotDisabled(contentType2)("id") && strapi2.plugin("graphql").config("v4CompatibilityMode", false)) {
|
|
1692
|
-
t.nonNull.id("id", {
|
|
1693
|
-
deprecation: "Use `documentId` instead"
|
|
1694
|
-
});
|
|
1695
|
-
}
|
|
1696
|
-
if (modelType === "component" && isNotDisabled(contentType2)("id")) {
|
|
1697
|
-
t.nonNull.id("id");
|
|
1698
|
-
}
|
|
1699
|
-
if (modelType !== "component" && isNotDisabled(contentType2)("documentId")) {
|
|
1700
|
-
t.nonNull.id("documentId");
|
|
1701
|
-
}
|
|
1702
|
-
if (strapi2.plugin("graphql").config("v4CompatibilityMode", false)) {
|
|
1703
|
-
t.nonNull.field("attributes", {
|
|
1704
|
-
deprecation: "Use root level fields instead",
|
|
1705
|
-
type: name,
|
|
1706
|
-
resolve: (parent) => parent
|
|
1707
|
-
});
|
|
1708
|
-
t.nonNull.field("data", {
|
|
1709
|
-
deprecation: "Use root level fields instead",
|
|
1710
|
-
type: name,
|
|
1711
|
-
resolve: (parent) => parent
|
|
1712
|
-
});
|
|
1713
|
-
}
|
|
1714
|
-
attributesKey.filter(isNotPrivate(contentType2)).filter(isNotDisabled(contentType2)).forEach((attributeName) => {
|
|
1715
|
-
const attribute = attributes2[attributeName];
|
|
1716
|
-
let builder = t;
|
|
1717
|
-
if (attribute.required) {
|
|
1718
|
-
builder = builder.nonNull;
|
|
1719
|
-
}
|
|
1720
|
-
const options = {
|
|
1721
|
-
builder,
|
|
1722
|
-
attributeName,
|
|
1723
|
-
attribute,
|
|
1724
|
-
contentType: contentType2,
|
|
1725
|
-
context
|
|
1726
|
-
};
|
|
1727
|
-
if (isEnumeration(attribute)) {
|
|
1728
|
-
addEnumAttribute(options);
|
|
1729
|
-
} else if (isStrapiScalar(attribute)) {
|
|
1730
|
-
addScalarAttribute(options);
|
|
1731
|
-
} else if (isComponent(attribute)) {
|
|
1732
|
-
addComponentAttribute(options);
|
|
1733
|
-
} else if (isDynamicZone(attribute)) {
|
|
1734
|
-
addDynamicZoneAttribute(options);
|
|
1735
|
-
} else if (isMedia(attribute)) {
|
|
1736
|
-
addMediaAttribute(options);
|
|
1737
|
-
} else if (isMorphRelation(attribute)) {
|
|
1738
|
-
addPolymorphicRelationalAttribute(options);
|
|
1739
|
-
} else if (isRelation(attribute)) {
|
|
1740
|
-
addRegularRelationalAttribute(options);
|
|
1741
|
-
}
|
|
1742
|
-
});
|
|
1743
|
-
}
|
|
1744
|
-
});
|
|
1745
|
-
}
|
|
1746
|
-
};
|
|
1747
|
-
};
|
|
1748
|
-
const response = ({ strapi: strapi2 }) => {
|
|
1749
|
-
const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
|
|
1750
|
-
return {
|
|
1751
|
-
/**
|
|
1752
|
-
* Build a type definition for a content API response for a given content type
|
|
1753
|
-
*/
|
|
1754
|
-
buildResponseDefinition(contentType2) {
|
|
1755
|
-
const name = naming2.getEntityResponseName(contentType2);
|
|
1756
|
-
const typeName = naming2.getTypeName(contentType2);
|
|
1757
|
-
return nexus.objectType({
|
|
1758
|
-
name,
|
|
1759
|
-
definition(t) {
|
|
1760
|
-
t.field("data", {
|
|
1761
|
-
type: typeName,
|
|
1762
|
-
resolve: fp.prop("value")
|
|
1763
|
-
});
|
|
1764
|
-
}
|
|
1765
|
-
});
|
|
1766
|
-
}
|
|
1767
|
-
};
|
|
1768
|
-
};
|
|
1769
|
-
const responseCollection = ({ strapi: strapi2 }) => {
|
|
1770
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
1771
|
-
const { naming: naming2 } = getService("utils");
|
|
1772
|
-
const { RESPONSE_COLLECTION_META_TYPE_NAME: RESPONSE_COLLECTION_META_TYPE_NAME2, PAGINATION_TYPE_NAME: PAGINATION_TYPE_NAME2 } = getService("constants");
|
|
1773
|
-
return {
|
|
1774
|
-
/**
|
|
1775
|
-
* Build a type definition for a content API collection response for a given content type
|
|
1776
|
-
* @param {Schema.ContentType} contentType The content type which will be used to build its content API response definition
|
|
1777
|
-
* @return {NexusObjectTypeDef}
|
|
1778
|
-
*/
|
|
1779
|
-
buildResponseCollectionDefinition(contentType2) {
|
|
1780
|
-
const name = naming2.getEntityResponseCollectionName(contentType2);
|
|
1781
|
-
const typeName = naming2.getTypeName(contentType2);
|
|
1782
|
-
const { resolvePagination } = getService("builders").get("content-api");
|
|
1783
|
-
return nexus.objectType({
|
|
1784
|
-
name,
|
|
1785
|
-
definition(t) {
|
|
1786
|
-
t.nonNull.list.field("nodes", {
|
|
1787
|
-
type: nexus.nonNull(typeName),
|
|
1788
|
-
resolve: fp.pipe(fp.prop("nodes"), fp.defaultTo([]))
|
|
1789
|
-
});
|
|
1790
|
-
t.nonNull.field("pageInfo", {
|
|
1791
|
-
type: PAGINATION_TYPE_NAME2,
|
|
1792
|
-
resolve: resolvePagination
|
|
1793
|
-
});
|
|
1794
|
-
if (strapi2.plugin("graphql").config("v4CompatibilityMode", false)) {
|
|
1795
|
-
t.nonNull.list.field("data", {
|
|
1796
|
-
deprecation: "Use `nodes` field instead",
|
|
1797
|
-
type: nexus.nonNull(typeName),
|
|
1798
|
-
resolve: fp.pipe(fp.prop("nodes"), fp.defaultTo([]))
|
|
1799
|
-
});
|
|
1800
|
-
t.nonNull.field("meta", {
|
|
1801
|
-
deprecation: "Use the `pageInfo` field instead",
|
|
1802
|
-
type: RESPONSE_COLLECTION_META_TYPE_NAME2,
|
|
1803
|
-
resolve: fp.identity
|
|
1804
|
-
});
|
|
1805
|
-
}
|
|
1806
|
-
}
|
|
1807
|
-
});
|
|
1808
|
-
}
|
|
1809
|
-
};
|
|
1810
|
-
};
|
|
1811
|
-
const relationResponseCollection = ({ strapi: strapi2 }) => {
|
|
1812
|
-
const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
|
|
1813
|
-
return {
|
|
1814
|
-
/**
|
|
1815
|
-
* Build a type definition for a content API relation's collection response for a given content type
|
|
1816
|
-
*/
|
|
1817
|
-
buildRelationResponseCollectionDefinition(contentType2) {
|
|
1818
|
-
const name = naming2.getRelationResponseCollectionName(contentType2);
|
|
1819
|
-
const typeName = naming2.getTypeName(contentType2);
|
|
1820
|
-
return nexus.objectType({
|
|
1821
|
-
name,
|
|
1822
|
-
definition(t) {
|
|
1823
|
-
t.nonNull.list.field("nodes", {
|
|
1824
|
-
type: nexus.nonNull(typeName),
|
|
1825
|
-
resolve: fp.pipe(fp.prop("nodes"), fp.defaultTo([]))
|
|
1826
|
-
});
|
|
1827
|
-
if (strapi2.plugin("graphql").config("v4CompatibilityMode", false)) {
|
|
1828
|
-
t.nonNull.list.field("data", {
|
|
1829
|
-
deprecation: "Use `nodes` field instead",
|
|
1830
|
-
type: nexus.nonNull(typeName),
|
|
1831
|
-
resolve: fp.pipe(fp.prop("nodes"), fp.defaultTo([]))
|
|
1832
|
-
});
|
|
1833
|
-
}
|
|
1834
|
-
}
|
|
1835
|
-
});
|
|
1836
|
-
}
|
|
1837
|
-
};
|
|
1838
|
-
};
|
|
1839
|
-
const createCollectionTypeQueriesBuilder = ({ strapi: strapi2 }) => {
|
|
1840
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
1841
|
-
const { naming: naming2 } = getService("utils");
|
|
1842
|
-
const { transformArgs, getContentTypeArgs } = getService("builders").utils;
|
|
1843
|
-
const { toEntityResponseCollection } = getService("format").returnTypes;
|
|
1844
|
-
const {
|
|
1845
|
-
getFindOneQueryName,
|
|
1846
|
-
getTypeName,
|
|
1847
|
-
getFindQueryName,
|
|
1848
|
-
getFindConnectionQueryName,
|
|
1849
|
-
getEntityResponseCollectionName
|
|
1850
|
-
} = naming2;
|
|
1851
|
-
const buildCollectionTypeQueries = (contentType2) => {
|
|
1852
|
-
const findOneQueryName = `Query.${getFindOneQueryName(contentType2)}`;
|
|
1853
|
-
const findQueryName = `Query.${getFindQueryName(contentType2)}`;
|
|
1854
|
-
const findConnectionQueryName = `Query.${getFindConnectionQueryName(contentType2)}`;
|
|
1855
|
-
const extension = getService("extension");
|
|
1856
|
-
const registerAuthConfig = (action, auth) => {
|
|
1857
|
-
return extension.use({ resolversConfig: { [action]: { auth } } });
|
|
1858
|
-
};
|
|
1859
|
-
const isActionEnabled = (action) => {
|
|
1860
|
-
return extension.shadowCRUD(contentType2.uid).isActionEnabled(action);
|
|
1861
|
-
};
|
|
1862
|
-
const isFindOneEnabled = isActionEnabled("findOne");
|
|
1863
|
-
const isFindEnabled = isActionEnabled("find");
|
|
1864
|
-
if (isFindOneEnabled) {
|
|
1865
|
-
registerAuthConfig(findOneQueryName, { scope: [`${contentType2.uid}.findOne`] });
|
|
1866
|
-
}
|
|
1867
|
-
if (isFindEnabled) {
|
|
1868
|
-
registerAuthConfig(findQueryName, { scope: [`${contentType2.uid}.find`] });
|
|
1869
|
-
registerAuthConfig(findConnectionQueryName, { scope: [`${contentType2.uid}.find`] });
|
|
1870
|
-
}
|
|
1871
|
-
return nexus.extendType({
|
|
1872
|
-
type: "Query",
|
|
1873
|
-
definition(t) {
|
|
1874
|
-
if (isFindOneEnabled) {
|
|
1875
|
-
addFindOneQuery(t, contentType2);
|
|
1876
|
-
}
|
|
1877
|
-
if (isFindEnabled) {
|
|
1878
|
-
addFindConnectionQuery(t, contentType2);
|
|
1879
|
-
addFindQuery(t, contentType2);
|
|
1880
|
-
}
|
|
1881
|
-
}
|
|
1882
|
-
});
|
|
1883
|
-
};
|
|
1884
|
-
const addFindOneQuery = (t, contentType2) => {
|
|
1885
|
-
const findOneQueryName = getFindOneQueryName(contentType2);
|
|
1886
|
-
const typeName = getTypeName(contentType2);
|
|
1887
|
-
t.field(findOneQueryName, {
|
|
1888
|
-
type: typeName,
|
|
1889
|
-
extensions: {
|
|
1890
|
-
strapi: {
|
|
1891
|
-
contentType: contentType2
|
|
1892
|
-
}
|
|
1893
|
-
},
|
|
1894
|
-
args: getContentTypeArgs(contentType2, { multiple: false }),
|
|
1895
|
-
async resolve(parent, args2, ctx) {
|
|
1896
|
-
const transformedArgs = transformArgs(args2, { contentType: contentType2 });
|
|
1897
|
-
const { findOne } = getService("builders").get("content-api").buildQueriesResolvers({ contentType: contentType2 });
|
|
1898
|
-
return findOne(parent, transformedArgs, ctx);
|
|
1899
|
-
}
|
|
1900
|
-
});
|
|
1901
|
-
};
|
|
1902
|
-
const addFindQuery = (t, contentType2) => {
|
|
1903
|
-
const findQueryName = getFindQueryName(contentType2);
|
|
1904
|
-
const typeName = getTypeName(contentType2);
|
|
1905
|
-
t.field(findQueryName, {
|
|
1906
|
-
type: nexus.nonNull(nexus.list(typeName)),
|
|
1907
|
-
extensions: {
|
|
1908
|
-
strapi: {
|
|
1909
|
-
contentType: contentType2
|
|
1910
|
-
}
|
|
1911
|
-
},
|
|
1912
|
-
args: getContentTypeArgs(contentType2),
|
|
1913
|
-
async resolve(parent, args2, ctx) {
|
|
1914
|
-
const transformedArgs = transformArgs(args2, { contentType: contentType2, usePagination: true });
|
|
1915
|
-
const { findMany } = getService("builders").get("content-api").buildQueriesResolvers({ contentType: contentType2 });
|
|
1916
|
-
return findMany(parent, transformedArgs, ctx);
|
|
1917
|
-
}
|
|
1918
|
-
});
|
|
1919
|
-
};
|
|
1920
|
-
const addFindConnectionQuery = (t, contentType2) => {
|
|
1921
|
-
const { uid } = contentType2;
|
|
1922
|
-
const queryName = getFindConnectionQueryName(contentType2);
|
|
1923
|
-
const responseCollectionTypeName = getEntityResponseCollectionName(contentType2);
|
|
1924
|
-
t.field(queryName, {
|
|
1925
|
-
type: responseCollectionTypeName,
|
|
1926
|
-
extensions: {
|
|
1927
|
-
strapi: {
|
|
1928
|
-
contentType: contentType2
|
|
1929
|
-
}
|
|
1930
|
-
},
|
|
1931
|
-
args: getContentTypeArgs(contentType2),
|
|
1932
|
-
async resolve(parent, args2, ctx) {
|
|
1933
|
-
const transformedArgs = transformArgs(args2, { contentType: contentType2, usePagination: true });
|
|
1934
|
-
const { findMany } = getService("builders").get("content-api").buildQueriesResolvers({ contentType: contentType2 });
|
|
1935
|
-
const nodes = await findMany(parent, transformedArgs, ctx);
|
|
1936
|
-
return toEntityResponseCollection(nodes, { args: transformedArgs, resourceUID: uid });
|
|
1937
|
-
}
|
|
1938
|
-
});
|
|
1939
|
-
};
|
|
1940
|
-
return { buildCollectionTypeQueries };
|
|
1941
|
-
};
|
|
1942
|
-
const createSingleTypeQueriesBuilder = ({ strapi: strapi2 }) => {
|
|
1943
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
1944
|
-
const { naming: naming2 } = getService("utils");
|
|
1945
|
-
const { transformArgs, getContentTypeArgs } = getService("builders").utils;
|
|
1946
|
-
const { getFindOneQueryName, getTypeName } = naming2;
|
|
1947
|
-
const buildSingleTypeQueries = (contentType2) => {
|
|
1948
|
-
const findQueryName = `Query.${getFindOneQueryName(contentType2)}`;
|
|
1949
|
-
const extension = getService("extension");
|
|
1950
|
-
const registerAuthConfig = (action, auth) => {
|
|
1951
|
-
return extension.use({ resolversConfig: { [action]: { auth } } });
|
|
1952
|
-
};
|
|
1953
|
-
const isActionEnabled = (action) => {
|
|
1954
|
-
return extension.shadowCRUD(contentType2.uid).isActionEnabled(action);
|
|
1955
|
-
};
|
|
1956
|
-
const isFindEnabled = isActionEnabled("find");
|
|
1957
|
-
if (isFindEnabled) {
|
|
1958
|
-
registerAuthConfig(findQueryName, { scope: [`${contentType2.uid}.find`] });
|
|
1959
|
-
}
|
|
1960
|
-
return nexus.extendType({
|
|
1961
|
-
type: "Query",
|
|
1962
|
-
definition(t) {
|
|
1963
|
-
if (isFindEnabled) {
|
|
1964
|
-
addFindQuery(t, contentType2);
|
|
1965
|
-
}
|
|
1966
|
-
}
|
|
1967
|
-
});
|
|
1968
|
-
};
|
|
1969
|
-
const addFindQuery = (t, contentType2) => {
|
|
1970
|
-
const findQueryName = getFindOneQueryName(contentType2);
|
|
1971
|
-
const typeName = getTypeName(contentType2);
|
|
1972
|
-
t.field(findQueryName, {
|
|
1973
|
-
type: typeName,
|
|
1974
|
-
extensions: {
|
|
1975
|
-
strapi: {
|
|
1976
|
-
contentType: contentType2
|
|
1977
|
-
}
|
|
1978
|
-
},
|
|
1979
|
-
args: getContentTypeArgs(contentType2),
|
|
1980
|
-
async resolve(parent, args2, ctx) {
|
|
1981
|
-
const transformedArgs = transformArgs(args2, { contentType: contentType2 });
|
|
1982
|
-
const { findFirst } = getService("builders").get("content-api").buildQueriesResolvers({ contentType: contentType2 });
|
|
1983
|
-
return findFirst(parent, transformedArgs, ctx);
|
|
1984
|
-
}
|
|
1985
|
-
});
|
|
1986
|
-
};
|
|
1987
|
-
return { buildSingleTypeQueries };
|
|
1988
|
-
};
|
|
1989
|
-
const queries = (context) => ({
|
|
1990
|
-
...createCollectionTypeQueriesBuilder(context),
|
|
1991
|
-
...createSingleTypeQueriesBuilder(context)
|
|
1992
|
-
});
|
|
1993
|
-
const createCollectionTypeMutationsBuilder = ({ strapi: strapi2 }) => {
|
|
1994
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
1995
|
-
const { naming: naming2 } = getService("utils");
|
|
1996
|
-
const { args: args2 } = getService("internals");
|
|
1997
|
-
const {
|
|
1998
|
-
getCreateMutationTypeName,
|
|
1999
|
-
getUpdateMutationTypeName,
|
|
2000
|
-
getDeleteMutationTypeName,
|
|
2001
|
-
getContentTypeInputName,
|
|
2002
|
-
getTypeName
|
|
2003
|
-
} = naming2;
|
|
2004
|
-
const addCreateMutation = (t, contentType2) => {
|
|
2005
|
-
const { uid } = contentType2;
|
|
2006
|
-
const createMutationName = getCreateMutationTypeName(contentType2);
|
|
2007
|
-
const typeName = getTypeName(contentType2);
|
|
2008
|
-
t.field(createMutationName, {
|
|
2009
|
-
type: typeName,
|
|
2010
|
-
extensions: {
|
|
2011
|
-
strapi: {
|
|
2012
|
-
contentType: contentType2
|
|
2013
|
-
}
|
|
2014
|
-
},
|
|
2015
|
-
args: {
|
|
2016
|
-
// Create payload
|
|
2017
|
-
status: args2.PublicationStatusArg,
|
|
2018
|
-
data: nexus.nonNull(getContentTypeInputName(contentType2))
|
|
2019
|
-
},
|
|
2020
|
-
async resolve(parent, args22, context) {
|
|
2021
|
-
const { auth } = context.state;
|
|
2022
|
-
const sanitizedInputData = await strapi2.contentAPI.sanitize.input(args22.data, contentType2, {
|
|
2023
|
-
auth
|
|
2024
|
-
});
|
|
2025
|
-
return strapi2.documents(uid).create({
|
|
2026
|
-
...args22,
|
|
2027
|
-
data: sanitizedInputData
|
|
2028
|
-
});
|
|
2029
|
-
}
|
|
2030
|
-
});
|
|
2031
|
-
};
|
|
2032
|
-
const addUpdateMutation = (t, contentType2) => {
|
|
2033
|
-
const { uid } = contentType2;
|
|
2034
|
-
const updateMutationName = getUpdateMutationTypeName(contentType2);
|
|
2035
|
-
const typeName = getTypeName(contentType2);
|
|
2036
|
-
t.field(updateMutationName, {
|
|
2037
|
-
type: typeName,
|
|
2038
|
-
extensions: {
|
|
2039
|
-
strapi: {
|
|
2040
|
-
contentType: contentType2
|
|
2041
|
-
}
|
|
2042
|
-
},
|
|
2043
|
-
args: {
|
|
2044
|
-
documentId: nexus.nonNull(nexus.idArg()),
|
|
2045
|
-
status: args2.PublicationStatusArg,
|
|
2046
|
-
data: nexus.nonNull(getContentTypeInputName(contentType2))
|
|
2047
|
-
},
|
|
2048
|
-
async resolve(parent, args22, context) {
|
|
2049
|
-
const { auth } = context.state;
|
|
2050
|
-
const { data, ...restParams } = args22;
|
|
2051
|
-
const sanitizedInputData = await strapi2.contentAPI.sanitize.input(data, contentType2, {
|
|
2052
|
-
auth
|
|
2053
|
-
});
|
|
2054
|
-
return strapi2.documents(uid).update({
|
|
2055
|
-
...restParams,
|
|
2056
|
-
data: sanitizedInputData
|
|
2057
|
-
});
|
|
2058
|
-
}
|
|
2059
|
-
});
|
|
2060
|
-
};
|
|
2061
|
-
const addDeleteMutation = (t, contentType2) => {
|
|
2062
|
-
const { uid } = contentType2;
|
|
2063
|
-
const deleteMutationName = getDeleteMutationTypeName(contentType2);
|
|
2064
|
-
const { DELETE_MUTATION_RESPONSE_TYPE_NAME: DELETE_MUTATION_RESPONSE_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
|
|
2065
|
-
t.field(deleteMutationName, {
|
|
2066
|
-
type: DELETE_MUTATION_RESPONSE_TYPE_NAME2,
|
|
2067
|
-
extensions: {
|
|
2068
|
-
strapi: {
|
|
2069
|
-
contentType: contentType2
|
|
2070
|
-
}
|
|
2071
|
-
},
|
|
2072
|
-
args: {
|
|
2073
|
-
documentId: nexus.nonNull(nexus.idArg())
|
|
2074
|
-
},
|
|
2075
|
-
async resolve(parent, args22) {
|
|
2076
|
-
const { documentId } = args22;
|
|
2077
|
-
await strapi2.documents(uid).delete({ documentId });
|
|
2078
|
-
return { documentId };
|
|
2079
|
-
}
|
|
2080
|
-
});
|
|
2081
|
-
};
|
|
2082
|
-
return {
|
|
2083
|
-
buildCollectionTypeMutations(contentType2) {
|
|
2084
|
-
const createMutationName = `Mutation.${getCreateMutationTypeName(contentType2)}`;
|
|
2085
|
-
const updateMutationName = `Mutation.${getUpdateMutationTypeName(contentType2)}`;
|
|
2086
|
-
const deleteMutationName = `Mutation.${getDeleteMutationTypeName(contentType2)}`;
|
|
2087
|
-
const extension = getService("extension");
|
|
2088
|
-
const registerAuthConfig = (action, auth) => {
|
|
2089
|
-
return extension.use({ resolversConfig: { [action]: { auth } } });
|
|
2090
|
-
};
|
|
2091
|
-
const isActionEnabled = (action) => {
|
|
2092
|
-
return extension.shadowCRUD(contentType2.uid).isActionEnabled(action);
|
|
2093
|
-
};
|
|
2094
|
-
const isCreateEnabled = isActionEnabled("create");
|
|
2095
|
-
const isUpdateEnabled = isActionEnabled("update");
|
|
2096
|
-
const isDeleteEnabled = isActionEnabled("delete");
|
|
2097
|
-
if (isCreateEnabled) {
|
|
2098
|
-
registerAuthConfig(createMutationName, { scope: [`${contentType2.uid}.create`] });
|
|
2099
|
-
}
|
|
2100
|
-
if (isUpdateEnabled) {
|
|
2101
|
-
registerAuthConfig(updateMutationName, { scope: [`${contentType2.uid}.update`] });
|
|
2102
|
-
}
|
|
2103
|
-
if (isDeleteEnabled) {
|
|
2104
|
-
registerAuthConfig(deleteMutationName, { scope: [`${contentType2.uid}.delete`] });
|
|
2105
|
-
}
|
|
2106
|
-
return nexus.extendType({
|
|
2107
|
-
type: "Mutation",
|
|
2108
|
-
definition(t) {
|
|
2109
|
-
if (isCreateEnabled) {
|
|
2110
|
-
addCreateMutation(t, contentType2);
|
|
2111
|
-
}
|
|
2112
|
-
if (isUpdateEnabled) {
|
|
2113
|
-
addUpdateMutation(t, contentType2);
|
|
2114
|
-
}
|
|
2115
|
-
if (isDeleteEnabled) {
|
|
2116
|
-
addDeleteMutation(t, contentType2);
|
|
2117
|
-
}
|
|
2118
|
-
}
|
|
2119
|
-
});
|
|
2120
|
-
}
|
|
2121
|
-
};
|
|
2122
|
-
};
|
|
2123
|
-
const { NotFoundError } = utils$2.errors;
|
|
2124
|
-
const createSingleTypeMutationsBuilder = ({ strapi: strapi2 }) => {
|
|
2125
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
2126
|
-
const { naming: naming2 } = getService("utils");
|
|
2127
|
-
const { args: args2 } = getService("internals");
|
|
2128
|
-
const {
|
|
2129
|
-
getUpdateMutationTypeName,
|
|
2130
|
-
getTypeName,
|
|
2131
|
-
getContentTypeInputName,
|
|
2132
|
-
getDeleteMutationTypeName
|
|
2133
|
-
} = naming2;
|
|
2134
|
-
const addUpdateMutation = (t, contentType2) => {
|
|
2135
|
-
const { uid } = contentType2;
|
|
2136
|
-
const updateMutationName = getUpdateMutationTypeName(contentType2);
|
|
2137
|
-
const typeName = getTypeName(contentType2);
|
|
2138
|
-
t.field(updateMutationName, {
|
|
2139
|
-
type: typeName,
|
|
2140
|
-
extensions: {
|
|
2141
|
-
strapi: {
|
|
2142
|
-
contentType: contentType2
|
|
2143
|
-
}
|
|
2144
|
-
},
|
|
2145
|
-
args: {
|
|
2146
|
-
// Update payload
|
|
2147
|
-
status: args2.PublicationStatusArg,
|
|
2148
|
-
data: nexus.nonNull(getContentTypeInputName(contentType2))
|
|
2149
|
-
},
|
|
2150
|
-
async resolve(parent, args22, context) {
|
|
2151
|
-
const { auth } = context.state;
|
|
2152
|
-
const sanitizedInputData = await strapi2.contentAPI.sanitize.input(args22.data, contentType2, {
|
|
2153
|
-
auth
|
|
2154
|
-
});
|
|
2155
|
-
const document = await strapi2.db?.query(uid).findOne();
|
|
2156
|
-
if (document) {
|
|
2157
|
-
return strapi2.documents(uid).update({
|
|
2158
|
-
...args22,
|
|
2159
|
-
documentId: document.documentId,
|
|
2160
|
-
data: sanitizedInputData
|
|
2161
|
-
});
|
|
2162
|
-
}
|
|
2163
|
-
return strapi2.documents(uid).create({
|
|
2164
|
-
...args22,
|
|
2165
|
-
data: sanitizedInputData
|
|
2166
|
-
});
|
|
2167
|
-
}
|
|
2168
|
-
});
|
|
2169
|
-
};
|
|
2170
|
-
const addDeleteMutation = (t, contentType2) => {
|
|
2171
|
-
const { uid } = contentType2;
|
|
2172
|
-
const deleteMutationName = getDeleteMutationTypeName(contentType2);
|
|
2173
|
-
const { DELETE_MUTATION_RESPONSE_TYPE_NAME: DELETE_MUTATION_RESPONSE_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
|
|
2174
|
-
t.field(deleteMutationName, {
|
|
2175
|
-
type: DELETE_MUTATION_RESPONSE_TYPE_NAME2,
|
|
2176
|
-
extensions: {
|
|
2177
|
-
strapi: {
|
|
2178
|
-
contentType: contentType2
|
|
2179
|
-
}
|
|
2180
|
-
},
|
|
2181
|
-
args: {},
|
|
2182
|
-
async resolve(parent, args22) {
|
|
2183
|
-
const document = await strapi2.db?.query(uid).findOne();
|
|
2184
|
-
if (!document) {
|
|
2185
|
-
throw new NotFoundError("Document not found");
|
|
2186
|
-
}
|
|
2187
|
-
await strapi2.documents(uid).delete({ ...args22, documentId: document.documentId });
|
|
2188
|
-
return document;
|
|
2189
|
-
}
|
|
2190
|
-
});
|
|
2191
|
-
};
|
|
2192
|
-
return {
|
|
2193
|
-
buildSingleTypeMutations(contentType2) {
|
|
2194
|
-
const updateMutationName = `Mutation.${getUpdateMutationTypeName(contentType2)}`;
|
|
2195
|
-
const deleteMutationName = `Mutation.${getDeleteMutationTypeName(contentType2)}`;
|
|
2196
|
-
const extension = getService("extension");
|
|
2197
|
-
const registerAuthConfig = (action, auth) => {
|
|
2198
|
-
return extension.use({ resolversConfig: { [action]: { auth } } });
|
|
2199
|
-
};
|
|
2200
|
-
const isActionEnabled = (action) => {
|
|
2201
|
-
return extension.shadowCRUD(contentType2.uid).isActionEnabled(action);
|
|
2202
|
-
};
|
|
2203
|
-
const isUpdateEnabled = isActionEnabled("update");
|
|
2204
|
-
const isDeleteEnabled = isActionEnabled("delete");
|
|
2205
|
-
if (isUpdateEnabled) {
|
|
2206
|
-
registerAuthConfig(updateMutationName, { scope: [`${contentType2.uid}.update`] });
|
|
2207
|
-
}
|
|
2208
|
-
if (isDeleteEnabled) {
|
|
2209
|
-
registerAuthConfig(deleteMutationName, { scope: [`${contentType2.uid}.delete`] });
|
|
2210
|
-
}
|
|
2211
|
-
return nexus.extendType({
|
|
2212
|
-
type: "Mutation",
|
|
2213
|
-
definition(t) {
|
|
2214
|
-
if (isUpdateEnabled) {
|
|
2215
|
-
addUpdateMutation(t, contentType2);
|
|
2216
|
-
}
|
|
2217
|
-
if (isDeleteEnabled) {
|
|
2218
|
-
addDeleteMutation(t, contentType2);
|
|
2219
|
-
}
|
|
2220
|
-
}
|
|
2221
|
-
});
|
|
2222
|
-
}
|
|
2223
|
-
};
|
|
2224
|
-
};
|
|
2225
|
-
const mutations = (context) => ({
|
|
2226
|
-
...createCollectionTypeMutationsBuilder(context),
|
|
2227
|
-
...createSingleTypeMutationsBuilder(context)
|
|
2228
|
-
});
|
|
2229
|
-
const contentType = ({ strapi: strapi2 }) => {
|
|
2230
|
-
const rootLevelOperators = () => {
|
|
2231
|
-
const { operators: operators2 } = strapi2.plugin("graphql").service("builders").filters;
|
|
2232
|
-
return [operators2.and, operators2.or, operators2.not];
|
|
2233
|
-
};
|
|
2234
|
-
const addScalarAttribute = (builder, attributeName, attribute) => {
|
|
2235
|
-
const { naming: naming2, mappers: mappers2 } = strapi2.plugin("graphql").service("utils");
|
|
2236
|
-
const gqlType = mappers2.strapiScalarToGraphQLScalar(attribute.type);
|
|
2237
|
-
builder.field(attributeName, { type: naming2.getScalarFilterInputTypeName(gqlType) });
|
|
2238
|
-
};
|
|
2239
|
-
const addRelationalAttribute = (builder, attributeName, attribute) => {
|
|
2240
|
-
const utils2 = strapi2.plugin("graphql").service("utils");
|
|
2241
|
-
const extension = strapi2.plugin("graphql").service("extension");
|
|
2242
|
-
const { getFiltersInputTypeName } = utils2.naming;
|
|
2243
|
-
const { isMorphRelation } = utils2.attributes;
|
|
2244
|
-
const model = "target" in attribute && strapi2.getModel(attribute.target);
|
|
2245
|
-
if (!model || isMorphRelation(attribute))
|
|
2246
|
-
return;
|
|
2247
|
-
if (extension.shadowCRUD(model.uid).isDisabled())
|
|
2248
|
-
return;
|
|
2249
|
-
builder.field(attributeName, { type: getFiltersInputTypeName(model) });
|
|
2250
|
-
};
|
|
2251
|
-
const addComponentAttribute = (builder, attributeName, attribute) => {
|
|
2252
|
-
const utils2 = strapi2.plugin("graphql").service("utils");
|
|
2253
|
-
const extension = strapi2.plugin("graphql").service("extension");
|
|
2254
|
-
const { getFiltersInputTypeName } = utils2.naming;
|
|
2255
|
-
const component = strapi2.getModel(attribute.component);
|
|
2256
|
-
if (!component)
|
|
2257
|
-
return;
|
|
2258
|
-
if (extension.shadowCRUD(component.uid).isDisabled())
|
|
2259
|
-
return;
|
|
2260
|
-
builder.field(attributeName, { type: getFiltersInputTypeName(component) });
|
|
2261
|
-
};
|
|
2262
|
-
const buildContentTypeFilters = (contentType2) => {
|
|
2263
|
-
const utils2 = strapi2.plugin("graphql").service("utils");
|
|
2264
|
-
const extension = strapi2.plugin("graphql").service("extension");
|
|
2265
|
-
const { getFiltersInputTypeName, getScalarFilterInputTypeName } = utils2.naming;
|
|
2266
|
-
const { isStrapiScalar, isRelation, isComponent } = utils2.attributes;
|
|
2267
|
-
const { attributes: attributes2 } = contentType2;
|
|
2268
|
-
const filtersTypeName = getFiltersInputTypeName(contentType2);
|
|
2269
|
-
return nexus.inputObjectType({
|
|
2270
|
-
name: filtersTypeName,
|
|
2271
|
-
definition(t) {
|
|
2272
|
-
const validAttributes = Object.entries(attributes2).filter(
|
|
2273
|
-
([attributeName]) => extension.shadowCRUD(contentType2.uid).field(attributeName).hasFiltersEnabeld()
|
|
2274
|
-
);
|
|
2275
|
-
const isIDFilterEnabled = extension.shadowCRUD(contentType2.uid).field("documentId").hasFiltersEnabeld();
|
|
2276
|
-
if (contentType2.kind === "collectionType" && isIDFilterEnabled) {
|
|
2277
|
-
t.field("documentId", { type: getScalarFilterInputTypeName("ID") });
|
|
2278
|
-
}
|
|
2279
|
-
for (const [attributeName, attribute] of validAttributes) {
|
|
2280
|
-
if (isStrapiScalar(attribute)) {
|
|
2281
|
-
addScalarAttribute(t, attributeName, attribute);
|
|
2282
|
-
} else if (isRelation(attribute)) {
|
|
2283
|
-
addRelationalAttribute(t, attributeName, attribute);
|
|
2284
|
-
} else if (isComponent(attribute)) {
|
|
2285
|
-
addComponentAttribute(t, attributeName, attribute);
|
|
2286
|
-
}
|
|
2287
|
-
}
|
|
2288
|
-
for (const operator of rootLevelOperators()) {
|
|
2289
|
-
operator.add(t, filtersTypeName);
|
|
2290
|
-
}
|
|
2291
|
-
}
|
|
2292
|
-
});
|
|
2293
|
-
};
|
|
2294
|
-
return {
|
|
2295
|
-
buildContentTypeFilters
|
|
2296
|
-
};
|
|
2297
|
-
};
|
|
2298
|
-
const filters = (context) => ({
|
|
2299
|
-
...contentType(context)
|
|
2300
|
-
});
|
|
2301
|
-
const { isWritableAttribute } = utils$2.contentTypes;
|
|
2302
|
-
const inputs = ({ strapi: strapi2 }) => {
|
|
2303
|
-
const { naming: naming2, mappers: mappers2, attributes: attributes2 } = strapi2.plugin("graphql").service("utils");
|
|
2304
|
-
const extension = strapi2.plugin("graphql").service("extension");
|
|
2305
|
-
const { getComponentInputName, getContentTypeInputName, getEnumName, getDynamicZoneInputName } = naming2;
|
|
2306
|
-
const {
|
|
2307
|
-
isStrapiScalar,
|
|
2308
|
-
isRelation,
|
|
2309
|
-
isMorphRelation,
|
|
2310
|
-
isMedia,
|
|
2311
|
-
isEnumeration,
|
|
2312
|
-
isComponent,
|
|
2313
|
-
isDynamicZone
|
|
2314
|
-
} = attributes2;
|
|
2315
|
-
return {
|
|
2316
|
-
buildInputType(contentType2) {
|
|
2317
|
-
const { attributes: attributes22, modelType } = contentType2;
|
|
2318
|
-
const name = (modelType === "component" ? getComponentInputName : getContentTypeInputName).call(null, contentType2);
|
|
2319
|
-
return nexus.inputObjectType({
|
|
2320
|
-
name,
|
|
2321
|
-
definition(t) {
|
|
2322
|
-
const isFieldEnabled = (fieldName) => {
|
|
2323
|
-
return extension.shadowCRUD(contentType2.uid).field(fieldName).hasInputEnabled();
|
|
2324
|
-
};
|
|
2325
|
-
const validAttributes = Object.entries(attributes22).filter(([attributeName]) => {
|
|
2326
|
-
return isWritableAttribute(contentType2, attributeName) && isFieldEnabled(attributeName);
|
|
2327
|
-
});
|
|
2328
|
-
if (modelType === "component" && isFieldEnabled("id")) {
|
|
2329
|
-
t.id("id");
|
|
2330
|
-
}
|
|
2331
|
-
validAttributes.forEach(([attributeName, attribute]) => {
|
|
2332
|
-
if (isEnumeration(attribute)) {
|
|
2333
|
-
const enumTypeName = getEnumName(contentType2, attributeName);
|
|
2334
|
-
t.field(attributeName, { type: enumTypeName });
|
|
2335
|
-
} else if (isStrapiScalar(attribute)) {
|
|
2336
|
-
const gqlScalar = mappers2.strapiScalarToGraphQLScalar(attribute.type);
|
|
2337
|
-
t.field(attributeName, { type: gqlScalar });
|
|
2338
|
-
} else if (isMedia(attribute)) {
|
|
2339
|
-
const isMultiple = attribute.multiple === true;
|
|
2340
|
-
if (extension.shadowCRUD("plugin::upload.file").isDisabled()) {
|
|
2341
|
-
return;
|
|
2342
|
-
}
|
|
2343
|
-
if (isMultiple) {
|
|
2344
|
-
t.list.id(attributeName);
|
|
2345
|
-
} else {
|
|
2346
|
-
t.id(attributeName);
|
|
2347
|
-
}
|
|
2348
|
-
} else if (isRelation(attribute) && !isMorphRelation(attribute)) {
|
|
2349
|
-
if (extension.shadowCRUD(attribute.target).isDisabled()) {
|
|
2350
|
-
return;
|
|
2351
|
-
}
|
|
2352
|
-
const isToManyRelation = attribute.relation.endsWith("Many");
|
|
2353
|
-
if (isToManyRelation) {
|
|
2354
|
-
t.list.id(attributeName);
|
|
2355
|
-
} else {
|
|
2356
|
-
t.id(attributeName);
|
|
2357
|
-
}
|
|
2358
|
-
} else if (isComponent(attribute)) {
|
|
2359
|
-
const isRepeatable = attribute.repeatable === true;
|
|
2360
|
-
const component = strapi2.components[attribute.component];
|
|
2361
|
-
const componentInputType = getComponentInputName(component);
|
|
2362
|
-
if (isRepeatable) {
|
|
2363
|
-
t.list.field(attributeName, { type: componentInputType });
|
|
2364
|
-
} else {
|
|
2365
|
-
t.field(attributeName, { type: componentInputType });
|
|
2366
|
-
}
|
|
2367
|
-
} else if (isDynamicZone(attribute)) {
|
|
2368
|
-
const dzInputName = getDynamicZoneInputName(contentType2, attributeName);
|
|
2369
|
-
t.list.field(attributeName, { type: nexus.nonNull(dzInputName) });
|
|
2370
|
-
}
|
|
2371
|
-
});
|
|
2372
|
-
}
|
|
2373
|
-
});
|
|
2374
|
-
}
|
|
2375
|
-
};
|
|
2376
|
-
};
|
|
2377
|
-
const genericMorph = ({ strapi: strapi2, registry }) => {
|
|
2378
|
-
const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
|
|
2379
|
-
const { KINDS: KINDS2, GENERIC_MORPH_TYPENAME: GENERIC_MORPH_TYPENAME2 } = strapi2.plugin("graphql").service("constants");
|
|
2380
|
-
return {
|
|
2381
|
-
buildGenericMorphDefinition() {
|
|
2382
|
-
return nexus.unionType({
|
|
2383
|
-
name: GENERIC_MORPH_TYPENAME2,
|
|
2384
|
-
resolveType(obj) {
|
|
2385
|
-
const contentType2 = strapi2.getModel(obj.__type);
|
|
2386
|
-
if (!contentType2) {
|
|
2387
|
-
return null;
|
|
2388
|
-
}
|
|
2389
|
-
if (contentType2.modelType === "component") {
|
|
2390
|
-
return naming2.getComponentName(contentType2);
|
|
2391
|
-
}
|
|
2392
|
-
return naming2.getTypeName(contentType2);
|
|
2393
|
-
},
|
|
2394
|
-
definition(t) {
|
|
2395
|
-
const members = registry.where(({ config: config2 }) => [KINDS2.type, KINDS2.component].includes(config2.kind)).map(fp.prop("name"));
|
|
2396
|
-
t.members(...members);
|
|
2397
|
-
}
|
|
2398
|
-
});
|
|
2399
|
-
}
|
|
2400
|
-
};
|
|
2401
|
-
};
|
|
2402
|
-
const { ApplicationError } = utils$2.errors;
|
|
2403
|
-
const associationResolvers = ({ strapi: strapi2 }) => {
|
|
2404
|
-
const { service: getGraphQLService } = strapi2.plugin("graphql");
|
|
2405
|
-
const { isMorphRelation, isMedia } = getGraphQLService("utils").attributes;
|
|
2406
|
-
const { transformArgs } = getGraphQLService("builders").utils;
|
|
2407
|
-
const { toEntityResponse, toEntityResponseCollection } = getGraphQLService("format").returnTypes;
|
|
2408
|
-
return {
|
|
2409
|
-
buildAssociationResolver({
|
|
2410
|
-
contentTypeUID,
|
|
2411
|
-
attributeName
|
|
2412
|
-
}) {
|
|
2413
|
-
const contentType2 = strapi2.getModel(contentTypeUID);
|
|
2414
|
-
const attribute = contentType2.attributes[attributeName];
|
|
2415
|
-
if (!attribute) {
|
|
2416
|
-
throw new ApplicationError(
|
|
2417
|
-
`Failed to build an association resolver for ${contentTypeUID}::${attributeName}`
|
|
2418
|
-
);
|
|
2419
|
-
}
|
|
2420
|
-
const isMediaAttribute = isMedia(attribute);
|
|
2421
|
-
const isMorphAttribute = isMorphRelation(attribute);
|
|
2422
|
-
const targetUID = isMediaAttribute ? "plugin::upload.file" : attribute.target;
|
|
2423
|
-
const isToMany = isMediaAttribute ? attribute.multiple : attribute.relation.endsWith("Many");
|
|
2424
|
-
const targetContentType = strapi2.getModel(targetUID);
|
|
2425
|
-
return async (parent, args2 = {}, context = {}) => {
|
|
2426
|
-
const { auth } = context.state;
|
|
2427
|
-
const transformedArgs = transformArgs(args2, {
|
|
2428
|
-
contentType: targetContentType,
|
|
2429
|
-
usePagination: true
|
|
2430
|
-
});
|
|
2431
|
-
await strapi2.contentAPI.validate.query(transformedArgs, targetContentType, {
|
|
2432
|
-
auth
|
|
2433
|
-
});
|
|
2434
|
-
const sanitizedQuery = await strapi2.contentAPI.sanitize.query(
|
|
2435
|
-
transformedArgs,
|
|
2436
|
-
targetContentType,
|
|
2437
|
-
{
|
|
2438
|
-
auth
|
|
2439
|
-
}
|
|
2440
|
-
);
|
|
2441
|
-
const data = await strapi2.db?.query(contentTypeUID).load(parent, attributeName, sanitizedQuery);
|
|
2442
|
-
const info = {
|
|
2443
|
-
args: sanitizedQuery,
|
|
2444
|
-
resourceUID: targetUID
|
|
2445
|
-
};
|
|
2446
|
-
if (isMorphAttribute) {
|
|
2447
|
-
const wrapData = (dataToWrap) => ({ [attributeName]: dataToWrap });
|
|
2448
|
-
const sanitizeData = (dataToSanitize) => {
|
|
2449
|
-
return strapi2.contentAPI.sanitize.output(dataToSanitize, contentType2, { auth });
|
|
2450
|
-
};
|
|
2451
|
-
const unwrapData = fp.get(attributeName);
|
|
2452
|
-
const sanitizeMorphAttribute = utils$2.async.pipe(wrapData, sanitizeData, unwrapData);
|
|
2453
|
-
return sanitizeMorphAttribute(data);
|
|
2454
|
-
}
|
|
2455
|
-
if (isToMany) {
|
|
2456
|
-
return toEntityResponseCollection(data, info);
|
|
2457
|
-
}
|
|
2458
|
-
return toEntityResponse(data, info);
|
|
2459
|
-
};
|
|
2460
|
-
}
|
|
2461
|
-
};
|
|
2462
|
-
};
|
|
2463
|
-
const queriesResolvers = ({ strapi: strapi2 }) => ({
|
|
2464
|
-
buildQueriesResolvers({ contentType: contentType2 }) {
|
|
2465
|
-
const { uid } = contentType2;
|
|
2466
|
-
return {
|
|
2467
|
-
async findMany(parent, args2, ctx) {
|
|
2468
|
-
await strapi2.contentAPI.validate.query(args2, contentType2, {
|
|
2469
|
-
auth: ctx?.state?.auth
|
|
2470
|
-
});
|
|
2471
|
-
const sanitizedQuery = await strapi2.contentAPI.sanitize.query(args2, contentType2, {
|
|
2472
|
-
auth: ctx?.state?.auth
|
|
2473
|
-
});
|
|
2474
|
-
return strapi2.documents(uid).findMany({ status: "published", ...sanitizedQuery });
|
|
2475
|
-
},
|
|
2476
|
-
async findFirst(parent, args2, ctx) {
|
|
2477
|
-
await strapi2.contentAPI.validate.query(args2, contentType2, {
|
|
2478
|
-
auth: ctx?.state?.auth
|
|
2479
|
-
});
|
|
2480
|
-
const sanitizedQuery = await strapi2.contentAPI.sanitize.query(args2, contentType2, {
|
|
2481
|
-
auth: ctx?.state?.auth
|
|
2482
|
-
});
|
|
2483
|
-
return strapi2.documents(uid).findFirst({ status: "published", ...sanitizedQuery });
|
|
2484
|
-
},
|
|
2485
|
-
async findOne(parent, args2, ctx) {
|
|
2486
|
-
const { documentId } = args2;
|
|
2487
|
-
await strapi2.contentAPI.validate.query(args2, contentType2, {
|
|
2488
|
-
auth: ctx?.state?.auth
|
|
2489
|
-
});
|
|
2490
|
-
const sanitizedQuery = await strapi2.contentAPI.sanitize.query(args2, contentType2, {
|
|
2491
|
-
auth: ctx?.state?.auth
|
|
2492
|
-
});
|
|
2493
|
-
return strapi2.documents(uid).findOne({
|
|
2494
|
-
status: "published",
|
|
2495
|
-
...fp.omit(["id", "documentId"], sanitizedQuery),
|
|
2496
|
-
documentId
|
|
2497
|
-
});
|
|
2498
|
-
}
|
|
2499
|
-
};
|
|
2500
|
-
}
|
|
2501
|
-
});
|
|
2502
|
-
const componentResolvers = ({ strapi: strapi2 }) => ({
|
|
2503
|
-
buildComponentResolver({
|
|
2504
|
-
contentTypeUID,
|
|
2505
|
-
attributeName
|
|
2506
|
-
}) {
|
|
2507
|
-
const { transformArgs } = strapi2.plugin("graphql").service("builders").utils;
|
|
2508
|
-
return async (parent, args2, ctx) => {
|
|
2509
|
-
const contentType2 = strapi2.getModel(contentTypeUID);
|
|
2510
|
-
const { component: componentName } = contentType2.attributes[attributeName];
|
|
2511
|
-
const component = strapi2.getModel(componentName);
|
|
2512
|
-
const transformedArgs = transformArgs(args2, { contentType: component, usePagination: true });
|
|
2513
|
-
await strapi2.contentAPI.validate.query(transformedArgs, component, {
|
|
2514
|
-
auth: ctx?.state?.auth
|
|
2515
|
-
});
|
|
2516
|
-
const sanitizedQuery = await strapi2.contentAPI.sanitize.query(transformedArgs, component, {
|
|
2517
|
-
auth: ctx?.state?.auth
|
|
2518
|
-
});
|
|
2519
|
-
return strapi2.db?.query(contentTypeUID).load(parent, attributeName, sanitizedQuery);
|
|
2520
|
-
};
|
|
2521
|
-
}
|
|
2522
|
-
});
|
|
2523
|
-
const dynamicZoneResolvers = ({ strapi: strapi2 }) => ({
|
|
2524
|
-
buildDynamicZoneResolver({
|
|
2525
|
-
contentTypeUID,
|
|
2526
|
-
attributeName
|
|
2527
|
-
}) {
|
|
2528
|
-
return async (parent) => {
|
|
2529
|
-
return strapi2.db?.query(contentTypeUID).load(parent, attributeName);
|
|
2530
|
-
};
|
|
2531
|
-
}
|
|
2532
|
-
});
|
|
2533
|
-
const paginationResolvers = ({ strapi: strapi2 }) => ({
|
|
2534
|
-
async resolvePagination(parent, _, ctx) {
|
|
2535
|
-
const { args: args2, resourceUID } = parent.info;
|
|
2536
|
-
const { start, limit } = args2;
|
|
2537
|
-
const safeLimit = Math.max(limit, 1);
|
|
2538
|
-
const contentType2 = strapi2.getModel(resourceUID);
|
|
2539
|
-
await strapi2.contentAPI.validate.query(args2, contentType2, {
|
|
2540
|
-
auth: ctx?.state?.auth
|
|
2541
|
-
});
|
|
2542
|
-
const sanitizedQuery = await strapi2.contentAPI.sanitize.query(args2, contentType2, {
|
|
2543
|
-
auth: ctx?.state?.auth
|
|
2544
|
-
});
|
|
2545
|
-
const total = await strapi2.documents(resourceUID).count(sanitizedQuery);
|
|
2546
|
-
const pageSize = limit === -1 ? total - start : safeLimit;
|
|
2547
|
-
const pageCount = limit === -1 ? safeLimit : Math.ceil(total / safeLimit);
|
|
2548
|
-
const page = limit === -1 ? safeLimit : Math.floor(start / safeLimit) + 1;
|
|
2549
|
-
return { total, page, pageSize, pageCount };
|
|
2550
|
-
}
|
|
2551
|
-
});
|
|
2552
|
-
const resolvers = (context) => ({
|
|
2553
|
-
// Generics
|
|
2554
|
-
...associationResolvers(context),
|
|
2555
|
-
// Builders
|
|
2556
|
-
...queriesResolvers(context),
|
|
2557
|
-
...componentResolvers(context),
|
|
2558
|
-
...dynamicZoneResolvers(context),
|
|
2559
|
-
...paginationResolvers(context)
|
|
2560
|
-
});
|
|
2561
|
-
const AND_FIELD_NAME = "and";
|
|
2562
|
-
const andOperator = () => ({
|
|
2563
|
-
fieldName: AND_FIELD_NAME,
|
|
2564
|
-
strapiOperator: "$and",
|
|
2565
|
-
add(t, type) {
|
|
2566
|
-
t.field(AND_FIELD_NAME, { type: nexus.list(type) });
|
|
2567
|
-
}
|
|
2568
|
-
});
|
|
2569
|
-
const OR_FIELD_NAME = "or";
|
|
2570
|
-
const orOperator = () => ({
|
|
2571
|
-
fieldName: OR_FIELD_NAME,
|
|
2572
|
-
strapiOperator: "$or",
|
|
2573
|
-
add(t, type) {
|
|
2574
|
-
t.field(OR_FIELD_NAME, { type: nexus.list(type) });
|
|
2575
|
-
}
|
|
2576
|
-
});
|
|
2577
|
-
const NOT_FIELD_NAME = "not";
|
|
2578
|
-
const notOperator = ({ strapi: strapi2 }) => ({
|
|
2579
|
-
fieldName: NOT_FIELD_NAME,
|
|
2580
|
-
strapiOperator: "$not",
|
|
2581
|
-
add(t, type) {
|
|
2582
|
-
const { naming: naming2, attributes: attributes2 } = strapi2.plugin("graphql").service("utils");
|
|
2583
|
-
if (attributes2.isGraphQLScalar({ type })) {
|
|
2584
|
-
t.field(NOT_FIELD_NAME, { type: naming2.getScalarFilterInputTypeName(type) });
|
|
2585
|
-
} else {
|
|
2586
|
-
t.field(NOT_FIELD_NAME, { type });
|
|
2587
|
-
}
|
|
2588
|
-
}
|
|
2589
|
-
});
|
|
2590
|
-
const { ValidationError } = utils$2.errors;
|
|
2591
|
-
const EQ_FIELD_NAME = "eq";
|
|
2592
|
-
const eqOperator = ({ strapi: strapi2 }) => ({
|
|
2593
|
-
fieldName: EQ_FIELD_NAME,
|
|
2594
|
-
strapiOperator: "$eq",
|
|
2595
|
-
add(t, type) {
|
|
2596
|
-
const { GRAPHQL_SCALARS: GRAPHQL_SCALARS2 } = strapi2.plugin("graphql").service("constants");
|
|
2597
|
-
if (!GRAPHQL_SCALARS2.includes(type)) {
|
|
2598
|
-
throw new ValidationError(
|
|
2599
|
-
`Can't use "${EQ_FIELD_NAME}" operator. "${type}" is not a valid scalar`
|
|
2600
|
-
);
|
|
2601
|
-
}
|
|
2602
|
-
t.field(EQ_FIELD_NAME, { type });
|
|
2603
|
-
}
|
|
2604
|
-
});
|
|
2605
|
-
const EQI_FIELD_NAME = "eqi";
|
|
2606
|
-
const eqiOperator = () => ({
|
|
2607
|
-
fieldName: EQI_FIELD_NAME,
|
|
2608
|
-
strapiOperator: "$eqi",
|
|
2609
|
-
add(t, type) {
|
|
2610
|
-
t.field(EQI_FIELD_NAME, { type });
|
|
2611
|
-
}
|
|
2612
|
-
});
|
|
2613
|
-
const NE_FIELD_NAME = "ne";
|
|
2614
|
-
const neOperator = () => ({
|
|
2615
|
-
fieldName: NE_FIELD_NAME,
|
|
2616
|
-
strapiOperator: "$ne",
|
|
2617
|
-
add(t, type) {
|
|
2618
|
-
t.field(NE_FIELD_NAME, { type });
|
|
2619
|
-
}
|
|
2620
|
-
});
|
|
2621
|
-
const NEI_FIELD_NAME = "nei";
|
|
2622
|
-
const neiOperator = () => ({
|
|
2623
|
-
fieldName: NEI_FIELD_NAME,
|
|
2624
|
-
strapiOperator: "$nei",
|
|
2625
|
-
add(t, type) {
|
|
2626
|
-
t.field(NEI_FIELD_NAME, { type });
|
|
2627
|
-
}
|
|
2628
|
-
});
|
|
2629
|
-
const STARTS_WITH_FIELD_NAME = "startsWith";
|
|
2630
|
-
const startsWithOperator = () => ({
|
|
2631
|
-
fieldName: STARTS_WITH_FIELD_NAME,
|
|
2632
|
-
strapiOperator: "$startsWith",
|
|
2633
|
-
add(t, type) {
|
|
2634
|
-
t.field(STARTS_WITH_FIELD_NAME, { type });
|
|
2635
|
-
}
|
|
2636
|
-
});
|
|
2637
|
-
const ENDS_WITH_FIELD_NAME = "endsWith";
|
|
2638
|
-
const endsWithOperator = () => ({
|
|
2639
|
-
fieldName: ENDS_WITH_FIELD_NAME,
|
|
2640
|
-
strapiOperator: "$endsWith",
|
|
2641
|
-
add(t, type) {
|
|
2642
|
-
t.field(ENDS_WITH_FIELD_NAME, { type });
|
|
2643
|
-
}
|
|
2644
|
-
});
|
|
2645
|
-
const CONTAINS_FIELD_NAME = "contains";
|
|
2646
|
-
const containsOperator = () => ({
|
|
2647
|
-
fieldName: CONTAINS_FIELD_NAME,
|
|
2648
|
-
strapiOperator: "$contains",
|
|
2649
|
-
add(t, type) {
|
|
2650
|
-
t.field(CONTAINS_FIELD_NAME, { type });
|
|
2651
|
-
}
|
|
2652
|
-
});
|
|
2653
|
-
const NOT_CONTAINS_FIELD_NAME = "notContains";
|
|
2654
|
-
const notContainsOperator = () => ({
|
|
2655
|
-
fieldName: NOT_CONTAINS_FIELD_NAME,
|
|
2656
|
-
strapiOperator: "$notContains",
|
|
2657
|
-
add(t, type) {
|
|
2658
|
-
t.field(NOT_CONTAINS_FIELD_NAME, { type });
|
|
2659
|
-
}
|
|
2660
|
-
});
|
|
2661
|
-
const CONTAINSI_FIELD_NAME = "containsi";
|
|
2662
|
-
const containsiOperator = () => ({
|
|
2663
|
-
fieldName: CONTAINSI_FIELD_NAME,
|
|
2664
|
-
strapiOperator: "$containsi",
|
|
2665
|
-
add(t, type) {
|
|
2666
|
-
t.field(CONTAINSI_FIELD_NAME, { type });
|
|
2667
|
-
}
|
|
2668
|
-
});
|
|
2669
|
-
const NOT_CONTAINSI_FIELD_NAME = "notContainsi";
|
|
2670
|
-
const notContainsiOperator = () => ({
|
|
2671
|
-
fieldName: NOT_CONTAINSI_FIELD_NAME,
|
|
2672
|
-
strapiOperator: "$notContainsi",
|
|
2673
|
-
add(t, type) {
|
|
2674
|
-
t.field(NOT_CONTAINSI_FIELD_NAME, { type });
|
|
2675
|
-
}
|
|
2676
|
-
});
|
|
2677
|
-
const GT_FIELD_NAME = "gt";
|
|
2678
|
-
const gtOperator = () => ({
|
|
2679
|
-
fieldName: GT_FIELD_NAME,
|
|
2680
|
-
strapiOperator: "$gt",
|
|
2681
|
-
add(t, type) {
|
|
2682
|
-
t.field(GT_FIELD_NAME, { type });
|
|
2683
|
-
}
|
|
2684
|
-
});
|
|
2685
|
-
const GTE_FIELD_NAME = "gte";
|
|
2686
|
-
const gteOperator = () => ({
|
|
2687
|
-
fieldName: GTE_FIELD_NAME,
|
|
2688
|
-
strapiOperator: "$gte",
|
|
2689
|
-
add(t, type) {
|
|
2690
|
-
t.field(GTE_FIELD_NAME, { type });
|
|
2691
|
-
}
|
|
2692
|
-
});
|
|
2693
|
-
const LT_FIELD_NAME = "lt";
|
|
2694
|
-
const ltOperator = () => ({
|
|
2695
|
-
fieldName: LT_FIELD_NAME,
|
|
2696
|
-
strapiOperator: "$lt",
|
|
2697
|
-
add(t, type) {
|
|
2698
|
-
t.field(LT_FIELD_NAME, { type });
|
|
2699
|
-
}
|
|
2700
|
-
});
|
|
2701
|
-
const LTE_FIELD_NAME = "lte";
|
|
2702
|
-
const lteOperator = () => ({
|
|
2703
|
-
fieldName: LTE_FIELD_NAME,
|
|
2704
|
-
strapiOperator: "$lte",
|
|
2705
|
-
add(t, type) {
|
|
2706
|
-
t.field(LTE_FIELD_NAME, { type });
|
|
2707
|
-
}
|
|
2708
|
-
});
|
|
2709
|
-
const NULL_FIELD_NAME = "null";
|
|
2710
|
-
const nullOperator = () => ({
|
|
2711
|
-
fieldName: NULL_FIELD_NAME,
|
|
2712
|
-
strapiOperator: "$null",
|
|
2713
|
-
add(t) {
|
|
2714
|
-
t.boolean(NULL_FIELD_NAME);
|
|
2715
|
-
}
|
|
2716
|
-
});
|
|
2717
|
-
const NOT_NULL_FIELD_NAME = "notNull";
|
|
2718
|
-
const notNullOperator = () => ({
|
|
2719
|
-
fieldName: NOT_NULL_FIELD_NAME,
|
|
2720
|
-
strapiOperator: "$notNull",
|
|
2721
|
-
add(t) {
|
|
2722
|
-
t.boolean(NOT_NULL_FIELD_NAME);
|
|
2723
|
-
}
|
|
2724
|
-
});
|
|
2725
|
-
const IN_FIELD_NAME = "in";
|
|
2726
|
-
const inOperator = () => ({
|
|
2727
|
-
fieldName: IN_FIELD_NAME,
|
|
2728
|
-
strapiOperator: "$in",
|
|
2729
|
-
add(t, type) {
|
|
2730
|
-
t.field(IN_FIELD_NAME, { type: nexus.list(type) });
|
|
2731
|
-
}
|
|
2732
|
-
});
|
|
2733
|
-
const NOT_IN_FIELD_NAME = "notIn";
|
|
2734
|
-
const notInOperator = () => ({
|
|
2735
|
-
fieldName: NOT_IN_FIELD_NAME,
|
|
2736
|
-
strapiOperator: "$notIn",
|
|
2737
|
-
add(t, type) {
|
|
2738
|
-
t.field(NOT_IN_FIELD_NAME, { type: nexus.list(type) });
|
|
2739
|
-
}
|
|
2740
|
-
});
|
|
2741
|
-
const BETWEEN_FIELD_NAME = "between";
|
|
2742
|
-
const betweenOperator = () => ({
|
|
2743
|
-
fieldName: BETWEEN_FIELD_NAME,
|
|
2744
|
-
strapiOperator: "$between",
|
|
2745
|
-
add(t, type) {
|
|
2746
|
-
t.field(BETWEEN_FIELD_NAME, { type: nexus.list(type) });
|
|
2747
|
-
}
|
|
2748
|
-
});
|
|
2749
|
-
const operators = {
|
|
2750
|
-
and: andOperator,
|
|
2751
|
-
or: orOperator,
|
|
2752
|
-
not: notOperator,
|
|
2753
|
-
eq: eqOperator,
|
|
2754
|
-
eqi: eqiOperator,
|
|
2755
|
-
ne: neOperator,
|
|
2756
|
-
nei: neiOperator,
|
|
2757
|
-
startsWith: startsWithOperator,
|
|
2758
|
-
endsWith: endsWithOperator,
|
|
2759
|
-
contains: containsOperator,
|
|
2760
|
-
notContains: notContainsOperator,
|
|
2761
|
-
containsi: containsiOperator,
|
|
2762
|
-
notContainsi: notContainsiOperator,
|
|
2763
|
-
gt: gtOperator,
|
|
2764
|
-
gte: gteOperator,
|
|
2765
|
-
lt: ltOperator,
|
|
2766
|
-
lte: lteOperator,
|
|
2767
|
-
null: nullOperator,
|
|
2768
|
-
notNull: notNullOperator,
|
|
2769
|
-
in: inOperator,
|
|
2770
|
-
notIn: notInOperator,
|
|
2771
|
-
between: betweenOperator
|
|
2772
|
-
};
|
|
2773
|
-
const operators$1 = ({ strapi: strapi2 }) => fp.mapValues((opCtor) => opCtor({ strapi: strapi2 }), operators);
|
|
2774
|
-
const { withDefaultPagination } = utils$2.pagination;
|
|
2775
|
-
const utils = ({ strapi: strapi2 }) => {
|
|
2776
|
-
const { service: getService } = strapi2.plugin("graphql");
|
|
2777
|
-
return {
|
|
2778
|
-
getContentTypeArgs(contentType2, { multiple = true, isNested = false } = {}) {
|
|
2779
|
-
const { naming: naming2 } = getService("utils");
|
|
2780
|
-
const { args: args2 } = getService("internals");
|
|
2781
|
-
const { modelType } = contentType2;
|
|
2782
|
-
if (modelType === "component") {
|
|
2783
|
-
if (!multiple)
|
|
2784
|
-
return {};
|
|
2785
|
-
return {
|
|
2786
|
-
filters: naming2.getFiltersInputTypeName(contentType2),
|
|
2787
|
-
pagination: args2.PaginationArg,
|
|
2788
|
-
sort: args2.SortArg
|
|
2789
|
-
};
|
|
2790
|
-
}
|
|
2791
|
-
const { kind } = contentType2;
|
|
2792
|
-
if (kind === "collectionType") {
|
|
2793
|
-
if (!multiple) {
|
|
2794
|
-
return {
|
|
2795
|
-
documentId: nexus.nonNull(nexus.idArg()),
|
|
2796
|
-
status: args2.PublicationStatusArg
|
|
2797
|
-
};
|
|
2798
|
-
}
|
|
2799
|
-
const params = {
|
|
2800
|
-
filters: naming2.getFiltersInputTypeName(contentType2),
|
|
2801
|
-
pagination: args2.PaginationArg,
|
|
2802
|
-
sort: args2.SortArg
|
|
2803
|
-
};
|
|
2804
|
-
if (!isNested) {
|
|
2805
|
-
Object.assign(params, { status: args2.PublicationStatusArg });
|
|
2806
|
-
}
|
|
2807
|
-
return params;
|
|
2808
|
-
}
|
|
2809
|
-
if (kind === "singleType") {
|
|
2810
|
-
const params = {};
|
|
2811
|
-
if (!isNested) {
|
|
2812
|
-
Object.assign(params, { status: args2.PublicationStatusArg });
|
|
2813
|
-
}
|
|
2814
|
-
return params;
|
|
2815
|
-
}
|
|
2816
|
-
},
|
|
2817
|
-
/**
|
|
2818
|
-
* Filter an object entries and keep only those whose value is a unique scalar attribute
|
|
2819
|
-
*/
|
|
2820
|
-
getUniqueScalarAttributes(attributes2) {
|
|
2821
|
-
const { isStrapiScalar } = getService("utils").attributes;
|
|
2822
|
-
const uniqueAttributes = fp.entries(attributes2).filter(
|
|
2823
|
-
([, attribute]) => isStrapiScalar(attribute) && "unique" in attribute && attribute.unique
|
|
2824
|
-
);
|
|
2825
|
-
return Object.fromEntries(uniqueAttributes);
|
|
2826
|
-
},
|
|
2827
|
-
/**
|
|
2828
|
-
* Map each value from an attribute to a FiltersInput type name
|
|
2829
|
-
* @param {object} attributes - The attributes object to transform
|
|
2830
|
-
* @return {Object<string, string>}
|
|
2831
|
-
*/
|
|
2832
|
-
scalarAttributesToFiltersMap(attributes2) {
|
|
2833
|
-
return fp.mapValues((attribute) => {
|
|
2834
|
-
const { mappers: mappers2, naming: naming2 } = getService("utils");
|
|
2835
|
-
const gqlScalar = mappers2.strapiScalarToGraphQLScalar(attribute.type);
|
|
2836
|
-
return naming2.getScalarFilterInputTypeName(gqlScalar);
|
|
2837
|
-
}, attributes2);
|
|
2838
|
-
},
|
|
2839
|
-
/**
|
|
2840
|
-
* Apply basic transform to GQL args
|
|
2841
|
-
*/
|
|
2842
|
-
transformArgs(args2, {
|
|
2843
|
-
contentType: contentType2,
|
|
2844
|
-
usePagination = false
|
|
2845
|
-
}) {
|
|
2846
|
-
const { mappers: mappers2 } = getService("utils");
|
|
2847
|
-
const { config: config2 } = strapi2.plugin("graphql");
|
|
2848
|
-
const { pagination: pagination2 = {}, filters: filters2 = {} } = args2;
|
|
2849
|
-
const newArgs = fp.omit(["pagination", "filters"], args2);
|
|
2850
|
-
if (usePagination) {
|
|
2851
|
-
const defaultLimit = config2("defaultLimit");
|
|
2852
|
-
const maxLimit = config2("maxLimit");
|
|
2853
|
-
Object.assign(
|
|
2854
|
-
newArgs,
|
|
2855
|
-
withDefaultPagination(pagination2, {
|
|
2856
|
-
maxLimit,
|
|
2857
|
-
defaults: {
|
|
2858
|
-
offset: { limit: defaultLimit },
|
|
2859
|
-
page: { pageSize: defaultLimit }
|
|
2860
|
-
}
|
|
2861
|
-
})
|
|
2862
|
-
);
|
|
2863
|
-
}
|
|
2864
|
-
if (args2.filters) {
|
|
2865
|
-
Object.assign(newArgs, {
|
|
2866
|
-
filters: mappers2.graphQLFiltersToStrapiQuery(filters2, contentType2)
|
|
2867
|
-
});
|
|
2868
|
-
}
|
|
2869
|
-
return newArgs;
|
|
2870
|
-
}
|
|
2871
|
-
};
|
|
2872
|
-
};
|
|
2873
|
-
const buildersFactories = [
|
|
2874
|
-
enums,
|
|
2875
|
-
dynamicZone,
|
|
2876
|
-
entity,
|
|
2877
|
-
typeBuilder,
|
|
2878
|
-
response,
|
|
2879
|
-
responseCollection,
|
|
2880
|
-
relationResponseCollection,
|
|
2881
|
-
queries,
|
|
2882
|
-
mutations,
|
|
2883
|
-
filters,
|
|
2884
|
-
inputs,
|
|
2885
|
-
genericMorph,
|
|
2886
|
-
resolvers
|
|
2887
|
-
];
|
|
2888
|
-
const builders = ({ strapi: strapi2 }) => {
|
|
2889
|
-
const buildersMap = /* @__PURE__ */ new Map();
|
|
2890
|
-
return {
|
|
2891
|
-
/**
|
|
2892
|
-
* Instantiate every builder with a strapi instance & a type registry
|
|
2893
|
-
*/
|
|
2894
|
-
new(name, registry) {
|
|
2895
|
-
const context = { strapi: strapi2, registry };
|
|
2896
|
-
const builders2 = fp.pipe(
|
|
2897
|
-
// Create a new instance of every builders
|
|
2898
|
-
fp.map((factory) => factory(context)),
|
|
2899
|
-
// Merge every builder into the same object
|
|
2900
|
-
fp.reduce(fp.merge, {})
|
|
2901
|
-
).call(null, buildersFactories);
|
|
2902
|
-
buildersMap.set(name, builders2);
|
|
2903
|
-
return builders2;
|
|
2904
|
-
},
|
|
2905
|
-
/**
|
|
2906
|
-
* Delete a set of builders instances from
|
|
2907
|
-
* the builders map for a given name
|
|
2908
|
-
*/
|
|
2909
|
-
delete(name) {
|
|
2910
|
-
buildersMap.delete(name);
|
|
2911
|
-
},
|
|
2912
|
-
/**
|
|
2913
|
-
* Retrieve a set of builders instances from
|
|
2914
|
-
* the builders map for a given name
|
|
2915
|
-
*/
|
|
2916
|
-
get(name) {
|
|
2917
|
-
return buildersMap.get(name);
|
|
2918
|
-
},
|
|
2919
|
-
filters: {
|
|
2920
|
-
operators: operators$1({ strapi: strapi2 })
|
|
2921
|
-
},
|
|
2922
|
-
utils: utils({ strapi: strapi2 })
|
|
2923
|
-
};
|
|
2924
|
-
};
|
|
2925
|
-
const getDefaultContentTypeConfig = () => ({
|
|
2926
|
-
enabled: true,
|
|
2927
|
-
mutations: true,
|
|
2928
|
-
queries: true,
|
|
2929
|
-
disabledActions: [],
|
|
2930
|
-
fields: /* @__PURE__ */ new Map()
|
|
2931
|
-
});
|
|
2932
|
-
const getDefaultFieldConfig = () => ({
|
|
2933
|
-
enabled: true,
|
|
2934
|
-
input: true,
|
|
2935
|
-
output: true,
|
|
2936
|
-
filters: true
|
|
2937
|
-
});
|
|
2938
|
-
const ALL_ACTIONS = "*";
|
|
2939
|
-
const createShadowCRUDManager = () => {
|
|
2940
|
-
const configs = /* @__PURE__ */ new Map();
|
|
2941
|
-
return (uid) => {
|
|
2942
|
-
if (!configs.has(uid)) {
|
|
2943
|
-
configs.set(uid, getDefaultContentTypeConfig());
|
|
2944
|
-
}
|
|
2945
|
-
return {
|
|
2946
|
-
isEnabled() {
|
|
2947
|
-
return configs.get(uid).enabled;
|
|
2948
|
-
},
|
|
2949
|
-
isDisabled() {
|
|
2950
|
-
return !this.isEnabled();
|
|
2951
|
-
},
|
|
2952
|
-
areQueriesEnabled() {
|
|
2953
|
-
return configs.get(uid).queries;
|
|
2954
|
-
},
|
|
2955
|
-
areQueriesDisabled() {
|
|
2956
|
-
return !this.areQueriesEnabled();
|
|
2957
|
-
},
|
|
2958
|
-
areMutationsEnabled() {
|
|
2959
|
-
return configs.get(uid).mutations;
|
|
2960
|
-
},
|
|
2961
|
-
areMutationsDisabled() {
|
|
2962
|
-
return !this.areMutationsEnabled();
|
|
2963
|
-
},
|
|
2964
|
-
isActionEnabled(action) {
|
|
2965
|
-
const matchingActions = [action, ALL_ACTIONS];
|
|
2966
|
-
return configs.get(uid).disabledActions.every((action2) => !matchingActions.includes(action2));
|
|
2967
|
-
},
|
|
2968
|
-
isActionDisabled(action) {
|
|
2969
|
-
return !this.isActionEnabled(action);
|
|
2970
|
-
},
|
|
2971
|
-
disable() {
|
|
2972
|
-
configs.get(uid).enabled = false;
|
|
2973
|
-
return this;
|
|
2974
|
-
},
|
|
2975
|
-
disableQueries() {
|
|
2976
|
-
configs.get(uid).queries = false;
|
|
2977
|
-
return this;
|
|
2978
|
-
},
|
|
2979
|
-
disableMutations() {
|
|
2980
|
-
configs.get(uid).mutations = false;
|
|
2981
|
-
return this;
|
|
2982
|
-
},
|
|
2983
|
-
disableAction(action) {
|
|
2984
|
-
const config2 = configs.get(uid);
|
|
2985
|
-
if (!config2.disabledActions.includes(action)) {
|
|
2986
|
-
config2.disabledActions.push(action);
|
|
2987
|
-
}
|
|
2988
|
-
return this;
|
|
2989
|
-
},
|
|
2990
|
-
disableActions(actions = []) {
|
|
2991
|
-
actions.forEach((action) => this.disableAction(action));
|
|
2992
|
-
return this;
|
|
2993
|
-
},
|
|
2994
|
-
field(fieldName) {
|
|
2995
|
-
const { fields } = configs.get(uid);
|
|
2996
|
-
if (!fields.has(fieldName)) {
|
|
2997
|
-
fields.set(fieldName, getDefaultFieldConfig());
|
|
2998
|
-
}
|
|
2999
|
-
return {
|
|
3000
|
-
isEnabled() {
|
|
3001
|
-
return fields.get(fieldName).enabled;
|
|
3002
|
-
},
|
|
3003
|
-
hasInputEnabled() {
|
|
3004
|
-
return fields.get(fieldName).input;
|
|
3005
|
-
},
|
|
3006
|
-
hasOutputEnabled() {
|
|
3007
|
-
return fields.get(fieldName).output;
|
|
3008
|
-
},
|
|
3009
|
-
hasFiltersEnabeld() {
|
|
3010
|
-
return fields.get(fieldName).filters;
|
|
3011
|
-
},
|
|
3012
|
-
disable() {
|
|
3013
|
-
fields.set(fieldName, {
|
|
3014
|
-
enabled: false,
|
|
3015
|
-
output: false,
|
|
3016
|
-
input: false,
|
|
3017
|
-
filters: false
|
|
3018
|
-
});
|
|
3019
|
-
return this;
|
|
3020
|
-
},
|
|
3021
|
-
disableOutput() {
|
|
3022
|
-
fields.get(fieldName).output = false;
|
|
3023
|
-
return this;
|
|
3024
|
-
},
|
|
3025
|
-
disableInput() {
|
|
3026
|
-
fields.get(fieldName).input = false;
|
|
3027
|
-
return this;
|
|
3028
|
-
},
|
|
3029
|
-
disableFilters() {
|
|
3030
|
-
fields.get(fieldName).filters = false;
|
|
3031
|
-
return this;
|
|
3032
|
-
}
|
|
3033
|
-
};
|
|
3034
|
-
}
|
|
3035
|
-
};
|
|
3036
|
-
};
|
|
3037
|
-
};
|
|
3038
|
-
const getDefaultState = () => ({
|
|
3039
|
-
types: [],
|
|
3040
|
-
typeDefs: [],
|
|
3041
|
-
resolvers: {},
|
|
3042
|
-
resolversConfig: {},
|
|
3043
|
-
plugins: []
|
|
3044
|
-
});
|
|
3045
|
-
const createExtension = ({ strapi: strapi2 }) => {
|
|
3046
|
-
const configs = [];
|
|
3047
|
-
return {
|
|
3048
|
-
shadowCRUD: createShadowCRUDManager(),
|
|
3049
|
-
/**
|
|
3050
|
-
* Register a new extension configuration
|
|
3051
|
-
*/
|
|
3052
|
-
use(configuration) {
|
|
3053
|
-
configs.push(configuration);
|
|
3054
|
-
return this;
|
|
3055
|
-
},
|
|
3056
|
-
/**
|
|
3057
|
-
* Convert the registered configuration into a single extension object & return it
|
|
3058
|
-
*/
|
|
3059
|
-
generate({ typeRegistry: typeRegistry2 }) {
|
|
3060
|
-
const resolveConfig = (config2) => {
|
|
3061
|
-
return typeof config2 === "function" ? config2({ strapi: strapi2, nexus: nexus__namespace, typeRegistry: typeRegistry2 }) : config2;
|
|
3062
|
-
};
|
|
3063
|
-
return configs.reduce((acc, configuration) => {
|
|
3064
|
-
const { types: types2, typeDefs, resolvers: resolvers2, resolversConfig, plugins } = resolveConfig(configuration);
|
|
3065
|
-
if (typeof typeDefs === "string") {
|
|
3066
|
-
acc.typeDefs.push(typeDefs);
|
|
3067
|
-
}
|
|
3068
|
-
if (Array.isArray(types2)) {
|
|
3069
|
-
acc.types.push(...types2);
|
|
3070
|
-
}
|
|
3071
|
-
if (Array.isArray(plugins)) {
|
|
3072
|
-
acc.plugins.push(...plugins);
|
|
3073
|
-
}
|
|
3074
|
-
if (typeof resolvers2 === "object") {
|
|
3075
|
-
acc.resolvers = fp.merge(acc.resolvers, resolvers2);
|
|
3076
|
-
}
|
|
3077
|
-
if (typeof resolversConfig === "object") {
|
|
3078
|
-
acc.resolversConfig = fp.merge(resolversConfig, acc.resolversConfig);
|
|
3079
|
-
}
|
|
3080
|
-
return acc;
|
|
3081
|
-
}, getDefaultState());
|
|
3082
|
-
}
|
|
3083
|
-
};
|
|
3084
|
-
};
|
|
3085
|
-
const returnTypes = () => ({
|
|
3086
|
-
toEntityResponse(value, info = {}) {
|
|
3087
|
-
const { args: args2 = {}, resourceUID } = info;
|
|
3088
|
-
return { value, info: { args: args2, resourceUID } };
|
|
3089
|
-
},
|
|
3090
|
-
toEntityResponseCollection(nodes, info = {}) {
|
|
3091
|
-
const { args: args2 = {}, resourceUID } = info;
|
|
3092
|
-
return { nodes, info: { args: args2, resourceUID } };
|
|
3093
|
-
}
|
|
3094
|
-
});
|
|
3095
|
-
const format = () => ({
|
|
3096
|
-
returnTypes: returnTypes()
|
|
3097
|
-
});
|
|
3098
|
-
const services = {
|
|
3099
|
-
builders,
|
|
3100
|
-
"content-api": contentAPI,
|
|
3101
|
-
constants,
|
|
3102
|
-
extension: createExtension,
|
|
3103
|
-
format,
|
|
3104
|
-
internals,
|
|
3105
|
-
"type-registry": typeRegistry,
|
|
3106
|
-
utils: utils$1
|
|
3107
|
-
};
|
|
3108
|
-
const index = {
|
|
3109
|
-
config,
|
|
3110
|
-
bootstrap,
|
|
3111
|
-
services
|
|
3112
|
-
};
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index$2 = require('./config/index.js');
|
|
4
|
+
var bootstrap = require('./bootstrap.js');
|
|
5
|
+
var index$1 = require('./services/index.js');
|
|
6
|
+
|
|
7
|
+
var index = {
|
|
8
|
+
config: index$2.config,
|
|
9
|
+
bootstrap: bootstrap.bootstrap,
|
|
10
|
+
services: index$1.services
|
|
11
|
+
};
|
|
12
|
+
|
|
3113
13
|
module.exports = index;
|
|
3114
14
|
//# sourceMappingURL=index.js.map
|