@pagesmith/core 0.1.0

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 (85) hide show
  1. package/README.md +481 -0
  2. package/assets/fonts/OFL.txt +7 -0
  3. package/assets/fonts/jetbrains-mono-variable.woff2 +0 -0
  4. package/assets/fonts/open-sans-variable.woff2 +0 -0
  5. package/assets/fonts.css +17 -0
  6. package/dist/ai/index.d.mts +41 -0
  7. package/dist/ai/index.d.mts.map +1 -0
  8. package/dist/ai/index.mjs +414 -0
  9. package/dist/ai/index.mjs.map +1 -0
  10. package/dist/assets/index.d.mts +31 -0
  11. package/dist/assets/index.d.mts.map +1 -0
  12. package/dist/assets/index.mjs +2 -0
  13. package/dist/assets-bX08zEJm.mjs +155 -0
  14. package/dist/assets-bX08zEJm.mjs.map +1 -0
  15. package/dist/content-config-fHPaFZ7i.d.mts +1128 -0
  16. package/dist/content-config-fHPaFZ7i.d.mts.map +1 -0
  17. package/dist/content-layer-B7fQ3im4.mjs +590 -0
  18. package/dist/content-layer-B7fQ3im4.mjs.map +1 -0
  19. package/dist/convert-DnuB6SVV.mjs +52 -0
  20. package/dist/convert-DnuB6SVV.mjs.map +1 -0
  21. package/dist/create/index.d.mts +20 -0
  22. package/dist/create/index.d.mts.map +1 -0
  23. package/dist/create/index.mjs +215 -0
  24. package/dist/create/index.mjs.map +1 -0
  25. package/dist/css/index.d.mts +2 -0
  26. package/dist/css/index.mjs +2 -0
  27. package/dist/css-ekIt2Fdb.mjs +19 -0
  28. package/dist/css-ekIt2Fdb.mjs.map +1 -0
  29. package/dist/heading-Dhvzlay-.d.mts +27 -0
  30. package/dist/heading-Dhvzlay-.d.mts.map +1 -0
  31. package/dist/index-BQ6B1-qG.d.mts +41 -0
  32. package/dist/index-BQ6B1-qG.d.mts.map +1 -0
  33. package/dist/index-CeNDTM-y.d.mts +7 -0
  34. package/dist/index-CeNDTM-y.d.mts.map +1 -0
  35. package/dist/index-DpRBzO8Q.d.mts +15 -0
  36. package/dist/index-DpRBzO8Q.d.mts.map +1 -0
  37. package/dist/index-sFCx17CD.d.mts +59 -0
  38. package/dist/index-sFCx17CD.d.mts.map +1 -0
  39. package/dist/index.d.mts +131 -0
  40. package/dist/index.d.mts.map +1 -0
  41. package/dist/index.mjs +56 -0
  42. package/dist/index.mjs.map +1 -0
  43. package/dist/jsx-runtime/index.d.mts +24 -0
  44. package/dist/jsx-runtime/index.d.mts.map +1 -0
  45. package/dist/jsx-runtime/index.mjs +88 -0
  46. package/dist/jsx-runtime/index.mjs.map +1 -0
  47. package/dist/loaders/index.d.mts +3 -0
  48. package/dist/loaders/index.mjs +2 -0
  49. package/dist/loaders-DyABmDrE.mjs +179 -0
  50. package/dist/loaders-DyABmDrE.mjs.map +1 -0
  51. package/dist/markdown/index.d.mts +3 -0
  52. package/dist/markdown/index.mjs +2 -0
  53. package/dist/markdown-Cj5X26FL.mjs +95 -0
  54. package/dist/markdown-Cj5X26FL.mjs.map +1 -0
  55. package/dist/runtime/index.d.mts +28 -0
  56. package/dist/runtime/index.d.mts.map +1 -0
  57. package/dist/runtime/index.mjs +90 -0
  58. package/dist/runtime/index.mjs.map +1 -0
  59. package/dist/schemas/index.d.mts +4 -0
  60. package/dist/schemas/index.mjs +2 -0
  61. package/dist/schemas-DJS7wOzd.mjs +47 -0
  62. package/dist/schemas-DJS7wOzd.mjs.map +1 -0
  63. package/dist/types-DUsjRE7Y.d.mts +28 -0
  64. package/dist/types-DUsjRE7Y.d.mts.map +1 -0
  65. package/dist/vite/index.d.mts +9878 -0
  66. package/dist/vite/index.d.mts.map +1 -0
  67. package/dist/vite/index.mjs +549 -0
  68. package/dist/vite/index.mjs.map +1 -0
  69. package/package.json +136 -0
  70. package/src/styles/code/inline.css +26 -0
  71. package/src/styles/content/alerts.css +87 -0
  72. package/src/styles/content/prose.css +225 -0
  73. package/src/styles/content/toc.css +87 -0
  74. package/src/styles/content.css +22 -0
  75. package/src/styles/foundations/reset.css +49 -0
  76. package/src/styles/foundations/tokens.css +66 -0
  77. package/src/styles/layout/grid.css +179 -0
  78. package/src/styles/layout/sidebar.css +18 -0
  79. package/src/styles/standalone.css +18 -0
  80. package/src/styles/viewport.css +20 -0
  81. package/templates/docs/content/README.md +18 -0
  82. package/templates/docs/content/guide/README.md +11 -0
  83. package/templates/docs/content/guide/getting-started/README.md +9 -0
  84. package/templates/docs/content/reference/README.md +11 -0
  85. package/templates/docs/pagesmith.config.json5 +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-bX08zEJm.mjs","names":[],"sources":["../src/assets/copier.ts","../src/assets/hasher.ts"],"sourcesContent":["import { copyFileSync, existsSync, mkdirSync, readdirSync } from 'fs'\nimport { dirname, join, relative } from 'path'\n\n/**\n * Copy public directory to output, preserving structure (no hashing).\n * Skips `fonts/` since those are copied to dist/assets/ and hashed.\n */\nexport function copyPublicFiles(publicDir: string, outDir: string): void {\n if (!existsSync(publicDir)) return\n function walk(dir: string) {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const full = join(dir, entry.name)\n // Skip fonts/ — they are copied to dist/assets/ and hashed\n if (entry.isDirectory() && entry.name === 'fonts' && dir === publicDir) continue\n if (entry.isDirectory()) {\n walk(full)\n continue\n }\n const rel = relative(publicDir, full)\n const dest = join(outDir, rel)\n mkdirSync(dirname(dest), { recursive: true })\n copyFileSync(full, dest)\n }\n }\n walk(publicDir)\n}\n","/**\n * Demand-driven asset pipeline.\n *\n * Instead of blindly copying all content assets to dist, this:\n * 1. Hashes pre-existing dist/assets/ files (CSS, JS, fonts — already there from bundling)\n * 2. Scans generated HTML for /assets/* references\n * 3. For each referenced content asset not yet in dist, finds the source\n * file in the content directory, copies it with a content hash\n * 4. Rewrites all HTML references to hashed paths\n *\n * Content assets are only copied if actually referenced in the output HTML.\n * Public assets (favicons, robots.txt) are handled separately by copyPublicFiles.\n */\n\nimport { createHash } from 'crypto'\nimport { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync } from 'fs'\nimport { basename, dirname, extname, join, relative } from 'path'\n\nconst HASHABLE_EXTS = new Set([\n '.css',\n '.js',\n '.svg',\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.avif',\n '.ico',\n '.woff',\n '.woff2',\n '.ttf',\n '.eot',\n])\n\nconst CONTENT_ASSET_EXTS = new Set([\n '.svg',\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.avif',\n '.ico',\n])\n\n/** Build a basename → source path lookup for content assets. */\nfunction buildContentAssetMap(contentDir: string): Map<string, string> {\n const map = new Map<string, string>()\n function walk(dir: string) {\n if (!existsSync(dir)) return\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const full = join(dir, entry.name)\n if (entry.isDirectory()) {\n walk(full)\n continue\n }\n const ext = extname(entry.name)\n if (!CONTENT_ASSET_EXTS.has(ext)) continue\n if (entry.name.endsWith('.inline.svg')) continue\n map.set(entry.name, full)\n }\n }\n walk(contentDir)\n return map\n}\n\nfunction computeHash(content: Buffer): string {\n return createHash('sha256').update(content).digest('hex').slice(0, 8)\n}\n\n/**\n * Hash assets and rewrite HTML references.\n *\n * @param outDir - The dist output directory\n * @param contentDir - The content source directory (for finding referenced assets)\n */\nexport function hashAssets(outDir: string, contentDir: string): void {\n const assetsDir = join(outDir, 'assets')\n mkdirSync(assetsDir, { recursive: true })\n\n const renames = new Map<string, string>()\n const contentAssets = buildContentAssetMap(contentDir)\n\n // Phase 1: Collect and hash pre-existing files in dist/assets/ (CSS, JS, fonts)\n const existing: Array<{ full: string; ext: string; name: string }> = []\n if (existsSync(assetsDir)) {\n for (const entry of readdirSync(assetsDir, { withFileTypes: true })) {\n if (entry.isDirectory()) continue\n const ext = extname(entry.name)\n if (!HASHABLE_EXTS.has(ext)) continue\n existing.push({ full: join(assetsDir, entry.name), ext, name: basename(entry.name, ext) })\n }\n }\n for (const file of existing) {\n const content = readFileSync(file.full)\n const hash = computeHash(content)\n const hashedPath = join(assetsDir, `${file.name}.${hash}${file.ext}`)\n renameSync(file.full, hashedPath)\n renames.set(file.full, hashedPath)\n }\n\n // Phase 2: Scan HTML — resolve content assets on demand, rewrite all references\n function processHtml(dir: string) {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const full = join(dir, entry.name)\n if (entry.isDirectory()) {\n processHtml(full)\n continue\n }\n if (!entry.name.endsWith('.html')) continue\n\n let html = readFileSync(full, 'utf-8')\n\n html = html.replace(/(src|href|srcset)=\"([^\"]+)\"/g, (match, attr: string, ref: string) => {\n if (\n ref.startsWith('http:') ||\n ref.startsWith('https:') ||\n ref.startsWith('//') ||\n ref.startsWith('#') ||\n ref.startsWith('data:') ||\n ref.startsWith('mailto:')\n ) {\n return match\n }\n\n // Normalize relative refs (shouldn't exist after rehype, but just in case)\n let assetRef = ref\n if (ref.startsWith('./') && /\\.(svg|png|jpg|jpeg|gif|webp|avif|ico)$/i.test(ref)) {\n assetRef = '/assets/' + basename(ref)\n }\n\n // Non-asset paths (e.g. page links, anchors)\n if (!assetRef.startsWith('/assets/')) return match\n\n const fileName = assetRef.slice('/assets/'.length)\n const distPath = join(assetsDir, fileName)\n\n // Already hashed in phase 1 (CSS, JS, fonts) or a prior HTML file\n const already = renames.get(distPath)\n if (already) {\n return `${attr}=\"/${relative(outDir, already)}\"`\n }\n\n // Content asset — find source, copy + hash on demand\n const sourcePath = contentAssets.get(fileName)\n if (!sourcePath) {\n return `${attr}=\"${assetRef}\"`\n }\n\n const content = readFileSync(sourcePath)\n const hash = computeHash(content)\n const ext = extname(fileName)\n const name = basename(fileName, ext)\n const hashedName = `${name}.${hash}${ext}`\n const hashedDest = join(assetsDir, hashedName)\n\n writeFileSync(hashedDest, content)\n renames.set(distPath, hashedDest)\n\n return `${attr}=\"/assets/${hashedName}\"`\n })\n\n writeFileSync(full, html)\n }\n }\n processHtml(outDir)\n}\n"],"mappings":"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"}