@daawoonkim/create-arch-app 0.1.0 → 0.2.1
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/.github/WORKFLOWS.md +255 -0
- package/.github/workflows/deploy-main.yml +101 -0
- package/.github/workflows/lint.yml +33 -0
- package/.github/workflows/publish.yml +82 -0
- package/.github/workflows/test.yml +52 -0
- package/CHANGELOG.ko.md +72 -0
- package/CHANGELOG.md +71 -0
- package/CONTRIBUTING.md +172 -0
- package/PUBLISHING.md +304 -0
- package/README.ko.md +302 -0
- package/README.md +151 -116
- package/create-arch-app_mvp_faa8b53b.plan.md +1 -1
- package/dist/generators/index.js +69 -9
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/nextjs.d.ts.map +1 -1
- package/dist/generators/nextjs.js +107 -50
- package/dist/generators/nextjs.js.map +1 -1
- package/dist/generators/react.d.ts.map +1 -1
- package/dist/generators/react.js +23 -1
- package/dist/generators/react.js.map +1 -1
- package/dist/prompts/projectSetup.d.ts.map +1 -1
- package/dist/prompts/projectSetup.js +22 -0
- package/dist/prompts/projectSetup.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/apiGenerator.d.ts +4 -0
- package/dist/utils/apiGenerator.d.ts.map +1 -0
- package/dist/utils/apiGenerator.js +440 -0
- package/dist/utils/apiGenerator.js.map +1 -0
- package/dist/utils/dependencies.d.ts.map +1 -1
- package/dist/utils/dependencies.js +15 -0
- package/dist/utils/dependencies.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { ensureDir, createFile } from '../utils/fileSystem.js';
|
|
3
|
+
import { generateApiFiles, generateEnvFile } from '../utils/apiGenerator.js';
|
|
3
4
|
export async function generateNextJsProject(config, projectPath) {
|
|
5
|
+
// src 디렉토리 생성
|
|
6
|
+
const srcPath = path.join(projectPath, 'src');
|
|
7
|
+
await ensureDir(srcPath);
|
|
4
8
|
// next.config.js 생성
|
|
5
9
|
await generateNextConfig(projectPath);
|
|
6
10
|
if (config.router === 'app') {
|
|
7
|
-
await generateAppRouter(config,
|
|
11
|
+
await generateAppRouter(config, srcPath);
|
|
8
12
|
}
|
|
9
13
|
else {
|
|
10
|
-
await generatePagesRouter(config,
|
|
14
|
+
await generatePagesRouter(config, srcPath);
|
|
11
15
|
}
|
|
12
|
-
// 아키텍처별 폴더 구조 생성
|
|
13
|
-
await generateArchitectureStructure(config,
|
|
16
|
+
// 아키텍처별 폴더 구조 생성 (src 안에)
|
|
17
|
+
await generateArchitectureStructure(config, srcPath);
|
|
14
18
|
// 공통 설정 파일
|
|
15
19
|
await generateCommonFiles(config, projectPath);
|
|
20
|
+
// API 관련 파일 생성 (src 안에)
|
|
21
|
+
await generateApiFiles(config, srcPath);
|
|
22
|
+
await generateEnvFile(config, projectPath);
|
|
16
23
|
}
|
|
17
24
|
async function generateNextConfig(projectPath) {
|
|
18
25
|
const content = `/** @type {import('next').NextConfig} */
|
|
@@ -24,12 +31,21 @@ module.exports = nextConfig
|
|
|
24
31
|
`;
|
|
25
32
|
await createFile(path.join(projectPath, 'next.config.js'), content);
|
|
26
33
|
}
|
|
27
|
-
async function generateAppRouter(config,
|
|
28
|
-
const appPath = path.join(
|
|
34
|
+
async function generateAppRouter(config, srcPath) {
|
|
35
|
+
const appPath = path.join(srcPath, 'app');
|
|
29
36
|
await ensureDir(appPath);
|
|
30
|
-
// layout.tsx
|
|
31
|
-
|
|
32
|
-
|
|
37
|
+
// layout.tsx with React Query Provider
|
|
38
|
+
let layoutImports = ["import type { Metadata } from 'next'"];
|
|
39
|
+
if (config.styling === 'tailwind') {
|
|
40
|
+
layoutImports.push("import './globals.css'");
|
|
41
|
+
}
|
|
42
|
+
let layoutBody = '{children}';
|
|
43
|
+
if (config.dataFetching === 'react-query') {
|
|
44
|
+
layoutImports.push("import { Providers } from '@/app/providers'");
|
|
45
|
+
layoutBody = '<Providers>{children}</Providers>';
|
|
46
|
+
}
|
|
47
|
+
const layoutContent = `${layoutImports.join('\n')}
|
|
48
|
+
|
|
33
49
|
export const metadata: Metadata = {
|
|
34
50
|
title: '${config.projectName}',
|
|
35
51
|
description: 'Created with create-arch-app',
|
|
@@ -42,12 +58,36 @@ export default function RootLayout({
|
|
|
42
58
|
}) {
|
|
43
59
|
return (
|
|
44
60
|
<html lang="ko">
|
|
45
|
-
<body
|
|
61
|
+
<body>${layoutBody}</body>
|
|
46
62
|
</html>
|
|
47
63
|
)
|
|
48
64
|
}
|
|
49
65
|
`;
|
|
50
66
|
await createFile(path.join(appPath, 'layout.tsx'), layoutContent);
|
|
67
|
+
// Generate providers.tsx for React Query
|
|
68
|
+
if (config.dataFetching === 'react-query') {
|
|
69
|
+
const queryClientPath = config.architecture === 'ddd'
|
|
70
|
+
? '@/infrastructure/api/queryClient'
|
|
71
|
+
: config.architecture === 'clean'
|
|
72
|
+
? '@/shared/lib/queryClient'
|
|
73
|
+
: '@/lib/queryClient';
|
|
74
|
+
const providersContent = `'use client';
|
|
75
|
+
|
|
76
|
+
import { QueryClientProvider } from '@tanstack/react-query';
|
|
77
|
+
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
|
|
78
|
+
import { queryClient } from '${queryClientPath}';
|
|
79
|
+
|
|
80
|
+
export function Providers({ children }: { children: React.ReactNode }) {
|
|
81
|
+
return (
|
|
82
|
+
<QueryClientProvider client={queryClient}>
|
|
83
|
+
{children}
|
|
84
|
+
<ReactQueryDevtools initialIsOpen={false} />
|
|
85
|
+
</QueryClientProvider>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
`;
|
|
89
|
+
await createFile(path.join(appPath, 'providers.tsx'), providersContent);
|
|
90
|
+
}
|
|
51
91
|
// page.tsx
|
|
52
92
|
const pageContent = `export default function Home() {
|
|
53
93
|
return (
|
|
@@ -94,17 +134,34 @@ body {
|
|
|
94
134
|
await createFile(path.join(appPath, 'globals.css'), cssContent);
|
|
95
135
|
}
|
|
96
136
|
}
|
|
97
|
-
async function generatePagesRouter(config,
|
|
98
|
-
const pagesPath = path.join(
|
|
99
|
-
const stylesPath = path.join(
|
|
137
|
+
async function generatePagesRouter(config, srcPath) {
|
|
138
|
+
const pagesPath = path.join(srcPath, 'pages');
|
|
139
|
+
const stylesPath = path.join(srcPath, 'styles');
|
|
100
140
|
await ensureDir(pagesPath);
|
|
101
141
|
await ensureDir(stylesPath);
|
|
102
|
-
// _app.tsx
|
|
103
|
-
|
|
104
|
-
|
|
142
|
+
// _app.tsx with React Query Provider
|
|
143
|
+
let appImports = ["import type { AppProps } from 'next/app'", "import '@/styles/globals.css'"];
|
|
144
|
+
if (config.dataFetching === 'react-query') {
|
|
145
|
+
appImports.push("import { QueryClientProvider } from '@tanstack/react-query'");
|
|
146
|
+
appImports.push("import { ReactQueryDevtools } from '@tanstack/react-query-devtools'");
|
|
147
|
+
const queryClientPath = config.architecture === 'ddd'
|
|
148
|
+
? '@/infrastructure/api/queryClient'
|
|
149
|
+
: config.architecture === 'clean'
|
|
150
|
+
? '@/shared/lib/queryClient'
|
|
151
|
+
: '@/lib/queryClient';
|
|
152
|
+
appImports.push(`import { queryClient } from '${queryClientPath}'`);
|
|
153
|
+
}
|
|
154
|
+
let componentWrapper = '<Component {...pageProps} />';
|
|
155
|
+
if (config.dataFetching === 'react-query') {
|
|
156
|
+
componentWrapper = `<QueryClientProvider client={queryClient}>
|
|
157
|
+
<Component {...pageProps} />
|
|
158
|
+
<ReactQueryDevtools initialIsOpen={false} />
|
|
159
|
+
</QueryClientProvider>`;
|
|
160
|
+
}
|
|
161
|
+
const appContent = `${appImports.join('\n')}
|
|
105
162
|
|
|
106
163
|
export default function App({ Component, pageProps }: AppProps) {
|
|
107
|
-
return
|
|
164
|
+
return ${componentWrapper}
|
|
108
165
|
}
|
|
109
166
|
`;
|
|
110
167
|
await createFile(path.join(pagesPath, '_app.tsx'), appContent);
|
|
@@ -170,40 +227,40 @@ body {
|
|
|
170
227
|
await createFile(path.join(stylesPath, 'globals.css'), cssContent);
|
|
171
228
|
}
|
|
172
229
|
}
|
|
173
|
-
async function generateArchitectureStructure(config,
|
|
230
|
+
async function generateArchitectureStructure(config, srcPath) {
|
|
174
231
|
switch (config.architecture) {
|
|
175
232
|
case 'ddd':
|
|
176
|
-
await ensureDir(path.join(
|
|
177
|
-
await ensureDir(path.join(
|
|
178
|
-
await ensureDir(path.join(
|
|
179
|
-
await ensureDir(path.join(
|
|
180
|
-
await ensureDir(path.join(
|
|
181
|
-
await ensureDir(path.join(
|
|
182
|
-
await ensureDir(path.join(
|
|
183
|
-
await ensureDir(path.join(
|
|
184
|
-
await createFile(path.join(
|
|
185
|
-
await createFile(path.join(
|
|
233
|
+
await ensureDir(path.join(srcPath, 'domain/entities'));
|
|
234
|
+
await ensureDir(path.join(srcPath, 'domain/repositories'));
|
|
235
|
+
await ensureDir(path.join(srcPath, 'domain/services'));
|
|
236
|
+
await ensureDir(path.join(srcPath, 'application/usecases'));
|
|
237
|
+
await ensureDir(path.join(srcPath, 'application/ports'));
|
|
238
|
+
await ensureDir(path.join(srcPath, 'infrastructure/api'));
|
|
239
|
+
await ensureDir(path.join(srcPath, 'infrastructure/persistence'));
|
|
240
|
+
await ensureDir(path.join(srcPath, 'presentation/components'));
|
|
241
|
+
await createFile(path.join(srcPath, 'domain/entities/README.md'), '# Domain Entities\n\n비즈니스 엔티티를 정의합니다.');
|
|
242
|
+
await createFile(path.join(srcPath, 'application/usecases/README.md'), '# Use Cases\n\n애플리케이션 유스케이스를 구현합니다.');
|
|
186
243
|
break;
|
|
187
244
|
case 'clean':
|
|
188
|
-
await ensureDir(path.join(
|
|
189
|
-
await ensureDir(path.join(
|
|
190
|
-
await ensureDir(path.join(
|
|
191
|
-
await ensureDir(path.join(
|
|
192
|
-
await ensureDir(path.join(
|
|
193
|
-
await ensureDir(path.join(
|
|
194
|
-
await ensureDir(path.join(
|
|
195
|
-
await ensureDir(path.join(
|
|
196
|
-
await createFile(path.join(
|
|
245
|
+
await ensureDir(path.join(srcPath, 'core/entities'));
|
|
246
|
+
await ensureDir(path.join(srcPath, 'core/usecases'));
|
|
247
|
+
await ensureDir(path.join(srcPath, 'core/interfaces'));
|
|
248
|
+
await ensureDir(path.join(srcPath, 'features/example/domain'));
|
|
249
|
+
await ensureDir(path.join(srcPath, 'features/example/data'));
|
|
250
|
+
await ensureDir(path.join(srcPath, 'features/example/presentation'));
|
|
251
|
+
await ensureDir(path.join(srcPath, 'shared/components'));
|
|
252
|
+
await ensureDir(path.join(srcPath, 'shared/utils'));
|
|
253
|
+
await createFile(path.join(srcPath, 'core/entities/README.md'), '# Core Entities\n\n핵심 비즈니스 엔티티를 정의합니다.');
|
|
197
254
|
break;
|
|
198
255
|
case 'atomic':
|
|
199
|
-
await ensureDir(path.join(
|
|
200
|
-
await ensureDir(path.join(
|
|
201
|
-
await ensureDir(path.join(
|
|
202
|
-
await ensureDir(path.join(
|
|
203
|
-
await ensureDir(path.join(
|
|
204
|
-
await ensureDir(path.join(
|
|
256
|
+
await ensureDir(path.join(srcPath, 'components/atoms'));
|
|
257
|
+
await ensureDir(path.join(srcPath, 'components/molecules'));
|
|
258
|
+
await ensureDir(path.join(srcPath, 'components/organisms'));
|
|
259
|
+
await ensureDir(path.join(srcPath, 'components/templates'));
|
|
260
|
+
await ensureDir(path.join(srcPath, 'hooks'));
|
|
261
|
+
await ensureDir(path.join(srcPath, 'utils'));
|
|
205
262
|
// Example Button component
|
|
206
|
-
await createFile(path.join(
|
|
263
|
+
await createFile(path.join(srcPath, 'components/atoms/Button.tsx'), `interface ButtonProps {
|
|
207
264
|
children: React.ReactNode;
|
|
208
265
|
onClick?: () => void;
|
|
209
266
|
variant?: 'primary' | 'secondary';
|
|
@@ -229,15 +286,15 @@ export const Button: React.FC<ButtonProps> = ({
|
|
|
229
286
|
);
|
|
230
287
|
};
|
|
231
288
|
`);
|
|
232
|
-
await createFile(path.join(
|
|
289
|
+
await createFile(path.join(srcPath, 'components/atoms/README.md'), '# Atoms\n\n가장 작은 UI 컴포넌트 단위입니다.');
|
|
233
290
|
break;
|
|
234
291
|
case 'default':
|
|
235
292
|
default:
|
|
236
|
-
await ensureDir(path.join(
|
|
237
|
-
await ensureDir(path.join(
|
|
238
|
-
await ensureDir(path.join(
|
|
239
|
-
await ensureDir(path.join(
|
|
240
|
-
await createFile(path.join(
|
|
293
|
+
await ensureDir(path.join(srcPath, 'components'));
|
|
294
|
+
await ensureDir(path.join(srcPath, 'hooks'));
|
|
295
|
+
await ensureDir(path.join(srcPath, 'utils'));
|
|
296
|
+
await ensureDir(path.join(srcPath, 'types'));
|
|
297
|
+
await createFile(path.join(srcPath, 'components/README.md'), '# Components\n\nReact 컴포넌트를 작성합니다.');
|
|
241
298
|
break;
|
|
242
299
|
}
|
|
243
300
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/generators/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/generators/nextjs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/generators/react.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/generators/react.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
package/dist/generators/react.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { ensureDir, createFile } from '../utils/fileSystem.js';
|
|
3
|
+
import { generateApiFiles, generateEnvFile } from '../utils/apiGenerator.js';
|
|
3
4
|
export async function generateReactProject(config, projectPath) {
|
|
4
5
|
// src 디렉토리 생성
|
|
5
6
|
const srcPath = path.join(projectPath, 'src');
|
|
@@ -16,6 +17,9 @@ export async function generateReactProject(config, projectPath) {
|
|
|
16
17
|
await generateViteConfig(projectPath);
|
|
17
18
|
// 스타일 파일 생성
|
|
18
19
|
await generateStyles(config, srcPath);
|
|
20
|
+
// API 관련 파일 생성
|
|
21
|
+
await generateApiFiles(config, srcPath);
|
|
22
|
+
await generateEnvFile(config, projectPath);
|
|
19
23
|
}
|
|
20
24
|
async function generateArchitectureStructure(config, srcPath) {
|
|
21
25
|
switch (config.architecture) {
|
|
@@ -120,11 +124,29 @@ async function generateMainTsx(config, srcPath) {
|
|
|
120
124
|
imports.push("import './index.css'");
|
|
121
125
|
}
|
|
122
126
|
imports.push("import App from './App'");
|
|
127
|
+
// React Query Provider
|
|
128
|
+
if (config.dataFetching === 'react-query') {
|
|
129
|
+
imports.push("import { QueryClientProvider } from '@tanstack/react-query'");
|
|
130
|
+
imports.push("import { ReactQueryDevtools } from '@tanstack/react-query-devtools'");
|
|
131
|
+
const queryClientPath = config.architecture === 'ddd'
|
|
132
|
+
? './infrastructure/api/queryClient'
|
|
133
|
+
: config.architecture === 'clean'
|
|
134
|
+
? './shared/lib/queryClient'
|
|
135
|
+
: './lib/queryClient';
|
|
136
|
+
imports.push(`import { queryClient } from '${queryClientPath}'`);
|
|
137
|
+
}
|
|
138
|
+
let appWrapper = '<App />';
|
|
139
|
+
if (config.dataFetching === 'react-query') {
|
|
140
|
+
appWrapper = `<QueryClientProvider client={queryClient}>
|
|
141
|
+
<App />
|
|
142
|
+
<ReactQueryDevtools initialIsOpen={false} />
|
|
143
|
+
</QueryClientProvider>`;
|
|
144
|
+
}
|
|
123
145
|
const content = `${imports.join('\n')}
|
|
124
146
|
|
|
125
147
|
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
126
148
|
<React.StrictMode>
|
|
127
|
-
|
|
149
|
+
${appWrapper}
|
|
128
150
|
</React.StrictMode>,
|
|
129
151
|
)
|
|
130
152
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/generators/react.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/generators/react.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectSetup.d.ts","sourceRoot":"","sources":["../../src/prompts/projectSetup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"projectSetup.d.ts","sourceRoot":"","sources":["../../src/prompts/projectSetup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAwH,MAAM,aAAa,CAAC;AAgBlK,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkIrF"}
|
|
@@ -88,6 +88,26 @@ export async function promptProjectSetup(projectName) {
|
|
|
88
88
|
{ name: 'None', value: 'none' }
|
|
89
89
|
]
|
|
90
90
|
},
|
|
91
|
+
{
|
|
92
|
+
type: 'list',
|
|
93
|
+
name: 'apiClient',
|
|
94
|
+
message: 'HTTP 클라이언트를 선택하세요:',
|
|
95
|
+
choices: [
|
|
96
|
+
{ name: 'Axios (권장)', value: 'axios' },
|
|
97
|
+
{ name: 'Fetch (네이티브)', value: 'fetch' },
|
|
98
|
+
{ name: 'None', value: 'none' }
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'list',
|
|
103
|
+
name: 'dataFetching',
|
|
104
|
+
message: '데이터 페칭 라이브러리를 선택하세요:',
|
|
105
|
+
choices: [
|
|
106
|
+
{ name: 'TanStack Query (React Query) - 권장', value: 'react-query' },
|
|
107
|
+
{ name: 'SWR (Next.js 최적화)', value: 'swr' },
|
|
108
|
+
{ name: 'None', value: 'none' }
|
|
109
|
+
]
|
|
110
|
+
},
|
|
91
111
|
{
|
|
92
112
|
type: 'confirm',
|
|
93
113
|
name: 'testing',
|
|
@@ -104,6 +124,8 @@ export async function promptProjectSetup(projectName) {
|
|
|
104
124
|
styling: answers.styling,
|
|
105
125
|
stateManagement: answers.stateManagement,
|
|
106
126
|
formLibrary: answers.formLibrary,
|
|
127
|
+
apiClient: answers.apiClient,
|
|
128
|
+
dataFetching: answers.dataFetching,
|
|
107
129
|
testing: answers.testing,
|
|
108
130
|
};
|
|
109
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectSetup.js","sourceRoot":"","sources":["../../src/prompts/projectSetup.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"projectSetup.js","sourceRoot":"","sources":["../../src/prompts/projectSetup.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export type Architecture = 'ddd' | 'clean' | 'atomic' | 'default';
|
|
|
5
5
|
export type Styling = 'tailwind' | 'css-modules';
|
|
6
6
|
export type StateManagement = 'zustand' | 'context' | 'none';
|
|
7
7
|
export type FormLibrary = 'react-hook-form' | 'none';
|
|
8
|
+
export type ApiClient = 'axios' | 'fetch' | 'none';
|
|
9
|
+
export type DataFetching = 'react-query' | 'swr' | 'none';
|
|
8
10
|
export interface ProjectConfig {
|
|
9
11
|
projectName: string;
|
|
10
12
|
framework: Framework;
|
|
@@ -14,6 +16,8 @@ export interface ProjectConfig {
|
|
|
14
16
|
styling: Styling;
|
|
15
17
|
stateManagement: StateManagement;
|
|
16
18
|
formLibrary: FormLibrary;
|
|
19
|
+
apiClient: ApiClient;
|
|
20
|
+
dataFetching: DataFetching;
|
|
17
21
|
testing: boolean;
|
|
18
22
|
}
|
|
19
23
|
export interface TemplateData extends ProjectConfig {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC3C,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;AAC3C,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC3C,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;AAC3C,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ProjectConfig } from '../types.js';
|
|
2
|
+
export declare function generateApiFiles(config: ProjectConfig, basePath: string): Promise<void>;
|
|
3
|
+
export declare function generateEnvFile(config: ProjectConfig, projectPath: string): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=apiGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/apiGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAoBf;AA8cD,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|