Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build(deps): bump eslint-plugin-import from 2.30.0 to 2.31.0 #1362

Merged

Conversation

dependabot[bot]
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Nov 1, 2024

Bumps eslint-plugin-import from 2.30.0 to 2.31.0.

Release notes

Sourced from eslint-plugin-import's releases.

v2.31.0

Added

Fixed

Changed

#3073: import-js/eslint-plugin-import#3073 #3072: import-js/eslint-plugin-import#3072 #3071: import-js/eslint-plugin-import#3071 #3070: import-js/eslint-plugin-import#3070 #3068: import-js/eslint-plugin-import#3068 #3066: import-js/eslint-plugin-import#3066 #3065: import-js/eslint-plugin-import#3065 #3062: import-js/eslint-plugin-import#3062 #3052: import-js/eslint-plugin-import#3052 #3043: import-js/eslint-plugin-import#3043 #3032: import-js/eslint-plugin-import#3032 #2996: import-js/eslint-plugin-import#2996 #2817: import-js/eslint-plugin-import#2817 [@​akwodkiewicz]: https://github.com/akwodkiewicz [@​joshuaobrien]: https://github.com/joshuaobrien [@​liuxingbaoyu]: https://github.com/liuxingbaoyu [@​manuth]: https://github.com/manuth [@​michaelfaith]: https://github.com/michaelfaith [@​phryneas]: https://github.com/phryneas

... (truncated)

Changelog

Sourced from eslint-plugin-import's changelog.

[2.31.0] - 2024-10-03

Added

Fixed

  • ExportMap / flat config: include languageOptions in context (#3052, thanks [@​michaelfaith])
  • [no-named-as-default]: Allow using an identifier if the export is both a named and a default export (#3032, thanks [@​akwodkiewicz])
  • [export]: False positive for exported overloaded functions in TS (#3065, thanks [@​liuxingbaoyu])
  • exportMap: export map cache is tainted by unreliable parse results (#3062, thanks [@​michaelfaith])
  • exportMap: improve cacheKey when using flat config (#3072, thanks [@​michaelfaith])
  • adjust "is source type module" checks for flat config (#2996, thanks [@​G-Rath])

Changed

Commits
  • 91f809b v2.31.0
  • 3f1ac24 [utils] [refactor] parse: avoid using a regex here
  • d225176 [New] extensions: add the checkTypeImports option
  • 5a51b9a [Tests] rule-tester: try this babel class workaround
  • d66cde0 [New] support eslint v9
  • d27a639 [Fix] adjust "is source type module" checks for flat config
  • 1fa8a07 [Refactor] create sourceType helper
  • 0bc1355 [Tests] no-default-export, no-named-export: add test cases with non-modu...
  • 55fa203 [Tests] no-default-export, no-named-export: add test case
  • 6be20df [Docs] no-restricted-paths: fix grammar
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabot dependabot bot added dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code labels Nov 1, 2024
@github-actions github-actions bot enabled auto-merge (squash) November 1, 2024 03:07
Copy link
Contributor

github-actions bot commented Nov 1, 2024

Diff between eslint-plugin-import 2.30.0 and 2.31.0
diff --git a/lib/exportMap/builder.js b/lib/exportMap/builder.js
index v2.30.0..v2.31.0 100644
--- a/lib/exportMap/builder.js
+++ b/lib/exportMap/builder.js
@@ -93,5 +93,9 @@
         exportMap.mtime = stats.mtime;
 
-        exportCache.set(cacheKey, exportMap);
+        // If the visitor keys were not populated, then we shouldn't save anything to the cache,
+        // since the parse results may not be reliable.
+        if (exportMap.visitorKeys) {
+          exportCache.set(cacheKey, exportMap);
+        }
         return exportMap;
       }return _for;}() }, { key: 'parse', value: function () {function parse(
@@ -204,3 +208,3 @@
         return exportMap;
       }return parse;}() }]);return ExportMapBuilder;}();exports['default'] = ExportMapBuilder;
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJ1bmFtYmlndW91cyIsImxvZyIsImV4cG9ydENhY2hlIiwiTWFwIiwidGh1bmtGb3IiLCJwIiwiY29udGV4dCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJzb3VyY2UiLCJwYXRoIiwiY2FjaGVLZXkiLCJkaWdlc3QiLCJleHBvcnRNYXAiLCJnZXQiLCJzdGF0cyIsImZzIiwic3RhdFN5bmMiLCJtdGltZSIsInNldCIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRlc3QiLCJwYXJzZSIsIkV4cG9ydE1hcCIsImlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSIsImFzdCIsInZpc2l0b3JLZXlzIiwicmVzdWx0IiwiZXJyIiwiZXJyb3JzIiwicHVzaCIsImhhc0R5bmFtaWNJbXBvcnRzIiwicmVtb3RlUGF0aFJlc29sdmVyIiwiUmVtb3RlUGF0aCIsInByb2Nlc3NEeW5hbWljSW1wb3J0IiwidHlwZSIsInJlc29sdmUiLCJ2YWx1ZSIsImltcG9ydGVkU3BlY2lmaWVycyIsIlNldCIsImFkZCIsImdldHRlciIsImltcG9ydHMiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJkeW5hbWljIiwiSW1wb3J0RXhwcmVzc2lvbiIsIm5vZGUiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImFyZ3VtZW50cyIsInVuYW1iaWd1b3VzbHlFU00iLCJpc01vZHVsZSIsImNvbW1lbnRzIiwic29tZSIsImMiLCJkb2MiLCJkb2N0cmluZSIsInVud3JhcCIsInRhZ3MiLCJ0IiwidGl0bGUiLCJ2aXNpdG9yQnVpbGRlciIsIkltcG9ydEV4cG9ydFZpc2l0b3JCdWlsZGVyIiwiYm9keSIsImZvckVhY2giLCJhc3ROb2RlIiwidmlzaXRvciIsImJ1aWxkIiwiY2FsbCIsIm5hbWVzcGFjZSIsInNpemUiLCJoYXMiLCJwYXJzZUdvYWwiXSwibWFwcGluZ3MiOiJnbkJBQUEsd0I7O0FBRUEsb0M7O0FBRUEs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dUJBQU8sSUFBUDtBQUNEO0FBQ0YsYUFORCxDQU1FLE9BQU81QixHQUFQLEVBQVksQ0FBRSxZQUFjO0FBQzlCLG1CQUFPLEtBQVA7QUFDRCxXQVZEO0FBV0Q7O0FBRUQsWUFBTWtDLGlCQUFpQixJQUFJQyxvQkFBSjtBQUNyQnZELFlBRHFCO0FBRXJCSCxlQUZxQjtBQUdyQk0saUJBSHFCO0FBSXJCTCx3QkFKcUI7QUFLckJZLGVBTHFCO0FBTXJCTyxXQU5xQjtBQU9yQkQsNkJBUHFCO0FBUXJCckIsZ0JBUnFCLENBQXZCOztBQVVBc0IsWUFBSXVDLElBQUosQ0FBU0MsT0FBVCxDQUFpQixVQUFVQyxPQUFWLEVBQW1CO0FBQ2xDLGNBQU1DLFVBQVVMLGVBQWVNLEtBQWYsQ0FBcUJGLE9BQXJCLENBQWhCOztBQUVBLGNBQUlDLFFBQVFELFFBQVEvQixJQUFoQixDQUFKLEVBQTJCO0FBQ3pCZ0Msb0JBQVFELFFBQVEvQixJQUFoQixFQUFzQmtDLElBQXRCLENBQTJCUCxjQUEzQjtBQUNEO0FBQ0YsU0FORDs7QUFRQTtBQUNFdEMsOEJBQXNCO0FBQXRCLFdBQ0diLFVBQVUyRCxTQUFWLENBQW9CQyxJQUFwQixHQUEyQixDQUQ5QixDQUNnQztBQURoQyxXQUVHLENBQUM1RCxVQUFVMkQsU0FBVixDQUFvQkUsR0FBcEIsQ0FBd0IsU0FBeEIsQ0FITixDQUd5QztBQUh6QyxVQUlFO0FBQ0E3RCxzQkFBVTJELFNBQVYsQ0FBb0JyRCxHQUFwQixDQUF3QixTQUF4QixFQUFtQyxFQUFuQyxFQURBLENBQ3dDO0FBQ3pDOztBQUVELFlBQUlrQyxnQkFBSixFQUFzQjtBQUNwQnhDLG9CQUFVOEQsU0FBVixHQUFzQixRQUF0QjtBQUNEO0FBQ0QsZUFBTzlELFNBQVA7QUFDRCxPLHNFQTFLa0JMLGdCIiwiZmlsZSI6ImJ1aWxkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuXG5pbXBvcnQgZG9jdHJpbmUgZnJvbSAnZG9jdHJpbmUnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgcGFyc2UgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wYXJzZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IGlzSWdub3JlZCwgeyBoYXNWYWxpZEV4dGVuc2lvbiB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcblxuaW1wb3J0IHsgaGFzaE9iamVjdCB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaGFzaCc7XG5pbXBvcnQgKiBhcyB1bmFtYmlndW91cyBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3VuYW1iaWd1b3VzJztcblxuaW1wb3J0IEV4cG9ydE1hcCBmcm9tICcuJztcbmltcG9ydCBjaGlsZENvbnRleHQgZnJvbSAnLi9jaGlsZENvbnRleHQnO1xuaW1wb3J0IHsgaXNFc01vZHVsZUludGVyb3AgfSBmcm9tICcuL3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgUmVtb3RlUGF0aCB9IGZyb20gJy4vcmVtb3RlUGF0aCc7XG5pbXBvcnQgSW1wb3J0RXhwb3J0VmlzaXRvckJ1aWxkZXIgZnJvbSAnLi92aXNpdG9yJztcblxuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OkV4cG9ydE1hcCcpO1xuXG5jb25zdCBleHBvcnRDYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBUaGUgY3JlYXRpb24gb2YgdGhpcyBjbG9zdXJlIGlzIGlzb2xhdGVkIGZyb20gb3RoZXIgc2NvcGVzXG4gKiB0byBhdm9pZCBvdmVyLXJldGVudGlvbiBvZiB1bnJlbGF0ZWQgdmFyaWFibGVzLCB3aGljaCBoYXNcbiAqIGNhdXNlZCBtZW1vcnkgbGVha3MuIFNlZSAjMTI2Ni5cbiAqL1xuZnVuY3Rpb24gdGh1bmtGb3IocCwgY29udGV4dCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgcmV0dXJuICgpID0+IEV4cG9ydE1hcEJ1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9ydE1hcEJ1aWxkZXIge1xuICBzdGF0aWMgZ2V0KHNvdXJjZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKHNvdXJjZSwgY29udGV4dCk7XG4gICAgaWYgKHBhdGggPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgcmV0dXJuIEV4cG9ydE1hcEJ1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwYXRoLCBjb250ZXh0KSk7XG4gIH1cblxuICBzdGF0aWMgZm9yKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHBhdGggfSA9IGNvbnRleHQ7XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IGNvbnRleHQuY2FjaGVLZXkgfHwgaGFzaE9iamVjdChjb250ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIGxldCBleHBvcnRNYXAgPSBleHBvcnRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gICAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgICBpZiAoZXhwb3J0TWFwID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgICAgLy8gZGF0ZSBlcXVhbGl0eSBjaGVja1xuICAgICAgaWYgKGV4cG9ydE1hcC5tdGltZSAtIHN0YXRzLm10aW1lID09PSAwKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRNYXA7XG4gICAgICB9XG4gICAgICAvLyBmdXR1cmU6IGNoZWNrIGNvbnRlbnQgZXF1YWxpdHk/XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdmFsaWQgZXh0ZW5zaW9ucyBmaXJzdFxuICAgIGlmICghaGFzVmFsaWRFeHRlbnNpb24ocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIGlnbm9yZVxuICAgIGlmIChpc0lnbm9yZWQocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byBpZ25vcmUgc2V0dGluZ3M6JywgcGF0aCk7XG4gICAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG5cbiAgICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIHVuYW1iaWd1b3VzIG1vZHVsZXNcbiAgICBpZiAoIXVuYW1iaWd1b3VzLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byB1bmFtYmlndW91cyByZWdleDonLCBwYXRoKTtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2coJ2NhY2hlIG1pc3MnLCBjYWNoZUtleSwgJ2ZvciBwYXRoJywgcGF0aCk7XG4gICAgZXhwb3J0TWFwID0gRXhwb3J0TWFwQnVpbGRlci5wYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KTtcblxuICAgIC8vIGFtYmlndW91cyBtb2R1bGVzIHJldHVybiBudWxsXG4gICAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7XG4gICAgICBsb2coJ2lnbm9yZWQgcGF0aCBkdWUgdG8gYW1iaWd1b3VzIHBhcnNlOicsIHBhdGgpO1xuICAgICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBudWxsKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGV4cG9ydE1hcC5tdGltZSA9IHN0YXRzLm10aW1lO1xuXG4gICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBleHBvcnRNYXApO1xuICAgIHJldHVybiBleHBvcnRNYXA7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IGV4cG9ydE1hcCA9IG5ldyBFeHBvcnRNYXAocGF0aCk7XG4gICAgY29uc3QgaXNFc01vZHVsZUludGVyb3BUcnVlID0gaXNFc01vZHVsZUludGVyb3AoY29udGV4dCk7XG5cbiAgICBsZXQgYXN0O1xuICAgIGxldCB2aXNpdG9yS2V5cztcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG4gICAgICBhc3QgPSByZXN1bHQuYXN0O1xuICAgICAgdmlzaXRvcktleXMgPSByZXN1bHQudmlzaXRvcktleXM7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBleHBvcnRNYXAuZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgIHJldHVybiBleHBvcnRNYXA7IC8vIGNhbid0IGNvbnRpbnVlXG4gICAgfVxuXG4gICAgZXhwb3J0TWFwLnZpc2l0b3JLZXlzID0gdmlzaXRvcktleXM7XG5cbiAgICBsZXQgaGFzRHluYW1pY0ltcG9ydHMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlbW90ZVBhdGhSZXNvbHZlciA9IG5ldyBSZW1vdGVQYXRoKHBhdGgsIGNvbnRleHQpO1xuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0R5bmFtaWNJbXBvcnQoc291cmNlKSB7XG4gICAgICBoYXNEeW5hbWljSW1wb3J0cyA9IHRydWU7XG4gICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHAgPSByZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZShzb3VyY2UudmFsdWUpO1xuICAgICAgaWYgKHAgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGltcG9ydGVkU3BlY2lmaWVycyA9IG5ldyBTZXQoKTtcbiAgICAgIGltcG9ydGVkU3BlY2lmaWVycy5hZGQoJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICAgICAgY29uc3QgZ2V0dGVyID0gdGh1bmtGb3IocCwgY29udGV4dCk7XG4gICAgICBleHBvcnRNYXAuaW1wb3J0cy5zZXQocCwge1xuICAgICAgICBnZXR0ZXIsXG4gICAgICAgIGRlY2xhcmF0aW9uczogbmV3IFNldChbe1xuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgIC8vIGNhcHR1cmluZyBhY3R1YWwgbm9kZSByZWZlcmVuY2UgaG9sZHMgZnVsbCBBU1QgaW4gbWVtb3J5IVxuICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS52YWx1ZSxcbiAgICAgICAgICAgIGxvYzogc291cmNlLmxvYyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGltcG9ydGVkU3BlY2lmaWVycyxcbiAgICAgICAgICBkeW5hbWljOiB0cnVlLFxuICAgICAgICB9XSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2aXNpdChhc3QsIHZpc2l0b3JLZXlzLCB7XG4gICAgICBJbXBvcnRFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5zb3VyY2UpO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICdJbXBvcnQnKSB7XG4gICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdW5hbWJpZ3VvdXNseUVTTSA9IHVuYW1iaWd1b3VzLmlzTW9kdWxlKGFzdCk7XG4gICAgaWYgKCF1bmFtYmlndW91c2x5RVNNICYmICFoYXNEeW5hbWljSW1wb3J0cykgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgLy8gYXR0ZW1wdCB0byBjb2xsZWN0IG1vZHVsZSBkb2NcbiAgICBpZiAoYXN0LmNvbW1lbnRzKSB7XG4gICAgICBhc3QuY29tbWVudHMuc29tZSgoYykgPT4ge1xuICAgICAgICBpZiAoYy50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChkb2MudGFncy5zb21lKCh0KSA9PiB0LnRpdGxlID09PSAnbW9kdWxlJykpIHtcbiAgICAgICAgICAgIGV4cG9ydE1hcC5kb2MgPSBkb2M7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2aXNpdG9yQnVpbGRlciA9IG5ldyBJbXBvcnRFeHBvcnRWaXNpdG9yQnVpbGRlcihcbiAgICAgIHBhdGgsXG4gICAgICBjb250ZXh0LFxuICAgICAgZXhwb3J0TWFwLFxuICAgICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgICAgIGNvbnRlbnQsXG4gICAgICBhc3QsXG4gICAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUsXG4gICAgICB0aHVua0ZvcixcbiAgICApO1xuICAgIGFzdC5ib2R5LmZvckVhY2goZnVuY3Rpb24gKGFzdE5vZGUpIHtcbiAgICAgIGNvbnN0IHZpc2l0b3IgPSB2aXNpdG9yQnVpbGRlci5idWlsZChhc3ROb2RlKTtcblxuICAgICAgaWYgKHZpc2l0b3JbYXN0Tm9kZS50eXBlXSkge1xuICAgICAgICB2aXNpdG9yW2FzdE5vZGUudHlwZV0uY2FsbCh2aXNpdG9yQnVpbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUgLy8gZXNNb2R1bGVJbnRlcm9wIGlzIG9uIGluIHRzY29uZmlnXG4gICAgICAmJiBleHBvcnRNYXAubmFtZXNwYWNlLnNpemUgPiAwIC8vIGFueXRoaW5nIGlzIGV4cG9ydGVkXG4gICAgICAmJiAhZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICAgKSB7XG4gICAgICBleHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIHt9KTsgLy8gYWRkIGRlZmF1bHQgZXhwb3J0XG4gICAgfVxuXG4gICAgaWYgKHVuYW1iaWd1b3VzbHlFU00pIHtcbiAgICAgIGV4cG9ydE1hcC5wYXJzZUdvYWwgPSAnTW9kdWxlJztcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydE1hcDtcbiAgfVxufVxuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJ1bmFtYmlndW91cyIsImxvZyIsImV4cG9ydENhY2hlIiwiTWFwIiwidGh1bmtGb3IiLCJwIiwiY29udGV4dCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJzb3VyY2UiLCJwYXRoIiwiY2FjaGVLZXkiLCJkaWdlc3QiLCJleHBvcnRNYXAiLCJnZXQiLCJzdGF0cyIsImZzIiwic3RhdFN5bmMiLCJtdGltZSIsInNldCIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRlc3QiLCJwYXJzZSIsInZpc2l0b3JLZXlzIiwiRXhwb3J0TWFwIiwiaXNFc01vZHVsZUludGVyb3BUcnVlIiwiYXN0IiwicmVzdWx0IiwiZXJyIiwiZXJyb3JzIiwicHVzaCIsImhhc0R5bmFtaWNJbXBvcnRzIiwicmVtb3RlUGF0aFJlc29sdmVyIiwiUmVtb3RlUGF0aCIsInByb2Nlc3NEeW5hbWljSW1wb3J0IiwidHlwZSIsInJlc29sdmUiLCJ2YWx1ZSIsImltcG9ydGVkU3BlY2lmaWVycyIsIlNldCIsImFkZCIsImdldHRlciIsImltcG9ydHMiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJkeW5hbWljIiwiSW1wb3J0RXhwcmVzc2lvbiIsIm5vZGUiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImFyZ3VtZW50cyIsInVuYW1iaWd1b3VzbHlFU00iLCJpc01vZHVsZSIsImNvbW1lbnRzIiwic29tZSIsImMiLCJkb2MiLCJkb2N0cmluZSIsInVud3JhcCIsInRhZ3MiLCJ0IiwidGl0bGUiLCJ2aXNpdG9yQnVpbGRlciIsIkltcG9ydEV4cG9ydFZpc2l0b3JCdWlsZGVyIiwiYm9keSIsImZvckVhY2giLCJhc3ROb2RlIiwidmlzaXRvciIsImJ1aWxkIiwiY2FsbCIsIm5hbWVzcGFjZSIsInNpemUiLCJoYXMiLCJwYXJzZUdvYWwiXSwibWFwcGluZ3MiOiJnbkJBQUEsd0I7O0FBRUEsb0M7O0FBRUEs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LEVBQWdEO0FBQzlDbEQsMEJBQVU2QyxHQUFWLEdBQWdCQSxHQUFoQjtBQUNBLHVCQUFPLElBQVA7QUFDRDtBQUNGLGFBTkQsQ0FNRSxPQUFPNUIsR0FBUCxFQUFZLENBQUUsWUFBYztBQUM5QixtQkFBTyxLQUFQO0FBQ0QsV0FWRDtBQVdEOztBQUVELFlBQU1rQyxpQkFBaUIsSUFBSUMsb0JBQUo7QUFDckJ2RCxZQURxQjtBQUVyQkgsZUFGcUI7QUFHckJNLGlCQUhxQjtBQUlyQkwsd0JBSnFCO0FBS3JCWSxlQUxxQjtBQU1yQlEsV0FOcUI7QUFPckJELDZCQVBxQjtBQVFyQnRCLGdCQVJxQixDQUF2Qjs7QUFVQXVCLFlBQUlzQyxJQUFKLENBQVNDLE9BQVQsQ0FBaUIsVUFBVUMsT0FBVixFQUFtQjtBQUNsQyxjQUFNQyxVQUFVTCxlQUFlTSxLQUFmLENBQXFCRixPQUFyQixDQUFoQjs7QUFFQSxjQUFJQyxRQUFRRCxRQUFRL0IsSUFBaEIsQ0FBSixFQUEyQjtBQUN6QmdDLG9CQUFRRCxRQUFRL0IsSUFBaEIsRUFBc0JrQyxJQUF0QixDQUEyQlAsY0FBM0I7QUFDRDtBQUNGLFNBTkQ7O0FBUUE7QUFDRXJDLDhCQUFzQjtBQUF0QixXQUNHZCxVQUFVMkQsU0FBVixDQUFvQkMsSUFBcEIsR0FBMkIsQ0FEOUIsQ0FDZ0M7QUFEaEMsV0FFRyxDQUFDNUQsVUFBVTJELFNBQVYsQ0FBb0JFLEdBQXBCLENBQXdCLFNBQXhCLENBSE4sQ0FHeUM7QUFIekMsVUFJRTtBQUNBN0Qsc0JBQVUyRCxTQUFWLENBQW9CckQsR0FBcEIsQ0FBd0IsU0FBeEIsRUFBbUMsRUFBbkMsRUFEQSxDQUN3QztBQUN6Qzs7QUFFRCxZQUFJa0MsZ0JBQUosRUFBc0I7QUFDcEJ4QyxvQkFBVThELFNBQVYsR0FBc0IsUUFBdEI7QUFDRDtBQUNELGVBQU85RCxTQUFQO0FBQ0QsTyxzRUE5S2tCTCxnQiIsImZpbGUiOiJidWlsZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcblxuaW1wb3J0IGRvY3RyaW5lIGZyb20gJ2RvY3RyaW5lJztcblxuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHBhcnNlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcGFyc2UnO1xuaW1wb3J0IHZpc2l0IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvdmlzaXQnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBpc0lnbm9yZWQsIHsgaGFzVmFsaWRFeHRlbnNpb24gfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2lnbm9yZSc7XG5cbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuaW1wb3J0ICogYXMgdW5hbWJpZ3VvdXMgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy91bmFtYmlndW91cyc7XG5cbmltcG9ydCBFeHBvcnRNYXAgZnJvbSAnLic7XG5pbXBvcnQgY2hpbGRDb250ZXh0IGZyb20gJy4vY2hpbGRDb250ZXh0JztcbmltcG9ydCB7IGlzRXNNb2R1bGVJbnRlcm9wIH0gZnJvbSAnLi90eXBlc2NyaXB0JztcbmltcG9ydCB7IFJlbW90ZVBhdGggfSBmcm9tICcuL3JlbW90ZVBhdGgnO1xuaW1wb3J0IEltcG9ydEV4cG9ydFZpc2l0b3JCdWlsZGVyIGZyb20gJy4vdmlzaXRvcic7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdlc2xpbnQtcGx1Z2luLWltcG9ydDpFeHBvcnRNYXAnKTtcblxuY29uc3QgZXhwb3J0Q2FjaGUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogVGhlIGNyZWF0aW9uIG9mIHRoaXMgY2xvc3VyZSBpcyBpc29sYXRlZCBmcm9tIG90aGVyIHNjb3Blc1xuICogdG8gYXZvaWQgb3Zlci1yZXRlbnRpb24gb2YgdW5yZWxhdGVkIHZhcmlhYmxlcywgd2hpY2ggaGFzXG4gKiBjYXVzZWQgbWVtb3J5IGxlYWtzLiBTZWUgIzEyNjYuXG4gKi9cbmZ1bmN0aW9uIHRodW5rRm9yKHAsIGNvbnRleHQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHJldHVybiAoKSA9PiBFeHBvcnRNYXBCdWlsZGVyLmZvcihjaGlsZENvbnRleHQocCwgY29udGV4dCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvcnRNYXBCdWlsZGVyIHtcbiAgc3RhdGljIGdldChzb3VyY2UsIGNvbnRleHQpIHtcbiAgICBjb25zdCBwYXRoID0gcmVzb2x2ZShzb3VyY2UsIGNvbnRleHQpO1xuICAgIGlmIChwYXRoID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgIHJldHVybiBFeHBvcnRNYXBCdWlsZGVyLmZvcihjaGlsZENvbnRleHQocGF0aCwgY29udGV4dCkpO1xuICB9XG5cbiAgc3RhdGljIGZvcihjb250ZXh0KSB7XG4gICAgY29uc3QgeyBwYXRoIH0gPSBjb250ZXh0O1xuXG4gICAgY29uc3QgY2FjaGVLZXkgPSBjb250ZXh0LmNhY2hlS2V5IHx8IGhhc2hPYmplY3QoY29udGV4dCkuZGlnZXN0KCdoZXgnKTtcbiAgICBsZXQgZXhwb3J0TWFwID0gZXhwb3J0Q2FjaGUuZ2V0KGNhY2hlS2V5KTtcblxuICAgIC8vIHJldHVybiBjYWNoZWQgaWdub3JlXG4gICAgaWYgKGV4cG9ydE1hcCA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoKTtcbiAgICBpZiAoZXhwb3J0TWFwICE9IG51bGwpIHtcbiAgICAgIC8vIGRhdGUgZXF1YWxpdHkgY2hlY2tcbiAgICAgIGlmIChleHBvcnRNYXAubXRpbWUgLSBzdGF0cy5tdGltZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0TWFwO1xuICAgICAgfVxuICAgICAgLy8gZnV0dXJlOiBjaGVjayBjb250ZW50IGVxdWFsaXR5P1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHZhbGlkIGV4dGVuc2lvbnMgZmlyc3RcbiAgICBpZiAoIWhhc1ZhbGlkRXh0ZW5zaW9uKHBhdGgsIGNvbnRleHQpKSB7XG4gICAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIGFuZCBjYWNoZSBpZ25vcmVcbiAgICBpZiAoaXNJZ25vcmVkKHBhdGgsIGNvbnRleHQpKSB7XG4gICAgICBsb2coJ2lnbm9yZWQgcGF0aCBkdWUgdG8gaWdub3JlIHNldHRpbmdzOicsIHBhdGgpO1xuICAgICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBudWxsKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuXG4gICAgLy8gY2hlY2sgZm9yIGFuZCBjYWNoZSB1bmFtYmlndW91cyBtb2R1bGVzXG4gICAgaWYgKCF1bmFtYmlndW91cy50ZXN0KGNvbnRlbnQpKSB7XG4gICAgICBsb2coJ2lnbm9yZWQgcGF0aCBkdWUgdG8gdW5hbWJpZ3VvdXMgcmVnZXg6JywgcGF0aCk7XG4gICAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbG9nKCdjYWNoZSBtaXNzJywgY2FjaGVLZXksICdmb3IgcGF0aCcsIHBhdGgpO1xuICAgIGV4cG9ydE1hcCA9IEV4cG9ydE1hcEJ1aWxkZXIucGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG5cbiAgICAvLyBhbWJpZ3VvdXMgbW9kdWxlcyByZXR1cm4gbnVsbFxuICAgIGlmIChleHBvcnRNYXAgPT0gbnVsbCkge1xuICAgICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIGFtYmlndW91cyBwYXJzZTonLCBwYXRoKTtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBleHBvcnRNYXAubXRpbWUgPSBzdGF0cy5tdGltZTtcblxuICAgIC8vIElmIHRoZSB2aXNpdG9yIGtleXMgd2VyZSBub3QgcG9wdWxhdGVkLCB0aGVuIHdlIHNob3VsZG4ndCBzYXZlIGFueXRoaW5nIHRvIHRoZSBjYWNoZSxcbiAgICAvLyBzaW5jZSB0aGUgcGFyc2UgcmVzdWx0cyBtYXkgbm90IGJlIHJlbGlhYmxlLlxuICAgIGlmIChleHBvcnRNYXAudmlzaXRvcktleXMpIHtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgZXhwb3J0TWFwKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydE1hcDtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3QgZXhwb3J0TWFwID0gbmV3IEV4cG9ydE1hcChwYXRoKTtcbiAgICBjb25zdCBpc0VzTW9kdWxlSW50ZXJvcFRydWUgPSBpc0VzTW9kdWxlSW50ZXJvcChjb250ZXh0KTtcblxuICAgIGxldCBhc3Q7XG4gICAgbGV0IHZpc2l0b3JLZXlzO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBwYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KTtcbiAgICAgIGFzdCA9IHJlc3VsdC5hc3Q7XG4gICAgICB2aXNpdG9yS2V5cyA9IHJlc3VsdC52aXNpdG9yS2V5cztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGV4cG9ydE1hcC5lcnJvcnMucHVzaChlcnIpO1xuICAgICAgcmV0dXJuIGV4cG9ydE1hcDsgLy8gY2FuJ3QgY29udGludWVcbiAgICB9XG5cbiAgICBleHBvcnRNYXAudmlzaXRvcktleXMgPSB2aXNpdG9yS2V5cztcblxuICAgIGxldCBoYXNEeW5hbWljSW1wb3J0cyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcmVtb3RlUGF0aFJlc29sdmVyID0gbmV3IFJlbW90ZVBhdGgocGF0aCwgY29udGV4dCk7XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzRHluYW1pY0ltcG9ydChzb3VyY2UpIHtcbiAgICAgIGhhc0R5bmFtaWNJbXBvcnRzID0gdHJ1ZTtcbiAgICAgIGlmIChzb3VyY2UudHlwZSAhPT0gJ0xpdGVyYWwnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgcCA9IHJlbW90ZVBhdGhSZXNvbHZlci5yZXNvbHZlKHNvdXJjZS52YWx1ZSk7XG4gICAgICBpZiAocCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpO1xuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZCgnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyk7XG4gICAgICBjb25zdCBnZXR0ZXIgPSB0aHVua0ZvcihwLCBjb250ZXh0KTtcbiAgICAgIGV4cG9ydE1hcC5pbXBvcnRzLnNldChwLCB7XG4gICAgICAgIGdldHRlcixcbiAgICAgICAgZGVjbGFyYXRpb25zOiBuZXcgU2V0KFt7XG4gICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgLy8gY2FwdHVyaW5nIGFjdHVhbCBub2RlIHJlZmVyZW5jZSBob2xkcyBmdWxsIEFTVCBpbiBtZW1vcnkhXG4gICAgICAgICAgICB2YWx1ZTogc291cmNlLnZhbHVlLFxuICAgICAgICAgICAgbG9jOiBzb3VyY2UubG9jLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICAgICAgICAgIGR5bmFtaWM6IHRydWUsXG4gICAgICAgIH1dKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZpc2l0KGFzdCwgdmlzaXRvcktleXMsIHtcbiAgICAgIEltcG9ydEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBwcm9jZXNzRHluYW1pY0ltcG9ydChub2RlLnNvdXJjZSk7XG4gICAgICB9LFxuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gJ0ltcG9ydCcpIHtcbiAgICAgICAgICBwcm9jZXNzRHluYW1pY0ltcG9ydChub2RlLmFyZ3VtZW50c1swXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmFtYmlndW91c2x5RVNNID0gdW5hbWJpZ3VvdXMuaXNNb2R1bGUoYXN0KTtcbiAgICBpZiAoIXVuYW1iaWd1b3VzbHlFU00gJiYgIWhhc0R5bmFtaWNJbXBvcnRzKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICAvLyBhdHRlbXB0IHRvIGNvbGxlY3QgbW9kdWxlIGRvY1xuICAgIGlmIChhc3QuY29tbWVudHMpIHtcbiAgICAgIGFzdC5jb21tZW50cy5zb21lKChjKSA9PiB7XG4gICAgICAgIGlmIChjLnR5cGUgIT09ICdCbG9jaycpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZG9jID0gZG9jdHJpbmUucGFyc2UoYy52YWx1ZSwgeyB1bndyYXA6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKGRvYy50YWdzLnNvbWUoKHQpID0+IHQudGl0bGUgPT09ICdtb2R1bGUnKSkge1xuICAgICAgICAgICAgZXhwb3J0TWFwLmRvYyA9IGRvYztcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHZpc2l0b3JCdWlsZGVyID0gbmV3IEltcG9ydEV4cG9ydFZpc2l0b3JCdWlsZGVyKFxuICAgICAgcGF0aCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBleHBvcnRNYXAsXG4gICAgICBFeHBvcnRNYXBCdWlsZGVyLFxuICAgICAgY29udGVudCxcbiAgICAgIGFzdCxcbiAgICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSxcbiAgICAgIHRodW5rRm9yLFxuICAgICk7XG4gICAgYXN0LmJvZHkuZm9yRWFjaChmdW5jdGlvbiAoYXN0Tm9kZSkge1xuICAgICAgY29uc3QgdmlzaXRvciA9IHZpc2l0b3JCdWlsZGVyLmJ1aWxkKGFzdE5vZGUpO1xuXG4gICAgICBpZiAodmlzaXRvclthc3ROb2RlLnR5cGVdKSB7XG4gICAgICAgIHZpc2l0b3JbYXN0Tm9kZS50eXBlXS5jYWxsKHZpc2l0b3JCdWlsZGVyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAgICYmIGV4cG9ydE1hcC5uYW1lc3BhY2Uuc2l6ZSA+IDAgLy8gYW55dGhpbmcgaXMgZXhwb3J0ZWRcbiAgICAgICYmICFleHBvcnRNYXAubmFtZXNwYWNlLmhhcygnZGVmYXVsdCcpIC8vIGFuZCBkZWZhdWx0IGlzbid0IGFkZGVkIGFscmVhZHlcbiAgICApIHtcbiAgICAgIGV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0Jywge30pOyAvLyBhZGQgZGVmYXVsdCBleHBvcnRcbiAgICB9XG5cbiAgICBpZiAodW5hbWJpZ3VvdXNseUVTTSkge1xuICAgICAgZXhwb3J0TWFwLnBhcnNlR29hbCA9ICdNb2R1bGUnO1xuICAgIH1cbiAgICByZXR1cm4gZXhwb3J0TWFwO1xuICB9XG59XG4iXX0=
\ No newline at end of file
diff --git a/lib/exportMap/childContext.js b/lib/exportMap/childContext.js
index v2.30.0..v2.31.0 100644
--- a/lib/exportMap/childContext.js
+++ b/lib/exportMap/childContext.js
@@ -10,24 +10,48 @@
 
 
-childContext;var _hash = require('eslint-module-utils/hash');var parserOptionsHash = '';var prevParserOptions = '';var settingsHash = '';var prevSettings = ''; /**
-                                                                                                                                                                 * don't hold full context object in memory, just grab what we need.
-                                                                                                                                                                 * also calculate a cacheKey, where parts of the cacheKey hash are memoized
-                                                                                                                                                                 */function childContext(path, context) {var settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath;if (JSON.stringify(settings) !== prevSettings) {
-    settingsHash = (0, _hash.hashObject)({ settings: settings }).digest('hex');
+
+
+
+
+
+
+
+
+childContext;var _hash = require('eslint-module-utils/hash');var optionsHash = '';var prevOptions = '';var settingsHash = '';var prevSettings = ''; // Replacer function helps us with serializing the parser nested within `languageOptions`.
+function stringifyReplacerFn(_, value) {if (typeof value === 'function') {return String(value);}return value;} /**
+                                                                                                                * don't hold full context object in memory, just grab what we need.
+                                                                                                                * also calculate a cacheKey, where parts of the cacheKey hash are memoized
+                                                                                                                */function childContext(path, context) {var settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath,languageOptions = context.languageOptions;if (JSON.stringify(settings) !== prevSettings) {settingsHash = (0, _hash.hashObject)({ settings: settings }).digest('hex');
     prevSettings = JSON.stringify(settings);
   }
 
-  if (JSON.stringify(parserOptions) !== prevParserOptions) {
\ No newline at end of file
-    parserOptionsHash = (0, _hash.hashObject)({ parserOptions: parserOptions }).digest('hex');
-    prevParserOptions = JSON.stringify(parserOptions);
+  // We'll use either a combination of `parserOptions` and `parserPath` or `languageOptions`
+  // to construct the cache key, depending on whether this is using a flat config or not.
+  var optionsToken = void 0;
+  if (!parserPath && languageOptions) {
+    if (JSON.stringify(languageOptions, stringifyReplacerFn) !== prevOptions) {
+      optionsHash = (0, _hash.hashObject)({ languageOptions: languageOptions }).digest('hex');
+      prevOptions = JSON.stringify(languageOptions, stringifyReplacerFn);
+    }
+    // For languageOptions, we're just using the hashed options as the options token
+    optionsToken = optionsHash;
+  } else {
+    if (JSON.stringify(parserOptions) !== prevOptions) {
+      optionsHash = (0, _hash.hashObject)({ parserOptions: parserOptions }).digest('hex');
+      prevOptions = JSON.stringify(parserOptions);
+    }
+    // When not using flat config, we use a combination of the hashed parserOptions
+    // and parserPath as the token
+    optionsToken = String(parserPath) + optionsHash;
   }
 
   return {
-    cacheKey: String(parserPath) + parserOptionsHash + settingsHash + String(path),
+    cacheKey: optionsToken + settingsHash + String(path),
     settings: settings,
     parserOptions: parserOptions,
     parserPath: parserPath,
-    path: path };
+    path: path,
+    languageOptions: languageOptions };
 
 }
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvY2hpbGRDb250ZXh0LmpzIl0sIm5hbWVzIjpbImNoaWxkQ29udGV4dCIsInBhcnNlck9wdGlvbnNIYXNoIiwicHJldlBhcnNlck9wdGlvbnMiLCJzZXR0aW5nc0hhc2giLCJwcmV2U2V0dGluZ3MiLCJwYXRoIiwiY29udGV4dCIsInNldHRpbmdzIiwicGFyc2VyT3B0aW9ucyIsInBhcnNlclBhdGgiLCJKU09OIiwic3RyaW5naWZ5IiwiZGlnZXN0IiwiY2FjaGVLZXkiLCJTdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBV3dCQSxZLENBWHhCLGdEQUVBLElBQUlDLG9CQUFvQixFQUF4QixDQUNBLElBQUlDLG9CQUFvQixFQUF4QixDQUNBLElBQUlDLGVBQWUsRUFBbkIsQ0FDQSxJQUFJQyxlQUFlLEVBQW5CLEMsQ0FFQTs7O21LQUllLFNBQVNKLFlBQVQsQ0FBc0JLLElBQXRCLEVBQTRCQyxPQUE1QixFQUFxQyxLQUMxQ0MsUUFEMEMsR0FDRkQsT0FERSxDQUMxQ0MsUUFEMEMsQ0FDaENDLGFBRGdDLEdBQ0ZGLE9BREUsQ0FDaENFLGFBRGdDLENBQ2pCQyxVQURpQixHQUNGSCxPQURFLENBQ2pCRyxVQURpQixDQUdsRCxJQUFJQyxLQUFLQyxTQUFMLENBQWVKLFFBQWYsTUFBNkJILFlBQWpDLEVBQStDO0FBQzdDRCxtQkFBZSxzQkFBVyxFQUFFSSxrQkFBRixFQUFYLEVBQXlCSyxNQUF6QixDQUFnQyxLQUFoQyxDQUFmO0FBQ0FSLG1CQUFlTSxLQUFLQyxTQUFMLENBQWVKLFFBQWYsQ0FBZjtBQUNEOztBQUVELE1BQUlHLEtBQUtDLFNBQUwsQ0FBZUgsYUFBZixNQUFrQ04saUJBQXRDLEVBQXlEO0FBQ3ZERCx3QkFBb0Isc0JBQVcsRUFBRU8sNEJBQUYsRUFBWCxFQUE4QkksTUFBOUIsQ0FBcUMsS0FBckMsQ0FBcEI7QUFDQVYsd0JBQW9CUSxLQUFLQyxTQUFMLENBQWVILGFBQWYsQ0FBcEI7QUFDRDs7QUFFRCxTQUFPO0FBQ0xLLGNBQVVDLE9BQU9MLFVBQVAsSUFBcUJSLGlCQUFyQixHQUF5Q0UsWUFBekMsR0FBd0RXLE9BQU9ULElBQVAsQ0FEN0Q7QUFFTEUsc0JBRks7QUFHTEMsZ0NBSEs7QUFJTEMsMEJBSks7QUFLTEosY0FMSyxFQUFQOztBQU9EIiwiZmlsZSI6ImNoaWxkQ29udGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuXG5sZXQgcGFyc2VyT3B0aW9uc0hhc2ggPSAnJztcbmxldCBwcmV2UGFyc2VyT3B0aW9ucyA9ICcnO1xubGV0IHNldHRpbmdzSGFzaCA9ICcnO1xubGV0IHByZXZTZXR0aW5ncyA9ICcnO1xuXG4vKipcbiAqIGRvbid0IGhvbGQgZnVsbCBjb250ZXh0IG9iamVjdCBpbiBtZW1vcnksIGp1c3QgZ3JhYiB3aGF0IHdlIG5lZWQuXG4gKiBhbHNvIGNhbGN1bGF0ZSBhIGNhY2hlS2V5LCB3aGVyZSBwYXJ0cyBvZiB0aGUgY2FjaGVLZXkgaGFzaCBhcmUgbWVtb2l6ZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzZXR0aW5ncywgcGFyc2VyT3B0aW9ucywgcGFyc2VyUGF0aCB9ID0gY29udGV4dDtcblxuICBpZiAoSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MpICE9PSBwcmV2U2V0dGluZ3MpIHtcbiAgICBzZXR0aW5nc0hhc2ggPSBoYXNoT2JqZWN0KHsgc2V0dGluZ3MgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBwcmV2U2V0dGluZ3MgPSBKU09OLnN0cmluZ2lmeShzZXR0aW5ncyk7XG4gIH1cblxuICBpZiAoSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucykgIT09IHByZXZQYXJzZXJPcHRpb25zKSB7XG4gICAgcGFyc2VyT3B0aW9uc0hhc2ggPSBoYXNoT2JqZWN0KHsgcGFyc2VyT3B0aW9ucyB9KS5kaWdlc3QoJ2hleCcpO1xuICAgIHByZXZQYXJzZXJPcHRpb25zID0gSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNhY2hlS2V5OiBTdHJpbmcocGFyc2VyUGF0aCkgKyBwYXJzZXJPcHRpb25zSGFzaCArIHNldHRpbmdzSGFzaCArIFN0cmluZyhwYXRoKSxcbiAgICBzZXR0aW5ncyxcbiAgICBwYXJzZXJPcHRpb25zLFxuICAgIHBhcnNlclBhdGgsXG4gICAgcGF0aCxcbiAgfTtcbn1cbiJdfQ==
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvY2hpbGRDb250ZXh0LmpzIl0sIm5hbWVzIjpbImNoaWxkQ29udGV4dCIsIm9wdGlvbnNIYXNoIiwicHJldk9wdGlvbnMiLCJzZXR0aW5nc0hhc2giLCJwcmV2U2V0dGluZ3MiLCJzdHJpbmdpZnlSZXBsYWNlckZuIiwiXyIsInZhbHVlIiwiU3RyaW5nIiwicGF0aCIsImNvbnRleHQiLCJzZXR0aW5ncyIsInBhcnNlck9wdGlvbnMiLCJwYXJzZXJQYXRoIiwibGFuZ3VhZ2VPcHRpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsImRpZ2VzdCIsIm9wdGlvbnNUb2tlbiIsImNhY2hlS2V5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJ3QkEsWSxDQW5CeEIsZ0RBRUEsSUFBSUMsY0FBYyxFQUFsQixDQUNBLElBQUlDLGNBQWMsRUFBbEIsQ0FDQSxJQUFJQyxlQUFlLEVBQW5CLENBQ0EsSUFBSUMsZUFBZSxFQUFuQixDLENBRUE7QUFDQSxTQUFTQyxtQkFBVCxDQUE2QkMsQ0FBN0IsRUFBZ0NDLEtBQWhDLEVBQXVDLENBQ3JDLElBQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQyxDQUMvQixPQUFPQyxPQUFPRCxLQUFQLENBQVAsQ0FDRCxDQUNELE9BQU9BLEtBQVAsQ0FDRCxDLENBRUQ7OztrSEFJZSxTQUFTUCxZQUFULENBQXNCUyxJQUF0QixFQUE0QkMsT0FBNUIsRUFBcUMsS0FDMUNDLFFBRDBDLEdBQ2VELE9BRGYsQ0FDMUNDLFFBRDBDLENBQ2hDQyxhQURnQyxHQUNlRixPQURmLENBQ2hDRSxhQURnQyxDQUNqQkMsVUFEaUIsR0FDZUgsT0FEZixDQUNqQkcsVUFEaUIsQ0FDTEMsZUFESyxHQUNlSixPQURmLENBQ0xJLGVBREssQ0FHbEQsSUFBSUMsS0FBS0MsU0FBTCxDQUFlTCxRQUFmLE1BQTZCUCxZQUFqQyxFQUErQyxDQUM3Q0QsZUFBZSxzQkFBVyxFQUFFUSxrQkFBRixFQUFYLEVBQXlCTSxNQUF6QixDQUFnQyxLQUFoQyxDQUFmO0FBQ0FiLG1CQUFlVyxLQUFLQyxTQUFMLENBQWVMLFFBQWYsQ0FBZjtBQUNEOztBQUVEO0FBQ0E7QUFDQSxNQUFJTyxxQkFBSjtBQUNBLE1BQUksQ0FBQ0wsVUFBRCxJQUFlQyxlQUFuQixFQUFvQztBQUNsQyxRQUFJQyxLQUFLQyxTQUFMLENBQWVGLGVBQWYsRUFBZ0NULG1CQUFoQyxNQUF5REgsV0FBN0QsRUFBMEU7QUFDeEVELG9CQUFjLHNCQUFXLEVBQUVhLGdDQUFGLEVBQVgsRUFBZ0NHLE1BQWhDLENBQXVDLEtBQXZDLENBQWQ7QUFDQWYsb0JBQWNhLEtBQUtDLFNBQUwsQ0FBZUYsZUFBZixFQUFnQ1QsbUJBQWhDLENBQWQ7QUFDRDtBQUNEO0FBQ0FhLG1CQUFlakIsV0FBZjtBQUNELEdBUEQsTUFPTztBQUNMLFFBQUljLEtBQUtDLFNBQUwsQ0FBZUosYUFBZixNQUFrQ1YsV0FBdEMsRUFBbUQ7QUFDakRELG9CQUFjLHNCQUFXLEVBQUVXLDRCQUFGLEVBQVgsRUFBOEJLLE1BQTlCLENBQXFDLEtBQXJDLENBQWQ7QUFDQWYsb0JBQWNhLEtBQUtDLFNBQUwsQ0FBZUosYUFBZixDQUFkO0FBQ0Q7QUFDRDtBQUNBO0FBQ0FNLG1CQUFlVixPQUFPSyxVQUFQLElBQXFCWixXQUFwQztBQUNEOztBQUVELFNBQU87QUFDTGtCLGNBQVVELGVBQWVmLFlBQWYsR0FBOEJLLE9BQU9DLElBQVAsQ0FEbkM7QUFFTEUsc0JBRks7QUFHTEMsZ0NBSEs7QUFJTEMsMEJBSks7QUFLTEosY0FMSztBQU1MSyxvQ0FOSyxFQUFQOztBQVFEIiwiZmlsZSI6ImNoaWxkQ29udGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuXG5sZXQgb3B0aW9uc0hhc2ggPSAnJztcbmxldCBwcmV2T3B0aW9ucyA9ICcnO1xubGV0IHNldHRpbmdzSGFzaCA9ICcnO1xubGV0IHByZXZTZXR0aW5ncyA9ICcnO1xuXG4vLyBSZXBsYWNlciBmdW5jdGlvbiBoZWxwcyB1cyB3aXRoIHNlcmlhbGl6aW5nIHRoZSBwYXJzZXIgbmVzdGVkIHdpdGhpbiBgbGFuZ3VhZ2VPcHRpb25zYC5cbmZ1bmN0aW9uIHN0cmluZ2lmeVJlcGxhY2VyRm4oXywgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBkb24ndCBob2xkIGZ1bGwgY29udGV4dCBvYmplY3QgaW4gbWVtb3J5LCBqdXN0IGdyYWIgd2hhdCB3ZSBuZWVkLlxuICogYWxzbyBjYWxjdWxhdGUgYSBjYWNoZUtleSwgd2hlcmUgcGFydHMgb2YgdGhlIGNhY2hlS2V5IGhhc2ggYXJlIG1lbW9pemVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNoaWxkQ29udGV4dChwYXRoLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgc2V0dGluZ3MsIHBhcnNlck9wdGlvbnMsIHBhcnNlclBhdGgsIGxhbmd1YWdlT3B0aW9ucyB9ID0gY29udGV4dDtcblxuICBpZiAoSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MpICE9PSBwcmV2U2V0dGluZ3MpIHtcbiAgICBzZXR0aW5nc0hhc2ggPSBoYXNoT2JqZWN0KHsgc2V0dGluZ3MgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBwcmV2U2V0dGluZ3MgPSBKU09OLnN0cmluZ2lmeShzZXR0aW5ncyk7XG4gIH1cblxuICAvLyBXZSdsbCB1c2UgZWl0aGVyIGEgY29tYmluYXRpb24gb2YgYHBhcnNlck9wdGlvbnNgIGFuZCBgcGFyc2VyUGF0aGAgb3IgYGxhbmd1YWdlT3B0aW9uc2BcbiAgLy8gdG8gY29uc3RydWN0IHRoZSBjYWNoZSBrZXksIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgdXNpbmcgYSBmbGF0IGNvbmZpZyBvciBub3QuXG4gIGxldCBvcHRpb25zVG9rZW47XG4gIGlmICghcGFyc2VyUGF0aCAmJiBsYW5ndWFnZU9wdGlvbnMpIHtcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkobGFuZ3VhZ2VPcHRpb25zLCBzdHJpbmdpZnlSZXBsYWNlckZuKSAhPT0gcHJldk9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnNIYXNoID0gaGFzaE9iamVjdCh7IGxhbmd1YWdlT3B0aW9ucyB9KS5kaWdlc3QoJ2hleCcpO1xuICAgICAgcHJldk9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeShsYW5ndWFnZU9wdGlvbnMsIHN0cmluZ2lmeVJlcGxhY2VyRm4pO1xuICAgIH1cbiAgICAvLyBGb3IgbGFuZ3VhZ2VPcHRpb25zLCB3ZSdyZSBqdXN0IHVzaW5nIHRoZSBoYXNoZWQgb3B0aW9ucyBhcyB0aGUgb3B0aW9ucyB0b2tlblxuICAgIG9wdGlvbnNUb2tlbiA9IG9wdGlvbnNIYXNoO1xuICB9IGVsc2Uge1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShwYXJzZXJPcHRpb25zKSAhPT0gcHJldk9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnNIYXNoID0gaGFzaE9iamVjdCh7IHBhcnNlck9wdGlvbnMgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICAgIHByZXZPcHRpb25zID0gSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIFdoZW4gbm90IHVzaW5nIGZsYXQgY29uZmlnLCB3ZSB1c2UgYSBjb21iaW5hdGlvbiBvZiB0aGUgaGFzaGVkIHBhcnNlck9wdGlvbnNcbiAgICAvLyBhbmQgcGFyc2VyUGF0aCBhcyB0aGUgdG9rZW5cbiAgICBvcHRpb25zVG9rZW4gPSBTdHJpbmcocGFyc2VyUGF0aCkgKyBvcHRpb25zSGFzaDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FjaGVLZXk6IG9wdGlvbnNUb2tlbiArIHNldHRpbmdzSGFzaCArIFN0cmluZyhwYXRoKSxcbiAgICBzZXR0aW5ncyxcbiAgICBwYXJzZXJPcHRpb25zLFxuICAgIHBhcnNlclBhdGgsXG4gICAgcGF0aCxcbiAgICBsYW5ndWFnZU9wdGlvbnMsXG4gIH07XG59XG4iXX0=
\ No newline at end of file
diff --git a/lib/rules/consistent-type-specifier-style.js b/lib/rules/consistent-type-specifier-style.js
index v2.30.0..v2.31.0 100644
--- a/lib/rules/consistent-type-specifier-style.js
+++ b/lib/rules/consistent-type-specifier-style.js
@@ -1,8 +1,16 @@
-'use strict';var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
+'use strict';var _contextCompat = require('eslint-module-utils/contextCompat');
 
+var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
+
 function isComma(token) {
   return token.type === 'Punctuator' && token.value === ',';
 }
 
+/**
+   * @param {import('eslint').Rule.Fix[]} fixes
+   * @param {import('eslint').Rule.RuleFixer} fixer
+   * @param {import('eslint').SourceCode.SourceCode} sourceCode
+   * @param {(ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier)[]} specifiers
+   * */
 function removeSpecifiers(fixes, fixer, sourceCode, specifiers) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {
     for (var _iterator = specifiers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var specifier = _step.value;
@@ -16,4 +24,5 @@
 }
 
+/** @type {(node: import('estree').Node, sourceCode: import('eslint').SourceCode.SourceCode, specifiers: (ImportSpecifier | ImportNamespaceSpecifier)[], kind: 'type' | 'typeof') => string} */
 function getImportText(
 node,
@@ -37,4 +46,5 @@
 }
 
+/** @type {import('eslint').Rule.RuleModule} */
 module.exports = {
   meta: {
@@ -56,5 +66,5 @@
 
   create: function () {function create(context) {
-      var sourceCode = context.getSourceCode();
+      var sourceCode = (0, _contextCompat.getSourceCode)(context);
 
       if (context.options[0] === 'prefer-inline') {
@@ -101,4 +111,5 @@
       // prefer-top-level
       return {
+        /** @param {import('estree').ImportDeclaration} node */
         ImportDeclaration: function () {function ImportDeclaration(node) {
             if (
@@ -119,7 +130,11 @@
             }
 
+            /** @type {typeof node.specifiers} */
             var typeSpecifiers = [];
+            /** @type {typeof node.specifiers} */
             var typeofSpecifiers = [];
+            /** @type {typeof node.specifiers} */
             var valueSpecifiers = [];
+            /** @type {typeof node.specifiers[number]} */
             var defaultSpecifier = null;var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {
               for (var _iterator2 = node.specifiers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var specifier = _step2.value;
@@ -143,4 +158,5 @@
 
             if (typeSpecifiers.length + typeofSpecifiers.length === node.specifiers.length) {
+              /** @type {('type' | 'typeof')[]} */
               // all specifiers have inline specifiers - so we replace the entire import
               var kind = [].concat(
@@ -161,61 +177,62 @@
             } else {
               // remove specific specifiers and insert new imports for them
-              var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try {for (var _iterator3 = typeSpecifiers.concat(typeofSpecifiers)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var _specifier = _step3.value;
-                  context.report({
-                    node: _specifier,
-                    message: 'Prefer using a top-level {{kind}}-only import instead of inline {{kind}} specifiers.',
-                    data: {
-                      kind: _specifier.importKind },
+              typeSpecifiers.concat(typeofSpecifiers).forEach(function (specifier) {
+                context.report({
+                  node: specifier,
+                  message: 'Prefer using a top-level {{kind}}-only import instead of inline {{kind}} specifiers.',
+                  data: {
+                    kind: specifier.importKind },
 
-                    fix: function () {function fix(fixer) {
-                        var fixes = [];
+                  fix: function () {function fix(fixer) {
+                      /** @type {import('eslint').Rule.Fix[]} */
+                      var fixes = [];
 
-                        // if there are no value specifiers, then the other report fixer will be called, not this one
+                      // if there are no value specifiers, then the other report fixer will be called, not this one
 
-                        if (valueSpecifiers.length > 0) {
-                          // import { Value, type Type } from 'mod';
+                      if (valueSpecifiers.length > 0) {
+                        // import { Value, type Type } from 'mod';
 
-                          // we can just remove the type specifiers
-                          removeSpecifiers(fixes, fixer, sourceCode, typeSpecifiers);
-                          removeSpecifiers(fixes, fixer, sourceCode, typeofSpecifiers);
+                        // we can just remove the type specifiers
+                        removeSpecifiers(fixes, fixer, sourceCode, typeSpecifiers);
+                        removeSpecifiers(fixes, fixer, sourceCode, typeofSpecifiers);
 
-                          // make the import nicely formatted by also removing the trailing comma after the last value import
-                          // eg
-                          // import { Value, type Type } from 'mod';
-                          // to
-                          // import { Value  } from 'mod';
-                          // not
-                          // import { Value,  } from 'mod';
-                          var maybeComma = sourceCode.getTokenAfter(valueSpecifiers[valueSpecifiers.length - 1]);
-                          if (isComma(maybeComma)) {
-                            fixes.push(fixer.remove(maybeComma));
-                          }
-                        } else if (defaultSpecifier) {
-                          // import Default, { type Type } from 'mod';
+                        // make the import nicely formatted by also removing the trailing comma after the last value import
+                        // eg
+                        // import { Value, type Type } from 'mod';
+                        // to
+                        // import { Value  } from 'mod';
+                        // not
+                        // import { Value,  } from 'mod';
+                        var maybeComma = sourceCode.getTokenAfter(valueSpecifiers[valueSpecifiers.length - 1]);
+                        if (isComma(maybeComma)) {
+                          fixes.push(fixer.remove(maybeComma));
+                        }
+                      } else if (defaultSpecifier) {
\ No newline at end of file
+                        // import Default, { type Type } from 'mod';
 
-                          // remove the entire curly block so we don't leave an empty one behind
-                          // NOTE - the default specifier *must* be the first specifier always!
-                          //        so a comma exists that we also have to clean up or else it's bad syntax
-                          var comma = sourceCode.getTokenAfter(defaultSpecifier, isComma);
-                          var closingBrace = sourceCode.getTokenAfter(
-                          node.specifiers[node.specifiers.length - 1],
-                          function (token) {return token.type === 'Punctuator' && token.value === '}';});
+                        // remove the entire curly block so we don't leave an empty one behind
+                        // NOTE - the default specifier *must* be the first specifier always!
+                        //        so a comma exists that we also have to clean up or else it's bad syntax
+                        var comma = sourceCode.getTokenAfter(defaultSpecifier, isComma);
+                        var closingBrace = sourceCode.getTokenAfter(
+                        node.specifiers[node.specifiers.length - 1],
+                        function (token) {return token.type === 'Punctuator' && token.value === '}';});
 
-                          fixes.push(fixer.removeRange([
-                          comma.range[0],
-                          closingBrace.range[1]]));
+                        fixes.push(fixer.removeRange([
+                        comma.range[0],
+                        closingBrace.range[1]]));
 
-                        }
+                      }
 
-                        return fixes.concat(
-                        // insert the new imports after the old declaration
-                        fixer.insertTextAfter(node, '\n' + String(newImports)));
+                      return fixes.concat(
+                      // insert the new imports after the old declaration
+                      fixer.insertTextAfter(node, '\n' + String(newImports)));
 
-                      }return fix;}() });
+                    }return fix;}() });
 
-                }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}}
+              });
             }
           }return ImportDeclaration;}() };
 
     }return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9jb25zaXN0ZW50LXR5cGUtc3BlY2lmaWVyLXN0eWxlLmpzIl0sIm5hbWVzIjpbImlzQ29tbWEiLCJ0b2tlbiIsInR5cGUiLCJ2YWx1ZSIsInJlbW92ZVNwZWNpZmllcnMiLCJmaXhlcyIsImZpeGVyIiwic291cmNlQ29kZSIsInNwZWNpZmllcnMiLCJzcGVjaWZpZXIiLCJnZXRUb2tlbkFmdGVyIiwicHVzaCIsInJlbW92ZSIsImdldEltcG9ydFRleHQiLCJub2RlIiwia2luZCIsInNvdXJjZVN0cmluZyIsImdldFRleHQiLCJzb3VyY2UiLCJsZW5ndGgiLCJuYW1lcyIsIm1hcCIsInMiLCJpbXBvcnRlZCIsIm5hbWUiLCJsb2NhbCIsImpvaW4iLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJnZXRTb3VyY2VDb2RlIiwib3B0aW9ucyIsIkltcG9ydERlY2xhcmF0aW9uIiwiaW1wb3J0S2luZCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJkYXRhIiwiZml4Iiwia2luZFRva2VuIiwiZ2V0Rmlyc3RUb2tlbiIsInNraXAiLCJjb25jYXQiLCJpbnNlcnRUZXh0QmVmb3JlIiwidHlwZVNwZWNpZmllcnMiLCJ0eXBlb2ZTcGVjaWZpZXJzIiwidmFsdWVTcGVjaWZpZXJzIiwiZGVmYXVsdFNwZWNpZmllciIsInR5cGVJbXBvcnQiLCJ0eXBlb2ZJbXBvcnQiLCJuZXdJbXBvcnRzIiwidHJpbSIsInJlcGxhY2VUZXh0IiwibWF5YmVDb21tYSIsImNvbW1hIiwiY2xvc2luZ0JyYWNlIiwicmVtb3ZlUmFuZ2UiLCJyYW5nZSIsImluc2VydFRleHRBZnRlciJdLCJtYXBwaW5ncyI6ImFBQUEscUM7O0FBRUEsU0FBU0EsT0FBVCxDQUFpQkMsS0FBakIsRUFBd0I7QUFDdEIsU0FBT0EsTUFBTUMsSUFBTixLQUFl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LENBQXpDLENBRG1CO0FBRW5CLG9DQUFDbEIsS0FBRCxVQUFXQSxNQUFNQyxJQUFOLEtBQWUsWUFBZixJQUErQkQsTUFBTUUsS0FBTixLQUFnQixHQUExRCxFQUZtQixDQUFyQjs7QUFJQUUsZ0NBQU1NLElBQU4sQ0FBV0wsTUFBTXlELFdBQU4sQ0FBa0I7QUFDM0JGLGdDQUFNRyxLQUFOLENBQVksQ0FBWixDQUQyQjtBQUUzQkYsdUNBQWFFLEtBQWIsQ0FBbUIsQ0FBbkIsQ0FGMkIsQ0FBbEIsQ0FBWDs7QUFJRDs7QUFFRCwrQkFBTzNELE1BQU00QyxNQUFOO0FBQ0w7QUFDQTNDLDhCQUFNMkQsZUFBTixDQUFzQm5ELElBQXRCLGdCQUFpQzJDLFVBQWpDLEVBRkssQ0FBUDs7QUFJRCx1QkFsRFksZ0JBQWY7O0FBb0RELGlCQXZESTtBQXdETjtBQUNGLFdBcEhJLDhCQUFQOztBQXNIRCxLQXJMYyxtQkFBakIiLCJmaWxlIjoiY29uc2lzdGVudC10eXBlLXNwZWNpZmllci1zdHlsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBpc0NvbW1hKHRva2VuKSB7XG4gIHJldHVybiB0b2tlbi50eXBlID09PSAnUHVuY3R1YXRvcicgJiYgdG9rZW4udmFsdWUgPT09ICcsJztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3BlY2lmaWVycyhmaXhlcywgZml4ZXIsIHNvdXJjZUNvZGUsIHNwZWNpZmllcnMpIHtcbiAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2Ygc3BlY2lmaWVycykge1xuICAgIC8vIHJlbW92ZSB0aGUgdHJhaWxpbmcgY29tbWFcbiAgICBjb25zdCB0b2tlbiA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5BZnRlcihzcGVjaWZpZXIpO1xuICAgIGlmICh0b2tlbiAmJiBpc0NvbW1hKHRva2VuKSkge1xuICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmUodG9rZW4pKTtcbiAgICB9XG4gICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmUoc3BlY2lmaWVyKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW1wb3J0VGV4dChcbiAgbm9kZSxcbiAgc291cmNlQ29kZSxcbiAgc3BlY2lmaWVycyxcbiAga2luZCxcbikge1xuICBjb25zdCBzb3VyY2VTdHJpbmcgPSBzb3VyY2VDb2RlLmdldFRleHQobm9kZS5zb3VyY2UpO1xuICBpZiAoc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBuYW1lcyA9IHNwZWNpZmllcnMubWFwKChzKSA9PiB7XG4gICAgaWYgKHMuaW1wb3J0ZWQubmFtZSA9PT0gcy5sb2NhbC5uYW1lKSB7XG4gICAgICByZXR1cm4gcy5pbXBvcnRlZC5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gYCR7cy5pbXBvcnRlZC5uYW1lfSBhcyAke3MubG9jYWwubmFtZX1gO1xuICB9KTtcbiAgLy8gaW5zZXJ0IGEgZnJlc2ggdG9wLWxldmVsIGltcG9ydFxuICByZXR1cm4gYGltcG9ydCAke2tpbmR9IHske25hbWVzLmpvaW4oJywgJyl9fSBmcm9tICR7c291cmNlU3RyaW5nfTtgO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5mb3JjZSBvciBiYW4gdGhlIHVzZSBvZiBpbmxpbmUgdHlwZS1vbmx5IG1hcmtlcnMgZm9yIG5hbWVkIGltcG9ydHMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnY29uc2lzdGVudC10eXBlLXNwZWNpZmllci1zdHlsZScpLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZW51bTogWydwcmVmZXItaW5saW5lJywgJ3ByZWZlci10b3AtbGV2ZWwnXSxcbiAgICAgICAgZGVmYXVsdDogJ3ByZWZlci1pbmxpbmUnLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuXG4gICAgaWYgKGNvbnRleHQub3B0aW9uc1swXSA9PT0gJ3ByZWZlci1pbmxpbmUnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgICAgaWYgKG5vZGUuaW1wb3J0S2luZCA9PT0gJ3ZhbHVlJyB8fCBub2RlLmltcG9ydEtpbmQgPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gdG9wLWxldmVsIHZhbHVlIC8gdW5rbm93biBpcyB2YWxpZFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIG5vIHNwZWNpZmllcnMgKGltcG9ydCB0eXBlIHt9IGZyb20gJycpIGhhdmUgbm8gc3BlY2lmaWVycyB0byBtYXJrIGFzIGlubGluZVxuICAgICAgICAgICAgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgfHwgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgLy8gZGVmYXVsdCBpbXBvcnRzIGFyZSBib3RoIFwiaW5saW5lXCIgYW5kIFwidG9wLWxldmVsXCJcbiAgICAgICAgICAgICYmIChcbiAgICAgICAgICAgICAgbm9kZS5zcGVjaWZpZXJzWzBdLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJ1xuICAgICAgICAgICAgICAvLyBuYW1lc3BhY2UgaW1wb3J0cyBhcmUgYm90aCBcImlubGluZVwiIGFuZCBcInRvcC1sZXZlbFwiXG4gICAgICAgICAgICAgIHx8IG5vZGUuc3BlY2lmaWVyc1swXS50eXBlID09PSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnUHJlZmVyIHVzaW5nIGlubGluZSB7e2tpbmR9fSBzcGVjaWZpZXJzIGluc3RlYWQgb2YgYSB0b3AtbGV2ZWwge3traW5kfX0tb25seSBpbXBvcnQuJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAga2luZDogbm9kZS5pbXBvcnRLaW5kLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpeChmaXhlcikge1xuICAgICAgICAgICAgICBjb25zdCBraW5kVG9rZW4gPSBzb3VyY2VDb2RlLmdldEZpcnN0VG9rZW4obm9kZSwgeyBza2lwOiAxIH0pO1xuXG4gICAgICAgICAgICAgIHJldHVybiBbXS5jb25jYXQoXG4gICAgICAgICAgICAgICAga2luZFRva2VuID8gZml4ZXIucmVtb3ZlKGtpbmRUb2tlbikgOiBbXSxcbiAgICAgICAgICAgICAgICBub2RlLnNwZWNpZmllcnMubWFwKChzcGVjaWZpZXIpID0+IGZpeGVyLmluc2VydFRleHRCZWZvcmUoc3BlY2lmaWVyLCBgJHtub2RlLmltcG9ydEtpbmR9IGApKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHByZWZlci10b3AtbGV2ZWxcbiAgICByZXR1cm4

(too long so truncated)

Size Files
1.2 MB → 1.3 MB (+59.7 KB 🟡) 129 → 130 (+1 🟡)
Command details
npm diff --diff=eslint-plugin-import@2.30.0 --diff=eslint-plugin-import@2.31.0 --diff-unified=2

See also the npm diff document.

Reported by ybiquitous/npm-diff-action@v1.6.0 (Node.js 22.11.0 and npm 10.9.0)

@dependabot dependabot bot force-pushed the dependabot/npm_and_yarn/eslint-plugin-import-2.31.0 branch from 8cb3346 to 14813c6 Compare November 1, 2024 03:07
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.30.0 to 2.31.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](import-js/eslint-plugin-import@v2.30.0...v2.31.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot force-pushed the dependabot/npm_and_yarn/eslint-plugin-import-2.31.0 branch from 14813c6 to c3c2891 Compare November 1, 2024 03:08
@github-actions github-actions bot merged commit f553d28 into main Nov 1, 2024
6 checks passed
@github-actions github-actions bot deleted the dependabot/npm_and_yarn/eslint-plugin-import-2.31.0 branch November 1, 2024 03:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants