covara 0.10.3 → 0.10.5
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/cli/templates/agents.d.ts +3 -0
- package/dist/cli/templates/agents.d.ts.map +1 -0
- package/dist/cli/templates/agents.js +129 -0
- package/dist/cli/templates/agents.js.map +1 -0
- package/dist/cli/templates/configs.js +1 -1
- package/dist/cli/templates/configs.js.map +1 -1
- package/dist/cli/templates/deploy.d.ts +1 -1
- package/dist/cli/templates/deploy.d.ts.map +1 -1
- package/dist/cli/templates/deploy.js +2 -7
- package/dist/cli/templates/deploy.js.map +1 -1
- package/dist/cli/templates/frontend.d.ts.map +1 -1
- package/dist/cli/templates/frontend.js +8 -2
- package/dist/cli/templates/frontend.js.map +1 -1
- package/dist/cli/templates/index.d.ts +1 -0
- package/dist/cli/templates/index.d.ts.map +1 -1
- package/dist/cli/templates/index.js +4 -1
- package/dist/cli/templates/index.js.map +1 -1
- package/dist/cli/templates/source.d.ts.map +1 -1
- package/dist/cli/templates/source.js +4 -3
- package/dist/cli/templates/source.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD,eAAO,MAAM,YAAY,GAAI,SAAS,eAAe,KAAG,MAqGvD,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
const DOCS_URL = "https://kahveciderin.github.io/covara/";
|
|
2
|
+
const LLMS_TXT_URL = "https://kahveciderin.github.io/covara/llms.txt";
|
|
3
|
+
const LLMS_FULL_TXT_URL = "https://kahveciderin.github.io/covara/llms-full.txt";
|
|
4
|
+
export const renderAgents = (options) => {
|
|
5
|
+
const react = options.frontend === "react";
|
|
6
|
+
const cloudflare = options.template === "cloudflare";
|
|
7
|
+
const entry = cloudflare ? "src/worker.ts" : "src/index.ts";
|
|
8
|
+
const runtime = cloudflare
|
|
9
|
+
? "Cloudflare Workers (via `wrangler`)"
|
|
10
|
+
: "Node (via `@hono/node-server`)";
|
|
11
|
+
const dbLine = options.db === "sqlite"
|
|
12
|
+
? cloudflare
|
|
13
|
+
? "SQLite on Cloudflare D1 (Drizzle `drizzle-orm/d1`)."
|
|
14
|
+
: "SQLite via `@libsql/client` — defaults to `./dev.db` (`DB_FILE_NAME`)."
|
|
15
|
+
: "PostgreSQL via `postgres` (`DATABASE_URL`).";
|
|
16
|
+
const structure = [
|
|
17
|
+
`- \`src/schema.ts\` — Drizzle table definitions. **This is the source of truth.** Adding or changing a column here changes the API.`,
|
|
18
|
+
`- \`${entry}\` — app entry. Builds the Covara app with \`createCovara(...)\` and mounts each table with \`.resource(table, { ... })\`.`,
|
|
19
|
+
react
|
|
20
|
+
? `- \`frontend/\` — the React SPA. \`frontend/src/generated/api-types.ts\` is generated from the running API — do not edit it by hand.`
|
|
21
|
+
: undefined,
|
|
22
|
+
`- \`drizzle.config.ts\` — Drizzle Kit config used by \`db:generate\` / \`db:push\`.`,
|
|
23
|
+
cloudflare
|
|
24
|
+
? `- \`wrangler.toml\` — Workers bindings (${options.db === "sqlite" ? "the `DB` D1 database, " : ""}the \`COVARA_KV\` Durable Object).`
|
|
25
|
+
: undefined,
|
|
26
|
+
]
|
|
27
|
+
.filter((line) => Boolean(line))
|
|
28
|
+
.join("\n");
|
|
29
|
+
const commands = renderCommands(options);
|
|
30
|
+
const devNote = cloudflare
|
|
31
|
+
? `\`npm run dev\` runs \`wrangler dev\`. Apply schema changes with \`npm run db:push\`${options.db === "sqlite" ? " (or generate + apply D1 migrations)" : ""}.`
|
|
32
|
+
: `\`npm run dev\` runs \`covara dev\` — a single dev loop that handles everything: it **live-reloads the server** on code changes${react ? ", **hot-reloads the frontend** (Vite HMR) and regenerates the typed client" : ""}, and watches \`src/schema.ts\` to keep the database in sync. **Additive schema changes are applied automatically** (tables are created on first run). Destructive changes — dropping or narrowing columns, etc. — are detected but *not* applied automatically: the loop prints the SQL it would run and waits for you to apply it deliberately with \`covara push --force\` (or \`npm run db:push\`).`;
|
|
33
|
+
const reactSection = react
|
|
34
|
+
? `
|
|
35
|
+
|
|
36
|
+
## Frontend
|
|
37
|
+
|
|
38
|
+
The React app lives in \`frontend/\`. It talks to the API with the Covara client (\`covara/client\`, hooks in \`covara/client/react\` such as \`useLiveList\`). Types come from \`npm run types\`, which introspects the running API into \`frontend/src/generated/api-types.ts\`. Regenerate them after changing \`src/schema.ts\` or resource config.`
|
|
39
|
+
: "";
|
|
40
|
+
return `# AGENTS.md
|
|
41
|
+
|
|
42
|
+
Guidance for AI coding agents working in this repository.
|
|
43
|
+
|
|
44
|
+
## What this is
|
|
45
|
+
|
|
46
|
+
\`${options.name}\` is a real-time resource API built with [Covara](https://github.com/kahveciderin/covara) on [Hono](https://hono.dev). Covara auto-generates REST + real-time (SSE) endpoints from [Drizzle ORM](https://orm.drizzle.team) table schemas, so you mostly describe data and access rules rather than write route handlers.
|
|
47
|
+
|
|
48
|
+
Runtime: ${runtime}.
|
|
49
|
+
Database: ${dbLine}
|
|
50
|
+
|
|
51
|
+
## Project layout
|
|
52
|
+
|
|
53
|
+
${structure}
|
|
54
|
+
|
|
55
|
+
## How it works
|
|
56
|
+
|
|
57
|
+
Every table mounted with \`.resource(table, config)\` automatically exposes (under \`/api/<resource>\`):
|
|
58
|
+
|
|
59
|
+
- \`GET /\`, \`GET /:id\` — list (filtering, cursor pagination, projections) and read.
|
|
60
|
+
- \`POST /\`, \`PATCH /:id\`, \`PUT /:id\`, \`DELETE /:id\` — write.
|
|
61
|
+
- \`GET /subscribe\` — real-time SSE subscription to the filtered set.
|
|
62
|
+
- \`POST /batch\`, \`GET /count\`, \`GET /aggregate\`, \`POST /rpc/:name\`, and more.
|
|
63
|
+
|
|
64
|
+
So the workflow for a new feature is usually: edit \`src/schema.ts\`, then add or adjust the \`.resource(...)\` call in \`${entry}\`. Reach for filters, relations, hooks, procedures, and auth scopes via resource config before writing custom routes.
|
|
65
|
+
|
|
66
|
+
Admin UI is served at \`/__covara/ui\`.
|
|
67
|
+
|
|
68
|
+
## Auth
|
|
69
|
+
|
|
70
|
+
The starter mounts the \`todos\` resource with **fully public CRUD** so it works out of the box. This is not safe for production — lock resources down with auth scopes (e.g. \`ownerOnly()\`, RSQL scopes) before deploying. See the auth docs below.
|
|
71
|
+
|
|
72
|
+
## Commands
|
|
73
|
+
|
|
74
|
+
\`\`\`bash
|
|
75
|
+
${commands}
|
|
76
|
+
\`\`\`
|
|
77
|
+
|
|
78
|
+
${devNote}${reactSection}
|
|
79
|
+
|
|
80
|
+
## Conventions
|
|
81
|
+
|
|
82
|
+
- TypeScript, strict. Prefer self-explanatory code over comments.
|
|
83
|
+
- The Drizzle schema drives everything — keep \`src/schema.ts\` the single source of truth and let Covara generate the surface area.
|
|
84
|
+
- Don't hand-edit generated files${react ? " (e.g. `frontend/src/generated/api-types.ts`)" : ""}.
|
|
85
|
+
|
|
86
|
+
## Documentation
|
|
87
|
+
|
|
88
|
+
When you need to know how a Covara feature works, consult the docs rather than guessing:
|
|
89
|
+
|
|
90
|
+
- Docs site: ${DOCS_URL}
|
|
91
|
+
- LLM-readable index (links to every page as Markdown): ${LLMS_TXT_URL}
|
|
92
|
+
- LLM-readable full text (all docs concatenated): ${LLMS_FULL_TXT_URL}
|
|
93
|
+
- Source & README: https://github.com/kahveciderin/covara
|
|
94
|
+
|
|
95
|
+
For agents, start from \`llms.txt\` to find the relevant page, then fetch that page's \`.md\`, or pull \`llms-full.txt\` for the complete corpus (around 500KB).
|
|
96
|
+
`;
|
|
97
|
+
};
|
|
98
|
+
const renderCommands = (options) => {
|
|
99
|
+
const react = options.frontend === "react";
|
|
100
|
+
const lines = [];
|
|
101
|
+
if (options.template === "node") {
|
|
102
|
+
lines.push(react
|
|
103
|
+
? "npm run dev # server + frontend HMR + schema sync (covara dev)"
|
|
104
|
+
: "npm run dev # server live-reload + schema sync (covara dev)");
|
|
105
|
+
lines.push("npm run build # build for production");
|
|
106
|
+
lines.push("npm start # run the production build");
|
|
107
|
+
lines.push("npm test # run tests (vitest)");
|
|
108
|
+
lines.push("npm run lint # typecheck");
|
|
109
|
+
if (react) {
|
|
110
|
+
lines.push("npm run types # regenerate frontend API types");
|
|
111
|
+
}
|
|
112
|
+
lines.push("npm run db:push # apply schema to the database");
|
|
113
|
+
lines.push("npm run db:generate # generate SQL migrations");
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
lines.push("npm run dev # wrangler dev");
|
|
117
|
+
if (react) {
|
|
118
|
+
lines.push("npm run dev:web # Vite dev server (HMR) for the frontend");
|
|
119
|
+
lines.push("npm run types # regenerate frontend API types");
|
|
120
|
+
}
|
|
121
|
+
lines.push("npm run deploy # deploy to Cloudflare Workers");
|
|
122
|
+
lines.push("npm run typecheck # typecheck");
|
|
123
|
+
lines.push("npm run cf-typegen # generate Worker binding types");
|
|
124
|
+
lines.push("npm run db:push # apply schema to the database");
|
|
125
|
+
lines.push("npm run db:generate # generate SQL migrations");
|
|
126
|
+
}
|
|
127
|
+
return lines.join("\n");
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/cli/templates/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -150,7 +150,7 @@ database_id = "REPLACE_WITH_YOUR_D1_DATABASE_ID"
|
|
|
150
150
|
};
|
|
151
151
|
export const renderGitignore = (options) => {
|
|
152
152
|
const lines = ["node_modules/", "dist/", ".env", ".env.*", "!.env.example"];
|
|
153
|
-
if (options.frontend === "react") {
|
|
153
|
+
if (options.frontend === "react" && options.template === "cloudflare") {
|
|
154
154
|
lines.push("public/");
|
|
155
155
|
}
|
|
156
156
|
if (options.db === "sqlite") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configs.js","sourceRoot":"","sources":["../../../src/cli/templates/configs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;CAmB5B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;CAkBlC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;CAUzC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;CAU3C,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;CAa3C,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG;;;;;;;;;;CAUjD,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAwB,EAAU,EAAE;IACtE,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;YAC5B,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,4BAA4B,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;QAC5B,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC,kCAAkC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAwB,EAAU,EAAE;IACrE,MAAM,MAAM,GACV,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC;;;;;;;;CAQP;QACK,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,MAAM,GAAG,WAAW,OAAO,CAAC,IAAI;;;;EAItC,MAAM;;;;;;;;;;;;;;;;;;;;CAoBP,CAAC;IAEA,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,MAAM;;;mBAGD,OAAO,CAAC,IAAI;;CAE9B,CAAC;IACA,CAAC;IAED,OAAO,GAAG,MAAM;;;;;;;CAOjB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAwB,EAAU,EAAE;IAClE,MAAM,KAAK,GAAG,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"configs.js","sourceRoot":"","sources":["../../../src/cli/templates/configs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;CAmB5B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;CAkBlC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;CAUzC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;CAU3C,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;CAa3C,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG;;;;;;;;;;CAUjD,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAwB,EAAU,EAAE;IACtE,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;YAC5B,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,4BAA4B,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;QAC5B,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC,kCAAkC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAwB,EAAU,EAAE;IACrE,MAAM,MAAM,GACV,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC;;;;;;;;CAQP;QACK,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,MAAM,GAAG,WAAW,OAAO,CAAC,IAAI;;;;EAItC,MAAM;;;;;;;;;;;;;;;;;;;;CAoBP,CAAC;IAEA,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,MAAM;;;mBAGD,OAAO,CAAC,IAAI;;CAE9B,CAAC;IACA,CAAC;IAED,OAAO,GAAG,MAAM;;;;;;;CAOjB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAwB,EAAU,EAAE;IAClE,MAAM,KAAK,GAAG,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAwB,EAAU,EAAE;IACnE,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO;;;;CAIZ,CAAC;QACE,CAAC;QACD,OAAO;uDAC4C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;CACrF,CAAC;IACA,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5B,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,wDAAwD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAC3E,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACjD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ScaffoldOptions } from "../options.js";
|
|
2
|
-
export declare const renderDockerfile: (
|
|
2
|
+
export declare const renderDockerfile: () => string;
|
|
3
3
|
export declare const renderDockerignore: () => string;
|
|
4
4
|
export declare const renderDockerCompose: (options: ScaffoldOptions) => string;
|
|
5
5
|
export declare const renderCiWorkflow: () => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,eAAO,MAAM,gBAAgB,QAAO,MAsCnC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAgBrC,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,SAAS,eAAe,KAAG,MA4E9D,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,MAuBnC,CAAC"}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
export const renderDockerfile = (
|
|
2
|
-
// The React variant's `npm run build` emits the SPA to ./public; the runtime
|
|
3
|
-
// stage must copy it so serveStatic can find it.
|
|
4
|
-
const copyPublic = options.frontend === "react"
|
|
5
|
-
? "COPY --from=build --chown=covara:covara /app/public ./public\n"
|
|
6
|
-
: "";
|
|
1
|
+
export const renderDockerfile = () => {
|
|
7
2
|
return `# syntax=docker/dockerfile:1
|
|
8
3
|
|
|
9
4
|
FROM node:22-slim AS build
|
|
@@ -35,7 +30,7 @@ RUN groupadd --system --gid 1001 covara && \\
|
|
|
35
30
|
COPY --chown=covara:covara package.json ./
|
|
36
31
|
COPY --from=deps --chown=covara:covara /app/node_modules ./node_modules
|
|
37
32
|
COPY --from=build --chown=covara:covara /app/dist ./dist
|
|
38
|
-
|
|
33
|
+
USER covara
|
|
39
34
|
EXPOSE 3000
|
|
40
35
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \\
|
|
41
36
|
CMD node -e "fetch('http://127.0.0.1:'+(process.env.PORT||3000)+'/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/cli/templates/deploy.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/cli/templates/deploy.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCR,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAC7C;;;;;;;;;;;;;;;CAeD,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAwB,EAAU,EAAE;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAa;QACvB,oBAAoB;QACpB,uCAAuC;KACxC,CAAC;IACF,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CACT,+DAA+D,MAAM,GAAG,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GACd,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,MAAM,SAAS,GACb,OAAO,CAAC,EAAE,KAAK,QAAQ;QACrB,CAAC,CAAC;;;CAGP;QACK,CAAC,CAAC;;;;;CAKP,CAAC;IAEA,MAAM,eAAe,GACnB,OAAO,CAAC,EAAE,KAAK,UAAU;QACvB,CAAC,CAAC;;;;;;;qBAOa,MAAM;;;;;;qDAM0B,MAAM;;;;CAI1D;QACK,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,OAAO,GAAa,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ;QAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,EAAE,KAAK,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEhE,OAAO;;;;;;;EAOP,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;EACjB,UAAU,GAAG,SAAS;;;;;;;;EAQtB,eAAe;;EAEf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;CACnB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuB7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAUrD,eAAO,MAAM,gBAAgB,GAAI,SAAS,eAAe,KAAG,
|
|
1
|
+
{"version":3,"file":"frontend.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAUrD,eAAO,MAAM,gBAAgB,GAAI,SAAS,eAAe,KAAG,MA0B3D,CAAC;AAEF,eAAO,MAAM,iBAAiB,+aAgB7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,SAAS,eAAe,KAAG,MAalE,CAAC;AAEF,eAAO,MAAM,aAAa,0QAUzB,CAAC;AAEF,eAAO,MAAM,YAAY,spFAiFxB,CAAC;AAEF,eAAO,MAAM,eAAe,m6CAmF3B,CAAC;AAIF,eAAO,MAAM,uBAAuB,wYAUnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,MAG1C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,eAAe,KACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAQtB,CAAC"}
|
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
const proxyTarget = (options) => options.template === "cloudflare"
|
|
5
5
|
? "http://localhost:8787"
|
|
6
6
|
: "http://localhost:3000";
|
|
7
|
-
export const renderViteConfig = (options) =>
|
|
7
|
+
export const renderViteConfig = (options) => {
|
|
8
|
+
// Node serves the SPA itself, so the build goes inside ./dist to keep the
|
|
9
|
+
// server artifact self-contained (ship dist/, the SPA travels with it).
|
|
10
|
+
// Cloudflare serves it via wrangler [assets], which points at a top-level dir.
|
|
11
|
+
const outDir = options.template === "cloudflare" ? "../public" : "../dist/public";
|
|
12
|
+
return `import { defineConfig } from "vite";
|
|
8
13
|
import react from "@vitejs/plugin-react";
|
|
9
14
|
|
|
10
15
|
// The node template embeds this Vite server in-process during \`covara dev\`
|
|
@@ -14,7 +19,7 @@ export default defineConfig({
|
|
|
14
19
|
root: __dirname,
|
|
15
20
|
plugins: [react()],
|
|
16
21
|
build: {
|
|
17
|
-
outDir: "
|
|
22
|
+
outDir: "${outDir}",
|
|
18
23
|
emptyOutDir: true,
|
|
19
24
|
},
|
|
20
25
|
server: {
|
|
@@ -25,6 +30,7 @@ export default defineConfig({
|
|
|
25
30
|
},
|
|
26
31
|
});
|
|
27
32
|
`;
|
|
33
|
+
};
|
|
28
34
|
export const FRONTEND_TSCONFIG = `{
|
|
29
35
|
"compilerOptions": {
|
|
30
36
|
"target": "ES2020",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../../src/cli/templates/frontend.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAU,EAAE,CACvD,OAAO,CAAC,QAAQ,KAAK,YAAY;IAC/B,CAAC,CAAC,uBAAuB;IACzB,CAAC,CAAC,uBAAuB,CAAC;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAwB,EAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../../src/cli/templates/frontend.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAU,EAAE,CACvD,OAAO,CAAC,QAAQ,KAAK,YAAY;IAC/B,CAAC,CAAC,uBAAuB;IACzB,CAAC,CAAC,uBAAuB,CAAC;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAwB,EAAU,EAAE;IACnE,0EAA0E;IAC1E,wEAAwE;IACxE,+EAA+E;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClF,OAAO;;;;;;;;;;eAUM,MAAM;;;;;iBAKJ,WAAW,CAAC,OAAO,CAAC;sBACf,WAAW,CAAC,OAAO,CAAC;;;;CAIzC,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;CAgBhC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAwB,EAAU,EAAE,CAC1E;;;;;aAKW,OAAO,CAAC,IAAI;;;;;;;CAOxB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;CAU5B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiF3B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmF9B,CAAC;AAEF,+EAA+E;AAC/E,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;CAUtC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAW,EAAE,CAAC;;;CAGpD,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAwB,EACA,EAAE,CAAC,CAAC;IAC5B,yBAAyB,EAAE,gBAAgB,CAAC,OAAO,CAAC;IACpD,wBAAwB,EAAE,iBAAiB;IAC3C,qBAAqB,EAAE,uBAAuB,CAAC,OAAO,CAAC;IACvD,uBAAuB,EAAE,aAAa;IACtC,sBAAsB,EAAE,YAAY;IACpC,yBAAyB,EAAE,eAAe;IAC1C,qCAAqC,EAAE,uBAAuB;CAC/D,CAAC,CAAC"}
|
|
@@ -4,6 +4,7 @@ export { NODE_TSCONFIG, CLOUDFLARE_TSCONFIG, renderDrizzleConfig, renderWrangler
|
|
|
4
4
|
export { renderPackageJson } from "./package-json.js";
|
|
5
5
|
export { renderSchema, renderNodeIndex, renderWorker } from "./source.js";
|
|
6
6
|
export { renderReadme } from "./readme.js";
|
|
7
|
+
export { renderAgents } from "./agents.js";
|
|
7
8
|
export { renderDockerfile, renderDockerignore, renderDockerCompose, renderCiWorkflow, } from "./deploy.js";
|
|
8
9
|
export { buildFrontendFiles } from "./frontend.js";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAqBrD,eAAO,MAAM,iBAAiB,GAC5B,SAAS,eAAe,KACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CA6BvB,CAAC;AAEF,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { renderPackageJson } from "./package-json.js";
|
|
|
2
2
|
import { NODE_TSCONFIG, CLOUDFLARE_TSCONFIG, renderDrizzleConfig, renderWranglerToml, renderGitignore, renderEnvExample, } from "./configs.js";
|
|
3
3
|
import { renderSchema, renderNodeIndex, renderWorker } from "./source.js";
|
|
4
4
|
import { renderReadme } from "./readme.js";
|
|
5
|
+
import { renderAgents } from "./agents.js";
|
|
5
6
|
import { renderDockerfile, renderDockerignore, renderDockerCompose, renderCiWorkflow, } from "./deploy.js";
|
|
6
7
|
import { buildFrontendFiles } from "./frontend.js";
|
|
7
8
|
export const buildProjectFiles = (options) => {
|
|
@@ -10,6 +11,7 @@ export const buildProjectFiles = (options) => {
|
|
|
10
11
|
"drizzle.config.ts": renderDrizzleConfig(options),
|
|
11
12
|
"src/schema.ts": renderSchema(options),
|
|
12
13
|
"README.md": renderReadme(options),
|
|
14
|
+
"AGENTS.md": renderAgents(options),
|
|
13
15
|
".gitignore": renderGitignore(options),
|
|
14
16
|
".env.example": renderEnvExample(options),
|
|
15
17
|
".github/workflows/ci.yml": renderCiWorkflow(),
|
|
@@ -17,7 +19,7 @@ export const buildProjectFiles = (options) => {
|
|
|
17
19
|
if (options.template === "node") {
|
|
18
20
|
files["tsconfig.json"] = NODE_TSCONFIG;
|
|
19
21
|
files["src/index.ts"] = renderNodeIndex(options);
|
|
20
|
-
files["Dockerfile"] = renderDockerfile(
|
|
22
|
+
files["Dockerfile"] = renderDockerfile();
|
|
21
23
|
files[".dockerignore"] = renderDockerignore();
|
|
22
24
|
files["docker-compose.yml"] = renderDockerCompose(options);
|
|
23
25
|
}
|
|
@@ -35,6 +37,7 @@ export { NODE_TSCONFIG, CLOUDFLARE_TSCONFIG, renderDrizzleConfig, renderWrangler
|
|
|
35
37
|
export { renderPackageJson } from "./package-json.js";
|
|
36
38
|
export { renderSchema, renderNodeIndex, renderWorker } from "./source.js";
|
|
37
39
|
export { renderReadme } from "./readme.js";
|
|
40
|
+
export { renderAgents } from "./agents.js";
|
|
38
41
|
export { renderDockerfile, renderDockerignore, renderDockerCompose, renderCiWorkflow, } from "./deploy.js";
|
|
39
42
|
export { buildFrontendFiles } from "./frontend.js";
|
|
40
43
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAwB,EACA,EAAE;IAC1B,MAAM,KAAK,GAA2B;QACpC,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAC1C,mBAAmB,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACjD,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC;QACtC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC;QAClC,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC;QACtC,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACzC,0BAA0B,EAAE,gBAAgB,EAAE;KAC/C,CAAC;IAEF,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,eAAe,CAAC,GAAG,aAAa,CAAC;QACvC,KAAK,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,KAAK,CAAC,YAAY,CAAC,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAwB,EACA,EAAE;IAC1B,MAAM,KAAK,GAA2B;QACpC,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAC1C,mBAAmB,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACjD,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC;QACtC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC;QAClC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC;QAClC,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC;QACtC,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACzC,0BAA0B,EAAE,gBAAgB,EAAE;KAC/C,CAAC;IAEF,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,eAAe,CAAC,GAAG,aAAa,CAAC;QACvC,KAAK,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,KAAK,CAAC,YAAY,CAAC,GAAG,gBAAgB,EAAE,CAAC;QACzC,KAAK,CAAC,eAAe,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC9C,KAAK,CAAC,oBAAoB,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,eAAe,CAAC,GAAG,mBAAmB,CAAC;QAC7C,KAAK,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,CAAC,eAAe,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,eAAO,MAAM,aAAa,scAYzB,CAAC;AAEF,eAAO,MAAM,eAAe,2XAU3B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,eAAe,KAAG,MACG,CAAC;AAE5D,eAAO,MAAM,iBAAiB,mkCA4B7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,4mCA8B/B,CAAC;
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,eAAO,MAAM,aAAa,scAYzB,CAAC;AAEF,eAAO,MAAM,eAAe,2XAU3B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,eAAe,KAAG,MACG,CAAC;AAE5D,eAAO,MAAM,iBAAiB,mkCA4B7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,4mCA8B/B,CAAC;AAoFF,eAAO,MAAM,eAAe,GAAI,SAAS,eAAe,KAAG,MAG1D,CAAC;AAEF,eAAO,MAAM,oBAAoB,opCA0ChC,CAAC;AAEF,eAAO,MAAM,0BAA0B,qxCA4CtC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,eAAe,KAAG,MACqB,CAAC"}
|
|
@@ -86,7 +86,7 @@ console.log(\`List: curl http://localhost:\${server.port}/api/todos\`);
|
|
|
86
86
|
// Node entry for the React-frontend variant: one process serves the SPA (with
|
|
87
87
|
// Vite HMR in dev) AND the API/admin. In dev it embeds Vite in middleware mode
|
|
88
88
|
// and routes /api + /__covara to the Hono app; in production it serves the
|
|
89
|
-
// built SPA from
|
|
89
|
+
// built SPA from dist/public with an SPA fallback.
|
|
90
90
|
const NODE_REACT_DB_SETUP_SQLITE = `import { createClient } from "@libsql/client";
|
|
91
91
|
import { drizzle } from "drizzle-orm/libsql";
|
|
92
92
|
import { createCovara } from "covara";
|
|
@@ -149,8 +149,9 @@ if (process.env.NODE_ENV === "development") {
|
|
|
149
149
|
console.log(\`Admin UI: http://localhost:\${port}/__covara/ui\`);
|
|
150
150
|
});
|
|
151
151
|
} else {
|
|
152
|
-
// Production: serve the built SPA (
|
|
153
|
-
|
|
152
|
+
// Production: serve the built SPA (bundled into dist/public by vite build)
|
|
153
|
+
// and fall through to the API.
|
|
154
|
+
const publicDir = path.join(here, "public");
|
|
154
155
|
app.use("*", serveStatic({ root: publicDir }));
|
|
155
156
|
const spa = serveStatic({ root: publicDir, path: "index.html" });
|
|
156
157
|
app.get("*", (c, next) => (isApi(c.req.path) ? next() : spa(c, next)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/cli/templates/source.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;CAY5B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;CAU9B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAU,EAAE,CAC/D,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;AAE5D,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BhC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BlC,CAAC;AAEF,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/cli/templates/source.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;CAY5B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;CAU9B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAU,EAAE,CAC/D,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;AAE5D,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BhC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BlC,CAAC;AAEF,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,mDAAmD;AACnD,MAAM,0BAA0B,GAAG;;;;;;;;4BAQP,CAAC;AAE7B,MAAM,4BAA4B,GAAG;;;;;;;;;;4BAUT,CAAC;AAE7B,MAAM,oBAAoB,GAAG,CAAC,OAAwB,EAAU,EAAE;IAChE,MAAM,OAAO,GACX,OAAO,CAAC,EAAE,KAAK,QAAQ;QACrB,CAAC,CAAC,0BAA0B;QAC5B,CAAC,CAAC,4BAA4B,CAAC;IAEnC,OAAO,GAAG,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+ClB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAwB,EAAU,EAAE;IAClE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CnC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CzC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAU,EAAE,CAC/D,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,0BAA0B,CAAC"}
|
package/package.json
CHANGED