create-moria 0.3.3 → 0.3.4
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/.turbo/turbo-build.log +1 -1
- package/dist/index.js +118 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +134 -1
package/.turbo/turbo-build.log
CHANGED
package/dist/index.js
CHANGED
|
@@ -17,7 +17,7 @@ import pc from 'picocolors';
|
|
|
17
17
|
import prompts from 'prompts';
|
|
18
18
|
import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
19
19
|
import { join, resolve } from 'node:path';
|
|
20
|
-
const VERSION = '0.3.
|
|
20
|
+
const VERSION = '0.3.4';
|
|
21
21
|
export const cli = cac('create-moria');
|
|
22
22
|
// ─── Template file generators ─────────────────────────
|
|
23
23
|
function tsconfigContent() {
|
|
@@ -78,6 +78,9 @@ export default defineConfig({
|
|
|
78
78
|
database: {
|
|
79
79
|
${dbConfig}
|
|
80
80
|
},
|
|
81
|
+
vite: {
|
|
82
|
+
clientEntry: '/src/entry-client.ts',
|
|
83
|
+
},
|
|
81
84
|
});
|
|
82
85
|
`;
|
|
83
86
|
}
|
|
@@ -93,6 +96,9 @@ export default {
|
|
|
93
96
|
database: {
|
|
94
97
|
${dbConfig}
|
|
95
98
|
},
|
|
99
|
+
vite: {
|
|
100
|
+
clientEntry: '/src/entry-client.js',
|
|
101
|
+
},
|
|
96
102
|
};
|
|
97
103
|
`;
|
|
98
104
|
}
|
|
@@ -189,6 +195,54 @@ export function GET(_request: FastifyRequest, _reply: FastifyReply) {
|
|
|
189
195
|
}
|
|
190
196
|
`;
|
|
191
197
|
}
|
|
198
|
+
function srcApiHealthTs() {
|
|
199
|
+
return `/**
|
|
200
|
+
* GET /api/health
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
import type { FastifyRequest, FastifyReply } from 'fastify';
|
|
204
|
+
|
|
205
|
+
export function GET(_request: FastifyRequest, _reply: FastifyReply) {
|
|
206
|
+
return { status: 'ok', uptime: process.uptime() };
|
|
207
|
+
}
|
|
208
|
+
`;
|
|
209
|
+
}
|
|
210
|
+
function srcApiUsersTs() {
|
|
211
|
+
return `/**
|
|
212
|
+
* GET /api/users/:id
|
|
213
|
+
*/
|
|
214
|
+
|
|
215
|
+
import type { FastifyRequest, FastifyReply } from 'fastify';
|
|
216
|
+
|
|
217
|
+
export function GET(request: FastifyRequest<{ Params: { id: string } }>, _reply: FastifyReply) {
|
|
218
|
+
const { id } = request.params;
|
|
219
|
+
return {
|
|
220
|
+
id,
|
|
221
|
+
name: \`User \${id}\`,
|
|
222
|
+
email: \`user\${id}@example.com\`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
`;
|
|
226
|
+
}
|
|
227
|
+
function srcApiSearchTs() {
|
|
228
|
+
return `/**
|
|
229
|
+
* GET /api/search?q=...
|
|
230
|
+
*/
|
|
231
|
+
|
|
232
|
+
import type { FastifyRequest, FastifyReply } from 'fastify';
|
|
233
|
+
|
|
234
|
+
export function GET(request: FastifyRequest<{ Querystring: { q?: string } }>, _reply: FastifyReply) {
|
|
235
|
+
const { q = '' } = request.query;
|
|
236
|
+
return {
|
|
237
|
+
query: q,
|
|
238
|
+
results: [
|
|
239
|
+
{ id: 1, title: \`Result for \${q} 1\` },
|
|
240
|
+
{ id: 2, title: \`Result for \${q} 2\` },
|
|
241
|
+
],
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
`;
|
|
245
|
+
}
|
|
192
246
|
function srcApiHelloJs() {
|
|
193
247
|
return `/**
|
|
194
248
|
* GET /api/hello
|
|
@@ -202,6 +256,48 @@ export function GET(_request, _reply) {
|
|
|
202
256
|
}
|
|
203
257
|
`;
|
|
204
258
|
}
|
|
259
|
+
function srcApiHealthJs() {
|
|
260
|
+
return `/**
|
|
261
|
+
* GET /api/health
|
|
262
|
+
*/
|
|
263
|
+
|
|
264
|
+
export function GET(_request, _reply) {
|
|
265
|
+
return { status: 'ok', uptime: process.uptime() };
|
|
266
|
+
}
|
|
267
|
+
`;
|
|
268
|
+
}
|
|
269
|
+
function srcApiUsersJs() {
|
|
270
|
+
return `/**
|
|
271
|
+
* GET /api/users/:id
|
|
272
|
+
*/
|
|
273
|
+
|
|
274
|
+
export function GET(request, _reply) {
|
|
275
|
+
const { id } = request.params;
|
|
276
|
+
return {
|
|
277
|
+
id,
|
|
278
|
+
name: \`User \${id}\`,
|
|
279
|
+
email: \`user\${id}@example.com\`,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
`;
|
|
283
|
+
}
|
|
284
|
+
function srcApiSearchJs() {
|
|
285
|
+
return `/**
|
|
286
|
+
* GET /api/search?q=...
|
|
287
|
+
*/
|
|
288
|
+
|
|
289
|
+
export function GET(request, _reply) {
|
|
290
|
+
const { q = '' } = request.query;
|
|
291
|
+
return {
|
|
292
|
+
query: q,
|
|
293
|
+
results: [
|
|
294
|
+
{ id: 1, title: \`Result for \${q} 1\` },
|
|
295
|
+
{ id: 2, title: \`Result for \${q} 2\` },
|
|
296
|
+
],
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
`;
|
|
300
|
+
}
|
|
205
301
|
function srcPageIndexTs() {
|
|
206
302
|
return `/**
|
|
207
303
|
* Home page — server-rendered Mithril.js component.
|
|
@@ -237,6 +333,14 @@ export default {
|
|
|
237
333
|
(data?.features ?? []).map((f: string) => m('li', f))
|
|
238
334
|
),
|
|
239
335
|
m('hr', { style: 'border:none;border-top:1px solid #eee;margin:1.5rem 0' }),
|
|
336
|
+
m('h2', { style: 'font-size:1.3rem' }, 'Quick Links'),
|
|
337
|
+
m('ul', { style: 'line-height:1.8;display:flex;gap:1rem;padding:0;list-style:none' }, [
|
|
338
|
+
m('li', m('a', { href: '/api/hello', target: '_blank' }, 'Hello API')),
|
|
339
|
+
m('li', m('a', { href: '/api/health', target: '_blank' }, 'Health Check')),
|
|
340
|
+
m('li', m('a', { href: '/api/users/42', target: '_blank' }, 'User Params')),
|
|
341
|
+
m('li', m('a', { href: '/api/search?q=moria', target: '_blank' }, 'Search Query')),
|
|
342
|
+
]),
|
|
343
|
+
m('hr', { style: 'border:none;border-top:1px solid #eee;margin:1.5rem 0' }),
|
|
240
344
|
m('p', { style: 'color:#999;font-size:0.9rem' }, [
|
|
241
345
|
'Edit ',
|
|
242
346
|
m('code', 'src/routes/pages/index.ts'),
|
|
@@ -282,6 +386,14 @@ export default {
|
|
|
282
386
|
(data?.features ?? []).map((f) => m('li', f))
|
|
283
387
|
),
|
|
284
388
|
m('hr', { style: 'border:none;border-top:1px solid #eee;margin:1.5rem 0' }),
|
|
389
|
+
m('h2', { style: 'font-size:1.3rem' }, 'Quick Links'),
|
|
390
|
+
m('ul', { style: 'line-height:1.8;display:flex;gap:1rem;padding:0;list-style:none' }, [
|
|
391
|
+
m('li', m('a', { href: '/api/hello', target: '_blank' }, 'Hello API')),
|
|
392
|
+
m('li', m('a', { href: '/api/health', target: '_blank' }, 'Health Check')),
|
|
393
|
+
m('li', m('a', { href: '/api/users/42', target: '_blank' }, 'User Params')),
|
|
394
|
+
m('li', m('a', { href: '/api/search?q=moria', target: '_blank' }, 'Search Query')),
|
|
395
|
+
]),
|
|
396
|
+
m('hr', { style: 'border:none;border-top:1px solid #eee;margin:1.5rem 0' }),
|
|
285
397
|
m('p', { style: 'color:#999;font-size:0.9rem' }, [
|
|
286
398
|
'Edit ',
|
|
287
399
|
m('code', 'src/routes/pages/index.js'),
|
|
@@ -418,7 +530,7 @@ cli
|
|
|
418
530
|
console.log();
|
|
419
531
|
// ─── Create directory structure ─────────────────────
|
|
420
532
|
if (template === 'default') {
|
|
421
|
-
mkdirs(join(dir, 'src', 'routes', 'api'), join(dir, 'src', 'routes', 'pages'));
|
|
533
|
+
mkdirs(join(dir, 'src', 'routes', 'api'), join(dir, 'src', 'routes', 'api', 'users'), join(dir, 'src', 'routes', 'pages'));
|
|
422
534
|
}
|
|
423
535
|
else {
|
|
424
536
|
mkdirs(join(dir, 'src', 'routes', 'api'));
|
|
@@ -480,6 +592,10 @@ cli
|
|
|
480
592
|
write(join(dir, `src/routes/api/hello.${ext}`), isTS ? srcApiHelloTs() : srcApiHelloJs());
|
|
481
593
|
// SSR page
|
|
482
594
|
write(join(dir, `src/routes/pages/index.${ext}`), isTS ? srcPageIndexTs() : srcPageIndexJs());
|
|
595
|
+
// Additional API routes
|
|
596
|
+
write(join(dir, `src/routes/api/health.${ext}`), isTS ? srcApiHealthTs() : srcApiHealthJs());
|
|
597
|
+
write(join(dir, `src/routes/api/users/[id].${ext}`), isTS ? srcApiUsersTs() : srcApiUsersJs());
|
|
598
|
+
write(join(dir, `src/routes/api/search.${ext}`), isTS ? srcApiSearchTs() : srcApiSearchJs());
|
|
483
599
|
}
|
|
484
600
|
else {
|
|
485
601
|
// Minimal template — just entry + one API route
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;AAEvC,yDAAyD;AAEzD,SAAS,eAAe;IACpB,OAAO,IAAI,CAAC,SAAS,CACjB;QACI,eAAe,EAAE;YACb,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,SAAS;YAC3B,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,IAAI;YACjB,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,IAAI;SAClB;QACD,OAAO,EAAE,CAAC,KAAK,CAAC;QAChB,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC;KACpC,EACD,IAAI,EACJ,CAAC,CACJ,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,EAAU;IAC1B,MAAM,KAAK,GAAG;QACV,iCAAiC;QACjC,EAAE;QACF,UAAU;QACV,WAAW;QACX,EAAE;QACF,YAAY;KACf,CAAC;IACF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC7E,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,yCAAyC,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB;IACrB,OAAO;;;;;CAKV,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,EAAU;IAC7B,MAAM,QAAQ,GACV,EAAE,KAAK,QAAQ;QACX,CAAC,CAAC,mDAAmD;QACrD,CAAC,CAAC,wDAAwD,CAAC;IACnE,OAAO;;;;;;;EAOT,QAAQ
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -19,7 +19,7 @@ import prompts from 'prompts';
|
|
|
19
19
|
import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
20
20
|
import { join, resolve } from 'node:path';
|
|
21
21
|
|
|
22
|
-
const VERSION = '0.3.
|
|
22
|
+
const VERSION = '0.3.4';
|
|
23
23
|
|
|
24
24
|
export const cli = cac('create-moria');
|
|
25
25
|
|
|
@@ -90,6 +90,9 @@ export default defineConfig({
|
|
|
90
90
|
database: {
|
|
91
91
|
${dbConfig}
|
|
92
92
|
},
|
|
93
|
+
vite: {
|
|
94
|
+
clientEntry: '/src/entry-client.ts',
|
|
95
|
+
},
|
|
93
96
|
});
|
|
94
97
|
`;
|
|
95
98
|
}
|
|
@@ -107,6 +110,9 @@ export default {
|
|
|
107
110
|
database: {
|
|
108
111
|
${dbConfig}
|
|
109
112
|
},
|
|
113
|
+
vite: {
|
|
114
|
+
clientEntry: '/src/entry-client.js',
|
|
115
|
+
},
|
|
110
116
|
};
|
|
111
117
|
`;
|
|
112
118
|
}
|
|
@@ -210,6 +216,57 @@ export function GET(_request: FastifyRequest, _reply: FastifyReply) {
|
|
|
210
216
|
`;
|
|
211
217
|
}
|
|
212
218
|
|
|
219
|
+
function srcApiHealthTs(): string {
|
|
220
|
+
return `/**
|
|
221
|
+
* GET /api/health
|
|
222
|
+
*/
|
|
223
|
+
|
|
224
|
+
import type { FastifyRequest, FastifyReply } from 'fastify';
|
|
225
|
+
|
|
226
|
+
export function GET(_request: FastifyRequest, _reply: FastifyReply) {
|
|
227
|
+
return { status: 'ok', uptime: process.uptime() };
|
|
228
|
+
}
|
|
229
|
+
`;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function srcApiUsersTs(): string {
|
|
233
|
+
return `/**
|
|
234
|
+
* GET /api/users/:id
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
import type { FastifyRequest, FastifyReply } from 'fastify';
|
|
238
|
+
|
|
239
|
+
export function GET(request: FastifyRequest<{ Params: { id: string } }>, _reply: FastifyReply) {
|
|
240
|
+
const { id } = request.params;
|
|
241
|
+
return {
|
|
242
|
+
id,
|
|
243
|
+
name: \`User \${id}\`,
|
|
244
|
+
email: \`user\${id}@example.com\`,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
`;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function srcApiSearchTs(): string {
|
|
251
|
+
return `/**
|
|
252
|
+
* GET /api/search?q=...
|
|
253
|
+
*/
|
|
254
|
+
|
|
255
|
+
import type { FastifyRequest, FastifyReply } from 'fastify';
|
|
256
|
+
|
|
257
|
+
export function GET(request: FastifyRequest<{ Querystring: { q?: string } }>, _reply: FastifyReply) {
|
|
258
|
+
const { q = '' } = request.query;
|
|
259
|
+
return {
|
|
260
|
+
query: q,
|
|
261
|
+
results: [
|
|
262
|
+
{ id: 1, title: \`Result for \${q} 1\` },
|
|
263
|
+
{ id: 2, title: \`Result for \${q} 2\` },
|
|
264
|
+
],
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
`;
|
|
268
|
+
}
|
|
269
|
+
|
|
213
270
|
function srcApiHelloJs(): string {
|
|
214
271
|
return `/**
|
|
215
272
|
* GET /api/hello
|
|
@@ -224,6 +281,51 @@ export function GET(_request, _reply) {
|
|
|
224
281
|
`;
|
|
225
282
|
}
|
|
226
283
|
|
|
284
|
+
function srcApiHealthJs(): string {
|
|
285
|
+
return `/**
|
|
286
|
+
* GET /api/health
|
|
287
|
+
*/
|
|
288
|
+
|
|
289
|
+
export function GET(_request, _reply) {
|
|
290
|
+
return { status: 'ok', uptime: process.uptime() };
|
|
291
|
+
}
|
|
292
|
+
`;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function srcApiUsersJs(): string {
|
|
296
|
+
return `/**
|
|
297
|
+
* GET /api/users/:id
|
|
298
|
+
*/
|
|
299
|
+
|
|
300
|
+
export function GET(request, _reply) {
|
|
301
|
+
const { id } = request.params;
|
|
302
|
+
return {
|
|
303
|
+
id,
|
|
304
|
+
name: \`User \${id}\`,
|
|
305
|
+
email: \`user\${id}@example.com\`,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
`;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
function srcApiSearchJs(): string {
|
|
312
|
+
return `/**
|
|
313
|
+
* GET /api/search?q=...
|
|
314
|
+
*/
|
|
315
|
+
|
|
316
|
+
export function GET(request, _reply) {
|
|
317
|
+
const { q = '' } = request.query;
|
|
318
|
+
return {
|
|
319
|
+
query: q,
|
|
320
|
+
results: [
|
|
321
|
+
{ id: 1, title: \`Result for \${q} 1\` },
|
|
322
|
+
{ id: 2, title: \`Result for \${q} 2\` },
|
|
323
|
+
],
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
`;
|
|
327
|
+
}
|
|
328
|
+
|
|
227
329
|
function srcPageIndexTs(): string {
|
|
228
330
|
return `/**
|
|
229
331
|
* Home page — server-rendered Mithril.js component.
|
|
@@ -259,6 +361,14 @@ export default {
|
|
|
259
361
|
(data?.features ?? []).map((f: string) => m('li', f))
|
|
260
362
|
),
|
|
261
363
|
m('hr', { style: 'border:none;border-top:1px solid #eee;margin:1.5rem 0' }),
|
|
364
|
+
m('h2', { style: 'font-size:1.3rem' }, 'Quick Links'),
|
|
365
|
+
m('ul', { style: 'line-height:1.8;display:flex;gap:1rem;padding:0;list-style:none' }, [
|
|
366
|
+
m('li', m('a', { href: '/api/hello', target: '_blank' }, 'Hello API')),
|
|
367
|
+
m('li', m('a', { href: '/api/health', target: '_blank' }, 'Health Check')),
|
|
368
|
+
m('li', m('a', { href: '/api/users/42', target: '_blank' }, 'User Params')),
|
|
369
|
+
m('li', m('a', { href: '/api/search?q=moria', target: '_blank' }, 'Search Query')),
|
|
370
|
+
]),
|
|
371
|
+
m('hr', { style: 'border:none;border-top:1px solid #eee;margin:1.5rem 0' }),
|
|
262
372
|
m('p', { style: 'color:#999;font-size:0.9rem' }, [
|
|
263
373
|
'Edit ',
|
|
264
374
|
m('code', 'src/routes/pages/index.ts'),
|
|
@@ -305,6 +415,14 @@ export default {
|
|
|
305
415
|
(data?.features ?? []).map((f) => m('li', f))
|
|
306
416
|
),
|
|
307
417
|
m('hr', { style: 'border:none;border-top:1px solid #eee;margin:1.5rem 0' }),
|
|
418
|
+
m('h2', { style: 'font-size:1.3rem' }, 'Quick Links'),
|
|
419
|
+
m('ul', { style: 'line-height:1.8;display:flex;gap:1rem;padding:0;list-style:none' }, [
|
|
420
|
+
m('li', m('a', { href: '/api/hello', target: '_blank' }, 'Hello API')),
|
|
421
|
+
m('li', m('a', { href: '/api/health', target: '_blank' }, 'Health Check')),
|
|
422
|
+
m('li', m('a', { href: '/api/users/42', target: '_blank' }, 'User Params')),
|
|
423
|
+
m('li', m('a', { href: '/api/search?q=moria', target: '_blank' }, 'Search Query')),
|
|
424
|
+
]),
|
|
425
|
+
m('hr', { style: 'border:none;border-top:1px solid #eee;margin:1.5rem 0' }),
|
|
308
426
|
m('p', { style: 'color:#999;font-size:0.9rem' }, [
|
|
309
427
|
'Edit ',
|
|
310
428
|
m('code', 'src/routes/pages/index.js'),
|
|
@@ -456,6 +574,7 @@ cli
|
|
|
456
574
|
if (template === 'default') {
|
|
457
575
|
mkdirs(
|
|
458
576
|
join(dir, 'src', 'routes', 'api'),
|
|
577
|
+
join(dir, 'src', 'routes', 'api', 'users'),
|
|
459
578
|
join(dir, 'src', 'routes', 'pages')
|
|
460
579
|
);
|
|
461
580
|
} else {
|
|
@@ -545,6 +664,20 @@ cli
|
|
|
545
664
|
join(dir, `src/routes/pages/index.${ext}`),
|
|
546
665
|
isTS ? srcPageIndexTs() : srcPageIndexJs()
|
|
547
666
|
);
|
|
667
|
+
|
|
668
|
+
// Additional API routes
|
|
669
|
+
write(
|
|
670
|
+
join(dir, `src/routes/api/health.${ext}`),
|
|
671
|
+
isTS ? srcApiHealthTs() : srcApiHealthJs()
|
|
672
|
+
);
|
|
673
|
+
write(
|
|
674
|
+
join(dir, `src/routes/api/users/[id].${ext}`),
|
|
675
|
+
isTS ? srcApiUsersTs() : srcApiUsersJs()
|
|
676
|
+
);
|
|
677
|
+
write(
|
|
678
|
+
join(dir, `src/routes/api/search.${ext}`),
|
|
679
|
+
isTS ? srcApiSearchTs() : srcApiSearchJs()
|
|
680
|
+
);
|
|
548
681
|
} else {
|
|
549
682
|
// Minimal template — just entry + one API route
|
|
550
683
|
write(join(dir, `src/index.${ext}`), isTS ? srcIndexTs() : srcIndexJs());
|