@batijs/cli 0.0.628 → 0.0.630
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/dist/{asset-package.json-D0cKwgLg.js → asset-package.json-BI-447Lf.js} +1 -1
- package/dist/{asset-package.json-CmTiAAUv.js → asset-package.json-BKz7RIOA.js} +6 -4
- package/dist/{asset-package.json-VBbmoif1.js → asset-package.json-BWBP2Nt4.js} +1 -1
- package/dist/{asset-package.json-BNHJGRXk.js → asset-package.json-BpYtzVUp.js} +2 -2
- package/dist/{asset-package.json-B8NG_Kkb.js → asset-package.json-ByyswJWS.js} +1 -1
- package/dist/{asset-package.json-3NbkL6py.js → asset-package.json-CDtoELCL.js} +1 -1
- package/dist/{asset-package.json-BLckftcg.js → asset-package.json-CNxKHE48.js} +1 -1
- package/dist/{asset-package.json-CsN9zlLO.js → asset-package.json-CVDwQcJT.js} +1 -1
- package/dist/{asset-package.json-eEGm0dfW.js → asset-package.json-CZGfrRCF.js} +1 -1
- package/dist/{asset-package.json-CLTrw1Ua.js → asset-package.json-Ce3xlNdW.js} +1 -1
- package/dist/{asset-package.json-Bj9nQ_Ab.js → asset-package.json-CrS3d_nT.js} +5 -5
- package/dist/{asset-package.json-BGY4vOPv.js → asset-package.json-CtehZhRD.js} +3 -3
- package/dist/{asset-package.json-gNlQnlas.js → asset-package.json-Cx9SXQz5.js} +1 -1
- package/dist/{asset-package.json-muYa8Koc.js → asset-package.json-D9HnGbn-.js} +2 -2
- package/dist/asset-package.json-DKULIe-Z.js +26 -0
- package/dist/{asset-package.json-vjM_A-rS.js → asset-package.json-DoCvkWCH.js} +2 -2
- package/dist/asset-package.json-DoD27uYD.js +26 -0
- package/dist/{asset-package.json-DrYtYBR6.js → asset-package.json-DwayG2zN.js} +1 -1
- package/dist/{asset-package.json-CfaoboYz.js → asset-package.json-EFYfsuao.js} +1 -1
- package/dist/{asset-package.json-DmVEm5Da.js → asset-package.json-Y6cFx6TQ.js} +1 -0
- package/dist/{asset-package.json-DAafoD6p.js → asset-package.json-_46wnXn0.js} +2 -2
- package/dist/{asset-package.json-CVKLgil6.js → asset-package.json-bQWZqYy0.js} +1 -1
- package/dist/{asset-package.json-skHR2fAh.js → asset-package.json-f63TVKbb.js} +1 -1
- package/dist/{asset-package.json-B7-IRLpM.js → asset-package.json-s_vdtPYz.js} +1 -1
- package/dist/{asset-package2.json-D1EUrGTO.js → asset-package2.json-CBe-SDVa.js} +1 -1
- package/dist/{asset-package.json-tZyQL5aE.js → asset-package2.json-CGHsBMPO.js} +1 -1
- package/dist/{asset-package.json-DXUU3ibP.js → asset-package2.json-JaXo-ozU.js} +1 -1
- package/dist/boilerplates/@batijs/authjs/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/aws/files/$package.json.js +2 -2
- package/dist/boilerplates/@batijs/aws/files/asset-package.json.mjs +5 -5
- package/dist/boilerplates/@batijs/biome/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/cloudflare/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/cloudflare/files/asset-package.json.mjs +2 -2
- package/dist/boilerplates/@batijs/compiled/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/compiled/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/d1/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/d1/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/d1-kysely/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/d1-sqlite/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/docker-compose/bati.config.mjs +17 -0
- package/dist/boilerplates/@batijs/docker-compose/files/$.dockerignore.js +19 -0
- package/dist/boilerplates/@batijs/docker-compose/files/$Dockerfile.js +81 -0
- package/dist/boilerplates/@batijs/docker-compose/files/docker-compose.yml +28 -0
- package/dist/boilerplates/@batijs/dokploy/bati.config.mjs +23 -0
- package/dist/boilerplates/@batijs/dokploy/files/$TODO.md.js +28 -0
- package/dist/boilerplates/@batijs/dokploy/files/$package.json.js +13 -0
- package/dist/boilerplates/@batijs/dokploy/files/asset-package.json.mjs +24 -0
- package/dist/boilerplates/@batijs/drizzle/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/edgeone/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/eslint/files/$package.json.js +3 -2
- package/dist/boilerplates/@batijs/eslint/files/asset-package.json.mjs +1 -0
- package/dist/boilerplates/@batijs/express/files/$package.json.js +5 -2
- package/dist/boilerplates/@batijs/express/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/fastify/files/$package.json.js +2 -3
- package/dist/boilerplates/@batijs/fastify/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/h3/files/$package.json.js +1 -2
- package/dist/boilerplates/@batijs/h3/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/hono/files/$package.json.js +1 -2
- package/dist/boilerplates/@batijs/hono/files/asset-package.json.mjs +2 -2
- package/dist/boilerplates/@batijs/kysely/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/kysely/files/$vite.config.ts.js +20 -0
- package/dist/boilerplates/@batijs/kysely/files/asset-package.json.mjs +6 -4
- package/dist/boilerplates/@batijs/kysely/files/vite-plugin-input.ts +28 -0
- package/dist/boilerplates/@batijs/kysely/types/vite-plugin-input.d.mts +17 -0
- package/dist/boilerplates/@batijs/mantine/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/mantine/files/asset-package.json.mjs +3 -3
- package/dist/boilerplates/@batijs/netlify/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/oxlint/bati.config.mjs +6 -3
- package/dist/boilerplates/@batijs/oxlint/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/oxlint/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/pnpm/files/$pnpm-workspace.yaml.js +20 -13
- package/dist/boilerplates/@batijs/prettier/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/prisma/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/react/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/react/files/asset-package.json.mjs +2 -2
- package/dist/boilerplates/@batijs/react-sentry/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/react-sentry/files/asset-package.json.mjs +2 -2
- package/dist/boilerplates/@batijs/sentry/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/sentry/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/shadcn-ui/files/$package.json.js +3 -4
- package/dist/boilerplates/@batijs/shared/files/$package.json.js +23 -0
- package/dist/boilerplates/@batijs/shared-server/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/shared-server/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/solid/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/solid/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/solid-sentry/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/solid-sentry/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/sqlite/files/$package.json.js +3 -3
- package/dist/boilerplates/@batijs/sqlite/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/storybook/files/$package.json.js +9 -0
- package/dist/boilerplates/@batijs/storybook/files/asset-package.json.mjs +24 -0
- package/dist/boilerplates/@batijs/tailwindcss/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/tailwindcss/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/telefunc/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/telefunc/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/trpc/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/trpc/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/ts-rest/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/universal-deploy/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/vercel/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/vercel/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/vue/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/vue/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/vue/types/node_modules/.pnpm/{vike-vue@0.9.11_@emnapi+core@1.10.0_@emnapi+runtime@1.10.0_vike@0.4.259_@cloudflare+wor_1ea77c4150b7f94710924f6716d021aa → vike-vue@0.9.11_@emnapi+core@1.10.0_@emnapi+runtime@1.10.0_vike@0.4.259_@cloudflare+wor_b1aa379fdc40687889ee6b09fc0f5338}/node_modules/vike-vue/dist/types/VikeHooks.d.mts +1 -1
- package/dist/boilerplates/@batijs/vue/types/pages/+onCreateApp.d.mts +1 -1
- package/dist/boilerplates/@batijs/vue-sentry/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/vue-sentry/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/boilerplates.json +13 -0
- package/dist/index.js +10 -8
- package/package.json +4 -4
- package/dist/boilerplates/@batijs/shared/files/package.json +0 -15
- /package/dist/{asset-package.json-CUwXUL3w.js → asset-package.json-1rjGQ0pD.js} +0 -0
- /package/dist/{asset-package.json-kq-Ep7__.js → asset-package.json-BdZNR8Cf.js} +0 -0
- /package/dist/{asset-package.json-DpS4Q2Qd.js → asset-package.json-Buap0IPy.js} +0 -0
- /package/dist/{asset-package.json-DtJYj0N2.js → asset-package.json-C-4KYYPE.js} +0 -0
- /package/dist/{asset-package.json-ByK6ERC5.js → asset-package.json-C8HDeufh.js} +0 -0
- /package/dist/{asset-package.json-LtmqU-uf.js → asset-package.json-DO3v_Kz2.js} +0 -0
- /package/dist/{asset-package.json-CVBkaJWq.js → asset-package.json-DSiZMeZh.js} +0 -0
- /package/dist/{asset-package.json-CAwLskjc.js → asset-package.json-Ddsv5ylk.js} +0 -0
- /package/dist/{asset-package.json-dv-UDsgA.js → asset-package.json-DnspyDBy.js} +0 -0
- /package/dist/{asset-package.json-Cv-dYwQv.js → asset-package.json-DoZ5D9Nf.js} +0 -0
- /package/dist/{asset-package.json-BqAQ04jd.js → asset-package.json-DpL_QsSj.js} +0 -0
- /package/dist/{asset-package.json-B4mNaeSL.js → asset-package.json-W0eT5YjJ.js} +0 -0
- /package/dist/boilerplates/@batijs/vue/types/node_modules/.pnpm/{vike-vue@0.9.11_@emnapi+core@1.10.0_@emnapi+runtime@1.10.0_vike@0.4.259_@cloudflare+wor_1ea77c4150b7f94710924f6716d021aa → vike-vue@0.9.11_@emnapi+core@1.10.0_@emnapi+runtime@1.10.0_vike@0.4.259_@cloudflare+wor_b1aa379fdc40687889ee6b09fc0f5338}/node_modules/vike-vue/dist/types/public.d.mts +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { dockerPackageManager, dockerfile, packageManager } from "@batijs/core";
|
|
4
|
+
//#region ../../boilerplates/docker-compose/dist/files/$Dockerfile.mjs
|
|
5
|
+
async function getDockerfile(props) {
|
|
6
|
+
const { meta } = props;
|
|
7
|
+
let pm = packageManager();
|
|
8
|
+
const deps = Object.keys({
|
|
9
|
+
...props.packageJson.dependencies,
|
|
10
|
+
...props.packageJson.devDependencies
|
|
11
|
+
});
|
|
12
|
+
if (pm.name === "bun" && deps.includes("better-sqlite3")) pm = {
|
|
13
|
+
name: "npm",
|
|
14
|
+
run: "npm run",
|
|
15
|
+
exec: "npx"
|
|
16
|
+
};
|
|
17
|
+
const nodeCli = pm.name === "bun" ? "bun" : "node";
|
|
18
|
+
const run = pm.run;
|
|
19
|
+
const config = dockerPackageManager(pm.name, { frozenLockfile: !meta.BATI_TEST });
|
|
20
|
+
const startupMigrations = [];
|
|
21
|
+
const migrationCopies = [];
|
|
22
|
+
if (meta.BATI.has("sqlite")) {
|
|
23
|
+
startupMigrations.push(`${run} sqlite:migrate`);
|
|
24
|
+
migrationCopies.push({
|
|
25
|
+
sources: ["/app/database/sqlite"],
|
|
26
|
+
dest: "./database/sqlite",
|
|
27
|
+
from: "builder"
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (meta.BATI.has("drizzle")) {
|
|
31
|
+
startupMigrations.push(`${run} drizzle:migrate`);
|
|
32
|
+
migrationCopies.push({
|
|
33
|
+
sources: ["/app/database/migrations"],
|
|
34
|
+
dest: "./database/migrations",
|
|
35
|
+
from: "deps-dev"
|
|
36
|
+
});
|
|
37
|
+
migrationCopies.push({
|
|
38
|
+
sources: ["/app/drizzle.config.ts"],
|
|
39
|
+
dest: "./drizzle.config.ts",
|
|
40
|
+
from: "builder"
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (meta.BATI.has("kysely")) {
|
|
44
|
+
startupMigrations.push(`${nodeCli} ./dist/server/migrate.mjs`);
|
|
45
|
+
migrationCopies.push({
|
|
46
|
+
sources: ["/app/database/kysely/migrations"],
|
|
47
|
+
dest: "./dist/server/migrations",
|
|
48
|
+
from: "builder"
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const startCmd = startupMigrations.length > 0 ? [
|
|
52
|
+
"sh",
|
|
53
|
+
"-c",
|
|
54
|
+
[...startupMigrations, `${nodeCli} ./dist/server/index.mjs`].join(" && ")
|
|
55
|
+
] : [nodeCli, "./dist/server/index.mjs"];
|
|
56
|
+
const installSources = ["package.json", ...config.lockfiles];
|
|
57
|
+
return `${dockerfile().from(config.image, {
|
|
58
|
+
as: "deps-dev",
|
|
59
|
+
comment: "install all dependencies (devDeps + deps) for build & migrations"
|
|
60
|
+
}).workdir("/app").when(config.corepack, (b) => b.run("corepack enable")).copy(["."], ".").run(config.install).when(meta.BATI.has("drizzle"), (b) => b.env({ DATABASE_URL: "/app/database/sqlite.db" }).run(`${run} drizzle:generate`)).from(config.image, {
|
|
61
|
+
as: "deps-prod",
|
|
62
|
+
comment: "install production-only dependencies for the runtime image"
|
|
63
|
+
}).workdir("/app").when(config.corepack, (b) => b.run("corepack enable")).copy(installSources, "./").run(config.installProd).from(config.image, {
|
|
64
|
+
as: "builder",
|
|
65
|
+
comment: "build the application"
|
|
66
|
+
}).workdir("/app").when(config.corepack, (b) => b.run("corepack enable")).copy(["/app/node_modules"], "./node_modules", { from: "deps-dev" }).copy(["."], ".").run(`${run} build`).from(config.image, {
|
|
67
|
+
as: "runner",
|
|
68
|
+
comment: "production runtime image"
|
|
69
|
+
}).workdir("/app").env({
|
|
70
|
+
NODE_ENV: "production",
|
|
71
|
+
PORT: "3000"
|
|
72
|
+
}).when(!meta.BATI.hasD1 && meta.BATI.hasDatabase, (b) => b.env({ DATABASE_URL: "/app/database/sqlite.db" }, { comment: "non-D1 database" })).when(meta.BATI.has("auth0"), (b) => b.env({
|
|
73
|
+
AUTH0_CLIENT_ID: "",
|
|
74
|
+
AUTH0_CLIENT_SECRET: "",
|
|
75
|
+
AUTH0_ISSUER_BASE_URL: ""
|
|
76
|
+
}, { comment: "auth0" })).when(meta.BATI.has("sentry"), (b) => b.env({ SENTRY_DSN: "" }, { comment: "sentry" })).when(config.corepack, (b) => b.run("corepack enable")).copy(installSources, "./").copy(["/app/node_modules"], "./node_modules", { from: "deps-prod" }).copy(["/app/dist"], "./dist", { from: "builder" }).pipe((b) => {
|
|
77
|
+
for (const { sources, dest, from } of migrationCopies) b.copy(sources, dest, { from });
|
|
78
|
+
}).expose(3e3).cmd(startCmd).build()}\n`;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { getDockerfile as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
services:
|
|
2
|
+
app:
|
|
3
|
+
build:
|
|
4
|
+
context: .
|
|
5
|
+
dockerfile: Dockerfile
|
|
6
|
+
ports:
|
|
7
|
+
- "${PORT:-3000}:3000"
|
|
8
|
+
environment:
|
|
9
|
+
- NODE_ENV=production
|
|
10
|
+
- PORT=3000
|
|
11
|
+
# !BATI.hasD1 && BATI.hasDatabase
|
|
12
|
+
- DATABASE_URL=${DATABASE_URL:-/app/data/db.sqlite}
|
|
13
|
+
# BATI.has("auth0")
|
|
14
|
+
- AUTH0_CLIENT_ID=${AUTH0_CLIENT_ID}
|
|
15
|
+
# BATI.has("auth0")
|
|
16
|
+
- AUTH0_CLIENT_SECRET=${AUTH0_CLIENT_SECRET}
|
|
17
|
+
# BATI.has("auth0")
|
|
18
|
+
- AUTH0_ISSUER_BASE_URL=${AUTH0_ISSUER_BASE_URL}
|
|
19
|
+
# BATI.has("sentry")
|
|
20
|
+
- SENTRY_DSN=${SENTRY_DSN}
|
|
21
|
+
# BATI.hasDatabase
|
|
22
|
+
volumes:
|
|
23
|
+
- sqlite_data:/app/data
|
|
24
|
+
restart: unless-stopped
|
|
25
|
+
|
|
26
|
+
# BATI.hasDatabase
|
|
27
|
+
volumes:
|
|
28
|
+
sqlite_data:
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region ../../packages/core/dist/config.js
|
|
2
|
+
function e(e, t) {
|
|
3
|
+
if (!e) throw Error(t);
|
|
4
|
+
}
|
|
5
|
+
function t(t) {
|
|
6
|
+
return `enforce` in t && e(t.enforce === `pre` || t.enforce === `post`, `'enforce' must be 'pre' or 'post', was ${t.enforce}`), `if` in t && e(typeof t.if == `function`, `'if' must be a function`), `nextSteps` in t && e(typeof t.nextSteps == `function`, `'nextSteps' must be a function`), `knip` in t && (e(typeof t.knip == `object` && t.knip !== null, `'knip' must be an object`), `entry` in t.knip && e(Array.isArray(t.knip.entry), `'knip.entry' must be an array`), `ignoreDependencies` in t.knip && e(Array.isArray(t.knip.ignoreDependencies), `'knip.ignoreDependencies' must be an array`), `ignore` in t.knip && e(Array.isArray(t.knip.ignore), `'knip.ignore' must be an array`), `vite` in t.knip && e(typeof t.knip.vite == `boolean`, `'knip.vite' must be a boolean`)), t;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
//#region bati.config.ts
|
|
10
|
+
var bati_config_default = t({
|
|
11
|
+
if(meta) {
|
|
12
|
+
return meta.BATI.has("dokploy");
|
|
13
|
+
},
|
|
14
|
+
nextSteps(_meta, _packageManager, { bold }) {
|
|
15
|
+
return [{
|
|
16
|
+
type: "text",
|
|
17
|
+
step: `${bold("dokploy")}: Check ${bold("TODO.md")} for remaining steps.`
|
|
18
|
+
}];
|
|
19
|
+
},
|
|
20
|
+
enforce: "post"
|
|
21
|
+
});
|
|
22
|
+
//#endregion
|
|
23
|
+
export { bati_config_default as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { loadMarkdown } from "@batijs/core";
|
|
4
|
+
//#region ../../boilerplates/dokploy/dist/files/$TODO.md.mjs
|
|
5
|
+
async function getTodo(props) {
|
|
6
|
+
const content = await loadMarkdown(props);
|
|
7
|
+
content.addMarkdownFeature(`
|
|
8
|
+
## Dokploy
|
|
9
|
+
|
|
10
|
+
1. **Push your repository** to a Git provider (GitHub, GitLab, Bitbucket, etc.)
|
|
11
|
+
|
|
12
|
+
2. **Install Dokploy** on your VPS if you haven't already:
|
|
13
|
+
\`\`\`sh
|
|
14
|
+
curl -sSL https://dokploy.com/install.sh | sudo sh
|
|
15
|
+
\`\`\`
|
|
16
|
+
|
|
17
|
+
3. **Open Dokploy** at \`http://<your-server-ip>:3000\` and complete the initial setup.
|
|
18
|
+
|
|
19
|
+
4. **Create a new application** in the Dokploy dashboard and connect it to your repository.
|
|
20
|
+
|
|
21
|
+
5. **Deploy** — Dokploy will use the \`docker-compose.yml\` at the root of your repository to build and start your application.
|
|
22
|
+
|
|
23
|
+
See also: https://docs.dokploy.com
|
|
24
|
+
`, "dokploy");
|
|
25
|
+
return content;
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { getTodo as default };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { loadPackageJson } from "@batijs/core";
|
|
4
|
+
//#region ../../boilerplates/dokploy/dist/files/$package.json.mjs
|
|
5
|
+
async function getPackageJson(props) {
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-DoD27uYD.js").then((x) => x.default))).setScript("prod", {
|
|
7
|
+
value: "docker compose up -d --build",
|
|
8
|
+
precedence: 25,
|
|
9
|
+
warnIfReplaced: true
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { getPackageJson as default };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region package.json
|
|
2
|
+
var package_default = {
|
|
3
|
+
name: "@batijs/dokploy",
|
|
4
|
+
"private": true,
|
|
5
|
+
version: "0.0.1",
|
|
6
|
+
description: "",
|
|
7
|
+
type: "module",
|
|
8
|
+
scripts: {
|
|
9
|
+
"check-types": "tsc --noEmit",
|
|
10
|
+
"build": "bati-compile-boilerplate"
|
|
11
|
+
},
|
|
12
|
+
keywords: [],
|
|
13
|
+
author: "",
|
|
14
|
+
license: "MIT",
|
|
15
|
+
devDependencies: {
|
|
16
|
+
"@batijs/compile": "workspace:*",
|
|
17
|
+
"@batijs/core": "workspace:",
|
|
18
|
+
"@types/node": "^20.19.37"
|
|
19
|
+
},
|
|
20
|
+
nx: { "tags": ["type:boilerplate"] },
|
|
21
|
+
files: ["dist/"]
|
|
22
|
+
};
|
|
23
|
+
//#endregion
|
|
24
|
+
export { package_default as default };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/drizzle/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-W0eT5YjJ.js").then((x) => x.default))).setScript("drizzle:generate", {
|
|
7
7
|
value: "drizzle-kit generate",
|
|
8
8
|
precedence: 20
|
|
9
9
|
}).setScript("drizzle:migrate", {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/edgeone/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-DpL_QsSj.js").then((x) => x.default))).addDevDependencies(["@edgeone/vite"]);
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
export { getPackageJson as default };
|
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/eslint/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-Y6cFx6TQ.js").then((x) => x.default))).setScript("lint", {
|
|
7
7
|
value: "eslint .",
|
|
8
8
|
precedence: 0
|
|
9
9
|
}).addDevDependencies([
|
|
10
10
|
"eslint",
|
|
11
11
|
"@eslint/js",
|
|
12
12
|
"typescript-eslint",
|
|
13
|
-
"globals"
|
|
13
|
+
"globals",
|
|
14
|
+
"jiti"
|
|
14
15
|
]).addDevDependencies(["eslint-plugin-prettier", "eslint-config-prettier"], props.meta.BATI.has("prettier")).addDevDependencies(["eslint-plugin-vue", "vue-eslint-parser"], props.meta.BATI.has("vue")).addDevDependencies(["eslint-plugin-react"], props.meta.BATI.has("react")).addDevDependencies(["eslint-plugin-solid"], props.meta.BATI.has("solid"));
|
|
15
16
|
}
|
|
16
17
|
//#endregion
|
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/express/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-CDtoELCL.js").then((x) => x.default))).addDevDependencies([
|
|
7
|
+
"@types/express",
|
|
8
|
+
"@types/node",
|
|
9
|
+
"vite"
|
|
10
|
+
]).addDependencies([
|
|
7
11
|
"@vikejs/express",
|
|
8
12
|
"express",
|
|
9
|
-
"vite",
|
|
10
13
|
"vike"
|
|
11
14
|
]).addDependencies(["dotenv"], props.meta.BATI.has("auth0") || props.meta.BATI.hasDatabase);
|
|
12
15
|
}
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/fastify/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-BWBP2Nt4.js").then((x) => x.default))).addDevDependencies(["@types/node", "vite"]).addDependencies([
|
|
7
7
|
"@vikejs/fastify",
|
|
8
8
|
"fastify",
|
|
9
9
|
"fastify-raw-body",
|
|
10
|
-
"vike"
|
|
11
|
-
"vite"
|
|
10
|
+
"vike"
|
|
12
11
|
]).addDependencies(["dotenv"], props.meta.BATI.has("auth0") || props.meta.BATI.hasDatabase);
|
|
13
12
|
}
|
|
14
13
|
//#endregion
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/h3/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-s_vdtPYz.js").then((x) => x.default))).addDevDependencies(["@types/node", "vite"]).addDependencies([
|
|
7
7
|
"h3",
|
|
8
8
|
"vike",
|
|
9
|
-
"vite",
|
|
10
9
|
"@vikejs/h3",
|
|
11
10
|
"@universal-middleware/core"
|
|
12
11
|
]).addDependencies(["@auth/core"], props.meta.BATI.has("authjs") || props.meta.BATI.has("auth0")).addDependencies(["dotenv"], (props.meta.BATI.has("auth0") || props.meta.BATI.hasDatabase) && !props.meta.BATI.has("cloudflare"));
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/hono/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-D9HnGbn-.js").then((x) => x.default))).addDevDependencies(["@types/node", "vite"]).addDevDependencies(["@types/aws-lambda"], props.meta.BATI.has("aws")).addDependencies([
|
|
7
7
|
"@vikejs/hono",
|
|
8
8
|
"hono",
|
|
9
|
-
"vite",
|
|
10
9
|
"vike"
|
|
11
10
|
]).addDependencies(["dotenv"], (props.meta.BATI.has("auth0") || props.meta.BATI.hasDatabase) && !props.meta.BATI.has("cloudflare"));
|
|
12
11
|
}
|
|
@@ -21,10 +21,10 @@ var package_default = {
|
|
|
21
21
|
"@types/node": "^20.19.37",
|
|
22
22
|
"@vikejs/hono": "^0.2.0",
|
|
23
23
|
"dotenv": "^17.4.2",
|
|
24
|
-
"hono": "^4.12.
|
|
24
|
+
"hono": "^4.12.23",
|
|
25
25
|
"telefunc": "^0.2.20",
|
|
26
26
|
"vike": "0.4.259",
|
|
27
|
-
"vite": "^8.0.
|
|
27
|
+
"vite": "^8.0.14"
|
|
28
28
|
},
|
|
29
29
|
files: ["dist/"],
|
|
30
30
|
exports: {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/kysely/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
const packageJson = await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
const packageJson = await loadPackageJson(props, await import("../../../../asset-package.json-BKz7RIOA.js").then((x) => x.default));
|
|
7
7
|
if (props.meta.BATI.hasD1) return packageJson.addDependencies(["kysely", "kysely-d1"]);
|
|
8
8
|
return packageJson.setScript("kysely:migrate", {
|
|
9
9
|
value: "tsx ./database/kysely/migrate.ts",
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { addVitePlugin, loadAsMagicast } from "@batijs/core";
|
|
4
|
+
//#region ../../boilerplates/kysely/dist/files/$vite.config.ts.mjs
|
|
5
|
+
async function getViteConfig(props) {
|
|
6
|
+
if (props.meta.BATI.hasD1) return;
|
|
7
|
+
const mod = await loadAsMagicast(props);
|
|
8
|
+
addVitePlugin(mod, {
|
|
9
|
+
from: "./vite-plugin-input.js",
|
|
10
|
+
constructor: "inputPlugin",
|
|
11
|
+
imported: "inputPlugin",
|
|
12
|
+
options: {
|
|
13
|
+
name: "migrate",
|
|
14
|
+
entry: "database/kysely/migrate.ts"
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return mod.generate().code;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { getViteConfig as default };
|
|
@@ -15,14 +15,14 @@ var package_default = {
|
|
|
15
15
|
devDependencies: {
|
|
16
16
|
"@batijs/compile": "workspace:*",
|
|
17
17
|
"@batijs/core": "workspace:",
|
|
18
|
-
"@cloudflare/workers-types": "^4.
|
|
18
|
+
"@cloudflare/workers-types": "^4.20260525.1",
|
|
19
19
|
"@types/better-sqlite3": "^7.6.13",
|
|
20
20
|
"@types/node": "^20.19.37",
|
|
21
21
|
"better-sqlite3": "^12.10.0",
|
|
22
22
|
"dotenv": "^17.4.2",
|
|
23
23
|
"kysely": "^0.29.2",
|
|
24
24
|
"kysely-d1": "^0.4.0",
|
|
25
|
-
"tsx": "^4.22.
|
|
25
|
+
"tsx": "^4.22.3"
|
|
26
26
|
},
|
|
27
27
|
files: ["dist/"],
|
|
28
28
|
exports: {
|
|
@@ -30,14 +30,16 @@ var package_default = {
|
|
|
30
30
|
"./database/kysely/migrate": { "types": "./dist/types/database/kysely/migrate.d.mts" },
|
|
31
31
|
"./database/kysely/migrations/001_create_todos_table": { "types": "./dist/types/database/kysely/migrations/001_create_todos_table.d.mts" },
|
|
32
32
|
"./database/kysely/queries/todos": { "types": "./dist/types/database/kysely/queries/todos.d.mts" },
|
|
33
|
-
"./database/kysely/types": { "types": "./dist/types/database/kysely/types.d.mts" }
|
|
33
|
+
"./database/kysely/types": { "types": "./dist/types/database/kysely/types.d.mts" },
|
|
34
|
+
"./vite-plugin-input": { "types": "./dist/types/vite-plugin-input.d.mts" }
|
|
34
35
|
},
|
|
35
36
|
typesVersions: { "*": {
|
|
36
37
|
"database/kysely/db": ["./dist/types/database/kysely/db.d.mts"],
|
|
37
38
|
"database/kysely/migrate": ["./dist/types/database/kysely/migrate.d.mts"],
|
|
38
39
|
"database/kysely/migrations/001_create_todos_table": ["./dist/types/database/kysely/migrations/001_create_todos_table.d.mts"],
|
|
39
40
|
"database/kysely/queries/todos": ["./dist/types/database/kysely/queries/todos.d.mts"],
|
|
40
|
-
"database/kysely/types": ["./dist/types/database/kysely/types.d.mts"]
|
|
41
|
+
"database/kysely/types": ["./dist/types/database/kysely/types.d.mts"],
|
|
42
|
+
"vite-plugin-input": ["./dist/types/vite-plugin-input.d.mts"]
|
|
41
43
|
} },
|
|
42
44
|
nx: { "tags": ["type:boilerplate"] }
|
|
43
45
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*{ @if (!it.BATI.hasD1) }*/
|
|
2
|
+
import type { Plugin } from "vite";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Add entries to the ssr build step. Used to compile kysely migration scripts
|
|
6
|
+
*/
|
|
7
|
+
export function inputPlugin({ name, entry, env = "ssr" }: { name: string; entry: string; env?: string }): Plugin {
|
|
8
|
+
return {
|
|
9
|
+
name: `input-plugin:${name}`,
|
|
10
|
+
|
|
11
|
+
config() {
|
|
12
|
+
return {
|
|
13
|
+
environments: {
|
|
14
|
+
[env]: {
|
|
15
|
+
build: {
|
|
16
|
+
rolldownOptions: {
|
|
17
|
+
input: {
|
|
18
|
+
[name]: entry,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/*{ /if }*/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Plugin } from "vite";
|
|
2
|
+
|
|
3
|
+
//#region files/vite-plugin-input.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Add entries to the ssr build step. Used to compile kysely migration scripts
|
|
6
|
+
*/
|
|
7
|
+
declare function inputPlugin({
|
|
8
|
+
name,
|
|
9
|
+
entry,
|
|
10
|
+
env
|
|
11
|
+
}: {
|
|
12
|
+
name: string;
|
|
13
|
+
entry: string;
|
|
14
|
+
env?: string;
|
|
15
|
+
}): Plugin;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { inputPlugin };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/mantine/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-CtehZhRD.js").then((x) => x.default))).addDevDependencies([
|
|
7
7
|
"postcss",
|
|
8
8
|
"postcss-preset-mantine",
|
|
9
9
|
"postcss-simple-vars"
|
|
@@ -18,15 +18,15 @@ var package_default = {
|
|
|
18
18
|
"@mantine/core": "^9.2.1",
|
|
19
19
|
"@mantine/hooks": "^9.2.1",
|
|
20
20
|
"@types/node": "^20.19.37",
|
|
21
|
-
"@types/react": "^19.2.
|
|
21
|
+
"@types/react": "^19.2.15",
|
|
22
22
|
"@types/react-dom": "^19.2.3",
|
|
23
|
-
"postcss": "^8.5.
|
|
23
|
+
"postcss": "^8.5.15",
|
|
24
24
|
"postcss-preset-mantine": "^1.18.0",
|
|
25
25
|
"postcss-simple-vars": "^7.0.1",
|
|
26
26
|
"react": "^19.2.6",
|
|
27
27
|
"react-dom": "^19.2.6",
|
|
28
28
|
"vike-react": "^0.6.23",
|
|
29
|
-
"vite": "^8.0.
|
|
29
|
+
"vite": "^8.0.14",
|
|
30
30
|
"vite-plugin-compiled-react": "^1.3.1"
|
|
31
31
|
},
|
|
32
32
|
files: ["dist/"],
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/netlify/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-DO3v_Kz2.js").then((x) => x.default))).addDevDependencies(["@netlify/vite-plugin"]);
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
export { getPackageJson as default };
|
|
@@ -7,8 +7,11 @@ function t(t) {
|
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
10
|
-
var bati_config_default = t({
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
var bati_config_default = t({
|
|
11
|
+
if(meta) {
|
|
12
|
+
return meta.BATI.has("oxlint");
|
|
13
|
+
},
|
|
14
|
+
knip: { ignoreDependencies: ["oxlint", "oxlint-tsgolint"] }
|
|
15
|
+
});
|
|
13
16
|
//#endregion
|
|
14
17
|
export { bati_config_default as default };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/oxlint/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
const packageJson = await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
const packageJson = await loadPackageJson(props, await import("../../../../asset-package.json-bQWZqYy0.js").then((x) => x.default));
|
|
7
7
|
const gitIgnore = props.meta.BATI_IS_CI || props.meta.BATI_SKIP_GIT ? "--ignore-path .gitignore " : "";
|
|
8
8
|
return packageJson.setScript("lint", {
|
|
9
9
|
value: `oxlint --type-aware ${gitIgnore}.`,
|
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { loadYaml } from "@batijs/core";
|
|
3
|
+
import { YAMLMap, loadYaml } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/pnpm/dist/files/$pnpm-workspace.yaml.mjs
|
|
5
|
-
const dependenciesApproveBuild =
|
|
6
|
-
"@biomejs/biome",
|
|
7
|
-
"@sentry/cli",
|
|
8
|
-
"@tailwindcss/oxide",
|
|
9
|
-
"better-sqlite3",
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
]
|
|
5
|
+
const dependenciesApproveBuild = {
|
|
6
|
+
"@biomejs/biome": true,
|
|
7
|
+
"@sentry/cli": true,
|
|
8
|
+
"@tailwindcss/oxide": true,
|
|
9
|
+
"better-sqlite3": true,
|
|
10
|
+
esbuild: true,
|
|
11
|
+
sharp: true,
|
|
12
|
+
workerd: true,
|
|
13
|
+
tsx: ["esbuild"]
|
|
14
|
+
};
|
|
14
15
|
function intersect(a, b) {
|
|
15
16
|
return a.filter((x) => b.includes(x));
|
|
16
17
|
}
|
|
17
18
|
async function getPnpmWorkspace(props) {
|
|
18
|
-
const
|
|
19
|
+
const deps = [...Object.keys(props.packageJson.dependencies ?? {}), ...Object.keys(props.packageJson.devDependencies ?? {})];
|
|
20
|
+
const intersection = intersect(Object.keys(dependenciesApproveBuild), deps);
|
|
19
21
|
if (intersection.length === 0) return;
|
|
20
22
|
const pnpmWorkspace = await loadYaml(props, { fallbackEmpty: true });
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
let allowBuilds = pnpmWorkspace.get("allowBuilds", true);
|
|
24
|
+
if (!allowBuilds) {
|
|
25
|
+
allowBuilds = new YAMLMap();
|
|
26
|
+
pnpmWorkspace.set("allowBuilds", allowBuilds);
|
|
27
|
+
}
|
|
28
|
+
for (const pack of intersection) if (dependenciesApproveBuild[pack] === true) allowBuilds.set(pack, true);
|
|
29
|
+
else if (Array.isArray(dependenciesApproveBuild[pack])) for (const pack2 of dependenciesApproveBuild[pack]) allowBuilds.set(pack2, true);
|
|
23
30
|
return pnpmWorkspace;
|
|
24
31
|
}
|
|
25
32
|
//#endregion
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/prettier/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-C-4KYYPE.js").then((x) => x.default))).addDevDependencies(["prettier"]);
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
export { getPackageJson as default };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/prisma/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-Buap0IPy.js").then((x) => x.default))).setScript("prisma:studio", {
|
|
7
7
|
value: "prisma studio",
|
|
8
8
|
precedence: 1
|
|
9
9
|
}).setScript("prisma:generate", {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { loadPackageJson } from "@batijs/core";
|
|
4
4
|
//#region ../../boilerplates/react/dist/files/$package.json.mjs
|
|
5
5
|
async function getPackageJson(props) {
|
|
6
|
-
return (await loadPackageJson(props, await import("../../../../asset-package.json-
|
|
6
|
+
return (await loadPackageJson(props, await import("../../../../asset-package.json-DoCvkWCH.js").then((x) => x.default))).addDevDependencies([
|
|
7
7
|
"vite",
|
|
8
8
|
"@vitejs/plugin-react",
|
|
9
9
|
"@types/react",
|