Socket
Socket
Sign inDemoInstall

eslint-plugin-import

Package Overview
Dependencies
Maintainers
1
Versions
130
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eslint-plugin-import - npm Package Compare versions

Comparing version 1.1.0 to 1.2.0

2

docs/rules/no-unresolved.md

@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvcmUvZ2V0RXhwb3J0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFnVWdCOztBQWhVaEI7O0lBQVk7O0FBRVo7O0FBQ0E7O0lBQVk7O0FBRVo7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7QUFHQSxJQUFNLGVBQWUsbUJBQWY7O0lBRWU7QUFDbkIsV0FEbUIsU0FDbkIsQ0FBWSxJQUFaLEVBQWtCO3dDQURDLFdBQ0Q7O0FBQ2hCLFNBQUssSUFBTCxHQUFZLElBQVosQ0FEZ0I7QUFFaEIsU0FBSyxTQUFMLEdBQWlCLG1CQUFqQjs7QUFGZ0IsUUFJaEIsQ0FBSyxTQUFMLEdBQWlCLG1CQUFqQixDQUpnQjtBQUtoQixTQUFLLFlBQUwsR0FBb0IsbUJBQXBCLENBTGdCO0FBTWhCLFNBQUssTUFBTCxHQUFjLEVBQWQsQ0FOZ0I7R0FBbEI7OzZCQURtQjs7Ozs7Ozs7Ozs7d0JBNE1mLE1BQU07QUFDUixVQUFJLEtBQUssU0FBTCxDQUFlLEdBQWYsQ0FBbUIsSUFBbkIsQ0FBSixFQUE4QixPQUFPLElBQVAsQ0FBOUI7QUFDQSxVQUFJLEtBQUssU0FBTCxDQUFlLEdBQWYsQ0FBbUIsSUFBbkIsQ0FBSixFQUE4QixPQUFPLElBQVAsQ0FBOUI7OzJDQUZROzs7OztBQUlSLHdEQUFnQixLQUFLLFlBQUwsQ0FBa0IsTUFBbEIsVUFBaEIsb0dBQTRDO2NBQW5DLGtCQUFtQzs7QUFDMUMsY0FBSSxXQUFXLEtBQVg7OztBQURzQyxjQUl0QyxDQUFDLFFBQUQsRUFBVyxTQUFmOztBQUVBLGNBQUksU0FBUyxHQUFULENBQWEsSUFBYixDQUFKLEVBQXdCLE9BQU8sSUFBUCxDQUF4QjtTQU5GOzs7Ozs7Ozs7Ozs7OztPQUpROztBQWFSLGFBQU8sS0FBUCxDQWJROzs7O3dCQWdCTixNQUFNO0FBQ1IsVUFBSSxLQUFLLFNBQUwsQ0FBZSxHQUFmLENBQW1CLElBQW5CLENBQUosRUFBOEIsT0FBTyxLQUFLLFNBQUwsQ0FB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LENBQWUsUUFBUSxLQUFSLEVBQWUsRUFBRSxRQUFRLElBQVIsRUFBaEMsQ0FBZixDQURFO09BQUosQ0FFRSxPQUFPLEdBQVAsRUFBWTs7T0FBWjtLQUxzQixDQUExQixDQUpjO0FBYWQsV0FBTyxJQUFQLENBYmM7R0FBTCxDQUFYLENBSjRCOztBQW9CNUIsU0FBTyxRQUFQLENBcEI0QjtDQUE5Qjs7Ozs7Ozs7O0FBOEJPLFNBQVMsdUJBQVQsQ0FBaUMsT0FBakMsRUFBMEMsUUFBMUMsRUFBb0Q7QUFDekQsVUFBUSxRQUFRLElBQVI7QUFDTixTQUFLLFlBQUw7O0FBQ0UsZUFBUyxPQUFULEVBREY7QUFFRSxZQUZGOztBQURGLFNBS08sZUFBTDtBQUNFLGNBQVEsVUFBUixDQUFtQixPQUFuQixDQUEyQixpQkFBZTtZQUFaLG9CQUFZOztBQUN4QyxnQ0FBd0IsS0FBeEIsRUFBK0IsUUFBL0IsRUFEd0M7T0FBZixDQUEzQixDQURGO0FBSUUsWUFKRjs7QUFMRixTQVdPLGNBQUw7QUFDRSxjQUFRLFFBQVIsQ0FBaUIsT0FBakIsQ0FBeUIsVUFBQyxPQUFELEVBQWE7QUFDcEMsWUFBSSxXQUFXLElBQVgsRUFBaUIsT0FBckI7QUFDQSxnQ0FBd0IsT0FBeEIsRUFBaUMsUUFBakMsRUFGb0M7T0FBYixDQUF6QixDQURGO0FBS0UsWUFMRjtBQVhGLEdBRHlEO0NBQXBEOztBQXFCUCxTQUFTLFVBQVQsQ0FBb0IsTUFBcEIsRUFBNEI7QUFDMUIsTUFBTSxpQkFBaUIsd0JBQVcsTUFBWCxDQUFqQixDQURvQjtBQUUxQixpQkFBZSxNQUFmLENBQXNCLHlCQUFlLE1BQWYsQ0FBdEIsRUFGMEI7QUFHMUIsU0FBTyxlQUFlLE1BQWYsQ0FBc0IsS0FBdEIsQ0FBUCxDQUgwQjtDQUE1QiIsImZpbGUiOiJjb3JlL2dldEV4cG9ydHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCAqIGFzIGRvY3RyaW5lIGZyb20gJ2RvY3RyaW5lJ1xuXG5pbXBvcnQgcGFyc2UgZnJvbSAnLi9wYXJzZSdcbmltcG9ydCByZXNvbHZlIGZyb20gJy4vcmVzb2x2ZSdcbmltcG9ydCBpc0lnbm9yZWQgZnJvbSAnLi9pZ25vcmUnXG5cbi8vIG1hcCBmcm9tIHNldHRpbmdzIHNoYTEgPT4gcGF0aCA9PiBleHBvcnQgbWFwIG9iamVjdHNcbmNvbnN0IGV4cG9ydENhY2hlcyA9IG5ldyBNYXAoKVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvcnRNYXAge1xuICBjb25zdHJ1Y3RvcihwYXRoKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aFxuICAgIHRoaXMubmFtZXNwYWNlID0gbmV3IE1hcCgpXG4gICAgLy8gdG9kbzogcmVzdHJ1Y3R1cmUgdG8ga2V5IG9uIHBhdGgsIHZhbHVlIGlzIHJlc29sdmVyICsgbWFwIG9mIG5hbWVzXG4gICAgdGhpcy5yZWV4cG9ydHMgPSBuZXcgTWFwKClcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuZXJyb3JzID0gW11cbiAgfVxuXG4gIGdldCBoYXNEZWZhdWx0KCkgeyByZXR1cm4gdGhpcy5nZXQoJ2RlZmF1bHQnKSAhPSBudWxsIH0gLy8gc3Ryb25nZXIgdGhhbiB0aGlzLmhhc1xuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5uYW1lc3BhY2Uuc2l6ZSArIHRoaXMucmVleHBvcnRzLnNpemVcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiBzaXplICs9IGRlcCgpLnNpemUpXG4gICAgcmV0dXJuIHNpemVcbiAgfVxuXG4gIHN0YXRpYyBnZXQoc291cmNlLCBjb250ZXh0KSB7XG5cbiAgICB2YXIgcGF0aCA9IHJlc29sdmUoc291cmNlLCBjb250ZXh0KVxuICAgIGlmIChwYXRoID09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gRXhwb3J0TWFwLmZvcihwYXRoLCBjb250ZXh0KVxuICB9XG5cbiAgc3RhdGljIGZvcihwYXRoLCBjb250ZXh0KSB7XG4gICAgbGV0IGV4cG9ydE1hcFxuXG4gICAgY29uc3QgY2FjaGVLZXkgPSBoYXNoT2JqZWN0KHtcbiAgICAgIHNldHRpbmdzOiBjb250ZXh0LnNldHRpbmdzLFxuICAgICAgcGFyc2VyUGF0aDogY29udGV4dC5wYXJzZXJQYXRoLFxuICAgICAgcGFyc2VyT3B0aW9uczogY29udGV4dC5wYXJzZXJPcHRpb25zLFxuICAgIH0pXG4gICAgbGV0IGV4cG9ydENhY2hlID0gZXhwb3J0Q2FjaGVzLmdldChjYWNoZUtleSlcbiAgICBpZiAoZXhwb3J0Q2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXhwb3J0Q2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIGV4cG9ydENhY2hlcy5zZXQoY2FjaGVLZXksIGV4cG9ydENhY2hlKVxuICAgIH1cblxuICAgIGV4cG9ydE1hcCA9IGV4cG9ydENhY2hlLmdldChwYXRoKVxuICAgIC8vIHJldHVybiBjYWNoZWQgaWdub3JlXG4gICAgaWYgKGV4cG9ydE1hcCA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aClcbiAgICBpZiAoZXhwb3J0TWFwICE9IG51bGwpIHtcbiAgICAgIC8vIGRhdGUgZXF1YWxpdHkgY2hlY2tcbiAgICAgIGlmIChleHBvcnRNYXAubXRpbWUgLSBzdGF0cy5tdGltZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0TWFwXG4gICAgICB9XG4gICAgICAvLyBmdXR1cmU6IGNoZWNrIGNvbnRlbnQgZXF1YWxpdHk/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')
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc