@pagesmith/core 0.4.0 → 0.4.2

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 (71) hide show
  1. package/README.md +19 -0
  2. package/REFERENCE.md +160 -94
  3. package/dist/{content-config-DJXUOcNG.d.mts → content-config-Bu2HH0Yx.d.mts} +2 -2
  4. package/dist/{content-config-DJXUOcNG.d.mts.map → content-config-Bu2HH0Yx.d.mts.map} +1 -1
  5. package/dist/{content-layer-B5enqWeJ.mjs → content-layer-CJRrNpZ_.mjs} +71 -10
  6. package/dist/content-layer-CJRrNpZ_.mjs.map +1 -0
  7. package/dist/{content-layer-CpHYUYNN.d.mts → content-layer-Ckt08g2i.d.mts} +4 -3
  8. package/dist/content-layer-Ckt08g2i.d.mts.map +1 -0
  9. package/dist/create/index.d.mts.map +1 -1
  10. package/dist/create/index.mjs +5 -2
  11. package/dist/create/index.mjs.map +1 -1
  12. package/dist/css/index.mjs +1 -1
  13. package/dist/css-CO3CBqxx.mjs +24 -0
  14. package/dist/css-CO3CBqxx.mjs.map +1 -0
  15. package/dist/heading-D4X2L4vd.d.mts +12 -0
  16. package/dist/heading-D4X2L4vd.d.mts.map +1 -0
  17. package/dist/{index-C0QFHYwb.d.mts → index-B4YZRIzb.d.mts} +1 -1
  18. package/dist/{index-C0QFHYwb.d.mts.map → index-B4YZRIzb.d.mts.map} +1 -1
  19. package/dist/{index-DCznbvaV.d.mts → index-CryArLlX.d.mts} +1 -1
  20. package/dist/{index-DCznbvaV.d.mts.map → index-CryArLlX.d.mts.map} +1 -1
  21. package/dist/{index-CJkBs8YQ.d.mts → index-D44syBt-.d.mts} +3 -2
  22. package/dist/index-D44syBt-.d.mts.map +1 -0
  23. package/dist/index.d.mts +7 -6
  24. package/dist/index.d.mts.map +1 -1
  25. package/dist/index.mjs +4 -4
  26. package/dist/loaders/index.d.mts +1 -1
  27. package/dist/loaders/index.mjs +1 -1
  28. package/dist/{loaders-Cf-BXf2L.mjs → loaders-DnyWfANR.mjs} +3 -3
  29. package/dist/loaders-DnyWfANR.mjs.map +1 -0
  30. package/dist/markdown/index.d.mts +2 -2
  31. package/dist/markdown/index.mjs +1 -1
  32. package/dist/{markdown-BmDJgYeB.mjs → markdown-DMHd400a.mjs} +7 -2
  33. package/dist/{markdown-BmDJgYeB.mjs.map → markdown-DMHd400a.mjs.map} +1 -1
  34. package/dist/{heading-Dhvzlay-.d.mts → markdown-config-CDvh5aJ-.d.mts} +2 -10
  35. package/dist/markdown-config-CDvh5aJ-.d.mts.map +1 -0
  36. package/dist/mcp/index.d.mts.map +1 -1
  37. package/dist/mcp/index.mjs +1 -1
  38. package/dist/mcp/server.d.mts +1 -1
  39. package/dist/mcp/server.d.mts.map +1 -1
  40. package/dist/mcp/server.mjs +1 -1
  41. package/dist/runtime/index.d.mts.map +1 -1
  42. package/dist/runtime/index.mjs +4 -9
  43. package/dist/runtime/index.mjs.map +1 -1
  44. package/dist/schemas/index.d.mts +4 -3
  45. package/dist/{server-D3DHoh5f.mjs → server-BZA_iSen.mjs} +2 -1
  46. package/dist/server-BZA_iSen.mjs.map +1 -0
  47. package/dist/ssg-utils/index.d.mts +3 -13
  48. package/dist/ssg-utils/index.d.mts.map +1 -1
  49. package/dist/ssg-utils/index.mjs +2 -1
  50. package/dist/ssg-utils/index.mjs.map +1 -1
  51. package/dist/vite/index.d.mts +2 -2
  52. package/dist/vite/index.d.mts.map +1 -1
  53. package/dist/vite/index.mjs +5 -5
  54. package/dist/vite/index.mjs.map +1 -1
  55. package/docs/agents/AGENTS.md.template +24 -4
  56. package/docs/agents/changelog-notes.md +1 -1
  57. package/docs/agents/errors.md +61 -7
  58. package/docs/agents/migration.md +7 -7
  59. package/docs/agents/recipes.md +26 -2
  60. package/docs/agents/usage.md +66 -5
  61. package/docs/llms-full.txt +73 -15
  62. package/docs/llms.txt +46 -7
  63. package/package.json +2 -27
  64. package/dist/content-layer-B5enqWeJ.mjs.map +0 -1
  65. package/dist/content-layer-CpHYUYNN.d.mts.map +0 -1
  66. package/dist/css-BneO430t.mjs +0 -20
  67. package/dist/css-BneO430t.mjs.map +0 -1
  68. package/dist/heading-Dhvzlay-.d.mts.map +0 -1
  69. package/dist/index-CJkBs8YQ.d.mts.map +0 -1
  70. package/dist/loaders-Cf-BXf2L.mjs.map +0 -1
  71. package/dist/server-D3DHoh5f.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-config-CDvh5aJ-.d.mts","names":[],"sources":["../src/schemas/markdown-config.ts"],"mappings":";;;cAIa,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;;;;;;;KAerB,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/mcp/shared.ts"],"mappings":";;;;;;;;;iBAUgB,iBAAA,CAAkB,SAAA;;iBAOlB,qBAAA,CAAsB,SAAA,UAAmB,YAAA;;iBAKzC,cAAA,CAAe,GAAA,UAAa,IAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/mcp/shared.ts"],"mappings":";;;;;;;;;iBAUgB,iBAAA,CAAkB,SAAA;AAAlC;AAAA,iBAOgB,qBAAA,CAAsB,SAAA,UAAmB,YAAA;;iBAKzC,cAAA,CAAe,GAAA,UAAa,IAAA"}
@@ -1,2 +1,2 @@
1
- import { a as resolvePackageDocPath, i as getPackageVersion, n as startCoreMcpServer, r as asTextResource, t as createCoreMcpServer } from "../server-D3DHoh5f.mjs";
1
+ import { a as resolvePackageDocPath, i as getPackageVersion, n as startCoreMcpServer, r as asTextResource, t as createCoreMcpServer } from "../server-BZA_iSen.mjs";
2
2
  export { asTextResource, createCoreMcpServer, getPackageVersion, resolvePackageDocPath, startCoreMcpServer };
@@ -1,4 +1,4 @@
1
- import { t as ContentLayer } from "../content-layer-CpHYUYNN.mjs";
1
+ import { t as ContentLayer } from "../content-layer-Ckt08g2i.mjs";
2
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
 
4
4
  //#region src/mcp/server.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.mts","names":[],"sources":["../../src/mcp/server.ts"],"mappings":";;;;KAQY,oBAAA;EACV,KAAA,EAAO,YAAA;EACP,OAAA;AAAA;AAAA,iBAkBc,mBAAA,CAAoB,OAAA,EAAS,oBAAA,GAAuB,SAAA;AAAA,iBA8S9C,kBAAA,CAAmB,OAAA,EAAS,oBAAA,GAAuB,OAAA"}
1
+ {"version":3,"file":"server.d.mts","names":[],"sources":["../../src/mcp/server.ts"],"mappings":";;;;KAQY,oBAAA;EACV,KAAA,EAAO,YAAA;EACP,OAAA;AAAA;AAAA,iBAqBc,mBAAA,CAAoB,OAAA,EAAS,oBAAA,GAAuB,SAAA;AAAA,iBA8S9C,kBAAA,CAAmB,OAAA,EAAS,oBAAA,GAAuB,OAAA"}
@@ -1,2 +1,2 @@
1
- import { n as startCoreMcpServer, t as createCoreMcpServer } from "../server-D3DHoh5f.mjs";
1
+ import { n as startCoreMcpServer, t as createCoreMcpServer } from "../server-BZA_iSen.mjs";
2
2
  export { createCoreMcpServer, startCoreMcpServer };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/runtime/index.ts"],"mappings":";;AAqEA;;;;;AAGA;;;;;AAGA;;;iBANgB,aAAA,CAAA;AAAA,iBAGA,YAAA,CAAA;AAAA,iBAGA,iBAAA,CAAA;AAAA,iBAGA,gBAAA,CAAA;AAAA,iBAKA,aAAA,CAAA;AAAA,iBAGA,YAAA,CAAA;AAAA,iBAGA,iBAAA,CAAA;AAAA,iBAGA,gBAAA,CAAA;AAAA,iBAKA,cAAA,CAAA;AAAA,iBAGA,kBAAA,CAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/runtime/index.ts"],"mappings":";;AAgEA;;;;;AAGA;;;;;AAGA;;;iBANgB,aAAA,CAAA;AAAA,iBAGA,YAAA,CAAA;AAAA,iBAGA,iBAAA,CAAA;AAAA,iBAGA,gBAAA,CAAA;AAAA,iBAKA,aAAA,CAAA;AAAA,iBAGA,YAAA,CAAA;AAAA,iBAGA,iBAAA,CAAA;AAAA,iBAGA,gBAAA,CAAA;AAAA,iBAKA,cAAA,CAAA;AAAA,iBAGA,kBAAA,CAAA"}
@@ -1,4 +1,4 @@
1
- import { readFileSync } from "fs";
1
+ import { existsSync, readFileSync } from "fs";
2
2
  import { dirname, join } from "path";
3
3
  import { fileURLToPath } from "url";
4
4
  //#region src/runtime/index.ts
@@ -33,6 +33,7 @@ function readAsset(relPath) {
33
33
  for (const dir of ["dist", "src"]) try {
34
34
  return readFileSync(join(pkgDir, dir, relPath), "utf-8");
35
35
  } catch {}
36
+ console.warn(`[pagesmith] Asset not found: ${relPath}`);
36
37
  return "";
37
38
  }
38
39
  function resolveAssetPath(relPath) {
@@ -40,17 +41,11 @@ function resolveAssetPath(relPath) {
40
41
  const mapped = ASSET_PATHS[relPath];
41
42
  if (mapped) {
42
43
  const path = join(pkgDir, "src", mapped);
43
- try {
44
- readFileSync(path);
45
- return path;
46
- } catch {}
44
+ if (existsSync(path)) return path;
47
45
  }
48
46
  for (const dir of ["dist", "src"]) {
49
47
  const path = join(pkgDir, dir, relPath);
50
- try {
51
- readFileSync(path);
52
- return path;
53
- } catch {}
48
+ if (existsSync(path)) return path;
54
49
  }
55
50
  return join(pkgDir, "dist", relPath);
56
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/runtime/index.ts"],"sourcesContent":["/**\n * Runtime CSS/JS exports.\n *\n * Provides pre-built CSS and JS paths for consumers who want\n * ready-to-use styling and interactivity for rendered content.\n *\n * Two tiers:\n * - \"Runtime\" (standalone): full site — reset, prose, layout, TOC\n * - \"Content\": just markdown rendering — reset, prose, viewport\n *\n * Code block styling is handled by Expressive Code (injected inline\n * during markdown processing). The CSS bundles here cover prose,\n * inline code, and layout only.\n */\n\nimport { readFileSync } from 'fs'\nimport { dirname, join } from 'path'\nimport { fileURLToPath } from 'url'\n\nconst ASSET_PATHS: Record<string, string> = {\n 'standalone.css': 'styles/standalone.css',\n 'content.css': 'styles/content.css',\n 'styles/viewport.css': 'styles/viewport.css',\n}\n\nfunction getPackageDir(): string {\n const thisDir = dirname(fileURLToPath(import.meta.url))\n // From src/runtime/ → src/ → package root\n // From dist/runtime/ → dist/ → package root\n return join(thisDir, '..', '..')\n}\n\nfunction readAsset(relPath: string): string {\n const pkgDir = getPackageDir()\n const mapped = ASSET_PATHS[relPath]\n if (mapped) {\n try {\n return readFileSync(join(pkgDir, 'src', mapped), 'utf-8')\n } catch {}\n }\n for (const dir of ['dist', 'src']) {\n try {\n return readFileSync(join(pkgDir, dir, relPath), 'utf-8')\n } catch {}\n }\n return ''\n}\n\nfunction resolveAssetPath(relPath: string): string {\n const pkgDir = getPackageDir()\n const mapped = ASSET_PATHS[relPath]\n if (mapped) {\n const path = join(pkgDir, 'src', mapped)\n try {\n readFileSync(path)\n return path\n } catch {}\n }\n for (const dir of ['dist', 'src']) {\n const path = join(pkgDir, dir, relPath)\n try {\n readFileSync(path)\n return path\n } catch {}\n }\n return join(pkgDir, 'dist', relPath)\n}\n\n// Standalone (full site)\nexport function getRuntimeCSS(): string {\n return readAsset('standalone.css')\n}\nexport function getRuntimeJS(): string {\n return readAsset('standalone.js')\n}\nexport function getRuntimeCSSPath(): string {\n return resolveAssetPath('standalone.css')\n}\nexport function getRuntimeJSPath(): string {\n return resolveAssetPath('standalone.js')\n}\n\n// Content (markdown rendering only)\nexport function getContentCSS(): string {\n return readAsset('content.css')\n}\nexport function getContentJS(): string {\n return readAsset('content.js')\n}\nexport function getContentCSSPath(): string {\n return resolveAssetPath('content.css')\n}\nexport function getContentJSPath(): string {\n return resolveAssetPath('content.js')\n}\n\n// Individual CSS files\nexport function getViewportCSS(): string {\n return readAsset('styles/viewport.css')\n}\nexport function getViewportCSSPath(): string {\n return resolveAssetPath('styles/viewport.css')\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,MAAM,cAAsC;CAC1C,kBAAkB;CAClB,eAAe;CACf,uBAAuB;CACxB;AAED,SAAS,gBAAwB;AAI/B,QAAO,KAHS,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC,EAGlC,MAAM,KAAK;;AAGlC,SAAS,UAAU,SAAyB;CAC1C,MAAM,SAAS,eAAe;CAC9B,MAAM,SAAS,YAAY;AAC3B,KAAI,OACF,KAAI;AACF,SAAO,aAAa,KAAK,QAAQ,OAAO,OAAO,EAAE,QAAQ;SACnD;AAEV,MAAK,MAAM,OAAO,CAAC,QAAQ,MAAM,CAC/B,KAAI;AACF,SAAO,aAAa,KAAK,QAAQ,KAAK,QAAQ,EAAE,QAAQ;SAClD;AAEV,QAAO;;AAGT,SAAS,iBAAiB,SAAyB;CACjD,MAAM,SAAS,eAAe;CAC9B,MAAM,SAAS,YAAY;AAC3B,KAAI,QAAQ;EACV,MAAM,OAAO,KAAK,QAAQ,OAAO,OAAO;AACxC,MAAI;AACF,gBAAa,KAAK;AAClB,UAAO;UACD;;AAEV,MAAK,MAAM,OAAO,CAAC,QAAQ,MAAM,EAAE;EACjC,MAAM,OAAO,KAAK,QAAQ,KAAK,QAAQ;AACvC,MAAI;AACF,gBAAa,KAAK;AAClB,UAAO;UACD;;AAEV,QAAO,KAAK,QAAQ,QAAQ,QAAQ;;AAItC,SAAgB,gBAAwB;AACtC,QAAO,UAAU,iBAAiB;;AAEpC,SAAgB,eAAuB;AACrC,QAAO,UAAU,gBAAgB;;AAEnC,SAAgB,oBAA4B;AAC1C,QAAO,iBAAiB,iBAAiB;;AAE3C,SAAgB,mBAA2B;AACzC,QAAO,iBAAiB,gBAAgB;;AAI1C,SAAgB,gBAAwB;AACtC,QAAO,UAAU,cAAc;;AAEjC,SAAgB,eAAuB;AACrC,QAAO,UAAU,aAAa;;AAEhC,SAAgB,oBAA4B;AAC1C,QAAO,iBAAiB,cAAc;;AAExC,SAAgB,mBAA2B;AACzC,QAAO,iBAAiB,aAAa;;AAIvC,SAAgB,iBAAyB;AACvC,QAAO,UAAU,sBAAsB;;AAEzC,SAAgB,qBAA6B;AAC3C,QAAO,iBAAiB,sBAAsB"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/runtime/index.ts"],"sourcesContent":["/**\n * Runtime CSS/JS exports.\n *\n * Provides pre-built CSS and JS paths for consumers who want\n * ready-to-use styling and interactivity for rendered content.\n *\n * Two tiers:\n * - \"Runtime\" (standalone): full site — reset, prose, layout, TOC\n * - \"Content\": just markdown rendering — reset, prose, viewport\n *\n * Code block styling is handled by Expressive Code (injected inline\n * during markdown processing). The CSS bundles here cover prose,\n * inline code, and layout only.\n */\n\nimport { existsSync, readFileSync } from 'fs'\nimport { dirname, join } from 'path'\nimport { fileURLToPath } from 'url'\n\nconst ASSET_PATHS: Record<string, string> = {\n 'standalone.css': 'styles/standalone.css',\n 'content.css': 'styles/content.css',\n 'styles/viewport.css': 'styles/viewport.css',\n}\n\nfunction getPackageDir(): string {\n const thisDir = dirname(fileURLToPath(import.meta.url))\n // From src/runtime/ → src/ → package root\n // From dist/runtime/ → dist/ → package root\n return join(thisDir, '..', '..')\n}\n\nfunction readAsset(relPath: string): string {\n const pkgDir = getPackageDir()\n const mapped = ASSET_PATHS[relPath]\n if (mapped) {\n try {\n return readFileSync(join(pkgDir, 'src', mapped), 'utf-8')\n } catch {}\n }\n for (const dir of ['dist', 'src']) {\n try {\n return readFileSync(join(pkgDir, dir, relPath), 'utf-8')\n } catch {}\n }\n console.warn(`[pagesmith] Asset not found: ${relPath}`)\n return ''\n}\n\nfunction resolveAssetPath(relPath: string): string {\n const pkgDir = getPackageDir()\n const mapped = ASSET_PATHS[relPath]\n if (mapped) {\n const path = join(pkgDir, 'src', mapped)\n if (existsSync(path)) return path\n }\n for (const dir of ['dist', 'src']) {\n const path = join(pkgDir, dir, relPath)\n if (existsSync(path)) return path\n }\n return join(pkgDir, 'dist', relPath)\n}\n\n// Standalone (full site)\nexport function getRuntimeCSS(): string {\n return readAsset('standalone.css')\n}\nexport function getRuntimeJS(): string {\n return readAsset('standalone.js')\n}\nexport function getRuntimeCSSPath(): string {\n return resolveAssetPath('standalone.css')\n}\nexport function getRuntimeJSPath(): string {\n return resolveAssetPath('standalone.js')\n}\n\n// Content (markdown rendering only)\nexport function getContentCSS(): string {\n return readAsset('content.css')\n}\nexport function getContentJS(): string {\n return readAsset('content.js')\n}\nexport function getContentCSSPath(): string {\n return resolveAssetPath('content.css')\n}\nexport function getContentJSPath(): string {\n return resolveAssetPath('content.js')\n}\n\n// Individual CSS files\nexport function getViewportCSS(): string {\n return readAsset('styles/viewport.css')\n}\nexport function getViewportCSSPath(): string {\n return resolveAssetPath('styles/viewport.css')\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,MAAM,cAAsC;CAC1C,kBAAkB;CAClB,eAAe;CACf,uBAAuB;CACxB;AAED,SAAS,gBAAwB;AAI/B,QAAO,KAHS,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC,EAGlC,MAAM,KAAK;;AAGlC,SAAS,UAAU,SAAyB;CAC1C,MAAM,SAAS,eAAe;CAC9B,MAAM,SAAS,YAAY;AAC3B,KAAI,OACF,KAAI;AACF,SAAO,aAAa,KAAK,QAAQ,OAAO,OAAO,EAAE,QAAQ;SACnD;AAEV,MAAK,MAAM,OAAO,CAAC,QAAQ,MAAM,CAC/B,KAAI;AACF,SAAO,aAAa,KAAK,QAAQ,KAAK,QAAQ,EAAE,QAAQ;SAClD;AAEV,SAAQ,KAAK,gCAAgC,UAAU;AACvD,QAAO;;AAGT,SAAS,iBAAiB,SAAyB;CACjD,MAAM,SAAS,eAAe;CAC9B,MAAM,SAAS,YAAY;AAC3B,KAAI,QAAQ;EACV,MAAM,OAAO,KAAK,QAAQ,OAAO,OAAO;AACxC,MAAI,WAAW,KAAK,CAAE,QAAO;;AAE/B,MAAK,MAAM,OAAO,CAAC,QAAQ,MAAM,EAAE;EACjC,MAAM,OAAO,KAAK,QAAQ,KAAK,QAAQ;AACvC,MAAI,WAAW,KAAK,CAAE,QAAO;;AAE/B,QAAO,KAAK,QAAQ,QAAQ,QAAQ;;AAItC,SAAgB,gBAAwB;AACtC,QAAO,UAAU,iBAAiB;;AAEpC,SAAgB,eAAuB;AACrC,QAAO,UAAU,gBAAgB;;AAEnC,SAAgB,oBAA4B;AAC1C,QAAO,iBAAiB,iBAAiB;;AAE3C,SAAgB,mBAA2B;AACzC,QAAO,iBAAiB,gBAAgB;;AAI1C,SAAgB,gBAAwB;AACtC,QAAO,UAAU,cAAc;;AAEjC,SAAgB,eAAuB;AACrC,QAAO,UAAU,aAAa;;AAEhC,SAAgB,oBAA4B;AAC1C,QAAO,iBAAiB,cAAc;;AAExC,SAAgB,mBAA2B;AACzC,QAAO,iBAAiB,aAAa;;AAIvC,SAAgB,iBAAyB;AACvC,QAAO,UAAU,sBAAsB;;AAEzC,SAAgB,qBAA6B;AAC3C,QAAO,iBAAiB,sBAAsB"}
@@ -1,4 +1,5 @@
1
- import { c as RawEntry, i as CollectionDef, n as ContentPlugin, t as ContentLayerConfig } from "../content-config-DJXUOcNG.mjs";
2
- import { i as MarkdownConfigSchema, n as HeadingSchema, r as MarkdownConfig, t as Heading } from "../heading-Dhvzlay-.mjs";
3
- import { a as ProjectFrontmatter, i as BlogFrontmatterSchema, n as BaseFrontmatterSchema, o as ProjectFrontmatterSchema, r as BlogFrontmatter, t as BaseFrontmatter } from "../index-C0QFHYwb.mjs";
1
+ import { c as RawEntry, i as CollectionDef, n as ContentPlugin, t as ContentLayerConfig } from "../content-config-Bu2HH0Yx.mjs";
2
+ import { n as MarkdownConfigSchema, t as MarkdownConfig } from "../markdown-config-CDvh5aJ-.mjs";
3
+ import { n as HeadingSchema, t as Heading } from "../heading-D4X2L4vd.mjs";
4
+ import { a as ProjectFrontmatter, i as BlogFrontmatterSchema, n as BaseFrontmatterSchema, o as ProjectFrontmatterSchema, r as BlogFrontmatter, t as BaseFrontmatter } from "../index-B4YZRIzb.mjs";
4
5
  export { BaseFrontmatter, BaseFrontmatterSchema, BlogFrontmatter, BlogFrontmatterSchema, CollectionDef, ContentLayerConfig, ContentPlugin, Heading, HeadingSchema, MarkdownConfig, MarkdownConfigSchema, ProjectFrontmatter, ProjectFrontmatterSchema, RawEntry };
@@ -36,6 +36,7 @@ function getLoaderType(loader) {
36
36
  function getSchemaFieldNames(schema) {
37
37
  if (schema instanceof z.ZodObject) return Object.keys(schema.shape);
38
38
  if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable) return getSchemaFieldNames(schema.unwrap());
39
+ if (schema instanceof z.ZodDefault) return getSchemaFieldNames(schema._def.innerType);
39
40
  }
40
41
  function createCoreMcpServer(options) {
41
42
  const { layer } = options;
@@ -199,4 +200,4 @@ async function startCoreMcpServer(options) {
199
200
  //#endregion
200
201
  export { resolvePackageDocPath as a, getPackageVersion as i, startCoreMcpServer as n, asTextResource as r, createCoreMcpServer as t };
201
202
 
202
- //# sourceMappingURL=server-D3DHoh5f.mjs.map
203
+ //# sourceMappingURL=server-BZA_iSen.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-BZA_iSen.mjs","names":[],"sources":["../src/mcp/shared.ts","../src/mcp/server.ts"],"sourcesContent":["/**\n * Shared MCP server utilities.\n *\n * Common helpers used by both @pagesmith/core and @pagesmith/docs MCP servers.\n */\n\nimport { existsSync, readFileSync } from 'fs'\nimport { resolve } from 'path'\n\n/** Read the package version from a package.json relative to the calling module. */\nexport function getPackageVersion(moduleDir: string): string {\n const pkgPath = resolve(moduleDir, '..', '..', 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version?: string }\n return pkg.version ?? '0.0.0'\n}\n\n/** Resolve a doc file path relative to the package root. */\nexport function resolvePackageDocPath(moduleDir: string, relativePath: string): string {\n return resolve(moduleDir, '..', '..', relativePath)\n}\n\n/** Load a file as an MCP text resource response. Throws if the file doesn't exist. */\nexport function asTextResource(uri: string, path: string) {\n if (!existsSync(path)) {\n throw new Error(`Resource file not found: ${path}`)\n }\n\n return {\n contents: [\n {\n uri,\n mimeType: 'text/markdown',\n text: readFileSync(path, 'utf-8'),\n },\n ],\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { basename, resolve } from 'path'\nimport { z } from 'zod'\nimport type { ContentLayer } from '../content-layer.js'\nimport type { Loader } from '../loaders/types.js'\nimport { asTextResource, getPackageVersion, resolvePackageDocPath } from './shared.js'\n\nexport type CoreMcpServerOptions = {\n layer: ContentLayer\n rootDir?: string\n}\n\nfunction getLoaderType(loader: string | Loader): string {\n if (typeof loader === 'string') return loader\n return loader.name ?? 'custom'\n}\n\nfunction getSchemaFieldNames(schema: z.ZodType): string[] | undefined {\n if (schema instanceof z.ZodObject) {\n return Object.keys(schema.shape)\n }\n if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable) {\n return getSchemaFieldNames(schema.unwrap() as z.ZodType)\n }\n if (schema instanceof z.ZodDefault) {\n return getSchemaFieldNames(schema._def.innerType as z.ZodType)\n }\n return undefined\n}\n\nexport function createCoreMcpServer(options: CoreMcpServerOptions): McpServer {\n const { layer } = options\n const baseRoot = resolve(options.rootDir ?? process.cwd())\n\n const server = new McpServer(\n {\n name: '@pagesmith/core-mcp',\n version: getPackageVersion(import.meta.dirname),\n },\n {\n instructions: [\n 'Use core_* tools to inspect @pagesmith/core content layers.',\n `Root directory: ${baseRoot}`,\n ].join('\\n'),\n },\n )\n\n // ── Tools ──\n\n server.registerTool(\n 'core_list_collections',\n {\n description:\n 'List all configured collections with their loader type, directory, and schema field names.',\n inputSchema: {},\n },\n async () => {\n const names = layer.getCollectionNames()\n const collections = names.map((name) => {\n const def = layer.getCollectionDef(name)\n return {\n name,\n loader: def ? getLoaderType(def.loader) : 'unknown',\n directory: def?.directory,\n schemaFields: def ? getSchemaFieldNames(def.schema) : undefined,\n }\n })\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(collections, null, 2),\n },\n ],\n }\n },\n )\n\n server.registerTool(\n 'core_list_entries',\n {\n description:\n 'List entries in a collection with slug, title, description, and file path. Does not render content. Supports pagination via limit/offset.',\n inputSchema: {\n collection: z.string().describe('Collection name'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(200)\n .default(50)\n .describe('Maximum number of entries to return (default 50)'),\n offset: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Number of entries to skip (default 0)'),\n },\n },\n async ({\n collection,\n limit,\n offset,\n }: {\n collection: string\n limit: number\n offset: number\n }) => {\n const entries = await layer.getCollection(collection)\n const total = entries.length\n const page = entries.slice(offset, offset + limit)\n\n const items = page.map((entry) => {\n const data = (entry.data ?? {}) as Record<string, unknown>\n return {\n slug: entry.slug,\n title: typeof data.title === 'string' ? data.title : undefined,\n description: typeof data.description === 'string' ? data.description : undefined,\n filePath: entry.filePath,\n }\n })\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n collection,\n total,\n offset,\n limit,\n count: items.length,\n entries: items,\n },\n null,\n 2,\n ),\n },\n ],\n }\n },\n )\n\n server.registerTool(\n 'core_get_entry',\n {\n description:\n 'Load a single content entry by collection name and slug. Returns slug, validated data, rendered HTML, headings, and read time.',\n inputSchema: {\n collection: z.string().describe('Collection name'),\n slug: z.string().describe('Entry slug'),\n },\n },\n async ({ collection, slug }: { collection: string; slug: string }) => {\n const entry = await layer.getEntry(collection, slug)\n if (!entry) {\n throw new Error(`Entry not found: ${collection}/${slug}`)\n }\n\n const rendered = await entry.render()\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n slug: entry.slug,\n collection: entry.collection,\n filePath: entry.filePath,\n data: entry.data,\n html: rendered.html,\n headings: rendered.headings,\n readTime: rendered.readTime,\n },\n null,\n 2,\n ),\n },\n ],\n }\n },\n )\n\n server.registerTool(\n 'core_validate',\n {\n description:\n 'Run validation on a specific collection or all collections. Returns structured validation results with error and warning counts.',\n inputSchema: {\n collection: z.string().optional().describe('Collection name (omit to validate all)'),\n },\n },\n async ({ collection }: { collection?: string }) => {\n const results = await layer.validate(collection)\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(results, null, 2),\n },\n ],\n }\n },\n )\n\n server.registerTool(\n 'core_search_entries',\n {\n description:\n 'Search entries across collections by matching a query string against titles, descriptions, tags, and slugs. Case-insensitive. Returns up to 20 matches.',\n inputSchema: {\n query: z.string().describe('Search query string'),\n collection: z.string().optional().describe('Limit search to a specific collection'),\n },\n },\n async ({ query, collection }: { query: string; collection?: string }) => {\n if (!query.trim()) {\n return {\n content: [\n { type: 'text', text: JSON.stringify({ query, matches: [], count: 0 }, null, 2) },\n ],\n }\n }\n\n const queryLower = query.toLowerCase()\n const maxResults = 20\n const collectionNames = collection ? [collection] : layer.getCollectionNames()\n\n type SearchMatch = {\n collection: string\n slug: string\n title?: string\n description?: string\n filePath: string\n }\n\n const matches: SearchMatch[] = []\n\n for (const name of collectionNames) {\n if (matches.length >= maxResults) break\n const entries = await layer.getCollection(name)\n for (const entry of entries) {\n if (matches.length >= maxResults) break\n const data = (entry.data ?? {}) as Record<string, unknown>\n const title = typeof data.title === 'string' ? data.title : ''\n const description = typeof data.description === 'string' ? data.description : ''\n const tags = Array.isArray(data.tags) ? data.tags.join(' ') : ''\n const searchText = `${entry.slug} ${title} ${description} ${tags}`.toLowerCase()\n\n if (searchText.includes(queryLower)) {\n matches.push({\n collection: name,\n slug: entry.slug,\n title: title || undefined,\n description: description || undefined,\n filePath: entry.filePath,\n })\n }\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n { query, collection: collection ?? null, count: matches.length, matches },\n null,\n 2,\n ),\n },\n ],\n }\n },\n )\n\n // ── Resources ──\n\n server.registerResource(\n 'core-agent-usage',\n 'pagesmith://core/agents/usage',\n {\n title: '@pagesmith/core agent usage',\n description: 'Version-matched AI usage guide for @pagesmith/core.',\n mimeType: 'text/markdown',\n },\n async () =>\n asTextResource(\n 'pagesmith://core/agents/usage',\n resolvePackageDocPath(import.meta.dirname, 'docs/agents/usage.md'),\n ),\n )\n\n server.registerResource(\n 'core-llms-full',\n 'pagesmith://core/llms-full',\n {\n title: '@pagesmith/core llms-full',\n description: 'Version-matched full AI reference for @pagesmith/core.',\n mimeType: 'text/markdown',\n },\n async () =>\n asTextResource(\n 'pagesmith://core/llms-full',\n resolvePackageDocPath(import.meta.dirname, 'docs/llms-full.txt'),\n ),\n )\n\n server.registerResource(\n 'core-reference',\n 'pagesmith://core/reference',\n {\n title: '@pagesmith/core reference',\n description:\n 'Core package reference for content layer, schemas, loaders, and markdown pipeline.',\n mimeType: 'text/markdown',\n },\n async () =>\n asTextResource(\n 'pagesmith://core/reference',\n resolvePackageDocPath(import.meta.dirname, 'REFERENCE.md'),\n ),\n )\n\n return server\n}\n\nexport async function startCoreMcpServer(options: CoreMcpServerOptions): Promise<void> {\n const server = createCoreMcpServer(options)\n const transport = new StdioServerTransport()\n await server.connect(transport)\n // Keep logs on stderr; stdout is reserved for MCP protocol messages.\n console.error(\n `[pagesmith:mcp] @pagesmith/core MCP server started (root=${basename(resolve(options.rootDir ?? process.cwd()))})`,\n )\n}\n"],"mappings":"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"}
@@ -1,16 +1,6 @@
1
+ import { t as Heading } from "../heading-D4X2L4vd.mjs";
2
+
1
3
  //#region src/ssg-utils/index.d.ts
2
- /**
3
- * Shared SSG utilities for framework example sites.
4
- *
5
- * Provides types that match virtual module output, icon SVGs,
6
- * route helpers, date formatting, and HTML document rendering
7
- * used across all framework examples.
8
- */
9
- type Heading = {
10
- depth: number;
11
- slug: string;
12
- text: string;
13
- };
14
4
  type MarkdownEntry<T extends Record<string, unknown> = Record<string, unknown>> = {
15
5
  contentSlug: string;
16
6
  html: string;
@@ -57,5 +47,5 @@ type DocumentShellOptions = {
57
47
  };
58
48
  declare function renderDocumentShell(options: DocumentShellOptions): string;
59
49
  //#endregion
60
- export { DocumentShellOptions, Heading, MarkdownEntry, NavEntry, NavGroup, buildNavEntries, closeIcon, escapeHtml, estimateReadTime, formatDate, getTime, groupByField, leafSlug, menuIcon, normalizeRoute, renderDocumentShell, routeFor, searchIcon, toIso };
50
+ export { DocumentShellOptions, type Heading, MarkdownEntry, NavEntry, NavGroup, buildNavEntries, closeIcon, escapeHtml, estimateReadTime, formatDate, getTime, groupByField, leafSlug, menuIcon, normalizeRoute, renderDocumentShell, routeFor, searchIcon, toIso };
61
51
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/ssg-utils/index.ts"],"mappings":";;AAUA;;;;;;KAAY,OAAA;EACV,KAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,KAGU,aAAA,WAAwB,MAAA,oBAA0B,MAAA;EAC5D,WAAA;EACA,IAAA;EACA,QAAA,EAAU,OAAA;EACV,WAAA,EAAa,CAAA;AAAA;AAAA,KAGH,QAAA;EACV,IAAA;EACA,KAAA;EACA,WAAA;EACA,GAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,KAGU,QAAA;EACV,MAAA;EACA,KAAA,EAAO,QAAA;AAAA;AAAA,cAKI,QAAA;AAAA,cAEA,SAAA;AAAA,cAEA,UAAA;AAAA,iBAKG,cAAA,CAAe,GAAA,UAAa,IAAA;AAAA,iBAO5B,QAAA,CAAS,WAAA,UAAqB,UAAA;AAAA,iBAI9B,QAAA,CACd,KAAA,EAAO,aAAA,EACP,UAAA,UACA,OAAA;EAAY,QAAA;AAAA;AAAA,iBASE,OAAA,CAAQ,IAAA,WAAe,IAAA;AAAA,iBAKvB,KAAA,CAAM,IAAA,WAAe,IAAA;AAAA,iBAKrB,UAAA,CAAW,GAAA;AAAA,iBAWX,gBAAA,CAAiB,IAAA;AAAA,iBAKjB,UAAA,CAAW,KAAA;AAAA,iBASX,eAAA,CACd,OAAA,EAAS,aAAA,IACT,IAAA,UACA,OAAA,WACC,QAAA;AAAA,iBAWa,YAAA,CACd,OAAA,EAAS,aAAA,IACT,IAAA,UACA,OAAA,UACA,KAAA,UACA,QAAA,YACC,QAAA;AAAA,KAuBS,oBAAA;EACV,KAAA;EACA,WAAA;EACA,QAAA;EACA,OAAA;EACA,MAAA;EACA,aAAA;EACA,QAAA;EACA,WAAA;EACA,QAAA;AAAA;AAAA,iBAGc,mBAAA,CAAoB,OAAA,EAAS,oBAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/ssg-utils/index.ts"],"mappings":";;;KAcY,aAAA,WAAwB,MAAA,oBAA0B,MAAA;EAC5D,WAAA;EACA,IAAA;EACA,QAAA,EAAU,OAAA;EACV,WAAA,EAAa,CAAA;AAAA;AAAA,KAGH,QAAA;EACV,IAAA;EACA,KAAA;EACA,WAAA;EACA,GAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,KAGU,QAAA;EACV,MAAA;EACA,KAAA,EAAO,QAAA;AAAA;AAAA,cAKI,QAAA;AAAA,cAEA,SAAA;AAAA,cAEA,UAAA;AAAA,iBAKG,cAAA,CAAe,GAAA,UAAa,IAAA;AAAA,iBAO5B,QAAA,CAAS,WAAA,UAAqB,UAAA;AAAA,iBAK9B,QAAA,CACd,KAAA,EAAO,aAAA,EACP,UAAA,UACA,OAAA;EAAY,QAAA;AAAA;AAAA,iBASE,OAAA,CAAQ,IAAA,WAAe,IAAA;AAAA,iBAKvB,KAAA,CAAM,IAAA,WAAe,IAAA;AAAA,iBAKrB,UAAA,CAAW,GAAA;AAAA,iBAWX,gBAAA,CAAiB,IAAA;AAAA,iBAKjB,UAAA,CAAW,KAAA;AAAA,iBASX,eAAA,CACd,OAAA,EAAS,aAAA,IACT,IAAA,UACA,OAAA,WACC,QAAA;AAAA,iBAWa,YAAA,CACd,OAAA,EAAS,aAAA,IACT,IAAA,UACA,OAAA,UACA,KAAA,UACA,QAAA,YACC,QAAA;AAAA,KAuBS,oBAAA;EACV,KAAA;EACA,WAAA;EACA,QAAA;EACA,OAAA;EACA,MAAA;EACA,aAAA;EACA,QAAA;EACA,WAAA;EACA,QAAA;AAAA;AAAA,iBAGc,mBAAA,CAAoB,OAAA,EAAS,oBAAA"}
@@ -9,7 +9,8 @@ function normalizeRoute(url, base) {
9
9
  return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
10
10
  }
11
11
  function leafSlug(contentSlug, collection) {
12
- return contentSlug.replace(new RegExp(`^${collection}/`), "");
12
+ const escaped = collection.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
13
+ return contentSlug.replace(new RegExp(`^${escaped}/`), "");
13
14
  }
14
15
  function routeFor(entry, collection, options) {
15
16
  const slug = leafSlug(entry.contentSlug, collection);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/ssg-utils/index.ts"],"sourcesContent":["/**\n * Shared SSG utilities for framework example sites.\n *\n * Provides types that match virtual module output, icon SVGs,\n * route helpers, date formatting, and HTML document rendering\n * used across all framework examples.\n */\n\n// ── Types ──\n\nexport type Heading = {\n depth: number\n slug: string\n text: string\n}\n\nexport type MarkdownEntry<T extends Record<string, unknown> = Record<string, unknown>> = {\n contentSlug: string\n html: string\n headings: Heading[]\n frontmatter: T\n}\n\nexport type NavEntry = {\n slug: string\n title: string\n description?: string\n url: string\n date?: string\n tags?: string[]\n}\n\nexport type NavGroup = {\n series: string\n items: NavEntry[]\n}\n\n// ── Icons ──\n\nexport const menuIcon =\n '<svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"M3 5h14M3 10h14M3 15h14\"/></svg>'\nexport const closeIcon =\n '<svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"m5 5 10 10M15 5 5 15\"/></svg>'\nexport const searchIcon =\n '<svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><circle cx=\"8.5\" cy=\"8.5\" r=\"5.5\"/><path d=\"m13 13 4 4\"/></svg>'\n\n// ── Route helpers ──\n\nexport function normalizeRoute(url: string, base: string): string {\n if (!base || !url.startsWith(base)) return url === '' ? '/' : url\n const trimmed = url.slice(base.length)\n if (trimmed === '') return '/'\n return trimmed.startsWith('/') ? trimmed : `/${trimmed}`\n}\n\nexport function leafSlug(contentSlug: string, collection: string): string {\n return contentSlug.replace(new RegExp(`^${collection}/`), '')\n}\n\nexport function routeFor(\n entry: MarkdownEntry,\n collection: string,\n options?: { topLevel?: string[] },\n): string {\n const slug = leafSlug(entry.contentSlug, collection)\n const topLevel = options?.topLevel ?? ['pages']\n return topLevel.includes(collection) ? `/${slug}` : `/${collection}/${slug}`\n}\n\n// ── Date helpers ──\n\nexport function getTime(date: string | Date | undefined): number {\n if (!date) return 0\n return date instanceof Date ? date.getTime() : new Date(date).getTime()\n}\n\nexport function toIso(date: string | Date | undefined): string | undefined {\n if (!date) return undefined\n return (date instanceof Date ? date : new Date(date)).toISOString()\n}\n\nexport function formatDate(iso: string): string {\n const date = new Date(iso)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n })\n}\n\n// ── Content helpers ──\n\nexport function estimateReadTime(html: string): number {\n const text = html.replace(/<[^>]+>/g, ' ')\n return Math.max(1, Math.ceil(text.split(/\\s+/).filter(Boolean).length / 200))\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n}\n\nexport function buildNavEntries(\n entries: MarkdownEntry[],\n base: string,\n section: string,\n): NavEntry[] {\n return entries.map((entry) => ({\n slug: leafSlug(entry.contentSlug, section),\n title: (entry.frontmatter.title as string) ?? '',\n description: entry.frontmatter.description as string | undefined,\n url: `${base}/${section}/${leafSlug(entry.contentSlug, section)}`,\n date: toIso(entry.frontmatter.date as string | Date | undefined),\n tags: (entry.frontmatter.tags as string[]) ?? [],\n }))\n}\n\nexport function groupByField(\n entries: MarkdownEntry[],\n base: string,\n section: string,\n field: string,\n fallback = 'Other',\n): NavGroup[] {\n const groups: NavGroup[] = []\n const seen = new Map<string, NavEntry[]>()\n\n for (const entry of entries) {\n const series = (entry.frontmatter[field] as string) ?? fallback\n if (!seen.has(series)) {\n const items: NavEntry[] = []\n seen.set(series, items)\n groups.push({ series, items })\n }\n seen.get(series)!.push({\n slug: leafSlug(entry.contentSlug, section),\n title: (entry.frontmatter.title as string) ?? '',\n url: `${base}/${section}/${leafSlug(entry.contentSlug, section)}`,\n })\n }\n\n return groups\n}\n\n// ── HTML document shell ──\n\nexport type DocumentShellOptions = {\n title: string\n description?: string\n basePath: string\n cssPath: string\n jsPath?: string\n searchEnabled?: boolean\n bodyHtml: string\n sidebarHtml?: string\n headHtml?: string\n}\n\nexport function renderDocumentShell(options: DocumentShellOptions): string {\n const {\n title,\n description,\n basePath,\n cssPath,\n jsPath,\n searchEnabled,\n bodyHtml,\n sidebarHtml,\n headHtml,\n } = options\n const base = basePath.replace(/\\/+$/, '')\n\n return `<html lang=\"en\" class=\"no-js\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"color-scheme\" content=\"light dark\" />\n <title>${escapeHtml(title)}</title>\n ${description ? `<meta name=\"description\" content=\"${escapeHtml(description)}\" />` : ''}\n <meta property=\"og:type\" content=\"website\" />\n <meta property=\"og:title\" content=\"${escapeHtml(title)}\" />\n ${description ? `<meta property=\"og:description\" content=\"${escapeHtml(description)}\" />` : ''}\n <link rel=\"icon\" href=\"${base}/favicon.svg\" type=\"image/svg+xml\" />\n <link rel=\"stylesheet\" href=\"${base}/assets/fonts.css\" />\n <link rel=\"stylesheet\" href=\"${cssPath}\" />\n ${searchEnabled ? `<link rel=\"stylesheet\" href=\"${base}/pagefind/pagefind-ui.css\" />` : ''}\n <script>document.documentElement.classList.remove('no-js')</script>\n ${searchEnabled ? `<script src=\"${base}/pagefind/pagefind-ui.js\" defer></script>` : ''}\n ${searchEnabled ? '<noscript><style>.doc-search-trigger{display:none!important}</style></noscript>' : ''}\n ${headHtml ?? ''}\n </head>\n <body>\n ${bodyHtml}\n ${\n sidebarHtml\n ? `<dialog class=\"doc-sidebar-modal\" id=\"sidebar-modal\">\n <div class=\"doc-sidebar-modal-backdrop\" data-sidebar-close=\"\"></div>\n <div class=\"doc-sidebar-modal-panel\">\n <button type=\"button\" class=\"doc-sidebar-modal-close\" data-sidebar-close=\"\" aria-label=\"Close navigation\">${closeIcon}</button>\n <nav class=\"doc-sidebar-nav\" aria-label=\"Sidebar navigation\">${sidebarHtml}</nav>\n </div>\n </dialog>`\n : ''\n }\n ${\n searchEnabled\n ? `<dialog class=\"doc-search-modal\" id=\"search-modal\" aria-label=\"Search\" data-search-show-images=\"false\" data-search-show-sub-results=\"true\">\n <div class=\"doc-search-modal-inner\">\n <div class=\"doc-search-modal-header\">\n <span class=\"doc-search-modal-title\">Search</span>\n <button type=\"button\" class=\"doc-search-modal-close\" aria-label=\"Close\" data-search-close=\"\">${closeIcon}</button>\n </div>\n <div class=\"doc-search-modal-body\" id=\"search-container\" data-pagefind-search=\"\"></div>\n </div>\n </dialog>`\n : ''\n }\n ${jsPath ? `<script src=\"${jsPath}\" defer></script>` : ''}\n </body>\n</html>`\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/ssg-utils/index.ts"],"sourcesContent":["/**\n * Shared SSG utilities for framework example sites.\n *\n * Provides types that match virtual module output, icon SVGs,\n * route helpers, date formatting, and HTML document rendering\n * used across all framework examples.\n */\n\nimport type { Heading } from '../schemas/heading'\n\n// ── Types ──\n\nexport type { Heading }\n\nexport type MarkdownEntry<T extends Record<string, unknown> = Record<string, unknown>> = {\n contentSlug: string\n html: string\n headings: Heading[]\n frontmatter: T\n}\n\nexport type NavEntry = {\n slug: string\n title: string\n description?: string\n url: string\n date?: string\n tags?: string[]\n}\n\nexport type NavGroup = {\n series: string\n items: NavEntry[]\n}\n\n// ── Icons ──\n\nexport const menuIcon =\n '<svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"M3 5h14M3 10h14M3 15h14\"/></svg>'\nexport const closeIcon =\n '<svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"m5 5 10 10M15 5 5 15\"/></svg>'\nexport const searchIcon =\n '<svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><circle cx=\"8.5\" cy=\"8.5\" r=\"5.5\"/><path d=\"m13 13 4 4\"/></svg>'\n\n// ── Route helpers ──\n\nexport function normalizeRoute(url: string, base: string): string {\n if (!base || !url.startsWith(base)) return url === '' ? '/' : url\n const trimmed = url.slice(base.length)\n if (trimmed === '') return '/'\n return trimmed.startsWith('/') ? trimmed : `/${trimmed}`\n}\n\nexport function leafSlug(contentSlug: string, collection: string): string {\n const escaped = collection.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n return contentSlug.replace(new RegExp(`^${escaped}/`), '')\n}\n\nexport function routeFor(\n entry: MarkdownEntry,\n collection: string,\n options?: { topLevel?: string[] },\n): string {\n const slug = leafSlug(entry.contentSlug, collection)\n const topLevel = options?.topLevel ?? ['pages']\n return topLevel.includes(collection) ? `/${slug}` : `/${collection}/${slug}`\n}\n\n// ── Date helpers ──\n\nexport function getTime(date: string | Date | undefined): number {\n if (!date) return 0\n return date instanceof Date ? date.getTime() : new Date(date).getTime()\n}\n\nexport function toIso(date: string | Date | undefined): string | undefined {\n if (!date) return undefined\n return (date instanceof Date ? date : new Date(date)).toISOString()\n}\n\nexport function formatDate(iso: string): string {\n const date = new Date(iso)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n })\n}\n\n// ── Content helpers ──\n\nexport function estimateReadTime(html: string): number {\n const text = html.replace(/<[^>]+>/g, ' ')\n return Math.max(1, Math.ceil(text.split(/\\s+/).filter(Boolean).length / 200))\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n}\n\nexport function buildNavEntries(\n entries: MarkdownEntry[],\n base: string,\n section: string,\n): NavEntry[] {\n return entries.map((entry) => ({\n slug: leafSlug(entry.contentSlug, section),\n title: (entry.frontmatter.title as string) ?? '',\n description: entry.frontmatter.description as string | undefined,\n url: `${base}/${section}/${leafSlug(entry.contentSlug, section)}`,\n date: toIso(entry.frontmatter.date as string | Date | undefined),\n tags: (entry.frontmatter.tags as string[]) ?? [],\n }))\n}\n\nexport function groupByField(\n entries: MarkdownEntry[],\n base: string,\n section: string,\n field: string,\n fallback = 'Other',\n): NavGroup[] {\n const groups: NavGroup[] = []\n const seen = new Map<string, NavEntry[]>()\n\n for (const entry of entries) {\n const series = (entry.frontmatter[field] as string) ?? fallback\n if (!seen.has(series)) {\n const items: NavEntry[] = []\n seen.set(series, items)\n groups.push({ series, items })\n }\n seen.get(series)!.push({\n slug: leafSlug(entry.contentSlug, section),\n title: (entry.frontmatter.title as string) ?? '',\n url: `${base}/${section}/${leafSlug(entry.contentSlug, section)}`,\n })\n }\n\n return groups\n}\n\n// ── HTML document shell ──\n\nexport type DocumentShellOptions = {\n title: string\n description?: string\n basePath: string\n cssPath: string\n jsPath?: string\n searchEnabled?: boolean\n bodyHtml: string\n sidebarHtml?: string\n headHtml?: string\n}\n\nexport function renderDocumentShell(options: DocumentShellOptions): string {\n const {\n title,\n description,\n basePath,\n cssPath,\n jsPath,\n searchEnabled,\n bodyHtml,\n sidebarHtml,\n headHtml,\n } = options\n const base = basePath.replace(/\\/+$/, '')\n\n return `<html lang=\"en\" class=\"no-js\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"color-scheme\" content=\"light dark\" />\n <title>${escapeHtml(title)}</title>\n ${description ? `<meta name=\"description\" content=\"${escapeHtml(description)}\" />` : ''}\n <meta property=\"og:type\" content=\"website\" />\n <meta property=\"og:title\" content=\"${escapeHtml(title)}\" />\n ${description ? `<meta property=\"og:description\" content=\"${escapeHtml(description)}\" />` : ''}\n <link rel=\"icon\" href=\"${base}/favicon.svg\" type=\"image/svg+xml\" />\n <link rel=\"stylesheet\" href=\"${base}/assets/fonts.css\" />\n <link rel=\"stylesheet\" href=\"${cssPath}\" />\n ${searchEnabled ? `<link rel=\"stylesheet\" href=\"${base}/pagefind/pagefind-ui.css\" />` : ''}\n <script>document.documentElement.classList.remove('no-js')</script>\n ${searchEnabled ? `<script src=\"${base}/pagefind/pagefind-ui.js\" defer></script>` : ''}\n ${searchEnabled ? '<noscript><style>.doc-search-trigger{display:none!important}</style></noscript>' : ''}\n ${headHtml ?? ''}\n </head>\n <body>\n ${bodyHtml}\n ${\n sidebarHtml\n ? `<dialog class=\"doc-sidebar-modal\" id=\"sidebar-modal\">\n <div class=\"doc-sidebar-modal-backdrop\" data-sidebar-close=\"\"></div>\n <div class=\"doc-sidebar-modal-panel\">\n <button type=\"button\" class=\"doc-sidebar-modal-close\" data-sidebar-close=\"\" aria-label=\"Close navigation\">${closeIcon}</button>\n <nav class=\"doc-sidebar-nav\" aria-label=\"Sidebar navigation\">${sidebarHtml}</nav>\n </div>\n </dialog>`\n : ''\n }\n ${\n searchEnabled\n ? `<dialog class=\"doc-search-modal\" id=\"search-modal\" aria-label=\"Search\" data-search-show-images=\"false\" data-search-show-sub-results=\"true\">\n <div class=\"doc-search-modal-inner\">\n <div class=\"doc-search-modal-header\">\n <span class=\"doc-search-modal-title\">Search</span>\n <button type=\"button\" class=\"doc-search-modal-close\" aria-label=\"Close\" data-search-close=\"\">${closeIcon}</button>\n </div>\n <div class=\"doc-search-modal-body\" id=\"search-container\" data-pagefind-search=\"\"></div>\n </div>\n </dialog>`\n : ''\n }\n ${jsPath ? `<script src=\"${jsPath}\" defer></script>` : ''}\n </body>\n</html>`\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
- import { a as CollectionMap, i as CollectionDef, o as InferCollectionData, t as ContentLayerConfig } from "../content-config-DJXUOcNG.mjs";
3
- import { t as Heading } from "../heading-Dhvzlay-.mjs";
2
+ import { a as CollectionMap, i as CollectionDef, o as InferCollectionData, t as ContentLayerConfig } from "../content-config-Bu2HH0Yx.mjs";
3
+ import { t as Heading } from "../heading-D4X2L4vd.mjs";
4
4
  import * as http from "node:http";
5
5
  import { Agent, ClientRequest, ClientRequestArgs, OutgoingHttpHeaders } from "node:http";
6
6
  import { Http2SecureServer } from "node:http2";