@contentrail/cli 0.2.0 → 0.2.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.
Files changed (69) hide show
  1. package/README.md +23 -17
  2. package/dist/cli.d.ts +9 -5
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +253 -31
  5. package/dist/cli.js.map +1 -1
  6. package/dist/cloudflare/pages-client.d.ts +52 -0
  7. package/dist/cloudflare/pages-client.d.ts.map +1 -0
  8. package/dist/cloudflare/pages-client.js +118 -0
  9. package/dist/cloudflare/pages-client.js.map +1 -0
  10. package/dist/commands/connect.d.ts +15 -0
  11. package/dist/commands/connect.d.ts.map +1 -0
  12. package/dist/commands/connect.js +132 -0
  13. package/dist/commands/connect.js.map +1 -0
  14. package/dist/commands/deploy.d.ts +19 -0
  15. package/dist/commands/deploy.d.ts.map +1 -0
  16. package/dist/commands/deploy.js +136 -0
  17. package/dist/commands/deploy.js.map +1 -0
  18. package/dist/commands/dev.d.ts +4 -0
  19. package/dist/commands/dev.d.ts.map +1 -0
  20. package/dist/commands/dev.js +31 -0
  21. package/dist/commands/dev.js.map +1 -0
  22. package/dist/commands/doctor.d.ts.map +1 -1
  23. package/dist/commands/doctor.js +33 -2
  24. package/dist/commands/doctor.js.map +1 -1
  25. package/dist/commands/import.d.ts +10 -0
  26. package/dist/commands/import.d.ts.map +1 -0
  27. package/dist/commands/import.js +87 -0
  28. package/dist/commands/import.js.map +1 -0
  29. package/dist/commands/init.d.ts +3 -1
  30. package/dist/commands/init.d.ts.map +1 -1
  31. package/dist/commands/init.js +206 -15
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/pages.d.ts +2 -0
  34. package/dist/commands/pages.d.ts.map +1 -0
  35. package/dist/commands/pages.js +2 -0
  36. package/dist/commands/pages.js.map +1 -0
  37. package/dist/commands/publish.d.ts +15 -0
  38. package/dist/commands/publish.d.ts.map +1 -0
  39. package/dist/commands/publish.js +105 -0
  40. package/dist/commands/publish.js.map +1 -0
  41. package/dist/config/save.d.ts +4 -0
  42. package/dist/config/save.d.ts.map +1 -0
  43. package/dist/config/save.js +22 -0
  44. package/dist/config/save.js.map +1 -0
  45. package/dist/config/schema.d.ts.map +1 -1
  46. package/dist/config/schema.js +62 -1
  47. package/dist/config/schema.js.map +1 -1
  48. package/dist/config/types.d.ts +24 -2
  49. package/dist/config/types.d.ts.map +1 -1
  50. package/dist/config/types.js.map +1 -1
  51. package/dist/detect/framework.d.ts +1 -1
  52. package/dist/detect/framework.d.ts.map +1 -1
  53. package/dist/detect/framework.js +9 -2
  54. package/dist/detect/framework.js.map +1 -1
  55. package/dist/editor/validate-config.d.ts.map +1 -1
  56. package/dist/editor/validate-config.js +16 -2
  57. package/dist/editor/validate-config.js.map +1 -1
  58. package/dist/git/remote.d.ts +8 -0
  59. package/dist/git/remote.d.ts.map +1 -0
  60. package/dist/git/remote.js +32 -0
  61. package/dist/git/remote.js.map +1 -0
  62. package/dist/import/csv.d.ts +6 -0
  63. package/dist/import/csv.d.ts.map +1 -0
  64. package/dist/import/csv.js +78 -0
  65. package/dist/import/csv.js.map +1 -0
  66. package/dist/index.d.ts +1 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js.map +1 -1
  69. package/package.json +4 -4
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Pages REST client for the CLI (Node-only). Token never logged.
3
+ */
4
+ const API = "https://api.cloudflare.com/client/v4";
5
+ export class CloudflareApiError extends Error {
6
+ status;
7
+ errors;
8
+ constructor(message, status, errors) {
9
+ super(message);
10
+ this.name = "CloudflareApiError";
11
+ this.status = status;
12
+ this.errors = errors;
13
+ }
14
+ }
15
+ function isNotFound(error) {
16
+ return error instanceof CloudflareApiError && error.status === 404;
17
+ }
18
+ export function createCliPagesClient(options) {
19
+ if (options.token.trim() === "") {
20
+ throw new Error("CF_API_TOKEN is required (local env only).");
21
+ }
22
+ const fetchImpl = options.fetchImpl ?? fetch;
23
+ const apiBase = (options.apiBase ?? API).replace(/\/+$/, "");
24
+ async function request(method, path, body) {
25
+ const headers = new Headers({
26
+ Authorization: `Bearer ${options.token}`,
27
+ Accept: "application/json",
28
+ });
29
+ if (body !== undefined) {
30
+ headers.set("Content-Type", "application/json");
31
+ }
32
+ const response = await fetchImpl(`${apiBase}${path}`, {
33
+ method,
34
+ headers,
35
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
36
+ });
37
+ const json = (await response.json());
38
+ if (!response.ok || json.success === false) {
39
+ throw new CloudflareApiError(`Cloudflare API ${method} ${path} failed (${response.status}).`, response.status, json.errors);
40
+ }
41
+ return json.result;
42
+ }
43
+ async function getProject(accountId, name) {
44
+ return request("GET", `/accounts/${encodeURIComponent(accountId)}/pages/projects/${encodeURIComponent(name)}`);
45
+ }
46
+ async function planProject(accountId, input) {
47
+ const actions = [];
48
+ try {
49
+ await getProject(accountId, input.name);
50
+ actions.push({
51
+ kind: "update",
52
+ summary: `Patch Pages project "${input.name}"`,
53
+ });
54
+ }
55
+ catch (error) {
56
+ if (!isNotFound(error)) {
57
+ throw error;
58
+ }
59
+ actions.push({
60
+ kind: "create",
61
+ summary: `Create Pages project "${input.name}"`,
62
+ });
63
+ }
64
+ actions.push({
65
+ kind: "manual",
66
+ summary: "Install the Cloudflare GitHub App in the dashboard if this project should build from Git. The API cannot complete GitHub OAuth.",
67
+ });
68
+ actions.push({
69
+ kind: "manual",
70
+ summary: "Create Cloudflare Access applications for /admin* and /api*. Functions middleware cannot protect static admin HTML.",
71
+ });
72
+ return actions;
73
+ }
74
+ return {
75
+ listAccounts() {
76
+ return request("GET", "/accounts");
77
+ },
78
+ getProject,
79
+ listDeployments(accountId, projectName) {
80
+ return request("GET", `/accounts/${encodeURIComponent(accountId)}/pages/projects/${encodeURIComponent(projectName)}/deployments`);
81
+ },
82
+ planProject,
83
+ async applyProjectPlan(accountId, input, apply) {
84
+ const actions = await planProject(accountId, input);
85
+ if (apply.dryRun || !apply.confirm) {
86
+ return { applied: false, actions };
87
+ }
88
+ const body = {
89
+ name: input.name,
90
+ production_branch: input.productionBranch,
91
+ build_config: {
92
+ build_command: input.buildCommand,
93
+ destination_dir: input.destinationDir,
94
+ root_dir: input.rootDir ?? "",
95
+ },
96
+ };
97
+ try {
98
+ await getProject(accountId, input.name);
99
+ await request("PATCH", `/accounts/${encodeURIComponent(accountId)}/pages/projects/${encodeURIComponent(input.name)}`, body);
100
+ }
101
+ catch (error) {
102
+ if (!isNotFound(error)) {
103
+ throw error;
104
+ }
105
+ await request("POST", `/accounts/${encodeURIComponent(accountId)}/pages/projects`, body);
106
+ }
107
+ return { applied: true, actions };
108
+ },
109
+ /**
110
+ * Asks Cloudflare to create a new deployment for a Git-connected project.
111
+ * Direct-upload (no Git source) is a different API and is handled by wrangler.
112
+ */
113
+ triggerGitDeployment(accountId, projectName, productionBranch) {
114
+ return request("POST", `/accounts/${encodeURIComponent(accountId)}/pages/projects/${encodeURIComponent(projectName)}/deployments`, { branch: productionBranch });
115
+ },
116
+ };
117
+ }
118
+ //# sourceMappingURL=pages-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages-client.js","sourceRoot":"","sources":["../../src/cloudflare/pages-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ExitCode } from "../exit-codes.js";
2
+ import type { Logger } from "../util/print.js";
3
+ export declare function runConnect(options: {
4
+ readonly projectRoot: string;
5
+ readonly dryRun: boolean;
6
+ readonly confirm: boolean;
7
+ readonly yes: boolean;
8
+ readonly accountId?: string;
9
+ readonly projectName?: string;
10
+ readonly env?: NodeJS.ProcessEnv;
11
+ readonly fetchImpl?: typeof fetch;
12
+ /** Tests inject a remote URL instead of spawning git. */
13
+ readonly gitRemoteUrl?: string;
14
+ }, log: Logger): Promise<ExitCode>;
15
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,wBAAsB,UAAU,CAC9B,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,EACD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,CAiJnB"}
@@ -0,0 +1,132 @@
1
+ import { createCliPagesClient } from "../cloudflare/pages-client.js";
2
+ import { loadProject } from "../config/load.js";
3
+ import { mergeProjectConfig, writeProjectConfig } from "../config/save.js";
4
+ import { readPackageJson } from "../detect/framework.js";
5
+ import { ExitCode } from "../exit-codes.js";
6
+ import { parseGitHubOrigin, sanitizePagesProjectName } from "../git/remote.js";
7
+ import { runCommand } from "../util/spawn.js";
8
+ export async function runConnect(options, log) {
9
+ const env = options.env ?? process.env;
10
+ const project = await loadProject(options.projectRoot);
11
+ let remoteUrl = options.gitRemoteUrl;
12
+ if (remoteUrl === undefined) {
13
+ try {
14
+ const git = await runCommand("git", ["remote", "get-url", "origin"], {
15
+ cwd: options.projectRoot,
16
+ });
17
+ if (git.code === 0) {
18
+ remoteUrl = git.stdout.trim();
19
+ }
20
+ }
21
+ catch {
22
+ remoteUrl = undefined;
23
+ }
24
+ }
25
+ if (remoteUrl === undefined || remoteUrl === "") {
26
+ log.error("No git origin found. Create a GitHub repository, run `git remote add origin <url>`, then re-run `contentrail connect`.");
27
+ return ExitCode.Config;
28
+ }
29
+ const github = parseGitHubOrigin(remoteUrl);
30
+ if (github === null) {
31
+ log.error("origin is not a GitHub HTTPS/SSH URL. ContentRail's Git publisher talks to GitHub only.");
32
+ return ExitCode.Config;
33
+ }
34
+ log.info(`GitHub repository: ${github.owner}/${github.repo}`);
35
+ const token = env.CF_API_TOKEN;
36
+ if (token === undefined || token.trim() === "") {
37
+ log.error("CF_API_TOKEN is missing. Create a Cloudflare API token with Pages Edit (least privilege) and export it in your shell or gitignored .env. Do not put it in contentrail.config.json.");
38
+ return ExitCode.Config;
39
+ }
40
+ const client = createCliPagesClient({
41
+ token,
42
+ ...(options.fetchImpl !== undefined
43
+ ? { fetchImpl: options.fetchImpl }
44
+ : {}),
45
+ });
46
+ const accounts = await client.listAccounts();
47
+ if (accounts.length === 0) {
48
+ log.error("This API token cannot list any Cloudflare accounts.");
49
+ return ExitCode.Failure;
50
+ }
51
+ let accountId = options.accountId ?? project.config.cloudflare?.accountId;
52
+ if (accountId === undefined || accountId === "") {
53
+ if (accounts.length === 1) {
54
+ accountId = accounts[0].id;
55
+ }
56
+ else {
57
+ log.error(`Token can access ${accounts.length} accounts. Pass --account-id <id>.`);
58
+ for (const account of accounts) {
59
+ log.info(` ${account.id} ${account.name}`);
60
+ }
61
+ return ExitCode.Usage;
62
+ }
63
+ }
64
+ log.info(`Cloudflare account: ${accountId}`);
65
+ const pkg = await readPackageJson(options.projectRoot);
66
+ const projectName = options.projectName ??
67
+ project.config.cloudflare?.projectName ??
68
+ sanitizePagesProjectName(pkg?.name ?? "contentrail-site");
69
+ const productionBranch = project.config.cloudflare?.productionBranch ??
70
+ project.config.git?.branch ??
71
+ "main";
72
+ const buildCommand = project.config.cloudflare?.buildCommand ??
73
+ `npm run ${project.config.buildScript}`;
74
+ const destinationDir = project.config.cloudflare?.destinationDir ??
75
+ defaultOutputDir(project.config.framework);
76
+ const input = {
77
+ name: projectName,
78
+ productionBranch,
79
+ buildCommand,
80
+ destinationDir,
81
+ };
82
+ const actions = await client.planProject(accountId, input);
83
+ for (const action of actions) {
84
+ log.info(`[${action.kind}] ${action.summary}`);
85
+ }
86
+ const shouldApply = options.confirm && options.yes && !options.dryRun;
87
+ if (!shouldApply) {
88
+ log.info("No Cloudflare resources changed. Re-run with `--confirm --yes` (and without --dry-run) to create or patch the Pages project.");
89
+ }
90
+ else {
91
+ const applied = await client.applyProjectPlan(accountId, input, {
92
+ confirm: true,
93
+ dryRun: false,
94
+ });
95
+ if (!applied.applied) {
96
+ log.error("Cloudflare did not apply the project plan.");
97
+ return ExitCode.Failure;
98
+ }
99
+ log.info(`Pages project "${projectName}" created or patched.`);
100
+ }
101
+ const nextConfig = mergeProjectConfig(project.config, {
102
+ git: {
103
+ owner: github.owner,
104
+ repo: github.repo,
105
+ branch: productionBranch,
106
+ },
107
+ cloudflare: {
108
+ accountId,
109
+ projectName,
110
+ productionBranch,
111
+ buildCommand,
112
+ destinationDir,
113
+ },
114
+ });
115
+ if (options.dryRun) {
116
+ log.info("Dry run: contentrail.config.json was not written.");
117
+ }
118
+ else {
119
+ await writeProjectConfig(options.projectRoot, nextConfig);
120
+ log.info("Wrote git and cloudflare fields to contentrail.config.json (no secrets).");
121
+ }
122
+ log.info("Still required in the Cloudflare dashboard: GitHub App install (if using git builds), Access on /admin* and /api*, and secret bindings (CONTENTRAIL_GITHUB_TOKEN, CONTENTRAIL_ACCESS_AUD, CONTENTRAIL_ACCESS_TEAM_DOMAIN).");
123
+ log.info("Then run `contentrail deploy`.");
124
+ return ExitCode.Success;
125
+ }
126
+ function defaultOutputDir(framework) {
127
+ if (framework === "next") {
128
+ return "out";
129
+ }
130
+ return "dist";
131
+ }
132
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ExitCode } from "../exit-codes.js";
2
+ import type { Logger } from "../util/print.js";
3
+ export declare function runDeployStatus(options: {
4
+ readonly projectRoot: string;
5
+ readonly accountId?: string;
6
+ readonly projectName?: string;
7
+ readonly env?: NodeJS.ProcessEnv;
8
+ readonly fetchImpl?: typeof fetch;
9
+ }, log: Logger): Promise<ExitCode>;
10
+ export declare function runDeploy(options: {
11
+ readonly projectRoot: string;
12
+ readonly accountId?: string;
13
+ readonly projectName?: string;
14
+ readonly skipBuild?: boolean;
15
+ readonly dryRun?: boolean;
16
+ readonly env?: NodeJS.ProcessEnv;
17
+ readonly fetchImpl?: typeof fetch;
18
+ }, log: Logger): Promise<ExitCode>;
19
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI/C,wBAAsB,eAAe,CACnC,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC,EACD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,CAqBnB;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC,EACD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,CAyGnB"}
@@ -0,0 +1,136 @@
1
+ import { pathExists } from "../util/fs.js";
2
+ import path from "node:path";
3
+ import { CloudflareApiError, createCliPagesClient, } from "../cloudflare/pages-client.js";
4
+ import { loadProject } from "../config/load.js";
5
+ import { ExitCode } from "../exit-codes.js";
6
+ import { runCommand } from "../util/spawn.js";
7
+ import { runBuild } from "./build.js";
8
+ export async function runDeployStatus(options, log) {
9
+ const env = options.env ?? process.env;
10
+ const resolved = await resolveCloudflareTarget(options, log);
11
+ if (resolved === null) {
12
+ return ExitCode.Config;
13
+ }
14
+ const token = env.CF_API_TOKEN;
15
+ if (token === undefined || token.trim() === "") {
16
+ log.error("CF_API_TOKEN is missing. Create a least-privilege token locally; do not put it in contentrail.config.json.");
17
+ return ExitCode.Config;
18
+ }
19
+ const client = createCliPagesClient({
20
+ token,
21
+ ...(options.fetchImpl !== undefined
22
+ ? { fetchImpl: options.fetchImpl }
23
+ : {}),
24
+ });
25
+ return reportLatest(client, resolved.accountId, resolved.projectName, log);
26
+ }
27
+ export async function runDeploy(options, log) {
28
+ const env = options.env ?? process.env;
29
+ const project = await loadProject(options.projectRoot);
30
+ const resolved = await resolveCloudflareTarget({ ...options, projectRoot: options.projectRoot }, log);
31
+ if (resolved === null) {
32
+ return ExitCode.Config;
33
+ }
34
+ const token = env.CF_API_TOKEN;
35
+ if (token === undefined || token.trim() === "") {
36
+ log.error("CF_API_TOKEN is missing. Export a Pages-capable token, then re-run `contentrail deploy`.");
37
+ return ExitCode.Config;
38
+ }
39
+ if (options.dryRun === true) {
40
+ log.info(`Dry run: would build then ask Cloudflare to deploy Pages project "${resolved.projectName}".`);
41
+ return ExitCode.Success;
42
+ }
43
+ if (options.skipBuild !== true) {
44
+ const built = await runBuild(project, log);
45
+ if (built !== ExitCode.Success) {
46
+ return built;
47
+ }
48
+ }
49
+ const client = createCliPagesClient({
50
+ token,
51
+ ...(options.fetchImpl !== undefined
52
+ ? { fetchImpl: options.fetchImpl }
53
+ : {}),
54
+ });
55
+ const branch = project.config.cloudflare?.productionBranch ??
56
+ project.config.git?.branch ??
57
+ "main";
58
+ try {
59
+ const created = await client.triggerGitDeployment(resolved.accountId, resolved.projectName, branch);
60
+ const id = typeof created.id === "string" ? created.id : "unknown";
61
+ log.info(`Cloudflare accepted a Git deployment request (${id}).`);
62
+ return reportLatest(client, resolved.accountId, resolved.projectName, log);
63
+ }
64
+ catch (error) {
65
+ if (!(error instanceof CloudflareApiError)) {
66
+ throw error;
67
+ }
68
+ log.warn(`Git-triggered deployment failed (${error.status}). Trying wrangler pages deploy for a direct upload.`);
69
+ }
70
+ const outDir = project.config.cloudflare?.destinationDir ??
71
+ (project.config.framework === "next" ? "out" : "dist");
72
+ const absOut = path.join(options.projectRoot, outDir);
73
+ if (!(await pathExists(absOut))) {
74
+ log.error(`Build output directory "${outDir}" is missing. For Next.js set output: "export" so the site emits ${outDir}/.`);
75
+ return ExitCode.Failure;
76
+ }
77
+ const wrangler = await runCommand("npx", [
78
+ "--yes",
79
+ "wrangler",
80
+ "pages",
81
+ "deploy",
82
+ outDir,
83
+ "--project-name",
84
+ resolved.projectName,
85
+ "--branch",
86
+ branch,
87
+ "--commit-dirty=true",
88
+ ], {
89
+ cwd: options.projectRoot,
90
+ env: { ...env, CLOUDFLARE_API_TOKEN: token },
91
+ });
92
+ if (wrangler.stdout.trim() !== "") {
93
+ log.info(wrangler.stdout.trimEnd());
94
+ }
95
+ if (wrangler.stderr.trim() !== "") {
96
+ log.error(wrangler.stderr.trimEnd());
97
+ }
98
+ if (wrangler.code !== 0) {
99
+ log.error("Deploy failed. Connect the GitHub repo in the Pages dashboard (Cloudflare GitHub App) or fix wrangler/direct-upload errors. ContentRail does not report success without Cloudflare confirmation.");
100
+ return ExitCode.Failure;
101
+ }
102
+ log.info("wrangler reported a Pages deploy. Checking Cloudflare status…");
103
+ return reportLatest(client, resolved.accountId, resolved.projectName, log);
104
+ }
105
+ async function resolveCloudflareTarget(options, log) {
106
+ const project = await loadProject(options.projectRoot);
107
+ const accountId = options.accountId ?? project.config.cloudflare?.accountId ?? "";
108
+ const projectName = options.projectName ?? project.config.cloudflare?.projectName ?? "";
109
+ if (accountId === "" || projectName === "") {
110
+ log.error("Run `contentrail connect --confirm --yes` first (needs git origin + CF_API_TOKEN), or pass --account-id and --project.");
111
+ return null;
112
+ }
113
+ return { accountId, projectName };
114
+ }
115
+ async function reportLatest(client, accountId, projectName, log) {
116
+ const deployments = await client.listDeployments(accountId, projectName);
117
+ if (deployments.length === 0) {
118
+ log.info(`No deployments returned for Pages project "${projectName}".`);
119
+ return ExitCode.Success;
120
+ }
121
+ const latest = deployments[0];
122
+ const status = latest.latest_stage?.status ?? "unknown";
123
+ log.info(`Latest deployment ${latest.id}: ${status}`);
124
+ if (latest.url !== undefined && latest.url !== "") {
125
+ log.info(`URL: ${latest.url}`);
126
+ }
127
+ if (status.toLowerCase() === "failure" || status.toLowerCase() === "failed") {
128
+ log.error("Cloudflare reported a failed deployment. Inspect Pages logs; ContentRail does not invent a success status.");
129
+ return ExitCode.Failure;
130
+ }
131
+ if (status.toLowerCase() !== "success" && status.toLowerCase() !== "active") {
132
+ log.info("Deployment is not finished yet. Re-run `contentrail deploy status` until Cloudflare reports success.");
133
+ }
134
+ return ExitCode.Success;
135
+ }
136
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAMC,EACD,GAAW;IAEX,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,GAAG,CAAC,KAAK,CACP,4GAA4G,CAC7G,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,KAAK;QACL,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAQC,EACD,GAAW;IAEX,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAC5C,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,EAChD,GAAG,CACJ,CAAC;IACF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,GAAG,CAAC,KAAK,CACP,0FAA0F,CAC3F,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CACN,qEAAqE,QAAQ,CAAC,WAAW,IAAI,CAC9F,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,KAAK,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,KAAK;QACL,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB;QAC3C,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM;QAC1B,MAAM,CAAC;IAET,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAC/C,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,WAAW,EACpB,MAAM,CACP,CAAC;QACF,MAAM,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,GAAG,CAAC,IAAI,CAAC,iDAAiD,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC,EAAE,CAAC;YAC3C,MAAM,KAAK,CAAC;QACd,CAAC;QACD,GAAG,CAAC,IAAI,CACN,oCAAoC,KAAK,CAAC,MAAM,sDAAsD,CACvG,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc;QACzC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAChC,GAAG,CAAC,KAAK,CACP,2BAA2B,MAAM,oEAAoE,MAAM,IAAI,CAChH,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,UAAU,CAC/B,KAAK,EACL;QACE,OAAO;QACP,UAAU;QACV,OAAO;QACP,QAAQ;QACR,MAAM;QACN,gBAAgB;QAChB,QAAQ,CAAC,WAAW;QACpB,UAAU;QACV,MAAM;QACN,qBAAqB;KACtB,EACD;QACE,GAAG,EAAE,OAAO,CAAC,WAAW;QACxB,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE;KAC7C,CACF,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,KAAK,CACP,kMAAkM,CACnM,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC1E,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,OAIC,EACD,GAAW;IAEX,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC;IAClE,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,IAAI,EAAE,CAAC;IACtE,IAAI,SAAS,KAAK,EAAE,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CACP,wHAAwH,CACzH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,MAA+C,EAC/C,SAAiB,EACjB,WAAmB,EACnB,GAAW;IAEX,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,8CAA8C,WAAW,IAAI,CAAC,CAAC;QACxE,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,IAAI,SAAS,CAAC;IACxD,GAAG,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5E,GAAG,CAAC,KAAK,CACP,4GAA4G,CAC7G,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CACN,sGAAsG,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ExitCode } from "../exit-codes.js";
2
+ import type { Logger } from "../util/print.js";
3
+ export declare function runDev(projectRoot: string, log: Logger): Promise<ExitCode>;
4
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,wBAAsB,MAAM,CAC1B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,CA+BnB"}
@@ -0,0 +1,31 @@
1
+ import { detectPackageManager, readPackageJson } from "../detect/framework.js";
2
+ import { ExitCode } from "../exit-codes.js";
3
+ import { runCommand } from "../util/spawn.js";
4
+ export async function runDev(projectRoot, log) {
5
+ const pkg = await readPackageJson(projectRoot);
6
+ if (pkg === null) {
7
+ log.error("No package.json found.");
8
+ return ExitCode.Config;
9
+ }
10
+ if (pkg.scripts?.dev === undefined) {
11
+ log.error('No "dev" script in package.json. Add a framework dev script (for example `astro dev` or `vite`) before using contentrail dev.');
12
+ return ExitCode.Config;
13
+ }
14
+ const pm = await detectPackageManager(projectRoot);
15
+ const command = pm === "yarn" ? "yarn" : pm === "npm" ? "npm" : "pnpm";
16
+ const args = pm === "yarn" ? ["dev"] : ["run", "dev"];
17
+ log.info(`Running ${command} ${args.join(" ")} (from package.json scripts.dev).`);
18
+ const result = await runCommand(command, args, { cwd: projectRoot });
19
+ if (result.stdout) {
20
+ log.info(result.stdout.trimEnd());
21
+ }
22
+ if (result.stderr) {
23
+ log.error(result.stderr.trimEnd());
24
+ }
25
+ if (result.code !== 0) {
26
+ log.error(`Dev script exited with code ${result.code ?? "null"}.`);
27
+ return ExitCode.Failure;
28
+ }
29
+ return ExitCode.Success;
30
+ }
31
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,WAAmB,EACnB,GAAW;IAEX,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,KAAK,CACP,+HAA+H,CAChI,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,MAAM,IAAI,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtD,GAAG,CAAC,IAAI,CACN,WAAW,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,CACxE,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,GAAG,CAAC,KAAK,CAAC,+BAA+B,MAAM,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAW/C,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,CAwInB"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAe/C,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,CAiLnB"}
@@ -9,6 +9,10 @@ import { runValidate } from "./validate.js";
9
9
  const REMOTE_ENV_HINTS = [
10
10
  "CONTENTRAIL_ACCESS_TEAM_DOMAIN",
11
11
  "CONTENTRAIL_ACCESS_AUD",
12
+ "CONTENTRAIL_SITE_ID",
13
+ "CONTENTRAIL_PUBLISH_TOKEN",
14
+ "CONTENTRAIL_GITHUB_TOKEN",
15
+ "CF_API_TOKEN",
12
16
  "GITHUB_TOKEN",
13
17
  "R2_ACCESS_KEY_ID",
14
18
  "R2_SECRET_ACCESS_KEY",
@@ -39,11 +43,14 @@ export async function runDoctor(projectRoot, log) {
39
43
  log.info("OK package.json present");
40
44
  const detected = detectFrameworkFromPackage(pkg);
41
45
  if (detected === "unknown") {
42
- log.error("FAIL neither Astro nor Vite dependency detected.");
46
+ log.error("FAIL package.json could not be classified.");
43
47
  failed = true;
44
48
  }
49
+ else if (detected === "static") {
50
+ log.info("OK generic static site (read JSON from content/ in your own Next/React/vanilla build).");
51
+ }
45
52
  else {
46
- log.info(`OK framework dependency: ${detected}`);
53
+ log.info(`OK framework helper: ${detected}`);
47
54
  }
48
55
  let project;
49
56
  try {
@@ -98,6 +105,30 @@ export async function runDoctor(projectRoot, log) {
98
105
  if (deps["@contentrail/core"] === undefined) {
99
106
  recommendations.push("Add @contentrail/core for collection schemas.");
100
107
  }
108
+ if (await pathExists(path.join(projectRoot, ".git"))) {
109
+ log.info("OK git repository present");
110
+ }
111
+ else {
112
+ recommendations.push("No .git directory — Git publishing needs a connected repository.");
113
+ }
114
+ if (await pathExists(path.join(projectRoot, "functions/api"))) {
115
+ log.info("OK Pages Functions API directory present");
116
+ if (deps["@contentrail/cloudflare"] === undefined) {
117
+ recommendations.push("Add @contentrail/cloudflare for Pages Functions (server-only).");
118
+ }
119
+ }
120
+ else {
121
+ recommendations.push("No functions/api directory. Run `contentrail init --with-functions` if this site uses Pages Functions.");
122
+ }
123
+ if (project.config.cloudflare !== undefined) {
124
+ log.info(`OK cloudflare project name recorded: ${project.config.cloudflare.projectName}`);
125
+ }
126
+ else {
127
+ recommendations.push("cloudflare.accountId / projectName unset — required for `contentrail deploy status`.");
128
+ }
129
+ if (project.config.git !== undefined) {
130
+ log.info(`OK git destination recorded: ${project.config.git.owner}/${project.config.git.repo}@${project.config.git.branch}`);
131
+ }
101
132
  if (project.config.publishApiUrl !== undefined) {
102
133
  try {
103
134
  const url = new URL(project.config.publishApiUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ExitCode } from "../exit-codes.js";
2
+ import type { Logger } from "../util/print.js";
3
+ export declare function runImport(options: {
4
+ readonly projectRoot: string;
5
+ readonly collection: string;
6
+ readonly file: string;
7
+ readonly dryRun: boolean;
8
+ readonly force: boolean;
9
+ }, log: Logger): Promise<ExitCode>;
10
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,wBAAsB,SAAS,CAC7B,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,EACD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,CA4EnB"}