create-vitnode-app 1.2.0-canary.51 → 1.2.0-canary.53

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 (50) hide show
  1. package/README.md +1 -1
  2. package/copy-of-vitnode-app/.vscode/settings.json +29 -0
  3. package/copy-of-vitnode-app/api/drizzle.config.ts +4 -4
  4. package/copy-of-vitnode-app/api/src/index.ts +7 -7
  5. package/copy-of-vitnode-app/api/src/vitnode.api.config.ts +8 -18
  6. package/copy-of-vitnode-app/api/tsconfig.json +1 -1
  7. package/copy-of-vitnode-app/api-bun/src/index.ts +4 -4
  8. package/copy-of-vitnode-app/api-single-app/drizzle.config.ts +4 -4
  9. package/copy-of-vitnode-app/api-single-app/src/app/api/[...route]/route.ts +5 -5
  10. package/copy-of-vitnode-app/api-single-app/src/vitnode.api.config.ts +6 -7
  11. package/copy-of-vitnode-app/biome/biome.json +5 -0
  12. package/copy-of-vitnode-app/monorepo/turbo.json +0 -6
  13. package/copy-of-vitnode-app/root/global.d.ts +2 -2
  14. package/copy-of-vitnode-app/root/next.config.ts +2 -2
  15. package/copy-of-vitnode-app/root/postcss.config.mjs +1 -1
  16. package/copy-of-vitnode-app/root/src/app/[locale]/(main)/[...rest]/page.tsx +1 -1
  17. package/copy-of-vitnode-app/root/src/app/[locale]/(main)/layout.tsx +3 -3
  18. package/copy-of-vitnode-app/root/src/app/[locale]/(main)/not-found.tsx +1 -1
  19. package/copy-of-vitnode-app/root/src/app/[locale]/(main)/page.tsx +11 -10
  20. package/copy-of-vitnode-app/root/src/app/[locale]/admin/(auth)/layout.tsx +2 -2
  21. package/copy-of-vitnode-app/root/src/app/[locale]/admin/page.tsx +1 -1
  22. package/copy-of-vitnode-app/root/src/app/[locale]/layout.tsx +9 -10
  23. package/copy-of-vitnode-app/root/src/app/global-error.tsx +8 -11
  24. package/copy-of-vitnode-app/root/src/app/global.css +5 -4
  25. package/copy-of-vitnode-app/root/src/app/layout.tsx +2 -2
  26. package/copy-of-vitnode-app/root/src/middleware.ts +5 -5
  27. package/copy-of-vitnode-app/root/src/vitnode.config.ts +8 -8
  28. package/copy-of-vitnode-app/root/tsconfig.json +1 -1
  29. package/dist/src/create/create-package-json.js +263 -221
  30. package/dist/src/create/create-vitnode.js +73 -73
  31. package/dist/src/helpers/get-available-package-managers.js +6 -6
  32. package/dist/src/helpers/get-package-json.js +2 -2
  33. package/dist/src/helpers/init-vitnode.js +7 -7
  34. package/dist/src/helpers/install-dependencies.js +35 -32
  35. package/dist/src/helpers/is-folder-empty.js +25 -26
  36. package/dist/src/helpers/is-online.js +16 -16
  37. package/dist/src/helpers/is-writeable.js +2 -2
  38. package/dist/src/helpers/validate-pkg.js +1 -1
  39. package/dist/src/index.js +28 -28
  40. package/dist/src/plugin/index.js +5 -5
  41. package/dist/src/prepare/prepare.js +5 -5
  42. package/dist/src/questions.js +29 -30
  43. package/dist/src/validation.js +15 -15
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +6 -9
  46. package/copy-of-vitnode-app/api/package.json +0 -43
  47. package/copy-of-vitnode-app/api/src/locales/@vitnode/blog/en.json +0 -70
  48. package/copy-of-vitnode-app/api/src/locales/@vitnode/core/en.json +0 -217
  49. package/copy-of-vitnode-app/eslint/.prettierrc.mjs +0 -11
  50. package/copy-of-vitnode-app/eslint/eslint.config.mjs +0 -17
@@ -1,254 +1,296 @@
1
- import { readFile, writeFile } from 'fs/promises';
2
- import { dirname, join } from 'path';
3
- import { fileURLToPath } from 'url';
4
- import { getAvailablePackageManagers } from '../helpers/get-available-package-managers.js';
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { getAvailablePackageManagers } from "../helpers/get-available-package-managers.js";
5
5
  const __filename = fileURLToPath(import.meta.url);
6
6
  const __dirname = dirname(__filename);
7
- export const createPackageJSON = async ({ appName, packageManager, root, eslint, docker, mode, monorepo, }) => {
8
- const availablePackageManagers = await getAvailablePackageManagers();
9
- const pkg = JSON.parse(await readFile(join(__dirname, '..', '..', '..', 'package.json'), 'utf-8'));
10
- const pkgVitNodeVersion = `^${pkg.version}`;
11
- const monorepoStructure = {
12
- api: join(root, 'apps', 'api'),
13
- web: join(root, 'apps', 'web'),
14
- };
15
- if (mode === 'apiMonorepo' || monorepo) {
16
- const rootPackageJson = {
7
+ const writeJson = async (path, data) => writeFile(path, JSON.stringify(data, null, 2));
8
+ const paths = (root) => ({
9
+ root,
10
+ api: join(root, "apps", "api"),
11
+ web: join(root, "apps", "web"),
12
+ });
13
+ const withIf = (cond, obj) => (cond ? obj : {});
14
+ const versions = {
15
+ typesNode: "^24",
16
+ typesReact: "^19.1",
17
+ typesReactDom: "^19.1",
18
+ typesMdx: "^2.0.13",
19
+ typesBun: "latest",
20
+ turbo: "^2.5.6",
21
+ typescript: "^5.9.2",
22
+ tsx: "^4.20.4",
23
+ tscAlias: "^1.8.16",
24
+ biome: "^2.2.2",
25
+ tailwind: "^4.1.12",
26
+ tailwindPostcss: "^4.1.12",
27
+ postcss: "^8.5.6",
28
+ twAnimateCssWeb: "^1.3.7",
29
+ twAnimateCssSingle: "^1.3.6",
30
+ react: "^19.1",
31
+ reactDom: "^19.1",
32
+ nextSingle: "^15.5.0",
33
+ nextWebInMonorepo: "^15.4.6",
34
+ nextIntl: "^4.3.4",
35
+ useIntl: "^4.3.4",
36
+ rhf: "^7.62.0",
37
+ rhfResolvers: "^5.1.1",
38
+ lucide: "^0.540.0",
39
+ sonner: "^2.0.7",
40
+ dotenv: "^17.2.1",
41
+ drizzleKitSingle: "^0.31.4",
42
+ drizzleKitApi: "^0.31.3",
43
+ drizzleOrm: "^0.44.4",
44
+ hono: "^4.9.2",
45
+ honoZodOpenapi: "^1.1.0",
46
+ honoZodValidator: "^0.7.2",
47
+ reactEmail: "^4.2.8",
48
+ reactEmailComponents: "^0.5.1",
49
+ zod: "^4.0.17",
50
+ babelReactCompiler: "19.1.0-rc.2",
51
+ cva: "^0.7.1",
52
+ };
53
+ const biomeScripts = {
54
+ lint: "biome check",
55
+ "lint:fix": "biome check . --write",
56
+ };
57
+ const dockerDevScript = (appName) => `docker compose -f ./docker-compose.yml -p ${appName}-vitnode-dev up -d`;
58
+ const rootScripts = (enableBiome, enableDocker, appName) => ({
59
+ "db:migrate": "turbo db:migrate",
60
+ "db:push": "turbo db:push",
61
+ init: "turbo init",
62
+ dev: "turbo dev",
63
+ build: "turbo build",
64
+ start: "turbo start",
65
+ ...withIf(enableBiome, biomeScripts),
66
+ ...withIf(enableDocker, { "docker:dev": dockerDevScript(appName) }),
67
+ });
68
+ const apiScripts = (pm, biome, docker, onlyApi, appName) => ({
69
+ "db:push": "vitnode push",
70
+ "db:migrate": "vitnode migrate",
71
+ init: "vitnode init --api",
72
+ ...(pm === "bun"
73
+ ? {
74
+ dev: "vitnode init --api && bun run --hot src/index.ts",
75
+ start: "NODE_ENV=production bun run src/index.ts",
76
+ }
77
+ : {
78
+ dev: "vitnode init --api && tsx watch src/index.ts",
79
+ build: "tsc && tsc-alias -p tsconfig.json",
80
+ start: "node dist/index.js",
81
+ }),
82
+ "dev:email": "email dev --dir src/emails",
83
+ ...withIf(biome, biomeScripts),
84
+ ...withIf(docker && onlyApi, { "docker:dev": dockerDevScript(appName) }),
85
+ "drizzle-kit": "drizzle-kit",
86
+ });
87
+ const singleAppScripts = (biome, docker, appName) => ({
88
+ "db:push": "vitnode push",
89
+ "db:migrate": "vitnode migrate",
90
+ init: "vitnode init",
91
+ dev: "vitnode init && next dev --turbopack",
92
+ "dev:email": "email dev --dir src/emails",
93
+ build: "next build",
94
+ start: "next start",
95
+ ...withIf(biome, biomeScripts),
96
+ ...withIf(docker, { "docker:dev": dockerDevScript(appName) }),
97
+ "drizzle-kit": "drizzle-kit",
98
+ });
99
+ const webScripts = (biome) => ({
100
+ init: "vitnode init --web",
101
+ dev: "vitnode init --web && next dev --turbopack",
102
+ build: "next build",
103
+ start: "next start",
104
+ ...withIf(biome, biomeScripts),
105
+ });
106
+ const baseDevDeps = (biome) => ({
107
+ "@types/node": versions.typesNode,
108
+ "@vitnode/config": "",
109
+ ...withIf(biome, {
110
+ "@biomejs/biome": versions.biome,
111
+ }),
112
+ });
113
+ const rootDevDeps = (biome) => ({
114
+ ...baseDevDeps(biome),
115
+ turbo: versions.turbo,
116
+ typescript: versions.typescript,
117
+ zod: versions.zod,
118
+ });
119
+ const apiDeps = {
120
+ "@hono/zod-openapi": versions.honoZodOpenapi,
121
+ "@hono/zod-validator": versions.honoZodValidator,
122
+ "@react-email/components": versions.reactEmailComponents,
123
+ "@vitnode/core": "",
124
+ "drizzle-kit": versions.drizzleKitApi,
125
+ "drizzle-orm": versions.drizzleOrm,
126
+ hono: versions.hono,
127
+ "next-intl": versions.nextIntl,
128
+ react: versions.react,
129
+ "react-dom": versions.reactDom,
130
+ "use-intl": versions.useIntl,
131
+ zod: versions.zod,
132
+ };
133
+ const apiDevDeps = (pm, biome) => ({
134
+ "@hono/node-server": "^1.19.0",
135
+ ...(pm === "bun" ? { "@types/bun": versions.typesBun } : {}),
136
+ "@types/node": versions.typesNode,
137
+ "@types/react": versions.typesReact,
138
+ "@types/react-dom": versions.typesReactDom,
139
+ "@vitnode/config": "",
140
+ dotenv: versions.dotenv,
141
+ ...withIf(biome, {
142
+ "@biomejs/biome": versions.biome,
143
+ }),
144
+ "react-email": versions.reactEmail,
145
+ "tsc-alias": versions.tscAlias,
146
+ tsx: versions.tsx,
147
+ typescript: versions.typescript,
148
+ });
149
+ const singleAppDeps = {
150
+ "@hono/zod-openapi": versions.honoZodOpenapi,
151
+ "@hono/zod-validator": versions.honoZodValidator,
152
+ "@hookform/resolvers": versions.rhfResolvers,
153
+ "@react-email/components": versions.reactEmailComponents,
154
+ "@vitnode/core": "",
155
+ "babel-plugin-react-compiler": versions.babelReactCompiler,
156
+ "drizzle-kit": versions.drizzleKitSingle,
157
+ "drizzle-orm": versions.drizzleOrm,
158
+ hono: versions.hono,
159
+ "lucide-react": versions.lucide,
160
+ next: versions.nextSingle,
161
+ "next-intl": versions.nextIntl,
162
+ react: versions.react,
163
+ "react-dom": versions.reactDom,
164
+ "react-hook-form": versions.rhf,
165
+ sonner: versions.sonner,
166
+ "use-intl": versions.useIntl,
167
+ zod: versions.zod,
168
+ };
169
+ const singleAppDevDeps = (biome) => ({
170
+ "@tailwindcss/postcss": versions.tailwindPostcss,
171
+ "@types/node": versions.typesNode,
172
+ "@types/react": versions.typesReact,
173
+ "@types/react-dom": versions.typesReactDom,
174
+ "@vitnode/config": "",
175
+ ...withIf(biome, {
176
+ "@biomejs/biome": versions.biome,
177
+ }),
178
+ "react-email": versions.reactEmail,
179
+ turbo: versions.turbo,
180
+ tailwindcss: versions.tailwind,
181
+ "tw-animate-css": versions.twAnimateCssSingle,
182
+ typescript: versions.typescript,
183
+ });
184
+ const webDeps = {
185
+ "@vitnode/core": "",
186
+ "babel-plugin-react-compiler": versions.babelReactCompiler,
187
+ "lucide-react": versions.lucide,
188
+ next: versions.nextWebInMonorepo,
189
+ "next-intl": versions.nextIntl,
190
+ react: versions.react,
191
+ "react-dom": versions.reactDom,
192
+ "react-hook-form": versions.rhf,
193
+ sonner: versions.sonner,
194
+ };
195
+ const webDevDeps = (biome) => ({
196
+ "@hookform/resolvers": versions.rhfResolvers,
197
+ "@tailwindcss/postcss": versions.tailwindPostcss,
198
+ "@types/mdx": versions.typesMdx,
199
+ "@types/node": versions.typesNode,
200
+ "@types/react": versions.typesReact,
201
+ "@types/react-dom": versions.typesReactDom,
202
+ "@vitnode/config": "",
203
+ "class-variance-authority": versions.cva,
204
+ ...withIf(biome, { "@biomejs/biome": versions.biome }),
205
+ postcss: versions.postcss,
206
+ tailwindcss: versions.tailwind,
207
+ "tw-animate-css": versions.twAnimateCssWeb,
208
+ typescript: versions.typescript,
209
+ zod: versions.zod,
210
+ });
211
+ export const createPackageJSON = async ({ appName, packageManager, root, biome, docker, mode, monorepo, }) => {
212
+ const cliPkg = JSON.parse(await readFile(join(__dirname, "..", "..", "..", "package.json"), "utf-8"));
213
+ const vitnodeVersionRange = `^${cliPkg.version}`;
214
+ const pmVersions = await getAvailablePackageManagers();
215
+ const pmSpec = `${packageManager}@${pmVersions[packageManager]}`;
216
+ const p = paths(root);
217
+ const isApiMonorepo = mode === "apiMonorepo" || !!monorepo;
218
+ const isOnlyApi = mode === "onlyApi";
219
+ const isSingleApp = mode === "singleApp";
220
+ if (isApiMonorepo) {
221
+ const rootPkg = {
17
222
  name: appName,
18
223
  private: true,
19
- scripts: {
20
- 'db:migrate': 'turbo db:migrate',
21
- 'db:push': 'turbo db:push',
22
- init: 'turbo init',
23
- dev: 'turbo dev',
24
- build: 'turbo build',
25
- start: 'turbo start',
26
- ...(eslint
27
- ? {
28
- lint: 'eslint .',
29
- 'lint:fix': 'eslint . --fix',
30
- }
31
- : {}),
32
- ...(docker
33
- ? {
34
- 'docker:dev': `docker compose -f ./docker-compose.yml -p ${appName}-vitnode-dev up -d`,
35
- }
36
- : {}),
37
- },
224
+ scripts: rootScripts(biome, !!docker, appName),
38
225
  devDependencies: {
39
- '@types/node': '^24',
40
- '@vitnode/eslint-config': pkgVitNodeVersion,
41
- ...(eslint
42
- ? {
43
- 'prettier-plugin-tailwindcss': '^0.6.14',
44
- prettier: '^3.6.2',
45
- }
46
- : {}),
47
- turbo: '^2.5.5',
48
- typescript: '^5.8.3',
49
- zod: '^4.0.5',
226
+ ...rootDevDeps(biome),
227
+ "@vitnode/config": vitnodeVersionRange,
50
228
  },
51
- packageManager: `${packageManager}@${availablePackageManagers[packageManager]}`,
52
- workspaces: ['apps/*', 'plugins/*'],
229
+ packageManager: pmSpec,
230
+ workspaces: ["apps/*", "plugins/*"],
53
231
  };
54
- await writeFile(join(root, 'package.json'), JSON.stringify(rootPackageJson, null, 2));
232
+ await writeJson(join(p.root, "package.json"), rootPkg);
55
233
  }
56
- const apiPackageJson = {
57
- name: mode === 'apiMonorepo' || monorepo ? 'api' : appName,
58
- version: '0.1.0',
234
+ const apiPkg = {
235
+ name: isApiMonorepo ? "api" : appName,
236
+ version: "0.1.0",
59
237
  private: true,
60
- type: 'module',
61
- scripts: {
62
- 'db:push': 'vitnode push',
63
- 'db:migrate': 'vitnode migrate',
64
- init: 'vitnode init --api',
65
- ...(packageManager === 'bun'
66
- ? {
67
- dev: 'vitnode init --api && bun run --hot src/index.ts',
68
- start: 'NODE_ENV=production bun run src/index.ts',
69
- }
70
- : {
71
- dev: 'vitnode init --api && tsx watch src/index.ts',
72
- build: 'tsc && tsc-alias -p tsconfig.json',
73
- start: 'node dist/index.js',
74
- }),
75
- ...(eslint
76
- ? {
77
- lint: 'eslint .',
78
- 'lint:fix': 'eslint . --fix',
79
- }
80
- : {}),
81
- ...(docker && mode === 'onlyApi'
82
- ? {
83
- 'docker:dev': `docker compose -f ./docker-compose.yml -p ${appName}-vitnode-dev up -d`,
84
- }
85
- : {}),
86
- 'drizzle-kit': 'drizzle-kit',
87
- },
238
+ type: "module",
239
+ scripts: apiScripts(packageManager, biome, !!docker, mode === "onlyApi", appName),
88
240
  dependencies: {
89
- '@hono/zod-openapi': '^1.0.2',
90
- '@hono/zod-validator': '^0.7.2',
91
- '@react-email/components': '^0.3.2',
92
- '@vitnode/core': pkgVitNodeVersion,
93
- 'drizzle-kit': '^0.31.3',
94
- 'drizzle-orm': '^0.44.3',
95
- hono: '^4.8.5',
96
- 'next-intl': '^4.3.1',
97
- react: '^19.1',
98
- 'react-dom': '^19.1',
99
- zod: '^4.0.5',
241
+ ...apiDeps,
242
+ "@vitnode/core": vitnodeVersionRange,
100
243
  },
101
244
  devDependencies: {
102
- '@hono/node-server': '^1.17.1',
103
- ...(packageManager === 'bun'
245
+ ...apiDevDeps(packageManager, biome),
246
+ "@vitnode/config": vitnodeVersionRange,
247
+ ...(biome && mode === "onlyApi"
104
248
  ? {
105
- '@types/bun': 'latest',
249
+ "@biomejs/biome": versions.biome,
106
250
  }
107
251
  : {}),
108
- '@types/node': '^24',
109
- '@types/react': '^19.1',
110
- '@types/react-dom': '^19.1',
111
- '@vitnode/eslint-config': pkgVitNodeVersion,
112
- dotenv: '^17.2.0',
113
- ...(eslint
114
- ? {
115
- eslint: '^9.31.0',
116
- ...(mode === 'onlyApi'
117
- ? {
118
- 'prettier-plugin-tailwindcss': '^0.6.14',
119
- prettier: '^3.6.2',
120
- }
121
- : {}),
122
- }
123
- : {}),
124
- 'react-email': '^4.2.3',
125
- 'tsc-alias': '^1.8.16',
126
- tsx: '^4.20.3',
127
- typescript: '^5.8.3',
252
+ ...(packageManager === "bun" ? {} : {}),
128
253
  },
129
254
  };
130
- if (mode === 'singleApp') {
131
- const packageJson = {
132
- name: monorepo ? 'web' : appName,
133
- version: '0.1.0',
255
+ if (isSingleApp) {
256
+ const singlePkg = {
257
+ name: monorepo ? "web" : appName,
258
+ version: "0.1.0",
134
259
  private: true,
135
- type: 'module',
136
- scripts: {
137
- 'db:push': 'vitnode push',
138
- 'db:migrate': 'vitnode migrate',
139
- init: 'vitnode init',
140
- dev: 'vitnode init && next dev --turbopack',
141
- build: 'next build',
142
- start: 'next start',
143
- ...(eslint
144
- ? {
145
- lint: 'eslint .',
146
- 'lint:fix': 'eslint . --fix',
147
- }
148
- : {}),
149
- ...(docker
150
- ? {
151
- 'docker:dev': `docker compose -f ./docker-compose.yml -p ${appName}-vitnode-dev up -d`,
152
- }
153
- : {}),
154
- 'drizzle-kit': 'drizzle-kit',
155
- },
260
+ type: "module",
261
+ scripts: singleAppScripts(biome, !!docker, appName),
156
262
  dependencies: {
157
- '@hono/zod-openapi': '^1.0.2',
158
- '@hono/zod-validator': '^0.7.2',
159
- '@hookform/resolvers': '^5.1.1',
160
- '@react-email/components': '^0.3.2',
161
- '@vitnode/core': pkgVitNodeVersion,
162
- 'babel-plugin-react-compiler': '19.1.0-rc.2',
163
- 'drizzle-kit': '^0.31.4',
164
- 'drizzle-orm': '^0.44.3',
165
- hono: '^4.8.5',
166
- 'lucide-react': '^0.525.0',
167
- next: '^15.4.2',
168
- 'next-intl': '^4.3.4',
169
- react: '^19.1',
170
- 'react-dom': '^19.1',
171
- 'react-hook-form': '^7.60.0',
172
- sonner: '^2.0.6',
173
- zod: '^4.0.5',
263
+ ...singleAppDeps,
264
+ "@vitnode/core": vitnodeVersionRange,
174
265
  },
175
266
  devDependencies: {
176
- '@tailwindcss/postcss': '^4.1.11',
177
- '@types/node': '^24',
178
- '@types/react': '^19.1',
179
- '@types/react-dom': '^19.1',
180
- '@vitnode/eslint-config': pkgVitNodeVersion,
181
- ...(eslint
182
- ? {
183
- eslint: '^9.31.0',
184
- 'prettier-plugin-tailwindcss': '^0.6.14',
185
- prettier: '^3.6.2',
186
- }
187
- : {}),
188
- 'react-email': '^4.2.3',
189
- turbo: '^2.5.5',
190
- tailwindcss: '^4.1.11',
191
- 'tw-animate-css': '^1.3.5',
192
- typescript: '^5.8.3',
267
+ ...singleAppDevDeps(biome),
268
+ "@vitnode/config": vitnodeVersionRange,
193
269
  },
194
- packageManager: `${packageManager}@${availablePackageManagers[packageManager]}`,
270
+ packageManager: pmSpec,
195
271
  };
196
- await writeFile(join(monorepo ? monorepoStructure.web : root, 'package.json'), JSON.stringify(packageJson, null, 2));
272
+ await writeJson(join(monorepo ? p.web : p.root, "package.json"), singlePkg);
197
273
  }
198
- else if (mode === 'apiMonorepo') {
199
- await writeFile(join(root, 'apps', 'api', 'package.json'), JSON.stringify(apiPackageJson, null, 2));
200
- const webPackageJson = {
201
- name: 'web',
202
- version: '0.1.0',
274
+ if (mode === "apiMonorepo") {
275
+ await writeJson(join(p.api, "package.json"), apiPkg);
276
+ const webPkg = {
277
+ name: "web",
278
+ version: "0.1.0",
203
279
  private: true,
204
- type: 'module',
205
- scripts: {
206
- init: 'vitnode init --web',
207
- dev: 'vitnode init --web && next dev --turbopack',
208
- build: 'next build',
209
- start: 'next start',
210
- ...(eslint
211
- ? {
212
- lint: 'eslint .',
213
- 'lint:fix': 'eslint . --fix',
214
- }
215
- : {}),
216
- },
280
+ type: "module",
281
+ scripts: webScripts(biome),
217
282
  dependencies: {
218
- '@vitnode/core': pkgVitNodeVersion,
219
- 'babel-plugin-react-compiler': '19.1.0-rc.2',
220
- 'lucide-react': '^0.525.0',
221
- next: '^15.4.2',
222
- 'next-intl': '^4.3.4',
223
- react: '^19.1',
224
- 'react-dom': '^19.1',
225
- 'react-hook-form': '^7.60.0',
226
- sonner: '^2.0.6',
283
+ ...webDeps,
284
+ "@vitnode/core": vitnodeVersionRange,
227
285
  },
228
286
  devDependencies: {
229
- '@hookform/resolvers': '^5.1.1',
230
- '@tailwindcss/postcss': '^4.1.11',
231
- '@types/mdx': '^2.0.13',
232
- '@types/node': '^24',
233
- '@types/react': '^19.1',
234
- '@types/react-dom': '^19.1',
235
- '@vitnode/eslint-config': pkgVitNodeVersion,
236
- 'class-variance-authority': '^0.7.1',
237
- ...(eslint
238
- ? {
239
- eslint: '^9.31.0',
240
- }
241
- : {}),
242
- postcss: '^8.5.6',
243
- tailwindcss: '^4.1.11',
244
- 'tw-animate-css': '^1.3.5',
245
- typescript: '^5.8.3',
246
- zod: '^4.0.5',
287
+ ...webDevDeps(biome),
288
+ "@vitnode/config": vitnodeVersionRange,
247
289
  },
248
290
  };
249
- await writeFile(join(root, 'apps', 'web', 'package.json'), JSON.stringify(webPackageJson, null, 2));
291
+ await writeJson(join(p.web, "package.json"), webPkg);
250
292
  }
251
- else if (mode === 'onlyApi') {
252
- await writeFile(join(monorepo ? monorepoStructure.api : root, 'package.json'), JSON.stringify(apiPackageJson, null, 2));
293
+ if (isOnlyApi) {
294
+ await writeJson(join(monorepo ? p.api : p.root, "package.json"), apiPkg);
253
295
  }
254
296
  };