5
5
* @param {import('plop').NodePlopAPI } plop
6
6
*/
7
7
export default function ( plop ) {
8
+ plop . setHelper ( 'eq' , ( a , b ) => a === b ) ;
8
9
plop . setHelper ( 'hasRouteLocale' , ( value ) => value . includes ( '[locale]/' ) ) ;
9
10
plop . setHelper ( 'routeParams' , ( value ) => {
10
11
// return all params in between [] in value:
@@ -14,9 +15,17 @@ export default function (plop) {
14
15
. map ( ( param ) => param . slice ( 1 , - 1 ) ) // remove brackets
15
16
. filter ( ( param ) => param !== 'locale' ) ; // remove locale param
16
17
} ) ;
18
+ plop . setHelper ( 'trailingParam' , ( value ) =>
19
+ // Return the trailing param in a route
20
+ // If the last slug is not a param, this is undefined
21
+ value . split ( '/' ) . pop ( ) ?. match ( / \[ ( .* ?) \] / ) ?. [ 1 ]
22
+ ) ;
17
23
plop . setHelper ( 'trailingSlash' , ( value ) =>
18
24
value . endsWith ( '/' ) ? value : `${ value } /`
19
25
) ;
26
+ plop . setHelper ( 'toTemplateString' , ( value ) =>
27
+ `${ value . replace ( / \[ ( .* ?) \] / g, '${$1}' ) } `
28
+ ) ;
20
29
21
30
plop . setGenerator ( 'api' , {
22
31
description : 'create a new API route' ,
@@ -149,13 +158,20 @@ export default function (plop) {
149
158
{
150
159
type : 'input' ,
151
160
name : 'route' ,
152
- message : 'Page route (e.g. [locale]/search/ )?' ,
161
+ message : 'Page route (e.g. ` [locale]/search/` )?' ,
153
162
} ,
154
163
{
155
164
type : 'input' ,
156
165
name : 'name' ,
157
166
message : 'Model name in DatoCMS? (leave empty if none)' ,
158
167
} ,
168
+ {
169
+ when : ( data ) => ! ! data . name ,
170
+ type : 'confirm' ,
171
+ name : 'separateRouting' ,
172
+ message : ( data ) => `Create separate file in routing for \`${ plop . getHelper ( 'pascalCase' ) ( data . name ) } \`?` ,
173
+ default : false ,
174
+ } ,
159
175
] ,
160
176
actions : [
161
177
{
@@ -169,6 +185,18 @@ export default function (plop) {
169
185
templateFile : 'templates/page/route.query.graphql.hbs' ,
170
186
skip : ( data ) => ! data . name && 'No DatoCMS model' ,
171
187
} ,
188
+ {
189
+ type : 'add' ,
190
+ path : '../../src/lib/routing/{{ pascalCase name }}Route.fragment.graphql' ,
191
+ templateFile : 'templates/page/page.fragment.graphql.hbs' ,
192
+ skip : ( data ) => ! data . name && 'No RouteFragment' ,
193
+ } ,
194
+ {
195
+ type : 'add' ,
196
+ path : '../../src/lib/routing/{{ camelCase name }}.ts' ,
197
+ templateFile : 'templates/page/page.ts.hbs' ,
198
+ skip : ( data ) => ! data . separateRouting && 'No separate route' ,
199
+ } ,
172
200
] ,
173
201
} ) ;
174
202
}
0 commit comments