@percher/core 0.2.2 → 0.2.3
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/commands/billing.d.ts +43 -0
- package/dist/commands/billing.d.ts.map +1 -0
- package/dist/commands/billing.js +65 -0
- package/dist/commands/billing.js.map +1 -0
- package/dist/commands/data.d.ts +2 -0
- package/dist/commands/data.d.ts.map +1 -1
- package/dist/commands/data.js +1 -0
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/delete.d.ts +15 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +26 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/deploys.d.ts +45 -0
- package/dist/commands/deploys.d.ts.map +1 -0
- package/dist/commands/deploys.js +73 -0
- package/dist/commands/deploys.js.map +1 -0
- package/dist/commands/diagnose.d.ts +75 -0
- package/dist/commands/diagnose.d.ts.map +1 -0
- package/dist/commands/diagnose.js +102 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +58 -13
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/export.d.ts +39 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +107 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import-project.d.ts +21 -0
- package/dist/commands/import-project.d.ts.map +1 -0
- package/dist/commands/import-project.js +134 -0
- package/dist/commands/import-project.js.map +1 -0
- package/dist/commands/insights.d.ts +44 -0
- package/dist/commands/insights.d.ts.map +1 -0
- package/dist/commands/insights.js +54 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/mcp.d.ts +29 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +35 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/publish.d.ts +35 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +163 -9
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +8 -4
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/rename.d.ts +21 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +18 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/reset-superuser.d.ts +16 -0
- package/dist/commands/reset-superuser.d.ts.map +1 -0
- package/dist/commands/reset-superuser.js +17 -0
- package/dist/commands/reset-superuser.js.map +1 -0
- package/dist/error-classifier.d.ts +16 -0
- package/dist/error-classifier.d.ts.map +1 -1
- package/dist/error-classifier.js +135 -3
- package/dist/error-classifier.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/integrations.d.ts +24 -0
- package/dist/integrations.d.ts.map +1 -0
- package/dist/integrations.js +106 -0
- package/dist/integrations.js.map +1 -0
- package/dist/plans.d.ts +36 -0
- package/dist/plans.d.ts.map +1 -1
- package/dist/plans.js +76 -1
- package/dist/plans.js.map +1 -1
- package/dist/qr.d.ts +5 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +10 -0
- package/dist/qr.js.map +1 -0
- package/dist/templates.d.ts +24 -0
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +331 -0
- package/dist/templates.js.map +1 -1
- package/package.json +1 -1
package/dist/plans.js
CHANGED
|
@@ -5,7 +5,7 @@ export const PLAN_CATALOG = {
|
|
|
5
5
|
limits: {
|
|
6
6
|
apps: 2,
|
|
7
7
|
deploysPerMonth: 50,
|
|
8
|
-
deploysPerHour:
|
|
8
|
+
deploysPerHour: 12,
|
|
9
9
|
memory: "256mb",
|
|
10
10
|
cpu: 0.25,
|
|
11
11
|
pids: 128,
|
|
@@ -15,6 +15,15 @@ export const PLAN_CATALOG = {
|
|
|
15
15
|
autoSleep: true,
|
|
16
16
|
inactivityWarningDays: 30,
|
|
17
17
|
inactivityGraceDays: 7,
|
|
18
|
+
deployRetention: 5,
|
|
19
|
+
logRetentionDays: 1,
|
|
20
|
+
buildLogRetentionDays: 3,
|
|
21
|
+
cronJobs: 1,
|
|
22
|
+
storageMb: 500,
|
|
23
|
+
instances: 1,
|
|
24
|
+
slaUptime: null,
|
|
25
|
+
supportResponseTime: null,
|
|
26
|
+
kvStorageMb: 10,
|
|
18
27
|
},
|
|
19
28
|
},
|
|
20
29
|
starter: {
|
|
@@ -33,6 +42,15 @@ export const PLAN_CATALOG = {
|
|
|
33
42
|
autoSleep: false,
|
|
34
43
|
inactivityWarningDays: 60,
|
|
35
44
|
inactivityGraceDays: 7,
|
|
45
|
+
deployRetention: 15,
|
|
46
|
+
logRetentionDays: 7,
|
|
47
|
+
buildLogRetentionDays: 14,
|
|
48
|
+
cronJobs: 3,
|
|
49
|
+
storageMb: 5000,
|
|
50
|
+
instances: 1,
|
|
51
|
+
slaUptime: null,
|
|
52
|
+
supportResponseTime: "72h email",
|
|
53
|
+
kvStorageMb: 50,
|
|
36
54
|
},
|
|
37
55
|
},
|
|
38
56
|
maker: {
|
|
@@ -51,6 +69,15 @@ export const PLAN_CATALOG = {
|
|
|
51
69
|
autoSleep: false,
|
|
52
70
|
inactivityWarningDays: 60,
|
|
53
71
|
inactivityGraceDays: 7,
|
|
72
|
+
deployRetention: 30,
|
|
73
|
+
logRetentionDays: 30,
|
|
74
|
+
buildLogRetentionDays: 30,
|
|
75
|
+
cronJobs: 10,
|
|
76
|
+
storageMb: 50_000,
|
|
77
|
+
instances: 2,
|
|
78
|
+
slaUptime: "99.5%",
|
|
79
|
+
supportResponseTime: "24h email",
|
|
80
|
+
kvStorageMb: 200,
|
|
54
81
|
},
|
|
55
82
|
},
|
|
56
83
|
pro: {
|
|
@@ -69,6 +96,15 @@ export const PLAN_CATALOG = {
|
|
|
69
96
|
autoSleep: false,
|
|
70
97
|
inactivityWarningDays: 60,
|
|
71
98
|
inactivityGraceDays: 7,
|
|
99
|
+
deployRetention: 60,
|
|
100
|
+
logRetentionDays: 90,
|
|
101
|
+
buildLogRetentionDays: 90,
|
|
102
|
+
cronJobs: 25,
|
|
103
|
+
storageMb: 200_000,
|
|
104
|
+
instances: 4,
|
|
105
|
+
slaUptime: "99.9%",
|
|
106
|
+
supportResponseTime: "8h email + priority Discord",
|
|
107
|
+
kvStorageMb: 1000,
|
|
72
108
|
},
|
|
73
109
|
},
|
|
74
110
|
};
|
|
@@ -81,4 +117,43 @@ export function getPlanLimits(plan) {
|
|
|
81
117
|
export function getPlanInfo(plan) {
|
|
82
118
|
return PLAN_CATALOG[plan] ?? PLAN_CATALOG.free;
|
|
83
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Plan limits with admin-role bypass applied.
|
|
122
|
+
*
|
|
123
|
+
* Admin users (those whose email is in `PERCHER_ADMIN_EMAILS`) get
|
|
124
|
+
* pro-tier resource ceilings — memory, CPU, instances, storage —
|
|
125
|
+
* plus `Number.POSITIVE_INFINITY` for every cap that would otherwise
|
|
126
|
+
* cause platform-driven friction when they're operating the
|
|
127
|
+
* platform: app count, deploy rate, preview slots, custom domains,
|
|
128
|
+
* cron jobs, KV size, retention windows. Auto-sleep is forced off
|
|
129
|
+
* and inactivity windows are essentially infinite so admin apps
|
|
130
|
+
* never get hibernated or suspended underneath them.
|
|
131
|
+
*
|
|
132
|
+
* Pure function, no side effects — callers compute `isAdmin` from
|
|
133
|
+
* the user record (typically `isAdminEmail(user.email)`) and pass
|
|
134
|
+
* it in. Non-admin behavior is byte-identical to the previous
|
|
135
|
+
* `getPlanLimits` path.
|
|
136
|
+
*/
|
|
137
|
+
export function getEffectivePlanLimits(plan, isAdmin = false) {
|
|
138
|
+
if (!isAdmin)
|
|
139
|
+
return getPlanLimits(plan);
|
|
140
|
+
const pro = PLAN_CATALOG.pro.limits;
|
|
141
|
+
const INF = Number.POSITIVE_INFINITY;
|
|
142
|
+
return {
|
|
143
|
+
...pro,
|
|
144
|
+
apps: INF,
|
|
145
|
+
deploysPerMonth: "unlimited",
|
|
146
|
+
deploysPerHour: INF,
|
|
147
|
+
activePreviewsPerApp: INF,
|
|
148
|
+
customDomainsPerApp: INF,
|
|
149
|
+
autoSleep: false,
|
|
150
|
+
inactivityWarningDays: INF,
|
|
151
|
+
inactivityGraceDays: INF,
|
|
152
|
+
deployRetention: INF,
|
|
153
|
+
logRetentionDays: INF,
|
|
154
|
+
buildLogRetentionDays: INF,
|
|
155
|
+
cronJobs: INF,
|
|
156
|
+
kvStorageMb: INF,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
84
159
|
//# sourceMappingURL=plans.js.map
|
package/dist/plans.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
|
package/dist/qr.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Generate a QR code as UTF-8 text for terminal output */
|
|
2
|
+
export declare function qrToTerminal(url: string): Promise<string>;
|
|
3
|
+
/** Generate a QR code as a data URI (PNG) for web/MCP use */
|
|
4
|
+
export declare function qrToDataUri(url: string): Promise<string>;
|
|
5
|
+
//# sourceMappingURL=qr.d.ts.map
|
package/dist/qr.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../src/qr.ts"],"names":[],"mappings":"AAEA,2DAA2D;AAC3D,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/D;AAED,6DAA6D;AAC7D,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9D"}
|
package/dist/qr.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import QRCode from "qrcode";
|
|
2
|
+
/** Generate a QR code as UTF-8 text for terminal output */
|
|
3
|
+
export async function qrToTerminal(url) {
|
|
4
|
+
return QRCode.toString(url, { type: "utf8", margin: 1, scale: 1 });
|
|
5
|
+
}
|
|
6
|
+
/** Generate a QR code as a data URI (PNG) for web/MCP use */
|
|
7
|
+
export async function qrToDataUri(url) {
|
|
8
|
+
return QRCode.toDataURL(url, { margin: 1, scale: 4 });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=qr.js.map
|
package/dist/qr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.js","sourceRoot":"","sources":["../src/qr.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC"}
|
package/dist/templates.d.ts
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
|
+
export type TemplateCategory = "static" | "api" | "fullstack" | "ai" | "blog" | "portfolio";
|
|
2
|
+
export type TemplateRuntime = "node" | "bun" | "python" | "static" | "docker";
|
|
3
|
+
export type TemplateDataMode = "none" | "pocketbase" | "postgres" | "external";
|
|
4
|
+
export interface TemplateMetadata {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
category: TemplateCategory;
|
|
9
|
+
runtime: TemplateRuntime;
|
|
10
|
+
framework?: string;
|
|
11
|
+
dataMode: TemplateDataMode;
|
|
12
|
+
/** Rough cost tier at steady state — "free" fits the free plan. */
|
|
13
|
+
costTier: "free" | "starter" | "maker";
|
|
14
|
+
tags: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Template catalog — metadata for every bundled template.
|
|
18
|
+
* Add new templates here alongside the directory under packages/core/templates/.
|
|
19
|
+
*/
|
|
20
|
+
export declare const TEMPLATE_CATALOG: Record<string, TemplateMetadata>;
|
|
1
21
|
export declare function listTemplates(): string[];
|
|
22
|
+
/** Returns template metadata for all catalog entries that have a matching directory. */
|
|
23
|
+
export declare function listTemplateMetadata(): TemplateMetadata[];
|
|
24
|
+
/** Look up metadata for a single template, or null if missing. */
|
|
25
|
+
export declare function getTemplateMetadata(id: string): TemplateMetadata | null;
|
|
2
26
|
export interface ScaffoldInput {
|
|
3
27
|
template: string;
|
|
4
28
|
appName: string;
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAOA,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAKxC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAwDrE"}
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,WAAW,CAAC;AAC5F,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAsU7D,CAAC;AAEF,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAKxC;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAGzD;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAEvE;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAwDrE"}
|
package/dist/templates.js
CHANGED
|
@@ -2,12 +2,343 @@ import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSy
|
|
|
2
2
|
import { basename, join, normalize, relative, resolve } from "node:path";
|
|
3
3
|
const TEMPLATES_DIR = resolve(import.meta.dirname ?? __dirname, "../templates");
|
|
4
4
|
const PLACEHOLDER = "__APP_NAME__";
|
|
5
|
+
/**
|
|
6
|
+
* Template catalog — metadata for every bundled template.
|
|
7
|
+
* Add new templates here alongside the directory under packages/core/templates/.
|
|
8
|
+
*/
|
|
9
|
+
export const TEMPLATE_CATALOG = {
|
|
10
|
+
static: {
|
|
11
|
+
id: "static",
|
|
12
|
+
name: "Static site",
|
|
13
|
+
description: "Plain HTML/CSS/JS served by Caddy. No build, no server.",
|
|
14
|
+
category: "static",
|
|
15
|
+
runtime: "static",
|
|
16
|
+
dataMode: "none",
|
|
17
|
+
costTier: "free",
|
|
18
|
+
tags: ["html", "minimal", "landing-page"],
|
|
19
|
+
},
|
|
20
|
+
node: {
|
|
21
|
+
id: "node",
|
|
22
|
+
name: "Node.js",
|
|
23
|
+
description: "Vanilla Node.js HTTP server with bun runtime.",
|
|
24
|
+
category: "api",
|
|
25
|
+
runtime: "node",
|
|
26
|
+
dataMode: "none",
|
|
27
|
+
costTier: "free",
|
|
28
|
+
tags: ["node", "http", "backend"],
|
|
29
|
+
},
|
|
30
|
+
python: {
|
|
31
|
+
id: "python",
|
|
32
|
+
name: "Python",
|
|
33
|
+
description: "FastAPI server on Python runtime.",
|
|
34
|
+
category: "api",
|
|
35
|
+
runtime: "python",
|
|
36
|
+
framework: "fastapi",
|
|
37
|
+
dataMode: "none",
|
|
38
|
+
costTier: "free",
|
|
39
|
+
tags: ["python", "fastapi", "rest-api"],
|
|
40
|
+
},
|
|
41
|
+
nextjs: {
|
|
42
|
+
id: "nextjs",
|
|
43
|
+
name: "Next.js",
|
|
44
|
+
description: "Next.js App Router with server components. Add PocketBase later via percher.toml.",
|
|
45
|
+
category: "fullstack",
|
|
46
|
+
runtime: "node",
|
|
47
|
+
framework: "nextjs",
|
|
48
|
+
dataMode: "none",
|
|
49
|
+
costTier: "free",
|
|
50
|
+
tags: ["nextjs", "react", "fullstack", "ssr"],
|
|
51
|
+
},
|
|
52
|
+
hono: {
|
|
53
|
+
id: "hono",
|
|
54
|
+
name: "Hono",
|
|
55
|
+
description: "Lightweight TypeScript API server with Hono.",
|
|
56
|
+
category: "api",
|
|
57
|
+
runtime: "node",
|
|
58
|
+
framework: "hono",
|
|
59
|
+
dataMode: "none",
|
|
60
|
+
costTier: "free",
|
|
61
|
+
tags: ["hono", "typescript", "api"],
|
|
62
|
+
},
|
|
63
|
+
express: {
|
|
64
|
+
id: "express",
|
|
65
|
+
name: "Express",
|
|
66
|
+
description: "Classic Express.js REST API.",
|
|
67
|
+
category: "api",
|
|
68
|
+
runtime: "node",
|
|
69
|
+
framework: "express",
|
|
70
|
+
dataMode: "none",
|
|
71
|
+
costTier: "free",
|
|
72
|
+
tags: ["express", "rest-api", "node"],
|
|
73
|
+
},
|
|
74
|
+
fastify: {
|
|
75
|
+
id: "fastify",
|
|
76
|
+
name: "Fastify",
|
|
77
|
+
description: "High-performance Node.js API framework with built-in logging.",
|
|
78
|
+
category: "api",
|
|
79
|
+
runtime: "node",
|
|
80
|
+
framework: "fastify",
|
|
81
|
+
dataMode: "none",
|
|
82
|
+
costTier: "free",
|
|
83
|
+
tags: ["fastify", "rest-api", "node"],
|
|
84
|
+
},
|
|
85
|
+
bun: {
|
|
86
|
+
id: "bun",
|
|
87
|
+
name: "Bun HTTP",
|
|
88
|
+
description: "Zero-dependency HTTP server using Bun's built-in Bun.serve().",
|
|
89
|
+
category: "api",
|
|
90
|
+
runtime: "bun",
|
|
91
|
+
dataMode: "none",
|
|
92
|
+
costTier: "free",
|
|
93
|
+
tags: ["bun", "zero-deps", "minimal"],
|
|
94
|
+
},
|
|
95
|
+
flask: {
|
|
96
|
+
id: "flask",
|
|
97
|
+
name: "Flask",
|
|
98
|
+
description: "Minimal Python web framework with sensible defaults.",
|
|
99
|
+
category: "api",
|
|
100
|
+
runtime: "python",
|
|
101
|
+
framework: "flask",
|
|
102
|
+
dataMode: "none",
|
|
103
|
+
costTier: "free",
|
|
104
|
+
tags: ["flask", "python", "rest-api"],
|
|
105
|
+
},
|
|
106
|
+
sveltekit: {
|
|
107
|
+
id: "sveltekit",
|
|
108
|
+
name: "SvelteKit",
|
|
109
|
+
description: "SvelteKit with the Node adapter. Add PocketBase later via percher.toml.",
|
|
110
|
+
category: "fullstack",
|
|
111
|
+
runtime: "node",
|
|
112
|
+
framework: "sveltekit",
|
|
113
|
+
dataMode: "none",
|
|
114
|
+
costTier: "free",
|
|
115
|
+
tags: ["sveltekit", "svelte", "fullstack", "ssr"],
|
|
116
|
+
},
|
|
117
|
+
astro: {
|
|
118
|
+
id: "astro",
|
|
119
|
+
name: "Astro",
|
|
120
|
+
description: "Content-first static site with Astro. Build once, serve via Caddy.",
|
|
121
|
+
category: "static",
|
|
122
|
+
runtime: "static",
|
|
123
|
+
framework: "astro",
|
|
124
|
+
dataMode: "none",
|
|
125
|
+
costTier: "free",
|
|
126
|
+
tags: ["astro", "static", "content"],
|
|
127
|
+
},
|
|
128
|
+
remix: {
|
|
129
|
+
id: "remix",
|
|
130
|
+
name: "Remix",
|
|
131
|
+
description: "Remix fullstack with Vite + Node adapter. Nested routing, server loaders.",
|
|
132
|
+
category: "fullstack",
|
|
133
|
+
runtime: "node",
|
|
134
|
+
framework: "remix",
|
|
135
|
+
dataMode: "none",
|
|
136
|
+
costTier: "free",
|
|
137
|
+
tags: ["remix", "react", "fullstack", "ssr"],
|
|
138
|
+
},
|
|
139
|
+
nuxt: {
|
|
140
|
+
id: "nuxt",
|
|
141
|
+
name: "Nuxt 3",
|
|
142
|
+
description: "Nuxt 3 fullstack with Vue. Auto-imports, Nitro server, pages under pages/.",
|
|
143
|
+
category: "fullstack",
|
|
144
|
+
runtime: "node",
|
|
145
|
+
framework: "nuxt",
|
|
146
|
+
dataMode: "none",
|
|
147
|
+
costTier: "free",
|
|
148
|
+
tags: ["nuxt", "vue", "fullstack", "ssr"],
|
|
149
|
+
},
|
|
150
|
+
"vite-react": {
|
|
151
|
+
id: "vite-react",
|
|
152
|
+
name: "React (Vite SPA)",
|
|
153
|
+
description: "React SPA with Vite. Ships as static; add an API via percher.toml if needed.",
|
|
154
|
+
category: "static",
|
|
155
|
+
runtime: "static",
|
|
156
|
+
framework: "vite",
|
|
157
|
+
dataMode: "none",
|
|
158
|
+
costTier: "free",
|
|
159
|
+
tags: ["vite", "react", "spa"],
|
|
160
|
+
},
|
|
161
|
+
"vite-vue": {
|
|
162
|
+
id: "vite-vue",
|
|
163
|
+
name: "Vue (Vite SPA)",
|
|
164
|
+
description: "Vue 3 SPA with Vite. Ships as static; lightweight alternative to Nuxt.",
|
|
165
|
+
category: "static",
|
|
166
|
+
runtime: "static",
|
|
167
|
+
framework: "vite",
|
|
168
|
+
dataMode: "none",
|
|
169
|
+
costTier: "free",
|
|
170
|
+
tags: ["vite", "vue", "spa"],
|
|
171
|
+
},
|
|
172
|
+
preact: {
|
|
173
|
+
id: "preact",
|
|
174
|
+
name: "Preact",
|
|
175
|
+
description: "Preact SPA with Vite. React-compatible API at ~3kb runtime.",
|
|
176
|
+
category: "static",
|
|
177
|
+
runtime: "static",
|
|
178
|
+
framework: "preact",
|
|
179
|
+
dataMode: "none",
|
|
180
|
+
costTier: "free",
|
|
181
|
+
tags: ["preact", "vite", "spa", "minimal"],
|
|
182
|
+
},
|
|
183
|
+
solid: {
|
|
184
|
+
id: "solid",
|
|
185
|
+
name: "Solid",
|
|
186
|
+
description: "Solid.js SPA with Vite. Fine-grained reactivity, no virtual DOM.",
|
|
187
|
+
category: "static",
|
|
188
|
+
runtime: "static",
|
|
189
|
+
framework: "solid",
|
|
190
|
+
dataMode: "none",
|
|
191
|
+
costTier: "free",
|
|
192
|
+
tags: ["solid", "vite", "spa"],
|
|
193
|
+
},
|
|
194
|
+
elysia: {
|
|
195
|
+
id: "elysia",
|
|
196
|
+
name: "Elysia (Bun)",
|
|
197
|
+
description: "Elysia API server on the Bun runtime. End-to-end type safety, zero-config.",
|
|
198
|
+
category: "api",
|
|
199
|
+
runtime: "bun",
|
|
200
|
+
framework: "elysia",
|
|
201
|
+
dataMode: "none",
|
|
202
|
+
costTier: "free",
|
|
203
|
+
tags: ["elysia", "bun", "api", "typesafe"],
|
|
204
|
+
},
|
|
205
|
+
htmx: {
|
|
206
|
+
id: "htmx",
|
|
207
|
+
name: "HTMX + Express",
|
|
208
|
+
description: "Server-rendered HTML with HTMX fragments over Express. No build step, no JS framework.",
|
|
209
|
+
category: "fullstack",
|
|
210
|
+
runtime: "node",
|
|
211
|
+
framework: "express",
|
|
212
|
+
dataMode: "none",
|
|
213
|
+
costTier: "free",
|
|
214
|
+
tags: ["htmx", "express", "server-rendered", "no-build"],
|
|
215
|
+
},
|
|
216
|
+
django: {
|
|
217
|
+
id: "django",
|
|
218
|
+
name: "Django",
|
|
219
|
+
description: "Django fullstack with gunicorn. SQLite-backed by default; switch to Postgres via data.mode.",
|
|
220
|
+
category: "fullstack",
|
|
221
|
+
runtime: "python",
|
|
222
|
+
framework: "django",
|
|
223
|
+
dataMode: "none",
|
|
224
|
+
costTier: "free",
|
|
225
|
+
tags: ["django", "python", "fullstack"],
|
|
226
|
+
},
|
|
227
|
+
eleventy: {
|
|
228
|
+
id: "eleventy",
|
|
229
|
+
name: "Eleventy (11ty)",
|
|
230
|
+
description: "Markdown + Nunjucks static site generator. Builds to _site and serves via Caddy.",
|
|
231
|
+
category: "static",
|
|
232
|
+
runtime: "static",
|
|
233
|
+
framework: "eleventy",
|
|
234
|
+
dataMode: "none",
|
|
235
|
+
costTier: "free",
|
|
236
|
+
tags: ["eleventy", "11ty", "static", "markdown", "blog"],
|
|
237
|
+
},
|
|
238
|
+
hugo: {
|
|
239
|
+
id: "hugo",
|
|
240
|
+
name: "Hugo",
|
|
241
|
+
description: "Hugo static site generator (Go). Multi-stage Dockerfile builds with hugomods/hugo, serves via Caddy.",
|
|
242
|
+
category: "static",
|
|
243
|
+
runtime: "docker",
|
|
244
|
+
framework: "hugo",
|
|
245
|
+
dataMode: "none",
|
|
246
|
+
costTier: "free",
|
|
247
|
+
tags: ["hugo", "go", "static", "markdown", "blog"],
|
|
248
|
+
},
|
|
249
|
+
laravel: {
|
|
250
|
+
id: "laravel",
|
|
251
|
+
name: "Laravel (PHP)",
|
|
252
|
+
description: "Minimal PHP 8.3 starter with public/index.php routing. Upgrade to full Laravel with `composer create-project laravel/laravel .`.",
|
|
253
|
+
category: "fullstack",
|
|
254
|
+
runtime: "docker",
|
|
255
|
+
framework: "laravel",
|
|
256
|
+
dataMode: "none",
|
|
257
|
+
costTier: "free",
|
|
258
|
+
tags: ["laravel", "php", "fullstack"],
|
|
259
|
+
},
|
|
260
|
+
rails: {
|
|
261
|
+
id: "rails",
|
|
262
|
+
name: "Rails (Ruby)",
|
|
263
|
+
description: "Minimal Ruby 3.3 Rack app. Upgrade to full Rails by adding the rails gem and running `rails new . --force`.",
|
|
264
|
+
category: "fullstack",
|
|
265
|
+
runtime: "docker",
|
|
266
|
+
framework: "rails",
|
|
267
|
+
dataMode: "none",
|
|
268
|
+
costTier: "free",
|
|
269
|
+
tags: ["rails", "ruby", "rack", "fullstack"],
|
|
270
|
+
},
|
|
271
|
+
phoenix: {
|
|
272
|
+
id: "phoenix",
|
|
273
|
+
name: "Phoenix (Elixir)",
|
|
274
|
+
description: "Minimal Elixir Plug + Bandit app. Upgrade to full Phoenix by running `mix phx.new .` in the project directory.",
|
|
275
|
+
category: "fullstack",
|
|
276
|
+
runtime: "docker",
|
|
277
|
+
framework: "phoenix",
|
|
278
|
+
dataMode: "none",
|
|
279
|
+
costTier: "free",
|
|
280
|
+
tags: ["phoenix", "elixir", "plug", "fullstack"],
|
|
281
|
+
},
|
|
282
|
+
go: {
|
|
283
|
+
id: "go",
|
|
284
|
+
name: "Go",
|
|
285
|
+
description: "stdlib net/http server compiled to a static binary. Multi-stage build with distroless nonroot image.",
|
|
286
|
+
category: "api",
|
|
287
|
+
runtime: "docker",
|
|
288
|
+
framework: "go",
|
|
289
|
+
dataMode: "none",
|
|
290
|
+
costTier: "free",
|
|
291
|
+
tags: ["go", "golang", "api", "minimal"],
|
|
292
|
+
},
|
|
293
|
+
rust: {
|
|
294
|
+
id: "rust",
|
|
295
|
+
name: "Rust (axum)",
|
|
296
|
+
description: "Axum + Tokio on Rust 1.82. Multi-stage build on Alpine.",
|
|
297
|
+
category: "api",
|
|
298
|
+
runtime: "docker",
|
|
299
|
+
framework: "rust",
|
|
300
|
+
dataMode: "none",
|
|
301
|
+
costTier: "free",
|
|
302
|
+
tags: ["rust", "axum", "tokio", "api"],
|
|
303
|
+
},
|
|
304
|
+
dotnet: {
|
|
305
|
+
id: "dotnet",
|
|
306
|
+
name: ".NET 8 (ASP.NET Core)",
|
|
307
|
+
description: "Minimal ASP.NET Core Web API on .NET 8. Alpine SDK + ASP.NET runtime.",
|
|
308
|
+
category: "api",
|
|
309
|
+
runtime: "docker",
|
|
310
|
+
framework: "dotnet",
|
|
311
|
+
dataMode: "none",
|
|
312
|
+
costTier: "free",
|
|
313
|
+
tags: ["dotnet", "csharp", "aspnetcore", "api"],
|
|
314
|
+
},
|
|
315
|
+
java: {
|
|
316
|
+
id: "java",
|
|
317
|
+
name: "Java (JDK 21)",
|
|
318
|
+
description: "Plain com.sun.net.httpserver.HttpServer on Eclipse Temurin 21. No build tool — add Maven/Gradle when you need it.",
|
|
319
|
+
category: "api",
|
|
320
|
+
runtime: "docker",
|
|
321
|
+
framework: "java",
|
|
322
|
+
dataMode: "none",
|
|
323
|
+
costTier: "free",
|
|
324
|
+
tags: ["java", "jvm", "jdk", "minimal"],
|
|
325
|
+
},
|
|
326
|
+
};
|
|
5
327
|
export function listTemplates() {
|
|
6
328
|
return readdirSync(TEMPLATES_DIR).filter((name) => {
|
|
7
329
|
const full = join(TEMPLATES_DIR, name);
|
|
8
330
|
return statSync(full).isDirectory();
|
|
9
331
|
});
|
|
10
332
|
}
|
|
333
|
+
/** Returns template metadata for all catalog entries that have a matching directory. */
|
|
334
|
+
export function listTemplateMetadata() {
|
|
335
|
+
const available = new Set(listTemplates());
|
|
336
|
+
return Object.values(TEMPLATE_CATALOG).filter((m) => available.has(m.id));
|
|
337
|
+
}
|
|
338
|
+
/** Look up metadata for a single template, or null if missing. */
|
|
339
|
+
export function getTemplateMetadata(id) {
|
|
340
|
+
return TEMPLATE_CATALOG[id] ?? null;
|
|
341
|
+
}
|
|
11
342
|
export function scaffoldTemplate(input) {
|
|
12
343
|
const { template, appName, targetDir, force } = input;
|
|
13
344
|
const available = listTemplates();
|
package/dist/templates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,cAAc,CAAC,CAAC;AAEhF,MAAM,WAAW,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
|