@contentrail/cli 0.2.1 → 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/README.md +37 -29
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +223 -140
- package/dist/cli.js.map +1 -1
- package/dist/commands/connect.d.ts +3 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +37 -8
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +14 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init-next-admin.d.ts +7 -0
- package/dist/commands/init-next-admin.d.ts.map +1 -0
- package/dist/commands/init-next-admin.js +170 -0
- package/dist/commands/init-next-admin.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +87 -16
- package/dist/commands/init.js.map +1 -1
- package/dist/install/plan.d.ts +8 -0
- package/dist/install/plan.d.ts.map +1 -0
- package/dist/install/plan.js +29 -0
- package/dist/install/plan.js.map +1 -0
- package/dist/install/run.d.ts +5 -0
- package/dist/install/run.d.ts.map +1 -0
- package/dist/install/run.js +80 -0
- package/dist/install/run.js.map +1 -0
- package/dist/interactive/clack-host.d.ts +3 -0
- package/dist/interactive/clack-host.d.ts.map +1 -0
- package/dist/interactive/clack-host.js +47 -0
- package/dist/interactive/clack-host.js.map +1 -0
- package/dist/interactive/connect-wizard.d.ts +17 -0
- package/dist/interactive/connect-wizard.d.ts.map +1 -0
- package/dist/interactive/connect-wizard.js +41 -0
- package/dist/interactive/connect-wizard.js.map +1 -0
- package/dist/interactive/init-wizard.d.ts +12 -0
- package/dist/interactive/init-wizard.d.ts.map +1 -0
- package/dist/interactive/init-wizard.js +73 -0
- package/dist/interactive/init-wizard.js.map +1 -0
- package/dist/interactive/is-interactive.d.ts +9 -0
- package/dist/interactive/is-interactive.d.ts.map +1 -0
- package/dist/interactive/is-interactive.js +19 -0
- package/dist/interactive/is-interactive.js.map +1 -0
- package/dist/interactive/menu.d.ts +4 -0
- package/dist/interactive/menu.d.ts.map +1 -0
- package/dist/interactive/menu.js +50 -0
- package/dist/interactive/menu.js.map +1 -0
- package/dist/interactive/types.d.ts +34 -0
- package/dist/interactive/types.d.ts.map +1 -0
- package/dist/interactive/types.js +2 -0
- package/dist/interactive/types.js.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive prompts require a real TTY and a non-CI environment.
|
|
3
|
+
* `--yes` / `-y` always forces non-interactive command paths.
|
|
4
|
+
*/
|
|
5
|
+
export function canUseInteractiveUi(env = process.env, streams = {}) {
|
|
6
|
+
if (env.CI === "true" || env.CI === "1") {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
if (env.CONTENTRAIL_FORCE_INTERACTIVE === "1") {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
if (env.CONTENTRAIL_NO_INTERACTIVE === "1") {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const stdin = streams.stdin ?? process.stdin;
|
|
16
|
+
const stdout = streams.stdout ?? process.stdout;
|
|
17
|
+
return Boolean(stdin.isTTY) && Boolean("isTTY" in stdout && stdout.isTTY);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=is-interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-interactive.js","sourceRoot":"","sources":["../../src/interactive/is-interactive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAyB,OAAO,CAAC,GAAG,EACpC,UAGI,EAAE;IAEN,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,6BAA6B,KAAK,GAAG,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,0BAA0B,KAAK,GAAG,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/interactive/menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,CAsDnC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export async function runMainMenu(host, log) {
|
|
2
|
+
host.intro(`ContentRail — configure your static site`);
|
|
3
|
+
host.note([
|
|
4
|
+
"You keep your pages, routes, and design.",
|
|
5
|
+
"ContentRail adds schemas, /admin, Git publish, and Pages helpers.",
|
|
6
|
+
"Configure Git + Cloudflare here; secrets stay in env / dashboard.",
|
|
7
|
+
].join("\n"), "Developer owns the site");
|
|
8
|
+
const action = await host.select("What do you want to do?", [
|
|
9
|
+
{
|
|
10
|
+
value: "setup",
|
|
11
|
+
label: "Setup ContentRail",
|
|
12
|
+
hint: "init + install packages for this site",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
value: "connect",
|
|
16
|
+
label: "Connect GitHub + Cloudflare Pages",
|
|
17
|
+
hint: "needs CF_API_TOKEN in your environment",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
value: "doctor",
|
|
21
|
+
label: "Doctor",
|
|
22
|
+
hint: "diagnose local setup",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
value: "status",
|
|
26
|
+
label: "Status",
|
|
27
|
+
hint: "summarize project state",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
value: "deploy",
|
|
31
|
+
label: "Deploy",
|
|
32
|
+
hint: "build and deploy to Pages",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
value: "help",
|
|
36
|
+
label: "Show command help",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
value: "exit",
|
|
40
|
+
label: "Exit",
|
|
41
|
+
},
|
|
42
|
+
]);
|
|
43
|
+
if (host.isCancel(action)) {
|
|
44
|
+
host.cancel("Cancelled.");
|
|
45
|
+
return "cancelled";
|
|
46
|
+
}
|
|
47
|
+
log.info(`Selected: ${action}`);
|
|
48
|
+
return action;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/interactive/menu.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAgB,EAChB,GAAW;IAEX,IAAI,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI,CACP;QACE,0CAA0C;QAC1C,mEAAmE;QACnE,mEAAmE;KACpE,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,yBAAyB,CAC1B,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAa,yBAAyB,EAAE;QACtE;YACE,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,uCAAuC;SAC9C;QACD;YACE,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mCAAmC;YAC1C,IAAI,EAAE,wCAAwC;SAC/C;QACD;YACE,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,sBAAsB;SAC7B;QACD;YACE,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,yBAAyB;SAChC;QACD;YACE,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,2BAA2B;SAClC;QACD;YACE,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,mBAAmB;SAC3B;QACD;YACE,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,MAAM;SACd;KACF,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type MenuAction = "setup" | "connect" | "doctor" | "status" | "deploy" | "help" | "exit";
|
|
2
|
+
export interface SelectOption<T extends string> {
|
|
3
|
+
readonly value: T;
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly hint?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PromptHost {
|
|
8
|
+
intro(message: string): void;
|
|
9
|
+
outro(message: string): void;
|
|
10
|
+
note(message: string, title?: string): void;
|
|
11
|
+
select<T extends string>(message: string, options: readonly SelectOption<T>[]): Promise<T | symbol>;
|
|
12
|
+
confirm(message: string, initial?: boolean): Promise<boolean | symbol>;
|
|
13
|
+
text(message: string, options?: {
|
|
14
|
+
readonly placeholder?: string;
|
|
15
|
+
readonly initialValue?: string;
|
|
16
|
+
}): Promise<string | symbol>;
|
|
17
|
+
cancel(message?: string): void;
|
|
18
|
+
isCancel(value: unknown): value is symbol;
|
|
19
|
+
}
|
|
20
|
+
export interface InstallPlan {
|
|
21
|
+
readonly dependencies: readonly string[];
|
|
22
|
+
readonly devDependencies: readonly string[];
|
|
23
|
+
}
|
|
24
|
+
export interface InstallResult {
|
|
25
|
+
readonly ok: boolean;
|
|
26
|
+
readonly skipped: boolean;
|
|
27
|
+
readonly detail: string;
|
|
28
|
+
}
|
|
29
|
+
export type InstallDepsFn = (input: {
|
|
30
|
+
readonly projectRoot: string;
|
|
31
|
+
readonly plan: InstallPlan;
|
|
32
|
+
readonly dryRun: boolean;
|
|
33
|
+
}) => Promise<InstallResult>;
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/interactive/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM;IAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,CAAC,CAAC,SAAS,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,GAClC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACvB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IACvE,IAAI,CACF,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1E,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5B,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/interactive/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentrail/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
|
-
"description": "ContentRail developer CLI
|
|
6
|
+
"description": "ContentRail developer CLI — interactive setup, init, validate, build, doctor, connect, deploy.",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"engines": {
|
|
9
9
|
"node": ">=22"
|
|
@@ -26,10 +26,11 @@
|
|
|
26
26
|
"LICENSE"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
+
"@clack/prompts": "^1.8.1",
|
|
29
30
|
"jiti": "^2.6.1",
|
|
30
31
|
"zod": "^4.6.7",
|
|
31
|
-
"@contentrail/core": "0.2.
|
|
32
|
-
"@contentrail/reader": "0.2.
|
|
32
|
+
"@contentrail/core": "0.2.3",
|
|
33
|
+
"@contentrail/reader": "0.2.3"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@types/node": "^22.20.5",
|