create-web-0to1 0.1.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/README.md +68 -0
- package/internal/engine/create-feature-crud-script.ts +134 -0
- package/internal/engine/create-feature-crud.template.mjs +601 -0
- package/internal/engine/create-feature-script.ts +142 -0
- package/internal/engine/generator-engine.ts +546 -0
- package/internal/engine/standalone-feature-preset.ts +34 -0
- package/internal/meta/preset-plan.ts +41 -0
- package/internal/meta/runtime-copy-plan.ts +220 -0
- package/internal/meta/runtime-layout.ts +262 -0
- package/internal/meta/scaffold-manifest.ts +169 -0
- package/internal/meta/standalone-dependency-manifest.ts +75 -0
- package/package.json +45 -0
- package/scripts/create-app.mjs +1612 -0
- package/source/core/auth/auth-events.ts +13 -0
- package/source/core/error/app-error.ts +85 -0
- package/source/core/error/handle-app-error.client.ts +35 -0
- package/source/core/lib/dayjs.ts +25 -0
- package/source/core/query/query-client.ts +126 -0
- package/source/core/request/request-core.ts +210 -0
- package/source/core/routes/route-paths.ts +4 -0
- package/source/core/ui/button.tsx +24 -0
- package/source/core/ui/modal-store.ts +32 -0
- package/source/core/ui/text-input-field.tsx +36 -0
- package/source/core/utils/build-query-string.ts +30 -0
- package/source/core/utils/format/date.ts +41 -0
- package/source/core/utils/format/index.ts +3 -0
- package/source/core/utils/format/number.ts +13 -0
- package/source/core/utils/format/text.ts +15 -0
- package/source/core/utils/schema-utils.ts +27 -0
- package/source/wrappers/monorepo/core/internal.ts +21 -0
- package/source/wrappers/monorepo/core/src/index.ts +4 -0
- package/source/wrappers/monorepo/core-next/src/auth.client.ts +1 -0
- package/source/wrappers/monorepo/core-next/src/auth.server.ts +94 -0
- package/source/wrappers/monorepo/core-next/src/bootstrap.client.tsx +21 -0
- package/source/wrappers/monorepo/core-next/src/bootstrap.tsx +18 -0
- package/source/wrappers/monorepo/core-next/src/index.ts +1 -0
- package/source/wrappers/monorepo/core-react/src/app-providers.tsx +36 -0
- package/source/wrappers/monorepo/core-react/src/auth.ts +42 -0
- package/source/wrappers/monorepo/core-react/src/hydration.tsx +21 -0
- package/source/wrappers/monorepo/core-react/src/index.ts +7 -0
- package/source/wrappers/monorepo/core-react/src/provider.tsx +49 -0
- package/source/wrappers/monorepo/core-react/src/query-client.ts +48 -0
- package/source/wrappers/monorepo/core-react/src/query-error-handler.ts +62 -0
- package/source/wrappers/monorepo/core-react/src/query-keys.ts +22 -0
- package/source/wrappers/monorepo/request/core-fetch.ts +27 -0
- package/source/wrappers/monorepo/request/core-request.ts +93 -0
- package/source/wrappers/next/auth/auth-error-listener.tsx +34 -0
- package/source/wrappers/next/error/handle-app-error.server.ts +41 -0
- package/source/wrappers/next/query/hydration.tsx +20 -0
- package/source/wrappers/next/query/providers.tsx +35 -0
- package/source/wrappers/next/request/request.client.ts +24 -0
- package/source/wrappers/next/request/request.server.ts +64 -0
- package/source/wrappers/next/request/request.ts +52 -0
- package/source/wrappers/next/ui/global-modal.tsx +29 -0
- package/source/wrappers/react/auth/auth-error-listener.tsx +34 -0
- package/source/wrappers/react/query/providers.tsx +31 -0
- package/source/wrappers/react/request/request.client.ts +24 -0
- package/source/wrappers/react/request/request.ts +51 -0
- package/source/wrappers/react/ui/global-modal.tsx +27 -0
- package/templates/monorepo/.dockerignore +38 -0
- package/templates/monorepo/README.md +292 -0
- package/templates/monorepo/_gitignore +38 -0
- package/templates/monorepo/_npmrc +1 -0
- package/templates/monorepo/apps/project/Dockerfile +32 -0
- package/templates/monorepo/apps/project/eslint.config.mjs +4 -0
- package/templates/monorepo/apps/project/index.html +14 -0
- package/templates/monorepo/apps/project/index.ts +15 -0
- package/templates/monorepo/apps/project/package.json +21 -0
- package/templates/monorepo/apps/project/tsconfig.json +9 -0
- package/templates/monorepo/apps/project/vite.config.ts +6 -0
- package/templates/monorepo/apps/web/Dockerfile +43 -0
- package/templates/monorepo/apps/web/README.md +111 -0
- package/templates/monorepo/apps/web/_gitignore +36 -0
- package/templates/monorepo/apps/web/app/favicon.ico +0 -0
- package/templates/monorepo/apps/web/app/global-error.tsx +12 -0
- package/templates/monorepo/apps/web/app/globals.css +0 -0
- package/templates/monorepo/apps/web/app/layout.tsx +28 -0
- package/templates/monorepo/apps/web/app/page.tsx +7 -0
- package/templates/monorepo/apps/web/app/providers.tsx +25 -0
- package/templates/monorepo/apps/web/eslint.config.js +4 -0
- package/templates/monorepo/apps/web/next-env.d.ts +6 -0
- package/templates/monorepo/apps/web/next.config.js +4 -0
- package/templates/monorepo/apps/web/package.json +31 -0
- package/templates/monorepo/apps/web/public/file-text.svg +3 -0
- package/templates/monorepo/apps/web/public/globe.svg +10 -0
- package/templates/monorepo/apps/web/public/next.svg +1 -0
- package/templates/monorepo/apps/web/public/turborepo-dark.svg +19 -0
- package/templates/monorepo/apps/web/public/turborepo-light.svg +19 -0
- package/templates/monorepo/apps/web/public/vercel.svg +10 -0
- package/templates/monorepo/apps/web/public/window.svg +3 -0
- package/templates/monorepo/apps/web/tsconfig.json +20 -0
- package/templates/monorepo/package.json +24 -0
- package/templates/monorepo/packages/core/eslint.config.mjs +4 -0
- package/templates/monorepo/packages/core/package.json +32 -0
- package/templates/monorepo/packages/core/tsconfig.json +8 -0
- package/templates/monorepo/packages/core-next/eslint.config.mjs +13 -0
- package/templates/monorepo/packages/core-next/package.json +43 -0
- package/templates/monorepo/packages/core-next/tsconfig.json +8 -0
- package/templates/monorepo/packages/core-react/eslint.config.mjs +4 -0
- package/templates/monorepo/packages/core-react/package.json +34 -0
- package/templates/monorepo/packages/core-react/tsconfig.json +8 -0
- package/templates/monorepo/packages/eslint-config/README.md +3 -0
- package/templates/monorepo/packages/eslint-config/base.js +57 -0
- package/templates/monorepo/packages/eslint-config/next.js +22 -0
- package/templates/monorepo/packages/eslint-config/package.json +25 -0
- package/templates/monorepo/packages/eslint-config/react-internal.js +33 -0
- package/templates/monorepo/packages/typescript-config/base.json +19 -0
- package/templates/monorepo/packages/typescript-config/nextjs.json +12 -0
- package/templates/monorepo/packages/typescript-config/package.json +9 -0
- package/templates/monorepo/packages/typescript-config/react-library.json +7 -0
- package/templates/monorepo/packages/ui/eslint.config.mjs +4 -0
- package/templates/monorepo/packages/ui/package.json +26 -0
- package/templates/monorepo/packages/ui/src/button.tsx +20 -0
- package/templates/monorepo/packages/ui/src/card.tsx +27 -0
- package/templates/monorepo/packages/ui/src/code.tsx +11 -0
- package/templates/monorepo/packages/ui/tsconfig.json +8 -0
- package/templates/monorepo/pnpm-workspace.yaml +9 -0
- package/templates/monorepo/turbo/generators/config.js +1336 -0
- package/templates/monorepo/turbo/generators/templates/next-app/Dockerfile.tpl +30 -0
- package/templates/monorepo/turbo/generators/templates/next-app/README.md.tpl +118 -0
- package/templates/monorepo/turbo/generators/templates/next-app/app/global-error.tsx.tpl +12 -0
- package/templates/monorepo/turbo/generators/templates/next-app/app/globals.css.tpl +1 -0
- package/templates/monorepo/turbo/generators/templates/next-app/app/layout.tsx.tpl +29 -0
- package/templates/monorepo/turbo/generators/templates/next-app/app/page.tsx.tpl +7 -0
- package/templates/monorepo/turbo/generators/templates/next-app/app/providers.tsx.tpl +25 -0
- package/templates/monorepo/turbo/generators/templates/next-app/eslint.config.js.tpl +4 -0
- package/templates/monorepo/turbo/generators/templates/next-app/next.config.js.tpl +6 -0
- package/templates/monorepo/turbo/generators/templates/next-app/tsconfig.json.tpl +18 -0
- package/templates/monorepo/turbo/generators/templates/vite-app/Dockerfile.tpl +22 -0
- package/templates/monorepo/turbo/generators/templates/vite-app/README.plain.md.tpl +90 -0
- package/templates/monorepo/turbo/generators/templates/vite-app/README.react.md.tpl +107 -0
- package/templates/monorepo/turbo/generators/templates/vite-app/eslint.config.mjs.tpl +4 -0
- package/templates/monorepo/turbo/generators/templates/vite-app/index.html.tpl +12 -0
- package/templates/monorepo/turbo/generators/templates/vite-app/index.ts.tpl +22 -0
- package/templates/monorepo/turbo/generators/templates/vite-app/tsconfig.json.tpl +9 -0
- package/templates/monorepo/turbo/generators/templates/vite-app/vite.config.ts.tpl +6 -0
- package/templates/monorepo/turbo.json +28 -0
- package/templates/next/.env.example +2 -0
- package/templates/next/.prettierignore +9 -0
- package/templates/next/.prettierrc.json +9 -0
- package/templates/next/README.md +246 -0
- package/templates/next/_gitignore +44 -0
- package/templates/next/eslint.config.mjs +51 -0
- package/templates/next/next.config.ts +7 -0
- package/templates/next/package.json +24 -0
- package/templates/next/postcss.config.mjs +7 -0
- package/templates/next/scripts/create-feature-crud.mjs +5 -0
- package/templates/next/scripts/create-feature.mjs +5 -0
- package/templates/next/src/app/error.tsx +33 -0
- package/templates/next/src/app/globals.css +35 -0
- package/templates/next/src/app/layout.tsx +39 -0
- package/templates/next/src/app/login/page.tsx +17 -0
- package/templates/next/src/app/page.tsx +32 -0
- package/templates/next/src/app/providers.tsx +20 -0
- package/templates/next/tsconfig.json +34 -0
- package/templates/react/.env.example +1 -0
- package/templates/react/.prettierignore +10 -0
- package/templates/react/.prettierrc.json +9 -0
- package/templates/react/README.md +250 -0
- package/templates/react/_gitignore +31 -0
- package/templates/react/eslint.config.mjs +64 -0
- package/templates/react/package.json +19 -0
- package/templates/react/scripts/create-feature-crud.mjs +5 -0
- package/templates/react/scripts/create-feature.mjs +5 -0
- package/templates/react/src/app/app.tsx +15 -0
- package/templates/react/src/app/error-boundary.tsx +59 -0
- package/templates/react/src/app/frame.tsx +32 -0
- package/templates/react/src/app/globals.css +43 -0
- package/templates/react/src/app/not-found-page.tsx +23 -0
- package/templates/react/src/app/providers.tsx +16 -0
- package/templates/react/src/app/router.tsx +62 -0
- package/templates/react/src/main.tsx +12 -0
- package/templates/react/src/pages/index/page.tsx +36 -0
- package/templates/react/src/pages/login/page.tsx +18 -0
- package/templates/react/tsconfig.app.json +30 -0
- package/templates/react/tsconfig.json +4 -0
- package/templates/react/tsconfig.node.json +24 -0
- package/templates/react/vite.config.ts +14 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/00-/354/240/204/353/260/230/354/240/201/354/235/270-/355/217/264/353/215/224/352/265/254/354/241/260.md +150 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/01-/352/265/254/354/241/260/354/231/200-/353/235/274/354/232/260/355/214/205.md +186 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/02-/354/204/234/353/262/204/354/231/200-/355/201/264/353/235/274/354/235/264/354/226/270/355/212/270.md +86 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/03-/354/203/201/355/203/234/352/264/200/353/246/254.md +84 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/04-API/354/231/200-/353/215/260/354/235/264/355/204/260.md +199 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/05-/354/227/220/353/237/254/354/231/200-UI-/354/203/201/355/203/234.md +159 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/06-/355/217/274.md +116 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/07-/354/212/244/355/203/200/354/235/274/353/247/201/352/263/274-/354/240/221/352/267/274/354/204/261.md +73 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/08-/353/204/244/354/235/264/353/260/215-/354/204/244/354/240/225-/355/217/254/353/247/267/355/214/205.md +98 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/09-/353/235/274/354/232/260/355/212/270-/354/240/225/354/235/230.md +169 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/10-/354/273/244/353/260/213-/354/273/250/353/262/244/354/205/230.md +64 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/11-/352/270/260/355/203/200-/354/233/220/354/271/231.md +187 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/12-/354/213/244/353/254/264-/353/215/260/354/235/264/355/204/260-/355/214/250/355/204/264.md +302 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/13-/354/204/261/353/212/245-/354/233/220/354/271/231.md +175 -0
- package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/README.md +39 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
export type PresetId = 'react' | 'next' | 'monorepo';
|
|
2
|
+
|
|
3
|
+
export type UpstreamTool = 'create-vite' | 'create-next-app' | 'workspace-scaffold';
|
|
4
|
+
|
|
5
|
+
type NoStyleManifest = {
|
|
6
|
+
rewrite: string[];
|
|
7
|
+
remove: string[];
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type PresetScaffoldManifest = {
|
|
11
|
+
preset: PresetId;
|
|
12
|
+
upstream: {
|
|
13
|
+
tool: UpstreamTool;
|
|
14
|
+
defaultArgs: string[];
|
|
15
|
+
notes: string[];
|
|
16
|
+
};
|
|
17
|
+
// Upstream scaffold 직후 정리해야 하는 경로입니다.
|
|
18
|
+
removeAfterScaffold: string[];
|
|
19
|
+
// Upstream가 만들어 주는 기본 파일이라 template override에서 제외할 수 있는 목록입니다.
|
|
20
|
+
upstreamOwned: string[];
|
|
21
|
+
// templates/<preset>에서 그대로 덮어쓸 정적 파일 목록입니다.
|
|
22
|
+
templateOverrides: string[];
|
|
23
|
+
// --no-style 같은 후처리가 들어갈 때 다시 써야 하는 대상 경로입니다.
|
|
24
|
+
noStyle?: NoStyleManifest;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
function definePresetScaffoldManifest(
|
|
28
|
+
manifest: PresetScaffoldManifest,
|
|
29
|
+
): PresetScaffoldManifest {
|
|
30
|
+
return manifest;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const reactScaffoldManifest = definePresetScaffoldManifest({
|
|
34
|
+
preset: 'react',
|
|
35
|
+
upstream: {
|
|
36
|
+
tool: 'create-vite',
|
|
37
|
+
defaultArgs: ['create-vite@latest', '<project-name>'],
|
|
38
|
+
notes: [
|
|
39
|
+
'React template만 허용합니다.',
|
|
40
|
+
'기본 선택지는 react-ts 또는 react-compiler-ts 입니다.',
|
|
41
|
+
'auto scaffold에서도 create-vite 기본 인터랙션을 그대로 사용합니다.',
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
removeAfterScaffold: ['src', 'eslint.config.js'],
|
|
45
|
+
upstreamOwned: ['index.html', 'src/vite-env.d.ts', 'public/*', 'src/assets/*'],
|
|
46
|
+
templateOverrides: [
|
|
47
|
+
'.env.example',
|
|
48
|
+
'.gitignore',
|
|
49
|
+
'.prettierignore',
|
|
50
|
+
'.prettierrc.json',
|
|
51
|
+
'README.md',
|
|
52
|
+
'eslint.config.mjs',
|
|
53
|
+
'package.json',
|
|
54
|
+
'tsconfig.json',
|
|
55
|
+
'tsconfig.app.json',
|
|
56
|
+
'tsconfig.node.json',
|
|
57
|
+
'vite.config.ts',
|
|
58
|
+
'src/main.tsx',
|
|
59
|
+
'src/app/**',
|
|
60
|
+
'src/pages/**',
|
|
61
|
+
],
|
|
62
|
+
noStyle: {
|
|
63
|
+
rewrite: [
|
|
64
|
+
'src/main.tsx',
|
|
65
|
+
'src/app/frame.tsx',
|
|
66
|
+
'src/app/error-boundary.tsx',
|
|
67
|
+
'src/app/not-found-page.tsx',
|
|
68
|
+
'src/pages/index/page.tsx',
|
|
69
|
+
'src/pages/login/page.tsx',
|
|
70
|
+
'src/shared/ui/button.tsx',
|
|
71
|
+
'src/shared/ui/text-input-field.tsx',
|
|
72
|
+
'src/shared/ui/global-modal.tsx',
|
|
73
|
+
],
|
|
74
|
+
remove: ['src/app/globals.css', 'src/app/utility-fallback.css'],
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export const nextScaffoldManifest = definePresetScaffoldManifest({
|
|
79
|
+
preset: 'next',
|
|
80
|
+
upstream: {
|
|
81
|
+
tool: 'create-next-app',
|
|
82
|
+
defaultArgs: ['create-next-app@latest', '<project-name>'],
|
|
83
|
+
notes: [
|
|
84
|
+
'auto scaffold에서도 create-next-app 기본 인터랙션을 그대로 사용합니다.',
|
|
85
|
+
'generator 계약상 TypeScript + App Router + src dir + Tailwind + ESLint + @/* alias 조합을 요구합니다.',
|
|
86
|
+
'AGENTS.md 같은 AI agent 문서는 scaffold 뒤 generator 정리 단계에서 제거합니다.',
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
removeAfterScaffold: ['app', 'pages', 'src/app', 'AGENTS.md', 'CLAUDE.md'],
|
|
90
|
+
upstreamOwned: ['next-env.d.ts', 'src/app/favicon.ico', 'public/*'],
|
|
91
|
+
templateOverrides: [
|
|
92
|
+
'.env.example',
|
|
93
|
+
'.gitignore',
|
|
94
|
+
'.prettierignore',
|
|
95
|
+
'.prettierrc.json',
|
|
96
|
+
'README.md',
|
|
97
|
+
'eslint.config.mjs',
|
|
98
|
+
'next.config.ts',
|
|
99
|
+
'package.json',
|
|
100
|
+
'postcss.config.mjs',
|
|
101
|
+
'tsconfig.json',
|
|
102
|
+
'src/app/layout.tsx',
|
|
103
|
+
'src/app/page.tsx',
|
|
104
|
+
'src/app/login/page.tsx',
|
|
105
|
+
'src/app/error.tsx',
|
|
106
|
+
'src/app/providers.tsx',
|
|
107
|
+
'src/app/globals.css',
|
|
108
|
+
],
|
|
109
|
+
noStyle: {
|
|
110
|
+
rewrite: [
|
|
111
|
+
'src/app/layout.tsx',
|
|
112
|
+
'src/app/page.tsx',
|
|
113
|
+
'src/app/login/page.tsx',
|
|
114
|
+
'src/app/error.tsx',
|
|
115
|
+
'src/shared/ui/button.tsx',
|
|
116
|
+
'src/shared/ui/text-input-field.tsx',
|
|
117
|
+
'src/shared/ui/global-modal.tsx',
|
|
118
|
+
],
|
|
119
|
+
remove: ['src/app/globals.css', 'postcss.config.mjs'],
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
export const monorepoScaffoldManifest = definePresetScaffoldManifest({
|
|
124
|
+
preset: 'monorepo',
|
|
125
|
+
upstream: {
|
|
126
|
+
tool: 'workspace-scaffold',
|
|
127
|
+
defaultArgs: [],
|
|
128
|
+
notes: [
|
|
129
|
+
'monorepo는 외부 scaffold보다 workspace root static file이 더 중요합니다.',
|
|
130
|
+
'core, core-react, core-next runtime은 template가 아니라 source/wrappers에서 가져옵니다.',
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
removeAfterScaffold: [],
|
|
134
|
+
upstreamOwned: [],
|
|
135
|
+
templateOverrides: [
|
|
136
|
+
'.dockerignore',
|
|
137
|
+
'.gitignore',
|
|
138
|
+
'.npmrc',
|
|
139
|
+
'README.md',
|
|
140
|
+
'package.json',
|
|
141
|
+
'pnpm-workspace.yaml',
|
|
142
|
+
'turbo.json',
|
|
143
|
+
'apps/project/**',
|
|
144
|
+
'apps/web/**',
|
|
145
|
+
'packages/core/package.json',
|
|
146
|
+
'packages/core/tsconfig.json',
|
|
147
|
+
'packages/core/eslint.config.mjs',
|
|
148
|
+
'packages/core-react/package.json',
|
|
149
|
+
'packages/core-react/tsconfig.json',
|
|
150
|
+
'packages/core-react/eslint.config.mjs',
|
|
151
|
+
'packages/core-next/package.json',
|
|
152
|
+
'packages/core-next/tsconfig.json',
|
|
153
|
+
'packages/core-next/eslint.config.mjs',
|
|
154
|
+
'packages/eslint-config/**',
|
|
155
|
+
'packages/typescript-config/**',
|
|
156
|
+
'packages/ui/**',
|
|
157
|
+
'turbo/generators/**',
|
|
158
|
+
],
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
export const scaffoldManifests = {
|
|
162
|
+
react: reactScaffoldManifest,
|
|
163
|
+
next: nextScaffoldManifest,
|
|
164
|
+
monorepo: monorepoScaffoldManifest,
|
|
165
|
+
} as const satisfies Record<PresetId, PresetScaffoldManifest>;
|
|
166
|
+
|
|
167
|
+
export function getScaffoldManifest(preset: PresetId) {
|
|
168
|
+
return scaffoldManifests[preset];
|
|
169
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { PresetId } from './scaffold-manifest.ts';
|
|
2
|
+
|
|
3
|
+
export type StandaloneDependencyManifest = {
|
|
4
|
+
preset: Extract<PresetId, 'react' | 'next'>;
|
|
5
|
+
dependencies: string[];
|
|
6
|
+
devDependencies: string[];
|
|
7
|
+
notes: string[];
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
function defineStandaloneDependencyManifest(
|
|
11
|
+
manifest: StandaloneDependencyManifest,
|
|
12
|
+
): StandaloneDependencyManifest {
|
|
13
|
+
return manifest;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const reactStandaloneDependencyManifest = defineStandaloneDependencyManifest({
|
|
17
|
+
preset: 'react',
|
|
18
|
+
dependencies: [
|
|
19
|
+
'@hookform/resolvers',
|
|
20
|
+
'@tanstack/react-query',
|
|
21
|
+
'@tanstack/react-query-devtools',
|
|
22
|
+
'dayjs',
|
|
23
|
+
'react-hook-form',
|
|
24
|
+
'react-router-dom',
|
|
25
|
+
'zod',
|
|
26
|
+
'zustand',
|
|
27
|
+
],
|
|
28
|
+
devDependencies: [
|
|
29
|
+
'@tailwindcss/vite',
|
|
30
|
+
'eslint-config-prettier',
|
|
31
|
+
'eslint-plugin-simple-import-sort',
|
|
32
|
+
'eslint-plugin-unused-imports',
|
|
33
|
+
'husky',
|
|
34
|
+
'prettier',
|
|
35
|
+
'tailwindcss',
|
|
36
|
+
],
|
|
37
|
+
notes: [
|
|
38
|
+
'create-vite 기본 의존성 외에 템플릿이 실제로 사용하는 패키지만 추가합니다.',
|
|
39
|
+
'버전은 템플릿에 고정하지 않고 생성 시점의 package manager가 결정합니다.',
|
|
40
|
+
],
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
export const nextStandaloneDependencyManifest = defineStandaloneDependencyManifest({
|
|
44
|
+
preset: 'next',
|
|
45
|
+
dependencies: [
|
|
46
|
+
'@hookform/resolvers',
|
|
47
|
+
'@tanstack/react-query',
|
|
48
|
+
'@tanstack/react-query-devtools',
|
|
49
|
+
'dayjs',
|
|
50
|
+
'react-hook-form',
|
|
51
|
+
'zod',
|
|
52
|
+
'zustand',
|
|
53
|
+
],
|
|
54
|
+
devDependencies: [
|
|
55
|
+
'eslint-config-prettier',
|
|
56
|
+
'eslint-plugin-simple-import-sort',
|
|
57
|
+
'eslint-plugin-unused-imports',
|
|
58
|
+
'prettier',
|
|
59
|
+
],
|
|
60
|
+
notes: [
|
|
61
|
+
'create-next-app 기본 의존성 위에 템플릿 확장분만 추가합니다.',
|
|
62
|
+
'Next, React, Tailwind 기본 버전은 upstream scaffold 결과를 그대로 따릅니다.',
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
export const standaloneDependencyManifests = {
|
|
67
|
+
react: reactStandaloneDependencyManifest,
|
|
68
|
+
next: nextStandaloneDependencyManifest,
|
|
69
|
+
} as const;
|
|
70
|
+
|
|
71
|
+
export function getStandaloneDependencyManifest(
|
|
72
|
+
preset: Extract<PresetId, 'react' | 'next'>,
|
|
73
|
+
) {
|
|
74
|
+
return standaloneDependencyManifests[preset];
|
|
75
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-web-0to1",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Interactive 0to1 starter generator for React, Next.js, and monorepo presets.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"create-web-0to1": "scripts/create-app.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"internal",
|
|
11
|
+
"source",
|
|
12
|
+
"templates",
|
|
13
|
+
"scripts/create-app.mjs",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=22.18.0"
|
|
18
|
+
},
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"create": "node ./scripts/create-app.mjs",
|
|
24
|
+
"check:node": "node --check scripts/create-app.mjs && node --check scripts/smoke-validate.mjs",
|
|
25
|
+
"check:types": "tsc -p tsconfig.check.json --noEmit",
|
|
26
|
+
"check": "npm run check:node && npm run check:types",
|
|
27
|
+
"smoke": "node ./scripts/smoke-validate.mjs",
|
|
28
|
+
"pack:check": "npm pack --dry-run",
|
|
29
|
+
"prepublishOnly": "npm run check && npm run pack:check"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"create",
|
|
33
|
+
"initializer",
|
|
34
|
+
"starter",
|
|
35
|
+
"generator",
|
|
36
|
+
"react",
|
|
37
|
+
"nextjs",
|
|
38
|
+
"monorepo",
|
|
39
|
+
"0to1"
|
|
40
|
+
],
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^25.5.0",
|
|
43
|
+
"typescript": "^6.0.2"
|
|
44
|
+
}
|
|
45
|
+
}
|