Skip to content

Commit 2f583ae

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 360abc9 + b1ce358 commit 2f583ae

File tree

6 files changed

+104
-46
lines changed

6 files changed

+104
-46
lines changed

README.md

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -212,27 +212,43 @@ Here is the string `Lives down BY the River` with each of the converters:
212212
// If you typed in 'Lives down BY the River' for the a Replacer Slot named '__replacerSlot__' and
213213
// used one of the optional Case Converters you would get the following:
214214

215-
__replacerSlot__(noCase); // Lives down BY the River
216-
__replacerSlot__(camelCase); // livesDownByTheRiver
217-
__replacerSlot__(constantCase); // LIVES_DOWN_BY_THE_RIVER
218-
__replacerSlot__(dotCase); // lives.down.by.the.river
219-
__replacerSlot__(kebabCase); // lives-down-by-the-river
220-
__replacerSlot__(lowerCase); // livesdownbytheriver
221-
__replacerSlot__(pascalCase); // LivesDownByTheRiver
222-
__replacerSlot__(pathCase); // lives/down/by/the/river
223-
__replacerSlot__(sentenceCase); // Lives down by the river
224-
__replacerSlot__(snakeCase); // lives_down_by_the_river
225-
__replacerSlot__(titleCase); // Lives Down By The River
215+
'__replacerSlot__(noCase)'; // 'Lives down BY the River';
216+
'__replacerSlot__(camelCase)'; // 'livesDownByTheRiver';
217+
'__replacerSlot__(constantCase)'; // 'LIVES_DOWN_BY_THE_RIVER';
218+
'__replacerSlot__(dotCase)'; // 'lives.down.by.the.river';
219+
'__replacerSlot__(kebabCase)'; // 'lives-down-by-the-river';
220+
'__replacerSlot__(lowerCase)'; // 'livesdownbytheriver';
221+
'__replacerSlot__(pascalCase)'; // 'LivesDownByTheRiver';
222+
'__replacerSlot__(pathCase)'; // 'lives/down/by/the/river';
223+
'__replacerSlot__(sentenceCase)'; // 'Lives down by the river';
224+
'__replacerSlot__(snakeCase)'; // 'lives_down_by_the_river';
225+
'__replacerSlot__(titleCase)'; // 'Lives Down By The River';
226226

227227
// Note: you can set a 'defaultCase' converter in IConfigItem so all
228228
// Replacer Slots without a Case Converter will be transformed the same way.
229229
__replacerSlot__; // LivesDownByTheRiver
230230
```
231231

232+
You may also specify the case using an underscores-only syntax:
233+
234+
```js
235+
__replacerSlot__NoCase__; // Lives down BY the River
236+
__replacerSlot__CamelCase__; // livesDownByTheRiver
237+
__replacerSlot__ConstantCase__; // LIVES_DOWN_BY_THE_RIVER
238+
__replacerSlot__DotCase__; // lives.down.by.the.river
239+
__replacerSlot__KebabCase__; // lives-down-by-the-river
240+
__replacerSlot__LowerCase__; // livesdownbytheriver
241+
__replacerSlot__PascalCase__; // LivesDownByTheRiver
242+
__replacerSlot__PathCase__; // lives/down/by/the/river
243+
__replacerSlot__SentenceCase__; // Lives down by the river
244+
__replacerSlot__SnakeCase__; // lives_down_by_the_river
245+
__replacerSlot__TitleCase__; // Lives Down By The River
246+
```
247+
232248
One Rule: no spaces between the [Replacer Slots](#replacer-slots-or-ireplacerslotquestion) and [Case Converters](#case-converters). If there is a space, [Case Converters](#case-converters) will not work.
233249

234-
- :white_check_mark: `__name__(camelCase)`
235-
- :warning: `__name__ (camelCase)`
250+
- :white_check_mark: `__name__(camelCase)` OR `__name__CamelCase__`
251+
- :x: `__name__ (camelCase)` OR `__name__ CamelCase__`
236252

237253
## Batch Usage
238254

examples/tools/batchGenerate.js

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,23 @@ const {generateTemplateFilesBatch, CaseConverterEnum} = require('../../dist/gene
33
// Note: In your file it will be like this:
44
// const {generateTemplateFilesBatch, CaseConverterEnum} = require('generate-template-files');
55

6-
const componentName = "Example"
7-
const componentScope = "common"
6+
const componentName = "UserProfile"
7+
const componentScope = "example"
88

99
generateTemplateFilesBatch([
1010
{
11-
option: 'Component',
11+
option: 'Testing out batch generate of file with mix of underscores and brackets',
1212
defaultCase: CaseConverterEnum.PascalCase,
1313
entry: {
14-
folderPath: './tools/templates/react/component',
14+
folderPath: './tools/templates/misc',
1515
},
1616
dynamicReplacers: [
17-
{ slot: '__name__', slotValue: componentName },
17+
{ slot: '__resourceName__', slotValue: componentName },
1818
{ slot: '__scope__', slotValue: componentScope },
1919
],
2020
output: {
21-
path: `./src/component/__scope__(camelCase)`,
22-
pathAndFileNameDefaultCase: CaseConverterEnum.PascalCase,
23-
},
24-
},
25-
{
26-
option: 'Component Interface',
27-
defaultCase: CaseConverterEnum.PascalCase,
28-
entry: {
29-
folderPath: './tools/templates/react/I__interface__.ts',
30-
},
31-
dynamicReplacers: [
32-
{ slot: '__interface__', slotValue: componentName },
33-
{ slot: '__scope__', slotValue: componentScope },
34-
],
35-
output: {
36-
path: `./src/component/__scope__(camelCase)/I__interface__.ts`,
37-
pathAndFileNameDefaultCase: CaseConverterEnum.PascalCase,
21+
path: `./src/__scope__/`,
22+
pathAndFileNameDefaultCase: CaseConverterEnum.CamelCase,
3823
},
3924
},
4025
]);
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// src/__scope__CamelCase__/__resourceName__(pascalCase).ts
2+
import { __resourceName__SnakeCase___data } from "./__resourceName__PascalCase__Data"
3+
4+
console.assert(__resourceName__SnakeCase___data.key === "__resourceName__(snakeCase)");
5+
6+
export const __resourceName__ConstantCase___KEY = __resourceName__SnakeCase___data.key;
7+
type __resourceName__PascalCase__Data = typeof __resourceName__SnakeCase___data
8+
9+
/**
10+
*
11+
*/
12+
const fetchData = (_key: "__resourceName__(snakeCase)"): __resourceName__PascalCase__Data => {
13+
// Implement fetch logic here
14+
const result: __resourceName__PascalCase__Data["result"] = {}
15+
16+
return {
17+
key: __resourceName__ConstantCase___KEY,
18+
result,
19+
}
20+
};
21+
22+
/**
23+
* The __resourceName__(titleCase) fetcher
24+
*/
25+
export const get__resourceName__ = async (): Promise<__resourceName__PascalCase__Data> => {
26+
const __resourceName__CamelCase__ = fetchData(__resourceName__SnakeCase___data.key);
27+
return __resourceName__CamelCase__;
28+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// src/__scope__CamelCase__/__resourceName__(pascalCase)Data.ts
2+
export const __resourceName__SnakeCase___data = {
3+
key: "__resourceName__(snakeCase)",
4+
result: {
5+
// Add values here
6+
}
7+
} as const

src/constants/CaseConverterEnum.ts

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ enum CaseConverterEnum {
55
*
66
* ```
77
* // If you entered "Lives down BY the River" for __replacerSlot__
8-
* __replacerSlot__(noCase)
8+
* __replacerSlot__(noCase) OR __replacerSlot__NoCase__
99
*
1010
* // It would output to:
1111
* Lives down BY the River
@@ -18,12 +18,13 @@ enum CaseConverterEnum {
1818
* ```
1919
*/
2020
None = '(noCase)',
21+
NoneUnderscore = 'NoCase__',
2122
/**
2223
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to camel case.
2324
*
2425
* ```
2526
* // If you entered "Lives down BY the River" for __replacerSlot__
26-
* __replacerSlot__(camelCase)
27+
* __replacerSlot__(camelCase) OR __replacerSlot__CamelCase__
2728
*
2829
* // It would output to:
2930
* livesDownByTheRiver
@@ -36,12 +37,13 @@ enum CaseConverterEnum {
3637
* ```
3738
*/
3839
CamelCase = '(camelCase)',
40+
CamelCaseUnderscore = 'CamelCase__',
3941
/**
4042
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to constant case.
4143
*
4244
* ```
4345
* // If you entered "Lives down BY the River" for __replacerSlot__
44-
* __replacerSlot__(constantCase)
46+
* __replacerSlot__(constantCase) OR __replacerSlot__ConstantCase__
4547
*
4648
* // It would output to:
4749
* LIVES_DOWN_BY_THE_RIVER
@@ -54,12 +56,13 @@ enum CaseConverterEnum {
5456
* ```
5557
*/
5658
ConstantCase = '(constantCase)',
59+
ConstantCaseUnderscore = 'ConstantCase__',
5760
/**
5861
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to dot case.
5962
*
6063
* ```
6164
* // If you entered "Lives down BY the River" for __replacerSlot__
62-
* __replacerSlot__(dotCase)
65+
* __replacerSlot__(dotCase) OR __replacerSlot__DotCase__
6366
*
6467
* // It would output to:
6568
* lives.down.by.the.river
@@ -72,12 +75,13 @@ enum CaseConverterEnum {
7275
* ```
7376
*/
7477
DotCase = '(dotCase)',
78+
DotCaseUnderscore = 'DotCase__',
7579
/**
7680
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to kebab case.
7781
*
7882
* ```
7983
* // If you entered "Lives down BY the River" for __replacerSlot__
80-
* __replacerSlot__(kebabCase)
84+
* __replacerSlot__(kebabCase) OR __replacerSlot__KebabCase__
8185
*
8286
* // It would output to:
8387
* lives-down-by-the-river
@@ -90,12 +94,13 @@ enum CaseConverterEnum {
9094
* ```
9195
*/
9296
KebabCase = '(kebabCase)',
97+
KebabCaseUnderscore = 'KebabCase__',
9398
/**
9499
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to all lower case.
95100
*
96101
* ```
97102
* // If you entered "Lives down BY the River" for __replacerSlot__
98-
* __replacerSlot__(lowerCase)
103+
* __replacerSlot__(lowerCase) OR __replacerSlot__LowerCase__
99104
*
100105
* // It would output to:
101106
* livesdownbytheriver
@@ -108,12 +113,13 @@ enum CaseConverterEnum {
108113
* ```
109114
*/
110115
LowerCase = '(lowerCase)',
116+
LowerCaseUnderscore = 'LowerCase__',
111117
/**
112118
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to pacal case.
113119
*
114120
* ```
115121
* // If you entered "Lives down BY the River" for __replacerSlot__
116-
* __replacerSlot__(pascalCase)
122+
* __replacerSlot__(pascalCase) OR __replacerSlot__PascalCase__
117123
*
118124
* // It would output to:
119125
* LivesDownByTheRiver
@@ -126,12 +132,13 @@ enum CaseConverterEnum {
126132
* ```
127133
*/
128134
PascalCase = '(pascalCase)',
135+
PascalCaseUnderscore = 'PascalCase__',
129136
/**
130137
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to path case.
131138
*
132139
* ```
133140
* // If you entered "Lives down BY the River" for __replacerSlot__
134-
* __replacerSlot__(pathCase)
141+
* __replacerSlot__(pathCase) OR __replacerSlot__PathCase__
135142
*
136143
* // It would output to:
137144
* lives/down/by/the/river
@@ -144,12 +151,13 @@ enum CaseConverterEnum {
144151
* ```
145152
*/
146153
PathCase = '(pathCase)',
154+
PathCaseUnderscore = 'PathCase__',
147155
/**
148156
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to sentence case.
149157
*
150158
* ```
151159
* // If you entered "Lives down BY the River" for __replacerSlot__
152-
* __replacerSlot__(sentenceCase)
160+
* __replacerSlot__(sentenceCase) OR __replacerSlot__SentenceCase__
153161
*
154162
* // It would output to:
155163
* Lives down by the river
@@ -162,12 +170,13 @@ enum CaseConverterEnum {
162170
* ```
163171
*/
164172
SentenceCase = '(sentenceCase)',
173+
SentenceCaseUnderscore = 'SentenceCase__',
165174
/**
166175
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to snake case.
167176
*
168177
* ```
169178
* // If you entered "Lives down BY the River" for __replacerSlot__
170-
* __replacerSlot__(snakeCase)
179+
* __replacerSlot__(snakeCase) OR __replacerSlot__SnakeCase__
171180
*
172181
* // It would output to:
173182
* lives_down_by_the_river
@@ -180,12 +189,13 @@ enum CaseConverterEnum {
180189
* ```
181190
*/
182191
SnakeCase = '(snakeCase)',
192+
SnakeCaseUnderscore = 'SnakeCase__',
183193
/**
184194
* [Case Converter](../index.html#case-converters) that converts [Replacer Slots](../index.html#replacer-slots) to title case.
185195
*
186196
* ```
187197
* // If you entered "Lives down BY the River" for __replacerSlot__
188-
* __replacerSlot__(titleCase)
198+
* __replacerSlot__(titleCase) OR __replacerSlot__TitleCase__
189199
*
190200
* // It would output to:
191201
* Lives Down By The River
@@ -198,6 +208,7 @@ enum CaseConverterEnum {
198208
* ```
199209
*/
200210
TitleCase = '(titleCase)',
211+
TitleCaseUnderscore = 'TitleCase__',
201212
}
202213

203214
export default CaseConverterEnum;

src/utilities/StringUtility.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,37 @@ export default class StringUtility {
1515
public static toCase(str: string, caseType: CaseConverterEnum): string {
1616
switch (caseType) {
1717
case CaseConverterEnum.CamelCase:
18+
case CaseConverterEnum.CamelCaseUnderscore:
1819
return StringUtility.toCamelCase(str);
1920
case CaseConverterEnum.ConstantCase:
21+
case CaseConverterEnum.ConstantCaseUnderscore:
2022
return StringUtility.toConstantCase(str);
2123
case CaseConverterEnum.DotCase:
24+
case CaseConverterEnum.DotCaseUnderscore:
2225
return StringUtility.toSentence(str, '.');
2326
case CaseConverterEnum.KebabCase:
27+
case CaseConverterEnum.KebabCaseUnderscore:
2428
return StringUtility.toSentence(str, '-');
2529
case CaseConverterEnum.LowerCase:
30+
case CaseConverterEnum.LowerCaseUnderscore:
2631
return StringUtility.toSentence(str, '');
2732
case CaseConverterEnum.PascalCase:
33+
case CaseConverterEnum.PascalCaseUnderscore:
2834
return StringUtility.toPascalCase(str);
2935
case CaseConverterEnum.PathCase:
36+
case CaseConverterEnum.PathCaseUnderscore:
3037
return StringUtility.toSentence(str, '/');
3138
case CaseConverterEnum.SentenceCase:
39+
case CaseConverterEnum.SentenceCaseUnderscore:
3240
return StringUtility.toSentenceCase(str);
3341
case CaseConverterEnum.SnakeCase:
42+
case CaseConverterEnum.SnakeCaseUnderscore:
3443
return StringUtility.toSentence(str, '_');
3544
case CaseConverterEnum.TitleCase:
45+
case CaseConverterEnum.TitleCaseUnderscore:
3646
return StringUtility.toTitleCase(str);
3747
case CaseConverterEnum.None:
48+
case CaseConverterEnum.NoneUnderscore:
3849
default:
3950
return str;
4051
}

0 commit comments

Comments
 (0)