eslint-plugin-perfectionist 3.1.1 → 3.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/rules/sort-array-includes.js +1 -1
  3. package/dist/rules/sort-array-includes.mjs +1 -1
  4. package/dist/rules/sort-astro-attributes.js +1 -1
  5. package/dist/rules/sort-astro-attributes.mjs +1 -1
  6. package/dist/rules/sort-classes.js +1 -1
  7. package/dist/rules/sort-classes.mjs +1 -1
  8. package/dist/rules/sort-enums.js +11 -5
  9. package/dist/rules/sort-enums.mjs +11 -5
  10. package/dist/rules/sort-exports.js +1 -1
  11. package/dist/rules/sort-exports.mjs +1 -1
  12. package/dist/rules/sort-imports.js +1 -1
  13. package/dist/rules/sort-imports.mjs +1 -1
  14. package/dist/rules/sort-interfaces.js +1 -1
  15. package/dist/rules/sort-interfaces.mjs +1 -1
  16. package/dist/rules/sort-intersection-types.js +1 -1
  17. package/dist/rules/sort-intersection-types.mjs +1 -1
  18. package/dist/rules/sort-jsx-props.js +1 -1
  19. package/dist/rules/sort-jsx-props.mjs +1 -1
  20. package/dist/rules/sort-maps.js +1 -1
  21. package/dist/rules/sort-maps.mjs +1 -1
  22. package/dist/rules/sort-named-exports.js +1 -1
  23. package/dist/rules/sort-named-exports.mjs +1 -1
  24. package/dist/rules/sort-named-imports.js +1 -1
  25. package/dist/rules/sort-named-imports.mjs +1 -1
  26. package/dist/rules/sort-object-types.js +1 -1
  27. package/dist/rules/sort-object-types.mjs +1 -1
  28. package/dist/rules/sort-objects.js +1 -1
  29. package/dist/rules/sort-objects.mjs +1 -1
  30. package/dist/rules/sort-svelte-attributes.js +1 -1
  31. package/dist/rules/sort-svelte-attributes.mjs +1 -1
  32. package/dist/rules/sort-switch-case.js +14 -4
  33. package/dist/rules/sort-switch-case.mjs +12 -4
  34. package/dist/rules/sort-union-types.js +1 -1
  35. package/dist/rules/sort-union-types.mjs +1 -1
  36. package/dist/rules/sort-variable-declarations.js +1 -1
  37. package/dist/rules/sort-variable-declarations.mjs +1 -1
  38. package/dist/rules/sort-vue-attributes.js +1 -1
  39. package/dist/rules/sort-vue-attributes.mjs +1 -1
  40. package/package.json +4 -4
package/dist/index.d.ts CHANGED
@@ -374,6 +374,6 @@ declare const _default: {
374
374
  }
375
375
  name: string
376
376
  }
377
- export default _default
378
377
 
379
378
  export {}
379
+ export = _default
@@ -95,8 +95,8 @@ const sortArrayIncludes = createEslintRule.createEslintRule({
95
95
  ? `${element.value}`
96
96
  : sourceCode.text.slice(...element.range),
97
97
  size: rangeToDiff.rangeToDiff(element.range),
98
- node: structuredClone(element),
99
98
  type: element.type,
99
+ node: element,
100
100
  group,
101
101
  })
102
102
  }
@@ -94,8 +94,8 @@ const sortArrayIncludes = createEslintRule({
94
94
  ? `${element.value}`
95
95
  : sourceCode.text.slice(...element.range),
96
96
  size: rangeToDiff(element.range),
97
- node: structuredClone(element),
98
97
  type: element.type,
98
+ node: element,
99
99
  group,
100
100
  })
101
101
  }
@@ -132,8 +132,8 @@ const sortAstroAttributes = createEslintRule.createEslintRule({
132
132
  defineGroup('multiline')
133
133
  }
134
134
  accumulator.at(-1).push({
135
- node: structuredClone(attribute),
136
135
  size: rangeToDiff.rangeToDiff(attribute.range),
136
+ node: attribute,
137
137
  group: getGroup(),
138
138
  name,
139
139
  })
@@ -132,8 +132,8 @@ const sortAstroAttributes = createEslintRule({
132
132
  defineGroup('multiline')
133
133
  }
134
134
  accumulator.at(-1).push({
135
- node: structuredClone(attribute),
136
135
  size: rangeToDiff(attribute.range),
136
+ node: attribute,
137
137
  group: getGroup(),
138
138
  name,
139
139
  })
@@ -304,8 +304,8 @@ const sortClasses = createEslintRule.createEslintRule({
304
304
  }
305
305
  let value = {
306
306
  size: rangeToDiff.rangeToDiff(member.range),
307
- node: structuredClone(member),
308
307
  group: getGroup(),
308
+ node: member,
309
309
  dependencies,
310
310
  name,
311
311
  }
@@ -301,8 +301,8 @@ const sortClasses = createEslintRule({
301
301
  }
302
302
  let value = {
303
303
  size: rangeToDiff(member.range),
304
- node: structuredClone(member),
305
304
  group: getGroup(),
305
+ node: member,
306
306
  dependencies,
307
307
  name,
308
308
  }
@@ -75,10 +75,16 @@ const sortEnums = createEslintRule.createEslintRule({
75
75
  ],
76
76
  create: context => ({
77
77
  TSEnumDeclaration: node => {
78
- let getMembers = nodeValue =>
79
- /* v8 ignore next 2 */
80
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
81
- node.body.members || nodeValue.members
78
+ let getMembers = nodeValue => {
79
+ var _a
80
+ return (
81
+ /* v8 ignore next 2 */
82
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
83
+ ((_a = node.body) == null ? void 0 : _a.members) ??
84
+ nodeValue.members ??
85
+ []
86
+ )
87
+ }
82
88
  if (
83
89
  getMembers(node).length > 1 &&
84
90
  getMembers(node).every(({ initializer }) => initializer)
@@ -110,7 +116,7 @@ const sortEnums = createEslintRule.createEslintRule({
110
116
  : `${sourceCode.text.slice(...member.id.range)}`
111
117
  let sortingNode = {
112
118
  size: rangeToDiff.rangeToDiff(member.range),
113
- node: structuredClone(member),
119
+ node: member,
114
120
  name,
115
121
  }
116
122
  accumulator.at(-1).push(sortingNode)
@@ -74,10 +74,16 @@ const sortEnums = createEslintRule({
74
74
  ],
75
75
  create: context => ({
76
76
  TSEnumDeclaration: node => {
77
- let getMembers = nodeValue =>
78
- /* v8 ignore next 2 */
79
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
80
- node.body.members || nodeValue.members
77
+ let getMembers = nodeValue => {
78
+ var _a
79
+ return (
80
+ /* v8 ignore next 2 */
81
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
82
+ ((_a = node.body) == null ? void 0 : _a.members) ??
83
+ nodeValue.members ??
84
+ []
85
+ )
86
+ }
81
87
  if (
82
88
  getMembers(node).length > 1 &&
83
89
  getMembers(node).every(({ initializer }) => initializer)
@@ -106,7 +112,7 @@ const sortEnums = createEslintRule({
106
112
  : `${sourceCode.text.slice(...member.id.range)}`
107
113
  let sortingNode = {
108
114
  size: rangeToDiff(member.range),
109
- node: structuredClone(member),
115
+ node: member,
110
116
  name,
111
117
  }
112
118
  accumulator.at(-1).push(sortingNode)
@@ -61,8 +61,8 @@ const sortExports = createEslintRule.createEslintRule({
61
61
  let registerNode = node => {
62
62
  parts.at(-1).push({
63
63
  size: rangeToDiff.rangeToDiff(node.range),
64
- node: structuredClone(node),
65
64
  name: node.source.value,
65
+ node,
66
66
  })
67
67
  }
68
68
  return {
@@ -60,8 +60,8 @@ const sortExports = createEslintRule({
60
60
  let registerNode = node => {
61
61
  parts.at(-1).push({
62
62
  size: rangeToDiff(node.range),
63
- node: structuredClone(node),
64
63
  name: node.source.value,
64
+ node,
65
65
  })
66
66
  }
67
67
  return {
@@ -343,8 +343,8 @@ const sortImports = createEslintRule.createEslintRule({
343
343
  }
344
344
  nodes.push({
345
345
  size: rangeToDiff.rangeToDiff(node.range),
346
- node: structuredClone(node),
347
346
  group: computeGroup(node),
347
+ node,
348
348
  name,
349
349
  ...(options.type === 'line-length' &&
350
350
  options.maxLineLength && {
@@ -338,8 +338,8 @@ const sortImports = createEslintRule({
338
338
  }
339
339
  nodes.push({
340
340
  size: rangeToDiff(node.range),
341
- node: structuredClone(node),
342
341
  group: computeGroup(node),
342
+ node,
343
343
  name,
344
344
  ...(options.type === 'line-length' &&
345
345
  options.maxLineLength && {
@@ -176,7 +176,7 @@ const sortInterfaces = createEslintRule.createEslintRule({
176
176
  }
177
177
  let elementSortingNode = {
178
178
  size: rangeToDiff.rangeToDiff(element.range),
179
- node: structuredClone(element),
179
+ node: element,
180
180
  name,
181
181
  }
182
182
  if (
@@ -176,7 +176,7 @@ const sortInterfaces = createEslintRule({
176
176
  }
177
177
  let elementSortingNode = {
178
178
  size: rangeToDiff(element.range),
179
- node: structuredClone(element),
179
+ node: element,
180
180
  name,
181
181
  }
182
182
  if (
@@ -145,8 +145,8 @@ const sortIntersectionTypes = createEslintRule.createEslintRule({
145
145
  return {
146
146
  name: sourceCode.text.slice(...type.range),
147
147
  size: rangeToDiff.rangeToDiff(type.range),
148
- node: structuredClone(type),
149
148
  group: getGroup(),
149
+ node: type,
150
150
  }
151
151
  })
152
152
  pairwise.pairwise(nodes, (left, right) => {
@@ -144,8 +144,8 @@ const sortIntersectionTypes = createEslintRule({
144
144
  return {
145
145
  name: sourceCode.text.slice(...type.range),
146
146
  size: rangeToDiff(type.range),
147
- node: structuredClone(type),
148
147
  group: getGroup(),
148
+ node: type,
149
149
  }
150
150
  })
151
151
  pairwise(nodes, (left, right) => {
@@ -141,8 +141,8 @@ const sortJsxProps = createEslintRule.createEslintRule({
141
141
  }
142
142
  let jsxNode = {
143
143
  size: rangeToDiff.rangeToDiff(attribute.range),
144
- node: structuredClone(attribute),
145
144
  group: getGroup(),
145
+ node: attribute,
146
146
  name,
147
147
  }
148
148
  accumulator.at(-1).push(jsxNode)
@@ -141,8 +141,8 @@ const sortJsxProps = createEslintRule({
141
141
  }
142
142
  let jsxNode = {
143
143
  size: rangeToDiff(attribute.range),
144
- node: structuredClone(attribute),
145
144
  group: getGroup(),
145
+ node: attribute,
146
146
  name,
147
147
  }
148
148
  accumulator.at(-1).push(jsxNode)
@@ -99,7 +99,7 @@ const sortMaps = createEslintRule.createEslintRule({
99
99
  }
100
100
  return {
101
101
  size: rangeToDiff.rangeToDiff(element.range),
102
- node: structuredClone(element),
102
+ node: element,
103
103
  name,
104
104
  }
105
105
  })
@@ -98,7 +98,7 @@ const sortMaps = createEslintRule({
98
98
  }
99
99
  return {
100
100
  size: rangeToDiff(element.range),
101
- node: structuredClone(element),
101
+ node: element,
102
102
  name,
103
103
  }
104
104
  })
@@ -78,8 +78,8 @@ const sortNamedExports = createEslintRule.createEslintRule({
78
78
  }
79
79
  return {
80
80
  size: rangeToDiff.rangeToDiff(specifier.range),
81
- node: structuredClone(specifier),
82
81
  name: specifier.local.name,
82
+ node: specifier,
83
83
  group,
84
84
  }
85
85
  })
@@ -77,8 +77,8 @@ const sortNamedExports = createEslintRule({
77
77
  }
78
78
  return {
79
79
  size: rangeToDiff(specifier.range),
80
- node: structuredClone(specifier),
81
80
  name: specifier.local.name,
81
+ node: specifier,
82
82
  group,
83
83
  }
84
84
  })
@@ -94,7 +94,7 @@ const sortNamedImports = createEslintRule.createEslintRule({
94
94
  }
95
95
  return {
96
96
  size: rangeToDiff.rangeToDiff(specifier.range),
97
- node: structuredClone(specifier),
97
+ node: specifier,
98
98
  group,
99
99
  name,
100
100
  }
@@ -93,7 +93,7 @@ const sortNamedImports = createEslintRule({
93
93
  }
94
94
  return {
95
95
  size: rangeToDiff(specifier.range),
96
- node: structuredClone(specifier),
96
+ node: specifier,
97
97
  group,
98
98
  name,
99
99
  }
@@ -164,7 +164,7 @@ const sortObjectTypes = createEslintRule.createEslintRule({
164
164
  let endSize = endsWithComma ? 1 : 0
165
165
  let memberSortingNode = {
166
166
  size: rangeToDiff.rangeToDiff(member.range) - endSize,
167
- node: structuredClone(member),
167
+ node: member,
168
168
  name,
169
169
  }
170
170
  if (
@@ -164,7 +164,7 @@ const sortObjectTypes = createEslintRule({
164
164
  let endSize = endsWithComma ? 1 : 0
165
165
  let memberSortingNode = {
166
166
  size: rangeToDiff(member.range) - endSize,
167
- node: structuredClone(member),
167
+ node: member,
168
168
  name,
169
169
  }
170
170
  if (
@@ -252,7 +252,7 @@ const sortObjects = createEslintRule.createEslintRule({
252
252
  }
253
253
  let propSortingNode = {
254
254
  size: rangeToDiff.rangeToDiff(prop.range),
255
- node: structuredClone(prop),
255
+ node: prop,
256
256
  name,
257
257
  }
258
258
  if (
@@ -243,7 +243,7 @@ const sortObjects = createEslintRule({
243
243
  }
244
244
  let propSortingNode = {
245
245
  size: rangeToDiff(prop.range),
246
- node: structuredClone(prop),
246
+ node: prop,
247
247
  name,
248
248
  }
249
249
  if (
@@ -139,7 +139,7 @@ const sortSvelteAttributes = createEslintRule.createEslintRule({
139
139
  defineGroup('multiline')
140
140
  }
141
141
  accumulator.at(-1).push({
142
- node: structuredClone(attribute),
142
+ node: attribute,
143
143
  size: rangeToDiff.rangeToDiff(attribute.range),
144
144
  group: getGroup(),
145
145
  name,
@@ -139,7 +139,7 @@ const sortSvelteAttributes = createEslintRule({
139
139
  defineGroup('multiline')
140
140
  }
141
141
  accumulator.at(-1).push({
142
- node: structuredClone(attribute),
142
+ node: attribute,
143
143
  size: rangeToDiff(attribute.range),
144
144
  group: getGroup(),
145
145
  name,
@@ -88,7 +88,7 @@ const sortSwitchCase = createEslintRule.createEslintRule({
88
88
  ((_b = caseNode.test) == null ? void 0 : _b.range) ??
89
89
  caseNode.range,
90
90
  ),
91
- node: structuredClone(caseNode),
91
+ node: caseNode,
92
92
  name,
93
93
  }
94
94
  })
@@ -142,7 +142,7 @@ const sortSwitchCase = createEslintRule.createEslintRule({
142
142
  node: right.node,
143
143
  fix: fixer => {
144
144
  let additionalFixes = []
145
- let nodeGroups = structuredClone(nodes).reduce(
145
+ let nodeGroups = nodes.reduce(
146
146
  (accumulator, currentNode, index) => {
147
147
  var _a
148
148
  if (index === 0) {
@@ -163,10 +163,20 @@ const sortSwitchCase = createEslintRule.createEslintRule({
163
163
  let sortedNodeGroups = nodeGroups
164
164
  .map(group => {
165
165
  var _a, _b
166
- let sortedGroup = sortNodes.sortNodes(group, options)
166
+ let sortedGroup = sortNodes
167
+ .sortNodes(group, options)
168
+ .sort((a, b) => {
169
+ if (b.name === 'default') {
170
+ return -1
171
+ }
172
+ return 1
173
+ })
167
174
  if (group.at(-1).name !== sortedGroup.at(-1).name) {
175
+ let consequentNodeIndex = sortedGroup.findIndex(
176
+ currentNode => currentNode.node.consequent.length !== 0,
177
+ )
168
178
  let firstSortedNodeConsequent =
169
- sortedGroup.at(0).node.consequent
179
+ sortedGroup.at(consequentNodeIndex).node.consequent
170
180
  let consequentStart =
171
181
  (_a = firstSortedNodeConsequent.at(0)) == null
172
182
  ? void 0
@@ -87,7 +87,7 @@ const sortSwitchCase = createEslintRule({
87
87
  ((_b = caseNode.test) == null ? void 0 : _b.range) ??
88
88
  caseNode.range,
89
89
  ),
90
- node: structuredClone(caseNode),
90
+ node: caseNode,
91
91
  name,
92
92
  }
93
93
  })
@@ -137,7 +137,7 @@ const sortSwitchCase = createEslintRule({
137
137
  node: right.node,
138
138
  fix: fixer => {
139
139
  let additionalFixes = []
140
- let nodeGroups = structuredClone(nodes).reduce(
140
+ let nodeGroups = nodes.reduce(
141
141
  (accumulator, currentNode, index) => {
142
142
  var _a
143
143
  if (index === 0) {
@@ -158,10 +158,18 @@ const sortSwitchCase = createEslintRule({
158
158
  let sortedNodeGroups = nodeGroups
159
159
  .map(group => {
160
160
  var _a, _b
161
- let sortedGroup = sortNodes(group, options)
161
+ let sortedGroup = sortNodes(group, options).sort((a, b) => {
162
+ if (b.name === 'default') {
163
+ return -1
164
+ }
165
+ return 1
166
+ })
162
167
  if (group.at(-1).name !== sortedGroup.at(-1).name) {
168
+ let consequentNodeIndex = sortedGroup.findIndex(
169
+ currentNode => currentNode.node.consequent.length !== 0,
170
+ )
163
171
  let firstSortedNodeConsequent =
164
- sortedGroup.at(0).node.consequent
172
+ sortedGroup.at(consequentNodeIndex).node.consequent
165
173
  let consequentStart =
166
174
  (_a = firstSortedNodeConsequent.at(0)) == null
167
175
  ? void 0
@@ -145,8 +145,8 @@ const sortUnionTypes = createEslintRule.createEslintRule({
145
145
  return {
146
146
  name: sourceCode.text.slice(...type.range),
147
147
  size: rangeToDiff.rangeToDiff(type.range),
148
- node: structuredClone(type),
149
148
  group: getGroup(),
149
+ node: type,
150
150
  }
151
151
  })
152
152
  pairwise.pairwise(nodes, (left, right) => {
@@ -144,8 +144,8 @@ const sortUnionTypes = createEslintRule({
144
144
  return {
145
145
  name: sourceCode.text.slice(...type.range),
146
146
  size: rangeToDiff(type.range),
147
- node: structuredClone(type),
148
147
  group: getGroup(),
148
+ node: type,
149
149
  }
150
150
  })
151
151
  pairwise(nodes, (left, right) => {
@@ -111,7 +111,7 @@ const sortVariableDeclarations = createEslintRule.createEslintRule({
111
111
  let dependencies = extractDependencies(declaration.init)
112
112
  return {
113
113
  size: rangeToDiff.rangeToDiff(declaration.range),
114
- node: structuredClone(declaration),
114
+ node: declaration,
115
115
  dependencies,
116
116
  name,
117
117
  }
@@ -110,7 +110,7 @@ const sortVariableDeclarations = createEslintRule({
110
110
  let dependencies = extractDependencies(declaration.init)
111
111
  return {
112
112
  size: rangeToDiff(declaration.range),
113
- node: structuredClone(declaration),
113
+ node: declaration,
114
114
  dependencies,
115
115
  name,
116
116
  }
@@ -138,7 +138,7 @@ const sortVueAttributes = createEslintRule.createEslintRule({
138
138
  defineGroup('multiline')
139
139
  }
140
140
  accumulator.at(-1).push({
141
- node: structuredClone(attribute),
141
+ node: attribute,
142
142
  size: rangeToDiff.rangeToDiff(attribute.range),
143
143
  group: getGroup(),
144
144
  name,
@@ -138,7 +138,7 @@ const sortVueAttributes = createEslintRule({
138
138
  defineGroup('multiline')
139
139
  }
140
140
  accumulator.at(-1).push({
141
- node: structuredClone(attribute),
141
+ node: attribute,
142
142
  size: rangeToDiff(attribute.range),
143
143
  group: getGroup(),
144
144
  name,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eslint-plugin-perfectionist",
3
3
  "description": "ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.",
4
- "version": "3.1.1",
4
+ "version": "3.1.3",
5
5
  "homepage": "https://perfectionist.dev",
6
6
  "repository": "azat-io/eslint-plugin-perfectionist",
7
7
  "author": "Azat S. <to@azat.io>",
@@ -49,12 +49,12 @@
49
49
  "astro-eslint-parser": "^1.0.2",
50
50
  "eslint": ">=8.0.0",
51
51
  "svelte": ">=3.0.0",
52
- "svelte-eslint-parser": "^0.40.0",
52
+ "svelte-eslint-parser": "^0.41.0",
53
53
  "vue-eslint-parser": ">=9.0.0"
54
54
  },
55
55
  "dependencies": {
56
- "@typescript-eslint/types": "^8.0.0",
57
- "@typescript-eslint/utils": "^8.0.0",
56
+ "@typescript-eslint/types": "^8.0.1",
57
+ "@typescript-eslint/utils": "^8.0.1",
58
58
  "minimatch": "^10.0.1",
59
59
  "natural-compare-lite": "^1.4.0"
60
60
  }