create-prenta 1.3.0
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/CHANGELOG.md +964 -0
- package/LICENSE +21 -0
- package/assets/prisma/migrations/0001_init/migration.sql +941 -0
- package/assets/prisma/migrations/0002_media_usage_field_path/migration.sql +11 -0
- package/assets/prisma/migrations/0003_ai_crawler_hits/migration.sql +21 -0
- package/assets/prisma/migrations/0004_drop_search_vector/migration.sql +4 -0
- package/assets/prisma/migrations/0005_script_tag_delivery_controls/migration.sql +8 -0
- package/assets/prisma/migrations/0006_totp_last_step/migration.sql +4 -0
- package/assets/prisma/migrations/0007_workflow_fk_drop_dead_enums/migration.sql +27 -0
- package/assets/prisma/migrations/0008_form_delivery_attempts/migration.sql +29 -0
- package/assets/prisma/migrations/0009_webhook_secret_rotation/migration.sql +6 -0
- package/assets/prisma/migrations/0010_media_is_decorative/migration.sql +3 -0
- package/assets/prisma/migrations/0011_media_content_hash/migration.sql +4 -0
- package/assets/prisma/migrations/0012_rename_to_prenta/migration.sql +89 -0
- package/assets/prisma/migrations/migration_lock.toml +3 -0
- package/assets/prisma/schema.prisma +989 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/options.d.ts +160 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +206 -0
- package/dist/options.js.map +1 -0
- package/dist/scaffold.d.ts +45 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +2163 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/templates/admin-page.ts.template.d.ts +24 -0
- package/dist/templates/admin-page.ts.template.d.ts.map +1 -0
- package/dist/templates/admin-page.ts.template.js +145 -0
- package/dist/templates/admin-page.ts.template.js.map +1 -0
- package/dist/templates/astro-site.d.ts +36 -0
- package/dist/templates/astro-site.d.ts.map +1 -0
- package/dist/templates/astro-site.js +918 -0
- package/dist/templates/astro-site.js.map +1 -0
- package/dist/templates/login-page.ts.template.d.ts +14 -0
- package/dist/templates/login-page.ts.template.d.ts.map +1 -0
- package/dist/templates/login-page.ts.template.js +143 -0
- package/dist/templates/login-page.ts.template.js.map +1 -0
- package/dist/templates/marketing-custom.d.ts +56 -0
- package/dist/templates/marketing-custom.d.ts.map +1 -0
- package/dist/templates/marketing-custom.js +814 -0
- package/dist/templates/marketing-custom.js.map +1 -0
- package/dist/templates/prenta.config.ts.template.d.ts +3 -0
- package/dist/templates/prenta.config.ts.template.d.ts.map +1 -0
- package/dist/templates/prenta.config.ts.template.js +253 -0
- package/dist/templates/prenta.config.ts.template.js.map +1 -0
- package/package.json +58 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import prompts from 'prompts';
|
|
8
|
+
import { scaffoldProject } from './scaffold.js';
|
|
9
|
+
import { AUTH_CHOICES, DATABASE_CHOICES, DEFAULT_PRODUCTION_PLUGINS, DEFAULTS, FRAMEWORK_CHOICES, PLATFORM_CHOICES, PLUGIN_CHOICES, TEMPLATE_CHOICES, parseFlagOverrides, resolveNonInteractiveOptions, } from './options.js';
|
|
10
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
async function readPackageVersion() {
|
|
12
|
+
try {
|
|
13
|
+
const pkgPath = path.resolve(__dirname, '..', 'package.json');
|
|
14
|
+
const raw = await readFile(pkgPath, 'utf-8');
|
|
15
|
+
return JSON.parse(raw).version;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return '0.0.0';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const PLUGINS = PLUGIN_CHOICES;
|
|
22
|
+
const PLATFORMS = PLATFORM_CHOICES;
|
|
23
|
+
const DATABASES = DATABASE_CHOICES;
|
|
24
|
+
const AUTH_PROVIDERS = AUTH_CHOICES;
|
|
25
|
+
const TEMPLATES = TEMPLATE_CHOICES;
|
|
26
|
+
const FRAMEWORKS = FRAMEWORK_CHOICES;
|
|
27
|
+
async function run() {
|
|
28
|
+
const program = new Command();
|
|
29
|
+
const version = await readPackageVersion();
|
|
30
|
+
program
|
|
31
|
+
.name('create-prenta')
|
|
32
|
+
.description('Scaffold a new Prenta CMS project')
|
|
33
|
+
.version(version)
|
|
34
|
+
.argument('[project-name]', 'Name for the new project')
|
|
35
|
+
.option('-y, --yes', 'Skip all prompts; use flags + defaults (non-interactive)')
|
|
36
|
+
.option('--admin-path <path>', 'Admin panel path (e.g. /admin)')
|
|
37
|
+
.option('--login-path <path>', 'Login/setup path (e.g. /securelogin); set equal to --admin-path for inline login')
|
|
38
|
+
.option('--template <name>', `Starter template (${TEMPLATES.map((t) => t.value).join('|')})`)
|
|
39
|
+
.option('--framework <name>', `Public delivery (${FRAMEWORKS.map((f) => f.value).join('|')}; default astro-split)`)
|
|
40
|
+
.option('--plugins <list>', 'Comma-separated plugins, or "all" / "none"')
|
|
41
|
+
.option('--platform <name>', `Deployment platform (${PLATFORMS.map((p) => p.value).join('|')})`)
|
|
42
|
+
.option('--database <name>', `Database provider (${DATABASES.map((d) => d.value).join('|')})`)
|
|
43
|
+
.option('--auth <list>', `Comma-separated auth providers (${AUTH_PROVIDERS.map((a) => a.value).join(',')})`)
|
|
44
|
+
.action(async (nameArg, opts) => {
|
|
45
|
+
console.log();
|
|
46
|
+
console.log(chalk.bold(' Prenta CMS'));
|
|
47
|
+
console.log(chalk.dim(' The developer-first headless CMS'));
|
|
48
|
+
console.log();
|
|
49
|
+
const flags = {
|
|
50
|
+
yes: opts.yes === true,
|
|
51
|
+
adminPath: opts.adminPath,
|
|
52
|
+
loginPath: opts.loginPath,
|
|
53
|
+
plugins: opts.plugins,
|
|
54
|
+
platform: opts.platform,
|
|
55
|
+
database: opts.database,
|
|
56
|
+
auth: opts.auth,
|
|
57
|
+
template: opts.template,
|
|
58
|
+
framework: opts.framework,
|
|
59
|
+
};
|
|
60
|
+
// Non-interactive when the agent asked for it (`--yes`) or when there is no
|
|
61
|
+
// TTY to prompt against (CI / piped stdin). Prompting in those contexts
|
|
62
|
+
// would hang, which is the exact failure D1 fixes.
|
|
63
|
+
const nonInteractive = flags.yes === true || !process.stdin.isTTY;
|
|
64
|
+
if (nonInteractive) {
|
|
65
|
+
let options;
|
|
66
|
+
try {
|
|
67
|
+
options = resolveNonInteractiveOptions(nameArg, flags);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
await scaffoldProject(options);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Interactive: validate any flags up front (fail fast, before prompting),
|
|
77
|
+
// then prompt only for the choices the caller did not pre-supply.
|
|
78
|
+
let overrides;
|
|
79
|
+
try {
|
|
80
|
+
overrides = parseFlagOverrides(flags);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
const onCancel = () => {
|
|
87
|
+
console.log(chalk.red('\nSetup cancelled.'));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
};
|
|
90
|
+
const answers = await prompts([
|
|
91
|
+
{
|
|
92
|
+
type: nameArg ? null : 'text',
|
|
93
|
+
name: 'projectName',
|
|
94
|
+
message: 'Project name',
|
|
95
|
+
initial: DEFAULTS.projectName,
|
|
96
|
+
validate: (v) => /^[a-z0-9_-]+$/i.test(v) || 'Only alphanumeric characters, hyphens, and underscores',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
type: overrides.adminPath ? null : 'text',
|
|
100
|
+
name: 'adminPath',
|
|
101
|
+
message: 'Admin panel path (where the signed-in admin app lives)',
|
|
102
|
+
initial: DEFAULTS.adminPath,
|
|
103
|
+
validate: (v) => (v.startsWith('/') && /^\/[a-z0-9_-]+$/i.test(v)) ||
|
|
104
|
+
'Must start with / and use URL-safe characters',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: overrides.loginPath ? null : 'text',
|
|
108
|
+
name: 'loginPath',
|
|
109
|
+
message: 'Login path (login + setup wizard; same as admin path for inline login)',
|
|
110
|
+
initial: DEFAULTS.loginPath,
|
|
111
|
+
validate: (v) => (v.startsWith('/') && /^\/[a-z0-9_-]+$/i.test(v)) ||
|
|
112
|
+
'Must start with / and use URL-safe characters',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: overrides.template ? null : 'select',
|
|
116
|
+
name: 'template',
|
|
117
|
+
message: 'Starter template',
|
|
118
|
+
choices: [...TEMPLATES],
|
|
119
|
+
// Standard = designed sections (schema + shared admin/public renderers)
|
|
120
|
+
initial: 0,
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: overrides.framework ? null : 'select',
|
|
124
|
+
name: 'framework',
|
|
125
|
+
message: 'Public site framework',
|
|
126
|
+
choices: [...FRAMEWORKS],
|
|
127
|
+
// astro-split (workspace) is the blessed default; Next monolith is
|
|
128
|
+
// the explicit escape hatch.
|
|
129
|
+
initial: 0,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: overrides.plugins ? null : 'multiselect',
|
|
133
|
+
name: 'plugins',
|
|
134
|
+
message: 'Which plugins would you like to include?',
|
|
135
|
+
choices: PLUGINS.map((choice) => ({
|
|
136
|
+
...choice,
|
|
137
|
+
selected: DEFAULT_PRODUCTION_PLUGINS.includes(choice.value),
|
|
138
|
+
})),
|
|
139
|
+
hint: 'Space to select, Enter to confirm',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: overrides.platform ? null : 'select',
|
|
143
|
+
name: 'platform',
|
|
144
|
+
message: 'Deployment platform',
|
|
145
|
+
choices: [...PLATFORMS],
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: overrides.database ? null : 'select',
|
|
149
|
+
name: 'database',
|
|
150
|
+
message: 'Database provider',
|
|
151
|
+
choices: [...DATABASES],
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
type: overrides.authProviders ? null : 'multiselect',
|
|
155
|
+
name: 'authProviders',
|
|
156
|
+
message: 'Authentication providers',
|
|
157
|
+
choices: [...AUTH_PROVIDERS],
|
|
158
|
+
hint: 'Space to select, Enter to confirm',
|
|
159
|
+
min: 1,
|
|
160
|
+
},
|
|
161
|
+
], { onCancel });
|
|
162
|
+
const options = {
|
|
163
|
+
projectName: nameArg ?? answers.projectName,
|
|
164
|
+
adminPath: overrides.adminPath ?? (answers.adminPath || DEFAULTS.adminPath),
|
|
165
|
+
loginPath: overrides.loginPath ?? (answers.loginPath || DEFAULTS.loginPath),
|
|
166
|
+
plugins: overrides.plugins ?? answers.plugins,
|
|
167
|
+
platform: overrides.platform ?? answers.platform,
|
|
168
|
+
database: overrides.database ?? answers.database,
|
|
169
|
+
authProviders: overrides.authProviders ?? answers.authProviders,
|
|
170
|
+
template: overrides.template ?? (answers.template || DEFAULTS.template),
|
|
171
|
+
framework: overrides.framework ??
|
|
172
|
+
(answers.framework || DEFAULTS.framework),
|
|
173
|
+
};
|
|
174
|
+
await scaffoldProject(options);
|
|
175
|
+
});
|
|
176
|
+
program.parse();
|
|
177
|
+
}
|
|
178
|
+
run().catch((err) => {
|
|
179
|
+
console.error(chalk.red('Fatal error:'), err);
|
|
180
|
+
process.exit(1);
|
|
181
|
+
});
|
|
182
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type { ProjectOptions } from './scaffold.js';
|
|
2
|
+
export declare const PLUGIN_CHOICES: readonly [{
|
|
3
|
+
readonly title: "SEO";
|
|
4
|
+
readonly value: "seo";
|
|
5
|
+
}, {
|
|
6
|
+
readonly title: "Blocks";
|
|
7
|
+
readonly value: "blocks";
|
|
8
|
+
}, {
|
|
9
|
+
readonly title: "Forms";
|
|
10
|
+
readonly value: "forms";
|
|
11
|
+
}, {
|
|
12
|
+
readonly title: "Email";
|
|
13
|
+
readonly value: "email";
|
|
14
|
+
}, {
|
|
15
|
+
readonly title: "Media";
|
|
16
|
+
readonly value: "media";
|
|
17
|
+
}, {
|
|
18
|
+
readonly title: "Redirects";
|
|
19
|
+
readonly value: "redirects";
|
|
20
|
+
}, {
|
|
21
|
+
readonly title: "Navigation";
|
|
22
|
+
readonly value: "navigation";
|
|
23
|
+
}, {
|
|
24
|
+
readonly title: "Commerce";
|
|
25
|
+
readonly value: "commerce";
|
|
26
|
+
}, {
|
|
27
|
+
readonly title: "AI";
|
|
28
|
+
readonly value: "ai";
|
|
29
|
+
}, {
|
|
30
|
+
readonly title: "Consent & analytics";
|
|
31
|
+
readonly value: "consent";
|
|
32
|
+
}];
|
|
33
|
+
export declare const PLATFORM_CHOICES: readonly [{
|
|
34
|
+
readonly title: "Vercel";
|
|
35
|
+
readonly value: "vercel";
|
|
36
|
+
}, {
|
|
37
|
+
readonly title: "AWS";
|
|
38
|
+
readonly value: "aws";
|
|
39
|
+
}];
|
|
40
|
+
export declare const DATABASE_CHOICES: readonly [{
|
|
41
|
+
readonly title: "Prisma Postgres";
|
|
42
|
+
readonly value: "prisma-postgres";
|
|
43
|
+
}, {
|
|
44
|
+
readonly title: "Neon";
|
|
45
|
+
readonly value: "neon";
|
|
46
|
+
}, {
|
|
47
|
+
readonly title: "Supabase";
|
|
48
|
+
readonly value: "supabase";
|
|
49
|
+
}, {
|
|
50
|
+
readonly title: "Custom PostgreSQL URL";
|
|
51
|
+
readonly value: "custom";
|
|
52
|
+
}];
|
|
53
|
+
export declare const AUTH_CHOICES: readonly [{
|
|
54
|
+
readonly title: "Google";
|
|
55
|
+
readonly value: "google";
|
|
56
|
+
}, {
|
|
57
|
+
readonly title: "GitHub";
|
|
58
|
+
readonly value: "github";
|
|
59
|
+
}, {
|
|
60
|
+
readonly title: "Microsoft";
|
|
61
|
+
readonly value: "microsoft";
|
|
62
|
+
}, {
|
|
63
|
+
readonly title: "Credentials only";
|
|
64
|
+
readonly value: "credentials";
|
|
65
|
+
}];
|
|
66
|
+
/**
|
|
67
|
+
* Starter templates. `marketing-custom` is the **standard** scaffold for
|
|
68
|
+
* designed frontends: schema (`sections.types`) + one shared renderer map for
|
|
69
|
+
* public `<Sections>` and `<AdminRoot sectionRenderers>` + seed + verify.
|
|
70
|
+
* `default` is a minimal built-ins-only kit (no custom section wiring).
|
|
71
|
+
*
|
|
72
|
+
* @see apps/docs/content/designed-frontend-best-practices.md
|
|
73
|
+
*/
|
|
74
|
+
export declare const TEMPLATE_CHOICES: readonly [{
|
|
75
|
+
readonly title: "Standard (designed sections)";
|
|
76
|
+
readonly value: "marketing-custom";
|
|
77
|
+
}, {
|
|
78
|
+
readonly title: "Minimal (built-in sections only)";
|
|
79
|
+
readonly value: "default";
|
|
80
|
+
}];
|
|
81
|
+
/**
|
|
82
|
+
* Public delivery framework. `astro-split` is the **default** blessed path:
|
|
83
|
+
* a pnpm workspace with the Next CMS host in `apps/cms`, the Astro public
|
|
84
|
+
* site in `apps/site`, and (marketing-custom) the shared section kit in
|
|
85
|
+
* `packages/sections`.
|
|
86
|
+
* - `astro-split` = pnpm workspace: Astro public site + Next CMS host (default)
|
|
87
|
+
* - `next` = monolith (site + admin + API in one Next app) — explicit escape hatch
|
|
88
|
+
* - `astro-site` = Astro public site only (existing CMS host; also via `create-prenta-astro`)
|
|
89
|
+
*/
|
|
90
|
+
export declare const FRAMEWORK_CHOICES: readonly [{
|
|
91
|
+
readonly title: "Astro public site + Next CMS host (recommended)";
|
|
92
|
+
readonly value: "astro-split";
|
|
93
|
+
}, {
|
|
94
|
+
readonly title: "Next.js (monolith)";
|
|
95
|
+
readonly value: "next";
|
|
96
|
+
}, {
|
|
97
|
+
readonly title: "Astro public site only (existing CMS)";
|
|
98
|
+
readonly value: "astro-site";
|
|
99
|
+
}];
|
|
100
|
+
export declare const PLUGIN_VALUES: ("seo" | "blocks" | "forms" | "email" | "media" | "redirects" | "navigation" | "commerce" | "ai" | "consent")[];
|
|
101
|
+
export declare const PLATFORM_VALUES: ("vercel" | "aws")[];
|
|
102
|
+
export declare const DATABASE_VALUES: ("prisma-postgres" | "neon" | "supabase" | "custom")[];
|
|
103
|
+
export declare const AUTH_VALUES: ("google" | "github" | "microsoft" | "credentials")[];
|
|
104
|
+
export declare const TEMPLATE_VALUES: ("marketing-custom" | "default")[];
|
|
105
|
+
export declare const FRAMEWORK_VALUES: ("next" | "astro-split" | "astro-site")[];
|
|
106
|
+
export declare const DEFAULT_PRODUCTION_PLUGINS: readonly ["seo", "forms", "redirects", "media", "email"];
|
|
107
|
+
/** Defaults applied for any choice the agent did not pass as a flag. */
|
|
108
|
+
export declare const DEFAULTS: {
|
|
109
|
+
readonly projectName: "my-prenta-app";
|
|
110
|
+
readonly adminPath: "/admin";
|
|
111
|
+
readonly loginPath: "/securelogin";
|
|
112
|
+
readonly platform: "vercel";
|
|
113
|
+
readonly database: "prisma-postgres";
|
|
114
|
+
readonly authProviders: readonly ["credentials"];
|
|
115
|
+
/** Designed-frontend contract: schema + shared admin/public renderers. */
|
|
116
|
+
readonly template: "marketing-custom";
|
|
117
|
+
/**
|
|
118
|
+
* astro-split (workspace) is the blessed default for public delivery —
|
|
119
|
+
* fastest public HTML + purge-on-publish freshness. Pass `--framework next`
|
|
120
|
+
* for the classic monolith.
|
|
121
|
+
*/
|
|
122
|
+
readonly framework: "astro-split";
|
|
123
|
+
};
|
|
124
|
+
/** Raw flag bag mirroring the commander options. All optional. */
|
|
125
|
+
export interface CliFlags {
|
|
126
|
+
yes?: boolean;
|
|
127
|
+
adminPath?: string;
|
|
128
|
+
loginPath?: string;
|
|
129
|
+
plugins?: string;
|
|
130
|
+
platform?: string;
|
|
131
|
+
database?: string;
|
|
132
|
+
auth?: string;
|
|
133
|
+
template?: string;
|
|
134
|
+
framework?: string;
|
|
135
|
+
}
|
|
136
|
+
export declare function validateProjectName(name: string): string;
|
|
137
|
+
export declare function validateAdminPath(adminPath: string): string;
|
|
138
|
+
/** Validate a single choice value against an allow-list (case-insensitive). */
|
|
139
|
+
export declare function validateChoice(value: string, allowed: readonly string[], label: string): string;
|
|
140
|
+
/**
|
|
141
|
+
* Parse a comma-separated multi-select flag (e.g. plugins/auth) into a validated
|
|
142
|
+
* list. Supports the keywords `all` and `none` when enabled. Throws on any
|
|
143
|
+
* unknown token so an agent gets an actionable error instead of a silent drop.
|
|
144
|
+
*/
|
|
145
|
+
export declare function parseSelection(raw: string, allowed: readonly string[], label: string, opts?: {
|
|
146
|
+
allowAll?: boolean;
|
|
147
|
+
allowNone?: boolean;
|
|
148
|
+
}): string[];
|
|
149
|
+
/**
|
|
150
|
+
* Validate only the flags the caller actually passed, returning a partial
|
|
151
|
+
* `ProjectOptions`. Used by both the non-interactive resolver and the
|
|
152
|
+
* interactive flow (to skip prompts for pre-supplied answers).
|
|
153
|
+
*/
|
|
154
|
+
export declare function parseFlagOverrides(flags: CliFlags): Partial<ProjectOptions>;
|
|
155
|
+
/**
|
|
156
|
+
* Resolve a complete `ProjectOptions` with no prompting. Missing choices fall
|
|
157
|
+
* back to {@link DEFAULTS}. Throws (with an actionable message) on invalid input.
|
|
158
|
+
*/
|
|
159
|
+
export declare function resolveNonInteractiveOptions(nameArg: string | undefined, flags: CliFlags): ProjectOptions;
|
|
160
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWjB,CAAA;AAEV,eAAO,MAAM,gBAAgB;;;;;;EAGnB,CAAA;AAEV,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAKnB,CAAA;AAEV,eAAO,MAAM,YAAY;;;;;;;;;;;;EAKf,CAAA;AAEV;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;EASnB,CAAA;AAEV;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;EAIpB,CAAA;AAEV,eAAO,MAAM,aAAa,iHAAqC,CAAA;AAC/D,eAAO,MAAM,eAAe,sBAAuC,CAAA;AACnE,eAAO,MAAM,eAAe,wDAAuC,CAAA;AACnE,eAAO,MAAM,WAAW,uDAAmC,CAAA;AAC3D,eAAO,MAAM,eAAe,oCAAuC,CAAA;AACnE,eAAO,MAAM,gBAAgB,2CAAwC,CAAA;AAErE,eAAO,MAAM,0BAA0B,0DAA2D,CAAA;AAElG,wEAAwE;AACxE,eAAO,MAAM,QAAQ;;;;;;;IAWnB,0EAA0E;;IAE1E;;;;OAIG;;CAEK,CAAA;AAEV,kEAAkE;AAClE,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACrD,MAAM,EAAE,CAyBV;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CA0C3E;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,QAAQ,GACd,cAAc,CAahB"}
|
package/dist/options.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// Non-interactive option resolution for the scaffolder.
|
|
2
|
+
//
|
|
3
|
+
// `index.ts` runs an interactive `prompts` flow by default, but an AI agent (or
|
|
4
|
+
// CI) needs to scaffold headlessly. These pure helpers turn CLI flags into a
|
|
5
|
+
// validated `ProjectOptions`, with clear errors instead of hanging on a prompt.
|
|
6
|
+
// Kept side-effect free so they can be unit-tested without spawning the CLI.
|
|
7
|
+
export const PLUGIN_CHOICES = [
|
|
8
|
+
{ title: 'SEO', value: 'seo' },
|
|
9
|
+
{ title: 'Blocks', value: 'blocks' },
|
|
10
|
+
{ title: 'Forms', value: 'forms' },
|
|
11
|
+
{ title: 'Email', value: 'email' },
|
|
12
|
+
{ title: 'Media', value: 'media' },
|
|
13
|
+
{ title: 'Redirects', value: 'redirects' },
|
|
14
|
+
{ title: 'Navigation', value: 'navigation' },
|
|
15
|
+
{ title: 'Commerce', value: 'commerce' },
|
|
16
|
+
{ title: 'AI', value: 'ai' },
|
|
17
|
+
{ title: 'Consent & analytics', value: 'consent' },
|
|
18
|
+
];
|
|
19
|
+
export const PLATFORM_CHOICES = [
|
|
20
|
+
{ title: 'Vercel', value: 'vercel' },
|
|
21
|
+
{ title: 'AWS', value: 'aws' },
|
|
22
|
+
];
|
|
23
|
+
export const DATABASE_CHOICES = [
|
|
24
|
+
{ title: 'Prisma Postgres', value: 'prisma-postgres' },
|
|
25
|
+
{ title: 'Neon', value: 'neon' },
|
|
26
|
+
{ title: 'Supabase', value: 'supabase' },
|
|
27
|
+
{ title: 'Custom PostgreSQL URL', value: 'custom' },
|
|
28
|
+
];
|
|
29
|
+
export const AUTH_CHOICES = [
|
|
30
|
+
{ title: 'Google', value: 'google' },
|
|
31
|
+
{ title: 'GitHub', value: 'github' },
|
|
32
|
+
{ title: 'Microsoft', value: 'microsoft' },
|
|
33
|
+
{ title: 'Credentials only', value: 'credentials' },
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Starter templates. `marketing-custom` is the **standard** scaffold for
|
|
37
|
+
* designed frontends: schema (`sections.types`) + one shared renderer map for
|
|
38
|
+
* public `<Sections>` and `<AdminRoot sectionRenderers>` + seed + verify.
|
|
39
|
+
* `default` is a minimal built-ins-only kit (no custom section wiring).
|
|
40
|
+
*
|
|
41
|
+
* @see apps/docs/content/designed-frontend-best-practices.md
|
|
42
|
+
*/
|
|
43
|
+
export const TEMPLATE_CHOICES = [
|
|
44
|
+
{
|
|
45
|
+
title: 'Standard (designed sections)',
|
|
46
|
+
value: 'marketing-custom',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
title: 'Minimal (built-in sections only)',
|
|
50
|
+
value: 'default',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* Public delivery framework. `astro-split` is the **default** blessed path:
|
|
55
|
+
* a pnpm workspace with the Next CMS host in `apps/cms`, the Astro public
|
|
56
|
+
* site in `apps/site`, and (marketing-custom) the shared section kit in
|
|
57
|
+
* `packages/sections`.
|
|
58
|
+
* - `astro-split` = pnpm workspace: Astro public site + Next CMS host (default)
|
|
59
|
+
* - `next` = monolith (site + admin + API in one Next app) — explicit escape hatch
|
|
60
|
+
* - `astro-site` = Astro public site only (existing CMS host; also via `create-prenta-astro`)
|
|
61
|
+
*/
|
|
62
|
+
export const FRAMEWORK_CHOICES = [
|
|
63
|
+
{ title: 'Astro public site + Next CMS host (recommended)', value: 'astro-split' },
|
|
64
|
+
{ title: 'Next.js (monolith)', value: 'next' },
|
|
65
|
+
{ title: 'Astro public site only (existing CMS)', value: 'astro-site' },
|
|
66
|
+
];
|
|
67
|
+
export const PLUGIN_VALUES = PLUGIN_CHOICES.map((c) => c.value);
|
|
68
|
+
export const PLATFORM_VALUES = PLATFORM_CHOICES.map((c) => c.value);
|
|
69
|
+
export const DATABASE_VALUES = DATABASE_CHOICES.map((c) => c.value);
|
|
70
|
+
export const AUTH_VALUES = AUTH_CHOICES.map((c) => c.value);
|
|
71
|
+
export const TEMPLATE_VALUES = TEMPLATE_CHOICES.map((c) => c.value);
|
|
72
|
+
export const FRAMEWORK_VALUES = FRAMEWORK_CHOICES.map((c) => c.value);
|
|
73
|
+
export const DEFAULT_PRODUCTION_PLUGINS = ['seo', 'forms', 'redirects', 'media', 'email'];
|
|
74
|
+
/** Defaults applied for any choice the agent did not pass as a flag. */
|
|
75
|
+
export const DEFAULTS = {
|
|
76
|
+
projectName: 'my-prenta-app',
|
|
77
|
+
adminPath: '/admin',
|
|
78
|
+
// Split-login by default: auth screens (login, setup wizard, password
|
|
79
|
+
// reset) live on their own non-obvious mount, and the admin mount renders
|
|
80
|
+
// a 404 lookalike for signed-out visitors. Pass --login-path equal to
|
|
81
|
+
// --admin-path to keep the classic inline login.
|
|
82
|
+
loginPath: '/securelogin',
|
|
83
|
+
platform: 'vercel',
|
|
84
|
+
database: 'prisma-postgres',
|
|
85
|
+
authProviders: ['credentials'],
|
|
86
|
+
/** Designed-frontend contract: schema + shared admin/public renderers. */
|
|
87
|
+
template: 'marketing-custom',
|
|
88
|
+
/**
|
|
89
|
+
* astro-split (workspace) is the blessed default for public delivery —
|
|
90
|
+
* fastest public HTML + purge-on-publish freshness. Pass `--framework next`
|
|
91
|
+
* for the classic monolith.
|
|
92
|
+
*/
|
|
93
|
+
framework: 'astro-split',
|
|
94
|
+
};
|
|
95
|
+
const PROJECT_NAME_RE = /^[a-z0-9_-]+$/i;
|
|
96
|
+
const ADMIN_PATH_RE = /^\/[a-z0-9_-]+$/i;
|
|
97
|
+
export function validateProjectName(name) {
|
|
98
|
+
const trimmed = name.trim();
|
|
99
|
+
if (!PROJECT_NAME_RE.test(trimmed)) {
|
|
100
|
+
throw new Error(`Invalid project name "${name}". Use only letters, numbers, hyphens, and underscores.`);
|
|
101
|
+
}
|
|
102
|
+
return trimmed;
|
|
103
|
+
}
|
|
104
|
+
export function validateAdminPath(adminPath) {
|
|
105
|
+
const trimmed = adminPath.trim();
|
|
106
|
+
if (!trimmed.startsWith('/') || !ADMIN_PATH_RE.test(trimmed)) {
|
|
107
|
+
throw new Error(`Invalid admin path "${adminPath}". Must start with "/" and use URL-safe characters (e.g. /admin).`);
|
|
108
|
+
}
|
|
109
|
+
return trimmed;
|
|
110
|
+
}
|
|
111
|
+
/** Validate a single choice value against an allow-list (case-insensitive). */
|
|
112
|
+
export function validateChoice(value, allowed, label) {
|
|
113
|
+
const normalized = value.trim().toLowerCase();
|
|
114
|
+
if (!allowed.includes(normalized)) {
|
|
115
|
+
throw new Error(`Invalid ${label} "${value}". Choose one of: ${allowed.join(', ')}.`);
|
|
116
|
+
}
|
|
117
|
+
return normalized;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Parse a comma-separated multi-select flag (e.g. plugins/auth) into a validated
|
|
121
|
+
* list. Supports the keywords `all` and `none` when enabled. Throws on any
|
|
122
|
+
* unknown token so an agent gets an actionable error instead of a silent drop.
|
|
123
|
+
*/
|
|
124
|
+
export function parseSelection(raw, allowed, label, opts = {}) {
|
|
125
|
+
const tokens = raw
|
|
126
|
+
.split(',')
|
|
127
|
+
.map((t) => t.trim().toLowerCase())
|
|
128
|
+
.filter((t) => t.length > 0);
|
|
129
|
+
if (tokens.length === 1 && tokens[0] === 'all') {
|
|
130
|
+
if (!opts.allowAll)
|
|
131
|
+
throw new Error(`"all" is not valid for ${label}.`);
|
|
132
|
+
return [...allowed];
|
|
133
|
+
}
|
|
134
|
+
if ((tokens.length === 0 || (tokens.length === 1 && tokens[0] === 'none')) && opts.allowNone) {
|
|
135
|
+
return [];
|
|
136
|
+
}
|
|
137
|
+
const result = [];
|
|
138
|
+
for (const token of tokens) {
|
|
139
|
+
if (token === 'none') {
|
|
140
|
+
throw new Error(`"none" cannot be combined with other ${label} values.`);
|
|
141
|
+
}
|
|
142
|
+
if (!allowed.includes(token)) {
|
|
143
|
+
throw new Error(`Unknown ${label} "${token}". Valid values: ${allowed.join(', ')}.`);
|
|
144
|
+
}
|
|
145
|
+
if (!result.includes(token))
|
|
146
|
+
result.push(token);
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Validate only the flags the caller actually passed, returning a partial
|
|
152
|
+
* `ProjectOptions`. Used by both the non-interactive resolver and the
|
|
153
|
+
* interactive flow (to skip prompts for pre-supplied answers).
|
|
154
|
+
*/
|
|
155
|
+
export function parseFlagOverrides(flags) {
|
|
156
|
+
const overrides = {};
|
|
157
|
+
if (flags.adminPath != null)
|
|
158
|
+
overrides.adminPath = validateAdminPath(flags.adminPath);
|
|
159
|
+
if (flags.loginPath != null)
|
|
160
|
+
overrides.loginPath = validateAdminPath(flags.loginPath);
|
|
161
|
+
if (flags.plugins != null) {
|
|
162
|
+
overrides.plugins = parseSelection(flags.plugins, PLUGIN_VALUES, 'plugin', {
|
|
163
|
+
allowAll: true,
|
|
164
|
+
allowNone: true,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
if (flags.platform != null) {
|
|
168
|
+
overrides.platform = validateChoice(flags.platform, PLATFORM_VALUES, 'platform');
|
|
169
|
+
}
|
|
170
|
+
if (flags.template != null) {
|
|
171
|
+
overrides.template = validateChoice(flags.template, TEMPLATE_VALUES, 'template');
|
|
172
|
+
}
|
|
173
|
+
if (flags.framework != null) {
|
|
174
|
+
overrides.framework = validateChoice(flags.framework, FRAMEWORK_VALUES, 'framework');
|
|
175
|
+
}
|
|
176
|
+
if (flags.database != null) {
|
|
177
|
+
overrides.database = validateChoice(flags.database, DATABASE_VALUES, 'database');
|
|
178
|
+
}
|
|
179
|
+
if (flags.auth != null) {
|
|
180
|
+
const providers = parseSelection(flags.auth, AUTH_VALUES, 'auth provider');
|
|
181
|
+
if (providers.length === 0) {
|
|
182
|
+
throw new Error('At least one auth provider is required (e.g. --auth credentials).');
|
|
183
|
+
}
|
|
184
|
+
overrides.authProviders = providers;
|
|
185
|
+
}
|
|
186
|
+
return overrides;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Resolve a complete `ProjectOptions` with no prompting. Missing choices fall
|
|
190
|
+
* back to {@link DEFAULTS}. Throws (with an actionable message) on invalid input.
|
|
191
|
+
*/
|
|
192
|
+
export function resolveNonInteractiveOptions(nameArg, flags) {
|
|
193
|
+
const overrides = parseFlagOverrides(flags);
|
|
194
|
+
return {
|
|
195
|
+
projectName: validateProjectName(nameArg ?? DEFAULTS.projectName),
|
|
196
|
+
adminPath: overrides.adminPath ?? DEFAULTS.adminPath,
|
|
197
|
+
loginPath: overrides.loginPath ?? DEFAULTS.loginPath,
|
|
198
|
+
plugins: overrides.plugins ?? [...DEFAULT_PRODUCTION_PLUGINS],
|
|
199
|
+
platform: overrides.platform ?? DEFAULTS.platform,
|
|
200
|
+
database: overrides.database ?? DEFAULTS.database,
|
|
201
|
+
authProviders: overrides.authProviders ?? [...DEFAULTS.authProviders],
|
|
202
|
+
template: overrides.template ?? DEFAULTS.template,
|
|
203
|
+
framework: (overrides.framework ?? DEFAULTS.framework),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface ProjectOptions {
|
|
2
|
+
projectName: string;
|
|
3
|
+
adminPath: string;
|
|
4
|
+
/**
|
|
5
|
+
* Mount path for the unauthenticated auth screens (login, setup wizard,
|
|
6
|
+
* forgot/reset password), e.g. `/securelogin`. When it differs from
|
|
7
|
+
* `adminPath`, the scaffold generates a split-login install: a separate
|
|
8
|
+
* login route is emitted and the admin mount renders a 404 lookalike for
|
|
9
|
+
* signed-out visitors. Set equal to `adminPath` for the classic inline
|
|
10
|
+
* login.
|
|
11
|
+
*/
|
|
12
|
+
loginPath: string;
|
|
13
|
+
plugins: string[];
|
|
14
|
+
platform: string;
|
|
15
|
+
database: string;
|
|
16
|
+
authProviders: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Starter template id (see {@link TEMPLATE_CHOICES}).
|
|
19
|
+
* CLI / `--yes` default is `'marketing-custom'` (designed-sections standard).
|
|
20
|
+
* Omit or pass `'default'` for a minimal built-ins-only kit.
|
|
21
|
+
*/
|
|
22
|
+
template?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Public delivery framework. `astro-split` (the CLI default) emits a pnpm
|
|
25
|
+
* workspace: Next CMS host in `apps/cms` (admin + API + cron), Astro public
|
|
26
|
+
* site in `apps/site`, and (marketing-custom) a shared section kit in
|
|
27
|
+
* `packages/sections`. `next` is the classic monolith scaffold; `astro-site`
|
|
28
|
+
* emits only the Astro public site (for an existing CMS host).
|
|
29
|
+
*
|
|
30
|
+
* Programmatic callers that omit this get `next` (monolith) for
|
|
31
|
+
* backwards compatibility — the CLI default lives in {@link DEFAULTS}.
|
|
32
|
+
*/
|
|
33
|
+
framework?: 'next' | 'astro-split' | 'astro-site';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Split-login mode: the auth screens get their own mount, distinct from the
|
|
37
|
+
* admin app. When the two paths are equal the classic inline login applies.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isSplitLogin(options: ProjectOptions): boolean;
|
|
40
|
+
/** Package names for CLI plugin slugs — exported for scaffold / CLI consistency tests. */
|
|
41
|
+
export declare const PLUGIN_PACKAGES: Record<string, string>;
|
|
42
|
+
/** Package names for CLI platform slugs — exported for scaffold / CLI consistency tests. */
|
|
43
|
+
export declare const PLATFORM_PACKAGES: Record<string, string>;
|
|
44
|
+
export declare function scaffoldProject(rawOptions: ProjectOptions): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAyiBA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,YAAY,CAAA;CAClD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAE7D;AAED,0FAA0F;AAC1F,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWlD,CAAA;AAED,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGpD,CAAA;AAq+BD,wBAAsB,eAAe,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6T/E"}
|