@futdevpro/fsm-dynamo 1.14.35 → 1.14.37
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/build/_collections/utils/string-case.util.d.ts +136 -0
- package/build/_collections/utils/string-case.util.d.ts.map +1 -0
- package/build/_collections/utils/string-case.util.js +337 -0
- package/build/_collections/utils/string-case.util.js.map +1 -0
- package/build/_collections/utils/string-case.util.spec.d.ts +2 -0
- package/build/_collections/utils/string-case.util.spec.d.ts.map +1 -0
- package/build/_collections/utils/string-case.util.spec.js +360 -0
- package/build/_collections/utils/string-case.util.spec.js.map +1 -0
- package/build/_collections/utils/string.util.d.ts +2 -22
- package/build/_collections/utils/string.util.d.ts.map +1 -1
- package/build/_collections/utils/string.util.js +2 -111
- package/build/_collections/utils/string.util.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/futdevpro-fsm-dynamo-01.14.37.tgz +0 -0
- package/package.json +2 -2
- package/src/_collections/utils/string-case.util.spec.ts +441 -0
- package/src/_collections/utils/string-case.util.ts +362 -0
- package/src/_collections/utils/string.util.ts +3 -120
- package/src/index.ts +1 -0
- package/futdevpro-fsm-dynamo-01.14.35.tgz +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* String casing típusok enum
|
|
3
|
+
*/
|
|
4
|
+
export declare enum DyFM_StringCase_Type {
|
|
5
|
+
camelCase = "camel-case",
|
|
6
|
+
PascalCase = "pascal-case",
|
|
7
|
+
kebabCase = "kebab-case",
|
|
8
|
+
snake_case = "snake-case"
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* String casing utility class
|
|
12
|
+
* Támogatja a különböző casing típusok közötti konverziót
|
|
13
|
+
*/
|
|
14
|
+
export declare class DyFM_StringCase {
|
|
15
|
+
/**
|
|
16
|
+
* Bármilyen casing-ből szavak tömbjét generálja
|
|
17
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
18
|
+
* @returns Szavak tömbje kisbetűvel
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* const words = DyFM_StringCase.parseWords('stockItemId');
|
|
23
|
+
* // Output: ['stock', 'item', 'id']
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
static parseWords(input: string): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Bármilyen casing-ből camelCase-re konvertál
|
|
29
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
30
|
+
* @returns camelCase string
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* const result = DyFM_StringCase.toCamelCase('stock-item-id');
|
|
35
|
+
* // Output: 'stockItemId'
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
static toCamelCase(input: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Bármilyen casing-ből PascalCase-re konvertál
|
|
41
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
42
|
+
* @returns PascalCase string
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const result = DyFM_StringCase.toPascalCase('stock-item-id');
|
|
47
|
+
* // Output: 'StockItemId'
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
static toPascalCase(input: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Bármilyen casing-ből kebab-case-re konvertál
|
|
53
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
54
|
+
* @returns kebab-case string
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const result = DyFM_StringCase.toKebabCase('stockItemId');
|
|
59
|
+
* // Output: 'stock-item-id'
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
static toKebabCase(input: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* Bármilyen casing-ből snake_case-re konvertál
|
|
65
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
66
|
+
* @returns snake_case string
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* const result = DyFM_StringCase.toSnakeCase('stockItemId');
|
|
71
|
+
* // Output: 'stock_item_id'
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
static toSnakeCase(input: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Bármilyen casing-ből bármilyen más casing-re konvertál
|
|
77
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
78
|
+
* @param targetCase - A cél casing típus
|
|
79
|
+
* @returns A konvertált string a megadott casing formátumban
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* const result = DyFM_StringCase.convertTo('stockItemId', DyFM_StringCase_Type.kebabCase);
|
|
84
|
+
* // Output: 'stock-item-id'
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
static convertTo(input: string, targetCase: DyFM_StringCase_Type): string;
|
|
88
|
+
/**
|
|
89
|
+
* Bármilyen casing-ből bármilyen más casing-re konvertál (típus nélküli verzió)
|
|
90
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
91
|
+
* @param targetCase - A cél casing típus string formátumban
|
|
92
|
+
* @returns A konvertált string a megadott casing formátumban
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* const result = DyFM_StringCase.convertToAny('stockItemId', 'kebab-case');
|
|
97
|
+
* // Output: 'stock-item-id'
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
static convertToAny(input: string, targetCase: string): string;
|
|
101
|
+
/**
|
|
102
|
+
* Ellenőrzi, hogy egy string tartalmazza-e egy másik stringet bármilyen casing formátumban
|
|
103
|
+
* @param haystack - A string, amiben keresünk
|
|
104
|
+
* @param needle - A string, amit keresünk (bármilyen casing formátumban)
|
|
105
|
+
* @returns true, ha a haystack tartalmazza a needle-t bármilyen casing formátumban
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const result = DyFM_StringCase.includesIgnoreCase('/:userId/item/delete/:itemId', 'stockItemId');
|
|
110
|
+
* // Output: true (mert 'itemId' megtalálható)
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
static includesIgnoreCase(haystack: string, needle: string): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Converts any name to a short code
|
|
116
|
+
* @param name - The name to convert
|
|
117
|
+
* @returns The short code
|
|
118
|
+
* examples:
|
|
119
|
+
* John Doe -> JD
|
|
120
|
+
* JohnDoe -> JD
|
|
121
|
+
* John_Doe -> JD
|
|
122
|
+
* johnDoe -> JD
|
|
123
|
+
* john_doe -> JD
|
|
124
|
+
* john-doe -> JD
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```ts
|
|
128
|
+
* const name = 'John Doe';
|
|
129
|
+
* const shortCode = DyFM_StringCase.anyNameToShortCode(name);
|
|
130
|
+
* console.log(shortCode);
|
|
131
|
+
* // Output: 'JD'
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
static anyNameToShortCode(name: string): string;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=string-case.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-case.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/string-case.util.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,SAAS,eAAe;IACxB,UAAU,gBAAgB;IAC1B,SAAS,eAAe;IACxB,UAAU,eAAe;CAC1B;AAED;;;GAGG;AACH,qBAAa,eAAe;IAE1B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAoG1C;;;;;;;;;;OAUG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAgBzC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAW1C;;;;;;;;;;OAUG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASzC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASzC;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,MAAM;IAezE;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAoB9D;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAqCpE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAiBhD"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyFM_StringCase = exports.DyFM_StringCase_Type = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* String casing típusok enum
|
|
6
|
+
*/
|
|
7
|
+
var DyFM_StringCase_Type;
|
|
8
|
+
(function (DyFM_StringCase_Type) {
|
|
9
|
+
DyFM_StringCase_Type["camelCase"] = "camel-case";
|
|
10
|
+
DyFM_StringCase_Type["PascalCase"] = "pascal-case";
|
|
11
|
+
DyFM_StringCase_Type["kebabCase"] = "kebab-case";
|
|
12
|
+
DyFM_StringCase_Type["snake_case"] = "snake-case";
|
|
13
|
+
})(DyFM_StringCase_Type || (exports.DyFM_StringCase_Type = DyFM_StringCase_Type = {}));
|
|
14
|
+
/**
|
|
15
|
+
* String casing utility class
|
|
16
|
+
* Támogatja a különböző casing típusok közötti konverziót
|
|
17
|
+
*/
|
|
18
|
+
class DyFM_StringCase {
|
|
19
|
+
/**
|
|
20
|
+
* Bármilyen casing-ből szavak tömbjét generálja
|
|
21
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
22
|
+
* @returns Szavak tömbje kisbetűvel
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const words = DyFM_StringCase.parseWords('stockItemId');
|
|
27
|
+
* // Output: ['stock', 'item', 'id']
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
static parseWords(input) {
|
|
31
|
+
if (!input || input.trim().length === 0) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
// Normalizálás: különböző separator-eket space-re cseréljük
|
|
35
|
+
const normalized = input
|
|
36
|
+
.replace(/[\s_\-]+/g, ' ')
|
|
37
|
+
.replace(/[^a-zA-Z0-9\s]/g, ' ')
|
|
38
|
+
.trim();
|
|
39
|
+
// Split by spaces first
|
|
40
|
+
const spaceSegments = normalized.split(/\s+/).filter((s) => s.length > 0);
|
|
41
|
+
const allSegments = [];
|
|
42
|
+
// Process each space-separated segment to detect camelCase and acronyms
|
|
43
|
+
for (const segment of spaceSegments) {
|
|
44
|
+
if (segment.length === 0) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
// Track word boundaries: start of each word
|
|
48
|
+
const wordStarts = [0]; // First character is always a word start
|
|
49
|
+
for (let i = 1; i < segment.length; i++) {
|
|
50
|
+
const char = segment[i];
|
|
51
|
+
const prevChar = segment[i - 1];
|
|
52
|
+
const nextChar = i < segment.length - 1 ? segment[i + 1] : '';
|
|
53
|
+
const isUppercase = /[A-Z]/.test(char);
|
|
54
|
+
const isLowercase = /[a-z]/.test(char);
|
|
55
|
+
const isLetter = /[a-zA-Z]/.test(char);
|
|
56
|
+
const isDigit = /[0-9]/.test(char);
|
|
57
|
+
const prevIsUppercase = /[A-Z]/.test(prevChar);
|
|
58
|
+
const prevIsLowercase = /[a-z]/.test(prevChar);
|
|
59
|
+
const prevIsDigit = /[0-9]/.test(prevChar);
|
|
60
|
+
const nextIsLowercase = /[a-z]/.test(nextChar);
|
|
61
|
+
const nextIsUppercase = /[A-Z]/.test(nextChar);
|
|
62
|
+
// Number followed by letter: new word start
|
|
63
|
+
// This handles: john2Doe -> john, 2, Doe
|
|
64
|
+
if (prevIsDigit && isLetter) {
|
|
65
|
+
wordStarts.push(i);
|
|
66
|
+
}
|
|
67
|
+
// camelCase boundary: lowercase followed by uppercase
|
|
68
|
+
else if (prevIsLowercase && isUppercase) {
|
|
69
|
+
wordStarts.push(i);
|
|
70
|
+
}
|
|
71
|
+
// Uppercase followed by uppercase then lowercase: new word start
|
|
72
|
+
// This handles:
|
|
73
|
+
// - XMLParser -> XML (acronym ends at L, Parser starts at P) when previous is acronym (multiple uppercase)
|
|
74
|
+
// - AVery -> A (single letter) + Very (starts at V) when previous is single uppercase
|
|
75
|
+
// Pattern: ...X Y z... where X and Y are uppercase, z is lowercase
|
|
76
|
+
else if (isUppercase && prevIsUppercase && nextIsLowercase) {
|
|
77
|
+
// Check if previous characters form an acronym (multiple consecutive uppercase) or single uppercase
|
|
78
|
+
let acronymStart = i - 1;
|
|
79
|
+
while (acronymStart > 0 && /[A-Z]/.test(segment[acronymStart - 1])) {
|
|
80
|
+
acronymStart--;
|
|
81
|
+
}
|
|
82
|
+
// If we have multiple uppercase before this (acronym) OR single uppercase, the new word starts at this uppercase character
|
|
83
|
+
if (i - acronymStart >= 1) {
|
|
84
|
+
wordStarts.push(i);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Acronym boundary: uppercase sequence followed by lowercase
|
|
88
|
+
// This handles HTMLDocument -> HTML (acronym) + Document (new word starts at D, not at o)
|
|
89
|
+
// Pattern: ...L D o... where L is last of acronym, D is start of new word, o is lowercase
|
|
90
|
+
else if (prevIsUppercase && isLowercase) {
|
|
91
|
+
// Check if previous characters form an acronym
|
|
92
|
+
let acronymStart = i - 1;
|
|
93
|
+
while (acronymStart > 0 && /[A-Z]/.test(segment[acronymStart - 1])) {
|
|
94
|
+
acronymStart--;
|
|
95
|
+
}
|
|
96
|
+
// If we have multiple uppercase before this (acronym), the new word starts at the previous uppercase
|
|
97
|
+
// But only if the previous uppercase wasn't already a word start
|
|
98
|
+
if (i - acronymStart > 1) {
|
|
99
|
+
// Check if the previous uppercase (i-1) is already a word start
|
|
100
|
+
const prevIsWordStart = wordStarts.includes(i - 1);
|
|
101
|
+
if (!prevIsWordStart) {
|
|
102
|
+
// The new word starts at the previous uppercase character (i-1), not at this lowercase
|
|
103
|
+
wordStarts.push(i - 1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Extract words based on word starts
|
|
109
|
+
for (let i = 0; i < wordStarts.length; i++) {
|
|
110
|
+
const start = wordStarts[i];
|
|
111
|
+
const end = i < wordStarts.length - 1 ? wordStarts[i + 1] : segment.length;
|
|
112
|
+
const word = segment.substring(start, end);
|
|
113
|
+
if (word.length > 0) {
|
|
114
|
+
allSegments.push(word.toLowerCase());
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return allSegments;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Bármilyen casing-ből camelCase-re konvertál
|
|
122
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
123
|
+
* @returns camelCase string
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```ts
|
|
127
|
+
* const result = DyFM_StringCase.toCamelCase('stock-item-id');
|
|
128
|
+
* // Output: 'stockItemId'
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
static toCamelCase(input) {
|
|
132
|
+
const words = this.parseWords(input);
|
|
133
|
+
if (words.length === 0) {
|
|
134
|
+
return '';
|
|
135
|
+
}
|
|
136
|
+
return words
|
|
137
|
+
.map((word, index) => {
|
|
138
|
+
if (index === 0) {
|
|
139
|
+
return word.toLowerCase();
|
|
140
|
+
}
|
|
141
|
+
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
142
|
+
})
|
|
143
|
+
.join('');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Bármilyen casing-ből PascalCase-re konvertál
|
|
147
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
148
|
+
* @returns PascalCase string
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* const result = DyFM_StringCase.toPascalCase('stock-item-id');
|
|
153
|
+
* // Output: 'StockItemId'
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
static toPascalCase(input) {
|
|
157
|
+
const words = this.parseWords(input);
|
|
158
|
+
if (words.length === 0) {
|
|
159
|
+
return '';
|
|
160
|
+
}
|
|
161
|
+
return words
|
|
162
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
163
|
+
.join('');
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Bármilyen casing-ből kebab-case-re konvertál
|
|
167
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
168
|
+
* @returns kebab-case string
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```ts
|
|
172
|
+
* const result = DyFM_StringCase.toKebabCase('stockItemId');
|
|
173
|
+
* // Output: 'stock-item-id'
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
static toKebabCase(input) {
|
|
177
|
+
const words = this.parseWords(input);
|
|
178
|
+
if (words.length === 0) {
|
|
179
|
+
return '';
|
|
180
|
+
}
|
|
181
|
+
return words.join('-');
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Bármilyen casing-ből snake_case-re konvertál
|
|
185
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
186
|
+
* @returns snake_case string
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```ts
|
|
190
|
+
* const result = DyFM_StringCase.toSnakeCase('stockItemId');
|
|
191
|
+
* // Output: 'stock_item_id'
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
static toSnakeCase(input) {
|
|
195
|
+
const words = this.parseWords(input);
|
|
196
|
+
if (words.length === 0) {
|
|
197
|
+
return '';
|
|
198
|
+
}
|
|
199
|
+
return words.join('_');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Bármilyen casing-ből bármilyen más casing-re konvertál
|
|
203
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
204
|
+
* @param targetCase - A cél casing típus
|
|
205
|
+
* @returns A konvertált string a megadott casing formátumban
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```ts
|
|
209
|
+
* const result = DyFM_StringCase.convertTo('stockItemId', DyFM_StringCase_Type.kebabCase);
|
|
210
|
+
* // Output: 'stock-item-id'
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
static convertTo(input, targetCase) {
|
|
214
|
+
switch (targetCase) {
|
|
215
|
+
case DyFM_StringCase_Type.camelCase:
|
|
216
|
+
return this.toCamelCase(input);
|
|
217
|
+
case DyFM_StringCase_Type.PascalCase:
|
|
218
|
+
return this.toPascalCase(input);
|
|
219
|
+
case DyFM_StringCase_Type.kebabCase:
|
|
220
|
+
return this.toKebabCase(input);
|
|
221
|
+
case DyFM_StringCase_Type.snake_case:
|
|
222
|
+
return this.toSnakeCase(input);
|
|
223
|
+
default:
|
|
224
|
+
return input;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Bármilyen casing-ből bármilyen más casing-re konvertál (típus nélküli verzió)
|
|
229
|
+
* @param input - A bemeneti string bármilyen casing formátumban
|
|
230
|
+
* @param targetCase - A cél casing típus string formátumban
|
|
231
|
+
* @returns A konvertált string a megadott casing formátumban
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```ts
|
|
235
|
+
* const result = DyFM_StringCase.convertToAny('stockItemId', 'kebab-case');
|
|
236
|
+
* // Output: 'stock-item-id'
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
static convertToAny(input, targetCase) {
|
|
240
|
+
const normalizedTarget = targetCase.toLowerCase().trim();
|
|
241
|
+
if (normalizedTarget === 'camelcase' || normalizedTarget === 'camel-case') {
|
|
242
|
+
return this.toCamelCase(input);
|
|
243
|
+
}
|
|
244
|
+
if (normalizedTarget === 'pascalcase' || normalizedTarget === 'pascal-case') {
|
|
245
|
+
return this.toPascalCase(input);
|
|
246
|
+
}
|
|
247
|
+
if (normalizedTarget === 'kebabcase' || normalizedTarget === 'kebab-case') {
|
|
248
|
+
return this.toKebabCase(input);
|
|
249
|
+
}
|
|
250
|
+
if (normalizedTarget === 'snakecase' || normalizedTarget === 'snake-case' || normalizedTarget === 'snake_case') {
|
|
251
|
+
return this.toSnakeCase(input);
|
|
252
|
+
}
|
|
253
|
+
// Ha nem ismert típus, visszaadja az eredeti stringet
|
|
254
|
+
return input;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Ellenőrzi, hogy egy string tartalmazza-e egy másik stringet bármilyen casing formátumban
|
|
258
|
+
* @param haystack - A string, amiben keresünk
|
|
259
|
+
* @param needle - A string, amit keresünk (bármilyen casing formátumban)
|
|
260
|
+
* @returns true, ha a haystack tartalmazza a needle-t bármilyen casing formátumban
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```ts
|
|
264
|
+
* const result = DyFM_StringCase.includesIgnoreCase('/:userId/item/delete/:itemId', 'stockItemId');
|
|
265
|
+
* // Output: true (mert 'itemId' megtalálható)
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
static includesIgnoreCase(haystack, needle) {
|
|
269
|
+
if (!haystack || !needle) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
// Különböző casing formátumokban keresünk
|
|
273
|
+
const cases = [
|
|
274
|
+
needle,
|
|
275
|
+
this.toCamelCase(needle),
|
|
276
|
+
this.toPascalCase(needle),
|
|
277
|
+
this.toKebabCase(needle),
|
|
278
|
+
this.toSnakeCase(needle),
|
|
279
|
+
];
|
|
280
|
+
// Különböző variációk: pl. stockItemId -> itemId, stock-item-id -> item-id, stb.
|
|
281
|
+
const words = this.parseWords(needle);
|
|
282
|
+
if (words.length > 1) {
|
|
283
|
+
// Hozzáadunk rövidített verziókat is (pl. stockItemId -> itemId)
|
|
284
|
+
for (let i = 1; i < words.length; i++) {
|
|
285
|
+
const suffix = words.slice(i).join('');
|
|
286
|
+
cases.push(this.toCamelCase(suffix));
|
|
287
|
+
cases.push(this.toKebabCase(suffix));
|
|
288
|
+
cases.push(this.toSnakeCase(suffix));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Ellenőrizzük, hogy a haystack tartalmazza-e bármelyik variációt
|
|
292
|
+
const lowerHaystack = haystack.toLowerCase();
|
|
293
|
+
for (const caseVariant of cases) {
|
|
294
|
+
if (caseVariant && lowerHaystack.includes(caseVariant.toLowerCase())) {
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Converts any name to a short code
|
|
302
|
+
* @param name - The name to convert
|
|
303
|
+
* @returns The short code
|
|
304
|
+
* examples:
|
|
305
|
+
* John Doe -> JD
|
|
306
|
+
* JohnDoe -> JD
|
|
307
|
+
* John_Doe -> JD
|
|
308
|
+
* johnDoe -> JD
|
|
309
|
+
* john_doe -> JD
|
|
310
|
+
* john-doe -> JD
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* ```ts
|
|
314
|
+
* const name = 'John Doe';
|
|
315
|
+
* const shortCode = DyFM_StringCase.anyNameToShortCode(name);
|
|
316
|
+
* console.log(shortCode);
|
|
317
|
+
* // Output: 'JD'
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
static anyNameToShortCode(name) {
|
|
321
|
+
if (!name || name.trim().length === 0) {
|
|
322
|
+
return '';
|
|
323
|
+
}
|
|
324
|
+
const words = this.parseWords(name);
|
|
325
|
+
// Extract first letter of each segment, uppercase, and join
|
|
326
|
+
return words
|
|
327
|
+
.filter((segment) => segment.length > 0)
|
|
328
|
+
.map((segment) => {
|
|
329
|
+
// Get first letter (handles cases where segment might start with non-letter)
|
|
330
|
+
const firstLetter = segment.match(/[a-zA-Z]/)?.[0];
|
|
331
|
+
return firstLetter ? firstLetter.toUpperCase() : '';
|
|
332
|
+
})
|
|
333
|
+
.join('');
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
exports.DyFM_StringCase = DyFM_StringCase;
|
|
337
|
+
//# sourceMappingURL=string-case.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-case.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/string-case.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-case.util.spec.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/string-case.util.spec.ts"],"names":[],"mappings":""}
|