UNPKG

@kazekyo/nau-graphql-codegen-preset

Version:

A GraphQL Code Generator preset for Nau

106 lines (105 loc) 20.1 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.preset = void 0; var _utils = require("@graphql-tools/utils"); var _nauConfig = require("@kazekyo/nau-config"); var _validationRules = require("@relay-graphql-js/validation-rules"); var _graphql = require("graphql"); var _lodash = _interopRequireDefault(require("lodash.clonedeep")); var paginationPlugin = _interopRequireWildcard(require("./plugins/cache-updater-support")); var _addClientDirective = require("./schemaTransforms/addClientDirective"); var _addConnectionId = require("./schemaTransforms/addConnectionId"); var _addFieldsForAddingNode = require("./transforms/addFieldsForAddingNode"); var _addPaginationFields = require("./transforms/addPaginationFields"); var _fixVariableNotDefinedInRoot = require("./transforms/fixVariableNotDefinedInRoot"); var _generateRefetchQuery = require("./transforms/generateRefetchQuery"); var _passArgumentValueToFragment = require("./transforms/passArgumentValueToFragment"); var _removeCustomDirective = require("./transforms/removeCustomDirective"); var _nonNullable = require("./utils/nonNullable"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } var transformDocuments = function transformDocuments(_ref) { var documentFiles = _ref.documentFiles; var result = { documentFiles: documentFiles }; [_passArgumentValueToFragment.transform, _generateRefetchQuery.transform, _fixVariableNotDefinedInRoot.transform, _addPaginationFields.transform, _addFieldsForAddingNode.transform].forEach(function (transformFunc) { result = transformFunc(result); }); return result; }; var transformSchema = function transformSchema(schema, documentFiles) { var result = schema; [_addClientDirective.addCustomClientDirective, _addConnectionId.addConnectionId].forEach(function (transform) { result = transform(result, documentFiles).schema; }); return result; }; var validationRules = function validationRules() { var ignored = ['NoUnusedFragmentsRule', 'NoUnusedVariablesRule', 'KnownArgumentNamesRule', 'NoUndefinedVariablesRule']; var v4ignored = ignored.map(function (rule) { return rule.replace(/Rule$/, ''); }); var rules = _graphql.specifiedRules.filter(function (f) { return !ignored.includes(f.name) && !v4ignored.includes(f.name); }); return [].concat(_toConsumableArray(rules), [_validationRules.RelayArgumentsOfCorrectType, _validationRules.RelayDefaultValueOfCorrectType, _validationRules.RelayNoUnusedArguments, _validationRules.RelayKnownArgumentNames, _nauConfig.paginationDirectiveValidationRule]); }; var preset = { buildGeneratesSection: function buildGeneratesSection(options) { var originalGraphQLSchema = options.schemaAst ? options.schemaAst : (0, _graphql.buildASTSchema)(options.schema, options.config); var schemaObject = transformSchema(originalGraphQLSchema, options.documents); var errors = (0, _utils.validateGraphQlDocuments)(schemaObject, options.documents.map(function (d) { return d.document; }).filter(_nonNullable.nonNullable), validationRules()); if (errors.length > 0) { throw new Error("GraphQL Document Validation failed with ".concat(errors.length, " errors;\n ").concat(errors.map(function (error, index) { return "Error ".concat(index, ": ").concat(error.stack || ''); }).join('\n\n'))); } var transformedObject = transformDocuments({ documentFiles: (0, _lodash["default"])(options.documents) }); var pluginMap = options.pluginMap; var plugins = options.plugins; var generateTypeScriptCode = options.presetConfig.generateTypeScriptCode; if (generateTypeScriptCode) { pluginMap = _objectSpread(_defineProperty({}, "nau-pagination-code", paginationPlugin), pluginMap); plugins = [// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment _defineProperty({}, "nau-pagination-code", { documentFiles: (0, _lodash["default"])(transformedObject.documentFiles) })].concat(_toConsumableArray(plugins)); } var _removeCustomDirectiv = (0, _removeCustomDirective.transform)({ documentFiles: transformedObject.documentFiles }), documentFiles = _removeCustomDirectiv.documentFiles; var result = [{ filename: options.baseOutputDir, plugins: plugins, pluginMap: pluginMap, config: options.config, schema: options.schema, schemaAst: schemaObject, documents: documentFiles }]; return result; } }; exports.preset = preset; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0cmFuc2Zvcm1Eb2N1bWVudHMiLCJkb2N1bWVudEZpbGVzIiwicmVzdWx0IiwicGFzc0FyZ3VtZW50VmFsdWVUb0ZyYWdtZW50IiwiZ2VuZXJhdGVSZWZldGNoUXVlcnkiLCJmaXhWYXJpYWJsZU5vdERlZmluZWRJblJvb3QiLCJhZGRQYWdpbmF0aW9uRmllbGRzIiwiYWRkRmllbGRzRm9yQWRkaW5nTm9kZSIsImZvckVhY2giLCJ0cmFuc2Zvcm1GdW5jIiwidHJhbnNmb3JtU2NoZW1hIiwic2NoZW1hIiwiYWRkQ3VzdG9tQ2xpZW50RGlyZWN0aXZlIiwiYWRkQ29ubmVjdGlvbklkIiwidHJhbnNmb3JtIiwidmFsaWRhdGlvblJ1bGVzIiwiaWdub3JlZCIsInY0aWdub3JlZCIsIm1hcCIsInJ1bGUiLCJyZXBsYWNlIiwicnVsZXMiLCJzcGVjaWZpZWRSdWxlcyIsImZpbHRlciIsImYiLCJpbmNsdWRlcyIsIm5hbWUiLCJSZWxheUFyZ3VtZW50c09mQ29ycmVjdFR5cGUiLCJSZWxheURlZmF1bHRWYWx1ZU9mQ29ycmVjdFR5cGUiLCJSZWxheU5vVW51c2VkQXJndW1lbnRzIiwiUmVsYXlLbm93bkFyZ3VtZW50TmFtZXMiLCJwYWdpbmF0aW9uRGlyZWN0aXZlVmFsaWRhdGlvblJ1bGUiLCJwcmVzZXQiLCJidWlsZEdlbmVyYXRlc1NlY3Rpb24iLCJvcHRpb25zIiwib3JpZ2luYWxHcmFwaFFMU2NoZW1hIiwic2NoZW1hQXN0IiwiYnVpbGRBU1RTY2hlbWEiLCJjb25maWciLCJzY2hlbWFPYmplY3QiLCJkb2N1bWVudHMiLCJlcnJvcnMiLCJ2YWxpZGF0ZUdyYXBoUWxEb2N1bWVudHMiLCJkIiwiZG9jdW1lbnQiLCJub25OdWxsYWJsZSIsImxlbmd0aCIsIkVycm9yIiwiZXJyb3IiLCJpbmRleCIsInN0YWNrIiwiam9pbiIsInRyYW5zZm9ybWVkT2JqZWN0IiwiY2xvbmVEZWVwIiwicGx1Z2luTWFwIiwicGx1Z2lucyIsImdlbmVyYXRlVHlwZVNjcmlwdENvZGUiLCJwcmVzZXRDb25maWciLCJwYWdpbmF0aW9uUGx1Z2luIiwicmVtb3ZlQ3VzdG9tRGlyZWN0aXZlIiwiZmlsZW5hbWUiLCJiYXNlT3V0cHV0RGlyIl0sInNvdXJjZXMiOlsiLi4vc3JjL3ByZXNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlcyB9IGZyb20gJ0BncmFwaHFsLWNvZGVnZW4vcGx1Z2luLWhlbHBlcnMnO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFsRG9jdW1lbnRzIH0gZnJvbSAnQGdyYXBocWwtdG9vbHMvdXRpbHMnO1xuaW1wb3J0IHsgcGFnaW5hdGlvbkRpcmVjdGl2ZVZhbGlkYXRpb25SdWxlIH0gZnJvbSAnQGthemVreW8vbmF1LWNvbmZpZyc7XG5pbXBvcnQge1xuICBSZWxheUFyZ3VtZW50c09mQ29ycmVjdFR5cGUsXG4gIFJlbGF5RGVmYXVsdFZhbHVlT2ZDb3JyZWN0VHlwZSxcbiAgUmVsYXlLbm93bkFyZ3VtZW50TmFtZXMsXG4gIFJlbGF5Tm9VbnVzZWRBcmd1bWVudHMsXG59IGZyb20gJ0ByZWxheS1ncmFwaHFsLWpzL3ZhbGlkYXRpb24tcnVsZXMnO1xuaW1wb3J0IHsgQVNUVmlzaXRvciwgYnVpbGRBU1RTY2hlbWEsIEdyYXBoUUxTY2hlbWEsIHNwZWNpZmllZFJ1bGVzLCBWYWxpZGF0aW9uQ29udGV4dCwgVmFsaWRhdGlvblJ1bGUgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCc7XG5pbXBvcnQgKiBhcyBwYWdpbmF0aW9uUGx1Z2luIGZyb20gJy4vcGx1Z2lucy9jYWNoZS11cGRhdGVyLXN1cHBvcnQnO1xuaW1wb3J0IHsgUHJlc2V0Q29uZmlnIH0gZnJvbSAnLi9wcmVzZXRDb25maWcnO1xuaW1wb3J0IHsgYWRkQ3VzdG9tQ2xpZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9zY2hlbWFUcmFuc2Zvcm1zL2FkZENsaWVudERpcmVjdGl2ZSc7XG5pbXBvcnQgeyBhZGRDb25uZWN0aW9uSWQgfSBmcm9tICcuL3NjaGVtYVRyYW5zZm9ybXMvYWRkQ29ubmVjdGlvbklkJztcbmltcG9ydCB7IHRyYW5zZm9ybSBhcyBhZGRGaWVsZHNGb3JBZGRpbmdOb2RlIH0gZnJvbSAnLi90cmFuc2Zvcm1zL2FkZEZpZWxkc0ZvckFkZGluZ05vZGUnO1xuaW1wb3J0IHsgdHJhbnNmb3JtIGFzIGFkZFBhZ2luYXRpb25GaWVsZHMgfSBmcm9tICcuL3RyYW5zZm9ybXMvYWRkUGFnaW5hdGlvbkZpZWxkcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gYXMgZml4VmFyaWFibGVOb3REZWZpbmVkSW5Sb290IH0gZnJvbSAnLi90cmFuc2Zvcm1zL2ZpeFZhcmlhYmxlTm90RGVmaW5lZEluUm9vdCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gYXMgZ2VuZXJhdGVSZWZldGNoUXVlcnkgfSBmcm9tICcuL3RyYW5zZm9ybXMvZ2VuZXJhdGVSZWZldGNoUXVlcnknO1xuaW1wb3J0IHsgdHJhbnNmb3JtIGFzIHBhc3NBcmd1bWVudFZhbHVlVG9GcmFnbWVudCB9IGZyb20gJy4vdHJhbnNmb3Jtcy9wYXNzQXJndW1lbnRWYWx1ZVRvRnJhZ21lbnQnO1xuaW1wb3J0IHsgdHJhbnNmb3JtIGFzIHJlbW92ZUN1c3RvbURpcmVjdGl2ZSB9IGZyb20gJy4vdHJhbnNmb3Jtcy9yZW1vdmVDdXN0b21EaXJlY3RpdmUnO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tICcuL3V0aWxzL25vbk51bGxhYmxlJztcblxuY29uc3QgdHJhbnNmb3JtRG9jdW1lbnRzID0gKHtcbiAgZG9jdW1lbnRGaWxlcyxcbn06IHtcbiAgZG9jdW1lbnRGaWxlczogVHlwZXMuRG9jdW1lbnRGaWxlW107XG59KTogeyBkb2N1bWVudEZpbGVzOiBUeXBlcy5Eb2N1bWVudEZpbGVbXSB9ID0+IHtcbiAgbGV0IHJlc3VsdCA9IHsgZG9jdW1lbnRGaWxlcyB9O1xuICBbXG4gICAgcGFzc0FyZ3VtZW50VmFsdWVUb0ZyYWdtZW50LFxuICAgIGdlbmVyYXRlUmVmZXRjaFF1ZXJ5LFxuICAgIGZpeFZhcmlhYmxlTm90RGVmaW5lZEluUm9vdCxcbiAgICBhZGRQYWdpbmF0aW9uRmllbGRzLFxuICAgIGFkZEZpZWxkc0ZvckFkZGluZ05vZGUsXG4gIF0uZm9yRWFjaCgodHJhbnNmb3JtRnVuYykgPT4ge1xuICAgIHJlc3VsdCA9IHRyYW5zZm9ybUZ1bmMocmVzdWx0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCB0cmFuc2Zvcm1TY2hlbWEgPSAoc2NoZW1hOiBHcmFwaFFMU2NoZW1hLCBkb2N1bWVudEZpbGVzOiBUeXBlcy5Eb2N1bWVudEZpbGVbXSk6IEdyYXBoUUxTY2hlbWEgPT4ge1xuICBsZXQgcmVzdWx0ID0gc2NoZW1hO1xuICBbYWRkQ3VzdG9tQ2xpZW50RGlyZWN0aXZlLCBhZGRDb25uZWN0aW9uSWRdLmZvckVhY2goKHRyYW5zZm9ybSkgPT4ge1xuICAgIHJlc3VsdCA9IHRyYW5zZm9ybShyZXN1bHQsIGRvY3VtZW50RmlsZXMpLnNjaGVtYTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCB2YWxpZGF0aW9uUnVsZXMgPSAoKTogVmFsaWRhdGlvblJ1bGVbXSA9PiB7XG4gIGNvbnN0IGlnbm9yZWQgPSBbXG4gICAgJ05vVW51c2VkRnJhZ21lbnRzUnVsZScsXG4gICAgJ05vVW51c2VkVmFyaWFibGVzUnVsZScsXG4gICAgJ0tub3duQXJndW1lbnROYW1lc1J1bGUnLFxuICAgICdOb1VuZGVmaW5lZFZhcmlhYmxlc1J1bGUnLFxuICBdO1xuICBjb25zdCB2NGlnbm9yZWQgPSBpZ25vcmVkLm1hcCgocnVsZSkgPT4gcnVsZS5yZXBsYWNlKC9SdWxlJC8sICcnKSk7XG5cbiAgY29uc3QgcnVsZXMgPSBzcGVjaWZpZWRSdWxlcy5maWx0ZXIoXG4gICAgKGY6IChjb250ZXh0OiBWYWxpZGF0aW9uQ29udGV4dCkgPT4gQVNUVmlzaXRvcikgPT4gIWlnbm9yZWQuaW5jbHVkZXMoZi5uYW1lKSAmJiAhdjRpZ25vcmVkLmluY2x1ZGVzKGYubmFtZSksXG4gICk7XG4gIHJldHVybiBbXG4gICAgLi4ucnVsZXMsXG4gICAgUmVsYXlBcmd1bWVudHNPZkNvcnJlY3RUeXBlLFxuICAgIFJlbGF5RGVmYXVsdFZhbHVlT2ZDb3JyZWN0VHlwZSxcbiAgICBSZWxheU5vVW51c2VkQXJndW1lbnRzLFxuICAgIFJlbGF5S25vd25Bcmd1bWVudE5hbWVzLFxuICAgIHBhZ2luYXRpb25EaXJlY3RpdmVWYWxpZGF0aW9uUnVsZSxcbiAgXSBhcyB1bmtub3duW10gYXMgVmFsaWRhdGlvblJ1bGVbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmVzZXQ6IFR5cGVzLk91dHB1dFByZXNldDxQcmVzZXRDb25maWc+ID0ge1xuICBidWlsZEdlbmVyYXRlc1NlY3Rpb246IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxHcmFwaFFMU2NoZW1hOiBHcmFwaFFMU2NoZW1hID0gb3B0aW9ucy5zY2hlbWFBc3RcbiAgICAgID8gb3B0aW9ucy5zY2hlbWFBc3RcbiAgICAgIDogYnVpbGRBU1RTY2hlbWEob3B0aW9ucy5zY2hlbWEsIG9wdGlvbnMuY29uZmlnKTtcblxuICAgIGNvbnN0IHNjaGVtYU9iamVjdCA9IHRyYW5zZm9ybVNjaGVtYShvcmlnaW5hbEdyYXBoUUxTY2hlbWEsIG9wdGlvbnMuZG9jdW1lbnRzKTtcblxuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlR3JhcGhRbERvY3VtZW50cyhcbiAgICAgIHNjaGVtYU9iamVjdCxcbiAgICAgIG9wdGlvbnMuZG9jdW1lbnRzLm1hcCgoZCkgPT4gZC5kb2N1bWVudCkuZmlsdGVyKG5vbk51bGxhYmxlKSxcbiAgICAgIHZhbGlkYXRpb25SdWxlcygpLFxuICAgICk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBHcmFwaFFMIERvY3VtZW50IFZhbGlkYXRpb24gZmFpbGVkIHdpdGggJHtlcnJvcnMubGVuZ3RofSBlcnJvcnM7XG4gICR7ZXJyb3JzLm1hcCgoZXJyb3IsIGluZGV4KSA9PiBgRXJyb3IgJHtpbmRleH06ICR7ZXJyb3Iuc3RhY2sgfHwgJyd9YCkuam9pbignXFxuXFxuJyl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmb3JtZWRPYmplY3QgPSB0cmFuc2Zvcm1Eb2N1bWVudHMoeyBkb2N1bWVudEZpbGVzOiBjbG9uZURlZXAob3B0aW9ucy5kb2N1bWVudHMpIH0pO1xuXG4gICAgbGV0IHBsdWdpbk1hcCA9IG9wdGlvbnMucGx1Z2luTWFwO1xuICAgIGxldCBwbHVnaW5zID0gb3B0aW9ucy5wbHVnaW5zO1xuICAgIGNvbnN0IHsgZ2VuZXJhdGVUeXBlU2NyaXB0Q29kZSB9ID0gb3B0aW9ucy5wcmVzZXRDb25maWc7XG4gICAgaWYgKGdlbmVyYXRlVHlwZVNjcmlwdENvZGUpIHtcbiAgICAgIHBsdWdpbk1hcCA9IHsgW2BuYXUtcGFnaW5hdGlvbi1jb2RlYF06IHBhZ2luYXRpb25QbHVnaW4sIC4uLnBsdWdpbk1hcCB9O1xuICAgICAgcGx1Z2lucyA9IFtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICB7IFtgbmF1LXBhZ2luYXRpb24tY29kZWBdOiB7IGRvY3VtZW50RmlsZXM6IGNsb25lRGVlcCh0cmFuc2Zvcm1lZE9iamVjdC5kb2N1bWVudEZpbGVzKSB9IH0sXG4gICAgICAgIC4uLnBsdWdpbnMsXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZG9jdW1lbnRGaWxlcyB9ID0gcmVtb3ZlQ3VzdG9tRGlyZWN0aXZlKHsgZG9jdW1lbnRGaWxlczogdHJhbnNmb3JtZWRPYmplY3QuZG9jdW1lbnRGaWxlcyB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IFtcbiAgICAgIHtcbiAgICAgICAgZmlsZW5hbWU6IG9wdGlvbnMuYmFzZU91dHB1dERpcixcbiAgICAgICAgcGx1Z2luczogcGx1Z2lucyxcbiAgICAgICAgcGx1Z2luTWFwOiBwbHVnaW5NYXAsXG4gICAgICAgIGNvbmZpZzogb3B0aW9ucy5jb25maWcsXG4gICAgICAgIHNjaGVtYTogb3B0aW9ucy5zY2hlbWEsXG4gICAgICAgIHNjaGVtYUFzdDogc2NoZW1hT2JqZWN0LFxuICAgICAgICBkb2N1bWVudHM6IGRvY3VtZW50RmlsZXMsXG4gICAgICB9LFxuICAgIF07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBa0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVsRCxJQUFNQSxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCLE9BSXVCO0VBQUEsSUFIN0NDLGFBQWEsUUFBYkEsYUFBYTtFQUliLElBQUlDLE1BQU0sR0FBRztJQUFFRCxhQUFhLEVBQWJBO0VBQWMsQ0FBQztFQUM5QixDQUNFRSxzQ0FBMkIsRUFDM0JDLCtCQUFvQixFQUNwQkMsc0NBQTJCLEVBQzNCQyw4QkFBbUIsRUFDbkJDLGlDQUFzQixDQUN2QixDQUFDQyxPQUFPLENBQUMsVUFBQ0MsYUFBYSxFQUFLO0lBQzNCUCxNQUFNLEdBQUdPLGFBQWEsQ0FBQ1AsTUFBTSxDQUFDO0VBQ2hDLENBQUMsQ0FBQztFQUNGLE9BQU9BLE1BQU07QUFDZixDQUFDO0FBRUQsSUFBTVEsZUFBZSxHQUFHLFNBQWxCQSxlQUFlLENBQUlDLE1BQXFCLEVBQUVWLGFBQW1DLEVBQW9CO0VBQ3JHLElBQUlDLE1BQU0sR0FBR1MsTUFBTTtFQUNuQixDQUFDQyw0Q0FBd0IsRUFBRUMsZ0NBQWUsQ0FBQyxDQUFDTCxPQUFPLENBQUMsVUFBQ00sU0FBUyxFQUFLO0lBQ2pFWixNQUFNLEdBQUdZLFNBQVMsQ0FBQ1os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