bunki 0.19.5 → 0.19.6

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/dist/cli.js CHANGED
@@ -35260,6 +35260,7 @@ async function parseMarkdownFile(filePath, cdnConfig) {
35260
35260
  url: `/${postYear}/${slug}/`,
35261
35261
  excerpt: data.excerpt || extractExcerpt(content),
35262
35262
  html: sanitizedHtml,
35263
+ ...data.seoTitle && { seoTitle: data.seoTitle },
35263
35264
  ...data.category && { category: data.category },
35264
35265
  ...data.business && {
35265
35266
  business: (() => {
@@ -36304,8 +36305,39 @@ function createTemplateEngine(templatesDir, watch = false) {
36304
36305
  watch
36305
36306
  });
36306
36307
  env.addFilter("date", formatDate);
36308
+ env.addFilter("titlecase", titleCase);
36307
36309
  return env;
36308
36310
  }
36311
+ var TECH_ACRONYMS = new Set([
36312
+ "ai",
36313
+ "llm",
36314
+ "api",
36315
+ "ui",
36316
+ "ux",
36317
+ "ios",
36318
+ "url",
36319
+ "seo",
36320
+ "css",
36321
+ "html",
36322
+ "js",
36323
+ "ts",
36324
+ "sql",
36325
+ "cdn",
36326
+ "aws",
36327
+ "rss",
36328
+ "sdk",
36329
+ "cli",
36330
+ "gpu",
36331
+ "cpu"
36332
+ ]);
36333
+ function titleCase(str2) {
36334
+ return str2.replace(/-/g, " ").split(" ").map((word) => {
36335
+ const lower = word.toLowerCase();
36336
+ if (TECH_ACRONYMS.has(lower))
36337
+ return lower === "ios" ? "iOS" : lower.toUpperCase();
36338
+ return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
36339
+ }).join(" ");
36340
+ }
36309
36341
  function formatDate(date, format) {
36310
36342
  const d2 = toPacificTime(date);
36311
36343
  const month = DATE.MONTHS[d2.getMonth()];
package/dist/types.d.ts CHANGED
@@ -64,6 +64,8 @@ export interface Post {
64
64
  business?: Business;
65
65
  /** Optional image URL (first image from post content, used for thumbnails and social sharing) */
66
66
  image?: string;
67
+ /** Optional short title for SEO title tag (50–65 chars). Falls back to title if not set. */
68
+ seoTitle?: string;
67
69
  /** Word count calculated from content (used for reading time and schema.org) */
68
70
  wordCount?: number;
69
71
  /** Cached JSON-LD structured data (pre-generated during initialization) */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunki",
3
- "version": "0.19.5",
3
+ "version": "0.19.6",
4
4
  "description": "An opinionated static site generator built with Bun featuring PostCSS integration and modern web development workflows",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",