@etsoo/shared 1.1.89 → 1.1.90
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.
- package/README.md +2 -0
- package/__tests__/Utils.ts +23 -0
- package/lib/cjs/Utils.d.ts +15 -0
- package/lib/cjs/Utils.js +36 -0
- package/lib/mjs/Utils.d.ts +15 -0
- package/lib/mjs/Utils.js +36 -0
- package/package.json +3 -3
- package/src/Utils.ts +40 -0
package/README.md
CHANGED
|
@@ -272,6 +272,8 @@ String and other related utilities
|
|
|
272
272
|
|replaceNullOrEmpty|Replace null or empty with default value|
|
|
273
273
|
|setLabels|Set source with new labels|
|
|
274
274
|
|snakeNameToWord|Snake name to works, 'snake_name' to 'Snake Name'|
|
|
275
|
+
|sortByFavor|Sort array by favored values|
|
|
276
|
+
|sortByFieldFavor|Sort array by favored field values|
|
|
275
277
|
|trim|Trim chars|
|
|
276
278
|
|trimEnd|Trim end chars|
|
|
277
279
|
|trimStart|Trim start chars|
|
package/__tests__/Utils.ts
CHANGED
|
@@ -228,6 +228,29 @@ test('Tests for getResult', () => {
|
|
|
228
228
|
expect(valueResult).toBe(5);
|
|
229
229
|
});
|
|
230
230
|
|
|
231
|
+
test('Tests for sortByFavor', () => {
|
|
232
|
+
const items = [1, 2, 3, 4, 5, 6, 7];
|
|
233
|
+
expect(Utils.sortByFavor(items, [5, 1, 3])).toStrictEqual([
|
|
234
|
+
5, 1, 3, 2, 4, 6, 7
|
|
235
|
+
]);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
test('Tests for sortByFieldFavor', () => {
|
|
239
|
+
const options = [
|
|
240
|
+
{ id: 'a', name: 'a1' },
|
|
241
|
+
{ id: 'b', name: 'b2' },
|
|
242
|
+
{ id: 'c', name: 'c3' },
|
|
243
|
+
{ id: 'd', name: 'd4' },
|
|
244
|
+
{ id: 'e', name: 'e5' },
|
|
245
|
+
{ id: 'f', name: 'f6' }
|
|
246
|
+
];
|
|
247
|
+
expect(
|
|
248
|
+
Utils.sortByFieldFavor(options, 'id', ['e', 'a', 'c']).map(
|
|
249
|
+
(option) => option.name
|
|
250
|
+
)
|
|
251
|
+
).toStrictEqual(['e5', 'a1', 'c3', 'b2', 'd4', 'f6']);
|
|
252
|
+
});
|
|
253
|
+
|
|
231
254
|
test('Tests for trim', () => {
|
|
232
255
|
expect(Utils.trim('//a/', '/')).toBe('a');
|
|
233
256
|
expect(Utils.trim('/*/a/', ...['/', '*'])).toBe('a');
|
package/lib/cjs/Utils.d.ts
CHANGED
|
@@ -254,6 +254,21 @@ export declare namespace Utils {
|
|
|
254
254
|
* @param firstOnly Only convert the first word to upper case
|
|
255
255
|
*/
|
|
256
256
|
const snakeNameToWord: (name: string, firstOnly?: boolean) => string;
|
|
257
|
+
/**
|
|
258
|
+
* Sort array by favored values
|
|
259
|
+
* @param items Items
|
|
260
|
+
* @param favored Favored values
|
|
261
|
+
* @returns Sorted array
|
|
262
|
+
*/
|
|
263
|
+
const sortByFavor: <T>(items: T[], favored: T[]) => T[];
|
|
264
|
+
/**
|
|
265
|
+
* Sort array by favored field values
|
|
266
|
+
* @param items Items
|
|
267
|
+
* @param field Field to sort
|
|
268
|
+
* @param favored Favored field values
|
|
269
|
+
* @returns Sorted array
|
|
270
|
+
*/
|
|
271
|
+
const sortByFieldFavor: <T, F extends keyof T>(items: T[], field: F, favored: T[F][]) => T[];
|
|
257
272
|
/**
|
|
258
273
|
* Trim chars
|
|
259
274
|
* @param input Input string
|
package/lib/cjs/Utils.js
CHANGED
|
@@ -487,6 +487,42 @@ var Utils;
|
|
|
487
487
|
}
|
|
488
488
|
return items.map((part) => part.formatInitial(true)).join(' ');
|
|
489
489
|
};
|
|
490
|
+
function getSortValue(n1, n2) {
|
|
491
|
+
if (n1 === n2)
|
|
492
|
+
return 0;
|
|
493
|
+
if (n1 === -1)
|
|
494
|
+
return 1;
|
|
495
|
+
if (n2 === -1)
|
|
496
|
+
return -1;
|
|
497
|
+
return n1 - n2;
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Sort array by favored values
|
|
501
|
+
* @param items Items
|
|
502
|
+
* @param favored Favored values
|
|
503
|
+
* @returns Sorted array
|
|
504
|
+
*/
|
|
505
|
+
Utils.sortByFavor = (items, favored) => {
|
|
506
|
+
return items.sort((r1, r2) => {
|
|
507
|
+
const n1 = favored.indexOf(r1);
|
|
508
|
+
const n2 = favored.indexOf(r2);
|
|
509
|
+
return getSortValue(n1, n2);
|
|
510
|
+
});
|
|
511
|
+
};
|
|
512
|
+
/**
|
|
513
|
+
* Sort array by favored field values
|
|
514
|
+
* @param items Items
|
|
515
|
+
* @param field Field to sort
|
|
516
|
+
* @param favored Favored field values
|
|
517
|
+
* @returns Sorted array
|
|
518
|
+
*/
|
|
519
|
+
Utils.sortByFieldFavor = (items, field, favored) => {
|
|
520
|
+
return items.sort((r1, r2) => {
|
|
521
|
+
const n1 = favored.indexOf(r1[field]);
|
|
522
|
+
const n2 = favored.indexOf(r2[field]);
|
|
523
|
+
return getSortValue(n1, n2);
|
|
524
|
+
});
|
|
525
|
+
};
|
|
490
526
|
/**
|
|
491
527
|
* Trim chars
|
|
492
528
|
* @param input Input string
|
package/lib/mjs/Utils.d.ts
CHANGED
|
@@ -254,6 +254,21 @@ export declare namespace Utils {
|
|
|
254
254
|
* @param firstOnly Only convert the first word to upper case
|
|
255
255
|
*/
|
|
256
256
|
const snakeNameToWord: (name: string, firstOnly?: boolean) => string;
|
|
257
|
+
/**
|
|
258
|
+
* Sort array by favored values
|
|
259
|
+
* @param items Items
|
|
260
|
+
* @param favored Favored values
|
|
261
|
+
* @returns Sorted array
|
|
262
|
+
*/
|
|
263
|
+
const sortByFavor: <T>(items: T[], favored: T[]) => T[];
|
|
264
|
+
/**
|
|
265
|
+
* Sort array by favored field values
|
|
266
|
+
* @param items Items
|
|
267
|
+
* @param field Field to sort
|
|
268
|
+
* @param favored Favored field values
|
|
269
|
+
* @returns Sorted array
|
|
270
|
+
*/
|
|
271
|
+
const sortByFieldFavor: <T, F extends keyof T>(items: T[], field: F, favored: T[F][]) => T[];
|
|
257
272
|
/**
|
|
258
273
|
* Trim chars
|
|
259
274
|
* @param input Input string
|
package/lib/mjs/Utils.js
CHANGED
|
@@ -481,6 +481,42 @@ export var Utils;
|
|
|
481
481
|
}
|
|
482
482
|
return items.map((part) => part.formatInitial(true)).join(' ');
|
|
483
483
|
};
|
|
484
|
+
function getSortValue(n1, n2) {
|
|
485
|
+
if (n1 === n2)
|
|
486
|
+
return 0;
|
|
487
|
+
if (n1 === -1)
|
|
488
|
+
return 1;
|
|
489
|
+
if (n2 === -1)
|
|
490
|
+
return -1;
|
|
491
|
+
return n1 - n2;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Sort array by favored values
|
|
495
|
+
* @param items Items
|
|
496
|
+
* @param favored Favored values
|
|
497
|
+
* @returns Sorted array
|
|
498
|
+
*/
|
|
499
|
+
Utils.sortByFavor = (items, favored) => {
|
|
500
|
+
return items.sort((r1, r2) => {
|
|
501
|
+
const n1 = favored.indexOf(r1);
|
|
502
|
+
const n2 = favored.indexOf(r2);
|
|
503
|
+
return getSortValue(n1, n2);
|
|
504
|
+
});
|
|
505
|
+
};
|
|
506
|
+
/**
|
|
507
|
+
* Sort array by favored field values
|
|
508
|
+
* @param items Items
|
|
509
|
+
* @param field Field to sort
|
|
510
|
+
* @param favored Favored field values
|
|
511
|
+
* @returns Sorted array
|
|
512
|
+
*/
|
|
513
|
+
Utils.sortByFieldFavor = (items, field, favored) => {
|
|
514
|
+
return items.sort((r1, r2) => {
|
|
515
|
+
const n1 = favored.indexOf(r1[field]);
|
|
516
|
+
const n2 = favored.indexOf(r2[field]);
|
|
517
|
+
return getSortValue(n1, n2);
|
|
518
|
+
});
|
|
519
|
+
};
|
|
484
520
|
/**
|
|
485
521
|
* Trim chars
|
|
486
522
|
* @param input Input string
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etsoo/shared",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.90",
|
|
4
4
|
"description": "TypeScript shared utilities and functions",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/mjs/index.js",
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@types/jest": "^29.4.0",
|
|
58
58
|
"@types/lodash.isequal": "^4.5.6",
|
|
59
|
-
"jest": "^29.
|
|
60
|
-
"jest-environment-jsdom": "^29.
|
|
59
|
+
"jest": "^29.5.0",
|
|
60
|
+
"jest-environment-jsdom": "^29.5.0",
|
|
61
61
|
"ts-jest": "^29.0.5",
|
|
62
62
|
"typescript": "^4.9.5"
|
|
63
63
|
},
|
package/src/Utils.ts
CHANGED
|
@@ -661,6 +661,46 @@ export namespace Utils {
|
|
|
661
661
|
return items.map((part) => part.formatInitial(true)).join(' ');
|
|
662
662
|
};
|
|
663
663
|
|
|
664
|
+
function getSortValue(n1: number, n2: number) {
|
|
665
|
+
if (n1 === n2) return 0;
|
|
666
|
+
if (n1 === -1) return 1;
|
|
667
|
+
if (n2 === -1) return -1;
|
|
668
|
+
return n1 - n2;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
/**
|
|
672
|
+
* Sort array by favored values
|
|
673
|
+
* @param items Items
|
|
674
|
+
* @param favored Favored values
|
|
675
|
+
* @returns Sorted array
|
|
676
|
+
*/
|
|
677
|
+
export const sortByFavor = <T>(items: T[], favored: T[]) => {
|
|
678
|
+
return items.sort((r1, r2) => {
|
|
679
|
+
const n1 = favored.indexOf(r1);
|
|
680
|
+
const n2 = favored.indexOf(r2);
|
|
681
|
+
return getSortValue(n1, n2);
|
|
682
|
+
});
|
|
683
|
+
};
|
|
684
|
+
|
|
685
|
+
/**
|
|
686
|
+
* Sort array by favored field values
|
|
687
|
+
* @param items Items
|
|
688
|
+
* @param field Field to sort
|
|
689
|
+
* @param favored Favored field values
|
|
690
|
+
* @returns Sorted array
|
|
691
|
+
*/
|
|
692
|
+
export const sortByFieldFavor = <T, F extends keyof T>(
|
|
693
|
+
items: T[],
|
|
694
|
+
field: F,
|
|
695
|
+
favored: T[F][]
|
|
696
|
+
) => {
|
|
697
|
+
return items.sort((r1, r2) => {
|
|
698
|
+
const n1 = favored.indexOf(r1[field]);
|
|
699
|
+
const n2 = favored.indexOf(r2[field]);
|
|
700
|
+
return getSortValue(n1, n2);
|
|
701
|
+
});
|
|
702
|
+
};
|
|
703
|
+
|
|
664
704
|
/**
|
|
665
705
|
* Trim chars
|
|
666
706
|
* @param input Input string
|