From 594cd4354d381a673d1ad73c0aeb4d9ae8801703 Mon Sep 17 00:00:00 2001 From: "Willow (GHOST)" Date: Fri, 6 Mar 2026 05:40:57 +0000 Subject: [PATCH] feat: add option to disable publishing (text) content --- packages/cli/src/commands/init.ts | 6 ++++++ packages/cli/src/commands/update.ts | 9 +++++++++ packages/cli/src/lib/atproto.ts | 20 +++++++++++--------- packages/cli/src/lib/config.ts | 9 ++++++++- packages/cli/src/lib/types.ts | 1 + sequoia.schema.json | 5 +++++ 6 files changed, 40 insertions(+), 10 deletions(-) diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index 4b19b4e..28abbba 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -98,6 +98,11 @@ export const initCommand = command({ message: "URL path prefix for posts:", placeholder: "/posts, /blog, /articles, etc.", }), + publishContent: () => + confirm({ + message: "Publish the post content on the standard.site document?", + initialValue: true, + }), }, { onCancel }, ); @@ -341,6 +346,7 @@ export const initCommand = command({ pdsUrl, frontmatter: frontmatterMapping, bluesky: blueskyConfig, + publishContent: siteConfig.publishContent, }); const configPath = path.join(process.cwd(), "sequoia.json"); diff --git a/packages/cli/src/commands/update.ts b/packages/cli/src/commands/update.ts index 5526801..017244d 100644 --- a/packages/cli/src/commands/update.ts +++ b/packages/cli/src/commands/update.ts @@ -162,6 +162,7 @@ async function updateConfigFlow( stripDatePrefix: configUpdated.stripDatePrefix, pathTemplate: configUpdated.pathTemplate, textContentField: configUpdated.textContentField, + publishContent: configUpdated.publishContent, bluesky: configUpdated.bluesky, }); @@ -373,6 +374,13 @@ async function editAdvanced(config: PublisherConfig): Promise { }), ); + const publishContent = exitOnCancel( + await confirm({ + message: "Publish the post content on the standard.site document?", + initialValue: config.publishContent ?? true, + }), + ); + const textContentField = exitOnCancel( await text({ message: @@ -397,6 +405,7 @@ async function editAdvanced(config: PublisherConfig): Promise { removeIndexFromSlug: removeIndexFromSlug || undefined, stripDatePrefix: stripDatePrefix || undefined, textContentField: textContentField || undefined, + publishContent: publishContent ?? true, }; } diff --git a/packages/cli/src/lib/atproto.ts b/packages/cli/src/lib/atproto.ts index 42a172c..832a291 100644 --- a/packages/cli/src/lib/atproto.ts +++ b/packages/cli/src/lib/atproto.ts @@ -252,14 +252,15 @@ export async function createDocument( ); const publishDate = new Date(post.frontmatter.publishDate); - // Determine textContent: use configured field from frontmatter, or fallback to markdown body - let textContent: string; + // Determine textContent (if enabled): use configured field from frontmatter, or fallback to markdown body + let textContent: string | null = null; if ( + config.publishContent && config.textContentField && post.rawFrontmatter?.[config.textContentField] ) { textContent = String(post.rawFrontmatter[config.textContentField]); - } else { + } else if (config.publishContent) { textContent = stripMarkdownForText(post.content); } @@ -268,7 +269,7 @@ export async function createDocument( title: post.frontmatter.title, site: config.publicationUri, path: postPath, - textContent: textContent.slice(0, 10000), + textContent: textContent?.slice(0, 10000), publishedAt: publishDate.toISOString(), canonicalUrl: `${config.siteUrl}${postPath}`, }; @@ -317,14 +318,15 @@ export async function updateDocument( ); const publishDate = new Date(post.frontmatter.publishDate); - // Determine textContent: use configured field from frontmatter, or fallback to markdown body - let textContent: string; + // Determine textContent (if enabled): use configured field from frontmatter, or fallback to markdown body + let textContent: string | null = null; if ( + config.publishContent && config.textContentField && post.rawFrontmatter?.[config.textContentField] ) { textContent = String(post.rawFrontmatter[config.textContentField]); - } else { + } else if (config.publishContent) { textContent = stripMarkdownForText(post.content); } @@ -342,7 +344,7 @@ export async function updateDocument( title: post.frontmatter.title, site: config.publicationUri, path: postPath, - textContent: textContent.slice(0, 10000), + textContent: textContent?.slice(0, 10000), publishedAt: publishDate.toISOString(), canonicalUrl: `${config.siteUrl}${postPath}`, }; @@ -384,7 +386,7 @@ export interface DocumentRecord { title: string; site: string; path: string; - textContent: string; + textContent?: string; publishedAt: string; canonicalUrl?: string; description?: string; diff --git a/packages/cli/src/lib/config.ts b/packages/cli/src/lib/config.ts index 59d4b6f..40a8b8d 100644 --- a/packages/cli/src/lib/config.ts +++ b/packages/cli/src/lib/config.ts @@ -85,10 +85,12 @@ export function generateConfigTemplate(options: { stripDatePrefix?: boolean; pathTemplate?: string; textContentField?: string; + publishContent?: boolean; bluesky?: BlueskyConfig; }): string { const config: Record = { - $schema: 'https://tangled.org/stevedylan.dev/sequoia/raw/main/sequoia.schema.json', + $schema: + "https://tangled.org/stevedylan.dev/sequoia/raw/main/sequoia.schema.json", siteUrl: options.siteUrl, contentDir: options.contentDir, }; @@ -138,6 +140,11 @@ export function generateConfigTemplate(options: { if (options.textContentField) { config.textContentField = options.textContentField; } + + if (options.publishContent) { + config.publishContent = options.publishContent; + } + if (options.bluesky) { config.bluesky = options.bluesky; } diff --git a/packages/cli/src/lib/types.ts b/packages/cli/src/lib/types.ts index be237f1..09dedfa 100644 --- a/packages/cli/src/lib/types.ts +++ b/packages/cli/src/lib/types.ts @@ -41,6 +41,7 @@ export interface PublisherConfig { stripDatePrefix?: boolean; // Remove YYYY-MM-DD- prefix from filenames (Jekyll-style, default: false) pathTemplate?: string; // URL path template with tokens like {year}/{month}/{day}/{slug} (overrides pathPrefix + slug) textContentField?: string; // Frontmatter field to use for textContent instead of markdown body + publishContent?: boolean; // Whether or not to publish the documents content on the standard.site document (default: true) bluesky?: BlueskyConfig; // Optional Bluesky posting configuration ui?: UIConfig; // Optional UI components configuration } diff --git a/sequoia.schema.json b/sequoia.schema.json index ca152df..c2ec8b7 100644 --- a/sequoia.schema.json +++ b/sequoia.schema.json @@ -116,6 +116,11 @@ "type": "string", "description": "Frontmatter field to use for textContent instead of markdown body" }, + "publishContent": { + "type": "boolean", + "description": "Whether or not to publish the documents content on the standard.site document", + "default": true + }, "bluesky": { "type": "object", "additionalProperties": false, -- 2.51.2