@strapi/plugin-graphql 5.56.0 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/bootstrap.js +10 -10
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +8 -8
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/format-graphql-error.js +5 -5
- package/dist/server/format-graphql-error.js.map +1 -1
- package/dist/server/format-graphql-error.mjs +4 -4
- package/dist/server/format-graphql-error.mjs.map +1 -1
- package/dist/server/services/builders/dynamic-zones.js +3 -3
- package/dist/server/services/builders/dynamic-zones.js.map +1 -1
- package/dist/server/services/builders/dynamic-zones.mjs +3 -3
- package/dist/server/services/builders/dynamic-zones.mjs.map +1 -1
- package/dist/server/services/builders/entity.js +4 -4
- package/dist/server/services/builders/entity.js.map +1 -1
- package/dist/server/services/builders/entity.mjs +2 -2
- package/dist/server/services/builders/entity.mjs.map +1 -1
- package/dist/server/services/builders/enums.js +2 -2
- package/dist/server/services/builders/enums.js.map +1 -1
- package/dist/server/services/builders/enums.mjs +2 -2
- package/dist/server/services/builders/enums.mjs.map +1 -1
- package/dist/server/services/builders/filters/operators/index.js +3 -3
- package/dist/server/services/builders/filters/operators/index.js.map +1 -1
- package/dist/server/services/builders/filters/operators/index.mjs +3 -3
- package/dist/server/services/builders/filters/operators/index.mjs.map +1 -1
- package/dist/server/services/builders/generic-morph.js +1 -2
- package/dist/server/services/builders/generic-morph.js.map +1 -1
- package/dist/server/services/builders/generic-morph.mjs +1 -2
- package/dist/server/services/builders/generic-morph.mjs.map +1 -1
- package/dist/server/services/builders/index.js +2 -4
- package/dist/server/services/builders/index.js.map +1 -1
- package/dist/server/services/builders/index.mjs +2 -4
- package/dist/server/services/builders/index.mjs.map +1 -1
- package/dist/server/services/builders/relation-response-collection.js +3 -3
- package/dist/server/services/builders/relation-response-collection.js.map +1 -1
- package/dist/server/services/builders/relation-response-collection.mjs +3 -3
- package/dist/server/services/builders/relation-response-collection.mjs.map +1 -1
- package/dist/server/services/builders/resolvers/association.js +3 -3
- package/dist/server/services/builders/resolvers/association.js.map +1 -1
- package/dist/server/services/builders/resolvers/association.mjs +3 -3
- package/dist/server/services/builders/resolvers/association.mjs.map +1 -1
- package/dist/server/services/builders/resolvers/query.js +3 -3
- package/dist/server/services/builders/resolvers/query.js.map +1 -1
- package/dist/server/services/builders/resolvers/query.mjs +3 -3
- package/dist/server/services/builders/resolvers/query.mjs.map +1 -1
- package/dist/server/services/builders/response-collection.js +4 -4
- package/dist/server/services/builders/response-collection.js.map +1 -1
- package/dist/server/services/builders/response-collection.mjs +3 -3
- package/dist/server/services/builders/response-collection.mjs.map +1 -1
- package/dist/server/services/builders/response.js +1 -2
- package/dist/server/services/builders/response.js.map +1 -1
- package/dist/server/services/builders/response.mjs +1 -2
- package/dist/server/services/builders/response.mjs.map +1 -1
- package/dist/server/services/builders/type.js +4 -4
- package/dist/server/services/builders/type.js.map +1 -1
- package/dist/server/services/builders/type.mjs +3 -3
- package/dist/server/services/builders/type.mjs.map +1 -1
- package/dist/server/services/builders/utils.js +6 -6
- package/dist/server/services/builders/utils.js.map +1 -1
- package/dist/server/services/builders/utils.mjs +6 -6
- package/dist/server/services/builders/utils.mjs.map +1 -1
- package/dist/server/services/content-api/index.js +1 -2
- package/dist/server/services/content-api/index.js.map +1 -1
- package/dist/server/services/content-api/index.mjs +1 -2
- package/dist/server/services/content-api/index.mjs.map +1 -1
- package/dist/server/services/content-api/policy.js +2 -3
- package/dist/server/services/content-api/policy.js.map +1 -1
- package/dist/server/services/content-api/policy.mjs +2 -3
- package/dist/server/services/content-api/policy.mjs.map +1 -1
- package/dist/server/services/content-api/wrap-resolvers.js +9 -9
- package/dist/server/services/content-api/wrap-resolvers.js.map +1 -1
- package/dist/server/services/content-api/wrap-resolvers.mjs +9 -9
- package/dist/server/services/content-api/wrap-resolvers.mjs.map +1 -1
- package/dist/server/services/extension/extension.js +3 -3
- package/dist/server/services/extension/extension.js.map +1 -1
- package/dist/server/services/extension/extension.mjs +3 -3
- package/dist/server/services/extension/extension.mjs.map +1 -1
- package/dist/server/services/internals/helpers/get-enabled-scalars.js +2 -2
- package/dist/server/services/internals/helpers/get-enabled-scalars.js.map +1 -1
- package/dist/server/services/internals/helpers/get-enabled-scalars.mjs +1 -1
- package/dist/server/services/internals/helpers/get-enabled-scalars.mjs.map +1 -1
- package/dist/server/services/internals/types/error.js +1 -2
- package/dist/server/services/internals/types/error.js.map +1 -1
- package/dist/server/services/internals/types/error.mjs +1 -2
- package/dist/server/services/internals/types/error.mjs.map +1 -1
- package/dist/server/services/type-registry.js +1 -2
- package/dist/server/services/type-registry.js.map +1 -1
- package/dist/server/services/type-registry.mjs +1 -2
- package/dist/server/services/type-registry.mjs.map +1 -1
- package/dist/server/services/utils/attributes.js +6 -6
- package/dist/server/services/utils/attributes.js.map +1 -1
- package/dist/server/services/utils/attributes.mjs +6 -6
- package/dist/server/services/utils/attributes.mjs.map +1 -1
- package/dist/server/services/utils/mappers/entity-to-response-entity.js +2 -2
- package/dist/server/services/utils/mappers/entity-to-response-entity.js.map +1 -1
- package/dist/server/services/utils/mappers/entity-to-response-entity.mjs +2 -2
- package/dist/server/services/utils/mappers/entity-to-response-entity.mjs.map +1 -1
- package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.js +5 -5
- package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.js.map +1 -1
- package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.mjs +4 -4
- package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.mjs.map +1 -1
- package/dist/server/services/utils/mappers/graphql-scalar-to-operators.js +3 -3
- package/dist/server/services/utils/mappers/graphql-scalar-to-operators.js.map +1 -1
- package/dist/server/services/utils/mappers/graphql-scalar-to-operators.mjs +3 -3
- package/dist/server/services/utils/mappers/graphql-scalar-to-operators.mjs.map +1 -1
- package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.js +3 -3
- package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.js.map +1 -1
- package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.mjs +2 -2
- package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.mjs.map +1 -1
- package/dist/server/services/utils/naming.js +13 -10
- package/dist/server/services/utils/naming.js.map +1 -1
- package/dist/server/services/utils/naming.mjs +9 -6
- package/dist/server/services/utils/naming.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +128 -13
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/filters/operators/index.d.ts +112 -5
- package/dist/server/src/services/builders/filters/operators/index.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 +116 -7
- package/dist/server/src/services/builders/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/resolvers/index.d.ts.map +1 -1
- package/dist/server/src/services/builders/response.d.ts.map +1 -1
- package/dist/server/src/services/builders/utils.d.ts +3 -1
- package/dist/server/src/services/builders/utils.d.ts.map +1 -1
- 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/index.d.ts +128 -13
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/internals/types/error.d.ts.map +1 -1
- package/dist/server/src/services/type-registry.d.ts.map +1 -1
- package/dist/server/src/services/utils/index.d.ts +12 -6
- 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 +14 -7
- package/dist/server/src/services/utils/mappers/entity-to-response-entity.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 +12 -6
- package/dist/server/src/services/utils/mappers/index.d.ts.map +1 -1
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sources":["../../../../server/src/services/builders/enums.ts"],"sourcesContent":["import { enumType } from 'nexus';\nimport { set } from 'lodash
|
|
1
|
+
{"version":3,"file":"enums.js","sources":["../../../../server/src/services/builders/enums.ts"],"sourcesContent":["import { enumType } from 'nexus';\nimport { set } from 'lodash';\nimport { strings } from '@strapi/utils';\n\ninterface Definition {\n enum: string[];\n}\n\n/**\n * Build a Nexus enum type from a Strapi enum attribute\n * @param {object} definition - The definition of the enum\n * @param {string[]} definition.enum - The params of the enum\n * @param {string} name - The name of the enum\n * @return {NexusEnumTypeDef}\n */\nconst buildEnumTypeDefinition = (definition: Definition, name: string) => {\n return enumType({\n name,\n members: definition.enum.reduce(\n (acc, value) => set(acc, strings.toRegressedEnumValue(value), value),\n {}\n ),\n });\n};\n\nexport default () => ({\n buildEnumTypeDefinition,\n});\n"],"names":["buildEnumTypeDefinition","definition","name","enumType","members","enum","reduce","acc","value","set","strings","toRegressedEnumValue"],"mappings":";;;;;;AAQA;;;;;;IAOA,MAAMA,uBAAAA,GAA0B,CAACC,UAAAA,EAAwBC,IAAAA,GAAAA;AACvD,IAAA,OAAOC,cAAAA,CAAS;AACdD,QAAAA,IAAAA;AACAE,QAAAA,OAAAA,EAASH,UAAAA,CAAWI,IAAI,CAACC,MAAM,CAC7B,CAACC,GAAAA,EAAKC,KAAAA,GAAUC,UAAAA,CAAIF,KAAKG,aAAAA,CAAQC,oBAAoB,CAACH,KAAAA,CAAAA,EAAQA,QAC9D,EAAC;AAEL,KAAA,CAAA;AACF,CAAA;AAEA,YAAe,CAAA,KAAO;AACpBR,QAAAA;AACF,KAAA,CAAC;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { enumType } from 'nexus';
|
|
2
|
-
import { set } from 'lodash
|
|
2
|
+
import { set } from 'lodash';
|
|
3
3
|
import { strings } from '@strapi/utils';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -11,7 +11,7 @@ import { strings } from '@strapi/utils';
|
|
|
11
11
|
*/ const buildEnumTypeDefinition = (definition, name)=>{
|
|
12
12
|
return enumType({
|
|
13
13
|
name,
|
|
14
|
-
members: definition.enum.reduce((acc, value)=>set(strings.toRegressedEnumValue(value), value
|
|
14
|
+
members: definition.enum.reduce((acc, value)=>set(acc, strings.toRegressedEnumValue(value), value), {})
|
|
15
15
|
});
|
|
16
16
|
};
|
|
17
17
|
var enums = (()=>({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.mjs","sources":["../../../../server/src/services/builders/enums.ts"],"sourcesContent":["import { enumType } from 'nexus';\nimport { set } from 'lodash
|
|
1
|
+
{"version":3,"file":"enums.mjs","sources":["../../../../server/src/services/builders/enums.ts"],"sourcesContent":["import { enumType } from 'nexus';\nimport { set } from 'lodash';\nimport { strings } from '@strapi/utils';\n\ninterface Definition {\n enum: string[];\n}\n\n/**\n * Build a Nexus enum type from a Strapi enum attribute\n * @param {object} definition - The definition of the enum\n * @param {string[]} definition.enum - The params of the enum\n * @param {string} name - The name of the enum\n * @return {NexusEnumTypeDef}\n */\nconst buildEnumTypeDefinition = (definition: Definition, name: string) => {\n return enumType({\n name,\n members: definition.enum.reduce(\n (acc, value) => set(acc, strings.toRegressedEnumValue(value), value),\n {}\n ),\n });\n};\n\nexport default () => ({\n buildEnumTypeDefinition,\n});\n"],"names":["buildEnumTypeDefinition","definition","name","enumType","members","enum","reduce","acc","value","set","strings","toRegressedEnumValue"],"mappings":";;;;AAQA;;;;;;IAOA,MAAMA,uBAAAA,GAA0B,CAACC,UAAAA,EAAwBC,IAAAA,GAAAA;AACvD,IAAA,OAAOC,QAAAA,CAAS;AACdD,QAAAA,IAAAA;AACAE,QAAAA,OAAAA,EAASH,UAAAA,CAAWI,IAAI,CAACC,MAAM,CAC7B,CAACC,GAAAA,EAAKC,KAAAA,GAAUC,GAAAA,CAAIF,KAAKG,OAAAA,CAAQC,oBAAoB,CAACH,KAAAA,CAAAA,EAAQA,QAC9D,EAAC;AAEL,KAAA,CAAA;AACF,CAAA;AAEA,YAAe,CAAA,KAAO;AACpBR,QAAAA;AACF,KAAA,CAAC;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var lodash = require('lodash');
|
|
4
4
|
var and = require('./and.js');
|
|
5
5
|
var or = require('./or.js');
|
|
6
6
|
var not = require('./not.js');
|
|
@@ -49,9 +49,9 @@ const operators = {
|
|
|
49
49
|
between: between
|
|
50
50
|
};
|
|
51
51
|
// Instantiate every operator with the Strapi instance
|
|
52
|
-
var operators$1 = (({ strapi })=>
|
|
52
|
+
var operators$1 = (({ strapi })=>lodash.mapValues(operators, (opCtor)=>opCtor({
|
|
53
53
|
strapi
|
|
54
|
-
})
|
|
54
|
+
})));
|
|
55
55
|
|
|
56
56
|
module.exports = operators$1;
|
|
57
57
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../server/src/services/builders/filters/operators/index.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { mapValues } from 'lodash
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../server/src/services/builders/filters/operators/index.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { mapValues } from 'lodash';\nimport andOperator from './and';\nimport orOperator from './or';\nimport notOperator from './not';\nimport eqOperator from './eq';\nimport eqiOperator from './eqi';\nimport neOperator from './ne';\nimport neiOperator from './nei';\nimport startsWithOperator from './starts-with';\nimport endsWithOperator from './ends-with';\nimport containsOperator from './contains';\nimport notContainsOperator from './not-contains';\nimport containsiOperator from './containsi';\nimport notContainsiOperator from './not-containsi';\nimport gtOperator from './gt';\nimport gteOperator from './gte';\nimport ltOperator from './lt';\nimport lteOperator from './lte';\nimport nullOperator from './null';\nimport notNullOperator from './not-null';\nimport inOperator from './in';\nimport notInOperator from './not-in';\nimport betweenOperator from './between';\n\nconst operators = {\n and: andOperator,\n or: orOperator,\n not: notOperator,\n eq: eqOperator,\n eqi: eqiOperator,\n ne: neOperator,\n nei: neiOperator,\n startsWith: startsWithOperator,\n endsWith: endsWithOperator,\n contains: containsOperator,\n notContains: notContainsOperator,\n containsi: containsiOperator,\n notContainsi: notContainsiOperator,\n gt: gtOperator,\n gte: gteOperator,\n lt: ltOperator,\n lte: lteOperator,\n null: nullOperator,\n notNull: notNullOperator,\n in: inOperator,\n notIn: notInOperator,\n between: betweenOperator,\n};\n\n// Instantiate every operator with the Strapi instance\nexport default ({ strapi }: { strapi: Core.Strapi }) =>\n mapValues(operators, (opCtor) => opCtor({ strapi }));\n"],"names":["operators","and","andOperator","or","orOperator","not","notOperator","eq","eqOperator","eqi","eqiOperator","ne","neOperator","nei","neiOperator","startsWith","startsWithOperator","endsWith","endsWithOperator","contains","containsOperator","notContains","notContainsOperator","containsi","containsiOperator","notContainsi","notContainsiOperator","gt","gtOperator","gte","gteOperator","lt","ltOperator","lte","lteOperator","null","nullOperator","notNull","notNullOperator","in","inOperator","notIn","notInOperator","between","betweenOperator","strapi","mapValues","opCtor"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAMA,SAAAA,GAAY;IAChBC,GAAAA,EAAKC,GAAAA;IACLC,EAAAA,EAAIC,EAAAA;IACJC,GAAAA,EAAKC,GAAAA;IACLC,EAAAA,EAAIC,EAAAA;IACJC,GAAAA,EAAKC,GAAAA;IACLC,EAAAA,EAAIC,EAAAA;IACJC,GAAAA,EAAKC,GAAAA;IACLC,UAAAA,EAAYC,UAAAA;IACZC,QAAAA,EAAUC,QAAAA;IACVC,QAAAA,EAAUC,QAAAA;IACVC,WAAAA,EAAaC,WAAAA;IACbC,SAAAA,EAAWC,SAAAA;IACXC,YAAAA,EAAcC,YAAAA;IACdC,EAAAA,EAAIC,EAAAA;IACJC,GAAAA,EAAKC,GAAAA;IACLC,EAAAA,EAAIC,EAAAA;IACJC,GAAAA,EAAKC,GAAAA;IACLC,IAAAA,EAAMC,KAAAA;IACNC,OAAAA,EAASC,OAAAA;IACTC,EAAAA,EAAIC,GAAAA;IACJC,KAAAA,EAAOC,KAAAA;IACPC,OAAAA,EAASC;AACX,CAAA;AAEA;AACA,kBAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GACjDC,gBAAAA,CAAU9C,SAAAA,EAAW,CAAC+C,MAAAA,GAAWA,MAAAA,CAAO;AAAEF,YAAAA;AAAO,SAAA,CAAA,CAAE;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mapValues } from 'lodash
|
|
1
|
+
import { mapValues } from 'lodash';
|
|
2
2
|
import andOperator from './and.mjs';
|
|
3
3
|
import orOperator from './or.mjs';
|
|
4
4
|
import notOperator from './not.mjs';
|
|
@@ -47,9 +47,9 @@ const operators$1 = {
|
|
|
47
47
|
between: betweenOperator
|
|
48
48
|
};
|
|
49
49
|
// Instantiate every operator with the Strapi instance
|
|
50
|
-
var operators = (({ strapi })=>mapValues((opCtor)=>opCtor({
|
|
50
|
+
var operators = (({ strapi })=>mapValues(operators$1, (opCtor)=>opCtor({
|
|
51
51
|
strapi
|
|
52
|
-
})
|
|
52
|
+
})));
|
|
53
53
|
|
|
54
54
|
export { operators as default };
|
|
55
55
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../server/src/services/builders/filters/operators/index.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { mapValues } from 'lodash
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../server/src/services/builders/filters/operators/index.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { mapValues } from 'lodash';\nimport andOperator from './and';\nimport orOperator from './or';\nimport notOperator from './not';\nimport eqOperator from './eq';\nimport eqiOperator from './eqi';\nimport neOperator from './ne';\nimport neiOperator from './nei';\nimport startsWithOperator from './starts-with';\nimport endsWithOperator from './ends-with';\nimport containsOperator from './contains';\nimport notContainsOperator from './not-contains';\nimport containsiOperator from './containsi';\nimport notContainsiOperator from './not-containsi';\nimport gtOperator from './gt';\nimport gteOperator from './gte';\nimport ltOperator from './lt';\nimport lteOperator from './lte';\nimport nullOperator from './null';\nimport notNullOperator from './not-null';\nimport inOperator from './in';\nimport notInOperator from './not-in';\nimport betweenOperator from './between';\n\nconst operators = {\n and: andOperator,\n or: orOperator,\n not: notOperator,\n eq: eqOperator,\n eqi: eqiOperator,\n ne: neOperator,\n nei: neiOperator,\n startsWith: startsWithOperator,\n endsWith: endsWithOperator,\n contains: containsOperator,\n notContains: notContainsOperator,\n containsi: containsiOperator,\n notContainsi: notContainsiOperator,\n gt: gtOperator,\n gte: gteOperator,\n lt: ltOperator,\n lte: lteOperator,\n null: nullOperator,\n notNull: notNullOperator,\n in: inOperator,\n notIn: notInOperator,\n between: betweenOperator,\n};\n\n// Instantiate every operator with the Strapi instance\nexport default ({ strapi }: { strapi: Core.Strapi }) =>\n mapValues(operators, (opCtor) => opCtor({ strapi }));\n"],"names":["operators","and","andOperator","or","orOperator","not","notOperator","eq","eqOperator","eqi","eqiOperator","ne","neOperator","nei","neiOperator","startsWith","startsWithOperator","endsWith","endsWithOperator","contains","containsOperator","notContains","notContainsOperator","containsi","containsiOperator","notContainsi","notContainsiOperator","gt","gtOperator","gte","gteOperator","lt","ltOperator","lte","lteOperator","null","nullOperator","notNull","notNullOperator","in","inOperator","notIn","notInOperator","between","betweenOperator","strapi","mapValues","opCtor"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAMA,WAAAA,GAAY;IAChBC,GAAAA,EAAKC,WAAAA;IACLC,EAAAA,EAAIC,UAAAA;IACJC,GAAAA,EAAKC,WAAAA;IACLC,EAAAA,EAAIC,UAAAA;IACJC,GAAAA,EAAKC,WAAAA;IACLC,EAAAA,EAAIC,UAAAA;IACJC,GAAAA,EAAKC,WAAAA;IACLC,UAAAA,EAAYC,kBAAAA;IACZC,QAAAA,EAAUC,gBAAAA;IACVC,QAAAA,EAAUC,gBAAAA;IACVC,WAAAA,EAAaC,mBAAAA;IACbC,SAAAA,EAAWC,iBAAAA;IACXC,YAAAA,EAAcC,oBAAAA;IACdC,EAAAA,EAAIC,UAAAA;IACJC,GAAAA,EAAKC,WAAAA;IACLC,EAAAA,EAAIC,UAAAA;IACJC,GAAAA,EAAKC,WAAAA;IACLC,IAAAA,EAAMC,YAAAA;IACNC,OAAAA,EAASC,eAAAA;IACTC,EAAAA,EAAIC,UAAAA;IACJC,KAAAA,EAAOC,aAAAA;IACPC,OAAAA,EAASC;AACX,CAAA;AAEA;AACA,gBAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GACjDC,SAAAA,CAAU9C,WAAAA,EAAW,CAAC+C,MAAAA,GAAWA,MAAAA,CAAO;AAAEF,YAAAA;AAAO,SAAA,CAAA,CAAE;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var nexus = require('nexus');
|
|
4
|
-
var fp = require('lodash/fp');
|
|
5
4
|
|
|
6
5
|
var genericMorph = (({ strapi, registry })=>{
|
|
7
6
|
const { naming } = strapi.plugin('graphql').service('utils');
|
|
@@ -26,7 +25,7 @@ var genericMorph = (({ strapi, registry })=>{
|
|
|
26
25
|
KINDS.type,
|
|
27
26
|
KINDS.component
|
|
28
27
|
].includes(config.kind))// Only keep their name (the type's id)
|
|
29
|
-
.map(
|
|
28
|
+
.map((entry)=>entry?.name);
|
|
30
29
|
t.members(...members);
|
|
31
30
|
}
|
|
32
31
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-morph.js","sources":["../../../../server/src/services/builders/generic-morph.ts"],"sourcesContent":["import { unionType } from 'nexus';\
|
|
1
|
+
{"version":3,"file":"generic-morph.js","sources":["../../../../server/src/services/builders/generic-morph.ts"],"sourcesContent":["import { unionType } from 'nexus';\n\nimport type { Context } from '../types';\n\nexport default ({ strapi, registry }: Context) => {\n const { naming } = strapi.plugin('graphql').service('utils');\n const { KINDS, GENERIC_MORPH_TYPENAME } = strapi.plugin('graphql').service('constants');\n\n return {\n buildGenericMorphDefinition() {\n return unionType({\n name: GENERIC_MORPH_TYPENAME,\n\n resolveType(obj: any) {\n const contentType = strapi.getModel(obj.__type);\n\n if (!contentType) {\n return null;\n }\n\n if (contentType.modelType === 'component') {\n return naming.getComponentName(contentType);\n }\n\n return naming.getTypeName(contentType);\n },\n\n definition(t: any) {\n const members = registry\n // Resolve every content-type or component\n .where(({ config }) => [KINDS.type, KINDS.component].includes(config.kind))\n // Only keep their name (the type's id)\n .map((entry) => entry?.name);\n\n t.members(...members);\n },\n });\n },\n };\n};\n"],"names":["strapi","registry","naming","plugin","service","KINDS","GENERIC_MORPH_TYPENAME","buildGenericMorphDefinition","unionType","name","resolveType","obj","contentType","getModel","__type","modelType","getComponentName","getTypeName","definition","t","members","where","config","type","component","includes","kind","map","entry"],"mappings":";;;;AAIA,mBAAe,CAAA,CAAC,EAAEA,MAAM,EAAEC,QAAQ,EAAW,GAAA;IAC3C,MAAM,EAAEC,MAAM,EAAE,GAAGF,OAAOG,MAAM,CAAC,SAAA,CAAA,CAAWC,OAAO,CAAC,OAAA,CAAA;IACpD,MAAM,EAAEC,KAAK,EAAEC,sBAAsB,EAAE,GAAGN,MAAAA,CAAOG,MAAM,CAAC,SAAA,CAAA,CAAWC,OAAO,CAAC,WAAA,CAAA;IAE3E,OAAO;AACLG,QAAAA,2BAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOC,eAAAA,CAAU;gBACfC,IAAAA,EAAMH,sBAAAA;AAENI,gBAAAA,WAAAA,CAAAA,CAAYC,GAAQ,EAAA;AAClB,oBAAA,MAAMC,WAAAA,GAAcZ,MAAAA,CAAOa,QAAQ,CAACF,IAAIG,MAAM,CAAA;AAE9C,oBAAA,IAAI,CAACF,WAAAA,EAAa;wBAChB,OAAO,IAAA;AACT,oBAAA;oBAEA,IAAIA,WAAAA,CAAYG,SAAS,KAAK,WAAA,EAAa;wBACzC,OAAOb,MAAAA,CAAOc,gBAAgB,CAACJ,WAAAA,CAAAA;AACjC,oBAAA;oBAEA,OAAOV,MAAAA,CAAOe,WAAW,CAACL,WAAAA,CAAAA;AAC5B,gBAAA,CAAA;AAEAM,gBAAAA,UAAAA,CAAAA,CAAWC,CAAM,EAAA;oBACf,MAAMC,OAAAA,GAAUnB,QACd;AACCoB,qBAAAA,KAAK,CAAC,CAAC,EAAEC,MAAM,EAAE,GAAK;AAACjB,4BAAAA,KAAAA,CAAMkB,IAAI;AAAElB,4BAAAA,KAAAA,CAAMmB;AAAU,yBAAA,CAACC,QAAQ,CAACH,MAAAA,CAAOI,IAAI,EACzE;qBACCC,GAAG,CAAC,CAACC,KAAAA,GAAUA,KAAAA,EAAOnB,IAAAA,CAAAA;AAEzBU,oBAAAA,CAAAA,CAAEC,OAAO,CAAA,GAAIA,OAAAA,CAAAA;AACf,gBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF,CAAA;;;;"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { unionType } from 'nexus';
|
|
2
|
-
import { prop } from 'lodash/fp';
|
|
3
2
|
|
|
4
3
|
var genericMorph = (({ strapi, registry })=>{
|
|
5
4
|
const { naming } = strapi.plugin('graphql').service('utils');
|
|
@@ -24,7 +23,7 @@ var genericMorph = (({ strapi, registry })=>{
|
|
|
24
23
|
KINDS.type,
|
|
25
24
|
KINDS.component
|
|
26
25
|
].includes(config.kind))// Only keep their name (the type's id)
|
|
27
|
-
.map(
|
|
26
|
+
.map((entry)=>entry?.name);
|
|
28
27
|
t.members(...members);
|
|
29
28
|
}
|
|
30
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-morph.mjs","sources":["../../../../server/src/services/builders/generic-morph.ts"],"sourcesContent":["import { unionType } from 'nexus';\
|
|
1
|
+
{"version":3,"file":"generic-morph.mjs","sources":["../../../../server/src/services/builders/generic-morph.ts"],"sourcesContent":["import { unionType } from 'nexus';\n\nimport type { Context } from '../types';\n\nexport default ({ strapi, registry }: Context) => {\n const { naming } = strapi.plugin('graphql').service('utils');\n const { KINDS, GENERIC_MORPH_TYPENAME } = strapi.plugin('graphql').service('constants');\n\n return {\n buildGenericMorphDefinition() {\n return unionType({\n name: GENERIC_MORPH_TYPENAME,\n\n resolveType(obj: any) {\n const contentType = strapi.getModel(obj.__type);\n\n if (!contentType) {\n return null;\n }\n\n if (contentType.modelType === 'component') {\n return naming.getComponentName(contentType);\n }\n\n return naming.getTypeName(contentType);\n },\n\n definition(t: any) {\n const members = registry\n // Resolve every content-type or component\n .where(({ config }) => [KINDS.type, KINDS.component].includes(config.kind))\n // Only keep their name (the type's id)\n .map((entry) => entry?.name);\n\n t.members(...members);\n },\n });\n },\n };\n};\n"],"names":["strapi","registry","naming","plugin","service","KINDS","GENERIC_MORPH_TYPENAME","buildGenericMorphDefinition","unionType","name","resolveType","obj","contentType","getModel","__type","modelType","getComponentName","getTypeName","definition","t","members","where","config","type","component","includes","kind","map","entry"],"mappings":";;AAIA,mBAAe,CAAA,CAAC,EAAEA,MAAM,EAAEC,QAAQ,EAAW,GAAA;IAC3C,MAAM,EAAEC,MAAM,EAAE,GAAGF,OAAOG,MAAM,CAAC,SAAA,CAAA,CAAWC,OAAO,CAAC,OAAA,CAAA;IACpD,MAAM,EAAEC,KAAK,EAAEC,sBAAsB,EAAE,GAAGN,MAAAA,CAAOG,MAAM,CAAC,SAAA,CAAA,CAAWC,OAAO,CAAC,WAAA,CAAA;IAE3E,OAAO;AACLG,QAAAA,2BAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOC,SAAAA,CAAU;gBACfC,IAAAA,EAAMH,sBAAAA;AAENI,gBAAAA,WAAAA,CAAAA,CAAYC,GAAQ,EAAA;AAClB,oBAAA,MAAMC,WAAAA,GAAcZ,MAAAA,CAAOa,QAAQ,CAACF,IAAIG,MAAM,CAAA;AAE9C,oBAAA,IAAI,CAACF,WAAAA,EAAa;wBAChB,OAAO,IAAA;AACT,oBAAA;oBAEA,IAAIA,WAAAA,CAAYG,SAAS,KAAK,WAAA,EAAa;wBACzC,OAAOb,MAAAA,CAAOc,gBAAgB,CAACJ,WAAAA,CAAAA;AACjC,oBAAA;oBAEA,OAAOV,MAAAA,CAAOe,WAAW,CAACL,WAAAA,CAAAA;AAC5B,gBAAA,CAAA;AAEAM,gBAAAA,UAAAA,CAAAA,CAAWC,CAAM,EAAA;oBACf,MAAMC,OAAAA,GAAUnB,QACd;AACCoB,qBAAAA,KAAK,CAAC,CAAC,EAAEC,MAAM,EAAE,GAAK;AAACjB,4BAAAA,KAAAA,CAAMkB,IAAI;AAAElB,4BAAAA,KAAAA,CAAMmB;AAAU,yBAAA,CAACC,QAAQ,CAACH,MAAAA,CAAOI,IAAI,EACzE;qBACCC,GAAG,CAAC,CAACC,KAAAA,GAAUA,KAAAA,EAAOnB,IAAAA,CAAAA;AAEzBU,oBAAAA,CAAAA,CAAEC,OAAO,CAAA,GAAIA,OAAAA,CAAAA;AACf,gBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF,CAAA;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var lodash = require('lodash');
|
|
4
4
|
var enums = require('./enums.js');
|
|
5
5
|
var dynamicZones = require('./dynamic-zones.js');
|
|
6
6
|
var entity = require('./entity.js');
|
|
@@ -42,9 +42,7 @@ var builders = (({ strapi })=>{
|
|
|
42
42
|
strapi,
|
|
43
43
|
registry
|
|
44
44
|
};
|
|
45
|
-
const builders =
|
|
46
|
-
fp.map((factory)=>factory(context)), // Merge every builder into the same object
|
|
47
|
-
fp.reduce(fp.merge, {})).call(null, buildersFactories);
|
|
45
|
+
const builders = buildersFactories.reduce((acc, factory)=>lodash.merge(acc, factory(context)), {});
|
|
48
46
|
buildersMap.set(name, builders);
|
|
49
47
|
return builders;
|
|
50
48
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../server/src/services/builders/index.ts"],"sourcesContent":["import { merge
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../server/src/services/builders/index.ts"],"sourcesContent":["import { merge } from 'lodash';\nimport type { Core } from '@strapi/types';\n\n// Builders Factories\n\nimport enums from './enums';\nimport dynamicZone from './dynamic-zones';\nimport entity from './entity';\nimport typeBuilder from './type';\nimport response from './response';\nimport responseCollection from './response-collection';\nimport relationResponseCollection from './relation-response-collection';\nimport queries from './queries';\nimport mutations from './mutations';\nimport filters from './filters';\nimport inputs from './input';\nimport genericMorph from './generic-morph';\nimport resolvers from './resolvers';\n\n// Misc\n\nimport operators from './filters/operators';\nimport utils from './utils';\nimport type { TypeRegistry } from '../type-registry';\n\nconst buildersFactories = [\n enums,\n dynamicZone,\n entity,\n typeBuilder,\n response,\n responseCollection,\n relationResponseCollection,\n queries,\n mutations,\n filters,\n inputs,\n genericMorph,\n resolvers,\n];\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const buildersMap = new Map();\n\n return {\n /**\n * Instantiate every builder with a strapi instance & a type registry\n */\n new(name: string, registry: TypeRegistry) {\n const context = { strapi, registry };\n\n const builders = buildersFactories.reduce((acc, factory) => merge(acc, factory(context)), {});\n\n buildersMap.set(name, builders);\n\n return builders;\n },\n\n /**\n * Delete a set of builders instances from\n * the builders map for a given name\n */\n delete(name: string) {\n buildersMap.delete(name);\n },\n\n /**\n * Retrieve a set of builders instances from\n * the builders map for a given name\n */\n get(name: string) {\n return buildersMap.get(name);\n },\n\n filters: {\n operators: operators({ strapi }),\n },\n\n utils: utils({ strapi }),\n };\n};\n"],"names":["buildersFactories","enums","dynamicZone","entity","typeBuilder","response","responseCollection","relationResponseCollection","queries","mutations","filters","inputs","genericMorph","resolvers","strapi","buildersMap","Map","new","name","registry","context","builders","reduce","acc","factory","merge","set","delete","get","operators","utils"],"mappings":";;;;;;;;;;;;;;;;;;;AAyBA,MAAMA,iBAAAA,GAAoB;AACxBC,IAAAA,KAAAA;AACAC,IAAAA,YAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,kBAAAA;AACAC,IAAAA,0BAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,KAAAA;AACAC,IAAAA,YAAAA;AACAC,IAAAA;AACD,CAAA;AAED,eAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACjD,IAAA,MAAMC,cAAc,IAAIC,GAAAA,EAAAA;IAExB,OAAO;AACL;;QAGAC,GAAAA,CAAAA,CAAIC,IAAY,EAAEC,QAAsB,EAAA;AACtC,YAAA,MAAMC,OAAAA,GAAU;AAAEN,gBAAAA,MAAAA;AAAQK,gBAAAA;AAAS,aAAA;YAEnC,MAAME,QAAAA,GAAWrB,iBAAAA,CAAkBsB,MAAM,CAAC,CAACC,GAAAA,EAAKC,OAAAA,GAAYC,YAAAA,CAAMF,GAAAA,EAAKC,OAAAA,CAAQJ,OAAAA,CAAAA,CAAAA,EAAW,EAAC,CAAA;YAE3FL,WAAAA,CAAYW,GAAG,CAACR,IAAAA,EAAMG,QAAAA,CAAAA;YAEtB,OAAOA,QAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACDM,QAAOT,IAAY,EAAA;AACjBH,YAAAA,WAAAA,CAAYY,MAAM,CAACT,IAAAA,CAAAA;AACrB,QAAA,CAAA;AAEA;;;AAGC,QACDU,KAAIV,IAAY,EAAA;YACd,OAAOH,WAAAA,CAAYa,GAAG,CAACV,IAAAA,CAAAA;AACzB,QAAA,CAAA;QAEAR,OAAAA,EAAS;AACPmB,YAAAA,SAAAA,EAAWA,KAAAA,CAAU;AAAEf,gBAAAA;AAAO,aAAA;AAChC,SAAA;AAEAgB,QAAAA,KAAAA,EAAOA,KAAAA,CAAM;AAAEhB,YAAAA;AAAO,SAAA;AACxB,KAAA;AACF,CAAA;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { merge } from 'lodash';
|
|
2
2
|
import enums from './enums.mjs';
|
|
3
3
|
import dynamicZone from './dynamic-zones.mjs';
|
|
4
4
|
import entity from './entity.mjs';
|
|
@@ -40,9 +40,7 @@ var builders = (({ strapi })=>{
|
|
|
40
40
|
strapi,
|
|
41
41
|
registry
|
|
42
42
|
};
|
|
43
|
-
const builders =
|
|
44
|
-
map((factory)=>factory(context)), // Merge every builder into the same object
|
|
45
|
-
reduce(merge, {})).call(null, buildersFactories);
|
|
43
|
+
const builders = buildersFactories.reduce((acc, factory)=>merge(acc, factory(context)), {});
|
|
46
44
|
buildersMap.set(name, builders);
|
|
47
45
|
return builders;
|
|
48
46
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../server/src/services/builders/index.ts"],"sourcesContent":["import { merge
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../server/src/services/builders/index.ts"],"sourcesContent":["import { merge } from 'lodash';\nimport type { Core } from '@strapi/types';\n\n// Builders Factories\n\nimport enums from './enums';\nimport dynamicZone from './dynamic-zones';\nimport entity from './entity';\nimport typeBuilder from './type';\nimport response from './response';\nimport responseCollection from './response-collection';\nimport relationResponseCollection from './relation-response-collection';\nimport queries from './queries';\nimport mutations from './mutations';\nimport filters from './filters';\nimport inputs from './input';\nimport genericMorph from './generic-morph';\nimport resolvers from './resolvers';\n\n// Misc\n\nimport operators from './filters/operators';\nimport utils from './utils';\nimport type { TypeRegistry } from '../type-registry';\n\nconst buildersFactories = [\n enums,\n dynamicZone,\n entity,\n typeBuilder,\n response,\n responseCollection,\n relationResponseCollection,\n queries,\n mutations,\n filters,\n inputs,\n genericMorph,\n resolvers,\n];\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const buildersMap = new Map();\n\n return {\n /**\n * Instantiate every builder with a strapi instance & a type registry\n */\n new(name: string, registry: TypeRegistry) {\n const context = { strapi, registry };\n\n const builders = buildersFactories.reduce((acc, factory) => merge(acc, factory(context)), {});\n\n buildersMap.set(name, builders);\n\n return builders;\n },\n\n /**\n * Delete a set of builders instances from\n * the builders map for a given name\n */\n delete(name: string) {\n buildersMap.delete(name);\n },\n\n /**\n * Retrieve a set of builders instances from\n * the builders map for a given name\n */\n get(name: string) {\n return buildersMap.get(name);\n },\n\n filters: {\n operators: operators({ strapi }),\n },\n\n utils: utils({ strapi }),\n };\n};\n"],"names":["buildersFactories","enums","dynamicZone","entity","typeBuilder","response","responseCollection","relationResponseCollection","queries","mutations","filters","inputs","genericMorph","resolvers","strapi","buildersMap","Map","new","name","registry","context","builders","reduce","acc","factory","merge","set","delete","get","operators","utils"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,MAAMA,iBAAAA,GAAoB;AACxBC,IAAAA,KAAAA;AACAC,IAAAA,WAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA,WAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,kBAAAA;AACAC,IAAAA,0BAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA,YAAAA;AACAC,IAAAA;AACD,CAAA;AAED,eAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACjD,IAAA,MAAMC,cAAc,IAAIC,GAAAA,EAAAA;IAExB,OAAO;AACL;;QAGAC,GAAAA,CAAAA,CAAIC,IAAY,EAAEC,QAAsB,EAAA;AACtC,YAAA,MAAMC,OAAAA,GAAU;AAAEN,gBAAAA,MAAAA;AAAQK,gBAAAA;AAAS,aAAA;YAEnC,MAAME,QAAAA,GAAWrB,iBAAAA,CAAkBsB,MAAM,CAAC,CAACC,GAAAA,EAAKC,OAAAA,GAAYC,KAAAA,CAAMF,GAAAA,EAAKC,OAAAA,CAAQJ,OAAAA,CAAAA,CAAAA,EAAW,EAAC,CAAA;YAE3FL,WAAAA,CAAYW,GAAG,CAACR,IAAAA,EAAMG,QAAAA,CAAAA;YAEtB,OAAOA,QAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACDM,QAAOT,IAAY,EAAA;AACjBH,YAAAA,WAAAA,CAAYY,MAAM,CAACT,IAAAA,CAAAA;AACrB,QAAA,CAAA;AAEA;;;AAGC,QACDU,KAAIV,IAAY,EAAA;YACd,OAAOH,WAAAA,CAAYa,GAAG,CAACV,IAAAA,CAAAA;AACzB,QAAA,CAAA;QAEAR,OAAAA,EAAS;AACPmB,YAAAA,SAAAA,EAAWA,SAAAA,CAAU;AAAEf,gBAAAA;AAAO,aAAA;AAChC,SAAA;AAEAgB,QAAAA,KAAAA,EAAOA,KAAAA,CAAM;AAAEhB,YAAAA;AAAO,SAAA;AACxB,KAAA;AACF,CAAA;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var nexus = require('nexus');
|
|
4
|
-
var
|
|
4
|
+
var lodash = require('lodash');
|
|
5
5
|
|
|
6
6
|
var relationResponseCollection = (({ strapi })=>{
|
|
7
7
|
const { naming } = strapi.plugin('graphql').service('utils');
|
|
@@ -16,13 +16,13 @@ var relationResponseCollection = (({ strapi })=>{
|
|
|
16
16
|
definition (t) {
|
|
17
17
|
t.nonNull.list.field('nodes', {
|
|
18
18
|
type: nexus.nonNull(typeName),
|
|
19
|
-
resolve:
|
|
19
|
+
resolve: (parent)=>lodash.defaultTo(parent?.nodes, [])
|
|
20
20
|
});
|
|
21
21
|
if (strapi.plugin('graphql').config('v4CompatibilityMode', false)) {
|
|
22
22
|
t.nonNull.list.field('data', {
|
|
23
23
|
deprecation: 'Use `nodes` field instead',
|
|
24
24
|
type: nexus.nonNull(typeName),
|
|
25
|
-
resolve:
|
|
25
|
+
resolve: (parent)=>lodash.defaultTo(parent?.nodes, [])
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-response-collection.js","sources":["../../../../server/src/services/builders/relation-response-collection.ts"],"sourcesContent":["import { objectType, nonNull } from 'nexus';\nimport { defaultTo
|
|
1
|
+
{"version":3,"file":"relation-response-collection.js","sources":["../../../../server/src/services/builders/relation-response-collection.ts"],"sourcesContent":["import { objectType, nonNull } from 'nexus';\nimport { defaultTo } from 'lodash';\nimport type { Schema } from '@strapi/types';\nimport type { Context } from '../types';\n\nexport default ({ strapi }: Context) => {\n const { naming } = strapi.plugin('graphql').service('utils');\n\n return {\n /**\n * Build a type definition for a content API relation's collection response for a given content type\n */\n buildRelationResponseCollectionDefinition(contentType: Schema.ContentType) {\n const name = naming.getRelationResponseCollectionName(contentType);\n const typeName = naming.getTypeName(contentType);\n\n return objectType({\n name,\n\n definition(t) {\n t.nonNull.list.field('nodes', {\n type: nonNull(typeName),\n\n resolve: (parent) => defaultTo(parent?.nodes, []),\n });\n\n if (strapi.plugin('graphql').config('v4CompatibilityMode', false)) {\n t.nonNull.list.field('data', {\n deprecation: 'Use `nodes` field instead',\n type: nonNull(typeName),\n resolve: (parent) => defaultTo(parent?.nodes, []),\n });\n }\n },\n });\n },\n };\n};\n"],"names":["strapi","naming","plugin","service","buildRelationResponseCollectionDefinition","contentType","name","getRelationResponseCollectionName","typeName","getTypeName","objectType","definition","t","nonNull","list","field","type","resolve","parent","defaultTo","nodes","config","deprecation"],"mappings":";;;;;AAKA,iCAAe,CAAA,CAAC,EAAEA,MAAM,EAAW,GAAA;IACjC,MAAM,EAAEC,MAAM,EAAE,GAAGD,OAAOE,MAAM,CAAC,SAAA,CAAA,CAAWC,OAAO,CAAC,OAAA,CAAA;IAEpD,OAAO;AACL;;AAEC,QACDC,2CAA0CC,WAA+B,EAAA;YACvE,MAAMC,IAAAA,GAAOL,MAAAA,CAAOM,iCAAiC,CAACF,WAAAA,CAAAA;YACtD,MAAMG,QAAAA,GAAWP,MAAAA,CAAOQ,WAAW,CAACJ,WAAAA,CAAAA;AAEpC,YAAA,OAAOK,gBAAAA,CAAW;AAChBJ,gBAAAA,IAAAA;AAEAK,gBAAAA,UAAAA,CAAAA,CAAWC,CAAC,EAAA;AACVA,oBAAAA,CAAAA,CAAEC,OAAO,CAACC,IAAI,CAACC,KAAK,CAAC,OAAA,EAAS;AAC5BC,wBAAAA,IAAAA,EAAMH,aAAAA,CAAQL,QAAAA,CAAAA;AAEdS,wBAAAA,OAAAA,EAAS,CAACC,MAAAA,GAAWC,gBAAAA,CAAUD,MAAAA,EAAQE,OAAO,EAAE;AAClD,qBAAA,CAAA;AAEA,oBAAA,IAAIpB,OAAOE,MAAM,CAAC,WAAWmB,MAAM,CAAC,uBAAuB,KAAA,CAAA,EAAQ;AACjET,wBAAAA,CAAAA,CAAEC,OAAO,CAACC,IAAI,CAACC,KAAK,CAAC,MAAA,EAAQ;4BAC3BO,WAAAA,EAAa,2BAAA;AACbN,4BAAAA,IAAAA,EAAMH,aAAAA,CAAQL,QAAAA,CAAAA;AACdS,4BAAAA,OAAAA,EAAS,CAACC,MAAAA,GAAWC,gBAAAA,CAAUD,MAAAA,EAAQE,OAAO,EAAE;AAClD,yBAAA,CAAA;AACF,oBAAA;AACF,gBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF,CAAA;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { objectType, nonNull } from 'nexus';
|
|
2
|
-
import {
|
|
2
|
+
import { defaultTo } from 'lodash';
|
|
3
3
|
|
|
4
4
|
var relationResponseCollection = (({ strapi })=>{
|
|
5
5
|
const { naming } = strapi.plugin('graphql').service('utils');
|
|
@@ -14,13 +14,13 @@ var relationResponseCollection = (({ strapi })=>{
|
|
|
14
14
|
definition (t) {
|
|
15
15
|
t.nonNull.list.field('nodes', {
|
|
16
16
|
type: nonNull(typeName),
|
|
17
|
-
resolve:
|
|
17
|
+
resolve: (parent)=>defaultTo(parent?.nodes, [])
|
|
18
18
|
});
|
|
19
19
|
if (strapi.plugin('graphql').config('v4CompatibilityMode', false)) {
|
|
20
20
|
t.nonNull.list.field('data', {
|
|
21
21
|
deprecation: 'Use `nodes` field instead',
|
|
22
22
|
type: nonNull(typeName),
|
|
23
|
-
resolve:
|
|
23
|
+
resolve: (parent)=>defaultTo(parent?.nodes, [])
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-response-collection.mjs","sources":["../../../../server/src/services/builders/relation-response-collection.ts"],"sourcesContent":["import { objectType, nonNull } from 'nexus';\nimport { defaultTo
|
|
1
|
+
{"version":3,"file":"relation-response-collection.mjs","sources":["../../../../server/src/services/builders/relation-response-collection.ts"],"sourcesContent":["import { objectType, nonNull } from 'nexus';\nimport { defaultTo } from 'lodash';\nimport type { Schema } from '@strapi/types';\nimport type { Context } from '../types';\n\nexport default ({ strapi }: Context) => {\n const { naming } = strapi.plugin('graphql').service('utils');\n\n return {\n /**\n * Build a type definition for a content API relation's collection response for a given content type\n */\n buildRelationResponseCollectionDefinition(contentType: Schema.ContentType) {\n const name = naming.getRelationResponseCollectionName(contentType);\n const typeName = naming.getTypeName(contentType);\n\n return objectType({\n name,\n\n definition(t) {\n t.nonNull.list.field('nodes', {\n type: nonNull(typeName),\n\n resolve: (parent) => defaultTo(parent?.nodes, []),\n });\n\n if (strapi.plugin('graphql').config('v4CompatibilityMode', false)) {\n t.nonNull.list.field('data', {\n deprecation: 'Use `nodes` field instead',\n type: nonNull(typeName),\n resolve: (parent) => defaultTo(parent?.nodes, []),\n });\n }\n },\n });\n },\n };\n};\n"],"names":["strapi","naming","plugin","service","buildRelationResponseCollectionDefinition","contentType","name","getRelationResponseCollectionName","typeName","getTypeName","objectType","definition","t","nonNull","list","field","type","resolve","parent","defaultTo","nodes","config","deprecation"],"mappings":";;;AAKA,iCAAe,CAAA,CAAC,EAAEA,MAAM,EAAW,GAAA;IACjC,MAAM,EAAEC,MAAM,EAAE,GAAGD,OAAOE,MAAM,CAAC,SAAA,CAAA,CAAWC,OAAO,CAAC,OAAA,CAAA;IAEpD,OAAO;AACL;;AAEC,QACDC,2CAA0CC,WAA+B,EAAA;YACvE,MAAMC,IAAAA,GAAOL,MAAAA,CAAOM,iCAAiC,CAACF,WAAAA,CAAAA;YACtD,MAAMG,QAAAA,GAAWP,MAAAA,CAAOQ,WAAW,CAACJ,WAAAA,CAAAA;AAEpC,YAAA,OAAOK,UAAAA,CAAW;AAChBJ,gBAAAA,IAAAA;AAEAK,gBAAAA,UAAAA,CAAAA,CAAWC,CAAC,EAAA;AACVA,oBAAAA,CAAAA,CAAEC,OAAO,CAACC,IAAI,CAACC,KAAK,CAAC,OAAA,EAAS;AAC5BC,wBAAAA,IAAAA,EAAMH,OAAAA,CAAQL,QAAAA,CAAAA;AAEdS,wBAAAA,OAAAA,EAAS,CAACC,MAAAA,GAAWC,SAAAA,CAAUD,MAAAA,EAAQE,OAAO,EAAE;AAClD,qBAAA,CAAA;AAEA,oBAAA,IAAIpB,OAAOE,MAAM,CAAC,WAAWmB,MAAM,CAAC,uBAAuB,KAAA,CAAA,EAAQ;AACjET,wBAAAA,CAAAA,CAAEC,OAAO,CAACC,IAAI,CAACC,KAAK,CAAC,MAAA,EAAQ;4BAC3BO,WAAAA,EAAa,2BAAA;AACbN,4BAAAA,IAAAA,EAAMH,OAAAA,CAAQL,QAAAA,CAAAA;AACdS,4BAAAA,OAAAA,EAAS,CAACC,MAAAA,GAAWC,SAAAA,CAAUD,MAAAA,EAAQE,OAAO,EAAE;AAClD,yBAAA,CAAA;AACF,oBAAA;AACF,gBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF,CAAA;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var lodash = require('lodash');
|
|
4
4
|
var utils = require('@strapi/utils');
|
|
5
5
|
|
|
6
6
|
const { ApplicationError } = utils.errors;
|
|
@@ -87,7 +87,7 @@ var associationResolvers = (({ strapi })=>{
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
const dbQuery =
|
|
90
|
+
const dbQuery = lodash.merge({}, defaultFilters, publicationFilterWhere, transformedQuery);
|
|
91
91
|
// Sign media URLs if upload plugin is available and using private provider
|
|
92
92
|
const data = await (async ()=>{
|
|
93
93
|
const rawData = await strapi.db.query(contentTypeUID).load(parent, attributeName, dbQuery);
|
|
@@ -119,7 +119,7 @@ var associationResolvers = (({ strapi })=>{
|
|
|
119
119
|
auth
|
|
120
120
|
});
|
|
121
121
|
};
|
|
122
|
-
const unwrapData =
|
|
122
|
+
const unwrapData = lodash.property(attributeName);
|
|
123
123
|
// Sanitizer definition
|
|
124
124
|
const sanitizeMorphAttribute = utils.async.pipe(wrapData, sanitizeData, unwrapData);
|
|
125
125
|
return sanitizeMorphAttribute(data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"association.js","sources":["../../../../../server/src/services/builders/resolvers/association.ts"],"sourcesContent":["import { get, merge } from 'lodash/fp';\nimport {\n async,\n contentTypes,\n errors,\n buildPublicationFilterWhere,\n parsePublicationFilter,\n} from '@strapi/utils';\nimport type { Internal } from '@strapi/types';\n\nimport type { Context } from '../../types';\n\nconst { ApplicationError } = errors;\n\nexport default ({ strapi }: Context) => {\n const { service: getGraphQLService } = strapi.plugin('graphql');\n\n const { isMorphRelation, isMedia } = getGraphQLService('utils').attributes;\n const { transformArgs } = getGraphQLService('builders').utils;\n const { toEntityResponse, toEntityResponseCollection } = getGraphQLService('format').returnTypes;\n\n return {\n buildAssociationResolver({\n contentTypeUID,\n attributeName,\n }: {\n contentTypeUID: Internal.UID.ContentType;\n attributeName: string;\n }) {\n const contentType = strapi.getModel(contentTypeUID);\n const attribute: any = contentType.attributes[attributeName];\n\n if (!attribute) {\n throw new ApplicationError(\n `Failed to build an association resolver for ${contentTypeUID}::${attributeName}`\n );\n }\n\n const isMediaAttribute = isMedia(attribute);\n const isMorphAttribute = isMorphRelation(attribute);\n\n const targetUID = isMediaAttribute ? 'plugin::upload.file' : attribute.target;\n const isToMany = isMediaAttribute ? attribute.multiple : attribute.relation.endsWith('Many');\n\n const targetContentType = strapi.getModel(targetUID);\n\n return async (parent: any, args: any, context: any, info: any) => {\n const { auth } = context.state;\n\n const transformedArgs = transformArgs(args, {\n contentType: targetContentType,\n usePagination: true,\n });\n\n await strapi.contentAPI.validate.query(transformedArgs, targetContentType, {\n auth,\n });\n\n const sanitizedQuery = await strapi.contentAPI.sanitize.query(\n transformedArgs,\n targetContentType,\n {\n auth,\n }\n );\n const transformedQuery = strapi.get('query-params').transform(targetUID, sanitizedQuery);\n\n const isTargetDraftAndPublishContentType =\n contentTypes.hasDraftAndPublish(targetContentType);\n\n // Helper to check if a field is from built-in queries (not custom resolvers)\n // Use the precomputed lookup populated by the content-api service at schema build time.\n const isBuiltInQueryField = (fieldName: string) => {\n const graphqlService = strapi.plugin('graphql').service('content-api');\n return graphqlService.isBuiltInQueryField(fieldName);\n };\n\n // Walk back to the root of info.path so we pick up the args of *our* query branch\n let rootPath = info?.path;\n while (rootPath?.prev) {\n rootPath = rootPath.prev;\n }\n const rootQueryArgs = rootPath ? context.rootQueryArgsByPath?.get(rootPath.key) : undefined;\n\n const shouldInheritRootQueryStatus =\n rootQueryArgs?._originField && isBuiltInQueryField(rootQueryArgs._originField);\n\n // Only inherit status from built-in queries to avoid conflicts with custom resolvers.\n // Built-in root queries default to published results; draft/preview queries pass `status`.\n // Nested relations should match that parent query.\n const inheritedStatus = shouldInheritRootQueryStatus\n ? rootQueryArgs.status || 'published'\n : null;\n\n const statusToApply = args.status || inheritedStatus;\n\n const defaultFilters =\n isTargetDraftAndPublishContentType && statusToApply\n ? {\n where: {\n publishedAt: statusToApply === 'published' ? { $notNull: true } : { $null: true },\n },\n }\n : {};\n\n const inheritedPublicationFilter =\n rootQueryArgs?.publicationFilter !== undefined &&\n rootQueryArgs?._originField &&\n isBuiltInQueryField(rootQueryArgs._originField)\n ? rootQueryArgs.publicationFilter\n : undefined;\n\n const inheritedHasPublishedVersion =\n rootQueryArgs?.hasPublishedVersion !== undefined &&\n rootQueryArgs?._originField &&\n isBuiltInQueryField(rootQueryArgs._originField)\n ? rootQueryArgs.hasPublishedVersion\n : undefined;\n\n let effectivePublicationFilter: string | undefined = inheritedPublicationFilter;\n if (\n effectivePublicationFilter === undefined &&\n inheritedHasPublishedVersion !== undefined\n ) {\n effectivePublicationFilter = inheritedHasPublishedVersion\n ? 'has-published-version-document'\n : 'never-published-document';\n }\n\n let publicationFilterWhere: Record<string, any> = {};\n if (isTargetDraftAndPublishContentType && effectivePublicationFilter !== undefined) {\n let mode;\n try {\n mode = parsePublicationFilter(effectivePublicationFilter);\n } catch {\n mode = undefined;\n }\n if (mode !== undefined) {\n const meta = strapi.db.metadata.get(targetUID);\n const st = statusToApply === 'published' ? 'published' : 'draft';\n const cond = buildPublicationFilterWhere(\n strapi.db.connection,\n meta,\n targetContentType,\n mode,\n st\n );\n if (cond && Object.keys(cond).length > 0) {\n publicationFilterWhere = { where: cond };\n }\n }\n }\n\n const dbQuery = merge(merge(defaultFilters, publicationFilterWhere), transformedQuery);\n\n // Sign media URLs if upload plugin is available and using private provider\n const data = await (async () => {\n const rawData = await strapi.db\n .query(contentTypeUID)\n .load(parent, attributeName, dbQuery);\n if (isMediaAttribute && strapi.plugin('upload')) {\n const { signFileUrls } = strapi.plugin('upload').service('file');\n\n if (Array.isArray(rawData)) {\n return async.map(rawData, (item: any) => signFileUrls(item));\n }\n\n if (rawData) {\n return signFileUrls(rawData);\n }\n }\n\n return rawData;\n })();\n\n const sanitizeInfo = {\n args: sanitizedQuery,\n resourceUID: targetUID,\n };\n\n // If this a polymorphic association, it sanitizes & returns the raw data\n // Note: The value needs to be wrapped in a fake object that represents its parent\n // so that the sanitize util can work properly.\n if (isMorphAttribute) {\n // Helpers used for the data cleanup\n const wrapData = (dataToWrap: any) => ({ [attributeName]: dataToWrap });\n const sanitizeData = (dataToSanitize: any) => {\n return strapi.contentAPI.sanitize.output(dataToSanitize, contentType, { auth });\n };\n const unwrapData = get(attributeName);\n\n // Sanitizer definition\n const sanitizeMorphAttribute = async.pipe(wrapData, sanitizeData, unwrapData);\n\n return sanitizeMorphAttribute(data);\n }\n\n // If this is a to-many relation, it returns an object that\n // matches what the entity-response-collection's resolvers expect\n if (isToMany) {\n return toEntityResponseCollection(data, sanitizeInfo);\n }\n\n // Else, it returns an object that matches\n // what the entity-response's resolvers expect\n return toEntityResponse(data, sanitizeInfo);\n };\n },\n };\n};\n"],"names":["ApplicationError","errors","strapi","service","getGraphQLService","plugin","isMorphRelation","isMedia","attributes","transformArgs","utils","toEntityResponse","toEntityResponseCollection","returnTypes","buildAssociationResolver","contentTypeUID","attributeName","contentType","getModel","attribute","isMediaAttribute","isMorphAttribute","targetUID","target","isToMany","multiple","relation","endsWith","targetContentType","parent","args","context","info","auth","state","transformedArgs","usePagination","contentAPI","validate","query","sanitizedQuery","sanitize","transformedQuery","get","transform","isTargetDraftAndPublishContentType","contentTypes","hasDraftAndPublish","isBuiltInQueryField","fieldName","graphqlService","rootPath","path","prev","rootQueryArgs","rootQueryArgsByPath","key","undefined","shouldInheritRootQueryStatus","_originField","inheritedStatus","status","statusToApply","defaultFilters","where","publishedAt","$notNull","$null","inheritedPublicationFilter","publicationFilter","inheritedHasPublishedVersion","hasPublishedVersion","effectivePublicationFilter","publicationFilterWhere","mode","parsePublicationFilter","meta","db","metadata","st","cond","buildPublicationFilterWhere","connection","Object","keys","length","dbQuery","merge","data","rawData","load","signFileUrls","Array","isArray","async","map","item","sanitizeInfo","resourceUID","wrapData","dataToWrap","sanitizeData","dataToSanitize","output","unwrapData","sanitizeMorphAttribute","pipe"],"mappings":";;;;;AAYA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,YAAAA;AAE7B,2BAAe,CAAA,CAAC,EAAEC,MAAM,EAAW,GAAA;AACjC,IAAA,MAAM,EAAEC,OAAAA,EAASC,iBAAiB,EAAE,GAAGF,MAAAA,CAAOG,MAAM,CAAC,SAAA,CAAA;IAErD,MAAM,EAAEC,eAAe,EAAEC,OAAO,EAAE,GAAGH,iBAAAA,CAAkB,SAASI,UAAU;AAC1E,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAGL,iBAAAA,CAAkB,YAAYM,KAAK;IAC7D,MAAM,EAAEC,gBAAgB,EAAEC,0BAA0B,EAAE,GAAGR,iBAAAA,CAAkB,UAAUS,WAAW;IAEhG,OAAO;AACLC,QAAAA,wBAAAA,CAAAA,CAAyB,EACvBC,cAAc,EACdC,aAAa,EAId,EAAA;YACC,MAAMC,WAAAA,GAAcf,MAAAA,CAAOgB,QAAQ,CAACH,cAAAA,CAAAA;AACpC,YAAA,MAAMI,SAAAA,GAAiBF,WAAAA,CAAYT,UAAU,CAACQ,aAAAA,CAAc;AAE5D,YAAA,IAAI,CAACG,SAAAA,EAAW;gBACd,MAAM,IAAInB,iBACR,CAAC,4CAA4C,EAAEe,cAAAA,CAAe,EAAE,EAAEC,aAAAA,CAAAA,CAAe,CAAA;AAErF,YAAA;AAEA,YAAA,MAAMI,mBAAmBb,OAAAA,CAAQY,SAAAA,CAAAA;AACjC,YAAA,MAAME,mBAAmBf,eAAAA,CAAgBa,SAAAA,CAAAA;AAEzC,YAAA,MAAMG,SAAAA,GAAYF,gBAAAA,GAAmB,qBAAA,GAAwBD,SAAAA,CAAUI,MAAM;YAC7E,MAAMC,QAAAA,GAAWJ,mBAAmBD,SAAAA,CAAUM,QAAQ,GAAGN,SAAAA,CAAUO,QAAQ,CAACC,QAAQ,CAAC,MAAA,CAAA;YAErF,MAAMC,iBAAAA,GAAoB1B,MAAAA,CAAOgB,QAAQ,CAACI,SAAAA,CAAAA;YAE1C,OAAO,OAAOO,MAAAA,EAAaC,IAAAA,EAAWC,OAAAA,EAAcC,IAAAA,GAAAA;AAClD,gBAAA,MAAM,EAAEC,IAAI,EAAE,GAAGF,QAAQG,KAAK;gBAE9B,MAAMC,eAAAA,GAAkB1B,cAAcqB,IAAAA,EAAM;oBAC1Cb,WAAAA,EAAaW,iBAAAA;oBACbQ,aAAAA,EAAe;AACjB,iBAAA,CAAA;gBAEA,MAAMlC,MAAAA,CAAOmC,UAAU,CAACC,QAAQ,CAACC,KAAK,CAACJ,iBAAiBP,iBAAAA,EAAmB;AACzEK,oBAAAA;AACF,iBAAA,CAAA;gBAEA,MAAMO,cAAAA,GAAiB,MAAMtC,MAAAA,CAAOmC,UAAU,CAACI,QAAQ,CAACF,KAAK,CAC3DJ,eAAAA,EACAP,iBAAAA,EACA;AACEK,oBAAAA;AACF,iBAAA,CAAA;AAEF,gBAAA,MAAMS,mBAAmBxC,MAAAA,CAAOyC,GAAG,CAAC,cAAA,CAAA,CAAgBC,SAAS,CAACtB,SAAAA,EAAWkB,cAAAA,CAAAA;gBAEzE,MAAMK,kCAAAA,GACJC,kBAAAA,CAAaC,kBAAkB,CAACnB,iBAAAA,CAAAA;;;AAIlC,gBAAA,MAAMoB,sBAAsB,CAACC,SAAAA,GAAAA;AAC3B,oBAAA,MAAMC,iBAAiBhD,MAAAA,CAAOG,MAAM,CAAC,SAAA,CAAA,CAAWF,OAAO,CAAC,aAAA,CAAA;oBACxD,OAAO+C,cAAAA,CAAeF,mBAAmB,CAACC,SAAAA,CAAAA;AAC5C,gBAAA,CAAA;;AAGA,gBAAA,IAAIE,WAAWnB,IAAAA,EAAMoB,IAAAA;AACrB,gBAAA,MAAOD,UAAUE,IAAAA,CAAM;AACrBF,oBAAAA,QAAAA,GAAWA,SAASE,IAAI;AAC1B,gBAAA;gBACA,MAAMC,aAAAA,GAAgBH,WAAWpB,OAAAA,CAAQwB,mBAAmB,EAAEZ,GAAAA,CAAIQ,QAAAA,CAASK,GAAG,CAAA,GAAIC,SAAAA;AAElF,gBAAA,MAAMC,4BAAAA,GACJJ,aAAAA,EAAeK,YAAAA,IAAgBX,mBAAAA,CAAoBM,cAAcK,YAAY,CAAA;;;;AAK/E,gBAAA,MAAMC,eAAAA,GAAkBF,4BAAAA,GACpBJ,aAAAA,CAAcO,MAAM,IAAI,WAAA,GACxB,IAAA;gBAEJ,MAAMC,aAAAA,GAAgBhC,IAAAA,CAAK+B,MAAM,IAAID,eAAAA;gBAErC,MAAMG,cAAAA,GACJlB,sCAAsCiB,aAAAA,GAClC;oBACEE,KAAAA,EAAO;AACLC,wBAAAA,WAAAA,EAAaH,kBAAkB,WAAA,GAAc;4BAAEI,QAAAA,EAAU;yBAAK,GAAI;4BAAEC,KAAAA,EAAO;AAAK;AAClF;AACF,iBAAA,GACA,EAAC;AAEP,gBAAA,MAAMC,0BAAAA,GACJd,aAAAA,EAAee,iBAAAA,KAAsBZ,SAAAA,IACrCH,aAAAA,EAAeK,YAAAA,IACfX,mBAAAA,CAAoBM,aAAAA,CAAcK,YAAY,CAAA,GAC1CL,aAAAA,CAAce,iBAAiB,GAC/BZ,SAAAA;AAEN,gBAAA,MAAMa,4BAAAA,GACJhB,aAAAA,EAAeiB,mBAAAA,KAAwBd,SAAAA,IACvCH,aAAAA,EAAeK,YAAAA,IACfX,mBAAAA,CAAoBM,aAAAA,CAAcK,YAAY,CAAA,GAC1CL,aAAAA,CAAciB,mBAAmB,GACjCd,SAAAA;AAEN,gBAAA,IAAIe,0BAAAA,GAAiDJ,0BAAAA;gBACrD,IACEI,0BAAAA,KAA+Bf,SAAAA,IAC/Ba,4BAAAA,KAAiCb,SAAAA,EACjC;AACAe,oBAAAA,0BAAAA,GAA6BF,+BACzB,gCAAA,GACA,0BAAA;AACN,gBAAA;AAEA,gBAAA,IAAIG,yBAA8C,EAAC;gBACnD,IAAI5B,kCAAAA,IAAsC2B,+BAA+Bf,SAAAA,EAAW;oBAClF,IAAIiB,IAAAA;oBACJ,IAAI;AACFA,wBAAAA,IAAAA,GAAOC,4BAAAA,CAAuBH,0BAAAA,CAAAA;AAChC,oBAAA,CAAA,CAAE,OAAM;wBACNE,IAAAA,GAAOjB,SAAAA;AACT,oBAAA;AACA,oBAAA,IAAIiB,SAASjB,SAAAA,EAAW;AACtB,wBAAA,MAAMmB,OAAO1E,MAAAA,CAAO2E,EAAE,CAACC,QAAQ,CAACnC,GAAG,CAACrB,SAAAA,CAAAA;wBACpC,MAAMyD,EAAAA,GAAKjB,aAAAA,KAAkB,WAAA,GAAc,WAAA,GAAc,OAAA;wBACzD,MAAMkB,IAAAA,GAAOC,kCACX/E,MAAAA,CAAO2E,EAAE,CAACK,UAAU,EACpBN,IAAAA,EACAhD,iBAAAA,EACA8C,IAAAA,EACAK,EAAAA,CAAAA;AAEF,wBAAA,IAAIC,QAAQG,MAAAA,CAAOC,IAAI,CAACJ,IAAAA,CAAAA,CAAMK,MAAM,GAAG,CAAA,EAAG;4BACxCZ,sBAAAA,GAAyB;gCAAET,KAAAA,EAAOgB;AAAK,6BAAA;AACzC,wBAAA;AACF,oBAAA;AACF,gBAAA;AAEA,gBAAA,MAAMM,OAAAA,GAAUC,QAAAA,CAAMA,QAAAA,CAAMxB,cAAAA,EAAgBU,sBAAAA,CAAAA,EAAyB/B,gBAAAA,CAAAA;;gBAGrE,MAAM8C,IAAAA,GAAO,MAAO,CAAA,UAAA;oBAClB,MAAMC,OAAAA,GAAU,MAAMvF,MAAAA,CAAO2E,EAAE,CAC5BtC,KAAK,CAACxB,cAAAA,CAAAA,CACN2E,IAAI,CAAC7D,MAAAA,EAAQb,aAAAA,EAAesE,OAAAA,CAAAA;AAC/B,oBAAA,IAAIlE,gBAAAA,IAAoBlB,MAAAA,CAAOG,MAAM,CAAC,QAAA,CAAA,EAAW;wBAC/C,MAAM,EAAEsF,YAAY,EAAE,GAAGzF,OAAOG,MAAM,CAAC,QAAA,CAAA,CAAUF,OAAO,CAAC,MAAA,CAAA;wBAEzD,IAAIyF,KAAAA,CAAMC,OAAO,CAACJ,OAAAA,CAAAA,EAAU;AAC1B,4BAAA,OAAOK,YAAMC,GAAG,CAACN,OAAAA,EAAS,CAACO,OAAcL,YAAAA,CAAaK,IAAAA,CAAAA,CAAAA;AACxD,wBAAA;AAEA,wBAAA,IAAIP,OAAAA,EAAS;AACX,4BAAA,OAAOE,YAAAA,CAAaF,OAAAA,CAAAA;AACtB,wBAAA;AACF,oBAAA;oBAEA,OAAOA,OAAAA;gBACT,CAAA,GAAA;AAEA,gBAAA,MAAMQ,YAAAA,GAAe;oBACnBnE,IAAAA,EAAMU,cAAAA;oBACN0D,WAAAA,EAAa5E;AACf,iBAAA;;;;AAKA,gBAAA,IAAID,gBAAAA,EAAkB;;oBAEpB,MAAM8E,QAAAA,GAAW,CAACC,UAAAA,IAAqB;AAAE,4BAAA,CAACpF,gBAAgBoF;yBAAW,CAAA;AACrE,oBAAA,MAAMC,eAAe,CAACC,cAAAA,GAAAA;wBACpB,OAAOpG,MAAAA,CAAOmC,UAAU,CAACI,QAAQ,CAAC8D,MAAM,CAACD,gBAAgBrF,WAAAA,EAAa;AAAEgB,4BAAAA;AAAK,yBAAA,CAAA;AAC/E,oBAAA,CAAA;AACA,oBAAA,MAAMuE,aAAa7D,MAAAA,CAAI3B,aAAAA,CAAAA;;AAGvB,oBAAA,MAAMyF,sBAAAA,GAAyBX,WAAAA,CAAMY,IAAI,CAACP,UAAUE,YAAAA,EAAcG,UAAAA,CAAAA;AAElE,oBAAA,OAAOC,sBAAAA,CAAuBjB,IAAAA,CAAAA;AAChC,gBAAA;;;AAIA,gBAAA,IAAIhE,QAAAA,EAAU;AACZ,oBAAA,OAAOZ,2BAA2B4E,IAAAA,EAAMS,YAAAA,CAAAA;AAC1C,gBAAA;;;AAIA,gBAAA,OAAOtF,iBAAiB6E,IAAAA,EAAMS,YAAAA,CAAAA;AAChC,YAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"association.js","sources":["../../../../../server/src/services/builders/resolvers/association.ts"],"sourcesContent":["import { merge, property } from 'lodash';\nimport {\n async,\n contentTypes,\n errors,\n buildPublicationFilterWhere,\n parsePublicationFilter,\n} from '@strapi/utils';\nimport type { Internal } from '@strapi/types';\n\nimport type { Context } from '../../types';\n\nconst { ApplicationError } = errors;\n\nexport default ({ strapi }: Context) => {\n const { service: getGraphQLService } = strapi.plugin('graphql');\n\n const { isMorphRelation, isMedia } = getGraphQLService('utils').attributes;\n const { transformArgs } = getGraphQLService('builders').utils;\n const { toEntityResponse, toEntityResponseCollection } = getGraphQLService('format').returnTypes;\n\n return {\n buildAssociationResolver({\n contentTypeUID,\n attributeName,\n }: {\n contentTypeUID: Internal.UID.ContentType;\n attributeName: string;\n }) {\n const contentType = strapi.getModel(contentTypeUID);\n const attribute: any = contentType.attributes[attributeName];\n\n if (!attribute) {\n throw new ApplicationError(\n `Failed to build an association resolver for ${contentTypeUID}::${attributeName}`\n );\n }\n\n const isMediaAttribute = isMedia(attribute);\n const isMorphAttribute = isMorphRelation(attribute);\n\n const targetUID = isMediaAttribute ? 'plugin::upload.file' : attribute.target;\n const isToMany = isMediaAttribute ? attribute.multiple : attribute.relation.endsWith('Many');\n\n const targetContentType = strapi.getModel(targetUID);\n\n return async (parent: any, args: any, context: any, info: any) => {\n const { auth } = context.state;\n\n const transformedArgs = transformArgs(args, {\n contentType: targetContentType,\n usePagination: true,\n });\n\n await strapi.contentAPI.validate.query(transformedArgs, targetContentType, {\n auth,\n });\n\n const sanitizedQuery = await strapi.contentAPI.sanitize.query(\n transformedArgs,\n targetContentType,\n {\n auth,\n }\n );\n const transformedQuery = strapi.get('query-params').transform(targetUID, sanitizedQuery);\n\n const isTargetDraftAndPublishContentType =\n contentTypes.hasDraftAndPublish(targetContentType);\n\n // Helper to check if a field is from built-in queries (not custom resolvers)\n // Use the precomputed lookup populated by the content-api service at schema build time.\n const isBuiltInQueryField = (fieldName: string) => {\n const graphqlService = strapi.plugin('graphql').service('content-api');\n return graphqlService.isBuiltInQueryField(fieldName);\n };\n\n // Walk back to the root of info.path so we pick up the args of *our* query branch\n let rootPath = info?.path;\n while (rootPath?.prev) {\n rootPath = rootPath.prev;\n }\n const rootQueryArgs = rootPath ? context.rootQueryArgsByPath?.get(rootPath.key) : undefined;\n\n const shouldInheritRootQueryStatus =\n rootQueryArgs?._originField && isBuiltInQueryField(rootQueryArgs._originField);\n\n // Only inherit status from built-in queries to avoid conflicts with custom resolvers.\n // Built-in root queries default to published results; draft/preview queries pass `status`.\n // Nested relations should match that parent query.\n const inheritedStatus = shouldInheritRootQueryStatus\n ? rootQueryArgs.status || 'published'\n : null;\n\n const statusToApply = args.status || inheritedStatus;\n\n const defaultFilters =\n isTargetDraftAndPublishContentType && statusToApply\n ? {\n where: {\n publishedAt: statusToApply === 'published' ? { $notNull: true } : { $null: true },\n },\n }\n : {};\n\n const inheritedPublicationFilter =\n rootQueryArgs?.publicationFilter !== undefined &&\n rootQueryArgs?._originField &&\n isBuiltInQueryField(rootQueryArgs._originField)\n ? rootQueryArgs.publicationFilter\n : undefined;\n\n const inheritedHasPublishedVersion =\n rootQueryArgs?.hasPublishedVersion !== undefined &&\n rootQueryArgs?._originField &&\n isBuiltInQueryField(rootQueryArgs._originField)\n ? rootQueryArgs.hasPublishedVersion\n : undefined;\n\n let effectivePublicationFilter: string | undefined = inheritedPublicationFilter;\n if (\n effectivePublicationFilter === undefined &&\n inheritedHasPublishedVersion !== undefined\n ) {\n effectivePublicationFilter = inheritedHasPublishedVersion\n ? 'has-published-version-document'\n : 'never-published-document';\n }\n\n let publicationFilterWhere: Record<string, any> = {};\n if (isTargetDraftAndPublishContentType && effectivePublicationFilter !== undefined) {\n let mode;\n try {\n mode = parsePublicationFilter(effectivePublicationFilter);\n } catch {\n mode = undefined;\n }\n if (mode !== undefined) {\n const meta = strapi.db.metadata.get(targetUID);\n const st = statusToApply === 'published' ? 'published' : 'draft';\n const cond = buildPublicationFilterWhere(\n strapi.db.connection,\n meta,\n targetContentType,\n mode,\n st\n );\n if (cond && Object.keys(cond).length > 0) {\n publicationFilterWhere = { where: cond };\n }\n }\n }\n\n const dbQuery = merge({}, defaultFilters, publicationFilterWhere, transformedQuery);\n\n // Sign media URLs if upload plugin is available and using private provider\n const data = await (async () => {\n const rawData = await strapi.db\n .query(contentTypeUID)\n .load(parent, attributeName, dbQuery);\n if (isMediaAttribute && strapi.plugin('upload')) {\n const { signFileUrls } = strapi.plugin('upload').service('file');\n\n if (Array.isArray(rawData)) {\n return async.map(rawData, (item: any) => signFileUrls(item));\n }\n\n if (rawData) {\n return signFileUrls(rawData);\n }\n }\n\n return rawData;\n })();\n\n const sanitizeInfo = {\n args: sanitizedQuery,\n resourceUID: targetUID,\n };\n\n // If this a polymorphic association, it sanitizes & returns the raw data\n // Note: The value needs to be wrapped in a fake object that represents its parent\n // so that the sanitize util can work properly.\n if (isMorphAttribute) {\n // Helpers used for the data cleanup\n const wrapData = (dataToWrap: any) => ({ [attributeName]: dataToWrap });\n const sanitizeData = (dataToSanitize: any) => {\n return strapi.contentAPI.sanitize.output(dataToSanitize, contentType, { auth });\n };\n const unwrapData = property(attributeName);\n\n // Sanitizer definition\n const sanitizeMorphAttribute = async.pipe(wrapData, sanitizeData, unwrapData);\n\n return sanitizeMorphAttribute(data);\n }\n\n // If this is a to-many relation, it returns an object that\n // matches what the entity-response-collection's resolvers expect\n if (isToMany) {\n return toEntityResponseCollection(data, sanitizeInfo);\n }\n\n // Else, it returns an object that matches\n // what the entity-response's resolvers expect\n return toEntityResponse(data, sanitizeInfo);\n };\n },\n };\n};\n"],"names":["ApplicationError","errors","strapi","service","getGraphQLService","plugin","isMorphRelation","isMedia","attributes","transformArgs","utils","toEntityResponse","toEntityResponseCollection","returnTypes","buildAssociationResolver","contentTypeUID","attributeName","contentType","getModel","attribute","isMediaAttribute","isMorphAttribute","targetUID","target","isToMany","multiple","relation","endsWith","targetContentType","parent","args","context","info","auth","state","transformedArgs","usePagination","contentAPI","validate","query","sanitizedQuery","sanitize","transformedQuery","get","transform","isTargetDraftAndPublishContentType","contentTypes","hasDraftAndPublish","isBuiltInQueryField","fieldName","graphqlService","rootPath","path","prev","rootQueryArgs","rootQueryArgsByPath","key","undefined","shouldInheritRootQueryStatus","_originField","inheritedStatus","status","statusToApply","defaultFilters","where","publishedAt","$notNull","$null","inheritedPublicationFilter","publicationFilter","inheritedHasPublishedVersion","hasPublishedVersion","effectivePublicationFilter","publicationFilterWhere","mode","parsePublicationFilter","meta","db","metadata","st","cond","buildPublicationFilterWhere","connection","Object","keys","length","dbQuery","merge","data","rawData","load","signFileUrls","Array","isArray","async","map","item","sanitizeInfo","resourceUID","wrapData","dataToWrap","sanitizeData","dataToSanitize","output","unwrapData","property","sanitizeMorphAttribute","pipe"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { merge,
|
|
1
|
+
import { merge, property } from 'lodash';
|
|
2
2
|
import { errors, contentTypes, parsePublicationFilter, buildPublicationFilterWhere, async } from '@strapi/utils';
|
|
3
3
|
|
|
4
4
|
const { ApplicationError } = errors;
|
|
@@ -85,7 +85,7 @@ var associationResolvers = (({ strapi })=>{
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
const dbQuery = merge(
|
|
88
|
+
const dbQuery = merge({}, defaultFilters, publicationFilterWhere, transformedQuery);
|
|
89
89
|
// Sign media URLs if upload plugin is available and using private provider
|
|
90
90
|
const data = await (async ()=>{
|
|
91
91
|
const rawData = await strapi.db.query(contentTypeUID).load(parent, attributeName, dbQuery);
|
|
@@ -117,7 +117,7 @@ var associationResolvers = (({ strapi })=>{
|
|
|
117
117
|
auth
|
|
118
118
|
});
|
|
119
119
|
};
|
|
120
|
-
const unwrapData =
|
|
120
|
+
const unwrapData = property(attributeName);
|
|
121
121
|
// Sanitizer definition
|
|
122
122
|
const sanitizeMorphAttribute = async.pipe(wrapData, sanitizeData, unwrapData);
|
|
123
123
|
return sanitizeMorphAttribute(data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"association.mjs","sources":["../../../../../server/src/services/builders/resolvers/association.ts"],"sourcesContent":["import { get, merge } from 'lodash/fp';\nimport {\n async,\n contentTypes,\n errors,\n buildPublicationFilterWhere,\n parsePublicationFilter,\n} from '@strapi/utils';\nimport type { Internal } from '@strapi/types';\n\nimport type { Context } from '../../types';\n\nconst { ApplicationError } = errors;\n\nexport default ({ strapi }: Context) => {\n const { service: getGraphQLService } = strapi.plugin('graphql');\n\n const { isMorphRelation, isMedia } = getGraphQLService('utils').attributes;\n const { transformArgs } = getGraphQLService('builders').utils;\n const { toEntityResponse, toEntityResponseCollection } = getGraphQLService('format').returnTypes;\n\n return {\n buildAssociationResolver({\n contentTypeUID,\n attributeName,\n }: {\n contentTypeUID: Internal.UID.ContentType;\n attributeName: string;\n }) {\n const contentType = strapi.getModel(contentTypeUID);\n const attribute: any = contentType.attributes[attributeName];\n\n if (!attribute) {\n throw new ApplicationError(\n `Failed to build an association resolver for ${contentTypeUID}::${attributeName}`\n );\n }\n\n const isMediaAttribute = isMedia(attribute);\n const isMorphAttribute = isMorphRelation(attribute);\n\n const targetUID = isMediaAttribute ? 'plugin::upload.file' : attribute.target;\n const isToMany = isMediaAttribute ? attribute.multiple : attribute.relation.endsWith('Many');\n\n const targetContentType = strapi.getModel(targetUID);\n\n return async (parent: any, args: any, context: any, info: any) => {\n const { auth } = context.state;\n\n const transformedArgs = transformArgs(args, {\n contentType: targetContentType,\n usePagination: true,\n });\n\n await strapi.contentAPI.validate.query(transformedArgs, targetContentType, {\n auth,\n });\n\n const sanitizedQuery = await strapi.contentAPI.sanitize.query(\n transformedArgs,\n targetContentType,\n {\n auth,\n }\n );\n const transformedQuery = strapi.get('query-params').transform(targetUID, sanitizedQuery);\n\n const isTargetDraftAndPublishContentType =\n contentTypes.hasDraftAndPublish(targetContentType);\n\n // Helper to check if a field is from built-in queries (not custom resolvers)\n // Use the precomputed lookup populated by the content-api service at schema build time.\n const isBuiltInQueryField = (fieldName: string) => {\n const graphqlService = strapi.plugin('graphql').service('content-api');\n return graphqlService.isBuiltInQueryField(fieldName);\n };\n\n // Walk back to the root of info.path so we pick up the args of *our* query branch\n let rootPath = info?.path;\n while (rootPath?.prev) {\n rootPath = rootPath.prev;\n }\n const rootQueryArgs = rootPath ? context.rootQueryArgsByPath?.get(rootPath.key) : undefined;\n\n const shouldInheritRootQueryStatus =\n rootQueryArgs?._originField && isBuiltInQueryField(rootQueryArgs._originField);\n\n // Only inherit status from built-in queries to avoid conflicts with custom resolvers.\n // Built-in root queries default to published results; draft/preview queries pass `status`.\n // Nested relations should match that parent query.\n const inheritedStatus = shouldInheritRootQueryStatus\n ? rootQueryArgs.status || 'published'\n : null;\n\n const statusToApply = args.status || inheritedStatus;\n\n const defaultFilters =\n isTargetDraftAndPublishContentType && statusToApply\n ? {\n where: {\n publishedAt: statusToApply === 'published' ? { $notNull: true } : { $null: true },\n },\n }\n : {};\n\n const inheritedPublicationFilter =\n rootQueryArgs?.publicationFilter !== undefined &&\n rootQueryArgs?._originField &&\n isBuiltInQueryField(rootQueryArgs._originField)\n ? rootQueryArgs.publicationFilter\n : undefined;\n\n const inheritedHasPublishedVersion =\n rootQueryArgs?.hasPublishedVersion !== undefined &&\n rootQueryArgs?._originField &&\n isBuiltInQueryField(rootQueryArgs._originField)\n ? rootQueryArgs.hasPublishedVersion\n : undefined;\n\n let effectivePublicationFilter: string | undefined = inheritedPublicationFilter;\n if (\n effectivePublicationFilter === undefined &&\n inheritedHasPublishedVersion !== undefined\n ) {\n effectivePublicationFilter = inheritedHasPublishedVersion\n ? 'has-published-version-document'\n : 'never-published-document';\n }\n\n let publicationFilterWhere: Record<string, any> = {};\n if (isTargetDraftAndPublishContentType && effectivePublicationFilter !== undefined) {\n let mode;\n try {\n mode = parsePublicationFilter(effectivePublicationFilter);\n } catch {\n mode = undefined;\n }\n if (mode !== undefined) {\n const meta = strapi.db.metadata.get(targetUID);\n const st = statusToApply === 'published' ? 'published' : 'draft';\n const cond = buildPublicationFilterWhere(\n strapi.db.connection,\n meta,\n targetContentType,\n mode,\n st\n );\n if (cond && Object.keys(cond).length > 0) {\n publicationFilterWhere = { where: cond };\n }\n }\n }\n\n const dbQuery = merge(merge(defaultFilters, publicationFilterWhere), transformedQuery);\n\n // Sign media URLs if upload plugin is available and using private provider\n const data = await (async () => {\n const rawData = await strapi.db\n .query(contentTypeUID)\n .load(parent, attributeName, dbQuery);\n if (isMediaAttribute && strapi.plugin('upload')) {\n const { signFileUrls } = strapi.plugin('upload').service('file');\n\n if (Array.isArray(rawData)) {\n return async.map(rawData, (item: any) => signFileUrls(item));\n }\n\n if (rawData) {\n return signFileUrls(rawData);\n }\n }\n\n return rawData;\n })();\n\n const sanitizeInfo = {\n args: sanitizedQuery,\n resourceUID: targetUID,\n };\n\n // If this a polymorphic association, it sanitizes & returns the raw data\n // Note: The value needs to be wrapped in a fake object that represents its parent\n // so that the sanitize util can work properly.\n if (isMorphAttribute) {\n // Helpers used for the data cleanup\n const wrapData = (dataToWrap: any) => ({ [attributeName]: dataToWrap });\n const sanitizeData = (dataToSanitize: any) => {\n return strapi.contentAPI.sanitize.output(dataToSanitize, contentType, { auth });\n };\n const unwrapData = get(attributeName);\n\n // Sanitizer definition\n const sanitizeMorphAttribute = async.pipe(wrapData, sanitizeData, unwrapData);\n\n return sanitizeMorphAttribute(data);\n }\n\n // If this is a to-many relation, it returns an object that\n // matches what the entity-response-collection's resolvers expect\n if (isToMany) {\n return toEntityResponseCollection(data, sanitizeInfo);\n }\n\n // Else, it returns an object that matches\n // what the entity-response's resolvers expect\n return toEntityResponse(data, sanitizeInfo);\n };\n },\n };\n};\n"],"names":["ApplicationError","errors","strapi","service","getGraphQLService","plugin","isMorphRelation","isMedia","attributes","transformArgs","utils","toEntityResponse","toEntityResponseCollection","returnTypes","buildAssociationResolver","contentTypeUID","attributeName","contentType","getModel","attribute","isMediaAttribute","isMorphAttribute","targetUID","target","isToMany","multiple","relation","endsWith","targetContentType","parent","args","context","info","auth","state","transformedArgs","usePagination","contentAPI","validate","query","sanitizedQuery","sanitize","transformedQuery","get","transform","isTargetDraftAndPublishContentType","contentTypes","hasDraftAndPublish","isBuiltInQueryField","fieldName","graphqlService","rootPath","path","prev","rootQueryArgs","rootQueryArgsByPath","key","undefined","shouldInheritRootQueryStatus","_originField","inheritedStatus","status","statusToApply","defaultFilters","where","publishedAt","$notNull","$null","inheritedPublicationFilter","publicationFilter","inheritedHasPublishedVersion","hasPublishedVersion","effectivePublicationFilter","publicationFilterWhere","mode","parsePublicationFilter","meta","db","metadata","st","cond","buildPublicationFilterWhere","connection","Object","keys","length","dbQuery","merge","data","rawData","load","signFileUrls","Array","isArray","async","map","item","sanitizeInfo","resourceUID","wrapData","dataToWrap","sanitizeData","dataToSanitize","output","unwrapData","sanitizeMorphAttribute","pipe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"association.mjs","sources":["../../../../../server/src/services/builders/resolvers/association.ts"],"sourcesContent":["import { merge, property } from 'lodash';\nimport {\n async,\n contentTypes,\n errors,\n buildPublicationFilterWhere,\n parsePublicationFilter,\n} from '@strapi/utils';\nimport type { Internal } from '@strapi/types';\n\nimport type { Context } from '../../types';\n\nconst { ApplicationError } = errors;\n\nexport default ({ strapi }: Context) => {\n const { service: getGraphQLService } = strapi.plugin('graphql');\n\n const { isMorphRelation, isMedia } = getGraphQLService('utils').attributes;\n const { transformArgs } = getGraphQLService('builders').utils;\n const { toEntityResponse, toEntityResponseCollection } = getGraphQLService('format').returnTypes;\n\n return {\n buildAssociationResolver({\n contentTypeUID,\n attributeName,\n }: {\n contentTypeUID: Internal.UID.ContentType;\n attributeName: string;\n }) {\n const contentType = strapi.getModel(contentTypeUID);\n const attribute: any = contentType.attributes[attributeName];\n\n if (!attribute) {\n throw new ApplicationError(\n `Failed to build an association resolver for ${contentTypeUID}::${attributeName}`\n );\n }\n\n const isMediaAttribute = isMedia(attribute);\n const isMorphAttribute = isMorphRelation(attribute);\n\n const targetUID = isMediaAttribute ? 'plugin::upload.file' : attribute.target;\n const isToMany = isMediaAttribute ? attribute.multiple : attribute.relation.endsWith('Many');\n\n const targetContentType = strapi.getModel(targetUID);\n\n return async (parent: any, args: any, context: any, info: any) => {\n const { auth } = context.state;\n\n const transformedArgs = transformArgs(args, {\n contentType: targetContentType,\n usePagination: true,\n });\n\n await strapi.contentAPI.validate.query(transformedArgs, targetContentType, {\n auth,\n });\n\n const sanitizedQuery = await strapi.contentAPI.sanitize.query(\n transformedArgs,\n targetContentType,\n {\n auth,\n }\n );\n const transformedQuery = strapi.get('query-params').transform(targetUID, sanitizedQuery);\n\n const isTargetDraftAndPublishContentType =\n contentTypes.hasDraftAndPublish(targetContentType);\n\n // Helper to check if a field is from built-in queries (not custom resolvers)\n // Use the precomputed lookup populated by the content-api service at schema build time.\n const isBuiltInQueryField = (fieldName: string) => {\n const graphqlService = strapi.plugin('graphql').service('content-api');\n return graphqlService.isBuiltInQueryField(fieldName);\n };\n\n // Walk back to the root of info.path so we pick up the args of *our* query branch\n let rootPath = info?.path;\n while (rootPath?.prev) {\n rootPath = rootPath.prev;\n }\n const rootQueryArgs = rootPath ? context.rootQueryArgsByPath?.get(rootPath.key) : undefined;\n\n const shouldInheritRootQueryStatus =\n rootQueryArgs?._originField && isBuiltInQueryField(rootQueryArgs._originField);\n\n // Only inherit status from built-in queries to avoid conflicts with custom resolvers.\n // Built-in root queries default to published results; draft/preview queries pass `status`.\n // Nested relations should match that parent query.\n const inheritedStatus = shouldInheritRootQueryStatus\n ? rootQueryArgs.status || 'published'\n : null;\n\n const statusToApply = args.status || inheritedStatus;\n\n const defaultFilters =\n isTargetDraftAndPublishContentType && statusToApply\n ? {\n where: {\n publishedAt: statusToApply === 'published' ? { $notNull: true } : { $null: true },\n },\n }\n : {};\n\n const inheritedPublicationFilter =\n rootQueryArgs?.publicationFilter !== undefined &&\n rootQueryArgs?._originField &&\n isBuiltInQueryField(rootQueryArgs._originField)\n ? rootQueryArgs.publicationFilter\n : undefined;\n\n const inheritedHasPublishedVersion =\n rootQueryArgs?.hasPublishedVersion !== undefined &&\n rootQueryArgs?._originField &&\n isBuiltInQueryField(rootQueryArgs._originField)\n ? rootQueryArgs.hasPublishedVersion\n : undefined;\n\n let effectivePublicationFilter: string | undefined = inheritedPublicationFilter;\n if (\n effectivePublicationFilter === undefined &&\n inheritedHasPublishedVersion !== undefined\n ) {\n effectivePublicationFilter = inheritedHasPublishedVersion\n ? 'has-published-version-document'\n : 'never-published-document';\n }\n\n let publicationFilterWhere: Record<string, any> = {};\n if (isTargetDraftAndPublishContentType && effectivePublicationFilter !== undefined) {\n let mode;\n try {\n mode = parsePublicationFilter(effectivePublicationFilter);\n } catch {\n mode = undefined;\n }\n if (mode !== undefined) {\n const meta = strapi.db.metadata.get(targetUID);\n const st = statusToApply === 'published' ? 'published' : 'draft';\n const cond = buildPublicationFilterWhere(\n strapi.db.connection,\n meta,\n targetContentType,\n mode,\n st\n );\n if (cond && Object.keys(cond).length > 0) {\n publicationFilterWhere = { where: cond };\n }\n }\n }\n\n const dbQuery = merge({}, defaultFilters, publicationFilterWhere, transformedQuery);\n\n // Sign media URLs if upload plugin is available and using private provider\n const data = await (async () => {\n const rawData = await strapi.db\n .query(contentTypeUID)\n .load(parent, attributeName, dbQuery);\n if (isMediaAttribute && strapi.plugin('upload')) {\n const { signFileUrls } = strapi.plugin('upload').service('file');\n\n if (Array.isArray(rawData)) {\n return async.map(rawData, (item: any) => signFileUrls(item));\n }\n\n if (rawData) {\n return signFileUrls(rawData);\n }\n }\n\n return rawData;\n })();\n\n const sanitizeInfo = {\n args: sanitizedQuery,\n resourceUID: targetUID,\n };\n\n // If this a polymorphic association, it sanitizes & returns the raw data\n // Note: The value needs to be wrapped in a fake object that represents its parent\n // so that the sanitize util can work properly.\n if (isMorphAttribute) {\n // Helpers used for the data cleanup\n const wrapData = (dataToWrap: any) => ({ [attributeName]: dataToWrap });\n const sanitizeData = (dataToSanitize: any) => {\n return strapi.contentAPI.sanitize.output(dataToSanitize, contentType, { auth });\n };\n const unwrapData = property(attributeName);\n\n // Sanitizer definition\n const sanitizeMorphAttribute = async.pipe(wrapData, sanitizeData, unwrapData);\n\n return sanitizeMorphAttribute(data);\n }\n\n // If this is a to-many relation, it returns an object that\n // matches what the entity-response-collection's resolvers expect\n if (isToMany) {\n return toEntityResponseCollection(data, sanitizeInfo);\n }\n\n // Else, it returns an object that matches\n // what the entity-response's resolvers expect\n return toEntityResponse(data, sanitizeInfo);\n };\n },\n };\n};\n"],"names":["ApplicationError","errors","strapi","service","getGraphQLService","plugin","isMorphRelation","isMedia","attributes","transformArgs","utils","toEntityResponse","toEntityResponseCollection","returnTypes","buildAssociationResolver","contentTypeUID","attributeName","contentType","getModel","attribute","isMediaAttribute","isMorphAttribute","targetUID","target","isToMany","multiple","relation","endsWith","targetContentType","parent","args","context","info","auth","state","transformedArgs","usePagination","contentAPI","validate","query","sanitizedQuery","sanitize","transformedQuery","get","transform","isTargetDraftAndPublishContentType","contentTypes","hasDraftAndPublish","isBuiltInQueryField","fieldName","graphqlService","rootPath","path","prev","rootQueryArgs","rootQueryArgsByPath","key","undefined","shouldInheritRootQueryStatus","_originField","inheritedStatus","status","statusToApply","defaultFilters","where","publishedAt","$notNull","$null","inheritedPublicationFilter","publicationFilter","inheritedHasPublishedVersion","hasPublishedVersion","effectivePublicationFilter","publicationFilterWhere","mode","parsePublicationFilter","meta","db","metadata","st","cond","buildPublicationFilterWhere","connection","Object","keys","length","dbQuery","merge","data","rawData","load","signFileUrls","Array","isArray","async","map","item","sanitizeInfo","resourceUID","wrapData","dataToWrap","sanitizeData","dataToSanitize","output","unwrapData","property","sanitizeMorphAttribute","pipe"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var lodash = require('lodash');
|
|
4
4
|
var mergePublicationArgs = require('./merge-publication-args.js');
|
|
5
5
|
|
|
6
6
|
/** Merge sanitized query with resolver args so GraphQL-coerced publication args are not dropped. */ const mergeDocumentListParams = (sanitizedQuery, args)=>{
|
|
@@ -45,10 +45,10 @@ var queriesResolvers = (({ strapi })=>({
|
|
|
45
45
|
const sanitizedQuery = await strapi.contentAPI.sanitize.query(args, contentType, {
|
|
46
46
|
auth: ctx?.state?.auth
|
|
47
47
|
});
|
|
48
|
-
const merged = mergeDocumentListParams(
|
|
48
|
+
const merged = mergeDocumentListParams(lodash.omit(sanitizedQuery, [
|
|
49
49
|
'id',
|
|
50
50
|
'documentId'
|
|
51
|
-
]
|
|
51
|
+
]), args);
|
|
52
52
|
return strapi.documents(uid).findOne({
|
|
53
53
|
...merged,
|
|
54
54
|
documentId
|