feat(turbo): use turbo gen instead of plop (#53684)

### What?

Use [Turborepo generators](https://turbo.build/repo/docs/core-concepts/monorepos/code-generation#custom-generators) instead of plop. 

Turborepo generators are built on top of plop, but include some additional tooling to make working in monorepos easier. It also supports zero config typescript for configs. 

### Why?
Same Team!

### How?
Ported the existing plopfile to a turbo generator config


Co-authored-by: Jiachi Liu <4800338+huozhi@users.noreply.github.com>
This commit is contained in:
Thomas Knickman 2023-11-02 21:25:18 -04:00 committed by GitHub
parent 520fbc884d
commit 348c550120
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 116 additions and 379 deletions

View file

@ -6,8 +6,8 @@
"packages/*"
],
"scripts": {
"new-error": "plop error",
"new-test": "plop test",
"new-error": "turbo gen error",
"new-test": "turbo gen test",
"clean": "lerna clean -y && lerna bootstrap && lerna run clean && lerna exec 'node ../../scripts/rm.mjs dist'",
"build": "turbo run build --remote-cache-timeout 60 --summarize true",
"lerna": "lerna",
@ -173,6 +173,7 @@
"nanoid": "3.1.30",
"next": "workspace:*",
"node-fetch": "2.6.7",
"node-plop": "0.31.1",
"npm-run-all": "4.1.5",
"nprogress": "0.2.0",
"octokit": "3.1.0",
@ -181,7 +182,6 @@
"pixrem": "5.0.0",
"playwright-chromium": "1.35.1",
"playwright-core": "1.35.1",
"plop": "3.0.5",
"postcss": "8.4.31",
"postcss-nested": "4.2.1",
"postcss-pseudoelements": "5.0.0",

File diff suppressed because one or more lines are too long

View file

@ -365,6 +365,9 @@ importers:
node-fetch:
specifier: 2.6.7
version: 2.6.7
node-plop:
specifier: 0.31.1
version: 0.31.1
npm-run-all:
specifier: 4.1.5
version: 4.1.5
@ -389,9 +392,6 @@ importers:
playwright-core:
specifier: 1.35.1
version: 1.35.1
plop:
specifier: 3.0.5
version: 3.0.5
postcss:
specifier: 8.4.31
version: 8.4.31
@ -5765,7 +5765,7 @@ packages:
glob: 7.1.7
is-reference: 1.2.1
magic-string: 0.25.7
resolve: 1.22.2
resolve: 1.22.4
rollup: 2.35.1
dev: true
@ -5789,7 +5789,7 @@ packages:
builtin-modules: 3.1.0
deepmerge: 4.2.2
is-module: 1.0.0
resolve: 1.22.2
resolve: 1.22.4
rollup: 2.35.1
dev: true
@ -6457,10 +6457,6 @@ packages:
'@types/serve-static': 1.13.3
dev: true
/@types/fined@1.1.3:
resolution: {integrity: sha512-CWYnSRnun3CGbt6taXeVo2lCbuaj4mchVJ4UF/BdU5TSuIn3AmS13pGMwCsBUoehGbhZrBrpNJZSZI5EVilXww==}
dev: true
/@types/fontkit@2.0.0:
resolution: {integrity: sha512-Qe+6szpPLTNsqkDFs2MScJyB51d5Hpobyg/T0QoUWO53WuNOTNLsV8fkE4QQPOJbhOMN5wlwmNeDdsh/e6Uqdg==}
dependencies:
@ -6512,11 +6508,11 @@ packages:
'@types/node': 20.2.5
dev: true
/@types/inquirer@8.1.3:
resolution: {integrity: sha512-AayK4ZL5ssPzR1OtnOLGAwpT0Dda3Xi/h1G0l1oJDNrowp7T1423q4Zb8/emr7tzRlCy4ssEri0LWVexAqHyKQ==}
/@types/inquirer@8.2.9:
resolution: {integrity: sha512-5IEO2PwCy4NZDgj977dho4Qbdiw6dJZJzD4ZaB/9j7dfppf7z0xxFPKZz/FtTAUQbDjmWHJ6Jlz/gn0YzWHPsw==}
dependencies:
'@types/through': 0.0.30
rxjs: 7.5.7
rxjs: 7.8.1
dev: true
/@types/istanbul-lib-coverage@2.0.3:
@ -6589,13 +6585,6 @@ packages:
'@types/node': 20.2.5
dev: true
/@types/liftoff@4.0.0:
resolution: {integrity: sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==}
dependencies:
'@types/fined': 1.1.3
'@types/node': 20.2.5
dev: true
/@types/lodash.curry@4.1.6:
resolution: {integrity: sha512-x3ctCcmOYqRrihNNnQJW6fe/yZFCgnrIa6p80AiPQRO8Jis29bBdy1dEw1FwngoF/mCZa3Bx+33fUZvOEE635Q==}
dependencies:
@ -7593,11 +7582,6 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
/ansi-regex@6.0.1:
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
engines: {node: '>=12'}
dev: true
/ansi-styles@2.2.1:
resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
engines: {node: '>=0.10.0'}
@ -7722,11 +7706,6 @@ packages:
engines: {node: '>=8'}
dev: true
/array-each@1.0.1:
resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==}
engines: {node: '>=0.10.0'}
dev: true
/array-filter@1.0.0:
resolution: {integrity: sha512-Ene1hbrinPZ1qPoZp7NSx4jQnh4nr7MtY78pHNb+yr8yHbxmTS7ChGW0a55JKA7TkRDeoQxK4GcJaCvBYplSKA==}
dev: true
@ -7769,11 +7748,6 @@ packages:
resolution: {integrity: sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA==}
dev: true
/array-slice@1.1.0:
resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==}
engines: {node: '>=0.10.0'}
dev: true
/array-union@1.0.2:
resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==}
engines: {node: '>=0.10.0'}
@ -7785,11 +7759,6 @@ packages:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
/array-union@3.0.1:
resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==}
engines: {node: '>=12'}
dev: true
/array-uniq@1.0.3:
resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==}
engines: {node: '>=0.10.0'}
@ -8106,7 +8075,7 @@ packages:
dependencies:
'@babel/runtime': 7.22.5
cosmiconfig: 7.0.0
resolve: 1.22.2
resolve: 1.22.4
dev: true
/babel-plugin-macros@3.1.0:
@ -8289,14 +8258,6 @@ packages:
readable-stream: 3.6.0
dev: true
/bl@5.0.0:
resolution: {integrity: sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==}
dependencies:
buffer: 6.0.3
inherits: 2.0.4
readable-stream: 3.6.0
dev: true
/bluebird@3.7.2:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
dev: true
@ -8515,13 +8476,6 @@ packages:
ieee754: 1.2.1
dev: true
/buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
dev: true
/builtin-modules@3.1.0:
resolution: {integrity: sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==}
engines: {node: '>=6'}
@ -8823,11 +8777,6 @@ packages:
ansi-styles: 4.3.0
supports-color: 7.2.0
/chalk@5.0.1:
resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
/change-case@4.1.2:
resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==}
dependencies:
@ -9021,13 +8970,6 @@ packages:
dependencies:
restore-cursor: 3.1.0
/cli-cursor@4.0.0:
resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
restore-cursor: 4.0.0
dev: true
/cli-select@1.1.2:
resolution: {integrity: sha512-PSvWb8G0PPmBNDcz/uM2LkZN3Nn5JmhUl465tTfynQAXjKzFpmHbxStM6X/+awKp5DJuAaHMzzMPefT0suGm1w==}
dependencies:
@ -10526,11 +10468,6 @@ packages:
resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==}
dev: true
/detect-file@1.0.0:
resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
engines: {node: '>=0.10.0'}
dev: true
/detect-indent@5.0.0:
resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==}
engines: {node: '>=4'}
@ -10915,7 +10852,7 @@ packages:
/encoding@0.1.13:
resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
dependencies:
iconv-lite: 0.6.2
iconv-lite: 0.6.3
dev: true
/end-of-stream@1.4.4:
@ -11927,13 +11864,6 @@ packages:
os-homedir: 1.0.2
dev: true
/expand-tilde@2.0.2:
resolution: {integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=}
engines: {node: '>=0.10.0'}
dependencies:
homedir-polyfill: 1.0.3
dev: true
/expect-type@0.14.2:
resolution: {integrity: sha512-ed3+tr5ujbIYXZ8Pl/VgIphwJQ0q5tBLGGdn7Zvwt1WyPBRX83xjT5pT77P/GkuQbctx0K2ZNSSan7eruJqTCQ==}
dev: true
@ -12291,27 +12221,6 @@ packages:
path-exists: 4.0.0
dev: false
/findup-sync@5.0.0:
resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==}
engines: {node: '>= 10.13.0'}
dependencies:
detect-file: 1.0.0
is-glob: 4.0.3
micromatch: 4.0.4
resolve-dir: 1.0.1
dev: true
/fined@2.0.0:
resolution: {integrity: sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==}
engines: {node: '>= 10.13.0'}
dependencies:
expand-tilde: 2.0.2
is-plain-object: 5.0.0
object.defaults: 1.1.0
object.pick: 1.3.0
parse-filepath: 1.0.2
dev: true
/firebase@7.14.5:
resolution: {integrity: sha512-1vrC1UZIVhaT7owaElQoEseP81xqRt6tHQmxRJRojn0yI3JNXrdWCFsD+26xA1eQQCwodJuMsYJLzQSScgjHuQ==}
engines: {node: ^8.13.0 || >=10.10.0}
@ -12332,11 +12241,6 @@ packages:
'@firebase/util': 0.2.47
dev: true
/flagged-respawn@2.0.0:
resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==}
engines: {node: '>= 10.13.0'}
dev: true
/flat-cache@3.0.4:
resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
engines: {node: ^10.12.0 || >=12.0.0}
@ -12393,13 +12297,7 @@ packages:
/for-in@1.0.2:
resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
engines: {node: '>=0.10.0'}
/for-own@1.0.0:
resolution: {integrity: sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=}
engines: {node: '>=0.10.0'}
dependencies:
for-in: 1.0.2
dev: true
dev: false
/foreach@2.0.5:
resolution: {integrity: sha1-C+4AUBiusmDQo6865ljdATbsG5k=}
@ -12908,15 +12806,6 @@ packages:
is-windows: 0.2.0
dev: true
/global-modules@1.0.0:
resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
engines: {node: '>=0.10.0'}
dependencies:
global-prefix: 1.0.2
is-windows: 1.0.2
resolve-dir: 1.0.1
dev: true
/global-prefix@0.1.5:
resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==}
engines: {node: '>=0.10.0'}
@ -12927,17 +12816,6 @@ packages:
which: 1.3.1
dev: true
/global-prefix@1.0.2:
resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
engines: {node: '>=0.10.0'}
dependencies:
expand-tilde: 2.0.2
homedir-polyfill: 1.0.3
ini: 1.3.8
is-windows: 1.0.2
which: 1.3.1
dev: true
/globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
@ -12986,18 +12864,6 @@ packages:
merge2: 1.4.1
slash: 3.0.0
/globby@12.0.2:
resolution: {integrity: sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
array-union: 3.0.1
dir-glob: 3.0.1
fast-glob: 3.3.1
ignore: 5.2.4
merge2: 1.4.1
slash: 4.0.0
dev: true
/globby@13.1.2:
resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@ -13007,7 +12873,6 @@ packages:
ignore: 5.2.4
merge2: 1.4.1
slash: 4.0.0
dev: false
/globby@5.0.0:
resolution: {integrity: sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==}
@ -13687,14 +13552,6 @@ packages:
dependencies:
safer-buffer: 2.1.2
/iconv-lite@0.6.2:
resolution: {integrity: sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==}
engines: {node: '>=0.10.0'}
requiresBuild: true
dependencies:
safer-buffer: 2.1.2
dev: true
/iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
@ -13946,12 +13803,33 @@ packages:
mute-stream: 0.0.8
ora: 5.4.1
run-async: 2.4.1
rxjs: 7.5.7
rxjs: 7.8.1
string-width: 4.2.3
strip-ansi: 6.0.1
through: 2.3.8
dev: true
/inquirer@8.2.6:
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
engines: {node: '>=12.0.0'}
dependencies:
ansi-escapes: 4.3.2
chalk: 4.1.2
cli-cursor: 3.1.0
cli-width: 3.0.0
external-editor: 3.1.0
figures: 3.1.0
lodash: 4.17.21
mute-stream: 0.0.8
ora: 5.4.1
run-async: 2.4.1
rxjs: 7.8.1
string-width: 4.2.3
strip-ansi: 6.0.1
through: 2.3.8
wrap-ansi: 6.2.0
dev: true
/int64-buffer@0.1.10:
resolution: {integrity: sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA==}
dev: true
@ -13977,11 +13855,6 @@ packages:
engines: {node: '>= 0.10'}
dev: true
/interpret@2.2.0:
resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==}
engines: {node: '>= 0.10'}
dev: true
/invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
dependencies:
@ -14007,14 +13880,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/is-absolute@1.0.0:
resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
engines: {node: '>=0.10.0'}
dependencies:
is-relative: 1.0.0
is-windows: 1.0.2
dev: true
/is-accessor-descriptor@0.1.6:
resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==}
engines: {node: '>=0.10.0'}
@ -14332,11 +14197,6 @@ packages:
engines: {node: '>=8'}
dev: true
/is-interactive@2.0.0:
resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
engines: {node: '>=12'}
dev: true
/is-lambda@1.0.1:
resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
dev: true
@ -14489,13 +14349,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/is-relative@1.0.0:
resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==}
engines: {node: '>=0.10.0'}
dependencies:
is-unc-path: 1.0.0
dev: true
/is-resolvable@1.1.0:
resolution: {integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==}
dev: true
@ -14575,23 +14428,11 @@ packages:
resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
dev: true
/is-unc-path@1.0.0:
resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
engines: {node: '>=0.10.0'}
dependencies:
unc-path-regex: 0.1.2
dev: true
/is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
dev: true
/is-unicode-supported@1.1.0:
resolution: {integrity: sha512-lDcxivp8TJpLG75/DpatAqNzOpDPSpED8XNtrpBHTdQ2InQ1PbW78jhwSxyxhhu+xbVSast2X38bwj8atwoUQA==}
engines: {node: '>=12'}
dev: true
/is-utf8@0.2.1:
resolution: {integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=}
dev: true
@ -14624,6 +14465,7 @@ packages:
/is-windows@1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
dev: false
/is-word-character@1.0.3:
resolution: {integrity: sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==}
@ -14978,7 +14820,7 @@ packages:
'@types/node': 20.2.5
anymatch: 3.1.3
fb-watchman: 2.0.1
graceful-fs: 4.2.10
graceful-fs: 4.2.11
jest-regex-util: 29.4.3
jest-util: 29.5.0
jest-worker: 29.5.0
@ -15794,20 +15636,6 @@ packages:
immediate: 3.0.6
dev: true
/liftoff@4.0.0:
resolution: {integrity: sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==}
engines: {node: '>=10.13.0'}
dependencies:
extend: 3.0.2
findup-sync: 5.0.0
fined: 2.0.0
flagged-respawn: 2.0.0
is-plain-object: 5.0.0
object.map: 1.0.1
rechoir: 0.8.0
resolve: 1.22.2
dev: true
/lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
@ -16071,7 +15899,7 @@ packages:
dev: true
/lodash.get@4.4.2:
resolution: {integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=}
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
dev: true
/lodash.intersection@4.4.0:
@ -16177,14 +16005,6 @@ packages:
is-unicode-supported: 0.1.0
dev: true
/log-symbols@5.1.0:
resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
engines: {node: '>=12'}
dependencies:
chalk: 5.0.1
is-unicode-supported: 1.1.0
dev: true
/log-update@2.3.0:
resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==}
engines: {node: '>=4'}
@ -16339,13 +16159,6 @@ packages:
- supports-color
dev: true
/make-iterator@1.0.1:
resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==}
engines: {node: '>=0.10.0'}
dependencies:
kind-of: 6.0.3
dev: true
/makeerror@1.0.12:
resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
dependencies:
@ -16355,6 +16168,7 @@ packages:
/map-cache@0.2.2:
resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
engines: {node: '>=0.10.0'}
dev: false
/map-obj@1.0.1:
resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
@ -17611,21 +17425,21 @@ packages:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
dev: true
/node-plop@0.30.0:
resolution: {integrity: sha512-5w9+jWoy9OtMm3qRmHgL2z/3L5VL3RhEegKkKC4tA1IIjG3aXf8Ee/8wdgU9qXyt1yDfPWI9Tan1rHpXAp0ZnA==}
/node-plop@0.31.1:
resolution: {integrity: sha512-qmXJJt3YETFt/e0dtMADVpvck6EvN01Jig086o+J3M6G++mWA7iJ3Pqz4m4kvlynh73Iz2/rcZzxq7xTiF+aIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
'@types/inquirer': 8.1.3
'@types/inquirer': 8.2.9
change-case: 4.1.2
del: 6.0.0
globby: 12.0.2
globby: 13.1.2
handlebars: 4.7.7
inquirer: 8.2.0
inquirer: 8.2.6
isbinaryfile: 4.0.8
lodash.get: 4.4.2
lower-case: 2.0.2
mkdirp: 1.0.4
resolve: 1.22.2
resolve: 1.22.4
title-case: 3.0.3
upper-case: 2.0.2
dev: true
@ -17668,7 +17482,7 @@ packages:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
hosted-git-info: 2.8.5
resolve: 1.22.2
resolve: 1.22.4
semver: 5.7.1
validate-npm-package-license: 3.0.4
@ -17915,16 +17729,6 @@ packages:
has-symbols: 1.0.3
object-keys: 1.1.1
/object.defaults@1.1.0:
resolution: {integrity: sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=}
engines: {node: '>=0.10.0'}
dependencies:
array-each: 1.0.1
array-slice: 1.1.0
for-own: 1.0.0
isobject: 3.0.1
dev: true
/object.entries@1.1.5:
resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==}
engines: {node: '>= 0.4'}
@ -17985,19 +17789,12 @@ packages:
es-abstract: 1.22.1
dev: false
/object.map@1.0.1:
resolution: {integrity: sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=}
engines: {node: '>=0.10.0'}
dependencies:
for-own: 1.0.0
make-iterator: 1.0.1
dev: true
/object.pick@1.3.0:
resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
engines: {node: '>=0.10.0'}
dependencies:
isobject: 3.0.1
dev: false
/object.values@1.1.5:
resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==}
@ -18161,21 +17958,6 @@ packages:
wcwidth: 1.0.1
dev: true
/ora@6.0.1:
resolution: {integrity: sha512-TDdKkKHdWE6jo/6pIa5U5AWcSVfpNRFJ8sdRJpioGNVPLAzZzHs/N+QhUfF7ZbyoC+rnDuNTKzeDJUbAza9g4g==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
bl: 5.0.0
chalk: 4.1.2
cli-cursor: 4.0.0
cli-spinners: 2.6.1
is-interactive: 2.0.0
is-unicode-supported: 1.1.0
log-symbols: 5.1.0
strip-ansi: 7.0.1
wcwidth: 1.0.1
dev: true
/os-browserify@0.3.0:
resolution: {integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=}
dev: true
@ -18475,15 +18257,6 @@ packages:
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
/parse-filepath@1.0.2:
resolution: {integrity: sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=}
engines: {node: '>=0.8'}
dependencies:
is-absolute: 1.0.0
map-cache: 0.2.2
path-root: 0.1.1
dev: true
/parse-git-config@1.1.1:
resolution: {integrity: sha512-S3LGXJZVSy/hswvbSkfdbKBRVsnqKrVu6j8fcvdtJ4TxosSELyQDsJPuGPXuZ+EyuYuJd3O4uAF8gcISR0OFrQ==}
engines: {node: '>=0.10.0'}
@ -18654,18 +18427,6 @@ packages:
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
/path-root-regex@0.1.2:
resolution: {integrity: sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=}
engines: {node: '>=0.10.0'}
dev: true
/path-root@0.1.1:
resolution: {integrity: sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=}
engines: {node: '>=0.10.0'}
dependencies:
path-root-regex: 0.1.2
dev: true
/path-to-regexp@0.1.7:
resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
dev: true
@ -18837,21 +18598,6 @@ packages:
semver-compare: 1.0.0
dev: true
/plop@3.0.5:
resolution: {integrity: sha512-bD+/Lr+7NCjNIaYJq1cyHDfxtVCdjwfprgKsNwHwFnwntTiNwZWyxd1NuRDygdQWyPi+rstFMMFAPMek0cYaqA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
hasBin: true
dependencies:
'@types/liftoff': 4.0.0
chalk: 5.0.1
interpret: 2.2.0
liftoff: 4.0.0
minimist: 1.2.6
node-plop: 0.30.0
ora: 6.0.1
v8flags: 4.0.0
dev: true
/pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
@ -19161,7 +18907,7 @@ packages:
postcss: 8.4.31
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.2
resolve: 1.22.4
dev: true
/postcss-initial@4.0.1(postcss@8.4.31):
@ -20857,13 +20603,6 @@ packages:
resolve: 1.22.4
dev: true
/rechoir@0.8.0:
resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
engines: {node: '>= 10.13.0'}
dependencies:
resolve: 1.22.2
dev: true
/recursive-copy@2.0.11:
resolution: {integrity: sha512-DqL2kO10mUne7XK5BPcwRtOJJZKhddD7IrW4UmHmKrwdV3HLPWcw6Jr4Jh12ooddfJOVz7ynFoFYYnPM7De0Og==}
dependencies:
@ -21259,14 +20998,6 @@ packages:
global-modules: 0.2.3
dev: true
/resolve-dir@1.0.1:
resolution: {integrity: sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=}
engines: {node: '>=0.10.0'}
dependencies:
expand-tilde: 2.0.2
global-modules: 1.0.0
dev: true
/resolve-from@3.0.0:
resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==}
engines: {node: '>=4'}
@ -21310,19 +21041,11 @@ packages:
resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
hasBin: true
dependencies:
is-core-module: 2.12.1
is-core-module: 2.13.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
/resolve@1.22.2:
resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
hasBin: true
dependencies:
is-core-module: 2.12.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
/resolve@1.22.4:
resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
hasBin: true
@ -21334,7 +21057,7 @@ packages:
/resolve@2.0.0-next.3:
resolution: {integrity: sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==}
dependencies:
is-core-module: 2.12.1
is-core-module: 2.13.0
path-parse: 1.0.7
dev: true
@ -21374,14 +21097,6 @@ packages:
onetime: 5.1.2
signal-exit: 3.0.7
/restore-cursor@4.0.0:
resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
onetime: 5.1.2
signal-exit: 3.0.7
dev: true
/restructure@3.0.0:
resolution: {integrity: sha512-Xj8/MEIhhfj9X2rmD9iJ4Gga9EFqVlpMj3vfLnV2r/Mh5jRMryNV+6lWh9GdJtDBcBSPIqzRdfBQ3wDtNFv/uw==}
dev: true
@ -21507,7 +21222,7 @@ packages:
postcss-load-config: 3.1.4(postcss@8.4.31)
postcss-modules: 4.0.0(postcss@8.4.31)
promise.series: 0.2.0
resolve: 1.22.2
resolve: 1.22.4
rollup-pluginutils: 2.8.2
safe-identifier: 0.4.2
style-inject: 0.3.0
@ -21599,17 +21314,10 @@ packages:
dependencies:
tslib: 1.14.1
/rxjs@7.5.7:
resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==}
dependencies:
tslib: 2.6.2
dev: true
/rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
dependencies:
tslib: 2.6.2
dev: false
/sade@1.7.4:
resolution: {integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==}
@ -22632,13 +22340,6 @@ packages:
dependencies:
ansi-regex: 5.0.1
/strip-ansi@7.0.1:
resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==}
engines: {node: '>=12'}
dependencies:
ansi-regex: 6.0.1
dev: true
/strip-bom@2.0.0:
resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==}
engines: {node: '>=0.10.0'}
@ -23722,11 +23423,6 @@ packages:
has-symbols: 1.0.3
which-boxed-primitive: 1.0.2
/unc-path-regex@0.1.2:
resolution: {integrity: sha1-5z3T17DXxe2G+6xrCufYxqadUPo=}
engines: {node: '>=0.10.0'}
dev: true
/undici@5.26.3:
resolution: {integrity: sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==}
engines: {node: '>=14.0'}
@ -24221,11 +23917,6 @@ packages:
convert-source-map: 2.0.0
dev: true
/v8flags@4.0.0:
resolution: {integrity: sha512-83N0OkTbn6gOjJ2awNuzuK4czeGxwEwBoTqlhBZhnp8o0IJ72mXRQKphj/azwRf3acbDJZYZhbOPEJHd884ELg==}
engines: {node: '>= 10.13.0'}
dev: true
/valid-url@1.0.9:
resolution: {integrity: sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=}
dev: true
@ -24651,7 +24342,7 @@ packages:
engines: {node: '>=0.10.0'}
/wordwrap@1.0.0:
resolution: {integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=}
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
dev: true
/wrap-ansi@3.0.1:
@ -24678,7 +24369,6 @@ packages:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
dev: false
/wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
@ -24694,7 +24384,7 @@ packages:
/write-file-atomic@2.4.3:
resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
dependencies:
graceful-fs: 4.2.9
graceful-fs: 4.2.11
imurmurhash: 0.1.4
signal-exit: 3.0.7

View file

@ -1,6 +1,31 @@
module.exports = function (plop) {
const toFileName = (str) => str.toLowerCase().replace(/ /g, '-')
plop.setHelper('toFileName', toFileName)
import { type NodePlopAPI } from 'node-plop'
import path from 'path'
import * as helpers from './helpers'
interface TestResponse {
appDir: string
type: 'e2e' | 'production' | 'development' | 'unit'
}
interface ErrorResponse {
name: string
title: string
why: string
fix: string
}
function validateNonEmptyString(field: string) {
return function (value: string) {
if (/.+/.test(value)) {
return true
}
return `${field} is required`
}
}
export default function generator(plop: NodePlopAPI): void {
// make our custom helpers available for use in templates as handlebars helpers
helpers.init(plop)
plop.setGenerator('test', {
description: 'Create a new test',
@ -15,6 +40,7 @@ module.exports = function (plop) {
type: 'input',
name: 'name',
message: 'Test name',
validate: validateNonEmptyString('test name'),
},
{
type: 'list',
@ -34,12 +60,18 @@ module.exports = function (plop) {
],
},
],
actions: function (data) {
const appDirPath = data.appDir ? 'app-dir/' : ''
let templatePath = `test/${
data.type === 'unit' ? 'unit' : 'e2e'
}/${appDirPath}test-template`
let targetPath = `test/{{ type }}/${appDirPath}`
actions: function (answers) {
const { appDir, type } = answers as TestResponse
const testRoot = path.join(plop.getDestBasePath(), 'test')
const appDirPath = appDir ? 'app-dir/' : ''
let templatePath = path.join(
testRoot,
type === 'unit' ? 'unit' : 'e2e',
appDirPath,
'test-template'
)
let targetPath = path.join(testRoot, type, appDirPath)
return [
{
@ -59,24 +91,30 @@ module.exports = function (plop) {
name: 'name',
type: 'input',
message: 'Url path with dashes. E.g. circular-structure',
validate: validateNonEmptyString('path'),
},
{
name: 'title',
type: 'input',
message: 'Title for the error. E.g. Circular Structure',
validate: validateNonEmptyString('title'),
},
{
name: 'why',
type: 'input',
message: 'What caused the error to happen?',
validate: validateNonEmptyString('why'),
},
{
name: 'fix',
type: 'input',
message: 'What are the possible ways to fix it?',
validate: validateNonEmptyString('fix'),
},
],
actions: function ({ name }) {
actions: function (answers) {
const { name } = answers as ErrorResponse
return [
{
type: 'add',
@ -86,16 +124,16 @@ module.exports = function (plop) {
{
type: 'modify',
path: 'errors/manifest.json',
transform(fileContents) {
transform(fileContents: string) {
const manifestData = JSON.parse(fileContents)
manifestData.routes[0].routes.push({
title: toFileName(name),
path: `/errors/${toFileName(name)}.md`,
title: helpers.toFileName(name),
path: `/errors/${helpers.toFileName(name)}.md`,
})
return JSON.stringify(manifestData, null, 2)
},
},
`Url for the error: https://nextjs.org/docs/messages/${toFileName(
`Url for the error: https://nextjs.org/docs/messages/${helpers.toFileName(
name
)}`,
]

View file

@ -0,0 +1,9 @@
import type { NodePlopAPI } from 'node-plop'
export function toFileName(str: string) {
return str.toLowerCase().replace(/ /g, '-')
}
export function init(plop: NodePlopAPI): void {
plop.setHelper('toFileName', toFileName)
}