@payloadcms/graphql 3.0.0-alpha.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.
Files changed (156) hide show
  1. package/dist/index.d.ts +8 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +162 -0
  4. package/dist/resolvers/auth/access.d.ts +5 -0
  5. package/dist/resolvers/auth/access.d.ts.map +1 -0
  6. package/dist/resolvers/auth/access.js +48 -0
  7. package/dist/resolvers/auth/forgotPassword.d.ts +4 -0
  8. package/dist/resolvers/auth/forgotPassword.d.ts.map +1 -0
  9. package/dist/resolvers/auth/forgotPassword.js +31 -0
  10. package/dist/resolvers/auth/init.d.ts +4 -0
  11. package/dist/resolvers/auth/init.d.ts.map +1 -0
  12. package/dist/resolvers/auth/init.js +25 -0
  13. package/dist/resolvers/auth/login.d.ts +7 -0
  14. package/dist/resolvers/auth/login.d.ts.map +1 -0
  15. package/dist/resolvers/auth/login.js +41 -0
  16. package/dist/resolvers/auth/logout.d.ts +4 -0
  17. package/dist/resolvers/auth/logout.d.ts.map +1 -0
  18. package/dist/resolvers/auth/logout.js +32 -0
  19. package/dist/resolvers/auth/me.d.ts +4 -0
  20. package/dist/resolvers/auth/me.d.ts.map +1 -0
  21. package/dist/resolvers/auth/me.js +30 -0
  22. package/dist/resolvers/auth/refresh.d.ts +5 -0
  23. package/dist/resolvers/auth/refresh.d.ts.map +1 -0
  24. package/dist/resolvers/auth/refresh.js +43 -0
  25. package/dist/resolvers/auth/resetPassword.d.ts +5 -0
  26. package/dist/resolvers/auth/resetPassword.d.ts.map +1 -0
  27. package/dist/resolvers/auth/resetPassword.js +41 -0
  28. package/dist/resolvers/auth/unlock.d.ts +5 -0
  29. package/dist/resolvers/auth/unlock.d.ts.map +1 -0
  30. package/dist/resolvers/auth/unlock.js +29 -0
  31. package/dist/resolvers/auth/verifyEmail.d.ts +5 -0
  32. package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -0
  33. package/dist/resolvers/auth/verifyEmail.js +30 -0
  34. package/dist/resolvers/collections/create.d.ts +13 -0
  35. package/dist/resolvers/collections/create.d.ts.map +1 -0
  36. package/dist/resolvers/collections/create.js +30 -0
  37. package/dist/resolvers/collections/delete.d.ts +11 -0
  38. package/dist/resolvers/collections/delete.d.ts.map +1 -0
  39. package/dist/resolvers/collections/delete.js +34 -0
  40. package/dist/resolvers/collections/docAccess.d.ts +9 -0
  41. package/dist/resolvers/collections/docAccess.d.ts.map +1 -0
  42. package/dist/resolvers/collections/docAccess.js +24 -0
  43. package/dist/resolvers/collections/find.d.ts +17 -0
  44. package/dist/resolvers/collections/find.d.ts.map +1 -0
  45. package/dist/resolvers/collections/find.js +37 -0
  46. package/dist/resolvers/collections/findByID.d.ts +13 -0
  47. package/dist/resolvers/collections/findByID.d.ts.map +1 -0
  48. package/dist/resolvers/collections/findByID.js +34 -0
  49. package/dist/resolvers/collections/findVersionByID.d.ts +13 -0
  50. package/dist/resolvers/collections/findVersionByID.d.ts.map +1 -0
  51. package/dist/resolvers/collections/findVersionByID.js +34 -0
  52. package/dist/resolvers/collections/findVersions.d.ts +15 -0
  53. package/dist/resolvers/collections/findVersions.d.ts.map +1 -0
  54. package/dist/resolvers/collections/findVersions.js +37 -0
  55. package/dist/resolvers/collections/restoreVersion.d.ts +9 -0
  56. package/dist/resolvers/collections/restoreVersion.d.ts.map +1 -0
  57. package/dist/resolvers/collections/restoreVersion.js +27 -0
  58. package/dist/resolvers/collections/update.d.ts +14 -0
  59. package/dist/resolvers/collections/update.d.ts.map +1 -0
  60. package/dist/resolvers/collections/update.js +37 -0
  61. package/dist/resolvers/globals/docAccess.d.ts +7 -0
  62. package/dist/resolvers/globals/docAccess.d.ts.map +1 -0
  63. package/dist/resolvers/globals/docAccess.js +23 -0
  64. package/dist/resolvers/globals/findOne.d.ts +3 -0
  65. package/dist/resolvers/globals/findOne.d.ts.map +1 -0
  66. package/dist/resolvers/globals/findOne.js +30 -0
  67. package/dist/resolvers/globals/findVersionByID.d.ts +11 -0
  68. package/dist/resolvers/globals/findVersionByID.d.ts.map +1 -0
  69. package/dist/resolvers/globals/findVersionByID.js +29 -0
  70. package/dist/resolvers/globals/findVersions.d.ts +13 -0
  71. package/dist/resolvers/globals/findVersions.d.ts.map +1 -0
  72. package/dist/resolvers/globals/findVersions.js +29 -0
  73. package/dist/resolvers/globals/index.d.ts +7 -0
  74. package/dist/resolvers/globals/index.d.ts.map +1 -0
  75. package/dist/resolvers/globals/index.js +39 -0
  76. package/dist/resolvers/globals/restoreVersion.d.ts +9 -0
  77. package/dist/resolvers/globals/restoreVersion.d.ts.map +1 -0
  78. package/dist/resolvers/globals/restoreVersion.js +26 -0
  79. package/dist/resolvers/globals/update.d.ts +14 -0
  80. package/dist/resolvers/globals/update.d.ts.map +1 -0
  81. package/dist/resolvers/globals/update.js +31 -0
  82. package/dist/resolvers/types.d.ts +8 -0
  83. package/dist/resolvers/types.d.ts.map +1 -0
  84. package/dist/resolvers/types.js +6 -0
  85. package/dist/schema/buildFallbackLocaleInputType.d.ts +5 -0
  86. package/dist/schema/buildFallbackLocaleInputType.d.ts.map +1 -0
  87. package/dist/schema/buildFallbackLocaleInputType.js +34 -0
  88. package/dist/schema/buildLocaleInputType.d.ts +6 -0
  89. package/dist/schema/buildLocaleInputType.d.ts.map +1 -0
  90. package/dist/schema/buildLocaleInputType.js +31 -0
  91. package/dist/schema/buildMutationInputType.d.ts +23 -0
  92. package/dist/schema/buildMutationInputType.d.ts.map +1 -0
  93. package/dist/schema/buildMutationInputType.js +293 -0
  94. package/dist/schema/buildObjectType.d.ts +19 -0
  95. package/dist/schema/buildObjectType.d.ts.map +1 -0
  96. package/dist/schema/buildObjectType.js +508 -0
  97. package/dist/schema/buildPaginatedListType.d.ts +4 -0
  98. package/dist/schema/buildPaginatedListType.d.ts.map +1 -0
  99. package/dist/schema/buildPaginatedListType.js +52 -0
  100. package/dist/schema/buildPoliciesType.d.ts +29 -0
  101. package/dist/schema/buildPoliciesType.d.ts.map +1 -0
  102. package/dist/schema/buildPoliciesType.js +210 -0
  103. package/dist/schema/buildWhereInputType.d.ts +24 -0
  104. package/dist/schema/buildWhereInputType.d.ts.map +1 -0
  105. package/dist/schema/buildWhereInputType.js +102 -0
  106. package/dist/schema/fieldToWhereInputSchemaMap.d.ts +7 -0
  107. package/dist/schema/fieldToWhereInputSchemaMap.d.ts.map +1 -0
  108. package/dist/schema/fieldToWhereInputSchemaMap.js +118 -0
  109. package/dist/schema/initCollections.d.ts +9 -0
  110. package/dist/schema/initCollections.d.ts.map +1 -0
  111. package/dist/schema/initCollections.js +492 -0
  112. package/dist/schema/initGlobals.d.ts +9 -0
  113. package/dist/schema/initGlobals.d.ts.map +1 -0
  114. package/dist/schema/initGlobals.js +193 -0
  115. package/dist/schema/isFieldNullable.d.ts +4 -0
  116. package/dist/schema/isFieldNullable.d.ts.map +1 -0
  117. package/dist/schema/isFieldNullable.js +19 -0
  118. package/dist/schema/operators.d.ts +10 -0
  119. package/dist/schema/operators.d.ts.map +1 -0
  120. package/dist/schema/operators.js +41 -0
  121. package/dist/schema/recursivelyBuildNestedPaths.d.ts +9 -0
  122. package/dist/schema/recursivelyBuildNestedPaths.d.ts.map +1 -0
  123. package/dist/schema/recursivelyBuildNestedPaths.js +79 -0
  124. package/dist/schema/withNullableType.d.ts +5 -0
  125. package/dist/schema/withNullableType.d.ts.map +1 -0
  126. package/dist/schema/withNullableType.js +23 -0
  127. package/dist/schema/withOperators.d.ts +16 -0
  128. package/dist/schema/withOperators.d.ts.map +1 -0
  129. package/dist/schema/withOperators.js +296 -0
  130. package/dist/utilities/combineParentName.d.ts +3 -0
  131. package/dist/utilities/combineParentName.d.ts.map +1 -0
  132. package/dist/utilities/combineParentName.js +20 -0
  133. package/dist/utilities/formatName.d.ts +3 -0
  134. package/dist/utilities/formatName.d.ts.map +1 -0
  135. package/dist/utilities/formatName.js +35 -0
  136. package/dist/utilities/formatName.spec.js +26 -0
  137. package/dist/utilities/formatOptions.d.ts +4 -0
  138. package/dist/utilities/formatOptions.d.ts.map +1 -0
  139. package/dist/utilities/formatOptions.js +37 -0
  140. package/dist/utilities/getCheckIfLocaleObject.d.ts +5 -0
  141. package/dist/utilities/getCheckIfLocaleObject.d.ts.map +1 -0
  142. package/dist/utilities/getCheckIfLocaleObject.js +13 -0
  143. package/dist/utilities/groupOrTabHasRequiredSubfield.d.ts +3 -0
  144. package/dist/utilities/groupOrTabHasRequiredSubfield.d.ts.map +1 -0
  145. package/dist/utilities/groupOrTabHasRequiredSubfield.js +24 -0
  146. package/dist/utilities/isolateTransactionID.d.ts +2 -0
  147. package/dist/utilities/isolateTransactionID.d.ts.map +1 -0
  148. package/dist/utilities/isolateTransactionID.js +3 -0
  149. package/dist/utilities/uppercase.d.ts +3 -0
  150. package/dist/utilities/uppercase.d.ts.map +1 -0
  151. package/dist/utilities/uppercase.js +21 -0
  152. package/dist/utilities/wrapCustomResolver.d.ts +9 -0
  153. package/dist/utilities/wrapCustomResolver.d.ts.map +1 -0
  154. package/dist/utilities/wrapCustomResolver.js +29 -0
  155. package/package.json +42 -0
  156. package/src/index.ts +126 -0
@@ -0,0 +1,508 @@
1
+ /* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable no-await-in-loop */ /* eslint-disable no-restricted-syntax */ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
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 _graphqlscalars = require("graphql-scalars");
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 }) {
28
+ const fieldToSchemaMap = {
29
+ array: (objectTypeConfig, field)=>{
30
+ const interfaceName = field?.interfaceName || (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
31
+ if (!graphqlResult.types.arrayTypes[interfaceName]) {
32
+ const objectType = buildObjectType({
33
+ name: interfaceName,
34
+ fields: field.fields,
35
+ forceNullable: (0, _isFieldNullable.default)(field, forceNullable),
36
+ parentName: interfaceName,
37
+ graphqlResult,
38
+ config
39
+ });
40
+ if (Object.keys(objectType.getFields()).length) {
41
+ graphqlResult.types.arrayTypes[interfaceName] = objectType;
42
+ }
43
+ }
44
+ if (!graphqlResult.types.arrayTypes[interfaceName]) {
45
+ return objectTypeConfig;
46
+ }
47
+ const arrayType = new _graphql.GraphQLList(new _graphql.GraphQLNonNull(graphqlResult.types.arrayTypes[interfaceName]));
48
+ return {
49
+ ...objectTypeConfig,
50
+ [field.name]: {
51
+ type: (0, _withNullableType.default)(field, arrayType)
52
+ }
53
+ };
54
+ },
55
+ blocks: (objectTypeConfig, field)=>{
56
+ const blockTypes = field.blocks.reduce((acc, block)=>{
57
+ if (!graphqlResult.types.blockTypes[block.slug]) {
58
+ const interfaceName = block?.interfaceName || block?.graphQL?.singularName || (0, _utilities.toWords)(block.slug, true);
59
+ const objectType = buildObjectType({
60
+ name: interfaceName,
61
+ fields: [
62
+ ...block.fields,
63
+ {
64
+ name: 'blockType',
65
+ type: 'text'
66
+ }
67
+ ],
68
+ forceNullable,
69
+ parentName: interfaceName,
70
+ graphqlResult,
71
+ config
72
+ });
73
+ if (Object.keys(objectType.getFields()).length) {
74
+ graphqlResult.types.blockTypes[block.slug] = objectType;
75
+ }
76
+ }
77
+ if (graphqlResult.types.blockTypes[block.slug]) {
78
+ acc.push(graphqlResult.types.blockTypes[block.slug]);
79
+ }
80
+ return acc;
81
+ }, []);
82
+ if (blockTypes.length === 0) {
83
+ return objectTypeConfig;
84
+ }
85
+ const fullName = (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
86
+ const type = new _graphql.GraphQLList(new _graphql.GraphQLNonNull(new _graphql.GraphQLUnionType({
87
+ name: fullName,
88
+ resolveType: (data)=>graphqlResult.types.blockTypes[data.blockType].name,
89
+ types: blockTypes
90
+ })));
91
+ return {
92
+ ...objectTypeConfig,
93
+ [field.name]: {
94
+ type: (0, _withNullableType.default)(field, type)
95
+ }
96
+ };
97
+ },
98
+ checkbox: (objectTypeConfig, field)=>({
99
+ ...objectTypeConfig,
100
+ [field.name]: {
101
+ type: (0, _withNullableType.default)(field, _graphql.GraphQLBoolean, forceNullable)
102
+ }
103
+ }),
104
+ code: (objectTypeConfig, field)=>({
105
+ ...objectTypeConfig,
106
+ [field.name]: {
107
+ type: (0, _withNullableType.default)(field, _graphql.GraphQLString, forceNullable)
108
+ }
109
+ }),
110
+ collapsible: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithCollapsibleFields, subField)=>{
111
+ const addSubField = fieldToSchemaMap[subField.type];
112
+ if (addSubField) return addSubField(objectTypeConfigWithCollapsibleFields, subField);
113
+ return objectTypeConfigWithCollapsibleFields;
114
+ }, objectTypeConfig),
115
+ date: (objectTypeConfig, field)=>({
116
+ ...objectTypeConfig,
117
+ [field.name]: {
118
+ type: (0, _withNullableType.default)(field, _graphqlscalars.DateTimeResolver, forceNullable)
119
+ }
120
+ }),
121
+ email: (objectTypeConfig, field)=>({
122
+ ...objectTypeConfig,
123
+ [field.name]: {
124
+ type: (0, _withNullableType.default)(field, _graphqlscalars.EmailAddressResolver, forceNullable)
125
+ }
126
+ }),
127
+ group: (objectTypeConfig, field)=>{
128
+ const interfaceName = field?.interfaceName || (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
129
+ if (!graphqlResult.types.groupTypes[interfaceName]) {
130
+ const objectType = buildObjectType({
131
+ name: interfaceName,
132
+ fields: field.fields,
133
+ forceNullable: (0, _isFieldNullable.default)(field, forceNullable),
134
+ parentName: interfaceName,
135
+ graphqlResult,
136
+ config
137
+ });
138
+ if (Object.keys(objectType.getFields()).length) {
139
+ graphqlResult.types.groupTypes[interfaceName] = objectType;
140
+ }
141
+ }
142
+ if (!graphqlResult.types.groupTypes[interfaceName]) {
143
+ return objectTypeConfig;
144
+ }
145
+ return {
146
+ ...objectTypeConfig,
147
+ [field.name]: {
148
+ type: graphqlResult.types.groupTypes[interfaceName]
149
+ }
150
+ };
151
+ },
152
+ json: (objectTypeConfig, field)=>({
153
+ ...objectTypeConfig,
154
+ [field.name]: {
155
+ type: (0, _withNullableType.default)(field, _graphqltypejson.GraphQLJSON, forceNullable)
156
+ }
157
+ }),
158
+ number: (objectTypeConfig, field)=>{
159
+ const type = field?.name === 'id' ? _graphql.GraphQLInt : _graphql.GraphQLFloat;
160
+ return {
161
+ ...objectTypeConfig,
162
+ [field.name]: {
163
+ type: (0, _withNullableType.default)(field, field?.hasMany === true ? new _graphql.GraphQLList(type) : type, forceNullable)
164
+ }
165
+ };
166
+ },
167
+ point: (objectTypeConfig, field)=>({
168
+ ...objectTypeConfig,
169
+ [field.name]: {
170
+ type: (0, _withNullableType.default)(field, new _graphql.GraphQLList(new _graphql.GraphQLNonNull(_graphql.GraphQLFloat)), forceNullable)
171
+ }
172
+ }),
173
+ radio: (objectTypeConfig, field)=>({
174
+ ...objectTypeConfig,
175
+ [field.name]: {
176
+ type: (0, _withNullableType.default)(field, new _graphql.GraphQLEnumType({
177
+ name: (0, _combineParentName.default)(parentName, field.name),
178
+ values: (0, _formatOptions.default)(field)
179
+ }), forceNullable)
180
+ }
181
+ }),
182
+ relationship: (objectTypeConfig, field)=>{
183
+ const { relationTo } = field;
184
+ const isRelatedToManyCollections = Array.isArray(relationTo);
185
+ const hasManyValues = field.hasMany;
186
+ const relationshipName = (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
187
+ let type;
188
+ let relationToType = null;
189
+ if (Array.isArray(relationTo)) {
190
+ relationToType = new _graphql.GraphQLEnumType({
191
+ name: `${relationshipName}_RelationTo`,
192
+ values: relationTo.reduce((relations, relation)=>({
193
+ ...relations,
194
+ [(0, _formatName.default)(relation)]: {
195
+ value: relation
196
+ }
197
+ }), {})
198
+ });
199
+ const types = relationTo.map((relation)=>graphqlResult.collections[relation].graphQL.type);
200
+ type = new _graphql.GraphQLObjectType({
201
+ name: `${relationshipName}_Relationship`,
202
+ fields: {
203
+ relationTo: {
204
+ type: relationToType
205
+ },
206
+ value: {
207
+ type: new _graphql.GraphQLUnionType({
208
+ name: relationshipName,
209
+ async resolveType (data, { req }) {
210
+ return graphqlResult.collections[data.collection].graphQL.type.name;
211
+ },
212
+ types
213
+ })
214
+ }
215
+ }
216
+ });
217
+ } else {
218
+ ({ type } = graphqlResult.collections[relationTo].graphQL);
219
+ }
220
+ // If the relationshipType is undefined at this point,
221
+ // it can be assumed that this blockType can have a relationship
222
+ // to itself. Therefore, we set the relationshipType equal to the blockType
223
+ // that is currently being created.
224
+ type = type || newlyCreatedBlockType;
225
+ const relationshipArgs = {};
226
+ if (config.localization) {
227
+ relationshipArgs.locale = {
228
+ type: graphqlResult.types.localeInputType
229
+ };
230
+ relationshipArgs.fallbackLocale = {
231
+ type: graphqlResult.types.fallbackLocaleInputType
232
+ };
233
+ }
234
+ const relationship = {
235
+ args: relationshipArgs,
236
+ extensions: {
237
+ complexity: 10
238
+ },
239
+ async resolve (parent, args, context) {
240
+ const value = parent[field.name];
241
+ const locale = args.locale || context.req.locale;
242
+ const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
243
+ let relatedCollectionSlug = field.relationTo;
244
+ if (hasManyValues) {
245
+ const results = [];
246
+ const resultPromises = [];
247
+ const createPopulationPromise = async (relatedDoc, i)=>{
248
+ let id = relatedDoc;
249
+ let collectionSlug = field.relationTo;
250
+ if (isRelatedToManyCollections) {
251
+ collectionSlug = relatedDoc.relationTo;
252
+ id = relatedDoc.value;
253
+ }
254
+ const result = await context.req.payloadDataLoader.load(JSON.stringify([
255
+ context.req.transactionID,
256
+ collectionSlug,
257
+ id,
258
+ 0,
259
+ 0,
260
+ locale,
261
+ fallbackLocale,
262
+ false,
263
+ false
264
+ ]));
265
+ if (result) {
266
+ if (isRelatedToManyCollections) {
267
+ results[i] = {
268
+ relationTo: collectionSlug,
269
+ value: {
270
+ ...result,
271
+ collection: collectionSlug
272
+ }
273
+ };
274
+ } else {
275
+ results[i] = result;
276
+ }
277
+ }
278
+ };
279
+ if (value) {
280
+ value.forEach((relatedDoc, i)=>{
281
+ resultPromises.push(createPopulationPromise(relatedDoc, i));
282
+ });
283
+ }
284
+ await Promise.all(resultPromises);
285
+ return results;
286
+ }
287
+ let id = value;
288
+ if (isRelatedToManyCollections && value) {
289
+ id = value.value;
290
+ relatedCollectionSlug = value.relationTo;
291
+ }
292
+ if (id) {
293
+ const relatedDocument = await context.req.payloadDataLoader.load(JSON.stringify([
294
+ context.req.transactionID,
295
+ relatedCollectionSlug,
296
+ id,
297
+ 0,
298
+ 0,
299
+ locale,
300
+ fallbackLocale,
301
+ false,
302
+ false
303
+ ]));
304
+ if (relatedDocument) {
305
+ if (isRelatedToManyCollections) {
306
+ return {
307
+ relationTo: relatedCollectionSlug,
308
+ value: {
309
+ ...relatedDocument,
310
+ collection: relatedCollectionSlug
311
+ }
312
+ };
313
+ }
314
+ return relatedDocument;
315
+ }
316
+ return null;
317
+ }
318
+ return null;
319
+ },
320
+ type: (0, _withNullableType.default)(field, hasManyValues ? new _graphql.GraphQLList(new _graphql.GraphQLNonNull(type)) : type, forceNullable)
321
+ };
322
+ return {
323
+ ...objectTypeConfig,
324
+ [field.name]: relationship
325
+ };
326
+ },
327
+ richText: (objectTypeConfig, field)=>({
328
+ ...objectTypeConfig,
329
+ [field.name]: {
330
+ args: {
331
+ depth: {
332
+ type: _graphql.GraphQLInt
333
+ }
334
+ },
335
+ async resolve (parent, args, context) {
336
+ let depth = config.defaultDepth;
337
+ if (typeof args.depth !== 'undefined') depth = args.depth;
338
+ const editor = field?.editor;
339
+ // RichText fields have their own depth argument in GraphQL.
340
+ // This is why the populationPromise (which populates richtext fields like uploads and relationships)
341
+ // is run here again, with the provided depth.
342
+ // In the graphql find.ts resolver, the depth is then hard-coded to 0.
343
+ // Effectively, this means that the populationPromise for GraphQL is only run here, and not in the find.ts resolver / normal population promise.
344
+ if (editor?.populationPromise) {
345
+ await editor?.populationPromise({
346
+ context,
347
+ depth,
348
+ field,
349
+ findMany: false,
350
+ flattenLocales: false,
351
+ overrideAccess: false,
352
+ populationPromises: [],
353
+ req: context.req,
354
+ showHiddenFields: false,
355
+ siblingDoc: parent
356
+ });
357
+ }
358
+ return parent[field.name];
359
+ },
360
+ type: (0, _withNullableType.default)(field, _graphqltypejson.GraphQLJSON, forceNullable)
361
+ }
362
+ }),
363
+ row: (objectTypeConfig, field)=>field.fields.reduce((objectTypeConfigWithRowFields, subField)=>{
364
+ const addSubField = fieldToSchemaMap[subField.type];
365
+ if (addSubField) return addSubField(objectTypeConfigWithRowFields, subField);
366
+ return objectTypeConfigWithRowFields;
367
+ }, objectTypeConfig),
368
+ select: (objectTypeConfig, field)=>{
369
+ const fullName = (0, _combineParentName.default)(parentName, field.name);
370
+ let type = new _graphql.GraphQLEnumType({
371
+ name: fullName,
372
+ values: (0, _formatOptions.default)(field)
373
+ });
374
+ type = field.hasMany ? new _graphql.GraphQLList(new _graphql.GraphQLNonNull(type)) : type;
375
+ type = (0, _withNullableType.default)(field, type, forceNullable);
376
+ return {
377
+ ...objectTypeConfig,
378
+ [field.name]: {
379
+ type
380
+ }
381
+ };
382
+ },
383
+ tabs: (objectTypeConfig, field)=>field.tabs.reduce((tabSchema, tab)=>{
384
+ if ((0, _types.tabHasName)(tab)) {
385
+ const interfaceName = tab?.interfaceName || (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(tab.name, true));
386
+ if (!graphqlResult.types.groupTypes[interfaceName]) {
387
+ const objectType = buildObjectType({
388
+ name: interfaceName,
389
+ fields: tab.fields,
390
+ forceNullable,
391
+ parentName: interfaceName,
392
+ graphqlResult,
393
+ config
394
+ });
395
+ if (Object.keys(objectType.getFields()).length) {
396
+ graphqlResult.types.groupTypes[interfaceName] = objectType;
397
+ }
398
+ }
399
+ if (!graphqlResult.types.groupTypes[interfaceName]) {
400
+ return tabSchema;
401
+ }
402
+ return {
403
+ ...tabSchema,
404
+ [tab.name]: {
405
+ type: graphqlResult.types.groupTypes[interfaceName]
406
+ }
407
+ };
408
+ }
409
+ return {
410
+ ...tabSchema,
411
+ ...tab.fields.reduce((subFieldSchema, subField)=>{
412
+ const addSubField = fieldToSchemaMap[subField.type];
413
+ if (addSubField) return addSubField(subFieldSchema, subField);
414
+ return subFieldSchema;
415
+ }, tabSchema)
416
+ };
417
+ }, objectTypeConfig),
418
+ text: (objectTypeConfig, field)=>({
419
+ ...objectTypeConfig,
420
+ [field.name]: {
421
+ type: (0, _withNullableType.default)(field, field.hasMany === true ? new _graphql.GraphQLList(_graphql.GraphQLString) : _graphql.GraphQLString, forceNullable)
422
+ }
423
+ }),
424
+ textarea: (objectTypeConfig, field)=>({
425
+ ...objectTypeConfig,
426
+ [field.name]: {
427
+ type: (0, _withNullableType.default)(field, _graphql.GraphQLString, forceNullable)
428
+ }
429
+ }),
430
+ upload: (objectTypeConfig, field)=>{
431
+ const { relationTo } = field;
432
+ const uploadName = (0, _combineParentName.default)(parentName, (0, _utilities.toWords)(field.name, true));
433
+ // If the relationshipType is undefined at this point,
434
+ // it can be assumed that this blockType can have a relationship
435
+ // to itself. Therefore, we set the relationshipType equal to the blockType
436
+ // that is currently being created.
437
+ const type = (0, _withNullableType.default)(field, graphqlResult.collections[relationTo].graphQL.type || newlyCreatedBlockType, forceNullable);
438
+ const uploadArgs = {};
439
+ if (config.localization) {
440
+ uploadArgs.locale = {
441
+ type: graphqlResult.types.localeInputType
442
+ };
443
+ uploadArgs.fallbackLocale = {
444
+ type: graphqlResult.types.fallbackLocaleInputType
445
+ };
446
+ }
447
+ const relatedCollectionSlug = field.relationTo;
448
+ const upload = {
449
+ args: uploadArgs,
450
+ extensions: {
451
+ complexity: 20
452
+ },
453
+ async resolve (parent, args, context) {
454
+ const value = parent[field.name];
455
+ const locale = args.locale || context.req.locale;
456
+ const fallbackLocale = args.fallbackLocale || context.req.fallbackLocale;
457
+ const id = value;
458
+ if (id) {
459
+ const relatedDocument = await context.req.payloadDataLoader.load(JSON.stringify([
460
+ context.req.transactionID,
461
+ relatedCollectionSlug,
462
+ id,
463
+ 0,
464
+ 0,
465
+ locale,
466
+ fallbackLocale,
467
+ false,
468
+ false
469
+ ]));
470
+ return relatedDocument || null;
471
+ }
472
+ return null;
473
+ },
474
+ type
475
+ };
476
+ const whereFields = graphqlResult.collections[relationTo].config.fields;
477
+ upload.args.where = {
478
+ type: (0, _buildWhereInputType.default)({
479
+ name: uploadName,
480
+ fields: whereFields,
481
+ parentName: uploadName
482
+ })
483
+ };
484
+ return {
485
+ ...objectTypeConfig,
486
+ [field.name]: upload
487
+ };
488
+ }
489
+ };
490
+ const objectSchema = {
491
+ name,
492
+ fields: ()=>fields.reduce((objectTypeConfig, field)=>{
493
+ const fieldSchema = fieldToSchemaMap[field.type];
494
+ if (typeof fieldSchema !== 'function') {
495
+ return objectTypeConfig;
496
+ }
497
+ return {
498
+ ...objectTypeConfig,
499
+ ...fieldSchema(objectTypeConfig, field)
500
+ };
501
+ }, baseFields)
502
+ };
503
+ const newlyCreatedBlockType = new _graphql.GraphQLObjectType(objectSchema);
504
+ return newlyCreatedBlockType;
505
+ }
506
+ const _default = buildObjectType;
507
+
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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
@@ -0,0 +1,4 @@
1
+ import { GraphQLObjectType } from 'graphql';
2
+ declare const buildPaginatedListType: (name: any, docType: any) => GraphQLObjectType<any, any>;
3
+ export default buildPaginatedListType;
4
+ //# sourceMappingURL=buildPaginatedListType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildPaginatedListType.d.ts","sourceRoot":"","sources":["../../src/schema/buildPaginatedListType.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEpF,QAAA,MAAM,sBAAsB,0DAkBxB,CAAA;AAEJ,eAAe,sBAAsB,CAAA"}