eslint-plugin-import
Advanced tools
Comparing version 1.1.0 to 1.2.0
@@ -83,2 +83,2 @@ # no-unresolved | ||
[`import/ignore`]: ../../README.md#import/ignore | ||
[`import/ignore`]: ../../README.md#importignore |
@@ -502,3 +502,2 @@ 'use strict'; | ||
} | ||
''; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvcmUvZ2V0RXhwb3J0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFnVWdCOztBQWhVaEI7O0lBQVk7O0FBRVo7O0FBQ0E7O0lBQVk7O0FBRVo7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7QUFHQSxJQUFNLGVBQWUsbUJBQWY7O0lBRWU7QUFDbkIsV0FEbUIsU0FDbkIsQ0FBWSxJQUFaLEVBQWtCO3dDQURDLFdBQ0Q7O0FBQ2hCLFNBQUssSUFBTCxHQUFZLElBQVosQ0FEZ0I7QUFFaEIsU0FBSyxTQUFMLEdBQWlCLG1CQUFqQjs7QUFGZ0IsUUFJaEIsQ0FBSyxTQUFMLEdBQWlCLG1CQUFqQixDQUpnQjtBQUtoQixTQUFLLFlBQUwsR0FBb0IsbUJBQXBCLENBTGdCO0FBTWhCLFNBQUssTUFBTCxHQUFjLEVBQWQsQ0FOZ0I7R0FBbEI7OzZCQURtQjs7Ozs7Ozs7Ozs7d0JBNE1mLE1BQU07QUFDUixVQUFJLEtBQUssU0FBTCxDQUFlLEdBQWYsQ0FBbUIsSUFBbkIsQ0FBSixFQUE4QixPQUFPLElBQVAsQ0FBOUI7QUFDQSxVQUFJLEtBQUssU0FBTCxDQUFlLEdBQWYsQ0FBbUIsSUFBbkIsQ0FBSixFQUE4QixPQUFPLElBQVAsQ0FBOUI7OzJDQUZROzs7OztBQUlSLHdEQUFnQixLQUFLLFlBQUwsQ0FBa0IsTUFBbEIsVUFBaEIsb0dBQTRDO2NBQW5DLGtCQUFtQzs7QUFDMUMsY0FBSSxXQUFXLEtBQVg7OztBQURzQyxjQUl0QyxDQUFDLFFBQUQsRUFBVyxTQUFmOztBQUVBLGNBQUksU0FBUyxHQUFULENBQWEsSUFBYixDQUFKLEVBQXdCLE9BQU8sSUFBUCxDQUF4QjtTQU5GOzs7Ozs7Ozs7Ozs7OztPQUpROztBQWFSLGFBQU8sS0FBUCxDQWJROzs7O3dCQWdCTixNQUFNO0FBQ1IsVUFBSSxLQUFLLFNBQUwsQ0FBZSxHQUFmLENBQW1CLElBQW5CLENBQUosRUFBOEIsT0FBTyxLQUFLLFNBQUwsQ0FB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LENBQWUsUUFBUSxLQUFSLEVBQWUsRUFBRSxRQUFRLElBQVIsRUFBaEMsQ0FBZixDQURFO09BQUosQ0FFRSxPQUFPLEdBQVAsRUFBWTs7T0FBWjtLQUxzQixDQUExQixDQUpjO0FBYWQsV0FBTyxJQUFQLENBYmM7R0FBTCxDQUFYLENBSjRCOztBQW9CNUIsU0FBTyxRQUFQLENBcEI0QjtDQUE5Qjs7Ozs7Ozs7O0FBOEJPLFNBQVMsdUJBQVQsQ0FBaUMsT0FBakMsRUFBMEMsUUFBMUMsRUFBb0Q7QUFDekQsVUFBUSxRQUFRLElBQVI7QUFDTixTQUFLLFlBQUw7O0FBQ0UsZUFBUyxPQUFULEVBREY7QUFFRSxZQUZGOztBQURGLFNBS08sZUFBTDtBQUNFLGNBQVEsVUFBUixDQUFtQixPQUFuQixDQUEyQixpQkFBZTtZQUFaLG9CQUFZOztBQUN4QyxnQ0FBd0IsS0FBeEIsRUFBK0IsUUFBL0IsRUFEd0M7T0FBZixDQUEzQixDQURGO0FBSUUsWUFKRjs7QUFMRixTQVdPLGNBQUw7QUFDRSxjQUFRLFFBQVIsQ0FBaUIsT0FBakIsQ0FBeUIsVUFBQyxPQUFELEVBQWE7QUFDcEMsWUFBSSxXQUFXLElBQVgsRUFBaUIsT0FBckI7QUFDQSxnQ0FBd0IsT0FBeEIsRUFBaUMsUUFBakMsRUFGb0M7T0FBYixDQUF6QixDQURGO0FBS0UsWUFMRjtBQVhGLEdBRHlEO0NBQXBEOztBQXFCUCxTQUFTLFVBQVQsQ0FBb0IsTUFBcEIsRUFBNEI7QUFDMUIsTUFBTSxpQkFBaUIsd0JBQVcsTUFBWCxDQUFqQixDQURvQjtBQUUxQixpQkFBZSxNQUFmLENBQXNCLHlCQUFlLE1BQWYsQ0FBdEIsRUFGMEI7QUFHMUIsU0FBTyxlQUFlLE1BQWYsQ0FBc0IsS0FBdEIsQ0FBUCxDQUgwQjtDQUE1QjtBQUtBIiwiZmlsZSI6ImNvcmUvZ2V0RXhwb3J0cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJ1xuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0ICogYXMgZG9jdHJpbmUgZnJvbSAnZG9jdHJpbmUnXG5cbmltcG9ydCBwYXJzZSBmcm9tICcuL3BhcnNlJ1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnLi9yZXNvbHZlJ1xuaW1wb3J0IGlzSWdub3JlZCBmcm9tICcuL2lnbm9yZSdcblxuLy8gbWFwIGZyb20gc2V0dGluZ3Mgc2hhMSA9PiBwYXRoID0+IGV4cG9ydCBtYXAgb2JqZWN0c1xuY29uc3QgZXhwb3J0Q2FjaGVzID0gbmV3IE1hcCgpXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9ydE1hcCB7XG4gIGNvbnN0cnVjdG9yKHBhdGgpIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgTWFwKClcbiAgICAvLyB0b2RvOiByZXN0cnVjdHVyZSB0byBrZXkgb24gcGF0aCwgdmFsdWUgaXMgcmVzb2x2ZXIgKyBtYXAgb2YgbmFtZXNcbiAgICB0aGlzLnJlZXhwb3J0cyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5lcnJvcnMgPSBbXVxuICB9XG5cbiAgZ2V0IGhhc0RlZmF1bHQoKSB7IHJldHVybiB0aGlzLmdldCgnZGVmYXVsdCcpICE9IG51bGwgfSAvLyBzdHJvbmdlciB0aGFuIHRoaXMuaGFzXG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgbGV0IHNpemUgPSB0aGlzLm5hbWVzcGFjZS5zaXplICsgdGhpcy5yZWV4cG9ydHMuc2l6ZVxuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2goZGVwID0+IHNpemUgKz0gZGVwKCkuc2l6ZSlcbiAgICByZXR1cm4gc2l6ZVxuICB9XG5cbiAgc3RhdGljIGdldChzb3VyY2UsIGNvbnRleHQpIHtcblxuICAgIHZhciBwYXRoID0gcmVzb2x2ZShzb3VyY2UsIGNvbnRleHQpXG4gICAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBFeHBvcnRNYXAuZm9yKHBhdGgsIGNvbnRleHQpXG4gIH1cblxuICBzdGF0aWMgZm9yKHBhdGgsIGNvbnRleHQpIHtcbiAgICBsZXQgZXhwb3J0TWFwXG5cbiAgICBjb25zdCBjYWNoZUtleSA9IGhhc2hPYmplY3Qoe1xuICAgICAgc2V0dGluZ3M6IGNvbnRleHQuc2V0dGluZ3MsXG4gICAgICBwYXJzZXJQYXRoOiBjb250ZXh0LnBhcnNlclBhdGgsXG4gICAgICBwYXJzZXJPcHRpb25zOiBjb250ZXh0LnBhcnNlck9wdGlvbnMsXG4gICAgfSlcbiAgICBsZXQgZXhwb3J0Q2FjaGUgPSBleHBvcnRDYWNoZXMuZ2V0KGNhY2hlS2V5KVxuICAgIGlmIChleHBvcnRDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHBvcnRDYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgZXhwb3J0Q2FjaGVzLnNldChjYWNoZUtleSwgZXhwb3J0Q2FjaGUpXG4gICAgfVxuXG4gICAgZXhwb3J0TWFwID0gZXhwb3J0Q2FjaGUuZ2V0KHBhdGgpXG4gICAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgICBpZiAoZXhwb3J0TWFwID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoKVxuICAgIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgICAgLy8gZGF0ZSBlcXVhbGl0eSBjaGVja1xuICAgICAgaWYgKGV4cG9ydE1hcC5tdGltZSAtIHN0YXRzLm10aW1lID09PSAwKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRNYXBcbiAgICAgIH1cbiAgICAgIC8vIGZ1dHVyZTogY2hlY2sgY29udGVudCBlcXVhbGl0eT9cbiAgICB9XG5cbiAgICBleHBvcnRNYXAgPSBFeHBvcnRNYXAucGFyc2UocGF0aCwgY29udGV4dClcbiAgICBleHBvcnRNYXAubXRpbWUgPSBzdGF0cy5tdGltZVxuXG4gICAgLy8gaWdub3JlIGVtcHRpZXMsIG9wdGlvbmFsbHlcbiAgICBpZiAoZXhwb3J0TWFwLm5hbWVzcGFjZS5zaXplID09PSAwICYmIGlzSWdub3JlZChwYXRoLCBjb250ZXh0KSkge1xuICAgICAgZXhwb3J0TWFwID0gbnVsbFxuICAgIH1cblxuICAgIGV4cG9ydENhY2hlLnNldChwYXRoLCBleHBvcnRNYXApXG5cbiAgICByZXR1cm4gZXhwb3J0TWFwXG4gIH1cblxuICBzdGF0aWMgcGFyc2UocGF0aCwgY29udGV4dCkge1xuICAgIHZhciBtID0gbmV3IEV4cG9ydE1hcChwYXRoKVxuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBhc3QgPSBwYXJzZShwYXRoLCBjb250ZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbS5lcnJvcnMucHVzaChlcnIpXG4gICAgICByZXR1cm4gbSAvLyBjYW4ndCBjb250aW51ZVxuICAgIH1cblxuXG4gICAgLy8gYXR0ZW1wdCB0byBjb2xsZWN0IG1vZHVsZSBkb2NcbiAgICBhc3QuY29tbWVudHMuc29tZShjID0+IHtcbiAgICAgIGlmIChjLnR5cGUgIT09ICdCbG9jaycpIHJldHVybiBmYWxzZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZG9jID0gZG9jdHJpbmUucGFyc2UoYy52YWx1ZSwgeyB1bndyYXA6IHRydWUgfSlcbiAgICAgICAgaWYgKGRvYy50YWdzLnNvbWUodCA9PiB0LnRpdGxlID09PSAnbW9kdWxlJykpIHtcbiAgICAgICAgICBtLmRvYyA9IGRvY1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcblxuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKClcblxuICAgIGZ1bmN0aW9uIHJlbW90ZVBhdGgobm9kZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmUucmVsYXRpdmUobm9kZS5zb3VyY2UudmFsdWUsIHBhdGgsIGNvbnRleHQuc2V0dGluZ3MpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZUltcG9ydChub2RlKSB7XG4gICAgICBjb25zdCBycCA9IHJlbW90ZVBhdGgobm9kZSlcbiAgICAgIGlmIChycCA9PSBudWxsKSByZXR1cm4gbnVsbFxuICAgICAgcmV0dXJuIEV4cG9ydE1hcC5mb3IocnAsIGNvbnRleHQpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpIHtcbiAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMoaWRlbnRpZmllci5uYW1lKSkgcmV0dXJuXG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlSW1wb3J0KG5hbWVzcGFjZXMuZ2V0KGlkZW50aWZpZXIubmFtZSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkTmFtZXNwYWNlKG9iamVjdCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgbnNmbiA9IGdldE5hbWVzcGFjZShpZGVudGlmaWVyKVxuICAgICAgaWYgKG5zZm4pIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJ25hbWVzcGFjZScsIHsgZ2V0OiBuc2ZuIH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmplY3RcbiAgICB9XG5cblxuICAgIGFzdC5ib2R5LmZvckVhY2goZnVuY3Rpb24gKG4pIHtcblxuICAgICAgaWYgKG4udHlwZSA9PT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHtcbiAgICAgICAgY29uc3QgZXhwb3J0TWV0YSA9IGNhcHR1cmVEb2MobilcbiAgICAgICAgaWYgKG4uZGVjbGFyYXRpb24udHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgYWRkTmFtZXNwYWNlKGV4cG9ydE1ldGEsIG4uZGVjbGFyYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgZXhwb3J0TWV0YSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChuLnR5cGUgPT09ICdFeHBvcnRBbGxEZWNsYXJhdGlvbicpIHtcbiAgICAgICAgbGV0IHJlbW90ZU1hcCA9IHJlbW90ZVBhdGgobilcbiAgICAgICAgaWYgKHJlbW90ZU1hcCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgbS5kZXBlbmRlbmNpZXMuc2V0KHJlbW90ZU1hcCwgKCkgPT4gRXhwb3J0TWFwLmZvcihyZW1vdGVNYXAsIGNvbnRleHQpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gY2FwdHVyZSBuYW1lc3BhY2VzIGluIGNhc2Ugb2YgbGF0ZXIgZXhwb3J0XG4gICAgICBpZiAobi50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nKSB7XG4gICAgICAgIGxldCBuc1xuICAgICAgICBpZiAobi5zcGVjaWZpZXJzLnNvbWUocyA9PiBzLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInICYmIChucyA9IHMpKSkge1xuICAgICAgICAgIG5hbWVzcGFjZXMuc2V0KG5zLmxvY2FsLm5hbWUsIG4pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChuLnR5cGUgPT09ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyl7XG4gICAgICAgIC8vIGNhcHR1cmUgZGVjbGFyYXRpb25cbiAgICAgICAgaWYgKG4uZGVjbGFyYXRpb24gIT0gbnVsbCkge1xuICAgICAgICAgIHN3aXRjaCAobi5kZWNsYXJhdGlvbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdGdW5jdGlvbkRlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0NsYXNzRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnVHlwZUFsaWFzJzogLy8gZmxvd3R5cGUgd2l0aCBiYWJlbC1lc2xpbnQgcGFyc2VyXG4gICAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChuLmRlY2xhcmF0aW9uLmlkLm5hbWUsIGNhcHR1cmVEb2MobikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgICAgbi5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT5cbiAgICAgICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShkLmlkLCBpZCA9PiBtLm5hbWVzcGFjZS5zZXQoaWQubmFtZSwgY2FwdHVyZURvYyhkLCBuKSkpKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG4uc3BlY2lmaWVycy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwb3J0TWV0YSA9IHt9XG4gICAgICAgICAgbGV0IGxvY2FsXG5cbiAgICAgICAgICBzd2l0Y2ggKHMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnRXhwb3J0RGVmYXVsdFNwZWNpZmllcic6XG4gICAgICAgICAgICAgIGlmICghbi5zb3VyY2UpIHJldHVyblxuICAgICAgICAgICAgICBsb2NhbCA9ICdkZWZhdWx0J1xuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgY2FzZSAnRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyJzpcbiAgICAgICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KHMuZXhwb3J0ZWQubmFtZSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydE1ldGEsICduYW1lc3BhY2UnLCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkgeyByZXR1cm4gcmVzb2x2ZUltcG9ydChuKSB9LFxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICBjYXNlICdFeHBvcnRTcGVjaWZpZXInOlxuICAgICAgICAgICAgICBpZiAoIW4uc291cmNlKSB7XG4gICAgICAgICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KHMuZXhwb3J0ZWQubmFtZSwgYWRkTmFtZXNwYWNlKGV4cG9ydE1ldGEsIHMubG9jYWwpKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVsc2UgZmFsbHMgdGhyb3VnaFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbG9jYWwgPSBzLmxvY2FsLm5hbWVcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB0b2RvOiBKU0RvY1xuICAgICAgICAgIG0ucmVleHBvcnRzLnNldChzLmV4cG9ydGVkLm5hbWUsIHsgbG9jYWwsIGdldEltcG9ydDogKCkgPT4gcmVzb2x2ZUltcG9ydChuKSB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gbVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGNoZWNrIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgbmFtZXMgZm9yIGV4aXN0ZW5jZVxuICAgKiBpbiB0aGUgYmFzZSBuYW1lc3BhY2UsIGJ1dCBpdCB3aWxsIGV4cGFuZCBhbGwgYGV4cG9ydCAqIGZyb20gJy4uLidgIGV4cG9ydHNcbiAgICogaWYgbm90IGZvdW5kIGluIHRoZSBleHBsaWNpdCBuYW1lc3BhY2UuXG4gICAqIEBwYXJhbSAge3N0cmluZ30gIG5hbWVcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBgbmFtZWAgaXMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuXG4gICAqL1xuICBoYXMobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkgcmV0dXJuIHRydWVcblxuICAgIGZvciAobGV0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcy52YWx1ZXMoKSkge1xuICAgICAgbGV0IGlubmVyTWFwID0gZGVwKClcblxuICAgICAgLy8gdG9kbzogcmVwb3J0IGFzIHVucmVzb2x2ZWQ/XG4gICAgICBpZiAoIWlubmVyTWFwKSBjb250aW51ZVxuXG4gICAgICBpZiAoaW5uZXJNYXAuaGFzKG5hbWUpKSByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSByZXR1cm4gdGhpcy5uYW1lc3BhY2UuZ2V0KG5hbWUpXG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCB7IGxvY2FsLCBnZXRJbXBvcnQgfSA9IHRoaXMucmVleHBvcnRzLmdldChuYW1lKVxuICAgICAgICAgICwgaW1wb3J0ZWQgPSBnZXRJbXBvcnQoKVxuICAgICAgaWYgKGltcG9ydGVkID09IG51bGwpIHJldHVybiB1bmRlZmluZWRcblxuICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzLCBvbmx5IGlmIG5hbWUgbWF0Y2hlc1xuICAgICAgaWYgKGltcG9ydGVkLnBhdGggPT09IHRoaXMucGF0aCAmJiBsb2NhbCA9PT0gbmFtZSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gaW1wb3J0ZWQuZ2V0KGxvY2FsKVxuICAgIH1cblxuICAgIGZvciAobGV0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcy52YWx1ZXMoKSkge1xuICAgICAgbGV0IGlubmVyTWFwID0gZGVwKClcbiAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgaWYgKCFpbm5lck1hcCkgY29udGludWVcblxuICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICBpZiAoaW5uZXJNYXAucGF0aCA9PT0gdGhpcy5wYXRoKSBjb250aW51ZVxuXG4gICAgICBsZXQgaW5uZXJWYWx1ZSA9IGlubmVyTWFwLmdldChuYW1lKVxuICAgICAgaWYgKGlubmVyVmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGlubmVyVmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgdGhpcy5uYW1lc3BhY2UuZm9yRWFjaCgodiwgbikgPT5cbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcykpXG5cbiAgICB0aGlzLnJlZXhwb3J0cy5mb3JFYWNoKCh7IGdldEltcG9ydCwgbG9jYWwgfSwgbmFtZSkgPT5cbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgZ2V0SW1wb3J0KCkuZ2V0KGxvY2FsKSwgbmFtZSwgdGhpcykpXG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiBkZXAoKS5mb3JFYWNoKCh2LCBuKSA9PlxuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2LCBuLCB0aGlzKSkpXG4gIH1cblxuICAvLyB0b2RvOiBrZXlzLCB2YWx1ZXMsIGVudHJpZXM/XG5cbiAgcmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogZGVjbGFyYXRpb24uc291cmNlLFxuICAgICAgbWVzc2FnZTogYFBhcnNlIGVycm9ycyBpbiBpbXBvcnRlZCBtb2R1bGUgJyR7ZGVjbGFyYXRpb24uc291cmNlLnZhbHVlfSc6IGAgK1xuICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZSA9PiBgJHtlLm1lc3NhZ2V9ICgke2UubGluZU51bWJlcn06JHtlLmNvbHVtbn0pYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfWAsXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIHBhcnNlIEpTRG9jIGZyb20gdGhlIGZpcnN0IG5vZGUgdGhhdCBoYXMgbGVhZGluZyBjb21tZW50c1xuICogQHBhcmFtICB7Li4uW3R5cGVdfSBub2RlcyBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHt7ZG9jOiBvYmplY3R9fVxuICovXG5mdW5jdGlvbiBjYXB0dXJlRG9jKC4uLm5vZGVzKSB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge31cblxuICAvLyAnc29tZScgc2hvcnQtY2lyY3VpdHMgb24gZmlyc3QgJ3RydWUnXG4gIG5vZGVzLnNvbWUobiA9PiB7XG4gICAgaWYgKCFuLmxlYWRpbmdDb21tZW50cykgcmV0dXJuIGZhbHNlXG5cbiAgICAvLyBjYXB0dXJlIFhTRG9jXG4gICAgbi5sZWFkaW5nQ29tbWVudHMuZm9yRWFjaChjb21tZW50ID0+IHtcbiAgICAgIC8vIHNraXAgbm9uLWJsb2NrIGNvbW1lbnRzXG4gICAgICBpZiAoY29tbWVudC52YWx1ZS5zbGljZSgwLCA0KSAhPT0gXCIqXFxuICpcIikgcmV0dXJuXG4gICAgICB0cnkge1xuICAgICAgICBtZXRhZGF0YS5kb2MgPSBkb2N0cmluZS5wYXJzZShjb21tZW50LnZhbHVlLCB7IHVud3JhcDogdHJ1ZSB9KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGRvbid0IGNhcmUsIGZvciBub3c/IG1heWJlIGFkZCB0byBgZXJyb3JzP2AgKi9cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0cnVlXG4gIH0pXG5cbiAgcmV0dXJuIG1ldGFkYXRhXG59XG5cbi8qKlxuICogVHJhdmVyc2UgYSBwYXR0ZXJuL2lkZW50aWZpZXIgbm9kZSwgY2FsbGluZyAnY2FsbGJhY2snXG4gKiBmb3IgZWFjaCBsZWFmIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gIHtub2RlfSAgIHBhdHRlcm5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHBhdHRlcm4sIGNhbGxiYWNrKSB7XG4gIHN3aXRjaCAocGF0dGVybi50eXBlKSB7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgICAgY2FsbGJhY2socGF0dGVybilcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlICdPYmplY3RQYXR0ZXJuJzpcbiAgICAgIHBhdHRlcm4ucHJvcGVydGllcy5mb3JFYWNoKCh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUodmFsdWUsIGNhbGxiYWNrKVxuICAgICAgfSlcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVyblxuICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShlbGVtZW50LCBjYWxsYmFjaylcbiAgICAgIH0pXG4gICAgICBicmVha1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc2hPYmplY3Qob2JqZWN0KSB7XG4gIGNvbnN0IHNldHRpbmdzU2hhc3VtID0gY3JlYXRlSGFzaCgnc2hhMScpXG4gIHNldHRpbmdzU2hhc3VtLnVwZGF0ZShKU09OLnN0cmluZ2lmeShvYmplY3QpKVxuICByZXR1cm4gc2V0dGluZ3NTaGFzdW0uZGlnZXN0KCdoZXgnKVxufVxuYGBcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvcmUvZ2V0RXhwb3J0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFnVWdCOztBQWhVaEI7O0lBQVk7O0FBRVo7O0FBQ0E7O0lBQVk7O0FBRVo7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7QUFHQSxJQUFNLGVBQWUsbUJBQWY7O0lBRWU7QUFDbkIsV0FEbUIsU0FDbkIsQ0FBWSxJQUFaLEVBQWtCO3dDQURDLFdBQ0Q7O0FBQ2hCLFNBQUssSUFBTCxHQUFZLElBQVosQ0FEZ0I7QUFFaEIsU0FBSyxTQUFMLEdBQWlCLG1CQUFqQjs7QUFGZ0IsUUFJaEIsQ0FBSyxTQUFMLEdBQWlCLG1CQUFqQixDQUpnQjtBQUtoQixTQUFLLFlBQUwsR0FBb0IsbUJBQXBCLENBTGdCO0FBTWhCLFNBQUssTUFBTCxHQUFjLEVBQWQsQ0FOZ0I7R0FBbEI7OzZCQURtQjs7Ozs7Ozs7Ozs7d0JBNE1mLE1BQU07QUFDUixVQUFJLEtBQUssU0FBTCxDQUFlLEdBQWYsQ0FBbUIsSUFBbkIsQ0FBSixFQUE4QixPQUFPLElBQVAsQ0FBOUI7QUFDQSxVQUFJLEtBQUssU0FBTCxDQUFlLEdBQWYsQ0FBbUIsSUFBbkIsQ0FBSixFQUE4QixPQUFPLElBQVAsQ0FBOUI7OzJDQUZROzs7OztBQUlSLHdEQUFnQixLQUFLLFlBQUwsQ0FBa0IsTUFBbEIsVUFBaEIsb0dBQTRDO2NBQW5DLGtCQUFtQzs7QUFDMUMsY0FBSSxXQUFXLEtBQVg7OztBQURzQyxjQUl0QyxDQUFDLFFBQUQsRUFBVyxTQUFmOztBQUVBLGNBQUksU0FBUyxHQUFULENBQWEsSUFBYixDQUFKLEVBQXdCLE9BQU8sSUFBUCxDQUF4QjtTQU5GOzs7Ozs7Ozs7Ozs7OztPQUpROztBQWFSLGFBQU8sS0FBUCxDQWJROzs7O3dCQWdCTixNQUFNO0FBQ1IsVUFBSSxLQUFLLFNBQUwsQ0FBZSxHQUFmLENBQW1CLElBQW5CLENBQUosRUFBOEIsT0FBTyxLQUFLLFNBQUwsQ0FBZSxHQUFmLENBQW1CLElBQW5CLENBQVAsQ0FBOUI7O0FBRUEsVUFBSSxLQUFLLFNBQUwsQ0FBZSxHQUFmLENBQW1CLElBQW5CLENBQUosRUFBOEI7NkJBQ0MsS0FBSyxTQUFMLENBQWUsR0FBZixDQUFtQixJQUFuQixFQUREOztZQUNwQiw2QkFEb0I7QUFDdEIsWUFBUyxvQ0FBVCxDQURzQjtBQUV0Qix1QkFBVyxXQUFYLENBRnNCO0FBRzVCLFlBQUksWUFBWSxJQUFaLEVBQWtCLE9BQU8sU0FBUCxDQUF0Qjs7O0FBSDRCLFlBTXhCLFNBQVMsSUFBVCxLQUFrQixLQUFLLElBQUwsSUFBYSxVQUFVLElBQVYsRUFBZ0IsT0FBTyxTQUFQLENBQW5EOztBQUVBLGVBQU8sU0FBUyxHQUFULENBQWEsS0FBYixDQUFQLENBUjRCO09BQTlCOzs0Q0FIUTs7Ozs7QUFjUix5REFBZ0IsS0FBSyxZQUFMLENBQWtCLE1BQWxCLFdBQWhCLHdHQUE0QztjQUFuQyxtQkFBbUM7O0FBQzFDLGNBQUksV0FBVyxLQUFYOztBQURzQyxjQUd0QyxDQUFDLFFBQUQsRUFBVyxTQUFmOzs7QUFIMEMsY0FNdEMsU0FBUyxJQUFULEtBQWtCLEtBQUssSUFBTCxFQUFXLFNBQWpDOztBQUVBLGNBQUksYUFBYSxTQUFTLEdBQVQsQ0FBYSxJQUFiLENBQWIsQ0FSc0M7QUFTMUMsY0FBSSxlQUFlLFNBQWYsRUFBMEIsT0FBTyxVQUFQLENBQTlCO1NBVEY7Ozs7Ozs7Ozs7Ozs7O09BZFE7O0FBMEJSLGFBQU8sU0FBUCxDQTFCUTs7Ozs0QkE2QkYsVUFBVSxTQUFTOzs7QUFDekIsV0FBSyxTQUFMLENBQWUsT0FBZixDQUF1QixVQUFDLENBQUQsRUFBSSxDQUFKO2VBQ3JCLFNBQVMsSUFBVCxDQUFjLE9BQWQsRUFBdUIsQ0FBdkIsRUFBMEIsQ0FBMUI7T0FEcUIsQ0FBdkIsQ0FEeUI7O0FBSXpCLFdBQUssU0FBTCxDQUFlLE9BQWYsQ0FBdUIsZ0JBQXVCLElBQXZCO1lBQUc7WUFBVztlQUNuQyxTQUFTLElBQVQsQ0FBYyxPQUFkLEVBQXVCLFlBQVksR0FBWixDQUFnQixLQUFoQixDQUF2QixFQUErQyxJQUEvQztPQURxQixDQUF2QixDQUp5Qjs7QUFPekIsV0FBSyxZQUFMLENBQWtCLE9BQWxCLENBQTBCO2VBQU8sTUFBTSxPQUFOLENBQWMsVUFBQyxDQUFELEVBQUksQ0FBSjtpQkFDN0MsU0FBUyxJQUFULENBQWMsT0FBZCxFQUF1QixDQUF2QixFQUEwQixDQUExQjtTQUQ2QztPQUFyQixDQUExQixDQVB5Qjs7Ozs7OztpQ0FhZCxTQUFTLGFBQWE7QUFDakMsY0FBUSxNQUFSLENBQWU7QUFDYixjQUFNLFlBQVksTUFBWjtBQUNOLGlCQUFTLHVDQUFvQyxZQUFZLE1BQVosQ0FBbUIsS0FBbkIsU0FBcEMsU0FDTSxLQUFLLE1BQUwsQ0FDSSxHQURKLENBQ1E7aUJBQVEsRUFBRSxPQUFGLFVBQWMsRUFBRSxVQUFGLFNBQWdCLEVBQUUsTUFBRjtTQUF0QyxDQURSLENBRUksSUFGSixDQUVTLElBRlQsRUFETjtPQUZYLEVBRGlDOzs7O3dCQTVQbEI7QUFBRSxhQUFPLEtBQUssR0FBTCxDQUFTLFNBQVQsS0FBdUIsSUFBdkIsQ0FBVDs7Ozs7d0JBRU47QUFDVCxVQUFJLE9BQU8sS0FBSyxTQUFMLENBQWUsSUFBZixHQUFzQixLQUFLLFNBQUwsQ0FBZSxJQUFmLENBRHhCO0FBRVQsV0FBSyxZQUFMLENBQWtCLE9BQWxCLENBQTBCO2VBQU8sUUFBUSxNQUFNLElBQU47T0FBZixDQUExQixDQUZTO0FBR1QsYUFBTyxJQUFQLENBSFM7Ozs7d0JBTUEsUUFBUSxTQUFTOztBQUUxQixVQUFJLE9BQU8sdUJBQVEsTUFBUixFQUFnQixPQUFoQixDQUFQLENBRnNCO0FBRzFCLFVBQUksUUFBUSxJQUFSLEVBQWMsT0FBTyxJQUFQLENBQWxCOztBQUVBLGFBQU8sVUFBVSxHQUFWLENBQWMsSUFBZCxFQUFvQixPQUFwQixDQUFQLENBTDBCOzs7O3lCQVFqQixNQUFNLFNBQVM7QUFDeEIsVUFBSSxrQkFBSixDQUR3Qjs7QUFHeEIsVUFBTSxXQUFXLFdBQVc7QUFDMUIsa0JBQVUsUUFBUSxRQUFSO0FBQ1Ysb0JBQVksUUFBUSxVQUFSO0FBQ1osdUJBQWUsUUFBUSxhQUFSO09BSEEsQ0FBWCxDQUhrQjtBQVF4QixVQUFJLGNBQWMsYUFBYSxHQUFiLENBQWlCLFFBQWpCLENBQWQsQ0FSb0I7QUFTeEIsVUFBSSxnQkFBZ0IsU0FBaEIsRUFBMkI7QUFDN0Isc0JBQWMsbUJBQWQsQ0FENkI7QUFFN0IscUJBQWEsR0FBYixDQUFpQixRQUFqQixFQUEyQixXQUEzQixFQUY2QjtPQUEvQjs7QUFLQSxrQkFBWSxZQUFZLEdBQVosQ0FBZ0IsSUFBaEIsQ0FBWjs7QUFkd0IsVUFnQnBCLGNBQWMsSUFBZCxFQUFvQixPQUFPLElBQVAsQ0FBeEI7O0FBRUEsVUFBTSxRQUFRLEdBQUcsUUFBSCxDQUFZLElBQVosQ0FBUixDQWxCa0I7QUFtQnhCLFVBQUksYUFBYSxJQUFiLEVBQW1COztBQUVyQixZQUFJLFVBQVUsS0FBVixHQUFrQixNQUFNLEtBQU4sS0FBZ0IsQ0FBbEMsRUFBcUM7QUFDdkMsaUJBQU8sU0FBUCxDQUR1QztTQUF6Qzs7QUFGcUIsT0FBdkI7O0FBUUEsa0JBQVksVUFBVSxLQUFWLENBQWdCLElBQWhCLEVBQXNCLE9BQXRCLENBQVosQ0EzQndCO0FBNEJ4QixnQkFBVSxLQUFWLEdBQWtCLE1BQU0sS0FBTjs7O0FBNUJNLFVBK0JwQixVQUFVLFNBQVYsQ0FBb0IsSUFBcEIsS0FBNkIsQ0FBN0IsSUFBa0Msc0JBQVUsSUFBVixFQUFnQixPQUFoQixDQUFsQyxFQUE0RDtBQUM5RCxvQkFBWSxJQUFaLENBRDhEO09BQWhFOztBQUlBLGtCQUFZLEdBQVosQ0FBZ0IsSUFBaEIsRUFBc0IsU0FBdEIsRUFuQ3dCOztBQXFDeEIsYUFBTyxTQUFQLENBckN3Qjs7OzswQkF3Q2IsTUFBTSxTQUFTO0FBQzFCLFVBQUksSUFBSSxJQUFJLFNBQUosQ0FBYyxJQUFkLENBQUosQ0FEc0I7O0FBRzFCLFVBQUk7QUFDRixZQUFJLE1BQU0scUJBQU0sSUFBTixFQUFZLE9BQVosQ0FBTixDQURGO09BQUosQ0FFRSxPQUFPLEdBQVAsRUFBWTtBQUNaLFVBQUUsTUFBRixDQUFTLElBQVQsQ0FBYyxHQUFkLEVBRFk7QUFFWixlQUFPLENBQVA7QUFGWSxPQUFaOzs7QUFMd0IsU0FZMUIsQ0FBSSxRQUFKLENBQWEsSUFBYixDQUFrQixhQUFLO0FBQ3JCLFlBQUksRUFBRSxJQUFGLEtBQVcsT0FBWCxFQUFvQixPQUFPLEtBQVAsQ0FBeEI7QUFDQSxZQUFJO0FBQ0YsY0FBTSxNQUFNLFNBQVMsS0FBVCxDQUFlLEVBQUUsS0FBRixFQUFTLEVBQUUsUUFBUSxJQUFSLEVBQTFCLENBQU4sQ0FESjtBQUVGLGNBQUksSUFBSSxJQUFKLENBQVMsSUFBVCxDQUFjO21CQUFLLEVBQUUsS0FBRixLQUFZLFFBQVo7V0FBTCxDQUFsQixFQUE4QztBQUM1QyxjQUFFLEdBQUYsR0FBUSxHQUFSLENBRDRDO0FBRTVDLG1CQUFPLElBQVAsQ0FGNEM7V0FBOUM7U0FGRixDQU1FLE9BQU8sR0FBUCxFQUFZLGNBQVo7QUFDRixlQUFPLEtBQVAsQ0FUcUI7T0FBTCxDQUFsQixDQVowQjs7QUF3QjFCLFVBQU0sYUFBYSxtQkFBYixDQXhCb0I7O0FBMEIxQixlQUFTLFVBQVQsQ0FBb0IsSUFBcEIsRUFBMEI7QUFDeEIsZUFBTyxrQkFBUSxRQUFSLENBQWlCLEtBQUssTUFBTCxDQUFZLEtBQVosRUFBbUIsSUFBcEMsRUFBMEMsUUFBUSxRQUFSLENBQWpELENBRHdCO09BQTFCOztBQUlBLGVBQVMsYUFBVCxDQUF1QixJQUF2QixFQUE2QjtBQUMzQixZQUFNLEtBQUssV0FBVyxJQUFYLENBQUwsQ0FEcUI7QUFFM0IsWUFBSSxNQUFNLElBQU4sRUFBWSxPQUFPLElBQVAsQ0FBaEI7QUFDQSxlQUFPLFVBQVUsR0FBVixDQUFjLEVBQWQsRUFBa0IsT0FBbEIsQ0FBUCxDQUgyQjtPQUE3Qjs7QUFNQSxlQUFTLFlBQVQsQ0FBc0IsVUFBdEIsRUFBa0M7QUFDaEMsWUFBSSxDQUFDLFdBQVcsR0FBWCxDQUFlLFdBQVcsSUFBWCxDQUFoQixFQUFrQyxPQUF0Qzs7QUFFQSxlQUFPLFlBQVk7QUFDakIsaUJBQU8sY0FBYyxXQUFXLEdBQVgsQ0FBZSxXQUFXLElBQVgsQ0FBN0IsQ0FBUCxDQURpQjtTQUFaLENBSHlCO09BQWxDOztBQVFBLGVBQVMsWUFBVCxDQUFzQixNQUF0QixFQUE4QixVQUE5QixFQUEwQztBQUN4QyxZQUFNLE9BQU8sYUFBYSxVQUFiLENBQVAsQ0FEa0M7QUFFeEMsWUFBSSxJQUFKLEVBQVU7QUFDUixpQkFBTyxjQUFQLENBQXNCLE1BQXRCLEVBQThCLFdBQTlCLEVBQTJDLEVBQUUsS0FBSyxJQUFMLEVBQTdDLEVBRFE7U0FBVjs7QUFJQSxlQUFPLE1BQVAsQ0FOd0M7T0FBMUM7O0FBVUEsVUFBSSxJQUFKLENBQVMsT0FBVCxDQUFpQixVQUFVLENBQVYsRUFBYTs7QUFFNUIsWUFBSSxFQUFFLElBQUYsS0FBVywwQkFBWCxFQUF1QztBQUN6QyxjQUFNLGFBQWEsV0FBVyxDQUFYLENBQWIsQ0FEbUM7QUFFekMsY0FBSSxFQUFFLFdBQUYsQ0FBYyxJQUFkLEtBQXVCLFlBQXZCLEVBQXFDO0FBQ3ZDLHlCQUFhLFVBQWIsRUFBeUIsRUFBRSxXQUFGLENBQXpCLENBRHVDO1dBQXpDO0FBR0EsWUFBRSxTQUFGLENBQVksR0FBWixDQUFnQixTQUFoQixFQUEyQixVQUEzQixFQUx5QztBQU16QyxpQkFOeUM7U0FBM0M7O0FBU0EsWUFBSSxFQUFFLElBQUYsS0FBVyxzQkFBWCxFQUFtQzs7QUFDckMsZ0JBQUksWUFBWSxXQUFXLENBQVgsQ0FBWjtBQUNKLGdCQUFJLGFBQWEsSUFBYixFQUFtQjs7Z0JBQXZCO0FBQ0EsY0FBRSxZQUFGLENBQWUsR0FBZixDQUFtQixTQUFuQixFQUE4QjtxQkFBTSxVQUFVLEdBQVYsQ0FBYyxTQUFkLEVBQXlCLE9BQXpCO2FBQU4sQ0FBOUI7QUFDQTs7O2NBSnFDOzs7U0FBdkM7OztBQVg0QixZQW1CeEIsRUFBRSxJQUFGLEtBQVcsbUJBQVgsRUFBZ0M7QUFDbEMsY0FBSSxXQUFKLENBRGtDO0FBRWxDLGNBQUksRUFBRSxVQUFGLENBQWEsSUFBYixDQUFrQjttQkFBSyxFQUFFLElBQUYsS0FBVywwQkFBWCxLQUEwQyxLQUFLLENBQUwsQ0FBMUM7V0FBTCxDQUF0QixFQUErRTtBQUM3RSx1QkFBVyxHQUFYLENBQWUsR0FBRyxLQUFILENBQVMsSUFBVCxFQUFlLENBQTlCLEVBRDZFO1dBQS9FO0FBR0EsaUJBTGtDO1NBQXBDOztBQVFBLFlBQUksRUFBRSxJQUFGLEtBQVcsd0JBQVgsRUFBb0M7O0FBRXRDLGNBQUksRUFBRSxXQUFGLElBQWlCLElBQWpCLEVBQXVCO0FBQ3pCLG9CQUFRLEVBQUUsV0FBRixDQUFjLElBQWQ7QUFDTixtQkFBSyxxQkFBTCxDQURGO0FBRUUsbUJBQUssa0JBQUwsQ0FGRjtBQUdFLG1CQUFLLFdBQUw7O0FBQ0Usa0JBQUUsU0FBRixDQUFZLEdBQVosQ0FBZ0IsRUFBRSxXQUFGLENBQWMsRUFBZCxDQUFpQixJQUFqQixFQUF1QixXQUFXLENBQVgsQ0FBdkMsRUFERjtBQUVFLHNCQUZGO0FBSEYsbUJBTU8scUJBQUw7QUFDRSxrQkFBRSxXQUFGLENBQWMsWUFBZCxDQUEyQixPQUEzQixDQUFtQyxVQUFDLENBQUQ7eUJBQ2pDLHdCQUF3QixFQUFFLEVBQUYsRUFBTTsyQkFBTSxFQUFFLFNBQUYsQ0FBWSxHQUFaLENBQWdCLEdBQUcsSUFBSCxFQUFTLFdBQVcsQ0FBWCxFQUFjLENBQWQsQ0FBekI7bUJBQU47aUJBREcsQ0FBbkMsQ0FERjtBQUdFLHNCQUhGO0FBTkYsYUFEeUI7V0FBM0I7O0FBY0EsWUFBRSxVQUFGLENBQWEsT0FBYixDQUFxQixVQUFDLENBQUQsRUFBTztBQUMxQixnQkFBTSxhQUFhLEVBQWIsQ0FEb0I7QUFFMUIsZ0JBQUksY0FBSixDQUYwQjs7QUFJMUIsb0JBQVEsRUFBRSxJQUFGO0FBQ04sbUJBQUssd0JBQUw7QUFDRSxvQkFBSSxDQUFDLEVBQUUsTUFBRixFQUFVLE9BQWY7QUFDQSx3QkFBUSxTQUFSLENBRkY7QUFHRSxzQkFIRjtBQURGLG1CQUtPLDBCQUFMO0FBQ0Usa0JBQUUsU0FBRixDQUFZLEdBQVosQ0FBZ0IsRUFBRSxRQUFGLENBQVcsSUFBWCxFQUFpQixPQUFPLGNBQVAsQ0FBc0IsVUFBdEIsRUFBa0MsV0FBbEMsRUFBK0M7QUFDOUUsc0NBQU07QUFBRSwyQkFBTyxjQUFjLENBQWQsQ0FBUCxDQUFGO21CQUR3RTtpQkFBL0MsQ0FBakMsRUFERjtBQUlFLHVCQUpGO0FBTEYsbUJBVU8saUJBQUw7QUFDRSxvQkFBSSxDQUFDLEVBQUUsTUFBRixFQUFVO0FBQ2Isb0JBQUUsU0FBRixDQUFZLEdBQVosQ0FBZ0IsRUFBRSxRQUFGLENBQVcsSUFBWCxFQUFpQixhQUFhLFVBQWIsRUFBeUIsRUFBRSxLQUFGLENBQTFELEVBRGE7QUFFYix5QkFGYTtpQkFBZjs7QUFYSjtBQWlCSSx3QkFBUSxFQUFFLEtBQUYsQ0FBUSxJQUFSLENBRFY7QUFFRSxzQkFGRjtBQWhCRjs7O0FBSjBCLGFBMEIxQixDQUFFLFNBQUYsQ0FBWSxHQUFaLENBQWdCLEVBQUUsUUFBRixDQUFXLElBQVgsRUFBaUIsRUFBRSxZQUFGLEVBQVMsV0FBVzt1QkFBTSxjQUFjLENBQWQ7ZUFBTixFQUFyRCxFQTFCMEI7V0FBUCxDQUFyQixDQWhCc0M7U0FBeEM7T0EzQmUsQ0FBakIsQ0F0RDBCOztBQWdJMUIsYUFBTyxDQUFQLENBaEkwQjs7O1NBbEVUOzs7Ozs7Ozs7OztBQXNSckIsU0FBUyxVQUFULEdBQThCO0FBQzVCLE1BQU0sV0FBVyxFQUFYOzs7QUFEc0I7b0NBQVA7O0dBQU87O0FBSTVCLFFBQU0sSUFBTixDQUFXLGFBQUs7QUFDZCxRQUFJLENBQUMsRUFBRSxlQUFGLEVBQW1CLE9BQU8sS0FBUCxDQUF4Qjs7O0FBRGMsS0FJZCxDQUFFLGVBQUYsQ0FBa0IsT0FBbEIsQ0FBMEIsbUJBQVc7O0FBRW5DLFVBQUksUUFBUSxLQUFSLENBQWMsS0FBZCxDQUFvQixDQUFwQixFQUF1QixDQUF2QixNQUE4QixPQUE5QixFQUF1QyxPQUEzQztBQUNBLFVBQUk7QUFDRixpQkFBUyxHQUFULEdBQWUsU0FBUyxLQUFULENBQWUsUUFBUSxLQUFSLEVBQWUsRUFBRSxRQUFRLElBQVIsRUFBaEMsQ0FBZixDQURFO09BQUosQ0FFRSxPQUFPLEdBQVAsRUFBWTs7T0FBWjtLQUxzQixDQUExQixDQUpjO0FBYWQsV0FBTyxJQUFQLENBYmM7R0FBTCxDQUFYLENBSjRCOztBQW9CNUIsU0FBTyxRQUFQLENBcEI0QjtDQUE5Qjs7Ozs7Ozs7O0FBOEJPLFNBQVMsdUJBQVQsQ0FBaUMsT0FBakMsRUFBMEMsUUFBMUMsRUFBb0Q7QUFDekQsVUFBUSxRQUFRLElBQVI7QUFDTixTQUFLLFlBQUw7O0FBQ0UsZUFBUyxPQUFULEVBREY7QUFFRSxZQUZGOztBQURGLFNBS08sZUFBTDtBQUNFLGNBQVEsVUFBUixDQUFtQixPQUFuQixDQUEyQixpQkFBZTtZQUFaLG9CQUFZOztBQUN4QyxnQ0FBd0IsS0FBeEIsRUFBK0IsUUFBL0IsRUFEd0M7T0FBZixDQUEzQixDQURGO0FBSUUsWUFKRjs7QUFMRixTQVdPLGNBQUw7QUFDRSxjQUFRLFFBQVIsQ0FBaUIsT0FBakIsQ0FBeUIsVUFBQyxPQUFELEVBQWE7QUFDcEMsWUFBSSxXQUFXLElBQVgsRUFBaUIsT0FBckI7QUFDQSxnQ0FBd0IsT0FBeEIsRUFBaUMsUUFBakMsRUFGb0M7T0FBYixDQUF6QixDQURGO0FBS0UsWUFMRjtBQVhGLEdBRHlEO0NBQXBEOztBQXFCUCxTQUFTLFVBQVQsQ0FBb0IsTUFBcEIsRUFBNEI7QUFDMUIsTUFBTSxpQkFBaUIsd0JBQVcsTUFBWCxDQUFqQixDQURvQjtBQUUxQixpQkFBZSxNQUFmLENBQXNCLHlCQUFlLE1BQWYsQ0FBdEIsRUFGMEI7QUFHMUIsU0FBTyxlQUFlLE1BQWYsQ0FBc0IsS0FBdEIsQ0FBUCxDQUgwQjtDQUE1QiIsImZpbGUiOiJjb3JlL2dldEV4cG9ydHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCAqIGFzIGRvY3RyaW5lIGZyb20gJ2RvY3RyaW5lJ1xuXG5pbXBvcnQgcGFyc2UgZnJvbSAnLi9wYXJzZSdcbmltcG9ydCByZXNvbHZlIGZyb20gJy4vcmVzb2x2ZSdcbmltcG9ydCBpc0lnbm9yZWQgZnJvbSAnLi9pZ25vcmUnXG5cbi8vIG1hcCBmcm9tIHNldHRpbmdzIHNoYTEgPT4gcGF0aCA9PiBleHBvcnQgbWFwIG9iamVjdHNcbmNvbnN0IGV4cG9ydENhY2hlcyA9IG5ldyBNYXAoKVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvcnRNYXAge1xuICBjb25zdHJ1Y3RvcihwYXRoKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aFxuICAgIHRoaXMubmFtZXNwYWNlID0gbmV3IE1hcCgpXG4gICAgLy8gdG9kbzogcmVzdHJ1Y3R1cmUgdG8ga2V5IG9uIHBhdGgsIHZhbHVlIGlzIHJlc29sdmVyICsgbWFwIG9mIG5hbWVzXG4gICAgdGhpcy5yZWV4cG9ydHMgPSBuZXcgTWFwKClcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuZXJyb3JzID0gW11cbiAgfVxuXG4gIGdldCBoYXNEZWZhdWx0KCkgeyByZXR1cm4gdGhpcy5nZXQoJ2RlZmF1bHQnKSAhPSBudWxsIH0gLy8gc3Ryb25nZXIgdGhhbiB0aGlzLmhhc1xuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5uYW1lc3BhY2Uuc2l6ZSArIHRoaXMucmVleHBvcnRzLnNpemVcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiBzaXplICs9IGRlcCgpLnNpemUpXG4gICAgcmV0dXJuIHNpemVcbiAgfVxuXG4gIHN0YXRpYyBnZXQoc291cmNlLCBjb250ZXh0KSB7XG5cbiAgICB2YXIgcGF0aCA9IHJlc29sdmUoc291cmNlLCBjb250ZXh0KVxuICAgIGlmIChwYXRoID09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gRXhwb3J0TWFwLmZvcihwYXRoLCBjb250ZXh0KVxuICB9XG5cbiAgc3RhdGljIGZvcihwYXRoLCBjb250ZXh0KSB7XG4gICAgbGV0IGV4cG9ydE1hcFxuXG4gICAgY29uc3QgY2FjaGVLZXkgPSBoYXNoT2JqZWN0KHtcbiAgICAgIHNldHRpbmdzOiBjb250ZXh0LnNldHRpbmdzLFxuICAgICAgcGFyc2VyUGF0aDogY29udGV4dC5wYXJzZXJQYXRoLFxuICAgICAgcGFyc2VyT3B0aW9uczogY29udGV4dC5wYXJzZXJPcHRpb25zLFxuICAgIH0pXG4gICAgbGV0IGV4cG9ydENhY2hlID0gZXhwb3J0Q2FjaGVzLmdldChjYWNoZUtleSlcbiAgICBpZiAoZXhwb3J0Q2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXhwb3J0Q2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIGV4cG9ydENhY2hlcy5zZXQoY2FjaGVLZXksIGV4cG9ydENhY2hlKVxuICAgIH1cblxuICAgIGV4cG9ydE1hcCA9IGV4cG9ydENhY2hlLmdldChwYXRoKVxuICAgIC8vIHJldHVybiBjYWNoZWQgaWdub3JlXG4gICAgaWYgKGV4cG9ydE1hcCA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aClcbiAgICBpZiAoZXhwb3J0TWFwICE9IG51bGwpIHtcbiAgICAgIC8vIGRhdGUgZXF1YWxpdHkgY2hlY2tcbiAgICAgIGlmIChleHBvcnRNYXAubXRpbWUgLSBzdGF0cy5tdGltZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0TWFwXG4gICAgICB9XG4gICAgICAvLyBmdXR1cmU6IGNoZWNrIGNvbnRlbnQgZXF1YWxpdHk/XG4gICAgfVxuXG4gICAgZXhwb3J0TWFwID0gRXhwb3J0TWFwLnBhcnNlKHBhdGgsIGNvbnRleHQpXG4gICAgZXhwb3J0TWFwLm10aW1lID0gc3RhdHMubXRpbWVcblxuICAgIC8vIGlnbm9yZSBlbXB0aWVzLCBvcHRpb25hbGx5XG4gICAgaWYgKGV4cG9ydE1hcC5uYW1lc3BhY2Uuc2l6ZSA9PT0gMCAmJiBpc0lnbm9yZWQocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGV4cG9ydE1hcCA9IG51bGxcbiAgICB9XG5cbiAgICBleHBvcnRDYWNoZS5zZXQocGF0aCwgZXhwb3J0TWFwKVxuXG4gICAgcmV0dXJuIGV4cG9ydE1hcFxuICB9XG5cbiAgc3RhdGljIHBhcnNlKHBhdGgsIGNvbnRleHQpIHtcbiAgICB2YXIgbSA9IG5ldyBFeHBvcnRNYXAocGF0aClcblxuICAgIHRyeSB7XG4gICAgICB2YXIgYXN0ID0gcGFyc2UocGF0aCwgY29udGV4dClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIG0uZXJyb3JzLnB1c2goZXJyKVxuICAgICAgcmV0dXJuIG0gLy8gY2FuJ3QgY29udGludWVcbiAgICB9XG5cblxuICAgIC8vIGF0dGVtcHQgdG8gY29sbGVjdCBtb2R1bGUgZG9jXG4gICAgYXN0LmNvbW1lbnRzLnNvbWUoYyA9PiB7XG4gICAgICBpZiAoYy50eXBlICE9PSAnQmxvY2snKSByZXR1cm4gZmFsc2VcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pXG4gICAgICAgIGlmIChkb2MudGFncy5zb21lKHQgPT4gdC50aXRsZSA9PT0gJ21vZHVsZScpKSB7XG4gICAgICAgICAgbS5kb2MgPSBkb2NcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHsgLyogaWdub3JlICovIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG5cbiAgICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcCgpXG5cbiAgICBmdW5jdGlvbiByZW1vdGVQYXRoKG5vZGUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlLnJlbGF0aXZlKG5vZGUuc291cmNlLnZhbHVlLCBwYXRoLCBjb250ZXh0LnNldHRpbmdzKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVJbXBvcnQobm9kZSkge1xuICAgICAgY29uc3QgcnAgPSByZW1vdGVQYXRoKG5vZGUpXG4gICAgICBpZiAocnAgPT0gbnVsbCkgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBFeHBvcnRNYXAuZm9yKHJwLCBjb250ZXh0KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE5hbWVzcGFjZShpZGVudGlmaWVyKSB7XG4gICAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGlkZW50aWZpZXIubmFtZSkpIHJldHVyblxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZUltcG9ydChuYW1lc3BhY2VzLmdldChpZGVudGlmaWVyLm5hbWUpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZE5hbWVzcGFjZShvYmplY3QsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IG5zZm4gPSBnZXROYW1lc3BhY2UoaWRlbnRpZmllcilcbiAgICAgIGlmIChuc2ZuKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsICduYW1lc3BhY2UnLCB7IGdldDogbnNmbiB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqZWN0XG4gICAgfVxuXG5cbiAgICBhc3QuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cbiAgICAgIGlmIChuLnR5cGUgPT09ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nKSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKG4pXG4gICAgICAgIGlmIChuLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgIGFkZE5hbWVzcGFjZShleHBvcnRNZXRhLCBuLmRlY2xhcmF0aW9uKVxuICAgICAgICB9XG4gICAgICAgIG0ubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIGV4cG9ydE1ldGEpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAobi50eXBlID09PSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nKSB7XG4gICAgICAgIGxldCByZW1vdGVNYXAgPSByZW1vdGVQYXRoKG4pXG4gICAgICAgIGlmIChyZW1vdGVNYXAgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIG0uZGVwZW5kZW5jaWVzLnNldChyZW1vdGVNYXAsICgpID0+IEV4cG9ydE1hcC5mb3IocmVtb3RlTWFwLCBjb250ZXh0KSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIGNhcHR1cmUgbmFtZXNwYWNlcyBpbiBjYXNlIG9mIGxhdGVyIGV4cG9ydFxuICAgICAgaWYgKG4udHlwZSA9PT0gJ0ltcG9ydERlY2xhcmF0aW9uJykge1xuICAgICAgICBsZXQgbnNcbiAgICAgICAgaWYgKG4uc3BlY2lmaWVycy5zb21lKHMgPT4gcy50eXBlID09PSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyAmJiAobnMgPSBzKSkpIHtcbiAgICAgICAgICBuYW1lc3BhY2VzLnNldChucy5sb2NhbC5uYW1lLCBuKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAobi50eXBlID09PSAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicpe1xuICAgICAgICAvLyBjYXB0dXJlIGRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChuLmRlY2xhcmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKG4uZGVjbGFyYXRpb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb25EZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1R5cGVBbGlhcyc6IC8vIGZsb3d0eXBlIHdpdGggYmFiZWwtZXNsaW50IHBhcnNlclxuICAgICAgICAgICAgICBtLm5hbWVzcGFjZS5zZXQobi5kZWNsYXJhdGlvbi5pZC5uYW1lLCBjYXB0dXJlRG9jKG4pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICAgIG4uZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoZC5pZCwgaWQgPT4gbS5uYW1lc3BhY2Uuc2V0KGlkLm5hbWUsIGNhcHR1cmVEb2MoZCwgbikpKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBuLnNwZWNpZmllcnMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSB7fVxuICAgICAgICAgIGxldCBsb2NhbFxuXG4gICAgICAgICAgc3dpdGNoIChzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0V4cG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgICAgICAgICBpZiAoIW4uc291cmNlKSByZXR1cm5cbiAgICAgICAgICAgICAgbG9jYWwgPSAnZGVmYXVsdCdcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIGNhc2UgJ0V4cG9ydE5hbWVzcGFjZVNwZWNpZmllcic6XG4gICAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChzLmV4cG9ydGVkLm5hbWUsIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRNZXRhLCAnbmFtZXNwYWNlJywge1xuICAgICAgICAgICAgICAgIGdldCgpIHsgcmV0dXJuIHJlc29sdmVJbXBvcnQobikgfSxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgY2FzZSAnRXhwb3J0U3BlY2lmaWVyJzpcbiAgICAgICAgICAgICAgaWYgKCFuLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChzLmV4cG9ydGVkLm5hbWUsIGFkZE5hbWVzcGFjZShleHBvcnRNZXRhLCBzLmxvY2FsKSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlbHNlIGZhbGxzIHRocm91Z2hcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGxvY2FsID0gcy5sb2NhbC5uYW1lXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdG9kbzogSlNEb2NcbiAgICAgICAgICBtLnJlZXhwb3J0cy5zZXQocy5leHBvcnRlZC5uYW1lLCB7IGxvY2FsLCBnZXRJbXBvcnQ6ICgpID0+IHJlc29sdmVJbXBvcnQobikgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIG1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayBleHBsaWNpdGx5IHJlLWV4cG9ydGVkIG5hbWVzIGZvciBleGlzdGVuY2VcbiAgICogaW4gdGhlIGJhc2UgbmFtZXNwYWNlLCBidXQgaXQgd2lsbCBleHBhbmQgYWxsIGBleHBvcnQgKiBmcm9tICcuLi4nYCBleHBvcnRzXG4gICAqIGlmIG5vdCBmb3VuZCBpbiB0aGUgZXhwbGljaXQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYG5hbWVgIGlzIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKi9cbiAgaGFzKG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLnJlZXhwb3J0cy5oYXMobmFtZSkpIHJldHVybiB0cnVlXG5cbiAgICBmb3IgKGxldCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMudmFsdWVzKCkpIHtcbiAgICAgIGxldCBpbm5lck1hcCA9IGRlcCgpXG5cbiAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgaWYgKCFpbm5lck1hcCkgY29udGludWVcblxuICAgICAgaWYgKGlubmVyTWFwLmhhcyhuYW1lKSkgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGdldChuYW1lKSB7XG4gICAgaWYgKHRoaXMubmFtZXNwYWNlLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMubmFtZXNwYWNlLmdldChuYW1lKVxuXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgeyBsb2NhbCwgZ2V0SW1wb3J0IH0gPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSlcbiAgICAgICAgICAsIGltcG9ydGVkID0gZ2V0SW1wb3J0KClcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAgIC8vIHNhZmVndWFyZCBhZ2FpbnN0IGN5Y2xlcywgb25seSBpZiBuYW1lIG1hdGNoZXNcbiAgICAgIGlmIChpbXBvcnRlZC5wYXRoID09PSB0aGlzLnBhdGggJiYgbG9jYWwgPT09IG5hbWUpIHJldHVybiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGltcG9ydGVkLmdldChsb2NhbClcbiAgICB9XG5cbiAgICBmb3IgKGxldCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMudmFsdWVzKCkpIHtcbiAgICAgIGxldCBpbm5lck1hcCA9IGRlcCgpXG4gICAgICAvLyB0b2RvOiByZXBvcnQgYXMgdW5yZXNvbHZlZD9cbiAgICAgIGlmICghaW5uZXJNYXApIGNvbnRpbnVlXG5cbiAgICAgIC8vIHNhZmVndWFyZCBhZ2FpbnN0IGN5Y2xlc1xuICAgICAgaWYgKGlubmVyTWFwLnBhdGggPT09IHRoaXMucGF0aCkgY29udGludWVcblxuICAgICAgbGV0IGlubmVyVmFsdWUgPSBpbm5lck1hcC5nZXQobmFtZSlcbiAgICAgIGlmIChpbm5lclZhbHVlICE9PSB1bmRlZmluZWQpIHJldHVybiBpbm5lclZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIHRoaXMubmFtZXNwYWNlLmZvckVhY2goKHYsIG4pID0+XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHYsIG4sIHRoaXMpKVxuXG4gICAgdGhpcy5yZWV4cG9ydHMuZm9yRWFjaCgoeyBnZXRJbXBvcnQsIGxvY2FsIH0sIG5hbWUpID0+XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGdldEltcG9ydCgpLmdldChsb2NhbCksIG5hbWUsIHRoaXMpKVxuXG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChkZXAgPT4gZGVwKCkuZm9yRWFjaCgodiwgbikgPT5cbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcykpKVxuICB9XG5cbiAgLy8gdG9kbzoga2V5cywgdmFsdWVzLCBlbnRyaWVzP1xuXG4gIHJlcG9ydEVycm9ycyhjb250ZXh0LCBkZWNsYXJhdGlvbikge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG5vZGU6IGRlY2xhcmF0aW9uLnNvdXJjZSxcbiAgICAgIG1lc3NhZ2U6IGBQYXJzZSBlcnJvcnMgaW4gaW1wb3J0ZWQgbW9kdWxlICcke2RlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZX0nOiBgICtcbiAgICAgICAgICAgICAgICAgIGAke3RoaXMuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGUgPT4gYCR7ZS5tZXNzYWdlfSAoJHtlLmxpbmVOdW1iZXJ9OiR7ZS5jb2x1bW59KWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKX1gLFxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBwYXJzZSBKU0RvYyBmcm9tIHRoZSBmaXJzdCBub2RlIHRoYXQgaGFzIGxlYWRpbmcgY29tbWVudHNcbiAqIEBwYXJhbSAgey4uLlt0eXBlXX0gbm9kZXMgW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7e2RvYzogb2JqZWN0fX1cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZURvYyguLi5ub2Rlcykge1xuICBjb25zdCBtZXRhZGF0YSA9IHt9XG5cbiAgLy8gJ3NvbWUnIHNob3J0LWNpcmN1aXRzIG9uIGZpcnN0ICd0cnVlJ1xuICBub2Rlcy5zb21lKG4gPT4ge1xuICAgIGlmICghbi5sZWFkaW5nQ29tbWVudHMpIHJldHVybiBmYWxzZVxuXG4gICAgLy8gY2FwdHVyZSBYU0RvY1xuICAgIG4ubGVhZGluZ0NvbW1lbnRzLmZvckVhY2goY29tbWVudCA9PiB7XG4gICAgICAvLyBza2lwIG5vbi1ibG9jayBjb21tZW50c1xuICAgICAgaWYgKGNvbW1lbnQudmFsdWUuc2xpY2UoMCwgNCkgIT09IFwiKlxcbiAqXCIpIHJldHVyblxuICAgICAgdHJ5IHtcbiAgICAgICAgbWV0YWRhdGEuZG9jID0gZG9jdHJpbmUucGFyc2UoY29tbWVudC52YWx1ZSwgeyB1bndyYXA6IHRydWUgfSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBkb24ndCBjYXJlLCBmb3Igbm93PyBtYXliZSBhZGQgdG8gYGVycm9ycz9gICovXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiBtZXRhZGF0YVxufVxuXG4vKipcbiAqIFRyYXZlcnNlIGEgcGF0dGVybi9pZGVudGlmaWVyIG5vZGUsIGNhbGxpbmcgJ2NhbGxiYWNrJ1xuICogZm9yIGVhY2ggbGVhZiBpZGVudGlmaWVyLlxuICogQHBhcmFtICB7bm9kZX0gICBwYXR0ZXJuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShwYXR0ZXJuLCBjYWxsYmFjaykge1xuICBzd2l0Y2ggKHBhdHRlcm4udHlwZSkge1xuICAgIGNhc2UgJ0lkZW50aWZpZXInOiAvLyBiYXNlIGNhc2VcbiAgICAgIGNhbGxiYWNrKHBhdHRlcm4pXG4gICAgICBicmVha1xuXG4gICAgY2FzZSAnT2JqZWN0UGF0dGVybic6XG4gICAgICBwYXR0ZXJuLnByb3BlcnRpZXMuZm9yRWFjaCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHZhbHVlLCBjYWxsYmFjaylcbiAgICAgIH0pXG4gICAgICBicmVha1xuXG4gICAgY2FzZSAnQXJyYXlQYXR0ZXJuJzpcbiAgICAgIHBhdHRlcm4uZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoZWxlbWVudCwgY2FsbGJhY2spXG4gICAgICB9KVxuICAgICAgYnJlYWtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNoT2JqZWN0KG9iamVjdCkge1xuICBjb25zdCBzZXR0aW5nc1NoYXN1bSA9IGNyZWF0ZUhhc2goJ3NoYTEnKVxuICBzZXR0aW5nc1NoYXN1bS51cGRhdGUoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSlcbiAgcmV0dXJuIHNldHRpbmdzU2hhc3VtLmRpZ2VzdCgnaGV4Jylcbn1cbiJdfQ== |
@@ -6,3 +6,8 @@ 'use strict'; | ||
}); | ||
exports.CASE_INSENSITIVE = undefined; | ||
var _stringify = require('babel-runtime/core-js/json/stringify'); | ||
var _stringify2 = _interopRequireDefault(_stringify); | ||
var _typeof2 = require('babel-runtime/helpers/typeof'); | ||
@@ -20,2 +25,6 @@ | ||
var _assign = require('babel-runtime/core-js/object/assign'); | ||
var _assign2 = _interopRequireDefault(_assign); | ||
var _map = require('babel-runtime/core-js/map'); | ||
@@ -34,24 +43,50 @@ | ||
var _crypto = require('crypto'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var CASE_INSENSITIVE = _fs2.default.existsSync((0, _path.join)(__dirname, 'reSOLVE.js')); | ||
var CASE_INSENSITIVE = exports.CASE_INSENSITIVE = _fs2.default.existsSync((0, _path.join)(__dirname, 'reSOLVE.js')); | ||
// http://stackoverflow.com/a/27382838 | ||
function fileExistsWithCaseSync(filepath) { | ||
var dir = (0, _path.dirname)(filepath); | ||
if (dir === '/' || dir === '.' || /^[A-Z]:\\$/i.test(dir)) return true; | ||
var filenames = _fs2.default.readdirSync(dir); | ||
if (filenames.indexOf((0, _path.basename)(filepath)) === -1) { | ||
return false; | ||
var fileExistsCache = new _map2.default(); | ||
function cachePath(cacheKey, result) { | ||
fileExistsCache.set(cacheKey, { result: result, lastSeen: Date.now() }); | ||
} | ||
function checkCache(cacheKey, _ref) { | ||
var lifetime = _ref.lifetime; | ||
if (fileExistsCache.has(cacheKey)) { | ||
var _fileExistsCache$get = fileExistsCache.get(cacheKey); | ||
var result = _fileExistsCache$get.result; | ||
var lastSeen = _fileExistsCache$get.lastSeen; | ||
// check fresness | ||
if (Date.now() - lastSeen < lifetime * 1000) return result; | ||
} | ||
return fileExistsWithCaseSync(dir); | ||
// cache miss | ||
return undefined; | ||
} | ||
function fileExists(filepath) { | ||
if (CASE_INSENSITIVE) { | ||
// short-circuit if path doesn't exist, ignoring case | ||
return !(!_fs2.default.existsSync(filepath) || !fileExistsWithCaseSync(filepath)); | ||
// http://stackoverflow.com/a/27382838 | ||
function fileExistsWithCaseSync(filepath, cacheSettings) { | ||
var dir = (0, _path.dirname)(filepath); | ||
var result = checkCache(filepath, cacheSettings); | ||
if (result != null) return result; | ||
// base case | ||
if (dir === '/' || dir === '.' || /^[A-Z]:\\$/i.test(dir)) { | ||
result = true; | ||
} else { | ||
return _fs2.default.existsSync(filepath); | ||
var filenames = _fs2.default.readdirSync(dir); | ||
if (filenames.indexOf((0, _path.basename)(filepath)) === -1) { | ||
result = false; | ||
} else { | ||
result = fileExistsWithCaseSync(dir, cacheSettings); | ||
} | ||
} | ||
cachePath(filepath, result); | ||
return result; | ||
} | ||
@@ -61,9 +96,29 @@ | ||
var sourceDir = (0, _path.dirname)(sourceFile), | ||
cacheKey = sourceDir + hashObject(settings) + modulePath; | ||
var cacheSettings = (0, _assign2.default)({ | ||
lifetime: 30 }, // seconds | ||
settings['import/cache']); | ||
// parse infinity | ||
if (cacheSettings.lifetime === '∞' || cacheSettings.lifetime === 'Infinity') { | ||
cacheSettings.lifetime = Infinity; | ||
} | ||
var cachedPath = checkCache(cacheKey, cacheSettings); | ||
if (cachedPath !== undefined) return cachedPath; | ||
function cache(path) { | ||
cachePath(cacheKey, path); | ||
return path; | ||
} | ||
function withResolver(resolver, config) { | ||
// resolve just returns the core module id, which won't appear to exist | ||
try { | ||
var filePath = resolver.resolveImport(modulePath, sourceFile, config); | ||
if (filePath === null) return null; | ||
if (filePath == null) return filePath; | ||
if (filePath === undefined || !fileExists(filePath)) return undefined; | ||
// resolvers imply file existence, this double-check just ensures the case matches | ||
if (CASE_INSENSITIVE && !fileExistsWithCaseSync(filePath, cacheSettings)) return undefined; | ||
@@ -94,3 +149,5 @@ return filePath; | ||
var fullPath = withResolver(resolver, config); | ||
if (fullPath !== undefined) return fullPath; | ||
if (fullPath !== undefined) { | ||
return cache(fullPath); | ||
} | ||
} | ||
@@ -111,2 +168,4 @@ } catch (err) { | ||
} | ||
return cache(undefined); | ||
} | ||
@@ -149,2 +208,8 @@ | ||
resolve.relative = relative; | ||
//# sourceMappingURL=data:application/json;base64,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akMsU0FBSyxJQUFJLEdBQUosSUFBVyxTQUFoQixFQUEyQjtBQUN6QixVQUFJLEdBQUosQ0FBUSxHQUFSLEVBQWEsVUFBVSxHQUFWLENBQWIsRUFEeUI7S0FBM0I7QUFHQSxXQUFPLEdBQVAsQ0FKaUM7R0FBbkM7O0FBT0EsUUFBTSxJQUFJLEtBQUosQ0FBVSx5QkFBVixDQUFOLENBbEJ1QztDQUF6Qzs7Ozs7Ozs7OztBQTZCZSxTQUFTLE9BQVQsQ0FBaUIsQ0FBakIsRUFBb0IsT0FBcEIsRUFBNkI7QUFDMUMsU0FBTyxTQUFVLENBQVYsRUFDVSxRQUFRLFdBQVIsRUFEVixFQUVVLFFBQVEsUUFBUixDQUZqQixDQUQwQztDQUE3QjtBQU1mLFFBQVEsUUFBUixHQUFtQixRQUFuQiIsImZpbGUiOiJjb3JlL3Jlc29sdmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnXG5pbXBvcnQgeyBkaXJuYW1lLCBiYXNlbmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnXG5cbmNvbnN0IENBU0VfSU5TRU5TSVRJVkUgPSBmcy5leGlzdHNTeW5jKGpvaW4oX19kaXJuYW1lLCAncmVTT0xWRS5qcycpKVxuXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNzM4MjgzOFxuZnVuY3Rpb24gZmlsZUV4aXN0c1dpdGhDYXNlU3luYyhmaWxlcGF0aCkge1xuICB2YXIgZGlyID0gZGlybmFtZShmaWxlcGF0aClcbiAgaWYgKGRpciA9PT0gJy8nIHx8IGRpciA9PT0gJy4nIHx8IC9eW0EtWl06XFxcXCQvaS50ZXN0KGRpcikpIHJldHVybiB0cnVlXG4gIHZhciBmaWxlbmFtZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIGlmIChmaWxlbmFtZXMuaW5kZXhPZihiYXNlbmFtZShmaWxlcGF0aCkpID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGZpbGVFeGlzdHNXaXRoQ2FzZVN5bmMoZGlyKVxufVxuXG5mdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGVwYXRoKSB7XG4gIGlmIChDQVNFX0lOU0VOU0lUSVZFKSB7XG4gICAgLy8gc2hvcnQtY2lyY3VpdCBpZiBwYXRoIGRvZXNuJ3QgZXhpc3QsIGlnbm9yaW5nIGNhc2VcbiAgICByZXR1cm4gISghZnMuZXhpc3RzU3luYyhmaWxlcGF0aCkgfHwgIWZpbGVFeGlzdHNXaXRoQ2FzZVN5bmMoZmlsZXBhdGgpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmcy5leGlzdHNTeW5jKGZpbGVwYXRoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShtb2R1bGVQYXRoLCBzb3VyY2VGaWxlLCBzZXR0aW5ncykge1xuXG4gIGZ1bmN0aW9uIHdpdGhSZXNvbHZlcihyZXNvbHZlciwgY29uZmlnKSB7XG4gICAgLy8gcmVzb2x2ZSBqdXN0IHJldHVybnMgdGhlIGNvcmUgbW9kdWxlIGlkLCB3aGljaCB3b24ndCBhcHBlYXIgdG8gZXhpc3RcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlci5yZXNvbHZlSW1wb3J0KG1vZHVsZVBhdGgsIHNvdXJjZUZpbGUsIGNvbmZpZylcbiAgICAgIGlmIChmaWxlUGF0aCA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKGZpbGVQYXRoID09PSB1bmRlZmluZWQgfHwgIWZpbGVFeGlzdHMoZmlsZVBhdGgpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBmaWxlUGF0aFxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ1Jlc29sdmVycyA9IChzZXR0aW5nc1snaW1wb3J0L3Jlc29sdmVyJ11cbiAgICB8fCB7ICdub2RlJzogc2V0dGluZ3NbJ2ltcG9ydC9yZXNvbHZlJ10gfSkgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuXG4gIGNvbnN0IHJlc29sdmVycyA9IHJlc29sdmVyUmVkdWNlcihjb25maWdSZXNvbHZlcnMsIG5ldyBNYXAoKSlcblxuICBmb3IgKGxldCBbbmFtZSwgY29uZmlnXSBvZiByZXNvbHZlcnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcmVzb2x2ZXIgPSByZXF1aXJlKGBlc2xpbnQtaW1wb3J0LXJlc29sdmVyLSR7bmFtZX1gKVxuXG4gICAgbGV0IGZ1bGxQYXRoID0gd2l0aFJlc29sdmVyKHJlc29sdmVyLCBjb25maWcpXG4gICAgaWYgKGZ1bGxQYXRoICE9PSB1bmRlZmluZWQpIHJldHVybiBmdWxsUGF0aFxuICB9XG5cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZXJSZWR1Y2VyKHJlc29sdmVycywgbWFwKSB7XG4gIGlmIChyZXNvbHZlcnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHJlc29sdmVycy5mb3JFYWNoKHIgPT4gcmVzb2x2ZXJSZWR1Y2VyKHIsIG1hcCkpXG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgaWYgKHR5cGVvZiByZXNvbHZlcnMgPT09ICdzdHJpbmcnKSB7XG4gICAgbWFwLnNldChyZXNvbHZlcnMsIG51bGwpXG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgaWYgKHR5cGVvZiByZXNvbHZlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChsZXQga2V5IGluIHJlc29sdmVycykge1xuICAgICAgbWFwLnNldChrZXksIHJlc29sdmVyc1trZXldKVxuICAgIH1cbiAgICByZXR1cm4gbWFwXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVzb2x2ZXIgY29uZmlnJylcbn1cblxuLyoqXG4gKiBHaXZlbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gcCAtIG1vZHVsZSBwYXRoXG4gKiBAcGFyYW0gIHtvYmplY3R9IGNvbnRleHQgLSBFU0xpbnQgY29udGV4dFxuICogQHJldHVybiB7c3RyaW5nfSAtIHRoZSBmdWxsIG1vZHVsZSBmaWxlc3lzdGVtIHBhdGg7XG4gKiAgICAgICAgICAgICAgICAgICAgbnVsbCBpZiBwYWNrYWdlIGlzIGNvcmU7XG4gKiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlKHAsIGNvbnRleHQpIHtcbiAgcmV0dXJuIHJlbGF0aXZlKCBwXG4gICAgICAgICAgICAgICAgICwgY29udGV4dC5nZXRGaWxlbmFtZSgpXG4gICAgICAgICAgICAgICAgICwgY29udGV4dC5zZXR0aW5nc1xuICAgICAgICAgICAgICAgICApXG59XG5yZXNvbHZlLnJlbGF0aXZlID0gcmVsYXRpdmVcbiJdfQ== | ||
function hashObject(object) { | ||
var settingsShasum = (0, _crypto.createHash)('sha1'); | ||
settingsShasum.update((0, _stringify2.default)(object)); | ||
return settingsShasum.digest('hex'); | ||
} | ||
//# sourceMappingURL=data:application/json;base64,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LENBRmlDO0dBQW5DOztBQUtBLE1BQUksUUFBTywyRUFBUCxLQUFxQixRQUFyQixFQUErQjtBQUNqQyxTQUFLLElBQUksR0FBSixJQUFXLFNBQWhCLEVBQTJCO0FBQ3pCLFVBQUksR0FBSixDQUFRLEdBQVIsRUFBYSxVQUFVLEdBQVYsQ0FBYixFQUR5QjtLQUEzQjtBQUdBLFdBQU8sR0FBUCxDQUppQztHQUFuQzs7QUFPQSxRQUFNLElBQUksS0FBSixDQUFVLHlCQUFWLENBQU4sQ0FsQnVDO0NBQXpDOzs7Ozs7Ozs7O0FBNkJlLFNBQVMsT0FBVCxDQUFpQixDQUFqQixFQUFvQixPQUFwQixFQUE2QjtBQUMxQyxTQUFPLFNBQVUsQ0FBVixFQUNVLFFBQVEsV0FBUixFQURWLEVBRVUsUUFBUSxRQUFSLENBRmpCLENBRDBDO0NBQTdCO0FBTWYsUUFBUSxRQUFSLEdBQW1CLFFBQW5COztBQUlBLFNBQVMsVUFBVCxDQUFvQixNQUFwQixFQUE0QjtBQUMxQixNQUFNLGlCQUFpQix3QkFBVyxNQUFYLENBQWpCLENBRG9CO0FBRTFCLGlCQUFlLE1BQWYsQ0FBc0IseUJBQWUsTUFBZixDQUF0QixFQUYwQjtBQUcxQixTQUFPLGVBQWUsTUFBZixDQUFzQixLQUF0QixDQUFQLENBSDBCO0NBQTVCIiwiZmlsZSI6ImNvcmUvcmVzb2x2ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcydcbmltcG9ydCB7IGRpcm5hbWUsIGJhc2VuYW1lLCBqb2luIH0gZnJvbSAncGF0aCdcblxuZXhwb3J0IGNvbnN0IENBU0VfSU5TRU5TSVRJVkUgPSBmcy5leGlzdHNTeW5jKGpvaW4oX19kaXJuYW1lLCAncmVTT0xWRS5qcycpKVxuXG5jb25zdCBmaWxlRXhpc3RzQ2FjaGUgPSBuZXcgTWFwKClcblxuZnVuY3Rpb24gY2FjaGVQYXRoKGNhY2hlS2V5LCByZXN1bHQpIHtcbiAgZmlsZUV4aXN0c0NhY2hlLnNldChjYWNoZUtleSwgeyByZXN1bHQsIGxhc3RTZWVuOiBEYXRlLm5vdygpIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrQ2FjaGUoY2FjaGVLZXksIHsgbGlmZXRpbWUgfSkge1xuICBpZiAoZmlsZUV4aXN0c0NhY2hlLmhhcyhjYWNoZUtleSkpIHtcbiAgICBjb25zdCB7IHJlc3VsdCwgbGFzdFNlZW4gfSA9IGZpbGVFeGlzdHNDYWNoZS5nZXQoY2FjaGVLZXkpXG4gICAgLy8gY2hlY2sgZnJlc25lc3NcbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RTZWVuIDwgKGxpZmV0aW1lICogMTAwMCkpIHJldHVybiByZXN1bHRcbiAgfVxuICAvLyBjYWNoZSBtaXNzXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjczODI4MzhcbmZ1bmN0aW9uIGZpbGVFeGlzdHNXaXRoQ2FzZVN5bmMoZmlsZXBhdGgsIGNhY2hlU2V0dGluZ3MpIHtcbiAgY29uc3QgZGlyID0gZGlybmFtZShmaWxlcGF0aClcblxuICBsZXQgcmVzdWx0ID0gY2hlY2tDYWNoZShmaWxlcGF0aCwgY2FjaGVTZXR0aW5ncylcbiAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0XG5cbiAgLy8gYmFzZSBjYXNlXG4gIGlmIChkaXIgPT09ICcvJyB8fCBkaXIgPT09ICcuJyB8fCAvXltBLVpdOlxcXFwkL2kudGVzdChkaXIpKSB7XG4gICAgcmVzdWx0ID0gdHJ1ZVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZpbGVuYW1lcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICBpZiAoZmlsZW5hbWVzLmluZGV4T2YoYmFzZW5hbWUoZmlsZXBhdGgpKSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGZpbGVFeGlzdHNXaXRoQ2FzZVN5bmMoZGlyLCBjYWNoZVNldHRpbmdzKVxuICAgIH1cbiAgfVxuICBjYWNoZVBhdGgoZmlsZXBhdGgsIHJlc3VsdClcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUobW9kdWxlUGF0aCwgc291cmNlRmlsZSwgc2V0dGluZ3MpIHtcblxuICBjb25zdCBzb3VyY2VEaXIgPSBkaXJuYW1lKHNvdXJjZUZpbGUpXG4gICAgICAsIGNhY2hlS2V5ID0gc291cmNlRGlyICsgaGFzaE9iamVjdChzZXR0aW5ncykgKyBtb2R1bGVQYXRoXG5cbiAgY29uc3QgY2FjaGVTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIGxpZmV0aW1lOiAzMCwgIC8vIHNlY29uZHNcbiAgfSwgc2V0dGluZ3NbJ2ltcG9ydC9jYWNoZSddKVxuXG4gIC8vIHBhcnNlIGluZmluaXR5XG4gIGlmIChjYWNoZVNldHRpbmdzLmxpZmV0aW1lID09PSAn4oieJyB8fCBjYWNoZVNldHRpbmdzLmxpZmV0aW1lID09PSAnSW5maW5pdHknKSB7XG4gICAgY2FjaGVTZXR0aW5ncy5saWZldGltZSA9IEluZmluaXR5XG4gIH1cblxuICBjb25zdCBjYWNoZWRQYXRoID0gY2hlY2tDYWNoZShjYWNoZUtleSwgY2FjaGVTZXR0aW5ncylcbiAgaWYgKGNhY2hlZFBhdGggIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhY2hlZFBhdGhcblxuICBmdW5jdGlvbiBjYWNoZShwYXRoKSB7XG4gICAgY2FjaGVQYXRoKGNhY2hlS2V5LCBwYXRoKVxuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBmdW5jdGlvbiB3aXRoUmVzb2x2ZXIocmVzb2x2ZXIsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmVyLnJlc29sdmVJbXBvcnQobW9kdWxlUGF0aCwgc291cmNlRmlsZSwgY29uZmlnKVxuICAgICAgaWYgKGZpbGVQYXRoID09IG51bGwpIHJldHVybiBmaWxlUGF0aFxuXG4gICAgICAvLyByZXNvbHZlcnMgaW1wbHkgZmlsZSBleGlzdGVuY2UsIHRoaXMgZG91YmxlLWNoZWNrIGp1c3QgZW5zdXJlcyB0aGUgY2FzZSBtYXRjaGVzXG4gICAgICBpZiAoQ0FTRV9JTlNFTlNJVElWRSAmJiAhZmlsZUV4aXN0c1dpdGhDYXNlU3luYyhmaWxlUGF0aCwgY2FjaGVTZXR0aW5ncykpIHJldHVybiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGZpbGVQYXRoXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29uZmlnUmVzb2x2ZXJzID0gKHNldHRpbmdzWydpbXBvcnQvcmVzb2x2ZXInXVxuICAgIHx8IHsgJ25vZGUnOiBzZXR0aW5nc1snaW1wb3J0L3Jlc29sdmUnXSB9KSAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5cbiAgY29uc3QgcmVzb2x2ZXJzID0gcmVzb2x2ZXJSZWR1Y2VyKGNvbmZpZ1Jlc29sdmVycywgbmV3IE1hcCgpKVxuXG4gIGZvciAobGV0IFtuYW1lLCBjb25maWddIG9mIHJlc29sdmVycy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCByZXNvbHZlciA9IHJlcXVpcmUoYGVzbGludC1pbXBvcnQtcmVzb2x2ZXItJHtuYW1lfWApXG5cbiAgICBsZXQgZnVsbFBhdGggPSB3aXRoUmVzb2x2ZXIocmVzb2x2ZXIsIGNvbmZpZylcbiAgICBpZiAoZnVsbFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlKGZ1bGxQYXRoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYWNoZSh1bmRlZmluZWQpXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVyUmVkdWNlcihyZXNvbHZlcnMsIG1hcCkge1xuICBpZiAocmVzb2x2ZXJzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICByZXNvbHZlcnMuZm9yRWFjaChyID0+IHJlc29sdmVyUmVkdWNlcihyLCBtYXApKVxuICAgIHJldHVybiBtYXBcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVzb2x2ZXJzID09PSAnc3RyaW5nJykge1xuICAgIG1hcC5zZXQocmVzb2x2ZXJzLCBudWxsKVxuICAgIHJldHVybiBtYXBcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVzb2x2ZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAobGV0IGtleSBpbiByZXNvbHZlcnMpIHtcbiAgICAgIG1hcC5zZXQoa2V5LCByZXNvbHZlcnNba2V5XSlcbiAgICB9XG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlc29sdmVyIGNvbmZpZycpXG59XG5cbi8qKlxuICogR2l2ZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IHAgLSBtb2R1bGUgcGF0aFxuICogQHBhcmFtICB7b2JqZWN0fSBjb250ZXh0IC0gRVNMaW50IGNvbnRleHRcbiAqIEByZXR1cm4ge3N0cmluZ30gLSB0aGUgZnVsbCBtb2R1bGUgZmlsZXN5c3RlbSBwYXRoO1xuICogICAgICAgICAgICAgICAgICAgIG51bGwgaWYgcGFja2FnZSBpcyBjb3JlO1xuICogICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZShwLCBjb250ZXh0KSB7XG4gIHJldHVybiByZWxhdGl2ZSggcFxuICAgICAgICAgICAgICAgICAsIGNvbnRleHQuZ2V0RmlsZW5hbWUoKVxuICAgICAgICAgICAgICAgICAsIGNvbnRleHQuc2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgKVxufVxucmVzb2x2ZS5yZWxhdGl2ZSA9IHJlbGF0aXZlXG5cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcbmZ1bmN0aW9uIGhhc2hPYmplY3Qob2JqZWN0KSB7XG4gIGNvbnN0IHNldHRpbmdzU2hhc3VtID0gY3JlYXRlSGFzaCgnc2hhMScpXG4gIHNldHRpbmdzU2hhc3VtLnVwZGF0ZShKU09OLnN0cmluZ2lmeShvYmplY3QpKVxuICByZXR1cm4gc2V0dGluZ3NTaGFzdW0uZGlnZXN0KCdoZXgnKVxufVxuIl19 |
{ | ||
"name": "eslint-plugin-import", | ||
"version": "1.1.0", | ||
"version": "1.2.0", | ||
"description": "Import with sanity.", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -174,3 +174,3 @@ # eslint-plugin-import | ||
not report the matching module if no `export`s are found. | ||
In practice, this means rules other than `no-unresolved` will not report on any | ||
In practice, this means rules other than [`no-unresolved`](./docs/rules/no-unresolved.md#ignore) will not report on any | ||
`import`s with (absolute) paths matching this pattern, _unless_ `export`s were | ||
@@ -180,2 +180,4 @@ found when parsing. This allows you to ignore `node_modules` but still properly | ||
`no-unresolved` has its own [`ignore`](./docs/rules/no-unresolved.md#ignore) setting. | ||
**Note**: setting this explicitly will replace the default of `node_modules`, so you | ||
@@ -198,2 +200,31 @@ may need to include it in your own list if you still want to ignore it. Example: | ||
#### `import/cache` | ||
Settings for cache behavior. Memoization is used at various levels to avoid the copious amount of `fs.statSync`/module parse calls required to correctly report errors. | ||
For normal `eslint` console runs, the cache lifetime is irrelevant, as we can strongly assume that files should not be changing during the lifetime of the linter process (and thus, the cache in memory) | ||
For long-lasting processes, like [`eslint_d`] or [`eslint-loader`], however, it's important that there be some notion of staleness. | ||
If you never use [`eslint_d`] or [`eslint-loader`], you may set the cache lifetime to `Infinity` and everything should be fine: | ||
```yaml | ||
# .eslintrc.yml | ||
settings: | ||
import/cache: | ||
lifetime: ∞ # or Infinity | ||
``` | ||
Otherwise, set some integer, and cache entries will be evicted after that many seconds have elapsed: | ||
```yaml | ||
# .eslintrc.yml | ||
settings: | ||
import/cache: | ||
lifetime: 5 # 30 is the default | ||
``` | ||
[`eslint_d`]: https://www.npmjs.com/package/eslint_d | ||
[`eslint-loader`]: https://www.npmjs.com/package/eslint-loader | ||
## SublimeLinter-eslint | ||
@@ -200,0 +231,0 @@ |
@@ -347,2 +347,1 @@ import * as fs from 'fs' | ||
} | ||
`` |
import fs from 'fs' | ||
import { dirname, basename, join } from 'path' | ||
const CASE_INSENSITIVE = fs.existsSync(join(__dirname, 'reSOLVE.js')) | ||
export const CASE_INSENSITIVE = fs.existsSync(join(__dirname, 'reSOLVE.js')) | ||
// http://stackoverflow.com/a/27382838 | ||
function fileExistsWithCaseSync(filepath) { | ||
var dir = dirname(filepath) | ||
if (dir === '/' || dir === '.' || /^[A-Z]:\\$/i.test(dir)) return true | ||
var filenames = fs.readdirSync(dir) | ||
if (filenames.indexOf(basename(filepath)) === -1) { | ||
return false | ||
const fileExistsCache = new Map() | ||
function cachePath(cacheKey, result) { | ||
fileExistsCache.set(cacheKey, { result, lastSeen: Date.now() }) | ||
} | ||
function checkCache(cacheKey, { lifetime }) { | ||
if (fileExistsCache.has(cacheKey)) { | ||
const { result, lastSeen } = fileExistsCache.get(cacheKey) | ||
// check fresness | ||
if (Date.now() - lastSeen < (lifetime * 1000)) return result | ||
} | ||
return fileExistsWithCaseSync(dir) | ||
// cache miss | ||
return undefined | ||
} | ||
function fileExists(filepath) { | ||
if (CASE_INSENSITIVE) { | ||
// short-circuit if path doesn't exist, ignoring case | ||
return !(!fs.existsSync(filepath) || !fileExistsWithCaseSync(filepath)) | ||
// http://stackoverflow.com/a/27382838 | ||
function fileExistsWithCaseSync(filepath, cacheSettings) { | ||
const dir = dirname(filepath) | ||
let result = checkCache(filepath, cacheSettings) | ||
if (result != null) return result | ||
// base case | ||
if (dir === '/' || dir === '.' || /^[A-Z]:\\$/i.test(dir)) { | ||
result = true | ||
} else { | ||
return fs.existsSync(filepath) | ||
const filenames = fs.readdirSync(dir) | ||
if (filenames.indexOf(basename(filepath)) === -1) { | ||
result = false | ||
} else { | ||
result = fileExistsWithCaseSync(dir, cacheSettings) | ||
} | ||
} | ||
cachePath(filepath, result) | ||
return result | ||
} | ||
@@ -28,9 +46,29 @@ | ||
const sourceDir = dirname(sourceFile) | ||
, cacheKey = sourceDir + hashObject(settings) + modulePath | ||
const cacheSettings = Object.assign({ | ||
lifetime: 30, // seconds | ||
}, settings['import/cache']) | ||
// parse infinity | ||
if (cacheSettings.lifetime === '∞' || cacheSettings.lifetime === 'Infinity') { | ||
cacheSettings.lifetime = Infinity | ||
} | ||
const cachedPath = checkCache(cacheKey, cacheSettings) | ||
if (cachedPath !== undefined) return cachedPath | ||
function cache(path) { | ||
cachePath(cacheKey, path) | ||
return path | ||
} | ||
function withResolver(resolver, config) { | ||
// resolve just returns the core module id, which won't appear to exist | ||
try { | ||
const filePath = resolver.resolveImport(modulePath, sourceFile, config) | ||
if (filePath === null) return null | ||
if (filePath == null) return filePath | ||
if (filePath === undefined || !fileExists(filePath)) return undefined | ||
// resolvers imply file existence, this double-check just ensures the case matches | ||
if (CASE_INSENSITIVE && !fileExistsWithCaseSync(filePath, cacheSettings)) return undefined | ||
@@ -52,5 +90,8 @@ return filePath | ||
let fullPath = withResolver(resolver, config) | ||
if (fullPath !== undefined) return fullPath | ||
if (fullPath !== undefined) { | ||
return cache(fullPath) | ||
} | ||
} | ||
return cache(undefined) | ||
} | ||
@@ -94,1 +135,9 @@ | ||
resolve.relative = relative | ||
import { createHash } from 'crypto' | ||
function hashObject(object) { | ||
const settingsShasum = createHash('sha1') | ||
settingsShasum.update(JSON.stringify(object)) | ||
return settingsShasum.digest('hex') | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
218659
2603
301