@workwell-global/toolkit 1.1.45 → 1.1.46
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/dist/utils/strings/manipulate.d.ts +11 -1
- package/dist/utils/strings/manipulate.d.ts.map +1 -1
- package/dist/utils/strings/manipulate.js +47 -42
- package/dist/utils/strings/manipulate.js.map +1 -1
- package/dist/utils/strings/manipulate.test.js +42 -0
- package/dist/utils/strings/manipulate.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Upper-cases the first character of every word and lower-cases the rest.
|
|
3
|
+
* Separators are preserved and each starts a new word, so hyphenated and
|
|
4
|
+
* apostrophised names keep their inner capital:
|
|
5
|
+
* "KERRI-ANNE O'BRIEN" -> "Kerri-Anne O'Brien", "TÄNZER" -> "Tänzer".
|
|
6
|
+
*/
|
|
2
7
|
export declare const wordsToTitleCase: (str: string) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Lower-cases the first word, title-cases every later word, and preserves
|
|
10
|
+
* separators: "V2-API.js" -> "v2-Api.Js".
|
|
11
|
+
*/
|
|
12
|
+
export declare const wordsToCamelCase: (str: string) => string;
|
|
3
13
|
//# sourceMappingURL=manipulate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manipulate.d.ts","sourceRoot":"","sources":["../../../src/utils/strings/manipulate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manipulate.d.ts","sourceRoot":"","sources":["../../../src/utils/strings/manipulate.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,MAmB9C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,MAuB9C,CAAA"}
|
|
@@ -1,57 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A "word" character is any Unicode letter, number, or combining mark.
|
|
3
|
+
* Combining marks (e.g. U+0308 in the decomposed form of "ä") must stay
|
|
4
|
+
* attached to the letter before them, otherwise they split a word in two.
|
|
5
|
+
* Anything else (space, hyphen, apostrophe, punctuation) is a separator and
|
|
6
|
+
* is emitted unchanged.
|
|
7
|
+
*/
|
|
8
|
+
const WORD_CHAR = /^[\p{L}\p{N}\p{M}]$/u;
|
|
9
|
+
const isWordChar = (ch) => WORD_CHAR.test(ch);
|
|
10
|
+
/**
|
|
11
|
+
* Upper-cases the first character of every word and lower-cases the rest.
|
|
12
|
+
* Separators are preserved and each starts a new word, so hyphenated and
|
|
13
|
+
* apostrophised names keep their inner capital:
|
|
14
|
+
* "KERRI-ANNE O'BRIEN" -> "Kerri-Anne O'Brien", "TÄNZER" -> "Tänzer".
|
|
15
|
+
*/
|
|
16
|
+
export const wordsToTitleCase = (str) => {
|
|
6
17
|
if (str.length === 0)
|
|
7
18
|
return '';
|
|
8
|
-
|
|
19
|
+
// Lower-case the whole string first so context-sensitive rules
|
|
20
|
+
// (e.g. Greek final sigma) are applied correctly.
|
|
9
21
|
let output = '';
|
|
10
|
-
let
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
output += lowercase.charAt(i);
|
|
16
|
-
i++;
|
|
17
|
-
continue;
|
|
22
|
+
let atWordStart = true;
|
|
23
|
+
for (const ch of str.toLowerCase()) {
|
|
24
|
+
if (isWordChar(ch)) {
|
|
25
|
+
output += atWordStart ? ch.toUpperCase() : ch;
|
|
26
|
+
atWordStart = false;
|
|
18
27
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
j++;
|
|
23
|
-
const token = lowercase.slice(i, j);
|
|
24
|
-
if (token.length > 0) {
|
|
25
|
-
output +=
|
|
26
|
-
tokenIndex === 0
|
|
27
|
-
? token
|
|
28
|
-
: token.charAt(0).toUpperCase() + token.slice(1);
|
|
29
|
-
tokenIndex++;
|
|
28
|
+
else {
|
|
29
|
+
output += ch;
|
|
30
|
+
atWordStart = true;
|
|
30
31
|
}
|
|
31
|
-
i = j;
|
|
32
32
|
}
|
|
33
33
|
return output;
|
|
34
34
|
};
|
|
35
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Lower-cases the first word, title-cases every later word, and preserves
|
|
37
|
+
* separators: "V2-API.js" -> "v2-Api.Js".
|
|
38
|
+
*/
|
|
39
|
+
export const wordsToCamelCase = (str) => {
|
|
36
40
|
if (str.length === 0)
|
|
37
41
|
return '';
|
|
38
|
-
const lowercase = str.toLowerCase();
|
|
39
42
|
let output = '';
|
|
40
|
-
let
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
let atWordStart = true;
|
|
44
|
+
let wordIndex = 0;
|
|
45
|
+
for (const ch of str.toLowerCase()) {
|
|
46
|
+
if (isWordChar(ch)) {
|
|
47
|
+
if (atWordStart) {
|
|
48
|
+
output += wordIndex === 0 ? ch : ch.toUpperCase();
|
|
49
|
+
wordIndex++;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
output += ch;
|
|
53
|
+
}
|
|
54
|
+
atWordStart = false;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
output += ch;
|
|
58
|
+
atWordStart = true;
|
|
47
59
|
}
|
|
48
|
-
let j = i;
|
|
49
|
-
while (j < lowercase.length &&
|
|
50
|
-
isAsciiAlphaNumericCode(lowercase.charCodeAt(j)))
|
|
51
|
-
j++;
|
|
52
|
-
const token = lowercase.slice(i, j);
|
|
53
|
-
output += token.charAt(0).toUpperCase() + token.slice(1);
|
|
54
|
-
i = j;
|
|
55
60
|
}
|
|
56
61
|
return output;
|
|
57
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manipulate.js","sourceRoot":"","sources":["../../../src/utils/strings/manipulate.ts"],"names":[],"mappings":"AAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"manipulate.js","sourceRoot":"","sources":["../../../src/utils/strings/manipulate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,sBAAsB,CAAA;AAExC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAU,EAAE;IACtD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE/B,+DAA+D;IAC/D,kDAAkD;IAClD,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,WAAW,GAAG,IAAI,CAAA;IAEtB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC7C,WAAW,GAAG,KAAK,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,EAAE,CAAA;YACZ,WAAW,GAAG,IAAI,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAU,EAAE;IACtD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE/B,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,WAAW,GAAG,IAAI,CAAA;IACtB,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAA;gBACjD,SAAS,EAAE,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,EAAE,CAAA;YACd,CAAC;YACD,WAAW,GAAG,KAAK,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,EAAE,CAAA;YACZ,WAAW,GAAG,IAAI,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -21,6 +21,44 @@ describe('wordsToTitleCase', () => {
|
|
|
21
21
|
expect(wordsToTitleCase('hELLo')).toBe('Hello');
|
|
22
22
|
expect(wordsToTitleCase('')).toBe('');
|
|
23
23
|
});
|
|
24
|
+
it('keeps accented letters inside a word', () => {
|
|
25
|
+
expect(wordsToTitleCase('TÄNZER')).toBe('Tänzer');
|
|
26
|
+
expect(wordsToTitleCase('MÜLLER')).toBe('Müller');
|
|
27
|
+
expect(wordsToTitleCase('FRANÇOIS')).toBe('François');
|
|
28
|
+
expect(wordsToTitleCase('NUÑEZ')).toBe('Nuñez');
|
|
29
|
+
expect(wordsToTitleCase('GROß')).toBe('Groß');
|
|
30
|
+
expect(wordsToTitleCase('SØRENSEN')).toBe('Sørensen');
|
|
31
|
+
expect(wordsToTitleCase('ŁUKASZ')).toBe('Łukasz');
|
|
32
|
+
});
|
|
33
|
+
it('upper-cases an accented first letter', () => {
|
|
34
|
+
expect(wordsToTitleCase('ÉMILE ZOLA')).toBe('Émile Zola');
|
|
35
|
+
expect(wordsToTitleCase('émile')).toBe('Émile');
|
|
36
|
+
expect(wordsToTitleCase('ÅSA ÖSTLUND')).toBe('Åsa Östlund');
|
|
37
|
+
});
|
|
38
|
+
it('keeps combining marks attached to the preceding letter', () => {
|
|
39
|
+
// "TÄNZER" in decomposed (NFD) form: the diaeresis is a separate code point
|
|
40
|
+
const decomposed = 'TÄNZER'.normalize('NFD');
|
|
41
|
+
expect(wordsToTitleCase(decomposed)).toBe('Tänzer'.normalize('NFD'));
|
|
42
|
+
});
|
|
43
|
+
it('handles non-Latin scripts', () => {
|
|
44
|
+
expect(wordsToTitleCase('ИВАН ПЕТРОВ')).toBe('Иван Петров');
|
|
45
|
+
expect(wordsToTitleCase('ΓΙΩΡΓΟΣ')).toBe('Γιωργος');
|
|
46
|
+
// scripts without case are returned unchanged
|
|
47
|
+
expect(wordsToTitleCase('田中 太郎')).toBe('田中 太郎');
|
|
48
|
+
expect(wordsToTitleCase('محمد')).toBe('محمد');
|
|
49
|
+
});
|
|
50
|
+
it('title-cases each part of hyphenated and apostrophised names', () => {
|
|
51
|
+
expect(wordsToTitleCase("O'BRIEN")).toBe("O'Brien");
|
|
52
|
+
expect(wordsToTitleCase('O’BRIEN')).toBe('O’Brien');
|
|
53
|
+
expect(wordsToTitleCase("D'ANGELO")).toBe("D'Angelo");
|
|
54
|
+
expect(wordsToTitleCase('KERRI-ANNE')).toBe('Kerri-Anne');
|
|
55
|
+
expect(wordsToTitleCase('JEAN-LUC PICARD')).toBe('Jean-Luc Picard');
|
|
56
|
+
expect(wordsToTitleCase('MARY‑KATE')).toBe('Mary‑Kate'); // non-breaking hyphen
|
|
57
|
+
});
|
|
58
|
+
it('preserves surrounding and repeated whitespace', () => {
|
|
59
|
+
expect(wordsToTitleCase(' JOHN DOE ')).toBe(' John Doe ');
|
|
60
|
+
expect(wordsToTitleCase('JOHN\tDOE')).toBe('John\tDoe');
|
|
61
|
+
});
|
|
24
62
|
});
|
|
25
63
|
describe('wordsToCamelCase', () => {
|
|
26
64
|
it('keeps first token lowercase and title-cases later tokens', () => {
|
|
@@ -42,5 +80,9 @@ describe('wordsToCamelCase', () => {
|
|
|
42
80
|
expect(wordsToCamelCase('hELLo')).toBe('hello');
|
|
43
81
|
expect(wordsToCamelCase('')).toBe('');
|
|
44
82
|
});
|
|
83
|
+
it('keeps accented letters inside a word', () => {
|
|
84
|
+
expect(wordsToCamelCase('ÉMILE TÄNZER')).toBe('émile Tänzer');
|
|
85
|
+
expect(wordsToCamelCase('MÜLLER-LÜDENSCHEIDT')).toBe('müller-Lüdenscheidt');
|
|
86
|
+
});
|
|
45
87
|
});
|
|
46
88
|
//# sourceMappingURL=manipulate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manipulate.test.js","sourceRoot":"","sources":["../../../src/utils/strings/manipulate.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manipulate.test.js","sourceRoot":"","sources":["../../../src/utils/strings/manipulate.test.ts"],"names":[],"mappings":"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"}
|