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.
Files changed (193) hide show
  1. package/README.md +68 -0
  2. package/internal/engine/create-feature-crud-script.ts +134 -0
  3. package/internal/engine/create-feature-crud.template.mjs +601 -0
  4. package/internal/engine/create-feature-script.ts +142 -0
  5. package/internal/engine/generator-engine.ts +546 -0
  6. package/internal/engine/standalone-feature-preset.ts +34 -0
  7. package/internal/meta/preset-plan.ts +41 -0
  8. package/internal/meta/runtime-copy-plan.ts +220 -0
  9. package/internal/meta/runtime-layout.ts +262 -0
  10. package/internal/meta/scaffold-manifest.ts +169 -0
  11. package/internal/meta/standalone-dependency-manifest.ts +75 -0
  12. package/package.json +45 -0
  13. package/scripts/create-app.mjs +1612 -0
  14. package/source/core/auth/auth-events.ts +13 -0
  15. package/source/core/error/app-error.ts +85 -0
  16. package/source/core/error/handle-app-error.client.ts +35 -0
  17. package/source/core/lib/dayjs.ts +25 -0
  18. package/source/core/query/query-client.ts +126 -0
  19. package/source/core/request/request-core.ts +210 -0
  20. package/source/core/routes/route-paths.ts +4 -0
  21. package/source/core/ui/button.tsx +24 -0
  22. package/source/core/ui/modal-store.ts +32 -0
  23. package/source/core/ui/text-input-field.tsx +36 -0
  24. package/source/core/utils/build-query-string.ts +30 -0
  25. package/source/core/utils/format/date.ts +41 -0
  26. package/source/core/utils/format/index.ts +3 -0
  27. package/source/core/utils/format/number.ts +13 -0
  28. package/source/core/utils/format/text.ts +15 -0
  29. package/source/core/utils/schema-utils.ts +27 -0
  30. package/source/wrappers/monorepo/core/internal.ts +21 -0
  31. package/source/wrappers/monorepo/core/src/index.ts +4 -0
  32. package/source/wrappers/monorepo/core-next/src/auth.client.ts +1 -0
  33. package/source/wrappers/monorepo/core-next/src/auth.server.ts +94 -0
  34. package/source/wrappers/monorepo/core-next/src/bootstrap.client.tsx +21 -0
  35. package/source/wrappers/monorepo/core-next/src/bootstrap.tsx +18 -0
  36. package/source/wrappers/monorepo/core-next/src/index.ts +1 -0
  37. package/source/wrappers/monorepo/core-react/src/app-providers.tsx +36 -0
  38. package/source/wrappers/monorepo/core-react/src/auth.ts +42 -0
  39. package/source/wrappers/monorepo/core-react/src/hydration.tsx +21 -0
  40. package/source/wrappers/monorepo/core-react/src/index.ts +7 -0
  41. package/source/wrappers/monorepo/core-react/src/provider.tsx +49 -0
  42. package/source/wrappers/monorepo/core-react/src/query-client.ts +48 -0
  43. package/source/wrappers/monorepo/core-react/src/query-error-handler.ts +62 -0
  44. package/source/wrappers/monorepo/core-react/src/query-keys.ts +22 -0
  45. package/source/wrappers/monorepo/request/core-fetch.ts +27 -0
  46. package/source/wrappers/monorepo/request/core-request.ts +93 -0
  47. package/source/wrappers/next/auth/auth-error-listener.tsx +34 -0
  48. package/source/wrappers/next/error/handle-app-error.server.ts +41 -0
  49. package/source/wrappers/next/query/hydration.tsx +20 -0
  50. package/source/wrappers/next/query/providers.tsx +35 -0
  51. package/source/wrappers/next/request/request.client.ts +24 -0
  52. package/source/wrappers/next/request/request.server.ts +64 -0
  53. package/source/wrappers/next/request/request.ts +52 -0
  54. package/source/wrappers/next/ui/global-modal.tsx +29 -0
  55. package/source/wrappers/react/auth/auth-error-listener.tsx +34 -0
  56. package/source/wrappers/react/query/providers.tsx +31 -0
  57. package/source/wrappers/react/request/request.client.ts +24 -0
  58. package/source/wrappers/react/request/request.ts +51 -0
  59. package/source/wrappers/react/ui/global-modal.tsx +27 -0
  60. package/templates/monorepo/.dockerignore +38 -0
  61. package/templates/monorepo/README.md +292 -0
  62. package/templates/monorepo/_gitignore +38 -0
  63. package/templates/monorepo/_npmrc +1 -0
  64. package/templates/monorepo/apps/project/Dockerfile +32 -0
  65. package/templates/monorepo/apps/project/eslint.config.mjs +4 -0
  66. package/templates/monorepo/apps/project/index.html +14 -0
  67. package/templates/monorepo/apps/project/index.ts +15 -0
  68. package/templates/monorepo/apps/project/package.json +21 -0
  69. package/templates/monorepo/apps/project/tsconfig.json +9 -0
  70. package/templates/monorepo/apps/project/vite.config.ts +6 -0
  71. package/templates/monorepo/apps/web/Dockerfile +43 -0
  72. package/templates/monorepo/apps/web/README.md +111 -0
  73. package/templates/monorepo/apps/web/_gitignore +36 -0
  74. package/templates/monorepo/apps/web/app/favicon.ico +0 -0
  75. package/templates/monorepo/apps/web/app/global-error.tsx +12 -0
  76. package/templates/monorepo/apps/web/app/globals.css +0 -0
  77. package/templates/monorepo/apps/web/app/layout.tsx +28 -0
  78. package/templates/monorepo/apps/web/app/page.tsx +7 -0
  79. package/templates/monorepo/apps/web/app/providers.tsx +25 -0
  80. package/templates/monorepo/apps/web/eslint.config.js +4 -0
  81. package/templates/monorepo/apps/web/next-env.d.ts +6 -0
  82. package/templates/monorepo/apps/web/next.config.js +4 -0
  83. package/templates/monorepo/apps/web/package.json +31 -0
  84. package/templates/monorepo/apps/web/public/file-text.svg +3 -0
  85. package/templates/monorepo/apps/web/public/globe.svg +10 -0
  86. package/templates/monorepo/apps/web/public/next.svg +1 -0
  87. package/templates/monorepo/apps/web/public/turborepo-dark.svg +19 -0
  88. package/templates/monorepo/apps/web/public/turborepo-light.svg +19 -0
  89. package/templates/monorepo/apps/web/public/vercel.svg +10 -0
  90. package/templates/monorepo/apps/web/public/window.svg +3 -0
  91. package/templates/monorepo/apps/web/tsconfig.json +20 -0
  92. package/templates/monorepo/package.json +24 -0
  93. package/templates/monorepo/packages/core/eslint.config.mjs +4 -0
  94. package/templates/monorepo/packages/core/package.json +32 -0
  95. package/templates/monorepo/packages/core/tsconfig.json +8 -0
  96. package/templates/monorepo/packages/core-next/eslint.config.mjs +13 -0
  97. package/templates/monorepo/packages/core-next/package.json +43 -0
  98. package/templates/monorepo/packages/core-next/tsconfig.json +8 -0
  99. package/templates/monorepo/packages/core-react/eslint.config.mjs +4 -0
  100. package/templates/monorepo/packages/core-react/package.json +34 -0
  101. package/templates/monorepo/packages/core-react/tsconfig.json +8 -0
  102. package/templates/monorepo/packages/eslint-config/README.md +3 -0
  103. package/templates/monorepo/packages/eslint-config/base.js +57 -0
  104. package/templates/monorepo/packages/eslint-config/next.js +22 -0
  105. package/templates/monorepo/packages/eslint-config/package.json +25 -0
  106. package/templates/monorepo/packages/eslint-config/react-internal.js +33 -0
  107. package/templates/monorepo/packages/typescript-config/base.json +19 -0
  108. package/templates/monorepo/packages/typescript-config/nextjs.json +12 -0
  109. package/templates/monorepo/packages/typescript-config/package.json +9 -0
  110. package/templates/monorepo/packages/typescript-config/react-library.json +7 -0
  111. package/templates/monorepo/packages/ui/eslint.config.mjs +4 -0
  112. package/templates/monorepo/packages/ui/package.json +26 -0
  113. package/templates/monorepo/packages/ui/src/button.tsx +20 -0
  114. package/templates/monorepo/packages/ui/src/card.tsx +27 -0
  115. package/templates/monorepo/packages/ui/src/code.tsx +11 -0
  116. package/templates/monorepo/packages/ui/tsconfig.json +8 -0
  117. package/templates/monorepo/pnpm-workspace.yaml +9 -0
  118. package/templates/monorepo/turbo/generators/config.js +1336 -0
  119. package/templates/monorepo/turbo/generators/templates/next-app/Dockerfile.tpl +30 -0
  120. package/templates/monorepo/turbo/generators/templates/next-app/README.md.tpl +118 -0
  121. package/templates/monorepo/turbo/generators/templates/next-app/app/global-error.tsx.tpl +12 -0
  122. package/templates/monorepo/turbo/generators/templates/next-app/app/globals.css.tpl +1 -0
  123. package/templates/monorepo/turbo/generators/templates/next-app/app/layout.tsx.tpl +29 -0
  124. package/templates/monorepo/turbo/generators/templates/next-app/app/page.tsx.tpl +7 -0
  125. package/templates/monorepo/turbo/generators/templates/next-app/app/providers.tsx.tpl +25 -0
  126. package/templates/monorepo/turbo/generators/templates/next-app/eslint.config.js.tpl +4 -0
  127. package/templates/monorepo/turbo/generators/templates/next-app/next.config.js.tpl +6 -0
  128. package/templates/monorepo/turbo/generators/templates/next-app/tsconfig.json.tpl +18 -0
  129. package/templates/monorepo/turbo/generators/templates/vite-app/Dockerfile.tpl +22 -0
  130. package/templates/monorepo/turbo/generators/templates/vite-app/README.plain.md.tpl +90 -0
  131. package/templates/monorepo/turbo/generators/templates/vite-app/README.react.md.tpl +107 -0
  132. package/templates/monorepo/turbo/generators/templates/vite-app/eslint.config.mjs.tpl +4 -0
  133. package/templates/monorepo/turbo/generators/templates/vite-app/index.html.tpl +12 -0
  134. package/templates/monorepo/turbo/generators/templates/vite-app/index.ts.tpl +22 -0
  135. package/templates/monorepo/turbo/generators/templates/vite-app/tsconfig.json.tpl +9 -0
  136. package/templates/monorepo/turbo/generators/templates/vite-app/vite.config.ts.tpl +6 -0
  137. package/templates/monorepo/turbo.json +28 -0
  138. package/templates/next/.env.example +2 -0
  139. package/templates/next/.prettierignore +9 -0
  140. package/templates/next/.prettierrc.json +9 -0
  141. package/templates/next/README.md +246 -0
  142. package/templates/next/_gitignore +44 -0
  143. package/templates/next/eslint.config.mjs +51 -0
  144. package/templates/next/next.config.ts +7 -0
  145. package/templates/next/package.json +24 -0
  146. package/templates/next/postcss.config.mjs +7 -0
  147. package/templates/next/scripts/create-feature-crud.mjs +5 -0
  148. package/templates/next/scripts/create-feature.mjs +5 -0
  149. package/templates/next/src/app/error.tsx +33 -0
  150. package/templates/next/src/app/globals.css +35 -0
  151. package/templates/next/src/app/layout.tsx +39 -0
  152. package/templates/next/src/app/login/page.tsx +17 -0
  153. package/templates/next/src/app/page.tsx +32 -0
  154. package/templates/next/src/app/providers.tsx +20 -0
  155. package/templates/next/tsconfig.json +34 -0
  156. package/templates/react/.env.example +1 -0
  157. package/templates/react/.prettierignore +10 -0
  158. package/templates/react/.prettierrc.json +9 -0
  159. package/templates/react/README.md +250 -0
  160. package/templates/react/_gitignore +31 -0
  161. package/templates/react/eslint.config.mjs +64 -0
  162. package/templates/react/package.json +19 -0
  163. package/templates/react/scripts/create-feature-crud.mjs +5 -0
  164. package/templates/react/scripts/create-feature.mjs +5 -0
  165. package/templates/react/src/app/app.tsx +15 -0
  166. package/templates/react/src/app/error-boundary.tsx +59 -0
  167. package/templates/react/src/app/frame.tsx +32 -0
  168. package/templates/react/src/app/globals.css +43 -0
  169. package/templates/react/src/app/not-found-page.tsx +23 -0
  170. package/templates/react/src/app/providers.tsx +16 -0
  171. package/templates/react/src/app/router.tsx +62 -0
  172. package/templates/react/src/main.tsx +12 -0
  173. package/templates/react/src/pages/index/page.tsx +36 -0
  174. package/templates/react/src/pages/login/page.tsx +18 -0
  175. package/templates/react/tsconfig.app.json +30 -0
  176. package/templates/react/tsconfig.json +4 -0
  177. package/templates/react/tsconfig.node.json +24 -0
  178. package/templates/react/vite.config.ts +14 -0
  179. 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
  180. 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
  181. 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
  182. 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
  183. 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
  184. 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
  185. package/templates/shared/docs//352/260/234/353/260/234/354/233/220/354/271/231/06-/355/217/274.md +116 -0
  186. 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
  187. 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
  188. 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
  189. 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
  190. 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
  191. 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
  192. 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
  193. 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
+ }