feat: add project alias type

This commit is contained in:
2023-06-08 09:57:56 +00:00
parent 0cb75f0658
commit f22fde7f4b
2 changed files with 2930 additions and 1291 deletions
+1624 -2
View File
File diff suppressed because it is too large Load Diff
+21 -4
View File
@@ -9,6 +9,8 @@ import { IImport } from "import-sort-parser";
export default function (styleApi: IStyleAPI): IStyleItem[] {
const {
and,
or,
not,
always,
dotSegmentCount,
isAbsoluteModule,
@@ -19,6 +21,10 @@ export default function (styleApi: IStyleAPI): IStyleItem[] {
unicode,
} = styleApi;
const isProjectAlias = (i: IImport) => {
return i.moduleName.startsWith('@/');
}
// comparator function which place non-alphanumeric first
const natural: IComparatorFunction = (a: string, b: string) => {
if (a === b) {
@@ -43,15 +49,20 @@ export default function (styleApi: IStyleAPI): IStyleItem[] {
aHasOnlyDefaultMember =
aHasDefaultMember && !aHasNamespaceMember && !aHasNamedMember,
aHasOnlyNamespaceMember =
aHasNamespaceMember && !aHasDefaultMember && !aHasNamedMember;
aHasNamespaceMember && !aHasDefaultMember && !aHasNamedMember,
aIsStyle = /(css|scss|less)$/.test(a.moduleName);
const bHasDefaultMember = Boolean(b.defaultMember),
bHasNamespaceMember = Boolean(b.namespaceMember),
bHasNamedMember = Boolean(b.namedMembers[0]?.name),
bHasOnlyDefaultMember =
bHasDefaultMember && !bHasNamespaceMember && !bHasNamedMember,
bHasOnlyNamespaceMember =
bHasNamespaceMember && !bHasDefaultMember && !bHasNamedMember;
if (aHasOnlyNamespaceMember !== bHasOnlyNamespaceMember) {
bHasNamespaceMember && !bHasDefaultMember && !bHasNamedMember,
bIsStyle = /(css|scss|less)$/.test(b.moduleName);
if (aIsStyle !== bIsStyle) {
// place styles import later
return aIsStyle ? -1 : 1;
} else if (aHasOnlyNamespaceMember !== bHasOnlyNamespaceMember) {
return aHasOnlyNamespaceMember ? -1 : 1;
} else if (aHasOnlyDefaultMember !== bHasOnlyDefaultMember) {
return aHasOnlyDefaultMember ? -1 : 1;
@@ -85,7 +96,13 @@ export default function (styleApi: IStyleAPI): IStyleItem[] {
},
// absolute
{
match: isAbsoluteModule,
match: and(isAbsoluteModule, not(isProjectAlias)),
sort: memberOrModule(natural),
sortNamedMembers: name(natural),
},
// project alias
{
match: isProjectAlias,
sort: memberOrModule(natural),
sortNamedMembers: name(natural),
},