@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 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|
@@ -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');
@@ -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
@@ -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.89",
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.4.3",
60
- "jest-environment-jsdom": "^29.4.3",
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