create-turbo-mono 1.0.0
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/.claude/settings.local.json +14 -0
- package/README.md +182 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold.d.ts +8 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +42 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/templates/backend.d.ts +2 -0
- package/dist/templates/backend.d.ts.map +1 -0
- package/dist/templates/backend.js +424 -0
- package/dist/templates/backend.js.map +1 -0
- package/dist/templates/cicd.d.ts +3 -0
- package/dist/templates/cicd.d.ts.map +1 -0
- package/dist/templates/cicd.js +307 -0
- package/dist/templates/cicd.js.map +1 -0
- package/dist/templates/docker.d.ts +3 -0
- package/dist/templates/docker.d.ts.map +1 -0
- package/dist/templates/docker.js +458 -0
- package/dist/templates/docker.js.map +1 -0
- package/dist/templates/docs.d.ts +3 -0
- package/dist/templates/docs.d.ts.map +1 -0
- package/dist/templates/docs.js +71 -0
- package/dist/templates/docs.js.map +1 -0
- package/dist/templates/frontend.d.ts +2 -0
- package/dist/templates/frontend.d.ts.map +1 -0
- package/dist/templates/frontend.js +441 -0
- package/dist/templates/frontend.js.map +1 -0
- package/dist/templates/root.d.ts +3 -0
- package/dist/templates/root.d.ts.map +1 -0
- package/dist/templates/root.js +210 -0
- package/dist/templates/root.js.map +1 -0
- package/dist/templates/shared.d.ts +2 -0
- package/dist/templates/shared.d.ts.map +1 -0
- package/dist/templates/shared.js +696 -0
- package/dist/templates/shared.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +34 -0
- package/dist/utils.js.map +1 -0
- package/package.json +40 -0
- package/src/index.ts +138 -0
- package/src/scaffold.ts +51 -0
- package/src/templates/backend.ts +460 -0
- package/src/templates/cicd.ts +334 -0
- package/src/templates/docker.ts +503 -0
- package/src/templates/docs.ts +74 -0
- package/src/templates/frontend.ts +469 -0
- package/src/templates/root.ts +216 -0
- package/src/templates/shared.ts +820 -0
- package/src/utils.ts +31 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createFrontendApp = createFrontendApp;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
async function createFrontendApp(targetDir, appName) {
|
|
11
|
+
const kebabName = (0, utils_1.toKebabCase)(appName);
|
|
12
|
+
const pascalName = (0, utils_1.toPascalCase)(appName);
|
|
13
|
+
const appDir = path_1.default.join(targetDir, 'apps', 'frontend', kebabName);
|
|
14
|
+
// Create full Next.js structure (matching create-next-app with Page Router)
|
|
15
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(appDir, 'pages'));
|
|
16
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(appDir, 'pages', 'api'));
|
|
17
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(appDir, 'public'));
|
|
18
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(appDir, 'styles'));
|
|
19
|
+
// package.json
|
|
20
|
+
const packageJson = {
|
|
21
|
+
name: `@repo/${kebabName}`,
|
|
22
|
+
version: '0.1.0',
|
|
23
|
+
private: true,
|
|
24
|
+
scripts: {
|
|
25
|
+
dev: 'next dev',
|
|
26
|
+
build: 'next build',
|
|
27
|
+
start: 'next start',
|
|
28
|
+
lint: 'next lint',
|
|
29
|
+
'type-check': 'tsc --noEmit',
|
|
30
|
+
clean: 'rm -rf .next',
|
|
31
|
+
},
|
|
32
|
+
dependencies: {
|
|
33
|
+
next: '14.0.4',
|
|
34
|
+
react: '^18',
|
|
35
|
+
'react-dom': '^18',
|
|
36
|
+
'@repo/shared-frontend': 'workspace:*',
|
|
37
|
+
'@repo/shared-common': 'workspace:*',
|
|
38
|
+
},
|
|
39
|
+
devDependencies: {
|
|
40
|
+
typescript: '^5',
|
|
41
|
+
'@types/node': '^20',
|
|
42
|
+
'@types/react': '^18',
|
|
43
|
+
'@types/react-dom': '^18',
|
|
44
|
+
'@repo/tsconfig': 'workspace:*',
|
|
45
|
+
eslint: '^8',
|
|
46
|
+
'eslint-config-next': '14.0.4',
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
await fs_extra_1.default.writeJson(path_1.default.join(appDir, 'package.json'), packageJson, {
|
|
50
|
+
spaces: 2,
|
|
51
|
+
});
|
|
52
|
+
// tsconfig.json
|
|
53
|
+
const tsConfig = {
|
|
54
|
+
compilerOptions: {
|
|
55
|
+
lib: ['dom', 'dom.iterable', 'esnext'],
|
|
56
|
+
allowJs: true,
|
|
57
|
+
skipLibCheck: true,
|
|
58
|
+
strict: true,
|
|
59
|
+
noEmit: true,
|
|
60
|
+
esModuleInterop: true,
|
|
61
|
+
module: 'esnext',
|
|
62
|
+
moduleResolution: 'bundler',
|
|
63
|
+
resolveJsonModule: true,
|
|
64
|
+
isolatedModules: true,
|
|
65
|
+
jsx: 'preserve',
|
|
66
|
+
incremental: true,
|
|
67
|
+
paths: {
|
|
68
|
+
'@/*': ['./*'],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
include: ['next-env.d.ts', '**/*.ts', '**/*.tsx'],
|
|
72
|
+
exclude: ['node_modules'],
|
|
73
|
+
};
|
|
74
|
+
await fs_extra_1.default.writeJson(path_1.default.join(appDir, 'tsconfig.json'), tsConfig, {
|
|
75
|
+
spaces: 2,
|
|
76
|
+
});
|
|
77
|
+
// next.config.js
|
|
78
|
+
const nextConfig = `/** @type {import('next').NextConfig} */
|
|
79
|
+
const nextConfig = {
|
|
80
|
+
reactStrictMode: true,
|
|
81
|
+
transpilePackages: ['@repo/shared-frontend', '@repo/shared-common'],
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
module.exports = nextConfig
|
|
85
|
+
`;
|
|
86
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'next.config.js'), nextConfig);
|
|
87
|
+
// .eslintrc.json
|
|
88
|
+
const eslintConfig = {
|
|
89
|
+
extends: 'next/core-web-vitals',
|
|
90
|
+
};
|
|
91
|
+
await fs_extra_1.default.writeJson(path_1.default.join(appDir, '.eslintrc.json'), eslintConfig, {
|
|
92
|
+
spaces: 2,
|
|
93
|
+
});
|
|
94
|
+
// pages/_app.tsx
|
|
95
|
+
const appTsx = `import '@/styles/globals.css'
|
|
96
|
+
import type { AppProps } from 'next/app'
|
|
97
|
+
|
|
98
|
+
export default function App({ Component, pageProps }: AppProps) {
|
|
99
|
+
return <Component {...pageProps} />
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
102
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'pages', '_app.tsx'), appTsx);
|
|
103
|
+
// pages/_document.tsx
|
|
104
|
+
const documentTsx = `import { Html, Head, Main, NextScript } from 'next/document'
|
|
105
|
+
|
|
106
|
+
export default function Document() {
|
|
107
|
+
return (
|
|
108
|
+
<Html lang="en">
|
|
109
|
+
<Head />
|
|
110
|
+
<body>
|
|
111
|
+
<Main />
|
|
112
|
+
<NextScript />
|
|
113
|
+
</body>
|
|
114
|
+
</Html>
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
`;
|
|
118
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'pages', '_document.tsx'), documentTsx);
|
|
119
|
+
// pages/index.tsx
|
|
120
|
+
const indexTsx = `import Head from 'next/head'
|
|
121
|
+
import Image from 'next/image'
|
|
122
|
+
import { Inter } from 'next/font/google'
|
|
123
|
+
import styles from '@/styles/Home.module.css'
|
|
124
|
+
|
|
125
|
+
const inter = Inter({ subsets: ['latin'] })
|
|
126
|
+
|
|
127
|
+
export default function Home() {
|
|
128
|
+
return (
|
|
129
|
+
<>
|
|
130
|
+
<Head>
|
|
131
|
+
<title>Create Next App</title>
|
|
132
|
+
<meta name="description" content="Generated by create next app" />
|
|
133
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
134
|
+
<link rel="icon" href="/favicon.ico" />
|
|
135
|
+
</Head>
|
|
136
|
+
<main className={\`\${styles.main} \${inter.className}\`}>
|
|
137
|
+
<div className={styles.description}>
|
|
138
|
+
<p>
|
|
139
|
+
Get started by editing
|
|
140
|
+
<code className={styles.code}>pages/index.tsx</code>
|
|
141
|
+
</p>
|
|
142
|
+
<div>
|
|
143
|
+
<a
|
|
144
|
+
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
|
|
145
|
+
target="_blank"
|
|
146
|
+
rel="noopener noreferrer"
|
|
147
|
+
>
|
|
148
|
+
By{' '}
|
|
149
|
+
<Image
|
|
150
|
+
src="/vercel.svg"
|
|
151
|
+
alt="Vercel Logo"
|
|
152
|
+
className={styles.vercelLogo}
|
|
153
|
+
width={100}
|
|
154
|
+
height={24}
|
|
155
|
+
priority
|
|
156
|
+
/>
|
|
157
|
+
</a>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<div className={styles.center}>
|
|
162
|
+
<Image
|
|
163
|
+
className={styles.logo}
|
|
164
|
+
src="/next.svg"
|
|
165
|
+
alt="Next.js Logo"
|
|
166
|
+
width={180}
|
|
167
|
+
height={37}
|
|
168
|
+
priority
|
|
169
|
+
/>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<div className={styles.grid}>
|
|
173
|
+
<a
|
|
174
|
+
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
|
|
175
|
+
className={styles.card}
|
|
176
|
+
target="_blank"
|
|
177
|
+
rel="noopener noreferrer"
|
|
178
|
+
>
|
|
179
|
+
<h2>
|
|
180
|
+
Docs <span>-></span>
|
|
181
|
+
</h2>
|
|
182
|
+
<p>
|
|
183
|
+
Find in-depth information about Next.js features and API.
|
|
184
|
+
</p>
|
|
185
|
+
</a>
|
|
186
|
+
|
|
187
|
+
<a
|
|
188
|
+
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
|
|
189
|
+
className={styles.card}
|
|
190
|
+
target="_blank"
|
|
191
|
+
rel="noopener noreferrer"
|
|
192
|
+
>
|
|
193
|
+
<h2>
|
|
194
|
+
Learn <span>-></span>
|
|
195
|
+
</h2>
|
|
196
|
+
<p>
|
|
197
|
+
Learn about Next.js in an interactive course with quizzes!
|
|
198
|
+
</p>
|
|
199
|
+
</a>
|
|
200
|
+
|
|
201
|
+
<a
|
|
202
|
+
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
|
|
203
|
+
className={styles.card}
|
|
204
|
+
target="_blank"
|
|
205
|
+
rel="noopener noreferrer"
|
|
206
|
+
>
|
|
207
|
+
<h2>
|
|
208
|
+
Templates <span>-></span>
|
|
209
|
+
</h2>
|
|
210
|
+
<p>
|
|
211
|
+
Discover and deploy boilerplate example Next.js projects.
|
|
212
|
+
</p>
|
|
213
|
+
</a>
|
|
214
|
+
|
|
215
|
+
<a
|
|
216
|
+
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
|
|
217
|
+
className={styles.card}
|
|
218
|
+
target="_blank"
|
|
219
|
+
rel="noopener noreferrer"
|
|
220
|
+
>
|
|
221
|
+
<h2>
|
|
222
|
+
Deploy <span>-></span>
|
|
223
|
+
</h2>
|
|
224
|
+
<p>
|
|
225
|
+
Instantly deploy your Next.js site to a shareable URL with Vercel.
|
|
226
|
+
</p>
|
|
227
|
+
</a>
|
|
228
|
+
</div>
|
|
229
|
+
</main>
|
|
230
|
+
</>
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
`;
|
|
234
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'pages', 'index.tsx'), indexTsx);
|
|
235
|
+
// pages/api/hello.ts
|
|
236
|
+
const helloApiTs = `import type { NextApiRequest, NextApiResponse } from 'next'
|
|
237
|
+
|
|
238
|
+
type Data = {
|
|
239
|
+
name: string
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export default function handler(
|
|
243
|
+
req: NextApiRequest,
|
|
244
|
+
res: NextApiResponse<Data>
|
|
245
|
+
) {
|
|
246
|
+
res.status(200).json({ name: 'John Doe' })
|
|
247
|
+
}
|
|
248
|
+
`;
|
|
249
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'pages', 'api', 'hello.ts'), helloApiTs);
|
|
250
|
+
// styles/globals.css - Abbreviated for length
|
|
251
|
+
const globalsCss = `:root {
|
|
252
|
+
--max-width: 1100px;
|
|
253
|
+
--border-radius: 12px;
|
|
254
|
+
--font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Code', 'Segoe UI Mono',
|
|
255
|
+
'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro',
|
|
256
|
+
'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace;
|
|
257
|
+
|
|
258
|
+
--foreground-rgb: 0, 0, 0;
|
|
259
|
+
--background-start-rgb: 214, 219, 220;
|
|
260
|
+
--background-end-rgb: 255, 255, 255;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
* {
|
|
264
|
+
box-sizing: border-box;
|
|
265
|
+
padding: 0;
|
|
266
|
+
margin: 0;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
html,
|
|
270
|
+
body {
|
|
271
|
+
max-width: 100vw;
|
|
272
|
+
overflow-x: hidden;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
body {
|
|
276
|
+
color: rgb(var(--foreground-rgb));
|
|
277
|
+
background: linear-gradient(
|
|
278
|
+
to bottom,
|
|
279
|
+
transparent,
|
|
280
|
+
rgb(var(--background-end-rgb))
|
|
281
|
+
)
|
|
282
|
+
rgb(var(--background-start-rgb));
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
a {
|
|
286
|
+
color: inherit;
|
|
287
|
+
text-decoration: none;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
@media (prefers-color-scheme: dark) {
|
|
291
|
+
html {
|
|
292
|
+
color-scheme: dark;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
`;
|
|
296
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'styles', 'globals.css'), globalsCss);
|
|
297
|
+
// styles/Home.module.css - Abbreviated for length
|
|
298
|
+
const homeModuleCss = `.main {
|
|
299
|
+
display: flex;
|
|
300
|
+
flex-direction: column;
|
|
301
|
+
justify-content: space-between;
|
|
302
|
+
align-items: center;
|
|
303
|
+
padding: 6rem;
|
|
304
|
+
min-height: 100vh;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.description {
|
|
308
|
+
display: inherit;
|
|
309
|
+
justify-content: inherit;
|
|
310
|
+
align-items: inherit;
|
|
311
|
+
font-size: 0.85rem;
|
|
312
|
+
max-width: var(--max-width);
|
|
313
|
+
width: 100%;
|
|
314
|
+
z-index: 2;
|
|
315
|
+
font-family: var(--font-mono);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.code {
|
|
319
|
+
font-weight: 700;
|
|
320
|
+
font-family: var(--font-mono);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.grid {
|
|
324
|
+
display: grid;
|
|
325
|
+
grid-template-columns: repeat(4, minmax(25%, auto));
|
|
326
|
+
max-width: 100%;
|
|
327
|
+
width: var(--max-width);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.card {
|
|
331
|
+
padding: 1rem 1.2rem;
|
|
332
|
+
border-radius: var(--border-radius);
|
|
333
|
+
background: rgba(var(--card-rgb), 0);
|
|
334
|
+
border: 1px solid rgba(var(--card-border-rgb), 0);
|
|
335
|
+
transition: background 200ms, border 200ms;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.center {
|
|
339
|
+
display: flex;
|
|
340
|
+
justify-content: center;
|
|
341
|
+
align-items: center;
|
|
342
|
+
position: relative;
|
|
343
|
+
padding: 4rem 0;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
@media (max-width: 700px) {
|
|
347
|
+
.grid {
|
|
348
|
+
grid-template-columns: 1fr;
|
|
349
|
+
margin-bottom: 120px;
|
|
350
|
+
max-width: 320px;
|
|
351
|
+
text-align: center;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
`;
|
|
355
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'styles', 'Home.module.css'), homeModuleCss);
|
|
356
|
+
// public/next.svg
|
|
357
|
+
const nextSvg = `<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>`;
|
|
358
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'public', 'next.svg'), nextSvg);
|
|
359
|
+
// public/vercel.svg
|
|
360
|
+
const vercelSvg = `<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>`;
|
|
361
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'public', 'vercel.svg'), vercelSvg);
|
|
362
|
+
// .gitignore
|
|
363
|
+
const gitignore = `# dependencies
|
|
364
|
+
/node_modules
|
|
365
|
+
/.pnp
|
|
366
|
+
.pnp.js
|
|
367
|
+
|
|
368
|
+
# testing
|
|
369
|
+
/coverage
|
|
370
|
+
|
|
371
|
+
# next.js
|
|
372
|
+
/.next/
|
|
373
|
+
/out/
|
|
374
|
+
|
|
375
|
+
# production
|
|
376
|
+
/build
|
|
377
|
+
|
|
378
|
+
# misc
|
|
379
|
+
.DS_Store
|
|
380
|
+
*.pem
|
|
381
|
+
|
|
382
|
+
# debug
|
|
383
|
+
npm-debug.log*
|
|
384
|
+
yarn-debug.log*
|
|
385
|
+
yarn-error.log*
|
|
386
|
+
|
|
387
|
+
# local env files
|
|
388
|
+
.env*.local
|
|
389
|
+
|
|
390
|
+
# vercel
|
|
391
|
+
.vercel
|
|
392
|
+
|
|
393
|
+
# typescript
|
|
394
|
+
*.tsbuildinfo
|
|
395
|
+
next-env.d.ts
|
|
396
|
+
`;
|
|
397
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, '.gitignore'), gitignore);
|
|
398
|
+
// .env.local.example and .env.local
|
|
399
|
+
const envExample = `NEXT_PUBLIC_API_URL=http://localhost:3000
|
|
400
|
+
`;
|
|
401
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, '.env.local.example'), envExample);
|
|
402
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, '.env.local'), envExample);
|
|
403
|
+
// README.md
|
|
404
|
+
const readme = `This is a [Next.js](https://nextjs.org/) project bootstrapped with [\`create-next-app\`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
|
|
405
|
+
|
|
406
|
+
## Getting Started
|
|
407
|
+
|
|
408
|
+
First, run the development server:
|
|
409
|
+
|
|
410
|
+
\`\`\`bash
|
|
411
|
+
pnpm dev
|
|
412
|
+
\`\`\`
|
|
413
|
+
|
|
414
|
+
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
415
|
+
|
|
416
|
+
You can start editing the page by modifying \`pages/index.tsx\`. The page auto-updates as you edit the file.
|
|
417
|
+
|
|
418
|
+
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in \`pages/api/hello.ts\`.
|
|
419
|
+
|
|
420
|
+
The \`pages/api\` directory is mapped to \`/api/*\`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
|
|
421
|
+
|
|
422
|
+
This project uses [\`next/font\`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
|
|
423
|
+
|
|
424
|
+
## Learn More
|
|
425
|
+
|
|
426
|
+
To learn more about Next.js, take a look at the following resources:
|
|
427
|
+
|
|
428
|
+
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
|
429
|
+
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
|
430
|
+
|
|
431
|
+
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
|
|
432
|
+
|
|
433
|
+
## Deploy on Vercel
|
|
434
|
+
|
|
435
|
+
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
|
436
|
+
|
|
437
|
+
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
|
|
438
|
+
`;
|
|
439
|
+
await fs_extra_1.default.writeFile(path_1.default.join(appDir, 'README.md'), readme);
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=frontend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../src/templates/frontend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/templates/root.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAsB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmN1E"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createRootFiles = createRootFiles;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
async function createRootFiles(config) {
|
|
10
|
+
const { targetDir, projectName } = config;
|
|
11
|
+
// Root package.json
|
|
12
|
+
const rootPackageJson = {
|
|
13
|
+
name: projectName,
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
private: true,
|
|
16
|
+
scripts: {
|
|
17
|
+
dev: 'turbo run dev',
|
|
18
|
+
build: 'turbo run build',
|
|
19
|
+
'type-check': 'turbo run type-check',
|
|
20
|
+
lint: 'turbo run lint',
|
|
21
|
+
clean: 'turbo run clean',
|
|
22
|
+
'db:generate': 'turbo run db:generate',
|
|
23
|
+
'db:migrate': 'cd packages/database && pnpm prisma migrate dev',
|
|
24
|
+
'db:studio': 'cd packages/database && pnpm prisma studio',
|
|
25
|
+
},
|
|
26
|
+
devDependencies: {
|
|
27
|
+
turbo: '^1.11.2',
|
|
28
|
+
typescript: '^5.3.3',
|
|
29
|
+
},
|
|
30
|
+
packageManager: 'pnpm@8.15.0',
|
|
31
|
+
engines: {
|
|
32
|
+
node: '>=18.0.0',
|
|
33
|
+
pnpm: '>=8.0.0',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
await fs_extra_1.default.writeJson(path_1.default.join(targetDir, 'package.json'), rootPackageJson, {
|
|
37
|
+
spaces: 2,
|
|
38
|
+
});
|
|
39
|
+
// pnpm-workspace.yaml
|
|
40
|
+
const workspaceYaml = `packages:
|
|
41
|
+
- 'apps/backend/*'
|
|
42
|
+
- 'apps/frontend/*'
|
|
43
|
+
- 'packages/*'
|
|
44
|
+
`;
|
|
45
|
+
await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'pnpm-workspace.yaml'), workspaceYaml);
|
|
46
|
+
// turbo.json
|
|
47
|
+
const turboConfig = {
|
|
48
|
+
$schema: 'https://turbo.build/schema.json',
|
|
49
|
+
globalDependencies: ['**/.env.*local'],
|
|
50
|
+
pipeline: {
|
|
51
|
+
'db:generate': {
|
|
52
|
+
cache: false,
|
|
53
|
+
},
|
|
54
|
+
build: {
|
|
55
|
+
dependsOn: ['^build', 'db:generate'],
|
|
56
|
+
outputs: ['dist/**', '.next/**', 'build/**'],
|
|
57
|
+
},
|
|
58
|
+
dev: {
|
|
59
|
+
cache: false,
|
|
60
|
+
persistent: true,
|
|
61
|
+
},
|
|
62
|
+
lint: {
|
|
63
|
+
dependsOn: ['^lint'],
|
|
64
|
+
},
|
|
65
|
+
'type-check': {
|
|
66
|
+
dependsOn: ['^type-check'],
|
|
67
|
+
},
|
|
68
|
+
clean: {
|
|
69
|
+
cache: false,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
await fs_extra_1.default.writeJson(path_1.default.join(targetDir, 'turbo.json'), turboConfig, {
|
|
74
|
+
spaces: 2,
|
|
75
|
+
});
|
|
76
|
+
// .gitignore
|
|
77
|
+
const gitignore = `# Dependencies
|
|
78
|
+
node_modules
|
|
79
|
+
.pnp
|
|
80
|
+
.pnp.js
|
|
81
|
+
|
|
82
|
+
# Testing
|
|
83
|
+
coverage
|
|
84
|
+
|
|
85
|
+
# Next.js
|
|
86
|
+
.next/
|
|
87
|
+
out/
|
|
88
|
+
build
|
|
89
|
+
|
|
90
|
+
# Production
|
|
91
|
+
dist
|
|
92
|
+
|
|
93
|
+
# Misc
|
|
94
|
+
.DS_Store
|
|
95
|
+
*.pem
|
|
96
|
+
|
|
97
|
+
# Debug
|
|
98
|
+
npm-debug.log*
|
|
99
|
+
yarn-debug.log*
|
|
100
|
+
yarn-error.log*
|
|
101
|
+
.pnpm-debug.log*
|
|
102
|
+
|
|
103
|
+
# Local env files
|
|
104
|
+
.env
|
|
105
|
+
.env*.local
|
|
106
|
+
|
|
107
|
+
# Turbo
|
|
108
|
+
.turbo
|
|
109
|
+
|
|
110
|
+
# IDEs
|
|
111
|
+
.idea
|
|
112
|
+
.vscode
|
|
113
|
+
*.swp
|
|
114
|
+
*.swo
|
|
115
|
+
*~
|
|
116
|
+
|
|
117
|
+
# Prisma
|
|
118
|
+
prisma/migrations
|
|
119
|
+
`;
|
|
120
|
+
await fs_extra_1.default.writeFile(path_1.default.join(targetDir, '.gitignore'), gitignore);
|
|
121
|
+
// README.md
|
|
122
|
+
const readme = `# ${projectName}
|
|
123
|
+
|
|
124
|
+
A monorepo project with NestJS backends and Next.js frontends.
|
|
125
|
+
|
|
126
|
+
## Getting Started
|
|
127
|
+
|
|
128
|
+
### Prerequisites
|
|
129
|
+
|
|
130
|
+
- Node.js >= 18
|
|
131
|
+
- pnpm >= 8
|
|
132
|
+
|
|
133
|
+
### Installation
|
|
134
|
+
|
|
135
|
+
\`\`\`bash
|
|
136
|
+
pnpm install
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
### Development
|
|
140
|
+
|
|
141
|
+
\`\`\`bash
|
|
142
|
+
# Start all apps in development mode
|
|
143
|
+
pnpm dev
|
|
144
|
+
|
|
145
|
+
# Build all apps
|
|
146
|
+
pnpm build
|
|
147
|
+
|
|
148
|
+
# Type checking
|
|
149
|
+
pnpm type-check
|
|
150
|
+
|
|
151
|
+
# Generate Prisma client
|
|
152
|
+
pnpm db:generate
|
|
153
|
+
|
|
154
|
+
# Run database migrations
|
|
155
|
+
pnpm db:migrate
|
|
156
|
+
|
|
157
|
+
# Open Prisma Studio
|
|
158
|
+
pnpm db:studio
|
|
159
|
+
\`\`\`
|
|
160
|
+
|
|
161
|
+
## Project Structure
|
|
162
|
+
|
|
163
|
+
\`\`\`
|
|
164
|
+
${projectName}/
|
|
165
|
+
├── apps/
|
|
166
|
+
│ ├── backend/ # NestJS backend apps
|
|
167
|
+
│ └── frontend/ # Next.js frontend apps
|
|
168
|
+
├── packages/
|
|
169
|
+
│ ├── database/ # Prisma schema and client
|
|
170
|
+
│ ├── shared-backend/ # Backend utilities and types
|
|
171
|
+
│ ├── shared-frontend/ # Frontend components and hooks
|
|
172
|
+
│ ├── shared-common/ # Universal utilities
|
|
173
|
+
│ └── tsconfig/ # Shared TypeScript configs
|
|
174
|
+
└── turbo.json # Turborepo configuration
|
|
175
|
+
\`\`\`
|
|
176
|
+
|
|
177
|
+
## Packages
|
|
178
|
+
|
|
179
|
+
### @repo/database
|
|
180
|
+
Prisma schema, migrations, and database client.
|
|
181
|
+
|
|
182
|
+
### @repo/shared-backend
|
|
183
|
+
Shared backend utilities, middleware, and types.
|
|
184
|
+
|
|
185
|
+
### @repo/shared-frontend
|
|
186
|
+
Shared frontend components, hooks, and utilities.
|
|
187
|
+
|
|
188
|
+
### @repo/shared-common
|
|
189
|
+
Universal utilities that can be used by both frontend and backend.
|
|
190
|
+
|
|
191
|
+
## Adding New Apps
|
|
192
|
+
|
|
193
|
+
### Backend App
|
|
194
|
+
Create a new NestJS app in \`apps/backend/\` and add it to \`pnpm-workspace.yaml\`.
|
|
195
|
+
|
|
196
|
+
### Frontend App
|
|
197
|
+
Create a new Next.js app in \`apps/frontend/\` and add it to \`pnpm-workspace.yaml\`.
|
|
198
|
+
|
|
199
|
+
## License
|
|
200
|
+
|
|
201
|
+
MIT
|
|
202
|
+
`;
|
|
203
|
+
await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'README.md'), readme);
|
|
204
|
+
// .npmrc
|
|
205
|
+
const npmrc = `auto-install-peers=true
|
|
206
|
+
strict-peer-dependencies=false
|
|
207
|
+
`;
|
|
208
|
+
await fs_extra_1.default.writeFile(path_1.default.join(targetDir, '.npmrc'), npmrc);
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/templates/root.ts"],"names":[],"mappings":";;;;;AAIA,0CAmNC;AAvND,wDAA0B;AAC1B,gDAAwB;AAGjB,KAAK,UAAU,eAAe,CAAC,MAAqB;IACzD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE1C,oBAAoB;IACpB,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,sBAAsB;YACpC,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,iBAAiB;YACxB,aAAa,EAAE,uBAAuB;YACtC,YAAY,EAAE,iDAAiD;YAC/D,WAAW,EAAE,4CAA4C;SAC1D;QACD,eAAe,EAAE;YACf,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,QAAQ;SACrB;QACD,cAAc,EAAE,aAAa;QAC7B,OAAO,EAAE;YACP,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,SAAS;SAChB;KACF,CAAC;IAEF,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,eAAe,EAAE;QACxE,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,aAAa,GAAG;;;;CAIvB,CAAC;IACA,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAAE,aAAa,CAAC,CAAC;IAE/E,aAAa;IACb,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE,iCAAiC;QAC1C,kBAAkB,EAAE,CAAC,gBAAgB,CAAC;QACtC,QAAQ,EAAE;YACR,aAAa,EAAE;gBACb,KAAK,EAAE,KAAK;aACb;YACD,KAAK,EAAE;gBACL,SAAS,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;gBACpC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;aAC7C;YACD,GAAG,EAAE;gBACH,KAAK,EAAE,KAAK;gBACZ,UAAU,EAAE,IAAI;aACjB;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,CAAC,OAAO,CAAC;aACrB;YACD,YAAY,EAAE;gBACZ,SAAS,EAAE,CAAC,aAAa,CAAC;aAC3B;YACD,KAAK,EAAE;gBACL,KAAK,EAAE,KAAK;aACb;SACF;KACF,CAAC;IAEF,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE;QAClE,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,aAAa;IACb,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CnB,CAAC;IAEA,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IAElE,YAAY;IACZ,MAAM,MAAM,GAAG,KAAK,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0C/B,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCZ,CAAC;IAEA,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAE9D,SAAS;IACT,MAAM,KAAK,GAAG;;CAEf,CAAC;IAEA,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAGA,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E"}
|