@batijs/cli 0.0.653 → 0.0.655
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-Si0Lg6sw.js → asset-package.json-B9hqkASo.js} +1 -1
- package/dist/{asset-package.json-Cr9kL--9.js → asset-package.json-BTRRukgq.js} +1 -1
- package/dist/{asset-package.json-CK8Focys.js → asset-package.json-D0F4ITHn.js} +1 -1
- package/dist/{asset-package.json-DP7v-FYq.js → asset-package.json-DbnTcIM5.js} +1 -1
- package/dist/boilerplates/@batijs/auth0/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/authjs/bati.config.mjs +16 -2
- package/dist/boilerplates/@batijs/aws/bati.config.mjs +13 -1
- package/dist/boilerplates/@batijs/better-auth/bati.config.mjs +17 -2
- package/dist/boilerplates/@batijs/biome/bati.config.mjs +16 -2
- package/dist/boilerplates/@batijs/cloudflare/bati.config.mjs +15 -1
- package/dist/boilerplates/@batijs/compiled/bati.config.mjs +13 -1
- 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/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/d1-kysely/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/d1-sqlite/bati.config.mjs +18 -4
- package/dist/boilerplates/@batijs/docker-compose/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/dokploy/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/drizzle/bati.config.mjs +17 -1
- package/dist/boilerplates/@batijs/edgeone/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/elysia/bati.config.mjs +15 -2
- package/dist/boilerplates/@batijs/elysia/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/elysia/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/eslint/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/express/bati.config.mjs +15 -2
- package/dist/boilerplates/@batijs/express/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/express/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/fastify/bati.config.mjs +15 -2
- package/dist/boilerplates/@batijs/fastify/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/fastify/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/google-analytics/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/hono/bati.config.mjs +15 -2
- package/dist/boilerplates/@batijs/hono/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/hono/files/asset-package.json.mjs +1 -1
- package/dist/boilerplates/@batijs/kysely/bati.config.mjs +16 -2
- package/dist/boilerplates/@batijs/mantine/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/netlify/bati.config.mjs +18 -4
- package/dist/boilerplates/@batijs/oxlint/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/plausible.io/bati.config.mjs +18 -4
- package/dist/boilerplates/@batijs/pnpm/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/postgres/bati.config.mjs +13 -1
- package/dist/boilerplates/@batijs/prettier/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/prisma/bati.config.mjs +20 -2
- package/dist/boilerplates/@batijs/react/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/react-better-auth/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/react-sentry/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/sentry/bati.config.mjs +14 -1
- package/dist/boilerplates/@batijs/shadcn-ui/bati.config.mjs +19 -4
- package/dist/boilerplates/@batijs/shared/bati.config.mjs +94 -1
- package/dist/boilerplates/@batijs/shared-agents/bati.config.mjs +17 -0
- package/dist/boilerplates/@batijs/shared-agents/hooks/after.mjs +15 -0
- package/dist/boilerplates/@batijs/shared-agents/hooks/asset-boilerplates/shared-agents/agents-md.mjs +70 -0
- package/dist/boilerplates/@batijs/shared-agents/hooks/asset-boilerplates/shared-agents/compose.mjs +44 -0
- package/dist/boilerplates/@batijs/shared-agents/hooks/asset-packages/features/dist/features-CStxEDu3.mjs +690 -0
- package/dist/boilerplates/@batijs/shared-agents/hooks/asset-packages/features/dist/index.mjs +160 -0
- package/dist/boilerplates/@batijs/shared-db/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/shared-env/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/shared-server/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/shared-todo/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/solid/bati.config.mjs +18 -4
- package/dist/boilerplates/@batijs/solid-better-auth/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/solid-sentry/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/sqlite/bati.config.mjs +13 -1
- package/dist/boilerplates/@batijs/storybook/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/tailwindcss/bati.config.mjs +27 -2
- package/dist/boilerplates/@batijs/telefunc/bati.config.mjs +20 -4
- package/dist/boilerplates/@batijs/trpc/bati.config.mjs +19 -4
- package/dist/boilerplates/@batijs/ts-rest/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/universal-deploy/bati.config.mjs +21 -4
- package/dist/boilerplates/@batijs/vercel/bati.config.mjs +13 -1
- package/dist/boilerplates/@batijs/vue/bati.config.mjs +14 -2
- package/dist/boilerplates/@batijs/vue-better-auth/bati.config.mjs +1 -1
- package/dist/boilerplates/@batijs/vue-sentry/bati.config.mjs +1 -1
- package/dist/boilerplates/boilerplates.json +6 -0
- package/dist/index.js +6 -2
- package/package.json +5 -5
- package/dist/{asset-package.json-uf2g2h8M.js → asset-package.json-C5reKTg3.js} +1 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { features } from "./features-CStxEDu3.mjs";
|
|
2
|
+
//#region ../../packages/features/dist/index.js
|
|
3
|
+
const aiAgentFlags = features.filter((f) => f.category === "AI Agent").map((f) => f.flag);
|
|
4
|
+
/**
|
|
5
|
+
* Per-agent skill + instruction-file targets, verified against each agent's docs (SKILLS_PLAN.md §15):
|
|
6
|
+
* `.agents/skills` is the cross-tool standard (Codex/Gemini/Cursor/Copilot), only Claude needs
|
|
7
|
+
* `.claude/skills`; AGENTS.md is native everywhere except Claude and Gemini, which take an `@`-import.
|
|
8
|
+
*/
|
|
9
|
+
const aiAgents = {
|
|
10
|
+
claude: {
|
|
11
|
+
skillsDir: ".claude/skills",
|
|
12
|
+
instructionFile: "CLAUDE.md",
|
|
13
|
+
instructionImport: "@AGENTS.md"
|
|
14
|
+
},
|
|
15
|
+
codex: {
|
|
16
|
+
skillsDir: ".agents/skills",
|
|
17
|
+
instructionFile: "AGENTS.md",
|
|
18
|
+
instructionImport: null
|
|
19
|
+
},
|
|
20
|
+
gemini: {
|
|
21
|
+
skillsDir: ".agents/skills",
|
|
22
|
+
instructionFile: "GEMINI.md",
|
|
23
|
+
instructionImport: "@./AGENTS.md"
|
|
24
|
+
},
|
|
25
|
+
cursor: {
|
|
26
|
+
skillsDir: ".agents/skills",
|
|
27
|
+
instructionFile: "AGENTS.md",
|
|
28
|
+
instructionImport: null
|
|
29
|
+
},
|
|
30
|
+
copilot: {
|
|
31
|
+
skillsDir: ".agents/skills",
|
|
32
|
+
instructionFile: "AGENTS.md",
|
|
33
|
+
instructionImport: null
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Minimal set of skill directories covering the selected agents (SKILLS_PLAN.md §4) — at most two:
|
|
38
|
+
* `.agents/skills` for Codex/Gemini/Cursor/Copilot, `.claude/skills` for Claude.
|
|
39
|
+
*/
|
|
40
|
+
function resolveSkillDirs(selected) {
|
|
41
|
+
const sel = new Set(selected);
|
|
42
|
+
const dirs = /* @__PURE__ */ new Set();
|
|
43
|
+
for (const flag of aiAgentFlags) if (sel.has(flag)) dirs.add(aiAgents[flag].skillsDir);
|
|
44
|
+
return [...dirs];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Instruction files for the selected agents (SKILLS_PLAN.md §3): the canonical `AGENTS.md` (always,
|
|
48
|
+
* since the shims import it) plus each agent's file, deduped. Empty when no agent is selected.
|
|
49
|
+
*/
|
|
50
|
+
function resolveInstructionFiles(selected) {
|
|
51
|
+
const sel = new Set(selected);
|
|
52
|
+
if (!aiAgentFlags.some((flag) => sel.has(flag))) return [];
|
|
53
|
+
const byPath = new Map([["AGENTS.md", {
|
|
54
|
+
path: "AGENTS.md",
|
|
55
|
+
import: null
|
|
56
|
+
}]]);
|
|
57
|
+
for (const flag of aiAgentFlags) {
|
|
58
|
+
if (!sel.has(flag)) continue;
|
|
59
|
+
const { instructionFile, instructionImport } = aiAgents[flag];
|
|
60
|
+
byPath.set(instructionFile, {
|
|
61
|
+
path: instructionFile,
|
|
62
|
+
import: instructionImport
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return [...byPath.values()];
|
|
66
|
+
}
|
|
67
|
+
const categories = [
|
|
68
|
+
{
|
|
69
|
+
label: "Frontend Framework",
|
|
70
|
+
group: "Frontend",
|
|
71
|
+
description: `Flexible, robust, community-driven, and fast Vite-based frontend framework.`,
|
|
72
|
+
required: true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
label: "UI Framework",
|
|
76
|
+
group: "Frontend",
|
|
77
|
+
description: `It’s recommended to choose a frontend lib to kickstart a new Vike project,
|
|
78
|
+
as they each come with a wide range of integrations. You can at any time eject and take control over integration code
|
|
79
|
+
so that it doesn’t get in your way.`,
|
|
80
|
+
required: true
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
label: "CSS",
|
|
84
|
+
group: "Frontend",
|
|
85
|
+
description: `These CSS libraries are deeply integrated with UI frameworks.
|
|
86
|
+
They showcase their respective recommended usage and how they integrate with Vite and Vike.`
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
label: "UI Component Libraries",
|
|
90
|
+
group: "Frontend",
|
|
91
|
+
description: `These UI Component Libraries are deeply integrated with UI frameworks.
|
|
92
|
+
They showcase their respective recommended usage and how they integrate with Vite and Vike.`
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
label: "Auth",
|
|
96
|
+
group: "Data",
|
|
97
|
+
description: `Ready to use self-hosted or cloud-based Auth solutions.
|
|
98
|
+
Requires to also select a Server of your choosing.`
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
label: "Data fetching",
|
|
102
|
+
group: "Data",
|
|
103
|
+
description: `Data fetching libraries to help you interact with your backend.
|
|
104
|
+
Selecting one of those usually requires you to also choose a Server.`
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
label: "Server",
|
|
108
|
+
group: "Data",
|
|
109
|
+
description: `Mostly required by other integrations such as Auth or RPC,
|
|
110
|
+
it's recommended to only install a Server if you really need to, as Vike doesn't require one to operate.`
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
label: "Database",
|
|
114
|
+
group: "Data",
|
|
115
|
+
description: `The database your app talks to. SQLite runs embedded (and powers Cloudflare D1);
|
|
116
|
+
PostgreSQL targets a Postgres server. Selected on its own you get a thin client; pair it with an ORM or query builder below.`
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
label: "ORM / Query builder",
|
|
120
|
+
group: "Data",
|
|
121
|
+
description: `Type-safe data access on top of your database. Requires choosing a Database above.`
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
label: "Hosting",
|
|
125
|
+
group: "Deployment",
|
|
126
|
+
description: `Quickly host your Vike project with a Serverless or VPS (coming soon) solution.`,
|
|
127
|
+
required: true
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
label: "AI Agent",
|
|
131
|
+
multiple: true,
|
|
132
|
+
group: "Utilities",
|
|
133
|
+
description: `Generate agent skills and instruction files (SKILL.md, AGENTS.md, CLAUDE.md, …) tailored to your
|
|
134
|
+
selected stack, so AI coding agents understand this project's conventions out of the box. Select every agent you use.`
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
label: "Linter",
|
|
138
|
+
multiple: true,
|
|
139
|
+
group: "Utilities",
|
|
140
|
+
description: `Well known linting and formatting tools, pre-configured to match their recommended usage,
|
|
141
|
+
tailored for Vike.`
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
label: "Analytics",
|
|
145
|
+
group: "Utilities",
|
|
146
|
+
description: `Keep track of your website traffic with these ready-to-get-started Analytics solutions.`
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
label: "Error tracking",
|
|
150
|
+
group: "Utilities",
|
|
151
|
+
description: `Coming soon: Error Tracking solution for frontend and backend`
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
label: "Tooling",
|
|
155
|
+
group: "Utilities",
|
|
156
|
+
description: `Additional tooling to improve your developer experience.`
|
|
157
|
+
}
|
|
158
|
+
];
|
|
159
|
+
//#endregion
|
|
160
|
+
export { categories, resolveInstructionFiles, resolveSkillDirs };
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -3,12 +3,26 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), 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("solid");
|
|
13
|
+
},
|
|
14
|
+
skills() {
|
|
15
|
+
return [{
|
|
16
|
+
name: "ui-framework",
|
|
17
|
+
description: "Solid conventions in this app. Use when writing components or handling SSR/hydration.",
|
|
18
|
+
body: `This app renders with SolidJS via \`vike-solid\`. Components are \`.tsx\` files built around Solid signals.
|
|
19
|
+
|
|
20
|
+
- **SSR-safe:** components render on the server first — run browser-only code inside \`onMount\` and guard \`window\`/\`document\` access to avoid hydration mismatches.
|
|
21
|
+
- **Page data:** read it with \`useData()\` (see the \`vike-data-fetching\` skill).
|
|
22
|
+
|
|
23
|
+
See https://vike.dev/solid.`
|
|
24
|
+
}];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
13
27
|
//#endregion
|
|
14
28
|
export { bati_config_default as default };
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -17,6 +17,18 @@ var bati_config_default = t({
|
|
|
17
17
|
type: "command",
|
|
18
18
|
step: `${packageManager} sqlite:migrate`
|
|
19
19
|
}];
|
|
20
|
+
},
|
|
21
|
+
skills(meta) {
|
|
22
|
+
return [{
|
|
23
|
+
name: "database",
|
|
24
|
+
description: "How to work with the database in this app (raw SQLite / better-sqlite3). Use when querying, adding a table, or migrating.",
|
|
25
|
+
body: `Raw SQLite via better-sqlite3 (no ORM). The client is in \`database/sqlite/db.ts\`, schema in \`database/sqlite/schema/\`, queries in \`database/sqlite/queries/\`.
|
|
26
|
+
|
|
27
|
+
- **Add a table:** add it to \`database/sqlite/schema/\` and migrate with \`${meta.BATI.pmRun} sqlite:migrate\`.
|
|
28
|
+
- **Write queries:** add functions in \`database/sqlite/queries/\` using the \`db\` client; on the server it's available as \`context.db\`.
|
|
29
|
+
|
|
30
|
+
See https://github.com/WiseLibs/better-sqlite3.`
|
|
31
|
+
}];
|
|
20
32
|
}
|
|
21
33
|
});
|
|
22
34
|
//#endregion
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -17,7 +17,19 @@ var bati_config_default = t({
|
|
|
17
17
|
step: `${packageManager} storybook`
|
|
18
18
|
}];
|
|
19
19
|
},
|
|
20
|
-
knip: { ignoreDependencies: ["playwright", "@vitest/coverage-v8"] }
|
|
20
|
+
knip: { ignoreDependencies: ["playwright", "@vitest/coverage-v8"] },
|
|
21
|
+
skills(meta) {
|
|
22
|
+
return [{
|
|
23
|
+
name: "storybook",
|
|
24
|
+
description: "How to use Storybook in this app. Use when adding a story or running Storybook.",
|
|
25
|
+
body: `Storybook is configured for component development.
|
|
26
|
+
|
|
27
|
+
- **Run it:** \`${meta.BATI.pmRun} storybook\`.
|
|
28
|
+
- **Add a story:** create a \`*.stories.${meta.BATI.has("vue") ? "ts" : "tsx"}\` file next to a component, exporting a default \`meta\` and named story exports.
|
|
29
|
+
|
|
30
|
+
See https://storybook.js.org/docs.`
|
|
31
|
+
}];
|
|
32
|
+
}
|
|
21
33
|
});
|
|
22
34
|
//#endregion
|
|
23
35
|
export { bati_config_default as default };
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -11,7 +11,32 @@ var bati_config_default = t({
|
|
|
11
11
|
if(meta) {
|
|
12
12
|
return meta.BATI.has("tailwindcss");
|
|
13
13
|
},
|
|
14
|
-
knip: { ignoreDependencies: ["tailwindcss", "daisyui"] }
|
|
14
|
+
knip: { ignoreDependencies: ["tailwindcss", "daisyui"] },
|
|
15
|
+
skills(meta) {
|
|
16
|
+
const daisy = meta.BATI.has("daisyui");
|
|
17
|
+
const skills = [{
|
|
18
|
+
name: "styling",
|
|
19
|
+
description: "How styling works in this app (Tailwind CSS v4). Use when styling a component, adding global styles, or customizing the theme.",
|
|
20
|
+
body: `Tailwind CSS v4 — CSS-first config (no \`tailwind.config.js\`). The global stylesheet is \`pages/tailwind.css\` (\`@import "tailwindcss"\`), imported from \`pages/+Layout.*\`. The \`@tailwindcss/vite\` plugin is already configured.
|
|
21
|
+
|
|
22
|
+
- **Style components:** use utility classes directly in markup (\`class\` / \`className\`).
|
|
23
|
+
- **Theme + base styles:** customize via \`@theme\` and \`@layer base { ... @apply ... }\` in \`pages/tailwind.css\`.
|
|
24
|
+
${daisy ? "- **daisyUI** component classes are available via the Tailwind plugin (see the `daisyui` skill).\n" : ""}- **New global CSS:** add it to \`pages/tailwind.css\`.
|
|
25
|
+
|
|
26
|
+
See https://tailwindcss.com/docs.`
|
|
27
|
+
}];
|
|
28
|
+
if (daisy) skills.push({
|
|
29
|
+
name: "daisyui",
|
|
30
|
+
description: "How to use daisyUI in this app. Use when adding daisyUI components or themes.",
|
|
31
|
+
body: `daisyUI is enabled as a Tailwind plugin (\`@plugin "daisyui"\` in \`pages/tailwind.css\`).
|
|
32
|
+
|
|
33
|
+
- **Use a component:** apply daisyUI class names in markup (e.g. \`class="btn btn-primary"\`, \`card\`, \`modal\`).
|
|
34
|
+
- **Themes:** configure themes via the plugin in \`pages/tailwind.css\`; switch with \`data-theme\` on an element.
|
|
35
|
+
|
|
36
|
+
See https://daisyui.com.`
|
|
37
|
+
});
|
|
38
|
+
return skills;
|
|
39
|
+
}
|
|
15
40
|
});
|
|
16
41
|
//#endregion
|
|
17
42
|
export { bati_config_default as default };
|
|
@@ -3,12 +3,28 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), 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("telefunc");
|
|
13
|
+
},
|
|
14
|
+
skills() {
|
|
15
|
+
return [{
|
|
16
|
+
name: "telefunc",
|
|
17
|
+
description: "How to add an RPC function with Telefunc in this app. Use when adding a data mutation or server function callable from the client.",
|
|
18
|
+
body: `Telefunc exposes server functions ("telefunctions") that the client imports and calls directly — no manual API route.
|
|
19
|
+
|
|
20
|
+
- **Add one:** create a \`*.telefunc.ts\` file (colocate it with the component, e.g. \`pages/todo/TodoList.telefunc.ts\`) and \`export async function\` your telefunctions.
|
|
21
|
+
- **Call it:** \`import { onNewTodo } from "./TodoList.telefunc"\` in a component and \`await onNewTodo({ ... })\`. Telefunc replaces the import with a network call.
|
|
22
|
+
- **Server context:** \`import { getContext } from "telefunc"\` to read request context (e.g. \`context.db\`, the user session).
|
|
23
|
+
- **Guard inputs** with \`shield\` (https://telefunc.com/shield); the route is wired in \`server/telefunc-handler.ts\`.
|
|
24
|
+
|
|
25
|
+
See https://telefunc.com.`
|
|
26
|
+
}];
|
|
27
|
+
}
|
|
28
|
+
});
|
|
13
29
|
//#endregion
|
|
14
30
|
export { bati_config_default as default };
|
|
@@ -3,12 +3,27 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), 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("trpc");
|
|
13
|
+
},
|
|
14
|
+
skills() {
|
|
15
|
+
return [{
|
|
16
|
+
name: "trpc",
|
|
17
|
+
description: "How to add a tRPC procedure in this app. Use when adding a typesafe query or mutation, or wiring a new endpoint into the router.",
|
|
18
|
+
body: `The router lives in \`trpc/server.ts\` (\`appRouter\`); the typed client is \`trpc/client.ts\`. The route is mounted at \`/api/trpc\`.
|
|
19
|
+
|
|
20
|
+
- **Add a procedure:** add a key to \`appRouter\` in \`trpc/server.ts\` using \`publicProcedure.query(...)\` or \`.mutation(...)\`; add \`.input(...)\` to validate. The exported \`AppRouter\` type flows to the client automatically.
|
|
21
|
+
- **Call it:** import the \`trpc\` client from \`trpc/client.ts\`, then \`await trpc.<name>.query(...)\` / \`.mutate(...)\`.
|
|
22
|
+
- **Server context** (e.g. \`ctx.db\`) is configured via \`initTRPC.context<...>()\` in \`trpc/server.ts\`.
|
|
23
|
+
|
|
24
|
+
See https://trpc.io/docs.`
|
|
25
|
+
}];
|
|
26
|
+
}
|
|
27
|
+
});
|
|
13
28
|
//#endregion
|
|
14
29
|
export { bati_config_default as default };
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -11,7 +11,19 @@ var bati_config_default = t({
|
|
|
11
11
|
if(meta) {
|
|
12
12
|
return meta.BATI.has("ts-rest");
|
|
13
13
|
},
|
|
14
|
-
knip: { ignoreDependencies: ["zod"] }
|
|
14
|
+
knip: { ignoreDependencies: ["zod"] },
|
|
15
|
+
skills() {
|
|
16
|
+
return [{
|
|
17
|
+
name: "ts-rest",
|
|
18
|
+
description: "How to add an endpoint with ts-rest in this app. Use when adding a typed REST route shared between client and server.",
|
|
19
|
+
body: `ts-rest is contract-first. The contract is in \`ts-rest/contract.ts\` (\`c.router({...}, { pathPrefix: "/api" })\`); the typed client is \`ts-rest/client.ts\`; the server implements it in \`server/ts-rest-handler.ts\`.
|
|
20
|
+
|
|
21
|
+
- **Add an endpoint:** add an entry to the contract (\`method\`, \`path\`, \`body\`/\`responses\` via \`c.type<...>()\`), then implement it in \`server/ts-rest-handler.ts\`.
|
|
22
|
+
- **Call it:** from a component, use the client in \`ts-rest/client.ts\` — \`await client.<name>({ ... })\` — fully typed from the contract.
|
|
23
|
+
|
|
24
|
+
See https://ts-rest.com/docs.`
|
|
25
|
+
}];
|
|
26
|
+
}
|
|
15
27
|
});
|
|
16
28
|
//#endregion
|
|
17
29
|
export { bati_config_default as default };
|
|
@@ -3,12 +3,29 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), 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.hasUD;
|
|
13
|
+
},
|
|
14
|
+
skills(meta) {
|
|
15
|
+
if (!meta.BATI.has("hosting-diy")) return [];
|
|
16
|
+
const run = meta.BATI.pmRun;
|
|
17
|
+
return [{
|
|
18
|
+
name: "deploy",
|
|
19
|
+
description: "How to build and self-host this app. Use when deploying to your own server or VPS.",
|
|
20
|
+
body: `Self-hosted (no managed platform); ${meta.BATI.hasServer ? "runs as a Node server (the `prod` script boots it)" : "served as static assets"}.
|
|
21
|
+
|
|
22
|
+
- **Build:** \`${run} build\`.
|
|
23
|
+
- **Run in production:** \`${run} prod\`.
|
|
24
|
+
- **Env vars:** provide them in the environment (or \`.env\`) on your server.
|
|
25
|
+
|
|
26
|
+
See \`TODO.md\`.`
|
|
27
|
+
}];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
13
30
|
//#endregion
|
|
14
31
|
export { bati_config_default as default };
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -14,6 +14,18 @@ var bati_config_default = t({
|
|
|
14
14
|
knip: {
|
|
15
15
|
ignore: [".vercel/**"],
|
|
16
16
|
ignoreDependencies: ["vite-plugin-vercel"]
|
|
17
|
+
},
|
|
18
|
+
skills(meta) {
|
|
19
|
+
return [{
|
|
20
|
+
name: "deploy",
|
|
21
|
+
description: "How to deploy this app to Vercel. Use when deploying or managing environment variables.",
|
|
22
|
+
body: `Deploys to Vercel (build via \`vite-plugin-vercel\`, output in \`.vercel/output\`).
|
|
23
|
+
|
|
24
|
+
- **Deploy:** push to a Vercel-connected Git repo, or run the \`vercel\` CLI. \`${meta.BATI.pmRun} build\` produces the output locally.
|
|
25
|
+
- **Env vars:** set them in the Vercel dashboard (Project → Settings → Environment Variables); locally they're in \`.env\`.
|
|
26
|
+
|
|
27
|
+
See https://vercel.com/docs and \`TODO.md\`.`
|
|
28
|
+
}];
|
|
17
29
|
}
|
|
18
30
|
});
|
|
19
31
|
//#endregion
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|
|
@@ -11,7 +11,19 @@ var bati_config_default = t({
|
|
|
11
11
|
if(meta) {
|
|
12
12
|
return meta.BATI.has("vue");
|
|
13
13
|
},
|
|
14
|
-
knip: { ignoreDependencies: ["@vue/.+"] }
|
|
14
|
+
knip: { ignoreDependencies: ["@vue/.+"] },
|
|
15
|
+
skills() {
|
|
16
|
+
return [{
|
|
17
|
+
name: "ui-framework",
|
|
18
|
+
description: "Vue conventions in this app. Use when writing components or handling SSR/hydration.",
|
|
19
|
+
body: `This app renders with Vue via \`vike-vue\`. Components are Single-File Components (\`.vue\`).
|
|
20
|
+
|
|
21
|
+
- **SSR-safe:** components render on the server first — run browser-only code inside \`onMounted\` and guard \`window\`/\`document\` access to avoid hydration mismatches.
|
|
22
|
+
- **Page data:** read it with \`useData()\` (see the \`vike-data-fetching\` skill).
|
|
23
|
+
|
|
24
|
+
See https://vike.dev/vue.`
|
|
25
|
+
}];
|
|
26
|
+
}
|
|
15
27
|
});
|
|
16
28
|
//#endregion
|
|
17
29
|
export { bati_config_default as default };
|
|
@@ -3,7 +3,7 @@ function e(e, t) {
|
|
|
3
3
|
if (!e) throw Error(t);
|
|
4
4
|
}
|
|
5
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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), 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`)), `env` in t && e(typeof t.env == `function`, `'env' must be a function of meta`), `deploy` in t && e(Array.isArray(t.deploy) || typeof t.deploy == `function`, `'deploy' must be an array or a function of meta`), `skills` in t && e(typeof t.skills == `function`, `'skills' must be a function of meta`), t;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region bati.config.ts
|