Skip to content

Commit 03f9a92

Browse files
committed
feat(generator): add change-case to generate correct component resource & dir names
1 parent 224243e commit 03f9a92

File tree

7 files changed

+162
-9
lines changed

7 files changed

+162
-9
lines changed

generators/app/index.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const Generator = require('yeoman-generator');
22
const chalk = require('chalk');
33
const yosay = require('yosay');
4+
const changeCase = require('change-case');
45
const pluralize = require('pluralize');
56

67
const pkg = require('../../package.json');
@@ -19,9 +20,18 @@ module.exports = class extends Generator {
1920
];
2021

2122
return this.prompt(prompts).then(props => {
23+
const elementComponentNameParamCase = changeCase.paramCase(
24+
props.elementComponentName,
25+
);
26+
const elementComponentNameCamelCase = changeCase.camelCase(
27+
props.elementComponentName,
28+
);
29+
2230
this.props = {
2331
...props,
24-
elementComponentPluralName: pluralize(props.elementComponentName),
32+
elementResourceName: elementComponentNameParamCase,
33+
elementResourceNamePlural: pluralize(elementComponentNameParamCase),
34+
elementDirName: pluralize(elementComponentNameCamelCase),
2535
};
2636
});
2737
}

generators/app/templates/<%= elementComponentPluralName %>/constants.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const NAME = '<%= elementResourceName %>';
2+
const PLURAL_NAME = '<%= elementResourceNamePlural %>';
3+
4+
export { NAME, PLURAL_NAME };

generators/app/templates/<%= elementComponentPluralName %>/controller.ts renamed to generators/app/templates/<%= elementDirName %>/controller.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,21 @@ const get = (req: Request, res: Response) => {
7474
res.send(req[NAME]);
7575
};
7676

77+
const patch = async (req: Request, res: Response, next: NextFunction) => {
78+
try {
79+
// TODO: patch object
80+
const object = { ...req[NAME], ...{} };
81+
82+
res.send(object);
83+
} catch (err) {
84+
next(err);
85+
}
86+
};
87+
7788
const update = async (req: Request, res: Response, next: NextFunction) => {
7889
try {
7990
// TODO: update object
80-
const object = req[NAME];
91+
const object = {};
8192

8293
res.send(object);
8394
} catch (err) {
@@ -96,4 +107,4 @@ const del = async (req: Request, res: Response, next: NextFunction) => {
96107
}
97108
};
98109

99-
export { list, create, count, getById, get, update, del };
110+
export { list, create, count, getById, get, patch, update, del };

generators/app/templates/<%= elementComponentPluralName %>/index.ts renamed to generators/app/templates/<%= elementDirName %>/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Router } from 'express';
22

33
import { Routes } from '../types';
44
import { PLURAL_NAME } from './constants';
5-
import { list, count, create, getById, get, update, del } from './controller';
5+
import { list, count, create, getById, get, patch, update, del } from './controller';
66

77
const path = `/${PLURAL_NAME}`;
88

@@ -23,6 +23,7 @@ const routes = (_: Routes) => {
2323
router
2424
.route('/:id')
2525
.get(get)
26+
.patch(patch)
2627
.put(update)
2728
.delete(del);
2829

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
],
2525
"dependencies": {
2626
"chalk": "^3.0.0",
27+
"change-case": "^4.1.1",
2728
"pluralize": "^8.0.0",
2829
"yeoman-generator": "^4.5.0",
2930
"yosay": "^2.0.2"

yarn.lock

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,14 @@ call-me-maybe@^1.0.1:
231231
version "1.0.1"
232232
resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
233233

234+
camel-case@^4.1.1:
235+
version "4.1.1"
236+
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547"
237+
integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==
238+
dependencies:
239+
pascal-case "^3.1.1"
240+
tslib "^1.10.0"
241+
234242
camelcase-keys@^2.0.0:
235243
version "2.1.0"
236244
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
@@ -258,6 +266,15 @@ camelcase@^5.0.0:
258266
version "5.3.1"
259267
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
260268

269+
capital-case@^1.0.3:
270+
version "1.0.3"
271+
resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.3.tgz#339bd77e8fab6cf75111d4fca509b3edf7c117c8"
272+
integrity sha512-OlUSJpUr7SY0uZFOxcwnDOU7/MpHlKTZx2mqnDYQFrDudXLFm0JJ9wr/l4csB+rh2Ug0OPuoSO53PqiZBqno9A==
273+
dependencies:
274+
no-case "^3.0.3"
275+
tslib "^1.10.0"
276+
upper-case-first "^2.0.1"
277+
261278
capture-stack-trace@^1.0.0:
262279
version "1.0.1"
263280
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
@@ -287,6 +304,24 @@ chalk@^3.0.0:
287304
ansi-styles "^4.1.0"
288305
supports-color "^7.1.0"
289306

307+
change-case@^4.1.1:
308+
version "4.1.1"
309+
resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.1.tgz#d5005709275952e7963fed7b91e4f9fdb6180afa"
310+
integrity sha512-qRlUWn/hXnX1R1LBDF/RelJLiqNjKjUqlmuBVSEIyye8kq49CXqkZWKmi8XeUAdDXWFOcGLUMZ+aHn3Q5lzUXw==
311+
dependencies:
312+
camel-case "^4.1.1"
313+
capital-case "^1.0.3"
314+
constant-case "^3.0.3"
315+
dot-case "^3.0.3"
316+
header-case "^2.0.3"
317+
no-case "^3.0.3"
318+
param-case "^3.0.3"
319+
pascal-case "^3.1.1"
320+
path-case "^3.0.3"
321+
sentence-case "^3.0.3"
322+
snake-case "^3.0.3"
323+
tslib "^1.10.0"
324+
290325
chardet@^0.7.0:
291326
version "0.7.0"
292327
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@@ -423,6 +458,15 @@ concat-stream@^2.0.0:
423458
readable-stream "^3.0.2"
424459
typedarray "^0.0.6"
425460

461+
constant-case@^3.0.3:
462+
version "3.0.3"
463+
resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.3.tgz#ac910a99caf3926ac5112f352e3af599d8c5fc0a"
464+
integrity sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA==
465+
dependencies:
466+
no-case "^3.0.3"
467+
tslib "^1.10.0"
468+
upper-case "^2.0.1"
469+
426470
conventional-changelog-angular@^5.0.6:
427471
version "5.0.6"
428472
resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059"
@@ -700,6 +744,14 @@ dir-glob@^2.2.2:
700744
dependencies:
701745
path-type "^3.0.0"
702746

747+
dot-case@^3.0.3:
748+
version "3.0.3"
749+
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa"
750+
integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==
751+
dependencies:
752+
no-case "^3.0.3"
753+
tslib "^1.10.0"
754+
703755
dot-prop@^3.0.0:
704756
version "3.0.0"
705757
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
@@ -1079,6 +1131,14 @@ has-values@^1.0.0:
10791131
is-number "^3.0.0"
10801132
kind-of "^4.0.0"
10811133

1134+
header-case@^2.0.3:
1135+
version "2.0.3"
1136+
resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.3.tgz#8a7407d16edfd5c970f8ebb116e6383f855b5a72"
1137+
integrity sha512-LChe/V32mnUQnTwTxd3aAlNMk8ia9tjCDb/LjYtoMrdAPApxLB+azejUk5ERZIZdIqvinwv6BAUuFXH/tQPdZA==
1138+
dependencies:
1139+
capital-case "^1.0.3"
1140+
tslib "^1.10.0"
1141+
10821142
hosted-git-info@^2.1.4:
10831143
version "2.8.8"
10841144
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
@@ -1439,6 +1499,13 @@ loud-rejection@^1.0.0:
14391499
currently-unhandled "^0.4.1"
14401500
signal-exit "^3.0.0"
14411501

1502+
lower-case@^2.0.1:
1503+
version "2.0.1"
1504+
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7"
1505+
integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==
1506+
dependencies:
1507+
tslib "^1.10.0"
1508+
14421509
lowercase-keys@^1.0.0:
14431510
version "1.0.1"
14441511
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
@@ -1648,6 +1715,14 @@ nice-try@^1.0.4:
16481715
version "1.0.5"
16491716
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
16501717

1718+
no-case@^3.0.3:
1719+
version "3.0.3"
1720+
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8"
1721+
integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==
1722+
dependencies:
1723+
lower-case "^2.0.1"
1724+
tslib "^1.10.0"
1725+
16511726
normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.5.0:
16521727
version "2.5.0"
16531728
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@@ -1758,6 +1833,14 @@ pad-component@0.0.1:
17581833
version "0.0.1"
17591834
resolved "https://registry.yarnpkg.com/pad-component/-/pad-component-0.0.1.tgz#ad1f22ce1bf0fdc0d6ddd908af17f351a404b8ac"
17601835

1836+
param-case@^3.0.3:
1837+
version "3.0.3"
1838+
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238"
1839+
integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==
1840+
dependencies:
1841+
dot-case "^3.0.3"
1842+
tslib "^1.10.0"
1843+
17611844
parse-github-repo-url@^1.3.0:
17621845
version "1.4.1"
17631846
resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50"
@@ -1784,10 +1867,26 @@ parse-json@^5.0.0:
17841867
json-parse-better-errors "^1.0.1"
17851868
lines-and-columns "^1.1.6"
17861869

1870+
pascal-case@^3.1.1:
1871+
version "3.1.1"
1872+
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f"
1873+
integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==
1874+
dependencies:
1875+
no-case "^3.0.3"
1876+
tslib "^1.10.0"
1877+
17871878
pascalcase@^0.1.1:
17881879
version "0.1.1"
17891880
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
17901881

1882+
path-case@^3.0.3:
1883+
version "3.0.3"
1884+
resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.3.tgz#d48119aed52c4712e036ca40c6b15984f909554f"
1885+
integrity sha512-UMFU6UETFpCNWbIWNczshPrnK/7JAXBP2NYw80ojElbQ2+JYxdqWDBkvvqM93u4u6oLmuJ/tPOf2tM8KtXv4eg==
1886+
dependencies:
1887+
dot-case "^3.0.3"
1888+
tslib "^1.10.0"
1889+
17911890
path-dirname@^1.0.0:
17921891
version "1.0.2"
17931892
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
@@ -2086,6 +2185,15 @@ semver@6.3.0, semver@^6.0.0, semver@^6.3.0:
20862185
version "6.3.0"
20872186
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
20882187

2188+
sentence-case@^3.0.3:
2189+
version "3.0.3"
2190+
resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.3.tgz#47576e4adff7abf42c63c815b0543c9d2f85a930"
2191+
integrity sha512-ZPr4dgTcNkEfcGOMFQyDdJrTU9uQO1nb1cjf+nuzb6FxgMDgKddZOM29qEsB7jvsZSMruLRcL2KfM4ypKpa0LA==
2192+
dependencies:
2193+
no-case "^3.0.3"
2194+
tslib "^1.10.0"
2195+
upper-case-first "^2.0.1"
2196+
20892197
set-blocking@^2.0.0:
20902198
version "2.0.0"
20912199
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
@@ -2129,6 +2237,14 @@ slash@^2.0.0:
21292237
version "2.0.0"
21302238
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
21312239

2240+
snake-case@^3.0.3:
2241+
version "3.0.3"
2242+
resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.3.tgz#c598b822ab443fcbb145ae8a82c5e43526d5bbee"
2243+
integrity sha512-WM1sIXEO+rsAHBKjGf/6R1HBBcgbncKS08d2Aqec/mrDSpU80SiOU41hO7ny6DToHSyrlwTYzQBIK1FPSx4Y3Q==
2244+
dependencies:
2245+
dot-case "^3.0.3"
2246+
tslib "^1.10.0"
2247+
21322248
snapdragon-node@^2.0.1:
21332249
version "2.1.1"
21342250
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -2435,7 +2551,7 @@ trim-off-newlines@^1.0.0:
24352551
version "1.0.1"
24362552
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
24372553

2438-
tslib@^1.9.0:
2554+
tslib@^1.10.0, tslib@^1.9.0:
24392555
version "1.11.1"
24402556
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
24412557

@@ -2478,6 +2594,20 @@ unzip-response@^2.0.1:
24782594
version "2.0.1"
24792595
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
24802596

2597+
upper-case-first@^2.0.1:
2598+
version "2.0.1"
2599+
resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.1.tgz#32ab436747d891cc20ab1e43d601cb4d0a7fbf4a"
2600+
integrity sha512-105J8XqQ+9RxW3l9gHZtgve5oaiR9TIwvmZAMAIZWRHe00T21cdvewKORTlOJf/zXW6VukuTshM+HXZNWz7N5w==
2601+
dependencies:
2602+
tslib "^1.10.0"
2603+
2604+
upper-case@^2.0.1:
2605+
version "2.0.1"
2606+
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.1.tgz#6214d05e235dc817822464ccbae85822b3d8665f"
2607+
integrity sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A==
2608+
dependencies:
2609+
tslib "^1.10.0"
2610+
24812611
urix@^0.1.0:
24822612
version "0.1.0"
24832613
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"

0 commit comments

Comments
 (0)