Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork1.5k
[Fix] Revert breaking group change inorder#2854
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
1fa2971 changed the way groups work when there is only one, leadingto single nested groups being treated as though they were unnested.Prior to this, if you wanted to group e.g. builtin and externalimports together at the top and everything else together as a secondgroup, a single nested group was the way to do it[It appears that this change was unintentional][1], and was made totry to fix what seems to be a misunderstanding around nested groups([#2687]). [The docs][2] continue to suggest that nested groupsshould be "mingled together" and makes no reference to a single nestedgroup with no other groups being an invalid optionThis therefore reverts the change to how groups work when there isonly one. No documentation change should be necessary given this isalready the described behaviour[1]:#2687 (comment)[2]:https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md#groups-array
ljharb commentedAug 9, 2023
To be clear, I think order should matter in nested groups, but that would be a breaking change, so this PR is the right approach. |
Uh oh!
There was an error while loading.Please reload this page.
yndajas commentedAug 11, 2023
@ljharb any idea why this fails in one (or more) environments? Is this a common issue unrelated to this PR? |
ljharb commentedAug 17, 2023
@yndajas the windows failures are expected; the node failure was a fluke, and I've rerun it. |
Uh oh!
There was an error while loading.Please reload this page.
ljharb commentedAug 17, 2023
I'll land this once we get more travis-ci credits. |
jraoult commentedAug 27, 2023 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
I've been holding of any upgrade since The following configuration: "import/order":["error",{alphabetize:{order:"asc",caseInsensitive:true,},groups:[["external","builtin"],["parent","sibling"],],"newlines-between":"always",},], pre 2.27 was passing for: import{parent}from"../a.js";import{sibling}from"./a.js"; but from 2.27 (including import{sibling}from"./a.js";import{parent}from"../a.js"; I understand that the nested group order is "unspecified" in the doc but it is still a change of behaviour from |
yndajas commentedAug 27, 2023 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@jraoult are you expecting the former based on |
jraoult commentedAug 27, 2023
@yndajas I'd expect the nested group to follow the order of the array. So if the nested group conf is So at minima, I'd expect the order to not change in a minor version. Meaning that So my real question is: should I consider this new way of sorting the nested groups a feature, in which case I'll update my code base to match it, or a bug in which case I'll wait until it is fixed. |
yndajas commentedAug 27, 2023
@jraoult so in * the way I got around this in This is probably one for@ljharb in any case! |
jraoult commentedAug 27, 2023
@yndajas I don't have any particular opinion on the order TBH. I just expect the import order to stay the same from minor version to minor version so my CI doesn't break. If it is decided that this new way of ordering is stable and the way forward I'm happy to do a one off run on the codebase and call it a day but my gut feeling is that it should have been a major version then 🤷♂️ |
ljharb commentedAug 27, 2023
Indeed it's a breaking change if the semantics of nested or unnested groups changed within v2. It sounds like there's still a bit of regression left; i'd like anything that passed in v2.26 to pass in v2.28 (with the same options, of course).@yndajas got another PR in you? :-D |
yndajas commentedAug 27, 2023
Happy to work on a fix if one is needed, but I'm still a little unclear on what the difference between Based on release dates I've probably only used I can take a look next week to see if Re: within-group ordering, can you not de-nest the group? If order within nested groups matters, what's the use of nested groups? Surely the whole purpose of nesting is to identify a group of the same rank? E.g. if you want type C imports before type D imports, instead of: could you not just write this? |
2.28.0 introduced a breaking change where the order of nested groups(whose purpose is to define different types of imports that are ofequivalent rank) started to matter: a single nested group would betreated as though it wasn't nestedWe got around this by adding a second nested group with most if not allof the other import types we useI [fixed the bug][1] in eslint-plugin-import 💅🏻 and this was released in2.28.1, so we can now revert to the simpler config post-upgrade[1]:import-js/eslint-plugin-import#2854
2.28.0 introduced a breaking change where the order of nested groups(whose purpose is to define different types of imports that are ofequivalent rank) started to matter: a single nested group would betreated as though it wasn't nestedWe [got around this][1] by adding a second nested group with most ifnot all of the other import types we useI [fixed the bug][2] in eslint-plugin-import 💅🏻 and this was released in2.28.1, so we can now revert to the simpler config post-upgrade[1]:ab5a73e[2]:import-js/eslint-plugin-import#2854
2.28.0 introduced a breaking change to `import/order` where the orderof nested groups (whose purpose is to define different types of importsthat are of equivalent rank) started to matter: a single nested groupwould be treated as though it wasn't nestedWe [got around this][1] by adding a second nested group with most ifnot all of the other import types we useI [fixed the bug][2] in eslint-plugin-import 💅🏻 and this was released in2.28.1, so we can now revert to the simpler config post-upgrade[1]:ab5a73e[2]:import-js/eslint-plugin-import#2854
2.28.0 introduced a breaking change to `import/order` where the orderof nested groups (whose purpose is to define different types of importsthat are of equivalent rank) started to matter: a single nested groupwould be treated as though it wasn't nestedWe [got around this][1] by adding a second nested group with most ifnot all of the other import types we useI [fixed the bug][2] in eslint-plugin-import 💅🏻 and this was released in2.28.1, so we can now revert to the simpler config post-upgrade[1]:ab5a73e[2]:import-js/eslint-plugin-import#2854
2.28.0 introduced a breaking change to `import/order` where the orderof nested groups (whose purpose is to define different types of importsthat are of equivalent rank) started to matter: a single nested groupwould be treated as though it wasn't nestedWe [got around this][1] by adding a second nested group with most ifnot all of the other import types we useIt looks like#141brought us back to 2.27.5. If we go back to 2.28.0 now and revert tothe simpler config, for some reason the ESLint errors don't reappearIn any case, I submitted a [bug fix][2] in eslint-plugin-import 💅This was released in 2.28.1, so we should upgrade, hopefully preventingan unexpected return to confusing errors[1]:ab5a73e[2]:import-js/eslint-plugin-import#2854
yndajas commentedAug 31, 2023
My findings on this in the project I'm working on are a little inconclusive: we seem to have dropped back to 2.27.5 through a recent Renovate PR, and updating to 2.28.0 again and reverting to a single nested group no longer appears to be problematic. In any case, everything is (also) fine after upgrading to 2.28.1 with a single nested group, so hopefully it's fixed (if it even was broken - I'm more confused now than ever 🤷🏻♀️) More detail here:ministryofjustice/hmpps-accredited-programmes-ui@47bf31b |
jraoult commentedOct 26, 2023
ljharb commentedOct 26, 2023
@jraoult can you file a new issue allowing me to repro the problem? Staying on v2.26 is definitely not a viable option long term. |
yndajas commentedOct 26, 2023
@jraoult does this definitely not work for you? groups: ["external","builtin","parent","sibling",], |
jraoult commentedOct 26, 2023 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@ljharb@yndajas so my configuration is: "import/order":["error",{alphabetize:{order:"asc",caseInsensitive:true,},groups:[["external","builtin"],["parent","sibling"],],"newlines-between":"always",},], and typically, this used to pass in 2.26: import{isNotNull}from"option-t/esm/Nullable";import{combineNullables}from"../util/combineNullables.js";importtype{BigFraction}from"./BigFraction.js";import{FRACTION_ZERO}from"./fraction.js"; but fails after 2.26 with message: |
yndajas commentedOct 26, 2023
@jraoult Yeah that's expected behaviour based on the docs (if I understand them correctly), since the path comes later under alphabetical sorting and you've got parent and sibling imports at the same rank by nesting them I'm not sure sure why it worked the other way in 2.26.0. As I've suggested above, denesting should allow you to require parent imports to come before sibling imports, which should be a single config change and not require any other changes throughout your codebase, all being well! As@ljharb said, it's probably best to open a separate issue if that doesn't solve the problem |
jraoult commentedOct 26, 2023
jraoult commentedOct 26, 2023 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@yndajas, but then I can not leverage |
yndajas commentedOct 26, 2023
Ahh I see what you mean. Might be good to add that to the issue, because that clarifies things a lot |
| datasource | package | from | to || ---------- | -------------------- | ------ | ------ || npm | eslint-plugin-import | 2.26.0 | 2.29.1 |##### [\`v2.29.1\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2291---2023-12-14)##### Fixed- \[`no-extraneous-dependencies`]: ignore `export type { ... } from '...'` when `includeTypes` is `false` (\[[#2919](import-js/eslint-plugin-import#2919)], thanks \[[@Pandemic1617](https://github.com/Pandemic1617)])- \[`no-unused-modules`]: support export patterns with array destructuring (\[[#2930](import-js/eslint-plugin-import#2930)], thanks \[[@ljharb](https://github.com/ljharb)])- \[Deps] update `tsconfig-paths` (\[[#2447](import-js/eslint-plugin-import#2447)], thanks \[[@domdomegg](https://github.com/domdomegg)])##### [\`v2.29.0\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2290---2023-10-22)##### Added- TypeScript config: add .cts and .mts extensions (\[[#2851](import-js/eslint-plugin-import#2851)], thanks \[[@Zamiell](https://github.com/Zamiell)])- \[`newline-after-import`]: new option `exactCount` and docs update (\[[#1933](import-js/eslint-plugin-import#1933)], thanks \[[@anikethsaha](https://github.com/anikethsaha)] and \[[@reosarevok](https://github.com/reosarevok)])- \[`newline-after-import`]: fix `exactCount` with `considerComments` false positive, when there is a leading comment (\[[#2884](import-js/eslint-plugin-import#2884)], thanks \[[@kinland](https://github.com/kinland)])##### [\`v2.28.1\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2281---2023-08-18)##### Fixed- \[`order`]: revert breaking change to single nested group (\[[#2854](import-js/eslint-plugin-import#2854)], thanks \[[@yndajas](https://github.com/yndajas)])##### Changed- \[Docs] remove duplicate fixable notices in docs (\[[#2850](import-js/eslint-plugin-import#2850)], thanks \[[@bmish](https://github.com/bmish)])##### [\`v2.28.0\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2280---2023-07-27)##### Fixed- \[`no-duplicates`]: remove duplicate identifiers in duplicate imports (\[[#2577](import-js/eslint-plugin-import#2577)], thanks \[[@joe-matsec](https://github.com/joe-matsec)])- \[`consistent-type-specifier-style`]: fix accidental removal of comma in certain cases (\[[#2754](import-js/eslint-plugin-import#2754)], thanks \[[@bradzacher](https://github.com/bradzacher)])- \[Perf] `ExportMap`: Improve `ExportMap.for` performance on larger codebases (\[[#2756](import-js/eslint-plugin-import#2756)], thanks \[[@leipert](https://github.com/leipert)])- \[`no-extraneous-dependencies`]/TypeScript: do not error when importing inline type from dev dependencies (\[[#1820](import-js/eslint-plugin-import#1820)], thanks \[[@AndyOGo](https://github.com/andyogo)])- \[`newline-after-import`]/TypeScript: do not error when re-exporting a namespaced import (\[[#2832](import-js/eslint-plugin-import#2832)], thanks \[[@laurens-dg](https://github.com/laurens-dg)])- \[`order`]: partial fix for \[[#2687](import-js/eslint-plugin-import#2687)] (thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-duplicates`]: Detect across type and regular imports (\[[#2835](import-js/eslint-plugin-import#2835)], thanks \[[@benkrejci](https://github.com/benkrejci)])- \[`extensions`]: handle `.` and `..` properly (\[[#2778](import-js/eslint-plugin-import#2778)], thanks \[[@benasher44](https://github.com/benasher44)])- \[`no-unused-modules`]: improve schema (thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-unused-modules`]: report error on binding instead of parent export (\[[#2842](import-js/eslint-plugin-import#2842)], thanks \[[@Chamion](https://github.com/Chamion)])##### Changed- \[Docs] \[`no-duplicates`]: fix example schema (\[[#2684](import-js/eslint-plugin-import#2684)], thanks \[[@simmo](https://github.com/simmo)])- \[Docs] \[`group-exports`]: fix syntax highlighting (\[[#2699](import-js/eslint-plugin-import#2699)], thanks \[[@devinrhode2](https://github.com/devinrhode2)])- \[Docs] \[`extensions`]: reference node ESM behavior (\[[#2748](import-js/eslint-plugin-import#2748)], thanks \[[@xM8WVqaG](https://github.com/xM8WVqaG)])- \[Refactor] \[`exports-last`]: use `array.prototype.findlastindex` (thanks \[[@ljharb](https://github.com/ljharb)])- \[Refactor] \[`no-anonymous-default-export`]: use `object.fromentries` (thanks \[[@ljharb](https://github.com/ljharb)])- \[Refactor] \[`no-unused-modules`]: use `array.prototype.flatmap` (thanks \[[@ljharb](https://github.com/ljharb)])##### [\`v2.27.5\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2275---2023-01-16)##### Fixed- \[`order]`: Fix group ranks order when alphabetizing (\[[#2674](import-js/eslint-plugin-import#2674)], thanks \[[@Pearce-Ropion](https://github.com/Pearce-Ropion)])##### [\`v2.27.4\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2274---2023-01-11)##### Fixed- `semver` should be a prod dep (\[[#2668](import-js/eslint-plugin-import#2668)])##### [\`v2.27.3\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2273---2023-01-11)##### Fixed- \[`no-empty-named-blocks`]: rewrite rule to only check import declarations (\[[#2666](import-js/eslint-plugin-import#2666)])##### [\`v2.27.2\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2272---2023-01-11)##### Fixed- \[`no-duplicates`]: do not unconditionally require `typescript` (\[[#2665](import-js/eslint-plugin-import#2665)])##### [\`v2.27.1\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2271---2023-01-11)##### Fixed- `array.prototype.flatmap` should be a prod dep (\[[#2664](import-js/eslint-plugin-import#2664)], thanks \[[@cristobal](https://github.com/cristobal)])##### [\`v2.27.0\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2270---2023-01-11)##### Added- \[`newline-after-import`]: add `considerComments` option (\[[#2399](import-js/eslint-plugin-import#2399)], thanks \[[@pri1311](https://github.com/pri1311)])- \[`no-cycle`]: add `allowUnsafeDynamicCyclicDependency` option (\[[#2387](import-js/eslint-plugin-import#2387)], thanks \[[@GerkinDev](https://github.com/GerkinDev)])- \[`no-restricted-paths`]: support arrays for `from` and `target` options (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`no-anonymous-default-export`]: add `allowNew` option (\[[#2505](import-js/eslint-plugin-import#2505)], thanks \[[@DamienCassou](https://github.com/DamienCassou)])- \[`order`]: Add `distinctGroup` option (\[[#2395](import-js/eslint-plugin-import#2395)], thanks \[[@hyperupcall](https://github.com/hyperupcall)])- \[`no-extraneous-dependencies`]: Add `includeInternal` option (\[[#2541](import-js/eslint-plugin-import#2541)], thanks \[[@bdwain](https://github.com/bdwain)])- \[`no-extraneous-dependencies`]: Add `includeTypes` option (\[[#2543](import-js/eslint-plugin-import#2543)], thanks \[[@bdwain](https://github.com/bdwain)])- \[`order`]: new `alphabetize.orderImportKind` option to sort imports with same path based on their kind (`type`, `typeof`) (\[[#2544](import-js/eslint-plugin-import#2544)], thanks \[[@stropho](https://github.com/stropho)])- \[`consistent-type-specifier-style`]: add rule (\[[#2473](import-js/eslint-plugin-import#2473)], thanks \[[@bradzacher](https://github.com/bradzacher)])- Add \[`no-empty-named-blocks`] rule (\[[#2568](import-js/eslint-plugin-import#2568)], thanks \[[@guilhermelimak](https://github.com/guilhermelimak)])- \[`prefer-default-export`]: add "target" option (\[[#2602](import-js/eslint-plugin-import#2602)], thanks \[[@azyzz228](https://github.com/azyzz228)])- \[`no-absolute-path`]: add fixer (\[[#2613](import-js/eslint-plugin-import#2613)], thanks \[[@adipascu](https://github.com/adipascu)])- \[`no-duplicates`]: support inline type import with `inlineTypeImport` option (\[[#2475](import-js/eslint-plugin-import#2475)], thanks \[[@snewcomer](https://github.com/snewcomer)])##### Fixed- \[`order`]: move nested imports closer to main import entry (\[[#2396](import-js/eslint-plugin-import#2396)], thanks \[[@pri1311](https://github.com/pri1311)])- \[`no-restricted-paths`]: fix an error message (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`no-restricted-paths`]: use `Minimatch.match` instead of `minimatch` to comply with Windows Native paths (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`order`]: require with member expression could not be fixed if alphabetize.order was used (\[[#2490](import-js/eslint-plugin-import#2490)], thanks \[[@msvab](https://github.com/msvab)])- \[`order`]: leave more space in rankings for consecutive path groups (\[[#2506](import-js/eslint-plugin-import#2506)], thanks \[[@Pearce-Ropion](https://github.com/Pearce-Ropion)])- \[`no-cycle`]: add ExportNamedDeclaration statements to dependencies (\[[#2511](import-js/eslint-plugin-import#2511)], thanks \[[@BenoitZugmeyer](https://github.com/BenoitZugmeyer)])- \[`dynamic-import-chunkname`]: prevent false report on a valid webpack magic comment (\[[#2330](import-js/eslint-plugin-import#2330)], thanks \[[@MhMadHamster](https://github.com/mhmadhamster)])- \[`export`]: do not error on TS export overloads (\[[#1590](import-js/eslint-plugin-import#1590)], thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-unresolved`], \[`extensions`]: ignore type only exports (\[[#2436](import-js/eslint-plugin-import#2436)], thanks \[[@Lukas-Kullmann](https://github.com/Lukas-Kullmann)])- `ExportMap`: add missing param to function (\[[#2589](import-js/eslint-plugin-import#2589)], thanks \[[@Fdawgs](https://github.com/Fdawgs)])- \[`no-unused-modules`]: `checkPkgFieldObject` filters boolean fields from checks (\[[#2598](import-js/eslint-plugin-import#2598)], thanks \[[@mpint](https://github.com/mpint)])- \[`no-cycle`]: accept Flow `typeof` imports, just like `type` (\[[#2608](import-js/eslint-plugin-import#2608)], thanks \[[@gnprice](https://github.com/gnprice)])- \[`no-import-module-exports`]: avoid a false positive for import variables (\[[#2315](import-js/eslint-plugin-import#2315)], thanks \[[@BarryThePenguin](https://github.com/BarryThePenguin)])##### Changed- \[Tests] \[`named`]: Run all TypeScript test (\[[#2427](import-js/eslint-plugin-import#2427)], thanks \[[@ProdigySim](https://github.com/ProdigySim)])- \[readme] note use of typescript in readme `import/extensions` section (\[[#2440](import-js/eslint-plugin-import#2440)], thanks \[[@OutdatedVersion](https://github.com/OutdatedVersion)])- \[Docs] \[`order`]: use correct default value (\[[#2392](import-js/eslint-plugin-import#2392)], thanks \[[@hyperupcall](https://github.com/hyperupcall)])- \[meta] replace git.io link in comments with the original URL (\[[#2444](import-js/eslint-plugin-import#2444)], thanks \[[@liby](https://github.com/liby)])- \[Docs] remove global install in readme (\[[#2412](import-js/eslint-plugin-import#2412)], thanks \[[@aladdin-add](https://github.com/aladdin-add)])- \[readme] clarify `eslint-import-resolver-typescript` usage (\[[#2503](import-js/eslint-plugin-import#2503)], thanks \[[@JounQin](https://github.com/JounQin)])- \[Refactor] \[`no-cycle`]: Add per-run caching of traversed paths (\[[#2419](import-js/eslint-plugin-import#2419)], thanks \[[@Nokel81](https://github.com/nokel81)])- \[Performance] `ExportMap`: add caching after parsing for an ambiguous module (\[[#2531](import-js/eslint-plugin-import#2531)], thanks \[[@stenin-nikita](https://github.com/stenin-nikita)])- \[Docs] \[`no-useless-path-segments`]: fix paths (\[[#2424](import-js/eslint-plugin-import#2424)], thanks \[[@s-h-a-d-o-w](https://github.com/s-h-a-d-o-w)])- \[Tests] \[`no-cycle`]: add passing test cases (\[[#2438](import-js/eslint-plugin-import#2438)], thanks \[[@georeith](https://github.com/georeith)])- \[Refactor] \[`no-extraneous-dependencies`] improve performance using cache (\[[#2374](import-js/eslint-plugin-import#2374)], thanks \[[@meowtec](https://github.com/meowtec)])- \[meta] `CONTRIBUTING.md`: mention inactive PRs (\[[#2546](import-js/eslint-plugin-import#2546)], thanks \[[@stropho](https://github.com/stropho)])- \[readme] make json for setting groups multiline (\[[#2570](import-js/eslint-plugin-import#2570)], thanks \[[@bertyhell](https://github.com/bertyhell)])- \[Tests] \[`no-restricted-paths`]: Tests for `import type` statements (\[[#2459](import-js/eslint-plugin-import#2459)], thanks \[[@golergka](https://github.com/golergka)])- \[Tests] \[`no-restricted-paths`]: fix one failing `import type` test case, submitted by \[[@golergka](https://github.com/golergka)], thanks \[[@azyzz228](https://github.com/azyzz228)]- \[Docs] automate docs with eslint-doc-generator (\[[#2582](import-js/eslint-plugin-import#2582)], thanks \[[@bmish](https://github.com/bmish)])- \[readme] Increase clarity around typescript configuration (\[[#2588](import-js/eslint-plugin-import#2588)], thanks \[[@Nfinished](https://github.com/Nfinished)])- \[Docs] update `eslint-doc-generator` to v1.0.0 (\[[#2605](import-js/eslint-plugin-import#2605)], thanks \[[@bmish](https://github.com/bmish)])- \[Perf] \[`no-cycle`], \[`no-internal-modules`], \[`no-restricted-paths`]: use `anyOf` instead of `oneOf` (thanks \[[@ljharb](https://github.com/ljharb)], \[[@remcohaszing](https://github.com/remcohaszing)])
| datasource | package | from | to || ---------- | -------------------- | ------ | ------ || npm | eslint-plugin-import | 2.26.0 | 2.29.1 |##### [\`v2.29.1\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2291---2023-12-14)##### Fixed- \[`no-extraneous-dependencies`]: ignore `export type { ... } from '...'` when `includeTypes` is `false` (\[[#2919](import-js/eslint-plugin-import#2919)], thanks \[[@Pandemic1617](https://github.com/Pandemic1617)])- \[`no-unused-modules`]: support export patterns with array destructuring (\[[#2930](import-js/eslint-plugin-import#2930)], thanks \[[@ljharb](https://github.com/ljharb)])- \[Deps] update `tsconfig-paths` (\[[#2447](import-js/eslint-plugin-import#2447)], thanks \[[@domdomegg](https://github.com/domdomegg)])##### [\`v2.29.0\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2290---2023-10-22)##### Added- TypeScript config: add .cts and .mts extensions (\[[#2851](import-js/eslint-plugin-import#2851)], thanks \[[@Zamiell](https://github.com/Zamiell)])- \[`newline-after-import`]: new option `exactCount` and docs update (\[[#1933](import-js/eslint-plugin-import#1933)], thanks \[[@anikethsaha](https://github.com/anikethsaha)] and \[[@reosarevok](https://github.com/reosarevok)])- \[`newline-after-import`]: fix `exactCount` with `considerComments` false positive, when there is a leading comment (\[[#2884](import-js/eslint-plugin-import#2884)], thanks \[[@kinland](https://github.com/kinland)])##### [\`v2.28.1\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2281---2023-08-18)##### Fixed- \[`order`]: revert breaking change to single nested group (\[[#2854](import-js/eslint-plugin-import#2854)], thanks \[[@yndajas](https://github.com/yndajas)])##### Changed- \[Docs] remove duplicate fixable notices in docs (\[[#2850](import-js/eslint-plugin-import#2850)], thanks \[[@bmish](https://github.com/bmish)])##### [\`v2.28.0\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2280---2023-07-27)##### Fixed- \[`no-duplicates`]: remove duplicate identifiers in duplicate imports (\[[#2577](import-js/eslint-plugin-import#2577)], thanks \[[@joe-matsec](https://github.com/joe-matsec)])- \[`consistent-type-specifier-style`]: fix accidental removal of comma in certain cases (\[[#2754](import-js/eslint-plugin-import#2754)], thanks \[[@bradzacher](https://github.com/bradzacher)])- \[Perf] `ExportMap`: Improve `ExportMap.for` performance on larger codebases (\[[#2756](import-js/eslint-plugin-import#2756)], thanks \[[@leipert](https://github.com/leipert)])- \[`no-extraneous-dependencies`]/TypeScript: do not error when importing inline type from dev dependencies (\[[#1820](import-js/eslint-plugin-import#1820)], thanks \[[@AndyOGo](https://github.com/andyogo)])- \[`newline-after-import`]/TypeScript: do not error when re-exporting a namespaced import (\[[#2832](import-js/eslint-plugin-import#2832)], thanks \[[@laurens-dg](https://github.com/laurens-dg)])- \[`order`]: partial fix for \[[#2687](import-js/eslint-plugin-import#2687)] (thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-duplicates`]: Detect across type and regular imports (\[[#2835](import-js/eslint-plugin-import#2835)], thanks \[[@benkrejci](https://github.com/benkrejci)])- \[`extensions`]: handle `.` and `..` properly (\[[#2778](import-js/eslint-plugin-import#2778)], thanks \[[@benasher44](https://github.com/benasher44)])- \[`no-unused-modules`]: improve schema (thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-unused-modules`]: report error on binding instead of parent export (\[[#2842](import-js/eslint-plugin-import#2842)], thanks \[[@Chamion](https://github.com/Chamion)])##### Changed- \[Docs] \[`no-duplicates`]: fix example schema (\[[#2684](import-js/eslint-plugin-import#2684)], thanks \[[@simmo](https://github.com/simmo)])- \[Docs] \[`group-exports`]: fix syntax highlighting (\[[#2699](import-js/eslint-plugin-import#2699)], thanks \[[@devinrhode2](https://github.com/devinrhode2)])- \[Docs] \[`extensions`]: reference node ESM behavior (\[[#2748](import-js/eslint-plugin-import#2748)], thanks \[[@xM8WVqaG](https://github.com/xM8WVqaG)])- \[Refactor] \[`exports-last`]: use `array.prototype.findlastindex` (thanks \[[@ljharb](https://github.com/ljharb)])- \[Refactor] \[`no-anonymous-default-export`]: use `object.fromentries` (thanks \[[@ljharb](https://github.com/ljharb)])- \[Refactor] \[`no-unused-modules`]: use `array.prototype.flatmap` (thanks \[[@ljharb](https://github.com/ljharb)])##### [\`v2.27.5\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2275---2023-01-16)##### Fixed- \[`order]`: Fix group ranks order when alphabetizing (\[[#2674](import-js/eslint-plugin-import#2674)], thanks \[[@Pearce-Ropion](https://github.com/Pearce-Ropion)])##### [\`v2.27.4\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2274---2023-01-11)##### Fixed- `semver` should be a prod dep (\[[#2668](import-js/eslint-plugin-import#2668)])##### [\`v2.27.3\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2273---2023-01-11)##### Fixed- \[`no-empty-named-blocks`]: rewrite rule to only check import declarations (\[[#2666](import-js/eslint-plugin-import#2666)])##### [\`v2.27.2\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2272---2023-01-11)##### Fixed- \[`no-duplicates`]: do not unconditionally require `typescript` (\[[#2665](import-js/eslint-plugin-import#2665)])##### [\`v2.27.1\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2271---2023-01-11)##### Fixed- `array.prototype.flatmap` should be a prod dep (\[[#2664](import-js/eslint-plugin-import#2664)], thanks \[[@cristobal](https://github.com/cristobal)])##### [\`v2.27.0\`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2270---2023-01-11)##### Added- \[`newline-after-import`]: add `considerComments` option (\[[#2399](import-js/eslint-plugin-import#2399)], thanks \[[@pri1311](https://github.com/pri1311)])- \[`no-cycle`]: add `allowUnsafeDynamicCyclicDependency` option (\[[#2387](import-js/eslint-plugin-import#2387)], thanks \[[@GerkinDev](https://github.com/GerkinDev)])- \[`no-restricted-paths`]: support arrays for `from` and `target` options (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`no-anonymous-default-export`]: add `allowNew` option (\[[#2505](import-js/eslint-plugin-import#2505)], thanks \[[@DamienCassou](https://github.com/DamienCassou)])- \[`order`]: Add `distinctGroup` option (\[[#2395](import-js/eslint-plugin-import#2395)], thanks \[[@hyperupcall](https://github.com/hyperupcall)])- \[`no-extraneous-dependencies`]: Add `includeInternal` option (\[[#2541](import-js/eslint-plugin-import#2541)], thanks \[[@bdwain](https://github.com/bdwain)])- \[`no-extraneous-dependencies`]: Add `includeTypes` option (\[[#2543](import-js/eslint-plugin-import#2543)], thanks \[[@bdwain](https://github.com/bdwain)])- \[`order`]: new `alphabetize.orderImportKind` option to sort imports with same path based on their kind (`type`, `typeof`) (\[[#2544](import-js/eslint-plugin-import#2544)], thanks \[[@stropho](https://github.com/stropho)])- \[`consistent-type-specifier-style`]: add rule (\[[#2473](import-js/eslint-plugin-import#2473)], thanks \[[@bradzacher](https://github.com/bradzacher)])- Add \[`no-empty-named-blocks`] rule (\[[#2568](import-js/eslint-plugin-import#2568)], thanks \[[@guilhermelimak](https://github.com/guilhermelimak)])- \[`prefer-default-export`]: add "target" option (\[[#2602](import-js/eslint-plugin-import#2602)], thanks \[[@azyzz228](https://github.com/azyzz228)])- \[`no-absolute-path`]: add fixer (\[[#2613](import-js/eslint-plugin-import#2613)], thanks \[[@adipascu](https://github.com/adipascu)])- \[`no-duplicates`]: support inline type import with `inlineTypeImport` option (\[[#2475](import-js/eslint-plugin-import#2475)], thanks \[[@snewcomer](https://github.com/snewcomer)])##### Fixed- \[`order`]: move nested imports closer to main import entry (\[[#2396](import-js/eslint-plugin-import#2396)], thanks \[[@pri1311](https://github.com/pri1311)])- \[`no-restricted-paths`]: fix an error message (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`no-restricted-paths`]: use `Minimatch.match` instead of `minimatch` to comply with Windows Native paths (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`order`]: require with member expression could not be fixed if alphabetize.order was used (\[[#2490](import-js/eslint-plugin-import#2490)], thanks \[[@msvab](https://github.com/msvab)])- \[`order`]: leave more space in rankings for consecutive path groups (\[[#2506](import-js/eslint-plugin-import#2506)], thanks \[[@Pearce-Ropion](https://github.com/Pearce-Ropion)])- \[`no-cycle`]: add ExportNamedDeclaration statements to dependencies (\[[#2511](import-js/eslint-plugin-import#2511)], thanks \[[@BenoitZugmeyer](https://github.com/BenoitZugmeyer)])- \[`dynamic-import-chunkname`]: prevent false report on a valid webpack magic comment (\[[#2330](import-js/eslint-plugin-import#2330)], thanks \[[@MhMadHamster](https://github.com/mhmadhamster)])- \[`export`]: do not error on TS export overloads (\[[#1590](import-js/eslint-plugin-import#1590)], thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-unresolved`], \[`extensions`]: ignore type only exports (\[[#2436](import-js/eslint-plugin-import#2436)], thanks \[[@Lukas-Kullmann](https://github.com/Lukas-Kullmann)])- `ExportMap`: add missing param to function (\[[#2589](import-js/eslint-plugin-import#2589)], thanks \[[@Fdawgs](https://github.com/Fdawgs)])- \[`no-unused-modules`]: `checkPkgFieldObject` filters boolean fields from checks (\[[#2598](import-js/eslint-plugin-import#2598)], thanks \[[@mpint](https://github.com/mpint)])- \[`no-cycle`]: accept Flow `typeof` imports, just like `type` (\[[#2608](import-js/eslint-plugin-import#2608)], thanks \[[@gnprice](https://github.com/gnprice)])- \[`no-import-module-exports`]: avoid a false positive for import variables (\[[#2315](import-js/eslint-plugin-import#2315)], thanks \[[@BarryThePenguin](https://github.com/BarryThePenguin)])##### Changed- \[Tests] \[`named`]: Run all TypeScript test (\[[#2427](import-js/eslint-plugin-import#2427)], thanks \[[@ProdigySim](https://github.com/ProdigySim)])- \[readme] note use of typescript in readme `import/extensions` section (\[[#2440](import-js/eslint-plugin-import#2440)], thanks \[[@OutdatedVersion](https://github.com/OutdatedVersion)])- \[Docs] \[`order`]: use correct default value (\[[#2392](import-js/eslint-plugin-import#2392)], thanks \[[@hyperupcall](https://github.com/hyperupcall)])- \[meta] replace git.io link in comments with the original URL (\[[#2444](import-js/eslint-plugin-import#2444)], thanks \[[@liby](https://github.com/liby)])- \[Docs] remove global install in readme (\[[#2412](import-js/eslint-plugin-import#2412)], thanks \[[@aladdin-add](https://github.com/aladdin-add)])- \[readme] clarify `eslint-import-resolver-typescript` usage (\[[#2503](import-js/eslint-plugin-import#2503)], thanks \[[@JounQin](https://github.com/JounQin)])- \[Refactor] \[`no-cycle`]: Add per-run caching of traversed paths (\[[#2419](import-js/eslint-plugin-import#2419)], thanks \[[@Nokel81](https://github.com/nokel81)])- \[Performance] `ExportMap`: add caching after parsing for an ambiguous module (\[[#2531](import-js/eslint-plugin-import#2531)], thanks \[[@stenin-nikita](https://github.com/stenin-nikita)])- \[Docs] \[`no-useless-path-segments`]: fix paths (\[[#2424](import-js/eslint-plugin-import#2424)], thanks \[[@s-h-a-d-o-w](https://github.com/s-h-a-d-o-w)])- \[Tests] \[`no-cycle`]: add passing test cases (\[[#2438](import-js/eslint-plugin-import#2438)], thanks \[[@georeith](https://github.com/georeith)])- \[Refactor] \[`no-extraneous-dependencies`] improve performance using cache (\[[#2374](import-js/eslint-plugin-import#2374)], thanks \[[@meowtec](https://github.com/meowtec)])- \[meta] `CONTRIBUTING.md`: mention inactive PRs (\[[#2546](import-js/eslint-plugin-import#2546)], thanks \[[@stropho](https://github.com/stropho)])- \[readme] make json for setting groups multiline (\[[#2570](import-js/eslint-plugin-import#2570)], thanks \[[@bertyhell](https://github.com/bertyhell)])- \[Tests] \[`no-restricted-paths`]: Tests for `import type` statements (\[[#2459](import-js/eslint-plugin-import#2459)], thanks \[[@golergka](https://github.com/golergka)])- \[Tests] \[`no-restricted-paths`]: fix one failing `import type` test case, submitted by \[[@golergka](https://github.com/golergka)], thanks \[[@azyzz228](https://github.com/azyzz228)]- \[Docs] automate docs with eslint-doc-generator (\[[#2582](import-js/eslint-plugin-import#2582)], thanks \[[@bmish](https://github.com/bmish)])- \[readme] Increase clarity around typescript configuration (\[[#2588](import-js/eslint-plugin-import#2588)], thanks \[[@Nfinished](https://github.com/Nfinished)])- \[Docs] update `eslint-doc-generator` to v1.0.0 (\[[#2605](import-js/eslint-plugin-import#2605)], thanks \[[@bmish](https://github.com/bmish)])- \[Perf] \[`no-cycle`], \[`no-internal-modules`], \[`no-restricted-paths`]: use `anyOf` instead of `oneOf` (thanks \[[@ljharb](https://github.com/ljharb)], \[[@remcohaszing](https://github.com/remcohaszing)])
| datasource | package | from | to || ---------- | -------------------- | ------ | ------ || npm | eslint-plugin-import | 2.26.0 | 2.29.1 |## [v2.29.1](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2291---2023-12-14)##### Fixed- \[`no-extraneous-dependencies`]: ignore `export type { ... } from '...'` when `includeTypes` is `false` (\[[#2919](import-js/eslint-plugin-import#2919)], thanks \[[@Pandemic1617](https://github.com/Pandemic1617)])- \[`no-unused-modules`]: support export patterns with array destructuring (\[[#2930](import-js/eslint-plugin-import#2930)], thanks \[[@ljharb](https://github.com/ljharb)])- \[Deps] update `tsconfig-paths` (\[[#2447](import-js/eslint-plugin-import#2447)], thanks \[[@domdomegg](https://github.com/domdomegg)])## [v2.29.0](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2290---2023-10-22)##### Added- TypeScript config: add .cts and .mts extensions (\[[#2851](import-js/eslint-plugin-import#2851)], thanks \[[@Zamiell](https://github.com/Zamiell)])- \[`newline-after-import`]: new option `exactCount` and docs update (\[[#1933](import-js/eslint-plugin-import#1933)], thanks \[[@anikethsaha](https://github.com/anikethsaha)] and \[[@reosarevok](https://github.com/reosarevok)])- \[`newline-after-import`]: fix `exactCount` with `considerComments` false positive, when there is a leading comment (\[[#2884](import-js/eslint-plugin-import#2884)], thanks \[[@kinland](https://github.com/kinland)])## [v2.28.1](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2281---2023-08-18)##### Fixed- \[`order`]: revert breaking change to single nested group (\[[#2854](import-js/eslint-plugin-import#2854)], thanks \[[@yndajas](https://github.com/yndajas)])##### Changed- \[Docs] remove duplicate fixable notices in docs (\[[#2850](import-js/eslint-plugin-import#2850)], thanks \[[@bmish](https://github.com/bmish)])## [v2.28.0](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2280---2023-07-27)##### Fixed- \[`no-duplicates`]: remove duplicate identifiers in duplicate imports (\[[#2577](import-js/eslint-plugin-import#2577)], thanks \[[@joe-matsec](https://github.com/joe-matsec)])- \[`consistent-type-specifier-style`]: fix accidental removal of comma in certain cases (\[[#2754](import-js/eslint-plugin-import#2754)], thanks \[[@bradzacher](https://github.com/bradzacher)])- \[Perf] `ExportMap`: Improve `ExportMap.for` performance on larger codebases (\[[#2756](import-js/eslint-plugin-import#2756)], thanks \[[@leipert](https://github.com/leipert)])- \[`no-extraneous-dependencies`]/TypeScript: do not error when importing inline type from dev dependencies (\[[#1820](import-js/eslint-plugin-import#1820)], thanks \[[@AndyOGo](https://github.com/andyogo)])- \[`newline-after-import`]/TypeScript: do not error when re-exporting a namespaced import (\[[#2832](import-js/eslint-plugin-import#2832)], thanks \[[@laurens-dg](https://github.com/laurens-dg)])- \[`order`]: partial fix for \[[#2687](import-js/eslint-plugin-import#2687)] (thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-duplicates`]: Detect across type and regular imports (\[[#2835](import-js/eslint-plugin-import#2835)], thanks \[[@benkrejci](https://github.com/benkrejci)])- \[`extensions`]: handle `.` and `..` properly (\[[#2778](import-js/eslint-plugin-import#2778)], thanks \[[@benasher44](https://github.com/benasher44)])- \[`no-unused-modules`]: improve schema (thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-unused-modules`]: report error on binding instead of parent export (\[[#2842](import-js/eslint-plugin-import#2842)], thanks \[[@Chamion](https://github.com/Chamion)])##### Changed- \[Docs] \[`no-duplicates`]: fix example schema (\[[#2684](import-js/eslint-plugin-import#2684)], thanks \[[@simmo](https://github.com/simmo)])- \[Docs] \[`group-exports`]: fix syntax highlighting (\[[#2699](import-js/eslint-plugin-import#2699)], thanks \[[@devinrhode2](https://github.com/devinrhode2)])- \[Docs] \[`extensions`]: reference node ESM behavior (\[[#2748](import-js/eslint-plugin-import#2748)], thanks \[[@xM8WVqaG](https://github.com/xM8WVqaG)])- \[Refactor] \[`exports-last`]: use `array.prototype.findlastindex` (thanks \[[@ljharb](https://github.com/ljharb)])- \[Refactor] \[`no-anonymous-default-export`]: use `object.fromentries` (thanks \[[@ljharb](https://github.com/ljharb)])- \[Refactor] \[`no-unused-modules`]: use `array.prototype.flatmap` (thanks \[[@ljharb](https://github.com/ljharb)])## [v2.27.5](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2275---2023-01-16)##### Fixed- \[`order]`: Fix group ranks order when alphabetizing (\[[#2674](import-js/eslint-plugin-import#2674)], thanks \[[@Pearce-Ropion](https://github.com/Pearce-Ropion)])## [v2.27.4](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2274---2023-01-11)##### Fixed- `semver` should be a prod dep (\[[#2668](import-js/eslint-plugin-import#2668)])## [v2.27.3](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2273---2023-01-11)##### Fixed- \[`no-empty-named-blocks`]: rewrite rule to only check import declarations (\[[#2666](import-js/eslint-plugin-import#2666)])## [v2.27.2](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2272---2023-01-11)##### Fixed- \[`no-duplicates`]: do not unconditionally require `typescript` (\[[#2665](import-js/eslint-plugin-import#2665)])## [v2.27.1](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2271---2023-01-11)##### Fixed- `array.prototype.flatmap` should be a prod dep (\[[#2664](import-js/eslint-plugin-import#2664)], thanks \[[@cristobal](https://github.com/cristobal)])## [v2.27.0](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2270---2023-01-11)##### Added- \[`newline-after-import`]: add `considerComments` option (\[[#2399](import-js/eslint-plugin-import#2399)], thanks \[[@pri1311](https://github.com/pri1311)])- \[`no-cycle`]: add `allowUnsafeDynamicCyclicDependency` option (\[[#2387](import-js/eslint-plugin-import#2387)], thanks \[[@GerkinDev](https://github.com/GerkinDev)])- \[`no-restricted-paths`]: support arrays for `from` and `target` options (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`no-anonymous-default-export`]: add `allowNew` option (\[[#2505](import-js/eslint-plugin-import#2505)], thanks \[[@DamienCassou](https://github.com/DamienCassou)])- \[`order`]: Add `distinctGroup` option (\[[#2395](import-js/eslint-plugin-import#2395)], thanks \[[@hyperupcall](https://github.com/hyperupcall)])- \[`no-extraneous-dependencies`]: Add `includeInternal` option (\[[#2541](import-js/eslint-plugin-import#2541)], thanks \[[@bdwain](https://github.com/bdwain)])- \[`no-extraneous-dependencies`]: Add `includeTypes` option (\[[#2543](import-js/eslint-plugin-import#2543)], thanks \[[@bdwain](https://github.com/bdwain)])- \[`order`]: new `alphabetize.orderImportKind` option to sort imports with same path based on their kind (`type`, `typeof`) (\[[#2544](import-js/eslint-plugin-import#2544)], thanks \[[@stropho](https://github.com/stropho)])- \[`consistent-type-specifier-style`]: add rule (\[[#2473](import-js/eslint-plugin-import#2473)], thanks \[[@bradzacher](https://github.com/bradzacher)])- Add \[`no-empty-named-blocks`] rule (\[[#2568](import-js/eslint-plugin-import#2568)], thanks \[[@guilhermelimak](https://github.com/guilhermelimak)])- \[`prefer-default-export`]: add "target" option (\[[#2602](import-js/eslint-plugin-import#2602)], thanks \[[@azyzz228](https://github.com/azyzz228)])- \[`no-absolute-path`]: add fixer (\[[#2613](import-js/eslint-plugin-import#2613)], thanks \[[@adipascu](https://github.com/adipascu)])- \[`no-duplicates`]: support inline type import with `inlineTypeImport` option (\[[#2475](import-js/eslint-plugin-import#2475)], thanks \[[@snewcomer](https://github.com/snewcomer)])##### Fixed- \[`order`]: move nested imports closer to main import entry (\[[#2396](import-js/eslint-plugin-import#2396)], thanks \[[@pri1311](https://github.com/pri1311)])- \[`no-restricted-paths`]: fix an error message (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`no-restricted-paths`]: use `Minimatch.match` instead of `minimatch` to comply with Windows Native paths (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`order`]: require with member expression could not be fixed if alphabetize.order was used (\[[#2490](import-js/eslint-plugin-import#2490)], thanks \[[@msvab](https://github.com/msvab)])- \[`order`]: leave more space in rankings for consecutive path groups (\[[#2506](import-js/eslint-plugin-import#2506)], thanks \[[@Pearce-Ropion](https://github.com/Pearce-Ropion)])- \[`no-cycle`]: add ExportNamedDeclaration statements to dependencies (\[[#2511](import-js/eslint-plugin-import#2511)], thanks \[[@BenoitZugmeyer](https://github.com/BenoitZugmeyer)])- \[`dynamic-import-chunkname`]: prevent false report on a valid webpack magic comment (\[[#2330](import-js/eslint-plugin-import#2330)], thanks \[[@MhMadHamster](https://github.com/mhmadhamster)])- \[`export`]: do not error on TS export overloads (\[[#1590](import-js/eslint-plugin-import#1590)], thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-unresolved`], \[`extensions`]: ignore type only exports (\[[#2436](import-js/eslint-plugin-import#2436)], thanks \[[@Lukas-Kullmann](https://github.com/Lukas-Kullmann)])- `ExportMap`: add missing param to function (\[[#2589](import-js/eslint-plugin-import#2589)], thanks \[[@Fdawgs](https://github.com/Fdawgs)])- \[`no-unused-modules`]: `checkPkgFieldObject` filters boolean fields from checks (\[[#2598](import-js/eslint-plugin-import#2598)], thanks \[[@mpint](https://github.com/mpint)])- \[`no-cycle`]: accept Flow `typeof` imports, just like `type` (\[[#2608](import-js/eslint-plugin-import#2608)], thanks \[[@gnprice](https://github.com/gnprice)])- \[`no-import-module-exports`]: avoid a false positive for import variables (\[[#2315](import-js/eslint-plugin-import#2315)], thanks \[[@BarryThePenguin](https://github.com/BarryThePenguin)])##### Changed- \[Tests] \[`named`]: Run all TypeScript test (\[[#2427](import-js/eslint-plugin-import#2427)], thanks \[[@ProdigySim](https://github.com/ProdigySim)])- \[readme] note use of typescript in readme `import/extensions` section (\[[#2440](import-js/eslint-plugin-import#2440)], thanks \[[@OutdatedVersion](https://github.com/OutdatedVersion)])- \[Docs] \[`order`]: use correct default value (\[[#2392](import-js/eslint-plugin-import#2392)], thanks \[[@hyperupcall](https://github.com/hyperupcall)])- \[meta] replace git.io link in comments with the original URL (\[[#2444](import-js/eslint-plugin-import#2444)], thanks \[[@liby](https://github.com/liby)])- \[Docs] remove global install in readme (\[[#2412](import-js/eslint-plugin-import#2412)], thanks \[[@aladdin-add](https://github.com/aladdin-add)])- \[readme] clarify `eslint-import-resolver-typescript` usage (\[[#2503](import-js/eslint-plugin-import#2503)], thanks \[[@JounQin](https://github.com/JounQin)])- \[Refactor] \[`no-cycle`]: Add per-run caching of traversed paths (\[[#2419](import-js/eslint-plugin-import#2419)], thanks \[[@Nokel81](https://github.com/nokel81)])- \[Performance] `ExportMap`: add caching after parsing for an ambiguous module (\[[#2531](import-js/eslint-plugin-import#2531)], thanks \[[@stenin-nikita](https://github.com/stenin-nikita)])- \[Docs] \[`no-useless-path-segments`]: fix paths (\[[#2424](import-js/eslint-plugin-import#2424)], thanks \[[@s-h-a-d-o-w](https://github.com/s-h-a-d-o-w)])- \[Tests] \[`no-cycle`]: add passing test cases (\[[#2438](import-js/eslint-plugin-import#2438)], thanks \[[@georeith](https://github.com/georeith)])- \[Refactor] \[`no-extraneous-dependencies`] improve performance using cache (\[[#2374](import-js/eslint-plugin-import#2374)], thanks \[[@meowtec](https://github.com/meowtec)])- \[meta] `CONTRIBUTING.md`: mention inactive PRs (\[[#2546](import-js/eslint-plugin-import#2546)], thanks \[[@stropho](https://github.com/stropho)])- \[readme] make json for setting groups multiline (\[[#2570](import-js/eslint-plugin-import#2570)], thanks \[[@bertyhell](https://github.com/bertyhell)])- \[Tests] \[`no-restricted-paths`]: Tests for `import type` statements (\[[#2459](import-js/eslint-plugin-import#2459)], thanks \[[@golergka](https://github.com/golergka)])- \[Tests] \[`no-restricted-paths`]: fix one failing `import type` test case, submitted by \[[@golergka](https://github.com/golergka)], thanks \[[@azyzz228](https://github.com/azyzz228)]- \[Docs] automate docs with eslint-doc-generator (\[[#2582](import-js/eslint-plugin-import#2582)], thanks \[[@bmish](https://github.com/bmish)])- \[readme] Increase clarity around typescript configuration (\[[#2588](import-js/eslint-plugin-import#2588)], thanks \[[@Nfinished](https://github.com/Nfinished)])- \[Docs] update `eslint-doc-generator` to v1.0.0 (\[[#2605](import-js/eslint-plugin-import#2605)], thanks \[[@bmish](https://github.com/bmish)])- \[Perf] \[`no-cycle`], \[`no-internal-modules`], \[`no-restricted-paths`]: use `anyOf` instead of `oneOf` (thanks \[[@ljharb](https://github.com/ljharb)], \[[@remcohaszing](https://github.com/remcohaszing)])
| datasource | package | from | to || ---------- | -------------------- | ------ | ------ || npm | eslint-plugin-import | 2.26.0 | 2.29.1 |## [v2.29.1](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2291---2023-12-14)##### Fixed- \[`no-extraneous-dependencies`]: ignore `export type { ... } from '...'` when `includeTypes` is `false` (\[[#2919](import-js/eslint-plugin-import#2919)], thanks \[[@Pandemic1617](https://github.com/Pandemic1617)])- \[`no-unused-modules`]: support export patterns with array destructuring (\[[#2930](import-js/eslint-plugin-import#2930)], thanks \[[@ljharb](https://github.com/ljharb)])- \[Deps] update `tsconfig-paths` (\[[#2447](import-js/eslint-plugin-import#2447)], thanks \[[@domdomegg](https://github.com/domdomegg)])## [v2.29.0](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2290---2023-10-22)##### Added- TypeScript config: add .cts and .mts extensions (\[[#2851](import-js/eslint-plugin-import#2851)], thanks \[[@Zamiell](https://github.com/Zamiell)])- \[`newline-after-import`]: new option `exactCount` and docs update (\[[#1933](import-js/eslint-plugin-import#1933)], thanks \[[@anikethsaha](https://github.com/anikethsaha)] and \[[@reosarevok](https://github.com/reosarevok)])- \[`newline-after-import`]: fix `exactCount` with `considerComments` false positive, when there is a leading comment (\[[#2884](import-js/eslint-plugin-import#2884)], thanks \[[@kinland](https://github.com/kinland)])## [v2.28.1](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2281---2023-08-18)##### Fixed- \[`order`]: revert breaking change to single nested group (\[[#2854](import-js/eslint-plugin-import#2854)], thanks \[[@yndajas](https://github.com/yndajas)])##### Changed- \[Docs] remove duplicate fixable notices in docs (\[[#2850](import-js/eslint-plugin-import#2850)], thanks \[[@bmish](https://github.com/bmish)])## [v2.28.0](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2280---2023-07-27)##### Fixed- \[`no-duplicates`]: remove duplicate identifiers in duplicate imports (\[[#2577](import-js/eslint-plugin-import#2577)], thanks \[[@joe-matsec](https://github.com/joe-matsec)])- \[`consistent-type-specifier-style`]: fix accidental removal of comma in certain cases (\[[#2754](import-js/eslint-plugin-import#2754)], thanks \[[@bradzacher](https://github.com/bradzacher)])- \[Perf] `ExportMap`: Improve `ExportMap.for` performance on larger codebases (\[[#2756](import-js/eslint-plugin-import#2756)], thanks \[[@leipert](https://github.com/leipert)])- \[`no-extraneous-dependencies`]/TypeScript: do not error when importing inline type from dev dependencies (\[[#1820](import-js/eslint-plugin-import#1820)], thanks \[[@AndyOGo](https://github.com/andyogo)])- \[`newline-after-import`]/TypeScript: do not error when re-exporting a namespaced import (\[[#2832](import-js/eslint-plugin-import#2832)], thanks \[[@laurens-dg](https://github.com/laurens-dg)])- \[`order`]: partial fix for \[[#2687](import-js/eslint-plugin-import#2687)] (thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-duplicates`]: Detect across type and regular imports (\[[#2835](import-js/eslint-plugin-import#2835)], thanks \[[@benkrejci](https://github.com/benkrejci)])- \[`extensions`]: handle `.` and `..` properly (\[[#2778](import-js/eslint-plugin-import#2778)], thanks \[[@benasher44](https://github.com/benasher44)])- \[`no-unused-modules`]: improve schema (thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-unused-modules`]: report error on binding instead of parent export (\[[#2842](import-js/eslint-plugin-import#2842)], thanks \[[@Chamion](https://github.com/Chamion)])##### Changed- \[Docs] \[`no-duplicates`]: fix example schema (\[[#2684](import-js/eslint-plugin-import#2684)], thanks \[[@simmo](https://github.com/simmo)])- \[Docs] \[`group-exports`]: fix syntax highlighting (\[[#2699](import-js/eslint-plugin-import#2699)], thanks \[[@devinrhode2](https://github.com/devinrhode2)])- \[Docs] \[`extensions`]: reference node ESM behavior (\[[#2748](import-js/eslint-plugin-import#2748)], thanks \[[@xM8WVqaG](https://github.com/xM8WVqaG)])- \[Refactor] \[`exports-last`]: use `array.prototype.findlastindex` (thanks \[[@ljharb](https://github.com/ljharb)])- \[Refactor] \[`no-anonymous-default-export`]: use `object.fromentries` (thanks \[[@ljharb](https://github.com/ljharb)])- \[Refactor] \[`no-unused-modules`]: use `array.prototype.flatmap` (thanks \[[@ljharb](https://github.com/ljharb)])## [v2.27.5](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2275---2023-01-16)##### Fixed- \[`order]`: Fix group ranks order when alphabetizing (\[[#2674](import-js/eslint-plugin-import#2674)], thanks \[[@Pearce-Ropion](https://github.com/Pearce-Ropion)])## [v2.27.4](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2274---2023-01-11)##### Fixed- `semver` should be a prod dep (\[[#2668](import-js/eslint-plugin-import#2668)])## [v2.27.3](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2273---2023-01-11)##### Fixed- \[`no-empty-named-blocks`]: rewrite rule to only check import declarations (\[[#2666](import-js/eslint-plugin-import#2666)])## [v2.27.2](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2272---2023-01-11)##### Fixed- \[`no-duplicates`]: do not unconditionally require `typescript` (\[[#2665](import-js/eslint-plugin-import#2665)])## [v2.27.1](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2271---2023-01-11)##### Fixed- `array.prototype.flatmap` should be a prod dep (\[[#2664](import-js/eslint-plugin-import#2664)], thanks \[[@cristobal](https://github.com/cristobal)])## [v2.27.0](https://github.com/import-js/eslint-plugin-import/blob/HEAD/CHANGELOG.md#2270---2023-01-11)##### Added- \[`newline-after-import`]: add `considerComments` option (\[[#2399](import-js/eslint-plugin-import#2399)], thanks \[[@pri1311](https://github.com/pri1311)])- \[`no-cycle`]: add `allowUnsafeDynamicCyclicDependency` option (\[[#2387](import-js/eslint-plugin-import#2387)], thanks \[[@GerkinDev](https://github.com/GerkinDev)])- \[`no-restricted-paths`]: support arrays for `from` and `target` options (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`no-anonymous-default-export`]: add `allowNew` option (\[[#2505](import-js/eslint-plugin-import#2505)], thanks \[[@DamienCassou](https://github.com/DamienCassou)])- \[`order`]: Add `distinctGroup` option (\[[#2395](import-js/eslint-plugin-import#2395)], thanks \[[@hyperupcall](https://github.com/hyperupcall)])- \[`no-extraneous-dependencies`]: Add `includeInternal` option (\[[#2541](import-js/eslint-plugin-import#2541)], thanks \[[@bdwain](https://github.com/bdwain)])- \[`no-extraneous-dependencies`]: Add `includeTypes` option (\[[#2543](import-js/eslint-plugin-import#2543)], thanks \[[@bdwain](https://github.com/bdwain)])- \[`order`]: new `alphabetize.orderImportKind` option to sort imports with same path based on their kind (`type`, `typeof`) (\[[#2544](import-js/eslint-plugin-import#2544)], thanks \[[@stropho](https://github.com/stropho)])- \[`consistent-type-specifier-style`]: add rule (\[[#2473](import-js/eslint-plugin-import#2473)], thanks \[[@bradzacher](https://github.com/bradzacher)])- Add \[`no-empty-named-blocks`] rule (\[[#2568](import-js/eslint-plugin-import#2568)], thanks \[[@guilhermelimak](https://github.com/guilhermelimak)])- \[`prefer-default-export`]: add "target" option (\[[#2602](import-js/eslint-plugin-import#2602)], thanks \[[@azyzz228](https://github.com/azyzz228)])- \[`no-absolute-path`]: add fixer (\[[#2613](import-js/eslint-plugin-import#2613)], thanks \[[@adipascu](https://github.com/adipascu)])- \[`no-duplicates`]: support inline type import with `inlineTypeImport` option (\[[#2475](import-js/eslint-plugin-import#2475)], thanks \[[@snewcomer](https://github.com/snewcomer)])##### Fixed- \[`order`]: move nested imports closer to main import entry (\[[#2396](import-js/eslint-plugin-import#2396)], thanks \[[@pri1311](https://github.com/pri1311)])- \[`no-restricted-paths`]: fix an error message (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`no-restricted-paths`]: use `Minimatch.match` instead of `minimatch` to comply with Windows Native paths (\[[#2466](import-js/eslint-plugin-import#2466)], thanks \[[@AdriAt360](https://github.com/AdriAt360)])- \[`order`]: require with member expression could not be fixed if alphabetize.order was used (\[[#2490](import-js/eslint-plugin-import#2490)], thanks \[[@msvab](https://github.com/msvab)])- \[`order`]: leave more space in rankings for consecutive path groups (\[[#2506](import-js/eslint-plugin-import#2506)], thanks \[[@Pearce-Ropion](https://github.com/Pearce-Ropion)])- \[`no-cycle`]: add ExportNamedDeclaration statements to dependencies (\[[#2511](import-js/eslint-plugin-import#2511)], thanks \[[@BenoitZugmeyer](https://github.com/BenoitZugmeyer)])- \[`dynamic-import-chunkname`]: prevent false report on a valid webpack magic comment (\[[#2330](import-js/eslint-plugin-import#2330)], thanks \[[@MhMadHamster](https://github.com/mhmadhamster)])- \[`export`]: do not error on TS export overloads (\[[#1590](import-js/eslint-plugin-import#1590)], thanks \[[@ljharb](https://github.com/ljharb)])- \[`no-unresolved`], \[`extensions`]: ignore type only exports (\[[#2436](import-js/eslint-plugin-import#2436)], thanks \[[@Lukas-Kullmann](https://github.com/Lukas-Kullmann)])- `ExportMap`: add missing param to function (\[[#2589](import-js/eslint-plugin-import#2589)], thanks \[[@Fdawgs](https://github.com/Fdawgs)])- \[`no-unused-modules`]: `checkPkgFieldObject` filters boolean fields from checks (\[[#2598](import-js/eslint-plugin-import#2598)], thanks \[[@mpint](https://github.com/mpint)])- \[`no-cycle`]: accept Flow `typeof` imports, just like `type` (\[[#2608](import-js/eslint-plugin-import#2608)], thanks \[[@gnprice](https://github.com/gnprice)])- \[`no-import-module-exports`]: avoid a false positive for import variables (\[[#2315](import-js/eslint-plugin-import#2315)], thanks \[[@BarryThePenguin](https://github.com/BarryThePenguin)])##### Changed- \[Tests] \[`named`]: Run all TypeScript test (\[[#2427](import-js/eslint-plugin-import#2427)], thanks \[[@ProdigySim](https://github.com/ProdigySim)])- \[readme] note use of typescript in readme `import/extensions` section (\[[#2440](import-js/eslint-plugin-import#2440)], thanks \[[@OutdatedVersion](https://github.com/OutdatedVersion)])- \[Docs] \[`order`]: use correct default value (\[[#2392](import-js/eslint-plugin-import#2392)], thanks \[[@hyperupcall](https://github.com/hyperupcall)])- \[meta] replace git.io link in comments with the original URL (\[[#2444](import-js/eslint-plugin-import#2444)], thanks \[[@liby](https://github.com/liby)])- \[Docs] remove global install in readme (\[[#2412](import-js/eslint-plugin-import#2412)], thanks \[[@aladdin-add](https://github.com/aladdin-add)])- \[readme] clarify `eslint-import-resolver-typescript` usage (\[[#2503](import-js/eslint-plugin-import#2503)], thanks \[[@JounQin](https://github.com/JounQin)])- \[Refactor] \[`no-cycle`]: Add per-run caching of traversed paths (\[[#2419](import-js/eslint-plugin-import#2419)], thanks \[[@Nokel81](https://github.com/nokel81)])- \[Performance] `ExportMap`: add caching after parsing for an ambiguous module (\[[#2531](import-js/eslint-plugin-import#2531)], thanks \[[@stenin-nikita](https://github.com/stenin-nikita)])- \[Docs] \[`no-useless-path-segments`]: fix paths (\[[#2424](import-js/eslint-plugin-import#2424)], thanks \[[@s-h-a-d-o-w](https://github.com/s-h-a-d-o-w)])- \[Tests] \[`no-cycle`]: add passing test cases (\[[#2438](import-js/eslint-plugin-import#2438)], thanks \[[@georeith](https://github.com/georeith)])- \[Refactor] \[`no-extraneous-dependencies`] improve performance using cache (\[[#2374](import-js/eslint-plugin-import#2374)], thanks \[[@meowtec](https://github.com/meowtec)])- \[meta] `CONTRIBUTING.md`: mention inactive PRs (\[[#2546](import-js/eslint-plugin-import#2546)], thanks \[[@stropho](https://github.com/stropho)])- \[readme] make json for setting groups multiline (\[[#2570](import-js/eslint-plugin-import#2570)], thanks \[[@bertyhell](https://github.com/bertyhell)])- \[Tests] \[`no-restricted-paths`]: Tests for `import type` statements (\[[#2459](import-js/eslint-plugin-import#2459)], thanks \[[@golergka](https://github.com/golergka)])- \[Tests] \[`no-restricted-paths`]: fix one failing `import type` test case, submitted by \[[@golergka](https://github.com/golergka)], thanks \[[@azyzz228](https://github.com/azyzz228)]- \[Docs] automate docs with eslint-doc-generator (\[[#2582](import-js/eslint-plugin-import#2582)], thanks \[[@bmish](https://github.com/bmish)])- \[readme] Increase clarity around typescript configuration (\[[#2588](import-js/eslint-plugin-import#2588)], thanks \[[@Nfinished](https://github.com/Nfinished)])- \[Docs] update `eslint-doc-generator` to v1.0.0 (\[[#2605](import-js/eslint-plugin-import#2605)], thanks \[[@bmish](https://github.com/bmish)])- \[Perf] \[`no-cycle`], \[`no-internal-modules`], \[`no-restricted-paths`]: use `anyOf` instead of `oneOf` (thanks \[[@ljharb](https://github.com/ljharb)], \[[@remcohaszing](https://github.com/remcohaszing)])
Uh oh!
There was an error while loading.Please reload this page.
1fa2971 changed the way groups work when there is only one, leading to single nested groups being treated as though they were unnested. Prior to this, if you wanted to group e.g. builtin and external imports together at the top and everything else together as a second group, a single nested group was the way to do it
It appears that this change was unintentional, and was made to try to fix what seems to be a misunderstanding around nested groups ([#2687]).The docs continue to suggest that nested groups should be "mingled together" and makes no reference to a single nested group with no other groups being an invalid option
This therefore reverts the change to how groups work when there is only one. No documentation change should be necessary given this is already the described behaviour
Surfaced inministryofjustice/hmpps-accredited-programmes-ui#129
Closes#2687