@kazekyo/nau-graphql-codegen-preset
Version:
A GraphQL Code Generator preset for Nau
155 lines (152 loc) • 23.2 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.transform = void 0;
var _nau = require("@kazekyo/nau");
var _graphql = require("graphql");
var _lodash = require("lodash");
var _graphqlAST = require("../utils/graphqlAST");
var _nonNullable = require("../utils/nonNullable");
var _util = require("./util");
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 _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 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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure 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 _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 _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var transform = function transform(_ref) {
var documentFiles = _ref.documentFiles;
var fragmentDefinitions = (0, _graphqlAST.getFragmentDefinitionsByDocumentFiles)(documentFiles);
var refetchQueryMaterials = {};
fragmentDefinitions.forEach(function (definition) {
(0, _graphql.visit)(definition, {
Directive: {
enter: function enter(node) {
if (node.name.value !== _nau.REFETCHABLE_DIRECTIVE_NAME || !node.arguments) return false;
var argument = node.arguments[0];
if (argument.value.kind !== _graphql.Kind.STRING) return false;
var queryName = argument.value.value;
var collectResult = collectVariableDefinitions({
fragmentDefinition: definition,
allFragmentDefinitions: fragmentDefinitions,
collectedFragmentNames: []
});
refetchQueryMaterials[queryName] = {
innerFragmentName: definition.name.value,
variableDefinitions: (0, _lodash.uniqWith)(collectResult.variableDefinitions, function (a, b) {
return a.variable.name.value === b.variable.name.value;
})
};
return false;
}
}
});
});
var refetchDocumentNodes = Object.entries(refetchQueryMaterials).map(function (_ref2) {
var _ref3 = _slicedToArray(_ref2, 2),
queryName = _ref3[0],
material = _ref3[1];
var documentNode = (0, _graphql.parse)(queryString({
queryName: queryName,
fragmentName: material.innerFragmentName
}));
if (documentNode.definitions[0].kind !== 'OperationDefinition') return null;
var refetchDocumentNode = _objectSpread(_objectSpread({}, documentNode), {}, {
definitions: [_objectSpread(_objectSpread({}, documentNode.definitions[0]), {}, {
variableDefinitions: [].concat(_toConsumableArray(material.variableDefinitions), [{
kind: _graphql.Kind.VARIABLE_DEFINITION,
type: (0, _graphql.parseType)('ID!'),
variable: {
kind: _graphql.Kind.VARIABLE,
name: {
kind: _graphql.Kind.NAME,
value: 'id'
}
}
}])
})]
});
return refetchDocumentNode;
}).filter(_nonNullable.nonNullable);
var files = [].concat(_toConsumableArray(documentFiles), _toConsumableArray(refetchDocumentNodes.map(function (documentNode) {
return {
document: documentNode,
rawSDL: (0, _graphql.print)(documentNode),
location: 'generated by Nau'
};
})));
return {
documentFiles: files
};
};
exports.transform = transform;
var queryString = function queryString(_ref4) {
var queryName = _ref4.queryName,
fragmentName = _ref4.fragmentName;
return "\n query ".concat(queryName, " {\n node(id: $id) {\n id\n __typename\n ...").concat(fragmentName, "\n }\n }");
};
var collectVariableDefinitions = function collectVariableDefinitions(_ref5) {
var fragmentDefinition = _ref5.fragmentDefinition,
allFragmentDefinitions = _ref5.allFragmentDefinitions,
collectedFragmentNames = _ref5.collectedFragmentNames;
var variableDefinitions = [];
var fragmentNames = [].concat(_toConsumableArray(collectedFragmentNames), [fragmentDefinition.name.value]);
// Collect variable definitions
(0, _graphql.visit)(fragmentDefinition, {
Directive: {
enter: function enter(node) {
if (node.name.value !== _nau.ARGUMENT_DEFINITIONS_DIRECTIVE_NAME) return;
var argumentDataList = (0, _util.getArgumentDefinitionDataList)(node);
argumentDataList.forEach(function (data) {
return variableDefinitions.push({
kind: _graphql.Kind.VARIABLE_DEFINITION,
type: data.type,
variable: {
kind: _graphql.Kind.VARIABLE,
name: data.name
},
defaultValue: data.defaultValue
});
});
return false;
}
}
});
// Visit nested fragments
(0, _graphql.visit)(fragmentDefinition, {
FragmentSpread: {
enter: function enter(node) {
var fragmentName = node.name.value;
if (fragmentNames.includes(fragmentName)) return false;
var nestedFragment = allFragmentDefinitions.find(function (definition) {
return definition.name.value === fragmentName;
});
if (!nestedFragment) return false;
var nestedFragmentResult = collectVariableDefinitions({
fragmentDefinition: nestedFragment,
allFragmentDefinitions: allFragmentDefinitions,
collectedFragmentNames: fragmentNames
});
variableDefinitions = [].concat(_toConsumableArray(variableDefinitions), _toConsumableArray(nestedFragmentResult.variableDefinitions));
fragmentNames = [].concat(_toConsumableArray(fragmentNames), _toConsumableArray(nestedFragmentResult.collectedFragmentNames));
return false;
}
}
});
return {
variableDefinitions: variableDefinitions,
collectedFragmentNames: fragmentNames
};
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJkb2N1bWVudEZpbGVzIiwiZnJhZ21lbnREZWZpbml0aW9ucyIsImdldEZyYWdtZW50RGVmaW5pdGlvbnNCeURvY3VtZW50RmlsZXMiLCJyZWZldGNoUXVlcnlNYXRlcmlhbHMiLCJmb3JFYWNoIiwiZGVmaW5pdGlvbiIsInZpc2l0IiwiRGlyZWN0aXZlIiwiZW50ZXIiLCJub2RlIiwibmFtZSIsInZhbHVlIiwiUkVGRVRDSEFCTEVfRElSRUNUSVZFX05BTUUiLCJhcmd1bWVudHMiLCJhcmd1bWVudCIsImtpbmQiLCJLaW5kIiwiU1RSSU5HIiwicXVlcnlOYW1lIiwiY29sbGVjdFJlc3VsdCIsImNvbGxlY3RWYXJpYWJsZURlZmluaXRpb25zIiwiZnJhZ21lbnREZWZpbml0aW9uIiwiYWxsRnJhZ21lbnREZWZpbml0aW9ucyIsImNvbGxlY3RlZEZyYWdtZW50TmFtZXMiLCJpbm5lckZyYWdtZW50TmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJ1bmlxV2l0aCIsImEiLCJiIiwidmFyaWFibGUiLCJyZWZldGNoRG9jdW1lbnROb2RlcyIsIk9iamVjdCIsImVudHJpZXMiLCJtYXAiLCJtYXRlcmlhbCIsImRvY3VtZW50Tm9kZSIsInBhcnNlIiwicXVlcnlTdHJpbmciLCJmcmFnbWVudE5hbWUiLCJkZWZpbml0aW9ucyIsInJlZmV0Y2hEb2N1bWVudE5vZGUiLCJWQVJJQUJMRV9ERUZJTklUSU9OIiwidHlwZSIsInBhcnNlVHlwZSIsIlZBUklBQkxFIiwiTkFNRSIsImZpbHRlciIsIm5vbk51bGxhYmxlIiwiZmlsZXMiLCJkb2N1bWVudCIsInJhd1NETCIsInByaW50IiwibG9jYXRpb24iLCJmcmFnbWVudE5hbWVzIiwiQVJHVU1FTlRfREVGSU5JVElPTlNfRElSRUNUSVZFX05BTUUiLCJhcmd1bWVudERhdGFMaXN0IiwiZ2V0QXJndW1lbnREZWZpbml0aW9uRGF0YUxpc3QiLCJkYXRhIiwicHVzaCIsImRlZmF1bHRWYWx1ZSIsIkZyYWdtZW50U3ByZWFkIiwiaW5jbHVkZXMiLCJuZXN0ZWRGcmFnbWVudCIsImZpbmQiLCJuZXN0ZWRGcmFnbWVudFJlc3VsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm1zL2dlbmVyYXRlUmVmZXRjaFF1ZXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGVzIH0gZnJvbSAnQGdyYXBocWwtY29kZWdlbi9wbHVnaW4taGVscGVycyc7XG5pbXBvcnQgeyBBUkdVTUVOVF9ERUZJTklUSU9OU19ESVJFQ1RJVkVfTkFNRSwgUkVGRVRDSEFCTEVfRElSRUNUSVZFX05BTUUgfSBmcm9tICdAa2F6ZWt5by9uYXUnO1xuaW1wb3J0IHtcbiAgRG9jdW1lbnROb2RlLFxuICBGcmFnbWVudERlZmluaXRpb25Ob2RlLFxuICBLaW5kLFxuICBwYXJzZSxcbiAgcGFyc2VUeXBlLFxuICBwcmludCxcbiAgVmFyaWFibGVEZWZpbml0aW9uTm9kZSxcbiAgdmlzaXQsXG59IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgdW5pcVdpdGggfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZ2V0RnJhZ21lbnREZWZpbml0aW9uc0J5RG9jdW1lbnRGaWxlcyB9IGZyb20gJy4uL3V0aWxzL2dyYXBocWxBU1QnO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tICcuLi91dGlscy9ub25OdWxsYWJsZSc7XG5pbXBvcnQgeyBnZXRBcmd1bWVudERlZmluaXRpb25EYXRhTGlzdCB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm0gPSAoe1xuICBkb2N1bWVudEZpbGVzLFxufToge1xuICBkb2N1bWVudEZpbGVzOiBUeXBlcy5Eb2N1bWVudEZpbGVbXTtcbn0pOiB7IGRvY3VtZW50RmlsZXM6IFR5cGVzLkRvY3VtZW50RmlsZVtdIH0gPT4ge1xuICBjb25zdCBmcmFnbWVudERlZmluaXRpb25zID0gZ2V0RnJhZ21lbnREZWZpbml0aW9uc0J5RG9jdW1lbnRGaWxlcyhkb2N1bWVudEZpbGVzKTtcblxuICBjb25zdCByZWZldGNoUXVlcnlNYXRlcmlhbHM6IHtcbiAgICBbcXVlcnlOYW1lOiBzdHJpbmddOiB7IHZhcmlhYmxlRGVmaW5pdGlvbnM6IFZhcmlhYmxlRGVmaW5pdGlvbk5vZGVbXTsgaW5uZXJGcmFnbWVudE5hbWU6IHN0cmluZyB9O1xuICB9ID0ge307XG5cbiAgZnJhZ21lbnREZWZpbml0aW9ucy5mb3JFYWNoKChkZWZpbml0aW9uKSA9PiB7XG4gICAgdmlzaXQoZGVmaW5pdGlvbiwge1xuICAgICAgRGlyZWN0aXZlOiB7XG4gICAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgICBpZiAobm9kZS5uYW1lLnZhbHVlICE9PSBSRUZFVENIQUJMRV9ESVJFQ1RJVkVfTkFNRSB8fCAhbm9kZS5hcmd1bWVudHMpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIGNvbnN0IGFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHNbMF07XG4gICAgICAgICAgaWYgKGFyZ3VtZW50LnZhbHVlLmtpbmQgIT09IEtpbmQuU1RSSU5HKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgY29uc3QgcXVlcnlOYW1lID0gYXJndW1lbnQudmFsdWUudmFsdWU7XG5cbiAgICAgICAgICBjb25zdCBjb2xsZWN0UmVzdWx0ID0gY29sbGVjdFZhcmlhYmxlRGVmaW5pdGlvbnMoe1xuICAgICAgICAgICAgZnJhZ21lbnREZWZpbml0aW9uOiBkZWZpbml0aW9uLFxuICAgICAgICAgICAgYWxsRnJhZ21lbnREZWZpbml0aW9uczogZnJhZ21lbnREZWZpbml0aW9ucyxcbiAgICAgICAgICAgIGNvbGxlY3RlZEZyYWdtZW50TmFtZXM6IFtdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVmZXRjaFF1ZXJ5TWF0ZXJpYWxzW3F1ZXJ5TmFtZV0gPSB7XG4gICAgICAgICAgICBpbm5lckZyYWdtZW50TmFtZTogZGVmaW5pdGlvbi5uYW1lLnZhbHVlLFxuICAgICAgICAgICAgdmFyaWFibGVEZWZpbml0aW9uczogdW5pcVdpdGgoXG4gICAgICAgICAgICAgIGNvbGxlY3RSZXN1bHQudmFyaWFibGVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAgKGEsIGIpID0+IGEudmFyaWFibGUubmFtZS52YWx1ZSA9PT0gYi52YXJpYWJsZS5uYW1lLnZhbHVlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHJlZmV0Y2hEb2N1bWVudE5vZGVzOiBEb2N1bWVudE5vZGVbXSA9IE9iamVjdC5lbnRyaWVzKHJlZmV0Y2hRdWVyeU1hdGVyaWFscylcbiAgICAubWFwKChbcXVlcnlOYW1lLCBtYXRlcmlhbF0pID0+IHtcbiAgICAgIGNvbnN0IGRvY3VtZW50Tm9kZSA9IHBhcnNlKHF1ZXJ5U3RyaW5nKHsgcXVlcnlOYW1lLCBmcmFnbWVudE5hbWU6IG1hdGVyaWFsLmlubmVyRnJhZ21lbnROYW1lIH0pKTtcbiAgICAgIGlmIChkb2N1bWVudE5vZGUuZGVmaW5pdGlvbnNbMF0ua2luZCAhPT0gJ09wZXJhdGlvbkRlZmluaXRpb24nKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHJlZmV0Y2hEb2N1bWVudE5vZGU6IERvY3VtZW50Tm9kZSA9IHtcbiAgICAgICAgLi4uZG9jdW1lbnROb2RlLFxuICAgICAgICBkZWZpbml0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmRvY3VtZW50Tm9kZS5kZWZpbml0aW9uc1swXSxcbiAgICAgICAgICAgIHZhcmlhYmxlRGVmaW5pdGlvbnM6IFtcbiAgICAgICAgICAgICAgLi4ubWF0ZXJpYWwudmFyaWFibGVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtpbmQ6IEtpbmQuVkFSSUFCTEVfREVGSU5JVElPTixcbiAgICAgICAgICAgICAgICB0eXBlOiBwYXJzZVR5cGUoJ0lEIScpLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlOiB7IGtpbmQ6IEtpbmQuVkFSSUFCTEUsIG5hbWU6IHsga2luZDogS2luZC5OQU1FLCB2YWx1ZTogJ2lkJyB9IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlZmV0Y2hEb2N1bWVudE5vZGU7XG4gICAgfSlcbiAgICAuZmlsdGVyKG5vbk51bGxhYmxlKTtcblxuICBjb25zdCBmaWxlcyA9IFtcbiAgICAuLi5kb2N1bWVudEZpbGVzLFxuICAgIC4uLnJlZmV0Y2hEb2N1bWVudE5vZGVzLm1hcCgoZG9jdW1lbnROb2RlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb2N1bWVudDogZG9jdW1lbnROb2RlLFxuICAgICAgICByYXdTREw6IHByaW50KGRvY3VtZW50Tm9kZSksXG4gICAgICAgIGxvY2F0aW9uOiAnZ2VuZXJhdGVkIGJ5IE5hdScsXG4gICAgICB9O1xuICAgIH0pLFxuICBdO1xuXG4gIHJldHVybiB7IGRvY3VtZW50RmlsZXM6IGZpbGVzIH07XG59O1xuXG5jb25zdCBxdWVyeVN0cmluZyA9ICh7IHF1ZXJ5TmFtZSwgZnJhZ21lbnROYW1lIH06IHsgcXVlcnlOYW1lOiBzdHJpbmc7IGZyYWdtZW50TmFtZTogc3RyaW5nIH0pOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYFxuICAgIHF1ZXJ5ICR7cXVlcnlOYW1lfSB7XG4gICAgICBub2RlKGlkOiAkaWQpIHtcbiAgICAgICAgaWRcbiAgICAgICAgX190eXBlbmFtZVxuICAgICAgICAuLi4ke2ZyYWdtZW50TmFtZX1cbiAgICAgIH1cbiAgICB9YDtcbn07XG5cbmNvbnN0IGNvbGxlY3RWYXJpYWJsZURlZmluaXRpb25zID0gKHtcbiAgZnJhZ21lbnREZWZpbml0aW9uLFxuICBhbGxGcmFnbWVudERlZmluaXRpb25zLFxuICBjb2xsZWN0ZWRGcmFnbWVudE5hbWVzLFxufToge1xuICBmcmFnbWVudERlZmluaXRpb246IEZyYWdtZW50RGVmaW5pdGlvbk5vZGU7XG4gIGFsbEZyYWdtZW50RGVmaW5pdGlvbnM6IEZyYWdtZW50RGVmaW5pdGlvbk5vZGVbXTtcbiAgY29sbGVjdGVkRnJhZ21lbnROYW1lczogc3RyaW5nW107XG59KTogeyB2YXJpYWJsZURlZmluaXRpb25zOiBWYXJpYWJsZURlZmluaXRpb25Ob2RlW107IGNvbGxlY3RlZEZyYWdtZW50TmFtZXM6IHN0cmluZ1tdIH0gPT4ge1xuICBsZXQgdmFyaWFibGVEZWZpbml0aW9uczogVmFyaWFibGVEZWZpbml0aW9uTm9kZVtdID0gW107XG4gIGxldCBmcmFnbWVudE5hbWVzID0gWy4uLmNvbGxlY3RlZEZyYWdtZW50TmFtZXMsIGZyYWdtZW50RGVmaW5pdGlvbi5uYW1lLnZhbHVlXTtcblxuICAvLyBDb2xsZWN0IHZhcmlhYmxlIGRlZmluaXRpb25zXG4gIHZpc2l0KGZyYWdtZW50RGVmaW5pdGlvbiwge1xuICAgIERpcmVjdGl2ZToge1xuICAgICAgZW50ZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lLnZhbHVlICE9PSBBUkdVTUVOVF9ERUZJTklUSU9OU19ESVJFQ1RJVkVfTkFNRSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBhcmd1bWVudERhdGFMaXN0ID0gZ2V0QXJndW1lbnREZWZpbml0aW9uRGF0YUxpc3Qobm9kZSk7XG4gICAgICAgIGFyZ3VtZW50RGF0YUxpc3QuZm9yRWFjaCgoZGF0YSkgPT5cbiAgICAgICAgICB2YXJpYWJsZURlZmluaXRpb25zLnB1c2goe1xuICAgICAgICAgICAga2luZDogS2luZC5WQVJJQUJMRV9ERUZJTklUSU9OLFxuICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlLFxuICAgICAgICAgICAgdmFyaWFibGU6IHsga2luZDogS2luZC5WQVJJQUJMRSwgbmFtZTogZGF0YS5uYW1lIH0sXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRhdGEuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFZpc2l0IG5lc3RlZCBmcmFnbWVudHNcbiAgdmlzaXQoZnJhZ21lbnREZWZpbml0aW9uLCB7XG4gICAgRnJhZ21lbnRTcHJlYWQ6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnROYW1lID0gbm9kZS5uYW1lLnZhbHVlO1xuXG4gICAgICAgIGlmIChmcmFnbWVudE5hbWVzLmluY2x1ZGVzKGZyYWdtZW50TmFtZSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBjb25zdCBuZXN0ZWRGcmFnbWVudCA9IGFsbEZyYWdtZW50RGVmaW5pdGlvbnMuZmluZCgoZGVmaW5pdGlvbikgPT4gZGVmaW5pdGlvbi5uYW1lLnZhbHVlID09PSBmcmFnbWVudE5hbWUpO1xuICAgICAgICBpZiAoIW5lc3RlZEZyYWdtZW50KSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmVzdGVkRnJhZ21lbnRSZXN1bHQgPSBjb2xsZWN0VmFyaWFibGVEZWZpbml0aW9ucyh7XG4gICAgICAgICAgZnJhZ21lbnREZWZpbml0aW9uOiBuZXN0ZWRGcmFnbWVudCxcbiAgICAgICAgICBhbGxGcmFnbWVudERlZmluaXRpb25zLFxuICAgICAgICAgIGNvbGxlY3RlZEZyYWdtZW50TmFtZXM6IGZyYWdtZW50TmFtZXMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhcmlhYmxlRGVmaW5pdGlvbnMgPSBbLi4udmFyaWFibGVEZWZpbml0aW9ucywgLi4ubmVzdGVkRnJhZ21lbnRSZXN1bHQudmFyaWFibGVEZWZpbml0aW9uc107XG4gICAgICAgIGZyYWdtZW50TmFtZXMgPSBbLi4uZnJhZ21lbnROYW1lcywgLi4ubmVzdGVkRnJhZ21lbnRSZXN1bHQuY29sbGVjdGVkRnJhZ21lbnROYW1lc107XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgdmFyaWFibGVEZWZpbml0aW9ucywgY29sbGVjdGVkRnJhZ21lbnROYW1lczogZnJhZ21lbnROYW1lcyB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUF1RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFaEQsSUFBTUEsU0FBUyxHQUFHLFNBQVpBLFNBQVMsT0FJeUI7RUFBQSxJQUg3Q0MsYUFBYSxRQUFiQSxhQUFhO0VBSWIsSUFBTUMsbUJBQW1CLEdBQUcsSUFBQUMsaURBQXFDLEVBQUNGLGFBQWEsQ0FBQztFQUVoRixJQUFNRyxxQkFFTCxHQUFHLENBQUMsQ0FBQztFQUVORixtQkFBbUIsQ0FBQ0csT0FBTyxDQUFDLFVBQUNDLFVBQVUsRUFBSztJQUMxQyxJQUFBQyxjQUFLLEVBQUNELFVBQVUsRUFBRTtNQUNoQkUsU0FBUyxFQUFFO1FBQ1RDLEtBQUssaUJBQUNDLElBQUksRUFBRTtVQUNWLElBQUlBLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLEtBQUtDLCtCQUEwQixJQUFJLENBQUNILElBQUksQ0FBQ0ksU0FBUyxFQUFFLE9BQU8sS0FBSztVQUVuRixJQUFNQyxRQUFRLEdBQUdMLElBQUksQ0FBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQztVQUNsQyxJQUFJQyxRQUFRLENBQUNILEtBQUssQ0FBQ0ksSUFBSSxLQUFLQyxhQUFJLENBQUNDLE1BQU0sRUFBRSxPQUFPLEtBQUs7VUFDckQsSUFBTUMsU0FBUyxHQUFHSixRQUFRLENBQUNILEtBQUssQ0FBQ0EsS0FBSztVQUV0QyxJQUFNUSxhQUFhLEdBQUdDLDBCQUEwQixDQUFDO1lBQy9DQyxrQkFBa0IsRUFBRWhCLFVBQVU7WUFDOUJpQixzQkFBc0IsRUFBRXJCLG1CQUFtQjtZQUMzQ3NCLHNCQUFzQixFQUFFO1VBQzFCLENBQUMsQ0FBQztVQUVGcEIs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