@payloadcms/graphql 3.0.0-alpha.5 → 3.0.0-alpha.51
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/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -95
- package/dist/index.js.map +1 -0
- package/dist/resolvers/auth/access.d.ts +1 -1
- package/dist/resolvers/auth/access.d.ts.map +1 -1
- package/dist/resolvers/auth/access.js +8 -23
- package/dist/resolvers/auth/access.js.map +1 -0
- package/dist/resolvers/auth/forgotPassword.d.ts.map +1 -1
- package/dist/resolvers/auth/forgotPassword.js +6 -16
- package/dist/resolvers/auth/forgotPassword.js.map +1 -0
- package/dist/resolvers/auth/init.d.ts +1 -1
- package/dist/resolvers/auth/init.d.ts.map +1 -1
- package/dist/resolvers/auth/init.js +6 -16
- package/dist/resolvers/auth/init.js.map +1 -0
- package/dist/resolvers/auth/login.d.ts +1 -4
- package/dist/resolvers/auth/login.d.ts.map +1 -1
- package/dist/resolvers/auth/login.js +10 -20
- package/dist/resolvers/auth/login.js.map +1 -0
- package/dist/resolvers/auth/logout.d.ts.map +1 -1
- package/dist/resolvers/auth/logout.js +8 -18
- package/dist/resolvers/auth/logout.js.map +1 -0
- package/dist/resolvers/auth/me.d.ts.map +1 -1
- package/dist/resolvers/auth/me.js +6 -16
- package/dist/resolvers/auth/me.js.map +1 -0
- package/dist/resolvers/auth/refresh.d.ts +1 -2
- package/dist/resolvers/auth/refresh.d.ts.map +1 -1
- package/dist/resolvers/auth/refresh.js +11 -21
- package/dist/resolvers/auth/refresh.js.map +1 -0
- package/dist/resolvers/auth/resetPassword.d.ts +1 -2
- package/dist/resolvers/auth/resetPassword.d.ts.map +1 -1
- package/dist/resolvers/auth/resetPassword.js +10 -20
- package/dist/resolvers/auth/resetPassword.js.map +1 -0
- package/dist/resolvers/auth/unlock.d.ts +1 -1
- package/dist/resolvers/auth/unlock.d.ts.map +1 -1
- package/dist/resolvers/auth/unlock.js +6 -16
- package/dist/resolvers/auth/unlock.js.map +1 -0
- package/dist/resolvers/auth/verifyEmail.d.ts +1 -1
- package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -1
- package/dist/resolvers/auth/verifyEmail.js +6 -16
- package/dist/resolvers/auth/verifyEmail.js.map +1 -0
- package/dist/resolvers/collections/create.d.ts +1 -1
- package/dist/resolvers/collections/create.d.ts.map +1 -1
- package/dist/resolvers/collections/create.js +6 -16
- package/dist/resolvers/collections/create.js.map +1 -0
- package/dist/resolvers/collections/delete.d.ts.map +1 -1
- package/dist/resolvers/collections/delete.js +8 -18
- package/dist/resolvers/collections/delete.js.map +1 -0
- package/dist/resolvers/collections/docAccess.d.ts +1 -1
- package/dist/resolvers/collections/docAccess.d.ts.map +1 -1
- package/dist/resolvers/collections/docAccess.js +7 -17
- package/dist/resolvers/collections/docAccess.js.map +1 -0
- package/dist/resolvers/collections/duplicate.d.ts +13 -0
- package/dist/resolvers/collections/duplicate.d.ts.map +1 -0
- package/dist/resolvers/collections/duplicate.js +22 -0
- package/dist/resolvers/collections/duplicate.js.map +1 -0
- package/dist/resolvers/collections/find.d.ts.map +1 -1
- package/dist/resolvers/collections/find.js +8 -18
- package/dist/resolvers/collections/find.js.map +1 -0
- package/dist/resolvers/collections/findByID.d.ts.map +1 -1
- package/dist/resolvers/collections/findByID.js +8 -18
- package/dist/resolvers/collections/findByID.js.map +1 -0
- package/dist/resolvers/collections/findVersionByID.d.ts +1 -1
- package/dist/resolvers/collections/findVersionByID.d.ts.map +1 -1
- package/dist/resolvers/collections/findVersionByID.js +8 -18
- package/dist/resolvers/collections/findVersionByID.js.map +1 -0
- package/dist/resolvers/collections/findVersions.d.ts +1 -1
- package/dist/resolvers/collections/findVersions.d.ts.map +1 -1
- package/dist/resolvers/collections/findVersions.js +8 -18
- package/dist/resolvers/collections/findVersions.js.map +1 -0
- package/dist/resolvers/collections/restoreVersion.d.ts.map +1 -1
- package/dist/resolvers/collections/restoreVersion.js +6 -16
- package/dist/resolvers/collections/restoreVersion.js.map +1 -0
- package/dist/resolvers/collections/update.d.ts.map +1 -1
- package/dist/resolvers/collections/update.js +8 -18
- package/dist/resolvers/collections/update.js.map +1 -0
- package/dist/resolvers/globals/docAccess.d.ts +1 -1
- package/dist/resolvers/globals/docAccess.d.ts.map +1 -1
- package/dist/resolvers/globals/docAccess.js +6 -16
- package/dist/resolvers/globals/docAccess.js.map +1 -0
- package/dist/resolvers/globals/findOne.d.ts.map +1 -1
- package/dist/resolvers/globals/findOne.js +6 -16
- package/dist/resolvers/globals/findOne.js.map +1 -0
- package/dist/resolvers/globals/findVersionByID.d.ts.map +1 -1
- package/dist/resolvers/globals/findVersionByID.js +6 -16
- package/dist/resolvers/globals/findVersionByID.js.map +1 -0
- package/dist/resolvers/globals/findVersions.d.ts.map +1 -1
- package/dist/resolvers/globals/findVersions.js +6 -16
- package/dist/resolvers/globals/findVersions.js.map +1 -0
- package/dist/resolvers/globals/index.d.ts +5 -5
- package/dist/resolvers/globals/index.d.ts.map +1 -1
- package/dist/resolvers/globals/index.js +7 -38
- package/dist/resolvers/globals/index.js.map +1 -0
- package/dist/resolvers/globals/restoreVersion.d.ts.map +1 -1
- package/dist/resolvers/globals/restoreVersion.js +6 -16
- package/dist/resolvers/globals/restoreVersion.js.map +1 -0
- package/dist/resolvers/globals/update.d.ts +1 -1
- package/dist/resolvers/globals/update.d.ts.map +1 -1
- package/dist/resolvers/globals/update.js +6 -16
- package/dist/resolvers/globals/update.js.map +1 -0
- package/dist/resolvers/types.d.ts +2 -2
- package/dist/resolvers/types.d.ts.map +1 -1
- package/dist/resolvers/types.js +2 -5
- package/dist/resolvers/types.js.map +1 -0
- package/dist/schema/buildFallbackLocaleInputType.d.ts +1 -1
- package/dist/schema/buildFallbackLocaleInputType.d.ts.map +1 -1
- package/dist/schema/buildFallbackLocaleInputType.js +6 -21
- package/dist/schema/buildFallbackLocaleInputType.js.map +1 -0
- package/dist/schema/buildLocaleInputType.d.ts +1 -1
- package/dist/schema/buildLocaleInputType.d.ts.map +1 -1
- package/dist/schema/buildLocaleInputType.js +6 -21
- package/dist/schema/buildLocaleInputType.js.map +1 -0
- package/dist/schema/buildMutationInputType.d.ts +6 -6
- package/dist/schema/buildMutationInputType.d.ts.map +1 -1
- package/dist/schema/buildMutationInputType.js +59 -81
- package/dist/schema/buildMutationInputType.js.map +1 -0
- package/dist/schema/buildObjectType.d.ts +5 -5
- package/dist/schema/buildObjectType.d.ts.map +1 -1
- package/dist/schema/buildObjectType.js +68 -83
- package/dist/schema/buildObjectType.js.map +1 -0
- package/dist/schema/buildPaginatedListType.js +15 -25
- package/dist/schema/buildPaginatedListType.js.map +1 -0
- package/dist/schema/buildPoliciesType.d.ts +1 -1
- package/dist/schema/buildPoliciesType.d.ts.map +1 -1
- package/dist/schema/buildPoliciesType.js +31 -57
- package/dist/schema/buildPoliciesType.js.map +1 -0
- package/dist/schema/buildWhereInputType.d.ts +1 -1
- package/dist/schema/buildWhereInputType.d.ts.map +1 -1
- package/dist/schema/buildWhereInputType.js +19 -34
- package/dist/schema/buildWhereInputType.js.map +1 -0
- package/dist/schema/fieldToWhereInputSchemaMap.d.ts.map +1 -1
- package/dist/schema/fieldToWhereInputSchemaMap.js +34 -48
- package/dist/schema/fieldToWhereInputSchemaMap.js.map +1 -0
- package/dist/schema/initCollections.d.ts.map +1 -1
- package/dist/schema/initCollections.js +180 -185
- package/dist/schema/initCollections.js.map +1 -0
- package/dist/schema/initGlobals.d.ts.map +1 -1
- package/dist/schema/initGlobals.js +59 -73
- package/dist/schema/initGlobals.js.map +1 -0
- package/dist/schema/isFieldNullable.js +4 -14
- package/dist/schema/isFieldNullable.js.map +1 -0
- package/dist/schema/operators.js +2 -12
- package/dist/schema/operators.js.map +1 -0
- package/dist/schema/recursivelyBuildNestedPaths.d.ts.map +1 -1
- package/dist/schema/recursivelyBuildNestedPaths.js +11 -26
- package/dist/schema/recursivelyBuildNestedPaths.js.map +1 -0
- package/dist/schema/withNullableType.d.ts.map +1 -1
- package/dist/schema/withNullableType.js +4 -14
- package/dist/schema/withNullableType.js.map +1 -0
- package/dist/schema/withOperators.d.ts +1 -1
- package/dist/schema/withOperators.d.ts.map +1 -1
- package/dist/schema/withOperators.js +82 -86
- package/dist/schema/withOperators.js.map +1 -0
- package/dist/utilities/combineParentName.js +4 -19
- package/dist/utilities/combineParentName.js.map +1 -0
- package/dist/utilities/formatName.js +2 -12
- package/dist/utilities/formatName.js.map +1 -0
- package/dist/utilities/formatName.spec.js +3 -12
- package/dist/utilities/formatName.spec.js.map +1 -0
- package/dist/utilities/formatOptions.js +5 -20
- package/dist/utilities/formatOptions.js.map +1 -0
- package/dist/utilities/getCheckIfLocaleObject.js +2 -12
- package/dist/utilities/getCheckIfLocaleObject.js.map +1 -0
- package/dist/utilities/groupOrTabHasRequiredSubfield.js +4 -14
- package/dist/utilities/groupOrTabHasRequiredSubfield.js.map +1 -0
- package/dist/utilities/uppercase.js +2 -12
- package/dist/utilities/uppercase.js.map +1 -0
- package/dist/utilities/wrapCustomResolver.d.ts +2 -2
- package/dist/utilities/wrapCustomResolver.d.ts.map +1 -1
- package/dist/utilities/wrapCustomResolver.js +4 -14
- package/dist/utilities/wrapCustomResolver.js.map +1 -0
- package/package.json +12 -7
- package/src/index.ts +24 -24
- package/dist/utilities/isolateTransactionID.d.ts +0 -2
- package/dist/utilities/isolateTransactionID.d.ts.map +0 -1
- package/dist/utilities/isolateTransactionID.js +0 -3
|
@@ -1,41 +1,26 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable no-await-in-loop */ /* eslint-disable no-restricted-syntax */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const _graphqltypejson = require("graphql-type-json");
|
|
14
|
-
const _types = require("payload/types");
|
|
15
|
-
const _utilities = require("payload/utilities");
|
|
16
|
-
const _combineParentName = /*#__PURE__*/ _interop_require_default(require("../utilities/combineParentName"));
|
|
17
|
-
const _formatName = /*#__PURE__*/ _interop_require_default(require("../utilities/formatName"));
|
|
18
|
-
const _formatOptions = /*#__PURE__*/ _interop_require_default(require("../utilities/formatOptions"));
|
|
19
|
-
const _buildWhereInputType = /*#__PURE__*/ _interop_require_default(require("./buildWhereInputType"));
|
|
20
|
-
const _isFieldNullable = /*#__PURE__*/ _interop_require_default(require("./isFieldNullable"));
|
|
21
|
-
const _withNullableType = /*#__PURE__*/ _interop_require_default(require("./withNullableType"));
|
|
22
|
-
function _interop_require_default(obj) {
|
|
23
|
-
return obj && obj.__esModule ? obj : {
|
|
24
|
-
default: obj
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentName, graphqlResult, config }) {
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable no-await-in-loop */ /* eslint-disable no-restricted-syntax */ import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, GraphQLUnionType } from 'graphql';
|
|
2
|
+
import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars';
|
|
3
|
+
/* eslint-disable no-use-before-define */ import { GraphQLJSON } from 'graphql-type-json';
|
|
4
|
+
import { tabHasName } from 'payload/types';
|
|
5
|
+
import { toWords } from 'payload/utilities';
|
|
6
|
+
import combineParentName from '../utilities/combineParentName.js';
|
|
7
|
+
import formatName from '../utilities/formatName.js';
|
|
8
|
+
import formatOptions from '../utilities/formatOptions.js';
|
|
9
|
+
import buildWhereInputType from './buildWhereInputType.js';
|
|
10
|
+
import isFieldNullable from './isFieldNullable.js';
|
|
11
|
+
import withNullableType from './withNullableType.js';
|
|
12
|
+
function buildObjectType({ name, baseFields = {}, config, fields, forceNullable, graphqlResult, parentName }) {
|
|
28
13
|
const fieldToSchemaMap = {
|
|
29
14
|
array: (objectTypeConfig, field)=>{
|
|
30
|
-
const interfaceName = field?.interfaceName || (
|
|
15
|
+
const interfaceName = field?.interfaceName || combineParentName(parentName, toWords(field.name, true));
|
|
31
16
|
if (!graphqlResult.types.arrayTypes[interfaceName]) {
|
|
32
17
|
const objectType = buildObjectType({
|
|
33
18
|
name: interfaceName,
|
|
19
|
+
config,
|
|
34
20
|
fields: field.fields,
|
|
35
|
-
forceNullable: (
|
|
36
|
-
parentName: interfaceName,
|
|
21
|
+
forceNullable: isFieldNullable(field, forceNullable),
|
|
37
22
|
graphqlResult,
|
|
38
|
-
|
|
23
|
+
parentName: interfaceName
|
|
39
24
|
});
|
|
40
25
|
if (Object.keys(objectType.getFields()).length) {
|
|
41
26
|
graphqlResult.types.arrayTypes[interfaceName] = objectType;
|
|
@@ -44,20 +29,21 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
44
29
|
if (!graphqlResult.types.arrayTypes[interfaceName]) {
|
|
45
30
|
return objectTypeConfig;
|
|
46
31
|
}
|
|
47
|
-
const arrayType = new
|
|
32
|
+
const arrayType = new GraphQLList(new GraphQLNonNull(graphqlResult.types.arrayTypes[interfaceName]));
|
|
48
33
|
return {
|
|
49
34
|
...objectTypeConfig,
|
|
50
35
|
[field.name]: {
|
|
51
|
-
type: (
|
|
36
|
+
type: withNullableType(field, arrayType)
|
|
52
37
|
}
|
|
53
38
|
};
|
|
54
39
|
},
|
|
55
40
|
blocks: (objectTypeConfig, field)=>{
|
|
56
41
|
const blockTypes = field.blocks.reduce((acc, block)=>{
|
|
57
42
|
if (!graphqlResult.types.blockTypes[block.slug]) {
|
|
58
|
-
const interfaceName = block?.interfaceName || block?.graphQL?.singularName ||
|
|
43
|
+
const interfaceName = block?.interfaceName || block?.graphQL?.singularName || toWords(block.slug, true);
|
|
59
44
|
const objectType = buildObjectType({
|
|
60
45
|
name: interfaceName,
|
|
46
|
+
config,
|
|
61
47
|
fields: [
|
|
62
48
|
...block.fields,
|
|
63
49
|
{
|
|
@@ -66,9 +52,8 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
66
52
|
}
|
|
67
53
|
],
|
|
68
54
|
forceNullable,
|
|
69
|
-
parentName: interfaceName,
|
|
70
55
|
graphqlResult,
|
|
71
|
-
|
|
56
|
+
parentName: interfaceName
|
|
72
57
|
});
|
|
73
58
|
if (Object.keys(objectType.getFields()).length) {
|
|
74
59
|
graphqlResult.types.blockTypes[block.slug] = objectType;
|
|
@@ -82,8 +67,8 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
82
67
|
if (blockTypes.length === 0) {
|
|
83
68
|
return objectTypeConfig;
|
|
84
69
|
}
|
|
85
|
-
const fullName = (
|
|
86
|
-
const type = new
|
|
70
|
+
const fullName = combineParentName(parentName, toWords(field.name, true));
|
|
71
|
+
const type = new GraphQLList(new GraphQLNonNull(new GraphQLUnionType({
|
|
87
72
|
name: fullName,
|
|
88
73
|
resolveType: (data)=>graphqlResult.types.blockTypes[data.blockType].name,
|
|
89
74
|
types: blockTypes
|
|
@@ -91,20 +76,20 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
91
76
|
return {
|
|
92
77
|
...objectTypeConfig,
|
|
93
78
|
[field.name]: {
|
|
94
|
-
type: (
|
|
79
|
+
type: withNullableType(field, type)
|
|
95
80
|
}
|
|
96
81
|
};
|
|
97
82
|
},
|
|
98
83
|
checkbox: (objectTypeConfig, field)=>({
|
|
99
84
|
...objectTypeConfig,
|
|
100
85
|
[field.name]: {
|
|
101
|
-
type: (
|
|
86
|
+
type: withNullableType(field, GraphQLBoolean, forceNullable)
|
|
102
87
|
}
|
|
103
88
|
}),
|
|
104
89
|
code: (objectTypeConfig, field)=>({
|
|
105
90
|
...objectTypeConfig,
|
|
106
91
|
[field.name]: {
|
|
107
|
-
type: (
|
|
92
|
+
type: withNullableType(field, GraphQLString, forceNullable)
|
|
108
93
|
}
|
|
109
94
|
}),
|
|
110
95
|
collapsible: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField)=>{
|
|
@@ -115,25 +100,25 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
115
100
|
date: (objectTypeConfig, field)=>({
|
|
116
101
|
...objectTypeConfig,
|
|
117
102
|
[field.name]: {
|
|
118
|
-
type: (
|
|
103
|
+
type: withNullableType(field, DateTimeResolver, forceNullable)
|
|
119
104
|
}
|
|
120
105
|
}),
|
|
121
106
|
email: (objectTypeConfig, field)=>({
|
|
122
107
|
...objectTypeConfig,
|
|
123
108
|
[field.name]: {
|
|
124
|
-
type: (
|
|
109
|
+
type: withNullableType(field, EmailAddressResolver, forceNullable)
|
|
125
110
|
}
|
|
126
111
|
}),
|
|
127
112
|
group: (objectTypeConfig, field)=>{
|
|
128
|
-
const interfaceName = field?.interfaceName || (
|
|
113
|
+
const interfaceName = field?.interfaceName || combineParentName(parentName, toWords(field.name, true));
|
|
129
114
|
if (!graphqlResult.types.groupTypes[interfaceName]) {
|
|
130
115
|
const objectType = buildObjectType({
|
|
131
116
|
name: interfaceName,
|
|
117
|
+
config,
|
|
132
118
|
fields: field.fields,
|
|
133
|
-
forceNullable: (
|
|
134
|
-
parentName: interfaceName,
|
|
119
|
+
forceNullable: isFieldNullable(field, forceNullable),
|
|
135
120
|
graphqlResult,
|
|
136
|
-
|
|
121
|
+
parentName: interfaceName
|
|
137
122
|
});
|
|
138
123
|
if (Object.keys(objectType.getFields()).length) {
|
|
139
124
|
graphqlResult.types.groupTypes[interfaceName] = objectType;
|
|
@@ -152,30 +137,30 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
152
137
|
json: (objectTypeConfig, field)=>({
|
|
153
138
|
...objectTypeConfig,
|
|
154
139
|
[field.name]: {
|
|
155
|
-
type: (
|
|
140
|
+
type: withNullableType(field, GraphQLJSON, forceNullable)
|
|
156
141
|
}
|
|
157
142
|
}),
|
|
158
143
|
number: (objectTypeConfig, field)=>{
|
|
159
|
-
const type = field?.name === 'id' ?
|
|
144
|
+
const type = field?.name === 'id' ? GraphQLInt : GraphQLFloat;
|
|
160
145
|
return {
|
|
161
146
|
...objectTypeConfig,
|
|
162
147
|
[field.name]: {
|
|
163
|
-
type: (
|
|
148
|
+
type: withNullableType(field, field?.hasMany === true ? new GraphQLList(type) : type, forceNullable)
|
|
164
149
|
}
|
|
165
150
|
};
|
|
166
151
|
},
|
|
167
152
|
point: (objectTypeConfig, field)=>({
|
|
168
153
|
...objectTypeConfig,
|
|
169
154
|
[field.name]: {
|
|
170
|
-
type: (
|
|
155
|
+
type: withNullableType(field, new GraphQLList(new GraphQLNonNull(GraphQLFloat)), forceNullable)
|
|
171
156
|
}
|
|
172
157
|
}),
|
|
173
158
|
radio: (objectTypeConfig, field)=>({
|
|
174
159
|
...objectTypeConfig,
|
|
175
160
|
[field.name]: {
|
|
176
|
-
type: (
|
|
177
|
-
name: (
|
|
178
|
-
values: (
|
|
161
|
+
type: withNullableType(field, new GraphQLEnumType({
|
|
162
|
+
name: combineParentName(parentName, field.name),
|
|
163
|
+
values: formatOptions(field)
|
|
179
164
|
}), forceNullable)
|
|
180
165
|
}
|
|
181
166
|
}),
|
|
@@ -183,28 +168,28 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
183
168
|
const { relationTo } = field;
|
|
184
169
|
const isRelatedToManyCollections = Array.isArray(relationTo);
|
|
185
170
|
const hasManyValues = field.hasMany;
|
|
186
|
-
const relationshipName = (
|
|
171
|
+
const relationshipName = combineParentName(parentName, toWords(field.name, true));
|
|
187
172
|
let type;
|
|
188
173
|
let relationToType = null;
|
|
189
174
|
if (Array.isArray(relationTo)) {
|
|
190
|
-
relationToType = new
|
|
175
|
+
relationToType = new GraphQLEnumType({
|
|
191
176
|
name: `${relationshipName}_RelationTo`,
|
|
192
177
|
values: relationTo.reduce((relations, relation)=>({
|
|
193
178
|
...relations,
|
|
194
|
-
[(
|
|
179
|
+
[formatName(relation)]: {
|
|
195
180
|
value: relation
|
|
196
181
|
}
|
|
197
182
|
}), {})
|
|
198
183
|
});
|
|
199
184
|
const types = relationTo.map((relation)=>graphqlResult.collections[relation].graphQL.type);
|
|
200
|
-
type = new
|
|
185
|
+
type = new GraphQLObjectType({
|
|
201
186
|
name: `${relationshipName}_Relationship`,
|
|
202
187
|
fields: {
|
|
203
188
|
relationTo: {
|
|
204
189
|
type: relationToType
|
|
205
190
|
},
|
|
206
191
|
value: {
|
|
207
|
-
type: new
|
|
192
|
+
type: new GraphQLUnionType({
|
|
208
193
|
name: relationshipName,
|
|
209
194
|
async resolveType (data, { req }) {
|
|
210
195
|
return graphqlResult.collections[data.collection].graphQL.type.name;
|
|
@@ -232,6 +217,7 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
232
217
|
};
|
|
233
218
|
}
|
|
234
219
|
const relationship = {
|
|
220
|
+
type: withNullableType(field, hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type, forceNullable),
|
|
235
221
|
args: relationshipArgs,
|
|
236
222
|
extensions: {
|
|
237
223
|
complexity: 10
|
|
@@ -316,8 +302,7 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
316
302
|
return null;
|
|
317
303
|
}
|
|
318
304
|
return null;
|
|
319
|
-
}
|
|
320
|
-
type: (0, _withNullableType.default)(field, hasManyValues ? new _graphql.GraphQLList(new _graphql.GraphQLNonNull(type)) : type, forceNullable)
|
|
305
|
+
}
|
|
321
306
|
};
|
|
322
307
|
return {
|
|
323
308
|
...objectTypeConfig,
|
|
@@ -327,9 +312,10 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
327
312
|
richText: (objectTypeConfig, field)=>({
|
|
328
313
|
...objectTypeConfig,
|
|
329
314
|
[field.name]: {
|
|
315
|
+
type: withNullableType(field, GraphQLJSON, forceNullable),
|
|
330
316
|
args: {
|
|
331
317
|
depth: {
|
|
332
|
-
type:
|
|
318
|
+
type: GraphQLInt
|
|
333
319
|
}
|
|
334
320
|
},
|
|
335
321
|
async resolve (parent, args, context) {
|
|
@@ -356,8 +342,7 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
356
342
|
});
|
|
357
343
|
}
|
|
358
344
|
return parent[field.name];
|
|
359
|
-
}
|
|
360
|
-
type: (0, _withNullableType.default)(field, _graphqltypejson.GraphQLJSON, forceNullable)
|
|
345
|
+
}
|
|
361
346
|
}
|
|
362
347
|
}),
|
|
363
348
|
row: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithRowFields, subField)=>{
|
|
@@ -366,13 +351,13 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
366
351
|
return objectTypeConfigWithRowFields;
|
|
367
352
|
}, objectTypeConfig),
|
|
368
353
|
select: (objectTypeConfig, field)=>{
|
|
369
|
-
const fullName = (
|
|
370
|
-
let type = new
|
|
354
|
+
const fullName = combineParentName(parentName, field.name);
|
|
355
|
+
let type = new GraphQLEnumType({
|
|
371
356
|
name: fullName,
|
|
372
|
-
values: (
|
|
357
|
+
values: formatOptions(field)
|
|
373
358
|
});
|
|
374
|
-
type = field.hasMany ? new
|
|
375
|
-
type = (
|
|
359
|
+
type = field.hasMany ? new GraphQLList(new GraphQLNonNull(type)) : type;
|
|
360
|
+
type = withNullableType(field, type, forceNullable);
|
|
376
361
|
return {
|
|
377
362
|
...objectTypeConfig,
|
|
378
363
|
[field.name]: {
|
|
@@ -381,16 +366,16 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
381
366
|
};
|
|
382
367
|
},
|
|
383
368
|
tabs: (objectTypeConfig, field)=>field.tabs.reduce((tabSchema, tab)=>{
|
|
384
|
-
if (
|
|
385
|
-
const interfaceName = tab?.interfaceName || (
|
|
369
|
+
if (tabHasName(tab)) {
|
|
370
|
+
const interfaceName = tab?.interfaceName || combineParentName(parentName, toWords(tab.name, true));
|
|
386
371
|
if (!graphqlResult.types.groupTypes[interfaceName]) {
|
|
387
372
|
const objectType = buildObjectType({
|
|
388
373
|
name: interfaceName,
|
|
374
|
+
config,
|
|
389
375
|
fields: tab.fields,
|
|
390
376
|
forceNullable,
|
|
391
|
-
parentName: interfaceName,
|
|
392
377
|
graphqlResult,
|
|
393
|
-
|
|
378
|
+
parentName: interfaceName
|
|
394
379
|
});
|
|
395
380
|
if (Object.keys(objectType.getFields()).length) {
|
|
396
381
|
graphqlResult.types.groupTypes[interfaceName] = objectType;
|
|
@@ -418,23 +403,23 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
418
403
|
text: (objectTypeConfig, field)=>({
|
|
419
404
|
...objectTypeConfig,
|
|
420
405
|
[field.name]: {
|
|
421
|
-
type: (
|
|
406
|
+
type: withNullableType(field, field.hasMany === true ? new GraphQLList(GraphQLString) : GraphQLString, forceNullable)
|
|
422
407
|
}
|
|
423
408
|
}),
|
|
424
409
|
textarea: (objectTypeConfig, field)=>({
|
|
425
410
|
...objectTypeConfig,
|
|
426
411
|
[field.name]: {
|
|
427
|
-
type: (
|
|
412
|
+
type: withNullableType(field, GraphQLString, forceNullable)
|
|
428
413
|
}
|
|
429
414
|
}),
|
|
430
415
|
upload: (objectTypeConfig, field)=>{
|
|
431
416
|
const { relationTo } = field;
|
|
432
|
-
const uploadName = (
|
|
417
|
+
const uploadName = combineParentName(parentName, toWords(field.name, true));
|
|
433
418
|
// If the relationshipType is undefined at this point,
|
|
434
419
|
// it can be assumed that this blockType can have a relationship
|
|
435
420
|
// to itself. Therefore, we set the relationshipType equal to the blockType
|
|
436
421
|
// that is currently being created.
|
|
437
|
-
const type = (
|
|
422
|
+
const type = withNullableType(field, graphqlResult.collections[relationTo].graphQL.type || newlyCreatedBlockType, forceNullable);
|
|
438
423
|
const uploadArgs = {};
|
|
439
424
|
if (config.localization) {
|
|
440
425
|
uploadArgs.locale = {
|
|
@@ -446,6 +431,7 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
446
431
|
}
|
|
447
432
|
const relatedCollectionSlug = field.relationTo;
|
|
448
433
|
const upload = {
|
|
434
|
+
type,
|
|
449
435
|
args: uploadArgs,
|
|
450
436
|
extensions: {
|
|
451
437
|
complexity: 20
|
|
@@ -470,12 +456,11 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
470
456
|
return relatedDocument || null;
|
|
471
457
|
}
|
|
472
458
|
return null;
|
|
473
|
-
}
|
|
474
|
-
type
|
|
459
|
+
}
|
|
475
460
|
};
|
|
476
461
|
const whereFields = graphqlResult.collections[relationTo].config.fields;
|
|
477
462
|
upload.args.where = {
|
|
478
|
-
type: (
|
|
463
|
+
type: buildWhereInputType({
|
|
479
464
|
name: uploadName,
|
|
480
465
|
fields: whereFields,
|
|
481
466
|
parentName: uploadName
|
|
@@ -500,9 +485,9 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
|
|
|
500
485
|
};
|
|
501
486
|
}, baseFields)
|
|
502
487
|
};
|
|
503
|
-
const newlyCreatedBlockType = new
|
|
488
|
+
const newlyCreatedBlockType = new GraphQLObjectType(objectSchema);
|
|
504
489
|
return newlyCreatedBlockType;
|
|
505
490
|
}
|
|
506
|
-
|
|
491
|
+
export default buildObjectType;
|
|
507
492
|
|
|
508
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGRPYmplY3RUeXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhRTEZpZWxkQ29uZmlnLCBHcmFwaFFMVHlwZSB9IGZyb20gJ2dyYXBocWwnXG5cbmltcG9ydCB7XG4gIEdyYXBoUUxCb29sZWFuLFxuICBHcmFwaFFMRW51bVR5cGUsXG4gIEdyYXBoUUxGbG9hdCxcbiAgR3JhcGhRTEludCxcbiAgR3JhcGhRTExpc3QsXG4gIEdyYXBoUUxOb25OdWxsLFxuICBHcmFwaFFMT2JqZWN0VHlwZSxcbiAgR3JhcGhRTFN0cmluZyxcbiAgR3JhcGhRTFVuaW9uVHlwZSxcbn0gZnJvbSAnZ3JhcGhxbCdcbmltcG9ydCB7IERhdGVUaW1lUmVzb2x2ZXIsIEVtYWlsQWRkcmVzc1Jlc29sdmVyIH0gZnJvbSAnZ3JhcGhxbC1zY2FsYXJzJ1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbmltcG9ydCB7IEdyYXBoUUxKU09OIH0gZnJvbSAnZ3JhcGhxbC10eXBlLWpzb24nXG5cbmltcG9ydCB0eXBlIHsgR3JhcGhRTEluZm8gfSBmcm9tICdwYXlsb2FkL2NvbmZpZydcbmltcG9ydCB0eXBlIHtcbiAgUmljaFRleHRBZGFwdGVyLFxuICBTYW5pdGl6ZWRDb25maWcsXG4gIEFycmF5RmllbGQsXG4gIEJsb2NrRmllbGQsXG4gIENoZWNrYm94RmllbGQsXG4gIENvZGVGaWVsZCxcbiAgQ29sbGFwc2libGVGaWVsZCxcbiAgRGF0ZUZpZWxkLFxuICBFbWFpbEZpZWxkLFxuICBGaWVsZCxcbiAgR3JvdXBGaWVsZCxcbiAgSlNPTkZpZWxkLFxuICBOdW1iZXJGaWVsZCxcbiAgUG9pbnRGaWVsZCxcbiAgUmFkaW9GaWVsZCxcbiAgUmVsYXRpb25zaGlwRmllbGQsXG4gIFJpY2hUZXh0RmllbGQsXG4gIFJvd0ZpZWxkLFxuICBTZWxlY3RGaWVsZCxcbiAgVGFic0ZpZWxkLFxuICBUZXh0RmllbGQsXG4gIFRleHRhcmVhRmllbGQsXG4gIFVwbG9hZEZpZWxkLFxufSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICdwYXlsb2FkL3V0aWxpdGllcydcbmltcG9ydCBjb21iaW5lUGFyZW50TmFtZSBmcm9tICcuLi91dGlsaXRpZXMvY29tYmluZVBhcmVudE5hbWUnXG5pbXBvcnQgZm9ybWF0TmFtZSBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0TmFtZSdcbmltcG9ydCBmb3JtYXRPcHRpb25zIGZyb20gJy4uL3V0aWxpdGllcy9mb3JtYXRPcHRpb25zJ1xuaW1wb3J0IGJ1aWxkV2hlcmVJbnB1dFR5cGUgZnJvbSAnLi9idWlsZFdoZXJlSW5wdXRUeXBlJ1xuaW1wb3J0IGlzRmllbGROdWxsYWJsZSBmcm9tICcuL2lzRmllbGROdWxsYWJsZSdcbmltcG9ydCB3aXRoTnVsbGFibGVUeXBlIGZyb20gJy4vd2l0aE51bGxhYmxlVHlwZSdcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuLi9yZXNvbHZlcnMvdHlwZXMnXG5cbnR5cGUgTG9jYWxlSW5wdXRUeXBlID0ge1xuICBmYWxsYmFja0xvY2FsZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbiAgbG9jYWxlOiB7XG4gICAgdHlwZTogR3JhcGhRTFR5cGVcbiAgfVxuICB3aGVyZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZUNvbmZpZyA9IHtcbiAgW3BhdGg6IHN0cmluZ106IEdyYXBoUUxGaWVsZENvbmZpZzxhbnksIGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBiYXNlRmllbGRzPzogT2JqZWN0VHlwZUNvbmZpZ1xuICBmaWVsZHM6IEZpZWxkW11cbiAgZm9yY2VOdWxsYWJsZT86IGJvb2xlYW5cbiAgbmFtZTogc3RyaW5nXG4gIHBhcmVudE5hbWU6IHN0cmluZ1xuICBncmFwaHFsUmVzdWx0OiBHcmFwaFFMSW5mb1xuICBjb25maWc6IFNhbml0aXplZENvbmZpZ1xufVxuXG5mdW5jdGlvbiBidWlsZE9iamVjdFR5cGUoe1xuICBuYW1lLFxuICBiYXNlRmllbGRzID0ge30sXG4gIGZpZWxkcyxcbiAgZm9yY2VOdWxsYWJsZSxcbiAgcGFyZW50TmFtZSxcbiAgZ3JhcGhxbFJlc3VsdCxcbiAgY29uZmlnLFxufTogQXJncyk6IEdyYXBoUUxPYmplY3RUeXBlIHtcbiAgY29uc3QgZmllbGRUb1NjaGVtYU1hcCA9IHtcbiAgICBhcnJheTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBBcnJheUZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgZ3JhcGhxbFJlc3VsdCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iamVjdFR5cGUuZ2V0RmllbGRzKCkpLmxlbmd0aCkge1xuICAgICAgICAgIGdyYXBocWxSZXN1bHQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IG9iamVjdFR5cGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWdyYXBocWxSZXN1bHQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheVR5cGUgPSBuZXcgR3JhcGhRTExpc3QoXG4gICAgICAgIG5ldyBHcmFwaFFMTm9uTnVsbChncmFwaHFsUmVzdWx0LnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pLFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgYXJyYXlUeXBlKSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgYmxvY2tzOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IEJsb2NrRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrVHlwZXM6IEdyYXBoUUxPYmplY3RUeXBlPGFueSwgYW55PltdID0gZmllbGQuYmxvY2tzLnJlZHVjZSgoYWNjLCBibG9jaykgPT4ge1xuICAgICAgICBpZiAoIWdyYXBocWxSZXN1bHQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgYmxvY2s/LmludGVyZmFjZU5hbWUgfHwgYmxvY2s/LmdyYXBoUUw/LnNpbmd1bGFyTmFtZSB8fCB0b1dvcmRzKGJsb2NrLnNsdWcsIHRydWUpXG5cbiAgICAgICAgICBjb25zdCBvYmplY3RUeXBlID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgLi4uYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iamVjdFR5cGUuZ2V0RmllbGRzKCkpLmxlbmd0aCkge1xuICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdC50eXBlcy5ibG9ja1R5cGVzW2Jsb2NrLnNsdWddID0gb2JqZWN0VHlwZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbYmxvY2suc2x1Z10pIHtcbiAgICAgICAgICBhY2MucHVzaChncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbYmxvY2suc2x1Z10pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBbXSlcblxuICAgICAgaWYgKGJsb2NrVHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgY29uc3QgdHlwZSA9IG5ldyBHcmFwaFFMTGlzdChcbiAgICAgICAgbmV3IEdyYXBoUUxOb25OdWxsKFxuICAgICAgICAgIG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICAgICAgcmVzb2x2ZVR5cGU6IChkYXRhKSA9PiBncmFwaHFsUmVzdWx0LnR5cGVzLmJsb2NrVHlwZXNbZGF0YS5ibG9ja1R5cGVdLm5hbWUsXG4gICAgICAgICAgICB0eXBlczogYmxvY2tUeXBlcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgIClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIHR5cGUpIH0sXG4gICAgICB9XG4gICAgfSxcbiAgICBjaGVja2JveDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBDaGVja2JveEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMQm9vbGVhbiwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBjb2RlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENvZGVGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTFN0cmluZywgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBjb2xsYXBzaWJsZTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBDb2xsYXBzaWJsZUZpZWxkKSA9PlxuICAgICAgZmllbGQuZmllbGRzLnJlZHVjZSgob2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkcywgc3ViRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChhZGRTdWJGaWVsZCkgcmV0dXJuIGFkZFN1YkZpZWxkKG9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHMsIHN1YkZpZWxkKVxuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkc1xuICAgICAgfSwgb2JqZWN0VHlwZUNvbmZpZyksXG4gICAgZGF0ZTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBEYXRlRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIERhdGVUaW1lUmVzb2x2ZXIsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgZW1haWw6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogRW1haWxGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgRW1haWxBZGRyZXNzUmVzb2x2ZXIsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgZ3JvdXA6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogR3JvdXBGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJmYWNlTmFtZSA9XG4gICAgICAgIGZpZWxkPy5pbnRlcmZhY2VOYW1lIHx8IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIHRvV29yZHMoZmllbGQubmFtZSwgdHJ1ZSkpXG5cbiAgICAgIGlmICghZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZTogaXNGaWVsZE51bGxhYmxlKGZpZWxkLCBmb3JjZU51bGxhYmxlKSxcbiAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICBncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0gPSBvYmplY3RUeXBlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAganNvbjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBKU09ORmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIG51bWJlcjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBOdW1iZXJGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGZpZWxkPy5uYW1lID09PSAnaWQnID8gR3JhcGhRTEludCA6IEdyYXBoUUxGbG9hdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgZmllbGQ/Lmhhc01hbnkgPT09IHRydWUgPyBuZXcgR3JhcGhRTExpc3QodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgcG9pbnQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUG9pbnRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxGbG9hdCkpLFxuICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJhZGlvOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJhZGlvRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCBmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlczogZm9ybWF0T3B0aW9ucyhmaWVsZCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVsYXRpb25zaGlwOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJlbGF0aW9uc2hpcEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbGF0aW9uVG8gfSA9IGZpZWxkXG4gICAgICBjb25zdCBpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcbiAgICAgIGNvbnN0IGhhc01hbnlWYWx1ZXMgPSBmaWVsZC5oYXNNYW55XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgbGV0IHR5cGVcbiAgICAgIGxldCByZWxhdGlvblRvVHlwZSA9IG51bGxcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykpIHtcbiAgICAgICAgcmVsYXRpb25Ub1R5cGUgPSBuZXcgR3JhcGhRTEVudW1UeXBlKHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxhdGlvbnNoaXBOYW1lfV9SZWxhdGlvblRvYCxcbiAgICAgICAgICB2YWx1ZXM6IHJlbGF0aW9uVG8ucmVkdWNlKFxuICAgICAgICAgICAgKHJlbGF0aW9ucywgcmVsYXRpb24pID0+ICh7XG4gICAgICAgICAgICAgIC4uLnJlbGF0aW9ucyxcbiAgICAgICAgICAgICAgW2Zvcm1hdE5hbWUocmVsYXRpb24pXToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZWxhdGlvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IHJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4gZ3JhcGhxbFJlc3VsdC5jb2xsZWN0aW9uc1tyZWxhdGlvbl0uZ3JhcGhRTC50eXBlKVxuXG4gICAgICAgIHR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGAke3JlbGF0aW9uc2hpcE5hbWV9X1JlbGF0aW9uc2hpcGAsXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgIHR5cGU6IHJlbGF0aW9uVG9UeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlc29sdmVUeXBlKGRhdGEsIHsgcmVxIH0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW2RhdGEuY29sbGVjdGlvbl0uZ3JhcGhRTC50eXBlLm5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIDsoeyB0eXBlIH0gPSBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmdyYXBoUUwpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSByZWxhdGlvbnNoaXBUeXBlIGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LFxuICAgICAgLy8gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGlzIGJsb2NrVHlwZSBjYW4gaGF2ZSBhIHJlbGF0aW9uc2hpcFxuICAgICAgLy8gdG8gaXRzZWxmLiBUaGVyZWZvcmUsIHdlIHNldCB0aGUgcmVsYXRpb25zaGlwVHlwZSBlcXVhbCB0byB0aGUgYmxvY2tUeXBlXG4gICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkLlxuXG4gICAgICB0eXBlID0gdHlwZSB8fCBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQXJnczoge1xuICAgICAgICBmYWxsYmFja0xvY2FsZT86IHVua25vd25cbiAgICAgICAgbGltaXQ/OiB1bmtub3duXG4gICAgICAgIGxvY2FsZT86IHVua25vd25cbiAgICAgICAgcGFnZT86IHVua25vd25cbiAgICAgICAgd2hlcmU/OiB1bmtub3duXG4gICAgICB9ID0ge31cblxuICAgICAgaWYgKGNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgcmVsYXRpb25zaGlwQXJncy5sb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogZ3JhcGhxbFJlc3VsdC50eXBlcy5sb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNoaXBBcmdzLmZhbGxiYWNrTG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0ge1xuICAgICAgICBhcmdzOiByZWxhdGlvbnNoaXBBcmdzLFxuICAgICAgICBleHRlbnNpb25zOiB7IGNvbXBsZXhpdHk6IDEwIH0sXG4gICAgICAgIGFzeW5jIHJlc29sdmUocGFyZW50LCBhcmdzLCBjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgICBjb25zdCBsb2NhbGUgPSBhcmdzLmxvY2FsZSB8fCBjb250ZXh0LnJlcS5sb2NhbGVcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0xvY2FsZSA9IGFyZ3MuZmFsbGJhY2tMb2NhbGUgfHwgY29udGV4dC5yZXEuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICBsZXQgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gZmllbGQucmVsYXRpb25Ub1xuXG4gICAgICAgICAgaWYgKGhhc01hbnlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVQb3B1bGF0aW9uUHJvbWlzZSA9IGFzeW5jIChyZWxhdGVkRG9jLCBpKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBpZCA9IHJlbGF0ZWREb2NcbiAgICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb25TbHVnID0gZmllbGQucmVsYXRpb25Ub1xuXG4gICAgICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnID0gcmVsYXRlZERvYy5yZWxhdGlvblRvXG4gICAgICAgICAgICAgICAgaWQgPSByZWxhdGVkRG9jLnZhbHVlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250ZXh0LnJlcS5wYXlsb2FkRGF0YUxvYWRlci5sb2FkKFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKHJlbGF0ZWREb2MsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRQcm9taXNlcy5wdXNoKGNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlKHJlbGF0ZWREb2MsIGkpKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWVcbiAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIGlkID0gdmFsdWUudmFsdWVcbiAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyA9IHZhbHVlLnJlbGF0aW9uVG9cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREb2N1bWVudCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKHJlbGF0ZWREb2N1bWVudCkge1xuICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgcmVsYXRpb25UbzogcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVsYXRlZERvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiByZWxhdGVkQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZWxhdGVkRG9jdW1lbnRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGhhc01hbnlWYWx1ZXMgPyBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpKSA6IHR5cGUsXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiByZWxhdGlvbnNoaXAsXG4gICAgICB9XG4gICAgfSxcbiAgICByaWNoVGV4dDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBSaWNoVGV4dEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXToge1xuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgZGVwdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IEdyYXBoUUxJbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgICBsZXQgZGVwdGggPSBjb25maWcuZGVmYXVsdERlcHRoXG4gICAgICAgICAgaWYgKHR5cGVvZiBhcmdzLmRlcHRoICE9PSAndW5kZWZpbmVkJykgZGVwdGggPSBhcmdzLmRlcHRoXG4gICAgICAgICAgY29uc3QgZWRpdG9yOiBSaWNoVGV4dEFkYXB0ZXIgPSBmaWVsZD8uZWRpdG9yXG5cbiAgICAgICAgICAvLyBSaWNoVGV4dCBmaWVsZHMgaGF2ZSB0aGVpciBvd24gZGVwdGggYXJndW1lbnQgaW4gR3JhcGhRTC5cbiAgICAgICAgICAvLyBUaGlzIGlzIHdoeSB0aGUgcG9wdWxhdGlvblByb21pc2UgKHdoaWNoIHBvcHVsYXRlcyByaWNodGV4dCBmaWVsZHMgbGlrZSB1cGxvYWRzIGFuZCByZWxhdGlvbnNoaXBzKVxuICAgICAgICAgIC8vIGlzIHJ1biBoZXJlIGFnYWluLCB3aXRoIHRoZSBwcm92aWRlZCBkZXB0aC5cbiAgICAgICAgICAvLyBJbiB0aGUgZ3JhcGhxbCBmaW5kLnRzIHJlc29sdmVyLCB0aGUgZGVwdGggaXMgdGhlbiBoYXJkLWNvZGVkIHRvIDAuXG4gICAgICAgICAgLy8gRWZmZWN0aXZlbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgcG9wdWxhdGlvblByb21pc2UgZm9yIEdyYXBoUUwgaXMgb25seSBydW4gaGVyZSwgYW5kIG5vdCBpbiB0aGUgZmluZC50cyByZXNvbHZlciAvIG5vcm1hbCBwb3B1bGF0aW9uIHByb21pc2UuXG4gICAgICAgICAgaWYgKGVkaXRvcj8ucG9wdWxhdGlvblByb21pc2UpIHtcbiAgICAgICAgICAgIGF3YWl0IGVkaXRvcj8ucG9wdWxhdGlvblByb21pc2Uoe1xuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGZpbmRNYW55OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmxhdHRlbkxvY2FsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBvdmVycmlkZUFjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHBvcHVsYXRpb25Qcm9taXNlczogW10sXG4gICAgICAgICAgICAgIHJlcTogY29udGV4dC5yZXEsXG4gICAgICAgICAgICAgIHNob3dIaWRkZW5GaWVsZHM6IGZhbHNlLFxuICAgICAgICAgICAgICBzaWJsaW5nRG9jOiBwYXJlbnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTEpTT04sIGZvcmNlTnVsbGFibGUpLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICByb3c6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUm93RmllbGQpID0+XG4gICAgICBmaWVsZC5maWVsZHMucmVkdWNlKChvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcywgc3ViRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChhZGRTdWJGaWVsZCkgcmV0dXJuIGFkZFN1YkZpZWxkKG9iamVjdFR5cGVDb25maWdXaXRoUm93RmllbGRzLCBzdWJGaWVsZClcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdXaXRoUm93RmllbGRzXG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICBzZWxlY3Q6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogU2VsZWN0RmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgZmllbGQubmFtZSlcblxuICAgICAgbGV0IHR5cGU6IEdyYXBoUUxUeXBlID0gbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICB2YWx1ZXM6IGZvcm1hdE9wdGlvbnMoZmllbGQpLFxuICAgICAgfSlcblxuICAgICAgdHlwZSA9IGZpZWxkLmhhc01hbnkgPyBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpKSA6IHR5cGVcbiAgICAgIHR5cGUgPSB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCB0eXBlLCBmb3JjZU51bGxhYmxlKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgdGFiczogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUYWJzRmllbGQpID0+XG4gICAgICBmaWVsZC50YWJzLnJlZHVjZSgodGFiU2NoZW1hLCB0YWIpID0+IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUodGFiKSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgdGFiPy5pbnRlcmZhY2VOYW1lIHx8IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIHRvV29yZHModGFiLm5hbWUsIHRydWUpKVxuXG4gICAgICAgICAgaWYgKCFncmFwaHFsUmVzdWx0LnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICAgICAgICBuYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgICBmaWVsZHM6IHRhYi5maWVsZHMsXG4gICAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdID0gb2JqZWN0VHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiU2NoZW1hXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRhYlNjaGVtYSxcbiAgICAgICAgICAgIFt0YWIubmFtZV06IHsgdHlwZTogZ3JhcGhxbFJlc3VsdC50eXBlcy5ncm91cFR5cGVzW2ludGVyZmFjZU5hbWVdIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50YWJTY2hlbWEsXG4gICAgICAgICAgLi4udGFiLmZpZWxkcy5yZWR1Y2UoKHN1YkZpZWxkU2NoZW1hLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChzdWJGaWVsZFNjaGVtYSwgc3ViRmllbGQpXG4gICAgICAgICAgICByZXR1cm4gc3ViRmllbGRTY2hlbWFcbiAgICAgICAgICB9LCB0YWJTY2hlbWEpLFxuICAgICAgICB9XG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICB0ZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFRleHRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBmaWVsZC5oYXNNYW55ID09PSB0cnVlID8gbmV3IEdyYXBoUUxMaXN0KEdyYXBoUUxTdHJpbmcpIDogR3JhcGhRTFN0cmluZyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICB0ZXh0YXJlYTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUZXh0YXJlYUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIHVwbG9hZDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBVcGxvYWRGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgeyByZWxhdGlvblRvIH0gPSBmaWVsZFxuXG4gICAgICBjb25zdCB1cGxvYWROYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgLy8gSWYgdGhlIHJlbGF0aW9uc2hpcFR5cGUgaXMgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnQsXG4gICAgICAvLyBpdCBjYW4gYmUgYXNzdW1lZCB0aGF0IHRoaXMgYmxvY2tUeXBlIGNhbiBoYXZlIGEgcmVsYXRpb25zaGlwXG4gICAgICAvLyB0byBpdHNlbGYuIFRoZXJlZm9yZSwgd2Ugc2V0IHRoZSByZWxhdGlvbnNoaXBUeXBlIGVxdWFsIHRvIHRoZSBibG9ja1R5cGVcbiAgICAgIC8vIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGNyZWF0ZWQuXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB3aXRoTnVsbGFibGVUeXBlKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgZ3JhcGhxbFJlc3VsdC5jb2xsZWN0aW9uc1tyZWxhdGlvblRvXS5ncmFwaFFMLnR5cGUgfHwgbmV3bHlDcmVhdGVkQmxvY2tUeXBlLFxuICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgKVxuXG4gICAgICBjb25zdCB1cGxvYWRBcmdzID0ge30gYXMgTG9jYWxlSW5wdXRUeXBlXG5cbiAgICAgIGlmIChjb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHVwbG9hZEFyZ3MubG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMubG9jYWxlSW5wdXRUeXBlLFxuICAgICAgICB9XG5cbiAgICAgICAgdXBsb2FkQXJncy5mYWxsYmFja0xvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyA9IGZpZWxkLnJlbGF0aW9uVG9cblxuICAgICAgY29uc3QgdXBsb2FkID0ge1xuICAgICAgICBhcmdzOiB1cGxvYWRBcmdzLFxuICAgICAgICBleHRlbnNpb25zOiB7IGNvbXBsZXhpdHk6IDIwIH0sXG4gICAgICAgIGFzeW5jIHJlc29sdmUocGFyZW50LCBhcmdzLCBjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgICBjb25zdCBsb2NhbGUgPSBhcmdzLmxvY2FsZSB8fCBjb250ZXh0LnJlcS5sb2NhbGVcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0xvY2FsZSA9IGFyZ3MuZmFsbGJhY2tMb2NhbGUgfHwgY29udGV4dC5yZXEuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICBjb25zdCBpZCA9IHZhbHVlXG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREb2N1bWVudCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgcmV0dXJuIHJlbGF0ZWREb2N1bWVudCB8fCBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZSxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2hlcmVGaWVsZHMgPSBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgdXBsb2FkLmFyZ3Mud2hlcmUgPSB7XG4gICAgICAgIHR5cGU6IGJ1aWxkV2hlcmVJbnB1dFR5cGUoe1xuICAgICAgICAgIG5hbWU6IHVwbG9hZE5hbWUsXG4gICAgICAgICAgZmllbGRzOiB3aGVyZUZpZWxkcyxcbiAgICAgICAgICBwYXJlbnROYW1lOiB1cGxvYWROYW1lLFxuICAgICAgICB9KSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB1cGxvYWQsXG4gICAgICB9XG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IG9iamVjdFNjaGVtYSA9IHtcbiAgICBuYW1lLFxuICAgIGZpZWxkczogKCkgPT5cbiAgICAgIGZpZWxkcy5yZWR1Y2UoKG9iamVjdFR5cGVDb25maWcsIGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gZmllbGRUb1NjaGVtYU1hcFtmaWVsZC50eXBlXVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRTY2hlbWEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICAgIC4uLmZpZWxkU2NoZW1hKG9iamVjdFR5cGVDb25maWcsIGZpZWxkKSxcbiAgICAgICAgfVxuICAgICAgfSwgYmFzZUZpZWxkcyksXG4gIH1cblxuICBjb25zdCBuZXdseUNyZWF0ZWRCbG9ja1R5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUob2JqZWN0U2NoZW1hKVxuXG4gIHJldHVybiBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRPYmplY3RUeXBlXG4iXSwibmFtZXMiOlsiYnVpbGRPYmplY3RUeXBlIiwibmFtZSIsImJhc2VGaWVsZHMiLCJmaWVsZHMiLCJmb3JjZU51bGxhYmxlIiwicGFyZW50TmFtZSIsImdyYXBocWxSZXN1bHQiLCJjb25maWciLCJmaWVsZFRvU2NoZW1hTWFwIiwiYXJyYXkiLCJvYmplY3RUeXBlQ29uZmlnIiwiZmllbGQiLCJpbnRlcmZhY2VOYW1lIiwiY29tYmluZVBhcmVudE5hbWUiLCJ0b1dvcmRzIiwidHlwZXMiLCJhcnJheVR5cGVzIiwib2JqZWN0VHlwZSIsImlzRmllbGROdWxsYWJsZSIsIk9iamVjdCIsImtleXMiLCJnZXRGaWVsZHMiLCJsZW5ndGgiLCJhcnJheVR5cGUiLCJHcmFwaFFMTGlzdCIsIkdyYXBoUUxOb25OdWxsIiwidHlwZSIsIndpdGhOdWxsYWJsZVR5cGUiLCJibG9ja3MiLCJibG9ja1R5cGVzIiwicmVkdWNlIiwiYWNjIiwiYmxvY2siLCJzbHVnIiwiZ3JhcGhRTCIsInNpbmd1bGFyTmFtZSIsInB1c2giLCJmdWxsTmFtZSIsIkdyYXBoUUxVbmlvblR5cGUiLCJyZXNvbHZlVHlwZSIsImRhdGEiLCJibG9ja1R5cGUiLCJjaGVja2JveCIsIkdyYXBoUUxCb29sZWFuIiwiY29kZSIsIkdyYXBoUUxTdHJpbmciLCJjb2xsYXBzaWJsZSIsIm9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHMiLCJzdWJGaWVsZCIsImFkZFN1YkZpZWxkIiwiZGF0ZSIsIkRhdGVUaW1lUmVzb2x2ZXIiLCJlbWFpbCIsIkVtYWlsQWRkcmVzc1Jlc29sdmVyIiwiZ3JvdXAiLCJncm91cFR5cGVzIiwianNvbiIsIkdyYXBoUUxKU09OIiwibnVtYmVyIiwiR3JhcGhRTEludCIsIkdyYXBoUUxGbG9hdCIsImhhc01hbnkiLCJwb2ludCIsInJhZGlvIiwiR3JhcGhRTEVudW1UeXBlIiwidmFsdWVzIiwiZm9ybWF0T3B0aW9ucyIsInJlbGF0aW9uc2hpcCIsInJlbGF0aW9uVG8iLCJpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsImhhc01hbnlWYWx1ZXMiLCJyZWxhdGlvbnNoaXBOYW1lIiwicmVsYXRpb25Ub1R5cGUiLCJyZWxhdGlvbnMiLCJyZWxhdGlvbiIsImZvcm1hdE5hbWUiLCJ2YWx1ZSIsIm1hcCIsImNvbGxlY3Rpb25zIiwiR3JhcGhRTE9iamVjdFR5cGUiLCJyZXEiLCJjb2xsZWN0aW9uIiwibmV3bHlDcmVhdGVkQmxvY2tUeXBlIiwicmVsYXRpb25zaGlwQXJncyIsImxvY2FsaXphdGlvbiIsImxvY2FsZSIsImxvY2FsZUlucHV0VHlwZSIsImZhbGxiYWNrTG9jYWxlIiwiZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUiLCJhcmdzIiwiZXh0ZW5zaW9ucyIsImNvbXBsZXhpdHkiLCJyZXNvbHZlIiwicGFyZW50IiwiY29udGV4dCIsInJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyIsInJlc3VsdHMiLCJyZXN1bHRQcm9taXNlcyIsImNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlIiwicmVsYXRlZERvYyIsImkiLCJpZCIsImNvbGxlY3Rpb25TbHVnIiwicmVzdWx0IiwicGF5bG9hZERhdGFMb2FkZXIiLCJsb2FkIiwiSlNPTiIsInN0cmluZ2lmeSIsInRyYW5zYWN0aW9uSUQiLCJmb3JFYWNoIiwiUHJvbWlzZSIsImFsbCIsInJlbGF0ZWREb2N1bWVudCIsInJpY2hUZXh0IiwiZGVwdGgiLCJkZWZhdWx0RGVwdGgiLCJlZGl0b3IiLCJwb3B1bGF0aW9uUHJvbWlzZSIsImZpbmRNYW55IiwiZmxhdHRlbkxvY2FsZXMiLCJvdmVycmlkZUFjY2VzcyIsInBvcHVsYXRpb25Qcm9taXNlcyIsInNob3dIaWRkZW5GaWVsZHMiLCJzaWJsaW5nRG9jIiwicm93Iiwib2JqZWN0VHlwZUNvbmZpZ1dpdGhSb3dGaWVsZHMiLCJzZWxlY3QiLCJ0YWJzIiwidGFiU2NoZW1hIiwidGFiIiwidGFiSGFzTmFtZSIsInN1YkZpZWxkU2NoZW1hIiwidGV4dCIsInRleHRhcmVhIiwidXBsb2FkIiwidXBsb2FkTmFtZSIsInVwbG9hZEFyZ3MiLCJ3aGVyZUZpZWxkcyIsIndoZXJlIiwiYnVpbGRXaGVyZUlucHV0VHlwZSIsIm9iamVjdFNjaGVtYSIsImZpZWxkU2NoZW1hIl0sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQsR0FDMUQsbUNBQW1DLEdBQ25DLHVDQUF1Qzs7OzsrQkEwcEJ2Qzs7O2VBQUE7Ozt5QkE3b0JPO2dDQUNnRDtpQ0FFM0I7dUJBNkJEOzJCQUNIOzBFQUNNO21FQUNQO3NFQUNHOzRFQUNNO3dFQUNKO3lFQUNDOzs7Ozs7QUE2QjdCLFNBQVNBLGdCQUFnQixFQUN2QkMsSUFBSSxFQUNKQyxhQUFhLENBQUMsQ0FBQyxFQUNmQyxNQUFNLEVBQ05DLGFBQWEsRUFDYkMsVUFBVSxFQUNWQyxhQUFhLEVBQ2JDLE1BQU0sRUFDRDtJQUNMLE1BQU1DLG1CQUFtQjtRQUN2QkMsT0FBTyxDQUFDQyxrQkFBb0NDO1lBQzFDLE1BQU1DLGdCQUNKRCxPQUFPQyxpQkFBaUJDLElBQUFBLDBCQUFpQixFQUFDUixZQUFZUyxJQUFBQSxrQkFBTyxFQUFDSCxNQUFNVixJQUFJLEVBQUU7WUFFNUUsSUFBSSxDQUFDSyxjQUFjUyxLQUFLLENBQUNDLFVBQVUsQ0FBQ0osY0FBYyxFQUFFO2dCQUNsRCxNQUFNSyxhQUFhakIsZ0JB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
|
|
493
|
+
//# sourceMappingURL=buildObjectType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/schema/buildObjectType.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\nimport type { GraphQLFieldConfig, GraphQLType } from 'graphql'\nimport type { GraphQLInfo } from 'payload/config'\nimport type {\n ArrayField,\n BlockField,\n CheckboxField,\n CodeField,\n CollapsibleField,\n DateField,\n EmailField,\n Field,\n GroupField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RichTextAdapter,\n RichTextField,\n RowField,\n SanitizedConfig,\n SelectField,\n TabsField,\n TextField,\n TextareaField,\n UploadField,\n} from 'payload/types'\n\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLString,\n GraphQLUnionType,\n} from 'graphql'\nimport { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars'\n/* eslint-disable no-use-before-define */\nimport { GraphQLJSON } from 'graphql-type-json'\nimport { tabHasName } from 'payload/types'\nimport { toWords } from 'payload/utilities'\n\nimport type { Context } from '../resolvers/types.js'\n\nimport combineParentName from '../utilities/combineParentName.js'\nimport formatName from '../utilities/formatName.js'\nimport formatOptions from '../utilities/formatOptions.js'\nimport buildWhereInputType from './buildWhereInputType.js'\nimport isFieldNullable from './isFieldNullable.js'\nimport withNullableType from './withNullableType.js'\n\ntype LocaleInputType = {\n fallbackLocale: {\n type: GraphQLType\n }\n locale: {\n type: GraphQLType\n }\n where: {\n type: GraphQLType\n }\n}\n\nexport type ObjectTypeConfig = {\n [path: string]: GraphQLFieldConfig<any, any>\n}\n\ntype Args = {\n baseFields?: ObjectTypeConfig\n config: SanitizedConfig\n fields: Field[]\n forceNullable?: boolean\n graphqlResult: GraphQLInfo\n name: string\n parentName: string\n}\n\nfunction buildObjectType({\n name,\n baseFields = {},\n config,\n fields,\n forceNullable,\n graphqlResult,\n parentName,\n}: Args): GraphQLObjectType {\n const fieldToSchemaMap = {\n array: (objectTypeConfig: ObjectTypeConfig, field: ArrayField) => {\n const interfaceName =\n field?.interfaceName || combineParentName(parentName, toWords(field.name, true))\n\n if (!graphqlResult.types.arrayTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: field.fields,\n forceNullable: isFieldNullable(field, forceNullable),\n graphqlResult,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.arrayTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.arrayTypes[interfaceName]) {\n return objectTypeConfig\n }\n\n const arrayType = new GraphQLList(\n new GraphQLNonNull(graphqlResult.types.arrayTypes[interfaceName]),\n )\n\n return {\n ...objectTypeConfig,\n [field.name]: { type: withNullableType(field, arrayType) },\n }\n },\n blocks: (objectTypeConfig: ObjectTypeConfig, field: BlockField) => {\n const blockTypes: GraphQLObjectType<any, any>[] = field.blocks.reduce((acc, block) => {\n if (!graphqlResult.types.blockTypes[block.slug]) {\n const interfaceName =\n block?.interfaceName || block?.graphQL?.singularName || toWords(block.slug, true)\n\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: [\n ...block.fields,\n {\n name: 'blockType',\n type: 'text',\n },\n ],\n forceNullable,\n graphqlResult,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.blockTypes[block.slug] = objectType\n }\n }\n\n if (graphqlResult.types.blockTypes[block.slug]) {\n acc.push(graphqlResult.types.blockTypes[block.slug])\n }\n\n return acc\n }, [])\n\n if (blockTypes.length === 0) {\n return objectTypeConfig\n }\n\n const fullName = combineParentName(parentName, toWords(field.name, true))\n\n const type = new GraphQLList(\n new GraphQLNonNull(\n new GraphQLUnionType({\n name: fullName,\n resolveType: (data) => graphqlResult.types.blockTypes[data.blockType].name,\n types: blockTypes,\n }),\n ),\n )\n\n return {\n ...objectTypeConfig,\n [field.name]: { type: withNullableType(field, type) },\n }\n },\n checkbox: (objectTypeConfig: ObjectTypeConfig, field: CheckboxField) => ({\n ...objectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLBoolean, forceNullable) },\n }),\n code: (objectTypeConfig: ObjectTypeConfig, field: CodeField) => ({\n ...objectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n collapsible: (objectTypeConfig: ObjectTypeConfig, field: CollapsibleField) =>\n field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) return addSubField(objectTypeConfigWithCollapsibleFields, subField)\n return objectTypeConfigWithCollapsibleFields\n }, objectTypeConfig),\n date: (objectTypeConfig: ObjectTypeConfig, field: DateField) => ({\n ...objectTypeConfig,\n [field.name]: { type: withNullableType(field, DateTimeResolver, forceNullable) },\n }),\n email: (objectTypeConfig: ObjectTypeConfig, field: EmailField) => ({\n ...objectTypeConfig,\n [field.name]: { type: withNullableType(field, EmailAddressResolver, forceNullable) },\n }),\n group: (objectTypeConfig: ObjectTypeConfig, field: GroupField) => {\n const interfaceName =\n field?.interfaceName || combineParentName(parentName, toWords(field.name, true))\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: field.fields,\n forceNullable: isFieldNullable(field, forceNullable),\n graphqlResult,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.groupTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n return objectTypeConfig\n }\n\n return {\n ...objectTypeConfig,\n [field.name]: { type: graphqlResult.types.groupTypes[interfaceName] },\n }\n },\n json: (objectTypeConfig: ObjectTypeConfig, field: JSONField) => ({\n ...objectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLJSON, forceNullable) },\n }),\n number: (objectTypeConfig: ObjectTypeConfig, field: NumberField) => {\n const type = field?.name === 'id' ? GraphQLInt : GraphQLFloat\n return {\n ...objectTypeConfig,\n [field.name]: {\n type: withNullableType(\n field,\n field?.hasMany === true ? new GraphQLList(type) : type,\n forceNullable,\n ),\n },\n }\n },\n point: (objectTypeConfig: ObjectTypeConfig, field: PointField) => ({\n ...objectTypeConfig,\n [field.name]: {\n type: withNullableType(\n field,\n new GraphQLList(new GraphQLNonNull(GraphQLFloat)),\n forceNullable,\n ),\n },\n }),\n radio: (objectTypeConfig: ObjectTypeConfig, field: RadioField) => ({\n ...objectTypeConfig,\n [field.name]: {\n type: withNullableType(\n field,\n new GraphQLEnumType({\n name: combineParentName(parentName, field.name),\n values: formatOptions(field),\n }),\n forceNullable,\n ),\n },\n }),\n relationship: (objectTypeConfig: ObjectTypeConfig, field: RelationshipField) => {\n const { relationTo } = field\n const isRelatedToManyCollections = Array.isArray(relationTo)\n const hasManyValues = field.hasMany\n const relationshipName = combineParentName(parentName, toWords(field.name, true))\n\n let type\n let relationToType = null\n\n if (Array.isArray(relationTo)) {\n relationToType = new GraphQLEnumType({\n name: `${relationshipName}_RelationTo`,\n values: relationTo.reduce(\n (relations, relation) => ({\n ...relations,\n [formatName(relation)]: {\n value: relation,\n },\n }),\n {},\n ),\n })\n\n const types = relationTo.map((relation) => graphqlResult.collections[relation].graphQL.type)\n\n type = new GraphQLObjectType({\n name: `${relationshipName}_Relationship`,\n fields: {\n relationTo: {\n type: relationToType,\n },\n value: {\n type: new GraphQLUnionType({\n name: relationshipName,\n async resolveType(data, { req }) {\n return graphqlResult.collections[data.collection].graphQL.type.name\n },\n types,\n }),\n },\n },\n })\n } else {\n ;({ type } = graphqlResult.collections[relationTo].graphQL)\n }\n\n // If the relationshipType is undefined at this point,\n // it can be assumed that this blockType can have a relationship\n // to itself. Therefore, we set the relationshipType equal to the blockType\n // that is currently being created.\n\n type = type || newlyCreatedBlockType\n\n const relationshipArgs: {\n fallbackLocale?: unknown\n limit?: unknown\n locale?: unknown\n page?: unknown\n where?: unknown\n } = {}\n\n if (config.localization) {\n relationshipArgs.locale = {\n type: graphqlResult.types.localeInputType,\n }\n\n relationshipArgs.fallbackLocale = {\n type: graphqlResult.types.fallbackLocaleInputType,\n }\n }\n\n const relationship = {\n type: withNullableType(\n field,\n hasManyValues ? new GraphQLList(new GraphQLNonNull(type)) : type,\n forceNullable,\n ),\n args: relationshipArgs,\n extensions: { complexity: 10 },\n async resolve(parent, args, context: Context) {\n const value = parent[field.name]\n const locale = args.locale || context.req.locale\n const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale\n let relatedCollectionSlug = field.relationTo\n\n if (hasManyValues) {\n const results = []\n const resultPromises = []\n\n const createPopulationPromise = async (relatedDoc, i) => {\n let id = relatedDoc\n let collectionSlug = field.relationTo\n\n if (isRelatedToManyCollections) {\n collectionSlug = relatedDoc.relationTo\n id = relatedDoc.value\n }\n\n const result = await context.req.payloadDataLoader.load(\n JSON.stringify([\n context.req.transactionID,\n collectionSlug,\n id,\n 0,\n 0,\n locale,\n fallbackLocale,\n false,\n false,\n ]),\n )\n\n if (result) {\n if (isRelatedToManyCollections) {\n results[i] = {\n relationTo: collectionSlug,\n value: {\n ...result,\n collection: collectionSlug,\n },\n }\n } else {\n results[i] = result\n }\n }\n }\n\n if (value) {\n value.forEach((relatedDoc, i) => {\n resultPromises.push(createPopulationPromise(relatedDoc, i))\n })\n }\n\n await Promise.all(resultPromises)\n return results\n }\n\n let id = value\n if (isRelatedToManyCollections && value) {\n id = value.value\n relatedCollectionSlug = value.relationTo\n }\n\n if (id) {\n const relatedDocument = await context.req.payloadDataLoader.load(\n JSON.stringify([\n context.req.transactionID,\n relatedCollectionSlug,\n id,\n 0,\n 0,\n locale,\n fallbackLocale,\n false,\n false,\n ]),\n )\n\n if (relatedDocument) {\n if (isRelatedToManyCollections) {\n return {\n relationTo: relatedCollectionSlug,\n value: {\n ...relatedDocument,\n collection: relatedCollectionSlug,\n },\n }\n }\n\n return relatedDocument\n }\n\n return null\n }\n\n return null\n },\n }\n\n return {\n ...objectTypeConfig,\n [field.name]: relationship,\n }\n },\n richText: (objectTypeConfig: ObjectTypeConfig, field: RichTextField) => ({\n ...objectTypeConfig,\n [field.name]: {\n type: withNullableType(field, GraphQLJSON, forceNullable),\n args: {\n depth: {\n type: GraphQLInt,\n },\n },\n async resolve(parent, args, context: Context) {\n let depth = config.defaultDepth\n if (typeof args.depth !== 'undefined') depth = args.depth\n const editor: RichTextAdapter = field?.editor\n\n // RichText fields have their own depth argument in GraphQL.\n // This is why the populationPromise (which populates richtext fields like uploads and relationships)\n // is run here again, with the provided depth.\n // In the graphql find.ts resolver, the depth is then hard-coded to 0.\n // Effectively, this means that the populationPromise for GraphQL is only run here, and not in the find.ts resolver / normal population promise.\n if (editor?.populationPromise) {\n await editor?.populationPromise({\n context,\n depth,\n field,\n findMany: false,\n flattenLocales: false,\n overrideAccess: false,\n populationPromises: [],\n req: context.req,\n showHiddenFields: false,\n siblingDoc: parent,\n })\n }\n\n return parent[field.name]\n },\n },\n }),\n row: (objectTypeConfig: ObjectTypeConfig, field: RowField) =>\n field.fields.reduce((objectTypeConfigWithRowFields, subField) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) return addSubField(objectTypeConfigWithRowFields, subField)\n return objectTypeConfigWithRowFields\n }, objectTypeConfig),\n select: (objectTypeConfig: ObjectTypeConfig, field: SelectField) => {\n const fullName = combineParentName(parentName, field.name)\n\n let type: GraphQLType = new GraphQLEnumType({\n name: fullName,\n values: formatOptions(field),\n })\n\n type = field.hasMany ? new GraphQLList(new GraphQLNonNull(type)) : type\n type = withNullableType(field, type, forceNullable)\n\n return {\n ...objectTypeConfig,\n [field.name]: { type },\n }\n },\n tabs: (objectTypeConfig: ObjectTypeConfig, field: TabsField) =>\n field.tabs.reduce((tabSchema, tab) => {\n if (tabHasName(tab)) {\n const interfaceName =\n tab?.interfaceName || combineParentName(parentName, toWords(tab.name, true))\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n const objectType = buildObjectType({\n name: interfaceName,\n config,\n fields: tab.fields,\n forceNullable,\n graphqlResult,\n parentName: interfaceName,\n })\n\n if (Object.keys(objectType.getFields()).length) {\n graphqlResult.types.groupTypes[interfaceName] = objectType\n }\n }\n\n if (!graphqlResult.types.groupTypes[interfaceName]) {\n return tabSchema\n }\n\n return {\n ...tabSchema,\n [tab.name]: { type: graphqlResult.types.groupTypes[interfaceName] },\n }\n }\n\n return {\n ...tabSchema,\n ...tab.fields.reduce((subFieldSchema, subField) => {\n const addSubField = fieldToSchemaMap[subField.type]\n if (addSubField) return addSubField(subFieldSchema, subField)\n return subFieldSchema\n }, tabSchema),\n }\n }, objectTypeConfig),\n text: (objectTypeConfig: ObjectTypeConfig, field: TextField) => ({\n ...objectTypeConfig,\n [field.name]: {\n type: withNullableType(\n field,\n field.hasMany === true ? new GraphQLList(GraphQLString) : GraphQLString,\n forceNullable,\n ),\n },\n }),\n textarea: (objectTypeConfig: ObjectTypeConfig, field: TextareaField) => ({\n ...objectTypeConfig,\n [field.name]: { type: withNullableType(field, GraphQLString, forceNullable) },\n }),\n upload: (objectTypeConfig: ObjectTypeConfig, field: UploadField) => {\n const { relationTo } = field\n\n const uploadName = combineParentName(parentName, toWords(field.name, true))\n\n // If the relationshipType is undefined at this point,\n // it can be assumed that this blockType can have a relationship\n // to itself. Therefore, we set the relationshipType equal to the blockType\n // that is currently being created.\n\n const type = withNullableType(\n field,\n graphqlResult.collections[relationTo].graphQL.type || newlyCreatedBlockType,\n forceNullable,\n )\n\n const uploadArgs = {} as LocaleInputType\n\n if (config.localization) {\n uploadArgs.locale = {\n type: graphqlResult.types.localeInputType,\n }\n\n uploadArgs.fallbackLocale = {\n type: graphqlResult.types.fallbackLocaleInputType,\n }\n }\n\n const relatedCollectionSlug = field.relationTo\n\n const upload = {\n type,\n args: uploadArgs,\n extensions: { complexity: 20 },\n async resolve(parent, args, context: Context) {\n const value = parent[field.name]\n const locale = args.locale || context.req.locale\n const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale\n const id = value\n\n if (id) {\n const relatedDocument = await context.req.payloadDataLoader.load(\n JSON.stringify([\n context.req.transactionID,\n relatedCollectionSlug,\n id,\n 0,\n 0,\n locale,\n fallbackLocale,\n false,\n false,\n ]),\n )\n\n return relatedDocument || null\n }\n\n return null\n },\n }\n\n const whereFields = graphqlResult.collections[relationTo].config.fields\n\n upload.args.where = {\n type: buildWhereInputType({\n name: uploadName,\n fields: whereFields,\n parentName: uploadName,\n }),\n }\n\n return {\n ...objectTypeConfig,\n [field.name]: upload,\n }\n },\n }\n\n const objectSchema = {\n name,\n fields: () =>\n fields.reduce((objectTypeConfig, field) => {\n const fieldSchema = fieldToSchemaMap[field.type]\n\n if (typeof fieldSchema !== 'function') {\n return objectTypeConfig\n }\n\n return {\n ...objectTypeConfig,\n ...fieldSchema(objectTypeConfig, field),\n }\n }, baseFields),\n }\n\n const newlyCreatedBlockType = new GraphQLObjectType(objectSchema)\n\n return newlyCreatedBlockType\n}\n\nexport default buildObjectType\n"],"names":["GraphQLBoolean","GraphQLEnumType","GraphQLFloat","GraphQLInt","GraphQLList","GraphQLNonNull","GraphQLObjectType","GraphQLString","GraphQLUnionType","DateTimeResolver","EmailAddressResolver","GraphQLJSON","tabHasName","toWords","combineParentName","formatName","formatOptions","buildWhereInputType","isFieldNullable","withNullableType","buildObjectType","name","baseFields","config","fields","forceNullable","graphqlResult","parentName","fieldToSchemaMap","array","objectTypeConfig","field","interfaceName","types","arrayTypes","objectType","Object","keys","getFields","length","arrayType","type","blocks","blockTypes","reduce","acc","block","slug","graphQL","singularName","push","fullName","resolveType","data","blockType","checkbox","code","collapsible","objectTypeConfigWithCollapsibleFields","subField","addSubField","date","email","group","groupTypes","json","number","hasMany","point","radio","values","relationship","relationTo","isRelatedToManyCollections","Array","isArray","hasManyValues","relationshipName","relationToType","relations","relation","value","map","collections","req","collection","newlyCreatedBlockType","relationshipArgs","localization","locale","localeInputType","fallbackLocale","fallbackLocaleInputType","args","extensions","complexity","resolve","parent","context","relatedCollectionSlug","results","resultPromises","createPopulationPromise","relatedDoc","i","id","collectionSlug","result","payloadDataLoader","load","JSON","stringify","transactionID","forEach","Promise","all","relatedDocument","richText","depth","defaultDepth","editor","populationPromise","findMany","flattenLocales","overrideAccess","populationPromises","showHiddenFields","siblingDoc","row","objectTypeConfigWithRowFields","select","tabs","tabSchema","tab","subFieldSchema","text","textarea","upload","uploadName","uploadArgs","whereFields","where","objectSchema","fieldSchema"],"mappings":"AAAA,0DAA0D,GAC1D,mCAAmC,GACnC,uCAAuC,GA6BvC,SACEA,cAAc,EACdC,eAAe,EACfC,YAAY,EACZC,UAAU,EACVC,WAAW,EACXC,cAAc,EACdC,iBAAiB,EACjBC,aAAa,EACbC,gBAAgB,QACX,UAAS;AAChB,SAASC,gBAAgB,EAAEC,oBAAoB,QAAQ,kBAAiB;AACxE,uCAAuC,GACvC,SAASC,WAAW,QAAQ,oBAAmB;AAC/C,SAASC,UAAU,QAAQ,gBAAe;AAC1C,SAASC,OAAO,QAAQ,oBAAmB;AAI3C,OAAOC,uBAAuB,oCAAmC;AACjE,OAAOC,gBAAgB,6BAA4B;AACnD,OAAOC,mBAAmB,gCAA+B;AACzD,OAAOC,yBAAyB,2BAA0B;AAC1D,OAAOC,qBAAqB,uBAAsB;AAClD,OAAOC,sBAAsB,wBAAuB;AA4BpD,SAASC,gBAAgB,EACvBC,IAAI,EACJC,aAAa,CAAC,CAAC,EACfC,MAAM,EACNC,MAAM,EACNC,aAAa,EACbC,aAAa,EACbC,UAAU,EACL;IACL,MAAMC,mBAAmB;QACvBC,OAAO,CAACC,kBAAoCC;YAC1C,MAAMC,gBACJD,OAAOC,iBAAiBlB,kBAAkBa,YAAYd,QAAQkB,MAAMV,IAAI,EAAE;YAE5E,IAAI,CAACK,cAAcO,KAAK,CAACC,UAAU,CAACF,cAAc,EAAE;gBAClD,MAAMG,aAAaf,gBAAgB;oBACjCC,MAAMW;oBACNT;oBACAC,QAAQO,MAAMP,MAAM;oBACpBC,eAAeP,gBAAgBa,OAAON;oBACtCC;oBACAC,YAAYK;gBACd;gBAEA,IAAII,OAAOC,IAAI,CAACF,WAAWG,SAAS,IAAIC,MAAM,EAAE;oBAC9Cb,cAAcO,KAAK,CAACC,UAAU,CAACF,cAAc,GAAGG;gBAClD;YACF;YAEA,IAAI,CAACT,cAAcO,KAAK,CAACC,UAAU,CAACF,cAAc,EAAE;gBAClD,OAAOF;YACT;YAEA,MAAMU,YAAY,IAAIpC,YACpB,IAAIC,eAAeqB,cAAcO,KAAK,CAACC,UAAU,CAACF,cAAc;YAGlE,OAAO;gBACL,GAAGF,gBAAgB;gBACnB,CAACC,MAAMV,IAAI,CAAC,EAAE;oBAAEoB,MAAMtB,iBAAiBY,OAAOS;gBAAW;YAC3D;QACF;QACAE,QAAQ,CAACZ,kBAAoCC;YAC3C,MAAMY,aAA4CZ,MAAMW,MAAM,CAACE,MAAM,CAAC,CAACC,KAAKC;gBAC1E,IAAI,CAACpB,cAAcO,KAAK,CAACU,UAAU,CAACG,MAAMC,IAAI,CAAC,EAAE;oBAC/C,MAAMf,gBACJc,OAAOd,iBAAiBc,OAAOE,SAASC,gBAAgBpC,QAAQiC,MAAMC,IAAI,EAAE;oBAE9E,MAAMZ,aAAaf,gBAAgB;wBACjCC,MAAMW;wBACNT;wBACAC,QAAQ;+BACHsB,MAAMtB,MAAM;4BACf;gCACEH,MAAM;gCACNoB,MAAM;4BACR;yBACD;wBACDhB;wBACAC;wBACAC,
|
|
@@ -1,52 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _graphql = require("graphql");
|
|
12
|
-
const buildPaginatedListType = (name, docType)=>new _graphql.GraphQLObjectType({
|
|
1
|
+
import { GraphQLBoolean, GraphQLInt, GraphQLList, GraphQLObjectType } from 'graphql';
|
|
2
|
+
const buildPaginatedListType = (name, docType)=>new GraphQLObjectType({
|
|
13
3
|
name,
|
|
14
4
|
fields: {
|
|
15
5
|
docs: {
|
|
16
|
-
type: new
|
|
6
|
+
type: new GraphQLList(docType)
|
|
17
7
|
},
|
|
18
8
|
hasNextPage: {
|
|
19
|
-
type:
|
|
9
|
+
type: GraphQLBoolean
|
|
20
10
|
},
|
|
21
11
|
hasPrevPage: {
|
|
22
|
-
type:
|
|
12
|
+
type: GraphQLBoolean
|
|
23
13
|
},
|
|
24
14
|
limit: {
|
|
25
|
-
type:
|
|
15
|
+
type: GraphQLInt
|
|
26
16
|
},
|
|
27
17
|
nextPage: {
|
|
28
|
-
type:
|
|
18
|
+
type: GraphQLInt
|
|
29
19
|
},
|
|
30
20
|
offset: {
|
|
31
|
-
type:
|
|
21
|
+
type: GraphQLInt
|
|
32
22
|
},
|
|
33
23
|
page: {
|
|
34
|
-
type:
|
|
24
|
+
type: GraphQLInt
|
|
35
25
|
},
|
|
36
26
|
pagingCounter: {
|
|
37
|
-
type:
|
|
27
|
+
type: GraphQLInt
|
|
38
28
|
},
|
|
39
29
|
prevPage: {
|
|
40
|
-
type:
|
|
30
|
+
type: GraphQLInt
|
|
41
31
|
},
|
|
42
32
|
totalDocs: {
|
|
43
|
-
type:
|
|
33
|
+
type: GraphQLInt
|
|
44
34
|
},
|
|
45
35
|
totalPages: {
|
|
46
|
-
type:
|
|
36
|
+
type: GraphQLInt
|
|
47
37
|
}
|
|
48
38
|
}
|
|
49
39
|
});
|
|
50
|
-
|
|
40
|
+
export default buildPaginatedListType;
|
|
51
41
|
|
|
52
|
-
//# sourceMappingURL=
|
|
42
|
+
//# sourceMappingURL=buildPaginatedListType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/schema/buildPaginatedListType.ts"],"sourcesContent":["import { GraphQLBoolean, GraphQLInt, GraphQLList, GraphQLObjectType } from 'graphql'\n\nconst buildPaginatedListType = (name, docType) =>\n new GraphQLObjectType({\n name,\n fields: {\n docs: {\n type: new GraphQLList(docType),\n },\n hasNextPage: { type: GraphQLBoolean },\n hasPrevPage: { type: GraphQLBoolean },\n limit: { type: GraphQLInt },\n nextPage: { type: GraphQLInt },\n offset: { type: GraphQLInt },\n page: { type: GraphQLInt },\n pagingCounter: { type: GraphQLInt },\n prevPage: { type: GraphQLInt },\n totalDocs: { type: GraphQLInt },\n totalPages: { type: GraphQLInt },\n },\n })\n\nexport default buildPaginatedListType\n"],"names":["GraphQLBoolean","GraphQLInt","GraphQLList","GraphQLObjectType","buildPaginatedListType","name","docType","fields","docs","type","hasNextPage","hasPrevPage","limit","nextPage","offset","page","pagingCounter","prevPage","totalDocs","totalPages"],"mappings":"AAAA,SAASA,cAAc,EAAEC,UAAU,EAAEC,WAAW,EAAEC,iBAAiB,QAAQ,UAAS;AAEpF,MAAMC,yBAAyB,CAACC,MAAMC,UACpC,IAAIH,kBAAkB;QACpBE;QACAE,QAAQ;YACNC,MAAM;gBACJC,MAAM,IAAIP,YAAYI;YACxB;YACAI,aAAa;gBAAED,MAAMT;YAAe;YACpCW,aAAa;gBAAEF,MAAMT;YAAe;YACpCY,OAAO;gBAAEH,MAAMR;YAAW;YAC1BY,UAAU;gBAAEJ,MAAMR;YAAW;YAC7Ba,QAAQ;gBAAEL,MAAMR;YAAW;YAC3Bc,MAAM;gBAAEN,MAAMR;YAAW;YACzBe,eAAe;gBAAEP,MAAMR;YAAW;YAClCgB,UAAU;gBAAER,MAAMR;YAAW;YAC7BiB,WAAW;gBAAET,MAAMR;YAAW;YAC9BkB,YAAY;gBAAEV,MAAMR;YAAW;QACjC;IACF;AAEF,eAAeG,uBAAsB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GraphQLObjectType } from 'graphql';
|
|
2
1
|
import type { CollectionConfig, Field, GlobalConfig, SanitizedConfig } from 'payload/types';
|
|
2
|
+
import { GraphQLObjectType } from 'graphql';
|
|
3
3
|
type OperationType = 'create' | 'delete' | 'read' | 'readVersions' | 'unlock' | 'update';
|
|
4
4
|
type AccessScopes = 'docAccess' | undefined;
|
|
5
5
|
type BuildEntityPolicy = {
|