@etsoo/shared 1.2.79 → 1.2.80
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 +1 -0
- package/__tests__/Utils.ts +14 -0
- package/lib/cjs/Utils.d.ts +9 -0
- package/lib/cjs/Utils.js +36 -0
- package/lib/mjs/Utils.d.ts +9 -0
- package/lib/mjs/Utils.js +36 -0
- package/package.json +5 -5
- package/src/Utils.ts +38 -0
package/README.md
CHANGED
|
@@ -324,6 +324,7 @@ String and other related utilities
|
|
|
324
324
|
| objectKeys | Get two object's unqiue properties |
|
|
325
325
|
| objectUpdated | Get the new object's updated fields contrast to the previous object |
|
|
326
326
|
| parseJsonArray | Try to parse JSON input to array |
|
|
327
|
+
| parseName | Parse name data |
|
|
327
328
|
| parsePath | Parse path similar with node.js path.parse |
|
|
328
329
|
| parseString | Parse string (JSON) to specific type |
|
|
329
330
|
| removeEmptyValues | Remove empty values (null, undefined, '') from the input object |
|
package/__tests__/Utils.ts
CHANGED
|
@@ -356,6 +356,20 @@ test("Tests for getResult", () => {
|
|
|
356
356
|
expect(valueResult).toBe(5);
|
|
357
357
|
});
|
|
358
358
|
|
|
359
|
+
test("Tests for parseName", () => {
|
|
360
|
+
const nd = Utils.parseName("王小明");
|
|
361
|
+
expect(nd.familyName).toBe("王");
|
|
362
|
+
expect(nd.givenName).toBe("小明");
|
|
363
|
+
|
|
364
|
+
const nd2 = Utils.parseName("John Smith");
|
|
365
|
+
expect(nd2.familyName).toBe("Smith");
|
|
366
|
+
expect(nd2.givenName).toBe("John");
|
|
367
|
+
|
|
368
|
+
const nd3 = Utils.parseName("单 名");
|
|
369
|
+
expect(nd3.familyName).toBe("单");
|
|
370
|
+
expect(nd3.givenName).toBe("名");
|
|
371
|
+
});
|
|
372
|
+
|
|
359
373
|
test("Tests for parsePath, file only", () => {
|
|
360
374
|
const result = Utils.parsePath("a.jpg");
|
|
361
375
|
expect(result.root).toBe("");
|
package/lib/cjs/Utils.d.ts
CHANGED
|
@@ -306,6 +306,15 @@ export declare namespace Utils {
|
|
|
306
306
|
* @param keepNull Keep null value or not
|
|
307
307
|
*/
|
|
308
308
|
export function setNestedValue(data: object, name: string, value: unknown, keepNull?: boolean): void;
|
|
309
|
+
/**
|
|
310
|
+
* Parse name
|
|
311
|
+
* @param name Name
|
|
312
|
+
* @returns Result
|
|
313
|
+
*/
|
|
314
|
+
export function parseName(name: string): {
|
|
315
|
+
familyName: string | undefined;
|
|
316
|
+
givenName: string | undefined;
|
|
317
|
+
};
|
|
309
318
|
/**
|
|
310
319
|
* Parse path similar with node.js path.parse
|
|
311
320
|
* @param path Input path
|
package/lib/cjs/Utils.js
CHANGED
|
@@ -647,6 +647,42 @@ var Utils;
|
|
|
647
647
|
}
|
|
648
648
|
}
|
|
649
649
|
Utils.setNestedValue = setNestedValue;
|
|
650
|
+
/**
|
|
651
|
+
* Parse name
|
|
652
|
+
* @param name Name
|
|
653
|
+
* @returns Result
|
|
654
|
+
*/
|
|
655
|
+
function parseName(name) {
|
|
656
|
+
// Trim
|
|
657
|
+
name = name.trim();
|
|
658
|
+
let familyName;
|
|
659
|
+
let givenName;
|
|
660
|
+
if (name.containChinese() ||
|
|
661
|
+
name.containJapanese() ||
|
|
662
|
+
name.containKorean()) {
|
|
663
|
+
// CJK characters
|
|
664
|
+
if (name.length >= 2) {
|
|
665
|
+
familyName = name[0];
|
|
666
|
+
givenName = name.substring(1).trim();
|
|
667
|
+
}
|
|
668
|
+
else {
|
|
669
|
+
familyName = name;
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
else {
|
|
673
|
+
const parts = name.split(/\s+/);
|
|
674
|
+
const len = parts.length;
|
|
675
|
+
if (len >= 2) {
|
|
676
|
+
familyName = parts[len - 1];
|
|
677
|
+
givenName = parts[0];
|
|
678
|
+
}
|
|
679
|
+
else {
|
|
680
|
+
givenName = name;
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
return { familyName, givenName };
|
|
684
|
+
}
|
|
685
|
+
Utils.parseName = parseName;
|
|
650
686
|
/**
|
|
651
687
|
* Parse path similar with node.js path.parse
|
|
652
688
|
* @param path Input path
|
package/lib/mjs/Utils.d.ts
CHANGED
|
@@ -306,6 +306,15 @@ export declare namespace Utils {
|
|
|
306
306
|
* @param keepNull Keep null value or not
|
|
307
307
|
*/
|
|
308
308
|
export function setNestedValue(data: object, name: string, value: unknown, keepNull?: boolean): void;
|
|
309
|
+
/**
|
|
310
|
+
* Parse name
|
|
311
|
+
* @param name Name
|
|
312
|
+
* @returns Result
|
|
313
|
+
*/
|
|
314
|
+
export function parseName(name: string): {
|
|
315
|
+
familyName: string | undefined;
|
|
316
|
+
givenName: string | undefined;
|
|
317
|
+
};
|
|
309
318
|
/**
|
|
310
319
|
* Parse path similar with node.js path.parse
|
|
311
320
|
* @param path Input path
|
package/lib/mjs/Utils.js
CHANGED
|
@@ -644,6 +644,42 @@ export var Utils;
|
|
|
644
644
|
}
|
|
645
645
|
}
|
|
646
646
|
Utils.setNestedValue = setNestedValue;
|
|
647
|
+
/**
|
|
648
|
+
* Parse name
|
|
649
|
+
* @param name Name
|
|
650
|
+
* @returns Result
|
|
651
|
+
*/
|
|
652
|
+
function parseName(name) {
|
|
653
|
+
// Trim
|
|
654
|
+
name = name.trim();
|
|
655
|
+
let familyName;
|
|
656
|
+
let givenName;
|
|
657
|
+
if (name.containChinese() ||
|
|
658
|
+
name.containJapanese() ||
|
|
659
|
+
name.containKorean()) {
|
|
660
|
+
// CJK characters
|
|
661
|
+
if (name.length >= 2) {
|
|
662
|
+
familyName = name[0];
|
|
663
|
+
givenName = name.substring(1).trim();
|
|
664
|
+
}
|
|
665
|
+
else {
|
|
666
|
+
familyName = name;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
else {
|
|
670
|
+
const parts = name.split(/\s+/);
|
|
671
|
+
const len = parts.length;
|
|
672
|
+
if (len >= 2) {
|
|
673
|
+
familyName = parts[len - 1];
|
|
674
|
+
givenName = parts[0];
|
|
675
|
+
}
|
|
676
|
+
else {
|
|
677
|
+
givenName = name;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
return { familyName, givenName };
|
|
681
|
+
}
|
|
682
|
+
Utils.parseName = parseName;
|
|
647
683
|
/**
|
|
648
684
|
* Parse path similar with node.js path.parse
|
|
649
685
|
* @param path Input path
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etsoo/shared",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.80",
|
|
4
4
|
"description": "TypeScript shared utilities and functions",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/mjs/index.js",
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
},
|
|
37
37
|
"homepage": "https://github.com/ETSOO/Shared#readme",
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@types/node": "^24.10.
|
|
40
|
-
"@vitejs/plugin-react": "^5.1.
|
|
41
|
-
"jsdom": "^27.
|
|
39
|
+
"@types/node": "^24.10.1",
|
|
40
|
+
"@vitejs/plugin-react": "^5.1.1",
|
|
41
|
+
"jsdom": "^27.2.0",
|
|
42
42
|
"typescript": "^5.9.3",
|
|
43
|
-
"vitest": "^4.0.
|
|
43
|
+
"vitest": "^4.0.10"
|
|
44
44
|
}
|
|
45
45
|
}
|
package/src/Utils.ts
CHANGED
|
@@ -899,6 +899,44 @@ export namespace Utils {
|
|
|
899
899
|
}
|
|
900
900
|
}
|
|
901
901
|
|
|
902
|
+
/**
|
|
903
|
+
* Parse name
|
|
904
|
+
* @param name Name
|
|
905
|
+
* @returns Result
|
|
906
|
+
*/
|
|
907
|
+
export function parseName(name: string) {
|
|
908
|
+
// Trim
|
|
909
|
+
name = name.trim();
|
|
910
|
+
|
|
911
|
+
let familyName: string | undefined;
|
|
912
|
+
let givenName: string | undefined;
|
|
913
|
+
|
|
914
|
+
if (
|
|
915
|
+
name.containChinese() ||
|
|
916
|
+
name.containJapanese() ||
|
|
917
|
+
name.containKorean()
|
|
918
|
+
) {
|
|
919
|
+
// CJK characters
|
|
920
|
+
if (name.length >= 2) {
|
|
921
|
+
familyName = name[0];
|
|
922
|
+
givenName = name.substring(1).trim();
|
|
923
|
+
} else {
|
|
924
|
+
familyName = name;
|
|
925
|
+
}
|
|
926
|
+
} else {
|
|
927
|
+
const parts = name.split(/\s+/);
|
|
928
|
+
const len = parts.length;
|
|
929
|
+
if (len >= 2) {
|
|
930
|
+
familyName = parts[len - 1];
|
|
931
|
+
givenName = parts[0];
|
|
932
|
+
} else {
|
|
933
|
+
givenName = name;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
return { familyName, givenName };
|
|
938
|
+
}
|
|
939
|
+
|
|
902
940
|
/**
|
|
903
941
|
* Parse path similar with node.js path.parse
|
|
904
942
|
* @param path Input path
|