@polardbx/pxbaas 0.0.0-stage → 0.1.0-beta.1
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/bin/pxbaas.js +13 -0
- package/dist/app/preflight.d.ts +38 -0
- package/dist/app/preflight.d.ts.map +1 -0
- package/dist/app/preflight.js +79 -0
- package/dist/app/preflight.js.map +1 -0
- package/dist/app/spec-lint.d.ts +45 -0
- package/dist/app/spec-lint.d.ts.map +1 -0
- package/dist/app/spec-lint.js +407 -0
- package/dist/app/spec-lint.js.map +1 -0
- package/dist/app/templates.d.ts +143 -0
- package/dist/app/templates.d.ts.map +1 -0
- package/dist/app/templates.js +151 -0
- package/dist/app/templates.js.map +1 -0
- package/dist/cli/root.d.ts +3 -0
- package/dist/cli/root.d.ts.map +1 -0
- package/dist/cli/root.js +69 -0
- package/dist/cli/root.js.map +1 -0
- package/dist/commands/app/index.d.ts +8 -0
- package/dist/commands/app/index.d.ts.map +1 -0
- package/dist/commands/app/index.js +1267 -0
- package/dist/commands/app/index.js.map +1 -0
- package/dist/commands/auth/index.d.ts +3 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +198 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/completion/index.d.ts +3 -0
- package/dist/commands/completion/index.d.ts.map +1 -0
- package/dist/commands/completion/index.js +10 -0
- package/dist/commands/completion/index.js.map +1 -0
- package/dist/commands/data/index.d.ts +3 -0
- package/dist/commands/data/index.d.ts.map +1 -0
- package/dist/commands/data/index.js +245 -0
- package/dist/commands/data/index.js.map +1 -0
- package/dist/commands/db/index.d.ts +14 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +355 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/doctor/index.d.ts +3 -0
- package/dist/commands/doctor/index.d.ts.map +1 -0
- package/dist/commands/doctor/index.js +305 -0
- package/dist/commands/doctor/index.js.map +1 -0
- package/dist/commands/functions/delete.d.ts +3 -0
- package/dist/commands/functions/delete.d.ts.map +1 -0
- package/dist/commands/functions/delete.js +55 -0
- package/dist/commands/functions/delete.js.map +1 -0
- package/dist/commands/functions/deploy.d.ts +3 -0
- package/dist/commands/functions/deploy.d.ts.map +1 -0
- package/dist/commands/functions/deploy.js +118 -0
- package/dist/commands/functions/deploy.js.map +1 -0
- package/dist/commands/functions/index.d.ts +3 -0
- package/dist/commands/functions/index.d.ts.map +1 -0
- package/dist/commands/functions/index.js +15 -0
- package/dist/commands/functions/index.js.map +1 -0
- package/dist/commands/functions/list.d.ts +6 -0
- package/dist/commands/functions/list.d.ts.map +1 -0
- package/dist/commands/functions/list.js +63 -0
- package/dist/commands/functions/list.js.map +1 -0
- package/dist/commands/functions/new.d.ts +3 -0
- package/dist/commands/functions/new.d.ts.map +1 -0
- package/dist/commands/functions/new.js +57 -0
- package/dist/commands/functions/new.js.map +1 -0
- package/dist/commands/gen/index.d.ts +3 -0
- package/dist/commands/gen/index.d.ts.map +1 -0
- package/dist/commands/gen/index.js +320 -0
- package/dist/commands/gen/index.js.map +1 -0
- package/dist/commands/instance/index.d.ts +8 -0
- package/dist/commands/instance/index.d.ts.map +1 -0
- package/dist/commands/instance/index.js +361 -0
- package/dist/commands/instance/index.js.map +1 -0
- package/dist/commands/login/index.d.ts +3 -0
- package/dist/commands/login/index.d.ts.map +1 -0
- package/dist/commands/login/index.js +185 -0
- package/dist/commands/login/index.js.map +1 -0
- package/dist/commands/login/login.d.ts +3 -0
- package/dist/commands/login/login.d.ts.map +1 -0
- package/dist/commands/login/login.js +185 -0
- package/dist/commands/login/login.js.map +1 -0
- package/dist/commands/logout/index.d.ts +3 -0
- package/dist/commands/logout/index.d.ts.map +1 -0
- package/dist/commands/logout/index.js +41 -0
- package/dist/commands/logout/index.js.map +1 -0
- package/dist/commands/profile/import-env.d.ts +13 -0
- package/dist/commands/profile/import-env.d.ts.map +1 -0
- package/dist/commands/profile/import-env.js +81 -0
- package/dist/commands/profile/import-env.js.map +1 -0
- package/dist/commands/profile/index.d.ts +3 -0
- package/dist/commands/profile/index.d.ts.map +1 -0
- package/dist/commands/profile/index.js +109 -0
- package/dist/commands/profile/index.js.map +1 -0
- package/dist/commands/rest/index.d.ts +3 -0
- package/dist/commands/rest/index.d.ts.map +1 -0
- package/dist/commands/rest/index.js +102 -0
- package/dist/commands/rest/index.js.map +1 -0
- package/dist/commands/skill/index.d.ts +11 -0
- package/dist/commands/skill/index.d.ts.map +1 -0
- package/dist/commands/skill/index.js +153 -0
- package/dist/commands/skill/index.js.map +1 -0
- package/dist/commands/status/index.d.ts +3 -0
- package/dist/commands/status/index.d.ts.map +1 -0
- package/dist/commands/status/index.js +59 -0
- package/dist/commands/status/index.js.map +1 -0
- package/dist/commands/storage/index.d.ts +3 -0
- package/dist/commands/storage/index.d.ts.map +1 -0
- package/dist/commands/storage/index.js +198 -0
- package/dist/commands/storage/index.js.map +1 -0
- package/dist/commands/whoami/index.d.ts +3 -0
- package/dist/commands/whoami/index.d.ts.map +1 -0
- package/dist/commands/whoami/index.js +82 -0
- package/dist/commands/whoami/index.js.map +1 -0
- package/dist/credentials/commit.d.ts +38 -0
- package/dist/credentials/commit.d.ts.map +1 -0
- package/dist/credentials/commit.js +57 -0
- package/dist/credentials/commit.js.map +1 -0
- package/dist/credentials/credential-store.d.ts +57 -0
- package/dist/credentials/credential-store.d.ts.map +1 -0
- package/dist/credentials/credential-store.js +180 -0
- package/dist/credentials/credential-store.js.map +1 -0
- package/dist/credentials/env-file.d.ts +44 -0
- package/dist/credentials/env-file.d.ts.map +1 -0
- package/dist/credentials/env-file.js +118 -0
- package/dist/credentials/env-file.js.map +1 -0
- package/dist/credentials/formatter.d.ts +39 -0
- package/dist/credentials/formatter.d.ts.map +1 -0
- package/dist/credentials/formatter.js +79 -0
- package/dist/credentials/formatter.js.map +1 -0
- package/dist/credentials/index.d.ts +11 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +11 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/jwt-introspect.d.ts +32 -0
- package/dist/credentials/jwt-introspect.d.ts.map +1 -0
- package/dist/credentials/jwt-introspect.js +64 -0
- package/dist/credentials/jwt-introspect.js.map +1 -0
- package/dist/credentials/masker.d.ts +20 -0
- package/dist/credentials/masker.d.ts.map +1 -0
- package/dist/credentials/masker.js +37 -0
- package/dist/credentials/masker.js.map +1 -0
- package/dist/credentials/profile.d.ts +83 -0
- package/dist/credentials/profile.d.ts.map +1 -0
- package/dist/credentials/profile.js +184 -0
- package/dist/credentials/profile.js.map +1 -0
- package/dist/credentials/tenant-guard.d.ts +16 -0
- package/dist/credentials/tenant-guard.d.ts.map +1 -0
- package/dist/credentials/tenant-guard.js +53 -0
- package/dist/credentials/tenant-guard.js.map +1 -0
- package/dist/credentials/tty-guard.d.ts +19 -0
- package/dist/credentials/tty-guard.d.ts.map +1 -0
- package/dist/credentials/tty-guard.js +47 -0
- package/dist/credentials/tty-guard.js.map +1 -0
- package/dist/db/apply-schema.d.ts +57 -0
- package/dist/db/apply-schema.d.ts.map +1 -0
- package/dist/db/apply-schema.js +192 -0
- package/dist/db/apply-schema.js.map +1 -0
- package/dist/db/sql-file.d.ts +49 -0
- package/dist/db/sql-file.d.ts.map +1 -0
- package/dist/db/sql-file.js +167 -0
- package/dist/db/sql-file.js.map +1 -0
- package/dist/instance/provision.d.ts +89 -0
- package/dist/instance/provision.d.ts.map +1 -0
- package/dist/instance/provision.js +139 -0
- package/dist/instance/provision.js.map +1 -0
- package/dist/instance/zero-store.d.ts +47 -0
- package/dist/instance/zero-store.d.ts.map +1 -0
- package/dist/instance/zero-store.js +91 -0
- package/dist/instance/zero-store.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +46 -0
- package/dist/main.js.map +1 -0
- package/dist/skill/assets.d.ts +38 -0
- package/dist/skill/assets.d.ts.map +1 -0
- package/dist/skill/assets.js +111 -0
- package/dist/skill/assets.js.map +1 -0
- package/dist/skill/hint.d.ts +39 -0
- package/dist/skill/hint.d.ts.map +1 -0
- package/dist/skill/hint.js +109 -0
- package/dist/skill/hint.js.map +1 -0
- package/dist/skill/hosts.d.ts +21 -0
- package/dist/skill/hosts.d.ts.map +1 -0
- package/dist/skill/hosts.js +38 -0
- package/dist/skill/hosts.js.map +1 -0
- package/dist/skill/installer.d.ts +88 -0
- package/dist/skill/installer.d.ts.map +1 -0
- package/dist/skill/installer.js +203 -0
- package/dist/skill/installer.js.map +1 -0
- package/dist/skill/ownership.d.ts +35 -0
- package/dist/skill/ownership.d.ts.map +1 -0
- package/dist/skill/ownership.js +52 -0
- package/dist/skill/ownership.js.map +1 -0
- package/package.json +63 -3
- package/skills/pxbaas-app-spec/SKILL.md +163 -0
- package/skills/pxbaas-app-spec/references/deploy-options.md +157 -0
- package/skills/pxbaas-app-spec/references/guardrails-pitfalls.md +89 -0
- package/skills/pxbaas-app-spec/references/runtime-contract.md +151 -0
- package/skills/pxbaas-app-spec/references/ssr-session.md +121 -0
- package/skills/pxbaas-app-spec/references/templates-examples.md +308 -0
- package/skills/pxbaas-cli/SKILL.md +168 -0
- package/skills/pxbaas-cli/references/api-reference.md +68 -0
- package/skills/pxbaas-cli/references/app-deploy.md +143 -0
- package/skills/pxbaas-cli/references/auth-and-credentials.md +88 -0
- package/skills/pxbaas-cli/references/data-postgrest.md +85 -0
- package/skills/pxbaas-cli/references/db-and-meta.md +85 -0
- package/skills/pxbaas-cli/references/edge-functions.md +71 -0
- package/skills/pxbaas-cli/references/multi-tenant-apps.md +107 -0
- package/skills/pxbaas-cli/references/provision.md +86 -0
- package/skills/pxbaas-cli/references/safety-and-two-phase.md +49 -0
- package/skills/pxbaas-cli/references/storage.md +61 -0
- package/skills/pxbaas-cli/references/troubleshooting.md +73 -0
- package/templates/webapp/api/index.ts +55 -0
- package/templates/webapp/csr-bff/README.md +81 -0
- package/templates/webapp/csr-bff/backend/index.ts +168 -0
- package/templates/webapp/csr-bff/db/schema.sql +69 -0
- package/templates/webapp/csr-bff/frontend/dist/admin.html +101 -0
- package/templates/webapp/csr-bff/frontend/dist/article.html +44 -0
- package/templates/webapp/csr-bff/frontend/dist/blog.js +206 -0
- package/templates/webapp/csr-bff/frontend/dist/blogger.html +53 -0
- package/templates/webapp/csr-bff/frontend/dist/index.html +70 -0
- package/templates/webapp/csr-bff/frontend/dist/login.html +56 -0
- package/templates/webapp/csr-bff/frontend/dist/profile.html +59 -0
- package/templates/webapp/csr-bff/frontend/dist/signup.html +78 -0
- package/templates/webapp/csr-bff/frontend/dist/style.css +27 -0
- package/templates/webapp/manifest.json +296 -0
- package/templates/webapp/mpa/about.html +29 -0
- package/templates/webapp/mpa/app.js +42 -0
- package/templates/webapp/mpa/index.html +42 -0
- package/templates/webapp/mpa/index.ts +60 -0
- package/templates/webapp/mpa/style.css +42 -0
- package/templates/webapp/react-vite/frontend/index.html +12 -0
- package/templates/webapp/react-vite/frontend/package-lock.json +1826 -0
- package/templates/webapp/react-vite/frontend/package.json +23 -0
- package/templates/webapp/react-vite/frontend/src/App.tsx +34 -0
- package/templates/webapp/react-vite/frontend/src/main.tsx +13 -0
- package/templates/webapp/react-vite/frontend/src/style.css +46 -0
- package/templates/webapp/react-vite/frontend/tsconfig.json +20 -0
- package/templates/webapp/react-vite/frontend/vite.config.ts +10 -0
- package/templates/webapp/react-vite-hono/backend/index.ts +21 -0
- package/templates/webapp/react-vite-hono/frontend/index.html +12 -0
- package/templates/webapp/react-vite-hono/frontend/package-lock.json +1826 -0
- package/templates/webapp/react-vite-hono/frontend/package.json +23 -0
- package/templates/webapp/react-vite-hono/frontend/src/App.tsx +47 -0
- package/templates/webapp/react-vite-hono/frontend/src/main.tsx +13 -0
- package/templates/webapp/react-vite-hono/frontend/src/style.css +66 -0
- package/templates/webapp/react-vite-hono/frontend/tsconfig.json +20 -0
- package/templates/webapp/react-vite-hono/frontend/vite.config.ts +10 -0
- package/templates/webapp/spa/index.ts +119 -0
- package/templates/webapp/ssr-auth/backend/index.ts +133 -0
- package/templates/webapp/ssr-auth/frontend/dist/index.html +15 -0
- package/templates/webapp/ssr-blog/README.md +111 -0
- package/templates/webapp/ssr-blog/backend/index.ts +764 -0
- package/templates/webapp/ssr-blog/db/schema.sql +71 -0
- package/templates/webapp/ssr-blog/frontend/dist/index.html +39 -0
- package/templates/webapp/ssr-frameworks/README.md +64 -0
- package/templates/webapp/ssr-frameworks/backend/index.ts +241 -0
- package/templates/webapp/ssr-frameworks/frontend/dist/index.html +31 -0
- package/templates/webapp/ssr-hono/backend/index.ts +92 -0
- package/templates/webapp/ssr-hono/frontend/dist/index.html +12 -0
- package/templates/webapp/ssr-shop/README.md +80 -0
- package/templates/webapp/ssr-shop/backend/index.ts +491 -0
- package/templates/webapp/ssr-shop/db/schema.sql +120 -0
- package/templates/webapp/ssr-shop/frontend/dist/index.html +12 -0
- package/templates/webapp/vanilla-static/frontend/app.js +6 -0
- package/templates/webapp/vanilla-static/frontend/index.html +19 -0
- package/templates/webapp/vanilla-static/frontend/style.css +43 -0
- package/README.md +0 -3
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webapp template resolution & scaffolding for `pxbaas app`.
|
|
3
|
+
*
|
|
4
|
+
* Templates ship as package files under `apps/baas/templates/webapp/` (route A,
|
|
5
|
+
* same as the bundled skill). We resolve the package root by walking up from this
|
|
6
|
+
* module until we find `templates/webapp/manifest.json`. The standalone single-file
|
|
7
|
+
* binary does not carry these assets; scaffolding then fails with a clear error.
|
|
8
|
+
*/
|
|
9
|
+
export type AppMode = "spa" | "api" | "mpa" | "webapp";
|
|
10
|
+
export type BackendFramework = "deno" | "hono";
|
|
11
|
+
export interface AppFrontend {
|
|
12
|
+
root: string;
|
|
13
|
+
routing: "files";
|
|
14
|
+
index: string;
|
|
15
|
+
/** null = static-only; "worker" = static-miss falls through to the worker (SSR). */
|
|
16
|
+
fallback: null | "worker";
|
|
17
|
+
}
|
|
18
|
+
export interface AppBackend {
|
|
19
|
+
entrypoint: string;
|
|
20
|
+
framework: BackendFramework;
|
|
21
|
+
pathMode: "strip-app-api-prefix";
|
|
22
|
+
verifyJwt: boolean;
|
|
23
|
+
secrets: string[];
|
|
24
|
+
egressPolicy: "deny";
|
|
25
|
+
/** 方案 C: session delivery. none | proxy-injected | browser-side. */
|
|
26
|
+
session?: "none" | "proxy-injected" | "browser-side";
|
|
27
|
+
/**
|
|
28
|
+
* Optional backend health probe path for `pxbaas app verify` (a mount-relative
|
|
29
|
+
* logical path such as "/api/health"). When absent, verify checks only the
|
|
30
|
+
* mount homepage and does NOT probe a fixed backend route.
|
|
31
|
+
*/
|
|
32
|
+
healthPath?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface WebappTemplate {
|
|
35
|
+
id: string;
|
|
36
|
+
description: string;
|
|
37
|
+
entrypoint: string;
|
|
38
|
+
/** Deploy mode written into app.json; defaults to the template id (spa/api). */
|
|
39
|
+
mode?: AppMode;
|
|
40
|
+
/** Multi-file templates list every file to scaffold; paths may be nested. */
|
|
41
|
+
files?: string[];
|
|
42
|
+
/** mpa: the static HTML pages served by path. */
|
|
43
|
+
pages?: string[];
|
|
44
|
+
/** mpa: the static assets (css/js/images) served by path. */
|
|
45
|
+
assets?: string[];
|
|
46
|
+
/** webapp: prebuilt frontend artifact contract. */
|
|
47
|
+
frontend?: AppFrontend;
|
|
48
|
+
/** webapp: optional Deno/Hono backend contract. */
|
|
49
|
+
backend?: AppBackend | null;
|
|
50
|
+
/** webapp SSR (DX-2): publish-probe logical path; required when frontend.fallback==="worker". */
|
|
51
|
+
ssrProbePath?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Machine-readable post-scaffold TODOs surfaced by `app new --json` (R2-11):
|
|
54
|
+
* e.g. database initialization for templates that ship db/schema.sql. The CLI
|
|
55
|
+
* never auto-runs DDL; these are reminders requiring explicit user action.
|
|
56
|
+
*/
|
|
57
|
+
nextSteps?: string[];
|
|
58
|
+
}
|
|
59
|
+
export interface AppManifest {
|
|
60
|
+
schemaVersion?: 1 | 2;
|
|
61
|
+
name: string;
|
|
62
|
+
slug: string;
|
|
63
|
+
template: string;
|
|
64
|
+
entrypoint: string;
|
|
65
|
+
verifyJwt: boolean;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
/** Legacy spa/api/mpa modes and the v2 webapp mode are both supported. */
|
|
68
|
+
mode?: AppMode;
|
|
69
|
+
/** mpa: static HTML pages that must exist and be served by path. */
|
|
70
|
+
pages?: string[];
|
|
71
|
+
/** mpa: static assets that must exist and be served by path. */
|
|
72
|
+
assets?: string[];
|
|
73
|
+
/** webapp: frontend staging layout. */
|
|
74
|
+
frontend?: AppFrontend;
|
|
75
|
+
/** webapp: backend runtime contract; null for static-only apps. */
|
|
76
|
+
backend?: AppBackend | null;
|
|
77
|
+
/** Optional SSR publish-probe path (DX-2): logical path returning the SSR page. */
|
|
78
|
+
ssrProbePath?: string;
|
|
79
|
+
/** Local deployment state used by lifecycle commands; ignored by the runtime. */
|
|
80
|
+
deployment?: {
|
|
81
|
+
mountId: string;
|
|
82
|
+
candidateFunctionSlug?: string;
|
|
83
|
+
generation: number;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** Replaced with the exact capability version only in the uploaded candidate. */
|
|
87
|
+
export declare const HONO_VERSION_PLACEHOLDER = "{{HONO_VERSION}}";
|
|
88
|
+
export declare class TemplatesNotFoundError extends Error {
|
|
89
|
+
constructor(message: string);
|
|
90
|
+
}
|
|
91
|
+
/** Walk up to find the package root holding templates/webapp/manifest.json. */
|
|
92
|
+
export declare function resolveTemplatesRoot(startDir?: string): string | null;
|
|
93
|
+
export declare function resolveTemplatesDir(startDir?: string): string;
|
|
94
|
+
export declare function listTemplates(startDir?: string): Promise<WebappTemplate[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Synchronous template-id list for CLI help text (command registration is sync).
|
|
97
|
+
* Returns [] when the bundled templates are unavailable (standalone binary), so
|
|
98
|
+
* callers can fall back to a generic hint instead of throwing at startup.
|
|
99
|
+
*/
|
|
100
|
+
export declare function listTemplateIdsSync(startDir?: string): string[];
|
|
101
|
+
/** Read a template's entrypoint and substitute {{APP_NAME}} / {{SLUG}}. */
|
|
102
|
+
export declare function renderTemplate(templateId: string, vars: {
|
|
103
|
+
appName: string;
|
|
104
|
+
slug: string;
|
|
105
|
+
}, startDir?: string): Promise<{
|
|
106
|
+
entrypoint: string;
|
|
107
|
+
source: string;
|
|
108
|
+
}>;
|
|
109
|
+
/**
|
|
110
|
+
* Resolve a template definition and render every file it declares.
|
|
111
|
+
*
|
|
112
|
+
* Single-file templates (spa/api) render just the entrypoint; multi-file
|
|
113
|
+
* templates (mpa) render each entry in `files` (falling back to the entrypoint).
|
|
114
|
+
* Returns the template definition plus the rendered `{ name, source }` list.
|
|
115
|
+
*/
|
|
116
|
+
export declare function renderTemplateFiles(templateId: string, vars: {
|
|
117
|
+
appName: string;
|
|
118
|
+
slug: string;
|
|
119
|
+
}, startDir?: string): Promise<{
|
|
120
|
+
template: WebappTemplate;
|
|
121
|
+
files: Array<{
|
|
122
|
+
name: string;
|
|
123
|
+
source: string;
|
|
124
|
+
}>;
|
|
125
|
+
}>;
|
|
126
|
+
/**
|
|
127
|
+
* Scaffold a new app under `<dir>/<name>/`: writes the rendered entrypoint and an
|
|
128
|
+
* `app.json` manifest. Refuses to overwrite an existing entrypoint unless forced.
|
|
129
|
+
*/
|
|
130
|
+
export declare function scaffoldApp(opts: {
|
|
131
|
+
name: string;
|
|
132
|
+
slug: string;
|
|
133
|
+
template: string;
|
|
134
|
+
dir: string;
|
|
135
|
+
force?: boolean;
|
|
136
|
+
startDir?: string;
|
|
137
|
+
}): Promise<{
|
|
138
|
+
appDir: string;
|
|
139
|
+
files: string[];
|
|
140
|
+
manifest: AppManifest;
|
|
141
|
+
nextSteps: string[];
|
|
142
|
+
}>;
|
|
143
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/app/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webapp template resolution & scaffolding for `pxbaas app`.
|
|
3
|
+
*
|
|
4
|
+
* Templates ship as package files under `apps/baas/templates/webapp/` (route A,
|
|
5
|
+
* same as the bundled skill). We resolve the package root by walking up from this
|
|
6
|
+
* module until we find `templates/webapp/manifest.json`. The standalone single-file
|
|
7
|
+
* binary does not carry these assets; scaffolding then fails with a clear error.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
10
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
/** Replaced with the exact capability version only in the uploaded candidate. */
|
|
14
|
+
export const HONO_VERSION_PLACEHOLDER = "{{HONO_VERSION}}";
|
|
15
|
+
export class TemplatesNotFoundError extends Error {
|
|
16
|
+
constructor(message) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = "TemplatesNotFoundError";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function moduleDir() {
|
|
22
|
+
return dirname(fileURLToPath(import.meta.url));
|
|
23
|
+
}
|
|
24
|
+
/** Walk up to find the package root holding templates/webapp/manifest.json. */
|
|
25
|
+
export function resolveTemplatesRoot(startDir = moduleDir()) {
|
|
26
|
+
let dir = startDir;
|
|
27
|
+
for (let i = 0; i < 8; i++) {
|
|
28
|
+
if (existsSync(join(dir, "templates", "webapp", "manifest.json")))
|
|
29
|
+
return dir;
|
|
30
|
+
const parent = dirname(dir);
|
|
31
|
+
if (parent === dir)
|
|
32
|
+
break;
|
|
33
|
+
dir = parent;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
export function resolveTemplatesDir(startDir = moduleDir()) {
|
|
38
|
+
const root = resolveTemplatesRoot(startDir);
|
|
39
|
+
if (!root) {
|
|
40
|
+
throw new TemplatesNotFoundError("Bundled webapp templates not found. `pxbaas app new` requires the npm or source install (the standalone single-file binary does not bundle templates).");
|
|
41
|
+
}
|
|
42
|
+
return join(root, "templates", "webapp");
|
|
43
|
+
}
|
|
44
|
+
export async function listTemplates(startDir) {
|
|
45
|
+
const dir = resolveTemplatesDir(startDir);
|
|
46
|
+
const manifest = JSON.parse(await readFile(join(dir, "manifest.json"), "utf8"));
|
|
47
|
+
return manifest.templates ?? [];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Synchronous template-id list for CLI help text (command registration is sync).
|
|
51
|
+
* Returns [] when the bundled templates are unavailable (standalone binary), so
|
|
52
|
+
* callers can fall back to a generic hint instead of throwing at startup.
|
|
53
|
+
*/
|
|
54
|
+
export function listTemplateIdsSync(startDir) {
|
|
55
|
+
try {
|
|
56
|
+
const dir = resolveTemplatesDir(startDir);
|
|
57
|
+
const manifest = JSON.parse(readFileSync(join(dir, "manifest.json"), "utf8"));
|
|
58
|
+
return (manifest.templates ?? []).map((t) => t.id);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Read a template's entrypoint and substitute {{APP_NAME}} / {{SLUG}}. */
|
|
65
|
+
export async function renderTemplate(templateId, vars, startDir) {
|
|
66
|
+
const dir = resolveTemplatesDir(startDir);
|
|
67
|
+
const templates = await listTemplates(startDir);
|
|
68
|
+
const tpl = templates.find((t) => t.id === templateId);
|
|
69
|
+
if (!tpl) {
|
|
70
|
+
throw new Error(`Unknown template '${templateId}'. Available: ${templates.map((t) => t.id).join(", ")}.`);
|
|
71
|
+
}
|
|
72
|
+
const raw = await readFile(join(dir, templateId, tpl.entrypoint), "utf8");
|
|
73
|
+
const source = substitute(raw, vars);
|
|
74
|
+
return { entrypoint: tpl.entrypoint, source };
|
|
75
|
+
}
|
|
76
|
+
function substitute(raw, vars) {
|
|
77
|
+
return raw
|
|
78
|
+
.replace(/\{\{APP_NAME\}\}/g, vars.appName)
|
|
79
|
+
.replace(/\{\{SLUG\}\}/g, vars.slug);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Resolve a template definition and render every file it declares.
|
|
83
|
+
*
|
|
84
|
+
* Single-file templates (spa/api) render just the entrypoint; multi-file
|
|
85
|
+
* templates (mpa) render each entry in `files` (falling back to the entrypoint).
|
|
86
|
+
* Returns the template definition plus the rendered `{ name, source }` list.
|
|
87
|
+
*/
|
|
88
|
+
export async function renderTemplateFiles(templateId, vars, startDir) {
|
|
89
|
+
const dir = resolveTemplatesDir(startDir);
|
|
90
|
+
const templates = await listTemplates(startDir);
|
|
91
|
+
const tpl = templates.find((t) => t.id === templateId);
|
|
92
|
+
if (!tpl) {
|
|
93
|
+
throw new Error(`Unknown template '${templateId}'. Available: ${templates.map((t) => t.id).join(", ")}.`);
|
|
94
|
+
}
|
|
95
|
+
const names = tpl.files && tpl.files.length > 0 ? tpl.files : [tpl.entrypoint];
|
|
96
|
+
const files = [];
|
|
97
|
+
for (const name of names) {
|
|
98
|
+
const raw = await readFile(join(dir, templateId, name), "utf8");
|
|
99
|
+
files.push({ name, source: substitute(raw, vars) });
|
|
100
|
+
}
|
|
101
|
+
return { template: tpl, files };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Scaffold a new app under `<dir>/<name>/`: writes the rendered entrypoint and an
|
|
105
|
+
* `app.json` manifest. Refuses to overwrite an existing entrypoint unless forced.
|
|
106
|
+
*/
|
|
107
|
+
export async function scaffoldApp(opts) {
|
|
108
|
+
const appDir = join(opts.dir, opts.name);
|
|
109
|
+
const { template, files } = await renderTemplateFiles(opts.template, { appName: opts.name, slug: opts.slug }, opts.startDir);
|
|
110
|
+
const entrypoint = template.entrypoint;
|
|
111
|
+
const entryPath = join(appDir, entrypoint);
|
|
112
|
+
const manifestPath = join(appDir, "app.json");
|
|
113
|
+
if ((existsSync(entryPath) || existsSync(manifestPath)) && !opts.force) {
|
|
114
|
+
throw new Error(`${appDir} already exists and contains an app scaffold. Pass --force to overwrite.`);
|
|
115
|
+
}
|
|
116
|
+
await mkdir(appDir, { recursive: true });
|
|
117
|
+
const written = [];
|
|
118
|
+
for (const f of files) {
|
|
119
|
+
const target = join(appDir, f.name);
|
|
120
|
+
await mkdir(dirname(target), { recursive: true });
|
|
121
|
+
await writeFile(target, f.source, "utf8");
|
|
122
|
+
written.push(f.name);
|
|
123
|
+
}
|
|
124
|
+
const mode = template.mode ?? template.id;
|
|
125
|
+
const manifest = {
|
|
126
|
+
...(mode === "webapp" ? { schemaVersion: 2 } : {}),
|
|
127
|
+
name: opts.name,
|
|
128
|
+
slug: opts.slug,
|
|
129
|
+
template: opts.template,
|
|
130
|
+
entrypoint,
|
|
131
|
+
verifyJwt: template.backend?.verifyJwt ?? false,
|
|
132
|
+
createdAt: new Date().toISOString(),
|
|
133
|
+
mode,
|
|
134
|
+
};
|
|
135
|
+
if (mode === "mpa") {
|
|
136
|
+
manifest.pages = template.pages ?? [];
|
|
137
|
+
manifest.assets = template.assets ?? [];
|
|
138
|
+
}
|
|
139
|
+
if (mode === "webapp") {
|
|
140
|
+
manifest.frontend = template.frontend;
|
|
141
|
+
manifest.backend = template.backend ?? null;
|
|
142
|
+
// Carry the SSR publish-probe path so fallback="worker" templates survive
|
|
143
|
+
// scaffold -> deploy (R2-01); spec-lint requires it and the platform probe
|
|
144
|
+
// contract depends on it.
|
|
145
|
+
if (template.ssrProbePath)
|
|
146
|
+
manifest.ssrProbePath = template.ssrProbePath;
|
|
147
|
+
}
|
|
148
|
+
await writeFile(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf8");
|
|
149
|
+
return { appDir, files: [...written, "app.json"], manifest, nextSteps: template.nextSteps ?? [] };
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/app/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/cli/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4CvD"}
|
package/dist/cli/root.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Import command registrations
|
|
2
|
+
import { registerLoginCommand } from '../commands/login/index.js';
|
|
3
|
+
import { registerLogoutCommand } from '../commands/logout/index.js';
|
|
4
|
+
import { registerWhoamiCommand } from '../commands/whoami/index.js';
|
|
5
|
+
import { registerStatusCommand } from '../commands/status/index.js';
|
|
6
|
+
import { registerDoctorCommand } from '../commands/doctor/index.js';
|
|
7
|
+
import { registerProfileCommand } from '../commands/profile/index.js';
|
|
8
|
+
import { registerDbCommands } from '../commands/db/index.js';
|
|
9
|
+
import { registerGenCommands } from '../commands/gen/index.js';
|
|
10
|
+
import { registerFunctionsCommands } from '../commands/functions/index.js';
|
|
11
|
+
import { registerStorageCommands } from '../commands/storage/index.js';
|
|
12
|
+
import { registerAuthCommands } from '../commands/auth/index.js';
|
|
13
|
+
import { registerDataCommands } from '../commands/data/index.js';
|
|
14
|
+
import { registerRestCommand } from '../commands/rest/index.js';
|
|
15
|
+
import { registerCompletionCommand } from '../commands/completion/index.js';
|
|
16
|
+
import { registerSkillCommands } from '../commands/skill/index.js';
|
|
17
|
+
import { registerInstanceCommands } from '../commands/instance/index.js';
|
|
18
|
+
import { registerAppCommands } from '../commands/app/index.js';
|
|
19
|
+
import { maybePrintSkillHint, maybePrintProvisionHint } from '../skill/hint.js';
|
|
20
|
+
/** Build the invoked command path (e.g. "db query") from an action command. */
|
|
21
|
+
function commandPath(program, actionCommand) {
|
|
22
|
+
const parts = [];
|
|
23
|
+
let c = actionCommand;
|
|
24
|
+
while (c && c !== program && c.name()) {
|
|
25
|
+
parts.unshift(c.name());
|
|
26
|
+
c = c.parent;
|
|
27
|
+
}
|
|
28
|
+
return parts.join(' ');
|
|
29
|
+
}
|
|
30
|
+
export function registerCommands(program) {
|
|
31
|
+
// First-run nudge: surface `pxbaas skill install` once when an Agent host is
|
|
32
|
+
// detected but the skill is not installed yet. Never blocks the command.
|
|
33
|
+
program.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
34
|
+
try {
|
|
35
|
+
const path = commandPath(program, actionCommand);
|
|
36
|
+
const json = program.opts().json;
|
|
37
|
+
await maybePrintProvisionHint({ json, commandPath: path });
|
|
38
|
+
await maybePrintSkillHint({ json, commandPath: path });
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// cosmetic only — ignore
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
// Phase 1 (M2): Onboarding & diagnostics
|
|
45
|
+
registerLoginCommand(program);
|
|
46
|
+
registerLogoutCommand(program);
|
|
47
|
+
registerWhoamiCommand(program);
|
|
48
|
+
registerStatusCommand(program);
|
|
49
|
+
registerDoctorCommand(program);
|
|
50
|
+
registerProfileCommand(program);
|
|
51
|
+
// Phase 1 (M3): Database & types
|
|
52
|
+
registerDbCommands(program);
|
|
53
|
+
registerGenCommands(program);
|
|
54
|
+
// Phase 2 (M4): Functions & storage
|
|
55
|
+
registerFunctionsCommands(program);
|
|
56
|
+
registerStorageCommands(program);
|
|
57
|
+
registerCompletionCommand(program);
|
|
58
|
+
// Phase 3 (M5): Auth users, data ops, REST passthrough
|
|
59
|
+
registerAuthCommands(program);
|
|
60
|
+
registerDataCommands(program);
|
|
61
|
+
registerRestCommand(program);
|
|
62
|
+
// Tooling: install the bundled Agent Skill into supported hosts (offline)
|
|
63
|
+
registerSkillCommands(program);
|
|
64
|
+
// Onboarding: claim/manage disposable Zero BaaS instances
|
|
65
|
+
registerInstanceCommands(program);
|
|
66
|
+
// Webapp demos: scaffold/deploy/verify on edge functions
|
|
67
|
+
registerAppCommands(program);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/cli/root.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* `pxbaas app` — scaffold, deploy, publish, verify, and share legacy Edge Function
|
|
4
|
+
* demos or schemaVersion 2 Webapps. Webapp deploys add capability gating, artifact
|
|
5
|
+
* linting, immutable candidates, and generation-CAS lifecycle operations.
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerAppCommands(program: Command): void;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0M1D"}
|