Skip to content

Commit f0f58ba

Browse files
committed
refactor: improves Join to handle - natively
1 parent f6e708a commit f0f58ba

5 files changed

+39
-75
lines changed

rules/sort-modules.types.ts

+14-43
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { JSONSchema4 } from '@typescript-eslint/utils/json-schema'
22

3-
import type { WithDashSuffixOrEmpty, Join } from '../typings'
3+
import type { Join } from '../typings'
44

55
import {
66
buildCustomGroupModifiersJsonSchema,
@@ -94,56 +94,33 @@ type Group =
9494
| 'unknown'
9595
| string
9696

97+
interface BaseSingleCustomGroup<T extends Selector> {
98+
modifiers?: AllowedModifiersPerSelector[T][]
99+
selector?: T
100+
}
101+
97102
type NonDefaultClassGroup = Join<
98-
[
99-
ExportModifierPrefix,
100-
DeclareModifierPrefix,
101-
DecoratedModifierPrefix,
102-
ClassSelector,
103-
]
103+
[ExportModifier, DeclareModifier, DecoratedModifier, ClassSelector]
104104
>
105105

106106
type DefaultFunctionGroup = Join<
107-
[
108-
ExportModifierPrefix,
109-
DefaultModifierPrefix,
110-
AsyncModifierPrefix,
111-
FunctionSelector,
112-
]
107+
[ExportModifier, DefaultModifier, AsyncModifier, FunctionSelector]
113108
>
114109

115110
type DefaultClassGroup = Join<
116-
[
117-
ExportModifierPrefix,
118-
DefaultModifierPrefix,
119-
DecoratedModifierPrefix,
120-
ClassSelector,
121-
]
111+
[ExportModifier, DefaultModifier, DecoratedModifier, ClassSelector]
122112
>
123113

124-
interface BaseSingleCustomGroup<T extends Selector> {
125-
modifiers?: AllowedModifiersPerSelector[T][]
126-
selector?: T
127-
}
128-
129114
type NonDefaultInterfaceGroup = Join<
130-
[ExportModifierPrefix, DeclareModifierPrefix, InterfaceSelector]
115+
[ExportModifier, DeclareModifier, InterfaceSelector]
131116
>
132117

133118
type NonDefaultFunctionGroup = Join<
134-
[ExportModifierPrefix, DeclareModifierPrefix, FunctionSelector]
119+
[ExportModifier, DeclareModifier, FunctionSelector]
135120
>
136121

137122
type DefaultInterfaceGroup = Join<
138-
[ExportModifierPrefix, DefaultModifierPrefix, InterfaceSelector]
139-
>
140-
141-
type TypeGroup = Join<
142-
[ExportModifierPrefix, DeclareModifierPrefix, TypeSelector]
143-
>
144-
145-
type EnumGroup = Join<
146-
[ExportModifierPrefix, DeclareModifierPrefix, EnumSelector]
123+
[ExportModifier, DefaultModifier, InterfaceSelector]
147124
>
148125

149126
interface DecoratorNamePatternFilterCustomGroup {
@@ -154,15 +131,9 @@ interface ElementNamePatternFilterCustomGroup {
154131
elementNamePattern?: string
155132
}
156133

157-
type DecoratedModifierPrefix = WithDashSuffixOrEmpty<DecoratedModifier>
158-
159-
type DeclareModifierPrefix = WithDashSuffixOrEmpty<DeclareModifier>
160-
161-
type DefaultModifierPrefix = WithDashSuffixOrEmpty<DefaultModifier>
162-
163-
type ExportModifierPrefix = WithDashSuffixOrEmpty<ExportModifier>
134+
type TypeGroup = Join<[ExportModifier, DeclareModifier, TypeSelector]>
164135

165-
type AsyncModifierPrefix = WithDashSuffixOrEmpty<AsyncModifier>
136+
type EnumGroup = Join<[ExportModifier, DeclareModifier, EnumSelector]>
166137

167138
type DecoratedModifier = 'decorated'
168139

rules/sort-object-types.types.ts

+19-28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { JSONSchema4 } from '@typescript-eslint/utils/json-schema'
22

3-
import type { WithDashSuffixOrEmpty, Join } from '../typings'
3+
import type { Join } from '../typings'
44

55
import {
66
buildCustomGroupModifiersJsonSchema,
@@ -75,27 +75,15 @@ type CustomGroup = (
7575
groupName: string
7676
}
7777

78-
type MemberGroup = Join<
79-
[
80-
OptionalModifierPrefix,
81-
RequiredModifierPrefix,
82-
MultilineModifierPrefix,
83-
MemberSelector,
84-
]
85-
>
86-
87-
type MethodGroup = Join<
78+
type IndexSignatureGroup = Join<
8879
[
89-
OptionalModifierPrefix,
90-
RequiredModifierPrefix,
91-
MultilineModifierPrefix,
92-
MethodSelector,
80+
OptionalModifier,
81+
RequiredModifier,
82+
MultilineModifier,
83+
IndexSignatureSelector,
9384
]
9485
>
9586

96-
type IndexSignatureGroup =
97-
`${OptionalModifierPrefix | RequiredModifierPrefix}${MultilineModifierPrefix}${IndexSignatureSelector}`
98-
9987
/**
10088
* Only used in code, so I don't know if it's worth maintaining this.
10189
*/
@@ -108,31 +96,34 @@ type Group =
10896
| 'unknown'
10997
| string
11098

111-
type PropertyGroup =
112-
`${OptionalModifierPrefix | RequiredModifierPrefix}${MultilineModifierPrefix}${PropertySelector}`
113-
11499
interface BaseSingleCustomGroup<T extends Selector> {
115100
modifiers?: AllowedModifiersPerSelector[T][]
116101
selector?: T
117102
}
118103

104+
type PropertyGroup = Join<
105+
[OptionalModifier, RequiredModifier, MultilineModifier, PropertySelector]
106+
>
107+
108+
type MemberGroup = Join<
109+
[OptionalModifier, RequiredModifier, MultilineModifier, MemberSelector]
110+
>
111+
112+
type MethodGroup = Join<
113+
[OptionalModifier, RequiredModifier, MultilineModifier, MethodSelector]
114+
>
115+
119116
/**
120117
* @deprecated For {@link `MultilineModifier`}
121118
*/
122119
type MultilineGroup = Join<
123-
[OptionalModifierPrefix, RequiredModifierPrefix, MultilineSelector]
120+
[OptionalModifier, RequiredModifier, MultilineSelector]
124121
>
125122

126123
interface ElementNamePatternFilterCustomGroup {
127124
elementNamePattern?: string
128125
}
129126

130-
type MultilineModifierPrefix = WithDashSuffixOrEmpty<MultilineModifier>
131-
132-
type RequiredModifierPrefix = WithDashSuffixOrEmpty<RequiredModifier>
133-
134-
type OptionalModifierPrefix = WithDashSuffixOrEmpty<OptionalModifier>
135-
136127
type IndexSignatureSelector = 'index-signature'
137128

138129
/**

typings/index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
export type { WithDashSuffixOrEmpty } from './with-dash-suffix-or-empty'
21
export type { SortingNode } from './sorting-node'
32
export type { Join } from './join'

typings/join.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,9 @@ export type Join<T extends string[]> = T extends [
22
infer First extends string,
33
...infer Rest extends string[],
44
]
5-
? `${First}${Join<Rest>}`
6-
: ''
5+
? Rest extends []
6+
? `${First}`
7+
: `${WithDashSuffixOrEmpty<First>}${Join<Rest>}`
8+
: never
9+
10+
type WithDashSuffixOrEmpty<T extends string> = `${T}-` | ''

typings/with-dash-suffix-or-empty.ts

-1
This file was deleted.

0 commit comments

Comments
 (0)