Skip to content

Commit

Permalink
Feature: drop javascript-natural-sort dep (#28)
Browse files Browse the repository at this point in the history
This PR removes our reliance on natural-sort, an [npm package last
updated 9 years
ago!](https://www.npmjs.com/package/javascript-natural-sort)

Instead this uses
[`String.localeCompare(…)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare)
which is a built-in method supported on all Node versions we target.
Further this is a standard String api, so some shim implementation will
be present even if the user isn't running on Node! (eg. `deno` or other
runtimes)

Co-authored-by: Ian VanSchooten <ian.vanschooten@gmail.com>
  • Loading branch information
fbartho and IanVS committed Apr 24, 2023
1 parent 8cec197 commit 27f4663
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 17 deletions.
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@
"@babel/parser": "^7.17.7",
"@babel/traverse": "^7.17.3",
"@babel/types": "^7.17.0",
"javascript-natural-sort": "0.7.1",
"lodash.clone": "^4.5.0",
"lodash.isequal": "^4.5.0"
},
Expand Down
26 changes: 26 additions & 0 deletions src/natural-sort/__tests__/natural-sort.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { expect, test } from 'vitest';

import { naturalSort } from '..';

test('should sort normal things alphabetically', () => {
expect(
['a', 'h', 'b', 'i', 'c', 'd', 'j', 'e', 'k', 'f', 'g'].sort((a, b) =>
naturalSort(a, b),
),
).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']);
});

test('should ignore capitalization differences', () => {
// We have no option to cause case-sensitive sorting, so this is the "default" case!
expect(
['./ExampleView', './ExamplesList'].sort((a, b) => naturalSort(a, b)),
).toEqual(['./ExamplesList', './ExampleView']);
});

test('should sort things numerically', () => {
expect(
['a2', 'a3', 'a10', 'a1', 'a11', 'a9'].sort((a, b) =>
naturalSort(a, b),
),
).toEqual(['a1', 'a2', 'a3', 'a9', 'a10', 'a11']);
});
13 changes: 11 additions & 2 deletions src/natural-sort/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
import naturalSort from 'javascript-natural-sort';
export function naturalSort(a: string, b: string): number {
const left = typeof a === 'string' ? a : String(a);

export { naturalSort };
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator#syntax
const sortOptions: Intl.CollatorOptions = {
sensitivity: 'base',
numeric: true,
caseFirst: 'lower',
};

return left.localeCompare(b, 'en', sortOptions);
}
9 changes: 0 additions & 9 deletions src/natural-sort/natural-sort.d.ts

This file was deleted.

3 changes: 0 additions & 3 deletions src/utils/get-sorted-nodes-by-import-order.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import {
newLineNode,
THIRD_PARTY_MODULES_SPECIAL_WORD,
} from '../constants';
import { naturalSort } from '../natural-sort';
import { GetSortedNodes, ImportGroups, ImportOrLine } from '../types';
import { getImportNodesMatchedGroup } from './get-import-nodes-matched-group';
import { getSortedImportSpecifiers } from './get-sorted-import-specifiers';
Expand All @@ -19,8 +18,6 @@ import { getSortedNodesGroup } from './get-sorted-nodes-group';
* @param options Options to influence the behavior of the sorting algorithm.
*/
export const getSortedNodesByImportOrder: GetSortedNodes = (nodes, options) => {
naturalSort.insensitive = true;

let { importOrder } = options;
const { importOrderSortSpecifiers } = options;

Expand Down
2 changes: 0 additions & 2 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -721,8 +721,6 @@ has-flag@^3.0.0:
resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=

javascript-natural-sort@0.7.1:
version "0.7.1"
resolved "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz"
integrity sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=

Expand Down

0 comments on commit 27f4663

Please sign in to comment.