@kazekyo/nau-graphql-codegen-preset
Version:
A GraphQL Code Generator preset for Nau
204 lines (201 loc) • 22.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getFragmentDefinitionsByDocumentFiles = exports.getFragmentDefinitions = exports.getFragmentDefinitionByName = exports.getDirectives = exports.edgesField = exports.cursorField = exports.connectionIdField = exports.addFieldWithoutDuplication = exports.addFieldToSelectionSetNodeWithoutDuplication = void 0;
exports.getOperationDefinitions = getOperationDefinitions;
exports.typenameField = exports.pageInfoField = exports.nodeField = exports.isSameNameFieldNode = exports.idField = void 0;
var _graphql = require("graphql");
var _nonNullable = require("./nonNullable");
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); }
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; }
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); }
var pageInfoField = {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'pageInfo'
},
selectionSet: {
kind: _graphql.Kind.SELECTION_SET,
selections: [{
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'hasNextPage'
}
}, {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'endCursor'
}
}, {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'hasPreviousPage'
}
}, {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'startCursor'
}
}]
}
};
exports.pageInfoField = pageInfoField;
var cursorField = {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'cursor'
}
};
exports.cursorField = cursorField;
var idField = {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'id'
}
};
exports.idField = idField;
var typenameField = {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: '__typename'
}
};
exports.typenameField = typenameField;
var nodeField = {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'node'
},
selectionSet: {
kind: _graphql.Kind.SELECTION_SET,
selections: [idField, typenameField]
}
};
exports.nodeField = nodeField;
var edgesField = {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: 'edges'
},
selectionSet: {
kind: _graphql.Kind.SELECTION_SET,
selections: [nodeField, cursorField]
}
};
exports.edgesField = edgesField;
var connectionIdField = {
kind: _graphql.Kind.FIELD,
name: {
kind: _graphql.Kind.NAME,
value: '_connectionId'
},
directives: [{
kind: _graphql.Kind.DIRECTIVE,
name: {
kind: _graphql.Kind.NAME,
value: 'client'
}
}]
};
exports.connectionIdField = connectionIdField;
function getOperationDefinitions(doc) {
return doc.definitions.filter(function (definition) {
return definition.kind === 'OperationDefinition';
});
}
var getFragmentDefinitions = function getFragmentDefinitions(documentNode) {
return documentNode.definitions.filter(function (definition) {
return definition.kind === 'FragmentDefinition';
});
};
exports.getFragmentDefinitions = getFragmentDefinitions;
var getFragmentDefinitionsByDocumentFiles = function getFragmentDefinitionsByDocumentFiles(documentFiles) {
return documentFiles.map(function (file) {
var _file$document;
return (_file$document = file.document) === null || _file$document === void 0 ? void 0 : _file$document.definitions;
}).filter(_nonNullable.nonNullable).flat().filter(function (definition) {
return definition.kind === _graphql.Kind.FRAGMENT_DEFINITION;
});
};
exports.getFragmentDefinitionsByDocumentFiles = getFragmentDefinitionsByDocumentFiles;
var getFragmentDefinitionByName = function getFragmentDefinitionByName(_ref) {
var fragmentDefinitions = _ref.fragmentDefinitions,
fragmentName = _ref.fragmentName;
return fragmentDefinitions.find(function (definition) {
return definition.name.value === fragmentName;
});
};
exports.getFragmentDefinitionByName = getFragmentDefinitionByName;
var getDirectives = function getDirectives(_ref2) {
var _node$directives;
var node = _ref2.node,
directiveNames = _ref2.directiveNames;
var directives = node === null || node === void 0 ? void 0 : (_node$directives = node.directives) === null || _node$directives === void 0 ? void 0 : _node$directives.filter(function (directive) {
return directiveNames.find(function (name) {
return name === directive.name.value;
});
});
if (!directives) return [];
return directives;
};
exports.getDirectives = getDirectives;
var isSameNameFieldNode = function isSameNameFieldNode(_ref3) {
var selection = _ref3.selection,
name = _ref3.name;
return selection.kind === _graphql.Kind.FIELD && selection.name.value === name;
};
// Add the field, but do nothing if the field already exists
exports.isSameNameFieldNode = isSameNameFieldNode;
var addFieldWithoutDuplication = function addFieldWithoutDuplication(_ref4) {
var fieldNode = _ref4.fieldNode,
additionalFields = _ref4.additionalFields;
if (!fieldNode.selectionSet) return fieldNode;
var selectionSet = addFieldToSelectionSetNodeWithoutDuplication({
selectionSetNode: fieldNode.selectionSet,
additionalFields: additionalFields
});
return _objectSpread(_objectSpread({}, fieldNode), {}, {
selectionSet: selectionSet
});
};
// Add the field, but do nothing if the field already exists
exports.addFieldWithoutDuplication = addFieldWithoutDuplication;
var addFieldToSelectionSetNodeWithoutDuplication = function addFieldToSelectionSetNodeWithoutDuplication(_ref5) {
var selectionSetNode = _ref5.selectionSetNode,
additionalFields = _ref5.additionalFields;
var selections = selectionSetNode.selections;
var fieldNodes = additionalFields.filter(function (fieldNode) {
return !selections.find(function (selection) {
return isSameNameFieldNode({
selection: selection,
name: fieldNode.name.value
});
});
});
if (fieldNodes.length === 0) return selectionSetNode;
return _objectSpread(_objectSpread({}, selectionSetNode), {}, {
selections: [].concat(_toConsumableArray(selections), _toConsumableArray(fieldNodes))
});
};
exports.addFieldToSelectionSetNodeWithoutDuplication = addFieldToSelectionSetNodeWithoutDuplication;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYWdlSW5mb0ZpZWxkIiwia2luZCIsIktpbmQiLCJGSUVMRCIsIm5hbWUiLCJOQU1FIiwidmFsdWUiLCJzZWxlY3Rpb25TZXQiLCJTRUxFQ1RJT05fU0VUIiwic2VsZWN0aW9ucyIsImN1cnNvckZpZWxkIiwiaWRGaWVsZCIsInR5cGVuYW1lRmllbGQiLCJub2RlRmllbGQiLCJlZGdlc0ZpZWxkIiwiY29ubmVjdGlvbklkRmllbGQiLCJkaXJlY3RpdmVzIiwiRElSRUNUSVZFIiwiZ2V0T3BlcmF0aW9uRGVmaW5pdGlvbnMiLCJkb2MiLCJkZWZpbml0aW9ucyIsImZpbHRlciIsImRlZmluaXRpb24iLCJnZXRGcmFnbWVudERlZmluaXRpb25zIiwiZG9jdW1lbnROb2RlIiwiZ2V0RnJhZ21lbnREZWZpbml0aW9uc0J5RG9jdW1lbnRGaWxlcyIsImRvY3VtZW50RmlsZXMiLCJtYXAiLCJmaWxlIiwiZG9jdW1lbnQiLCJub25OdWxsYWJsZSIsImZsYXQiLCJGUkFHTUVOVF9ERUZJTklUSU9OIiwiZ2V0RnJhZ21lbnREZWZpbml0aW9uQnlOYW1lIiwiZnJhZ21lbnREZWZpbml0aW9ucyIsImZyYWdtZW50TmFtZSIsImZpbmQiLCJnZXREaXJlY3RpdmVzIiwibm9kZSIsImRpcmVjdGl2ZU5hbWVzIiwiZGlyZWN0aXZlIiwiaXNTYW1lTmFtZUZpZWxkTm9kZSIsInNlbGVjdGlvbiIsImFkZEZpZWxkV2l0aG91dER1cGxpY2F0aW9uIiwiZmllbGROb2RlIiwiYWRkaXRpb25hbEZpZWxkcyIsImFkZEZpZWxkVG9TZWxlY3Rpb25TZXROb2RlV2l0aG91dER1cGxpY2F0aW9uIiwic2VsZWN0aW9uU2V0Tm9kZSIsImZpZWxkTm9kZXMiLCJsZW5ndGgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZ3JhcGhxbEFTVC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlcyB9IGZyb20gJ0BncmFwaHFsLWNvZGVnZW4vcGx1Z2luLWhlbHBlcnMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlTmFtZSB9IGZyb20gJ0BrYXpla3lvL25hdSc7XG5pbXBvcnQge1xuICBEaXJlY3RpdmVOb2RlLFxuICBEb2N1bWVudE5vZGUsXG4gIEZpZWxkTm9kZSxcbiAgRnJhZ21lbnREZWZpbml0aW9uTm9kZSxcbiAgS2luZCxcbiAgT3BlcmF0aW9uRGVmaW5pdGlvbk5vZGUsXG4gIFNlbGVjdGlvbk5vZGUsXG4gIFNlbGVjdGlvblNldE5vZGUsXG59IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tICcuL25vbk51bGxhYmxlJztcblxuZXhwb3J0IGNvbnN0IHBhZ2VJbmZvRmllbGQ6IEZpZWxkTm9kZSA9IHtcbiAga2luZDogS2luZC5GSUVMRCxcbiAgbmFtZTogeyBraW5kOiBLaW5kLk5BTUUsIHZhbHVlOiAncGFnZUluZm8nIH0sXG4gIHNlbGVjdGlvblNldDoge1xuICAgIGtpbmQ6IEtpbmQuU0VMRUNUSU9OX1NFVCxcbiAgICBzZWxlY3Rpb25zOiBbXG4gICAgICB7IGtpbmQ6IEtpbmQuRklFTEQsIG5hbWU6IHsga2luZDogS2luZC5OQU1FLCB2YWx1ZTogJ2hhc05leHRQYWdlJyB9IH0sXG4gICAgICB7IGtpbmQ6IEtpbmQuRklFTEQsIG5hbWU6IHsga2luZDogS2luZC5OQU1FLCB2YWx1ZTogJ2VuZEN1cnNvcicgfSB9LFxuICAgICAgeyBraW5kOiBLaW5kLkZJRUxELCBuYW1lOiB7IGtpbmQ6IEtpbmQuTkFNRSwgdmFsdWU6ICdoYXNQcmV2aW91c1BhZ2UnIH0gfSxcbiAgICAgIHsga2luZDogS2luZC5GSUVMRCwgbmFtZTogeyBraW5kOiBLaW5kLk5BTUUsIHZhbHVlOiAnc3RhcnRDdXJzb3InIH0gfSxcbiAgICBdLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGN1cnNvckZpZWxkOiBGaWVsZE5vZGUgPSB7IGtpbmQ6IEtpbmQuRklFTEQsIG5hbWU6IHsga2luZDogS2luZC5OQU1FLCB2YWx1ZTogJ2N1cnNvcicgfSB9O1xuXG5leHBvcnQgY29uc3QgaWRGaWVsZDogRmllbGROb2RlID0geyBraW5kOiBLaW5kLkZJRUxELCBuYW1lOiB7IGtpbmQ6IEtpbmQuTkFNRSwgdmFsdWU6ICdpZCcgfSB9O1xuXG5leHBvcnQgY29uc3QgdHlwZW5hbWVGaWVsZDogRmllbGROb2RlID0geyBraW5kOiBLaW5kLkZJRUxELCBuYW1lOiB7IGtpbmQ6IEtpbmQuTkFNRSwgdmFsdWU6ICdfX3R5cGVuYW1lJyB9IH07XG5cbmV4cG9ydCBjb25zdCBub2RlRmllbGQ6IEZpZWxkTm9kZSA9IHtcbiAga2luZDogS2luZC5GSUVMRCxcbiAgbmFtZTogeyBraW5kOiBLaW5kLk5BTUUsIHZhbHVlOiAnbm9kZScgfSxcbiAgc2VsZWN0aW9uU2V0OiB7XG4gICAga2luZDogS2luZC5TRUxFQ1RJT05fU0VULFxuICAgIHNlbGVjdGlvbnM6IFtpZEZpZWxkLCB0eXBlbmFtZUZpZWxkXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBlZGdlc0ZpZWxkOiBGaWVsZE5vZGUgPSB7XG4gIGtpbmQ6IEtpbmQuRklFTEQsXG4gIG5hbWU6IHsga2luZDogS2luZC5OQU1FLCB2YWx1ZTogJ2VkZ2VzJyB9LFxuICBzZWxlY3Rpb25TZXQ6IHtcbiAgICBraW5kOiBLaW5kLlNFTEVDVElPTl9TRVQsXG4gICAgc2VsZWN0aW9uczogW25vZGVGaWVsZCwgY3Vyc29yRmllbGRdLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGNvbm5lY3Rpb25JZEZpZWxkOiBGaWVsZE5vZGUgPSB7XG4gIGtpbmQ6IEtpbmQuRklFTEQsXG4gIG5hbWU6IHsga2luZDogS2luZC5OQU1FLCB2YWx1ZTogJ19jb25uZWN0aW9uSWQnIH0sXG4gIGRpcmVjdGl2ZXM6IFt7IGtpbmQ6IEtpbmQuRElSRUNUSVZFLCBuYW1lOiB7IGtpbmQ6IEtpbmQuTkFNRSwgdmFsdWU6ICdjbGllbnQnIH0gfV0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0aW9uRGVmaW5pdGlvbnMoZG9jOiBEb2N1bWVudE5vZGUpOiBPcGVyYXRpb25EZWZpbml0aW9uTm9kZVtdIHtcbiAgcmV0dXJuIGRvYy5kZWZpbml0aW9ucy5maWx0ZXIoKGRlZmluaXRpb24pID0+IGRlZmluaXRpb24ua2luZCA9PT0gJ09wZXJhdGlvbkRlZmluaXRpb24nKSBhcyBPcGVyYXRpb25EZWZpbml0aW9uTm9kZVtdO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RnJhZ21lbnREZWZpbml0aW9ucyA9IChkb2N1bWVudE5vZGU6IERvY3VtZW50Tm9kZSk6IEZyYWdtZW50RGVmaW5pdGlvbk5vZGVbXSA9PiB7XG4gIHJldHVybiBkb2N1bWVudE5vZGUuZGVmaW5pdGlvbnMuZmlsdGVyKFxuICAgIChkZWZpbml0aW9uKTogZGVmaW5pdGlvbiBpcyBGcmFnbWVudERlZmluaXRpb25Ob2RlID0+IGRlZmluaXRpb24ua2luZCA9PT0gJ0ZyYWdtZW50RGVmaW5pdGlvbicsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RnJhZ21lbnREZWZpbml0aW9uc0J5RG9jdW1lbnRGaWxlcyA9IChcbiAgZG9jdW1lbnRGaWxlczogVHlwZXMuRG9jdW1lbnRGaWxlW10sXG4pOiBGcmFnbWVudERlZmluaXRpb25Ob2RlW10gPT4ge1xuICByZXR1cm4gZG9jdW1lbnRGaWxlc1xuICAgIC5tYXAoKGZpbGUpID0+IGZpbGUuZG9jdW1lbnQ/LmRlZmluaXRpb25zKVxuICAgIC5maWx0ZXIobm9uTnVsbGFibGUpXG4gICAgLmZsYXQoKVxuICAgIC5maWx0ZXIoKGRlZmluaXRpb24pOiBkZWZpbml0aW9uIGlzIEZyYWdtZW50RGVmaW5pdGlvbk5vZGUgPT4gZGVmaW5pdGlvbi5raW5kID09PSBLaW5kLkZSQUdNRU5UX0RFRklOSVRJT04pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYWdtZW50RGVmaW5pdGlvbkJ5TmFtZSA9ICh7XG4gIGZyYWdtZW50RGVmaW5pdGlvbnMsXG4gIGZyYWdtZW50TmFtZSxcbn06IHtcbiAgZnJhZ21lbnREZWZpbml0aW9uczogRnJhZ21lbnREZWZpbml0aW9uTm9kZVtdO1xuICBmcmFnbWVudE5hbWU6IHN0cmluZztcbn0pOiBGcmFnbWVudERlZmluaXRpb25Ob2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIGZyYWdtZW50RGVmaW5pdGlvbnMuZmluZCgoZGVmaW5pdGlvbikgPT4gZGVmaW5pdGlvbi5uYW1lLnZhbHVlID09PSBmcmFnbWVudE5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdGl2ZXMgPSAoe1xuICBub2RlLFxuICBkaXJlY3RpdmVOYW1lcyxcbn06IHtcbiAgbm9kZTogRmllbGROb2RlIHwgU2VsZWN0aW9uTm9kZSB8IG51bGw7XG4gIGRpcmVjdGl2ZU5hbWVzOiBEaXJlY3RpdmVOYW1lW107XG59KTogRGlyZWN0aXZlTm9kZVtdID0+IHtcbiAgY29uc3QgZGlyZWN0aXZlcyA9IG5vZGU/LmRpcmVjdGl2ZXM/LmZpbHRlcigoZGlyZWN0aXZlKSA9PlxuICAgIGRpcmVjdGl2ZU5hbWVzLmZpbmQoKG5hbWUpID0+IG5hbWUgPT09IGRpcmVjdGl2ZS5uYW1lLnZhbHVlKSxcbiAgKTtcbiAgaWYgKCFkaXJlY3RpdmVzKSByZXR1cm4gW107XG4gIHJldHVybiBkaXJlY3RpdmVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2FtZU5hbWVGaWVsZE5vZGUgPSAoeyBzZWxlY3Rpb24sIG5hbWUgfTogeyBzZWxlY3Rpb246IFNlbGVjdGlvbk5vZGU7IG5hbWU6IHN0cmluZyB9KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBzZWxlY3Rpb24ua2luZCA9PT0gS2luZC5GSUVMRCAmJiBzZWxlY3Rpb24ubmFtZS52YWx1ZSA9PT0gbmFtZTtcbn07XG5cbi8vIEFkZCB0aGUgZmllbGQsIGJ1dCBkbyBub3RoaW5nIGlmIHRoZSBmaWVsZCBhbHJlYWR5IGV4aXN0c1xuZXhwb3J0IGNvbnN0IGFkZEZpZWxkV2l0aG91dER1cGxpY2F0aW9uID0gKHtcbiAgZmllbGROb2RlLFxuICBhZGRpdGlvbmFsRmllbGRzLFxufToge1xuICBmaWVsZE5vZGU6IEZpZWxkTm9kZTtcbiAgYWRkaXRpb25hbEZpZWxkczogRmllbGROb2RlW107XG59KTogRmllbGROb2RlID0+IHtcbiAgaWYgKCFmaWVsZE5vZGUuc2VsZWN0aW9uU2V0KSByZXR1cm4gZmllbGROb2RlO1xuICBjb25zdCBzZWxlY3Rpb25TZXQgPSBhZGRGaWVsZFRvU2VsZWN0aW9uU2V0Tm9kZVdpdGhvdXREdXBsaWNhdGlvbih7XG4gICAgc2VsZWN0aW9uU2V0Tm9kZTogZmllbGROb2RlLnNlbGVjdGlvblNldCxcbiAgICBhZGRpdGlvbmFsRmllbGRzLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmZpZWxkTm9kZSxcbiAgICBzZWxlY3Rpb25TZXQsXG4gIH07XG59O1xuXG4vLyBBZGQgdGhlIGZpZWxkLCBidXQgZG8gbm90aGluZyBpZiB0aGUgZmllbGQgYWxyZWFkeSBleGlzdHNcbmV4cG9ydCBjb25zdCBhZGRGaWVsZFRvU2VsZWN0aW9uU2V0Tm9kZVdpdGhvdXREdXBsaWNhdGlvbiA9ICh7XG4gIHNlbGVjdGlvblNldE5vZGUsXG4gIGFkZGl0aW9uYWxGaWVsZHMsXG59OiB7XG4gIHNlbGVjdGlvblNldE5vZGU6IFNlbGVjdGlvblNldE5vZGU7XG4gIGFkZGl0aW9uYWxGaWVsZHM6IEZpZWxkTm9kZVtdO1xufSk6IFNlbGVjdGlvblNldE5vZGUgPT4ge1xuICBjb25zdCBzZWxlY3Rpb25zID0gc2VsZWN0aW9uU2V0Tm9kZS5zZWxlY3Rpb25zO1xuXG4gIGNvbnN0IGZpZWxkTm9kZXMgPSBhZGRpdGlvbmFsRmllbGRzLmZpbHRlcihcbiAgICAoZmllbGROb2RlKSA9PiAhc2VsZWN0aW9ucy5maW5kKChzZWxlY3Rpb24pID0+IGlzU2FtZU5hbWVGaWVsZE5vZGUoeyBzZWxlY3Rpb24sIG5hbWU6IGZpZWxkTm9kZS5uYW1lLnZhbHVlIH0pKSxcbiAgKTtcbiAgaWYgKGZpZWxkTm9kZXMubGVuZ3RoID09PSAwKSByZXR1cm4gc2VsZWN0aW9uU2V0Tm9kZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnNlbGVjdGlvblNldE5vZGUsXG4gICAgc2VsZWN0aW9uczogWy4uLnNlbGVjdGlvbnMsIC4uLmZpZWxkTm9kZXNdLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQTtBQVVBO0FBQTRDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVyQyxJQUFNQSxhQUF3QixHQUFHO0VBQ3RDQyxJQUFJLEVBQUVDLGFBQUksQ0FBQ0MsS0FBSztFQUNoQkMsSUFBSSxFQUFFO0lBQUVILElBQUksRUFBRUMsYUFBSSxDQUFDRyxJQUFJO0lBQUVDLEtBQUssRUFBRTtFQUFXLENBQUM7RUFDNUNDLFlBQVksRUFBRTtJQUNaTixJQUFJLEVBQUVDLGFBQUksQ0FBQ00sYUFBYTtJQUN4QkMsVUFBVSxFQUFFLENBQ1Y7TUFBRVIsSUFBSSxFQUFFQyxhQUFJLENBQUNDLEtBQUs7TUFBRUMsSUFBSSxFQUFFO1FBQUVILElBQUksRUFBRUMsYUFBSSxDQUFDRyxJQUFJO1FBQUVDLEtBQUssRUFBRTtNQUFjO0lBQUUsQ0FBQyxFQUNyRTtNQUFFTCxJQUFJLEVBQUVDLGFBQUksQ0FBQ0MsS0FBSztNQUFFQyxJQUFJLEVBQUU7UUFBRUgsSUFBSSxFQUFFQyxhQUFJLENBQUNHLElBQUk7UUFBRUMsS0FBSyxFQUFFO01BQVk7SUFBRSxDQUFDLEVBQ25FO01BQUVMLElBQUksRUFBRUMsYUFBSSxDQUFDQyxLQUFLO01BQUVDLElBQUksRUFBRTtRQUFFSCxJQUFJLEVBQUVDLGFBQUksQ0FBQ0csSUFBSTtRQUFFQyxLQUFLLEVBQUU7TUFBa0I7SUFBRSxDQUFDLEVBQ3pFO01BQUVMLElBQUksRUFBRUMsYUFBSSxDQUFDQyxLQUFLO01BQUVDLElBQUksRUFBRTtRQUFFSCxJQUFJLEVBQUVDLGFBQUksQ0FBQ0csSUFBSTtRQUFFQyxLQUFLLEVBQUU7TUFBYztJQUFFLENBQUM7RUFFekU7QUFDRixDQUFDO0FBQUM7QUFFSyxJQUFNSSxXQUFz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