@kazekyo/nau-graphql-codegen-preset
Version:
A GraphQL Code Generator preset for Nau
106 lines (105 loc) • 20.1 kB
JavaScript
;
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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