@@ -34,6 +34,22 @@ const sortObjectBy = (comparator, deep) => {
3434
3535 return over
3636}
37+ const objectGroupBy =
38+ // eslint-disable-next-line n/no-unsupported-features/es-builtins, n/no-unsupported-features/es-syntax -- Safe
39+ Object . groupBy ||
40+ // Remove this when we drop support for Node.js 20
41+ ( ( array , callback ) => {
42+ const result = Object . create ( null )
43+ for ( const value of array ) {
44+ const key = callback ( value )
45+ if ( result [ key ] ) {
46+ result [ key ] . push ( value )
47+ } else {
48+ result [ key ] = [ value ]
49+ }
50+ }
51+ return result
52+ } )
3753const sortObject = sortObjectBy ( )
3854const sortURLObject = sortObjectBy ( [ 'type' , 'url' ] )
3955const sortPeopleObject = sortObjectBy ( [ 'name' , 'email' , 'url' ] )
@@ -414,7 +430,7 @@ const sortScripts = onObject((scripts, packageJson) => {
414430- Move `default` condition to bottom
415431*/
416432const sortConditions = ( conditions ) => {
417- const { defaultConditions = [ ] , restConditions = [ ] } = Object . groupBy (
433+ const { defaultConditions = [ ] , restConditions = [ ] } = objectGroupBy (
418434 conditions ,
419435 ( condition ) => {
420436 if ( condition === 'default' ) {
@@ -429,7 +445,7 @@ const sortConditions = (conditions) => {
429445}
430446
431447const sortExports = onObject ( ( exports ) => {
432- const { paths = [ ] , conditions = [ ] } = Object . groupBy (
448+ const { paths = [ ] , conditions = [ ] } = objectGroupBy (
433449 Object . keys ( exports ) ,
434450 ( key ) => ( key . startsWith ( '.' ) ? 'paths' : 'conditions' ) ,
435451 )
@@ -619,7 +635,7 @@ function sortPackageJson(jsonIsh, options = {}) {
619635
620636 if ( Array . isArray ( sortOrder ) ) {
621637 const keys = Object . keys ( json )
622- const { privateKeys = [ ] , publicKeys = [ ] } = Object . groupBy (
638+ const { privateKeys = [ ] , publicKeys = [ ] } = objectGroupBy (
623639 keys ,
624640 ( key ) => ( key [ 0 ] === '_' ? 'privateKeys' : 'publicKeys' ) ,
625641 )
0 commit comments