@wrikka/create-docs 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 (380) hide show
  1. package/README.md +137 -0
  2. package/bin/cli.js +408 -0
  3. package/dist/index.cjs +20 -0
  4. package/dist/index.d.cts +475 -0
  5. package/dist/index.d.ts +475 -0
  6. package/dist/index.js +20 -0
  7. package/docs/_dir.yml +2 -0
  8. package/docs/config.md +75 -0
  9. package/docs/data-sources.md +88 -0
  10. package/docs/deploy.md +38 -0
  11. package/docs/features.md +51 -0
  12. package/docs/getting-started.md +42 -0
  13. package/docs/index.md +34 -0
  14. package/docs/markdown.md +154 -0
  15. package/docs/theming.md +53 -0
  16. package/package.json +142 -0
  17. package/scripts/generate-docs-index.ts +111 -0
  18. package/scripts/github-pull.ts +124 -0
  19. package/src/adapters/config/index.ts +1 -0
  20. package/src/adapters/config/node-config-loader.ts +36 -0
  21. package/src/adapters/fs/fs-docs-loader.ts +31 -0
  22. package/src/adapters/fs/index.ts +12 -0
  23. package/src/adapters/fs/memory-fs.ts +60 -0
  24. package/src/adapters/fs/node-fs.ts +116 -0
  25. package/src/adapters/git/index.ts +164 -0
  26. package/src/adapters/github/github-pull.ts +340 -0
  27. package/src/adapters/index.ts +6 -0
  28. package/src/adapters/velite.ts +112 -0
  29. package/src/adapters/vite/docs-watcher.ts +36 -0
  30. package/src/adapters/vite/index.ts +2 -0
  31. package/src/adapters/vite/polling-watcher.ts +89 -0
  32. package/src/code-block-enhancements/index.ts +3 -0
  33. package/src/config/index.ts +15 -0
  34. package/src/content/index.ts +11 -0
  35. package/src/content-validation/index.ts +5 -0
  36. package/src/index.ts +174 -0
  37. package/src/live-editor/index.ts +7 -0
  38. package/src/modules/analytics/application/plausible-adapter.ts +103 -0
  39. package/src/modules/analytics/application/umami-adapter.ts +109 -0
  40. package/src/modules/analytics/domain/events/index.ts +37 -0
  41. package/src/modules/analytics/domain/models/index.ts +35 -0
  42. package/src/modules/analytics/domain/operations/analytics-operations.ts +67 -0
  43. package/src/modules/analytics/domain/validators/index.ts +50 -0
  44. package/src/modules/analytics/index.ts +9 -0
  45. package/src/modules/analytics/ports/analytics-port.ts +17 -0
  46. package/src/modules/analytics/types/analytics.ts +16 -0
  47. package/src/modules/api-docs/application/type-docs-adapter.ts +34 -0
  48. package/src/modules/api-docs/domain/events/index.ts +42 -0
  49. package/src/modules/api-docs/domain/models/index.ts +40 -0
  50. package/src/modules/api-docs/domain/operations/api-docs-operations.ts +59 -0
  51. package/src/modules/api-docs/domain/validators/index.ts +56 -0
  52. package/src/modules/api-docs/index.ts +8 -0
  53. package/src/modules/api-docs/ports/api-docs-port.ts +21 -0
  54. package/src/modules/api-docs/types/api-docs.ts +15 -0
  55. package/src/modules/api-reference/openapi.ts +166 -0
  56. package/src/modules/api-reference/orpc.ts +94 -0
  57. package/src/modules/code-block-enhancements/application/usecases/index.ts +39 -0
  58. package/src/modules/code-block-enhancements/domain/code-operations.ts +72 -0
  59. package/src/modules/code-block-enhancements/domain/events/index.ts +58 -0
  60. package/src/modules/code-block-enhancements/domain/index.ts +11 -0
  61. package/src/modules/code-block-enhancements/domain/models/index.ts +36 -0
  62. package/src/modules/code-block-enhancements/domain/validators/index.ts +50 -0
  63. package/src/modules/code-block-enhancements/index.ts +10 -0
  64. package/src/modules/code-block-enhancements/ports/index.ts +18 -0
  65. package/src/modules/code-block-enhancements/types/index.ts +37 -0
  66. package/src/modules/code-execution/application/sandbox-adapter.ts +44 -0
  67. package/src/modules/code-execution/domain/events/index.ts +58 -0
  68. package/src/modules/code-execution/domain/models/index.ts +33 -0
  69. package/src/modules/code-execution/domain/operations/execution-operations.ts +60 -0
  70. package/src/modules/code-execution/domain/validators/index.ts +50 -0
  71. package/src/modules/code-execution/index.ts +8 -0
  72. package/src/modules/code-execution/ports/execution-port.ts +15 -0
  73. package/src/modules/code-execution/types/execution.ts +15 -0
  74. package/src/modules/comments/application/giscus-adapter.ts +55 -0
  75. package/src/modules/comments/domain/events/index.ts +55 -0
  76. package/src/modules/comments/domain/models/index.ts +30 -0
  77. package/src/modules/comments/domain/operations/comment-operations.ts +46 -0
  78. package/src/modules/comments/domain/validators/index.ts +50 -0
  79. package/src/modules/comments/index.ts +8 -0
  80. package/src/modules/comments/ports/comment-port.ts +18 -0
  81. package/src/modules/comments/types/comments.ts +19 -0
  82. package/src/modules/config/application/usecases/index.ts +1 -0
  83. package/src/modules/config/application/usecases/loadConfig.ts +38 -0
  84. package/src/modules/config/application/workflows/index.ts +1 -0
  85. package/src/modules/config/application/workflows/validateConfig.ts +14 -0
  86. package/src/modules/config/domain/events/index.ts +50 -0
  87. package/src/modules/config/domain/models/index.ts +9 -0
  88. package/src/modules/config/domain/operations/defaults.ts +74 -0
  89. package/src/modules/config/domain/operations/index.ts +2 -0
  90. package/src/modules/config/domain/operations/resolve.ts +40 -0
  91. package/src/modules/config/domain/validators/index.ts +152 -0
  92. package/src/modules/config/index.ts +23 -0
  93. package/src/modules/config/ports/index.ts +15 -0
  94. package/src/modules/config/types/index.ts +113 -0
  95. package/src/modules/config/types/public.ts +19 -0
  96. package/src/modules/content/application/cache/index.ts +6 -0
  97. package/src/modules/content/application/cache/parse-cache.ts +6 -0
  98. package/src/modules/content/application/cache/parseCache.ts +56 -0
  99. package/src/modules/content/application/usecases/index.ts +2 -0
  100. package/src/modules/content/application/usecases/load-doc-page.ts +1 -0
  101. package/src/modules/content/application/usecases/loadDocPage.ts +111 -0
  102. package/src/modules/content/application/usecases/scanDocsDir.ts +105 -0
  103. package/src/modules/content/application/workflows/index.ts +1 -0
  104. package/src/modules/content/application/workflows/processDocs.ts +51 -0
  105. package/src/modules/content/domain/events/index.ts +61 -0
  106. package/src/modules/content/domain/models/index.ts +13 -0
  107. package/src/modules/content/domain/operations/build-page.ts +146 -0
  108. package/src/modules/content/domain/operations/buildPage.ts +93 -0
  109. package/src/modules/content/domain/operations/index.ts +17 -0
  110. package/src/modules/content/domain/operations/parse.ts +241 -0
  111. package/src/modules/content/domain/validators/frontmatter.ts +82 -0
  112. package/src/modules/content/domain/validators/index.ts +6 -0
  113. package/src/modules/content/index.ts +27 -0
  114. package/src/modules/content/ports/index.ts +45 -0
  115. package/src/modules/content/ports/velite.ts +134 -0
  116. package/src/modules/content/types/index.ts +76 -0
  117. package/src/modules/content/types/public.ts +1 -0
  118. package/src/modules/content-linting/application/builtin-linting-adapter.ts +82 -0
  119. package/src/modules/content-linting/domain/events/index.ts +58 -0
  120. package/src/modules/content-linting/domain/models/index.ts +46 -0
  121. package/src/modules/content-linting/domain/operations/linting-operations.ts +82 -0
  122. package/src/modules/content-linting/domain/validators/index.ts +50 -0
  123. package/src/modules/content-linting/index.ts +8 -0
  124. package/src/modules/content-linting/ports/linting-port.ts +21 -0
  125. package/src/modules/content-linting/types/linting.ts +18 -0
  126. package/src/modules/content-validation/application/usecases/index.ts +18 -0
  127. package/src/modules/content-validation/domain/events/index.ts +7 -0
  128. package/src/modules/content-validation/domain/index.ts +16 -0
  129. package/src/modules/content-validation/domain/models/index.ts +33 -0
  130. package/src/modules/content-validation/domain/operations/index.ts +157 -0
  131. package/src/modules/content-validation/domain/types/index.ts +17 -0
  132. package/src/modules/content-validation/domain/validators/index.ts +8 -0
  133. package/src/modules/content-validation/index.ts +9 -0
  134. package/src/modules/content-validation/ports/index.ts +15 -0
  135. package/src/modules/content-validation/types/index.ts +5 -0
  136. package/src/modules/export/application/puppeteer-export-adapter.ts +63 -0
  137. package/src/modules/export/domain/events/index.ts +55 -0
  138. package/src/modules/export/domain/models/index.ts +38 -0
  139. package/src/modules/export/domain/operations/export-operations.ts +56 -0
  140. package/src/modules/export/domain/validators/index.ts +52 -0
  141. package/src/modules/export/index.ts +8 -0
  142. package/src/modules/export/ports/export-port.ts +15 -0
  143. package/src/modules/export/types/export.ts +15 -0
  144. package/src/modules/external-search/application/algolia-adapter.ts +182 -0
  145. package/src/modules/external-search/application/meilisearch-adapter.ts +161 -0
  146. package/src/modules/external-search/domain/events/index.ts +42 -0
  147. package/src/modules/external-search/domain/models/index.ts +42 -0
  148. package/src/modules/external-search/domain/operations/search-operations.ts +53 -0
  149. package/src/modules/external-search/domain/validators/index.ts +55 -0
  150. package/src/modules/external-search/index.ts +9 -0
  151. package/src/modules/external-search/ports/external-search-port.ts +23 -0
  152. package/src/modules/external-search/types/search.ts +19 -0
  153. package/src/modules/git-history/application/simple-git-adapter.ts +46 -0
  154. package/src/modules/git-history/domain/events/index.ts +34 -0
  155. package/src/modules/git-history/domain/models/index.ts +25 -0
  156. package/src/modules/git-history/domain/operations/git-history-operations.ts +56 -0
  157. package/src/modules/git-history/domain/validators/index.ts +52 -0
  158. package/src/modules/git-history/index.ts +8 -0
  159. package/src/modules/git-history/ports/git-history-port.ts +21 -0
  160. package/src/modules/git-history/types/git-history.ts +15 -0
  161. package/src/modules/i18n/application/fs-locale-loader.ts +39 -0
  162. package/src/modules/i18n/domain/events/index.ts +34 -0
  163. package/src/modules/i18n/domain/models/index.ts +34 -0
  164. package/src/modules/i18n/domain/operations/locale-operations.ts +74 -0
  165. package/src/modules/i18n/domain/validators/index.ts +52 -0
  166. package/src/modules/i18n/index.ts +8 -0
  167. package/src/modules/i18n/ports/locale-loader-port.ts +18 -0
  168. package/src/modules/i18n/types/locale.ts +17 -0
  169. package/src/modules/image-optimization/application/sharp-adapter.ts +58 -0
  170. package/src/modules/image-optimization/domain/events/index.ts +39 -0
  171. package/src/modules/image-optimization/domain/models/index.ts +27 -0
  172. package/src/modules/image-optimization/domain/operations/image-operations.ts +65 -0
  173. package/src/modules/image-optimization/domain/validators/index.ts +52 -0
  174. package/src/modules/image-optimization/index.ts +8 -0
  175. package/src/modules/image-optimization/ports/image-optimizer-port.ts +15 -0
  176. package/src/modules/image-optimization/types/image.ts +17 -0
  177. package/src/modules/live-editor/application/usecases/index.ts +60 -0
  178. package/src/modules/live-editor/domain/events/index.ts +37 -0
  179. package/src/modules/live-editor/domain/gitOperations.ts +110 -0
  180. package/src/modules/live-editor/domain/index.ts +15 -0
  181. package/src/modules/live-editor/domain/models/index.ts +21 -0
  182. package/src/modules/live-editor/domain/validators/index.ts +55 -0
  183. package/src/modules/live-editor/index.ts +14 -0
  184. package/src/modules/live-editor/ports/index.ts +49 -0
  185. package/src/modules/live-editor/types/index.ts +80 -0
  186. package/src/modules/live-preview/application/vite-preview-adapter.ts +20 -0
  187. package/src/modules/live-preview/domain/operations/preview-operations.ts +56 -0
  188. package/src/modules/live-preview/index.ts +8 -0
  189. package/src/modules/live-preview/ports/preview-port.ts +20 -0
  190. package/src/modules/live-preview/types/preview.ts +16 -0
  191. package/src/modules/mdx/application/mdx-js-adapter.ts +38 -0
  192. package/src/modules/mdx/domain/operations/parse-mdx.ts +43 -0
  193. package/src/modules/mdx/index.ts +8 -0
  194. package/src/modules/mdx/ports/mdx-parser-port.ts +15 -0
  195. package/src/modules/mdx/types/mdx.ts +14 -0
  196. package/src/modules/navigation/application/usecases/buildNav.ts +15 -0
  197. package/src/modules/navigation/application/usecases/buildSidebar.ts +45 -0
  198. package/src/modules/navigation/application/usecases/index.ts +2 -0
  199. package/src/modules/navigation/domain/events/index.ts +30 -0
  200. package/src/modules/navigation/domain/models/index.ts +7 -0
  201. package/src/modules/navigation/domain/operations/group.ts +79 -0
  202. package/src/modules/navigation/domain/operations/index.ts +10 -0
  203. package/src/modules/navigation/domain/operations/sort.ts +27 -0
  204. package/src/modules/navigation/domain/shared/utils/array.ts +39 -0
  205. package/src/modules/navigation/domain/validators/index.ts +88 -0
  206. package/src/modules/navigation/index.ts +15 -0
  207. package/src/modules/navigation/ports/index.ts +9 -0
  208. package/src/modules/navigation/types/index.ts +38 -0
  209. package/src/modules/navigation/types/public.ts +9 -0
  210. package/src/modules/openapi/application/swagger-parser-adapter.ts +178 -0
  211. package/src/modules/openapi/domain/operations/parse-openapi.ts +46 -0
  212. package/src/modules/openapi/index.ts +8 -0
  213. package/src/modules/openapi/ports/openapi-parser-port.ts +15 -0
  214. package/src/modules/openapi/types/openapi.ts +37 -0
  215. package/src/modules/plugin/application/usecases/build-virtual-modules.ts +53 -0
  216. package/src/modules/plugin/application/usecases/index.ts +1 -0
  217. package/src/modules/plugin/application/workflows/build-docs.ts +79 -0
  218. package/src/modules/plugin/application/workflows/index.ts +1 -0
  219. package/src/modules/plugin/domain/events/index.ts +62 -0
  220. package/src/modules/plugin/domain/models/index.ts +1 -0
  221. package/src/modules/plugin/domain/operations/build-virtual.ts +76 -0
  222. package/src/modules/plugin/domain/operations/index.ts +11 -0
  223. package/src/modules/plugin/domain/validators/index.ts +30 -0
  224. package/src/modules/plugin/index.ts +14 -0
  225. package/src/modules/plugin/ports/index.ts +21 -0
  226. package/src/modules/plugin/types/index.ts +27 -0
  227. package/src/modules/plugin/types/public.ts +1 -0
  228. package/src/modules/search/application/usecases/index.ts +1 -0
  229. package/src/modules/search/application/usecases/indexPages.ts +15 -0
  230. package/src/modules/search/domain/events/index.ts +32 -0
  231. package/src/modules/search/domain/models/index.ts +1 -0
  232. package/src/modules/search/domain/operations/build-index.ts +6 -0
  233. package/src/modules/search/domain/operations/buildIndex.ts +70 -0
  234. package/src/modules/search/domain/operations/index.ts +7 -0
  235. package/src/modules/search/domain/operations/query.ts +186 -0
  236. package/src/modules/search/domain/validators/index.ts +32 -0
  237. package/src/modules/search/index.ts +9 -0
  238. package/src/modules/search/types/index.ts +22 -0
  239. package/src/modules/search/types/public.ts +1 -0
  240. package/src/modules/search-analytics/application/local-storage-adapter.ts +68 -0
  241. package/src/modules/search-analytics/domain/operations/search-analytics-operations.ts +74 -0
  242. package/src/modules/search-analytics/index.ts +8 -0
  243. package/src/modules/search-analytics/ports/search-analytics-port.ts +20 -0
  244. package/src/modules/search-analytics/types/search-analytics.ts +16 -0
  245. package/src/modules/search-highlighting/application/dom-highlighting-adapter.ts +36 -0
  246. package/src/modules/search-highlighting/domain/operations/highlighting-operations.ts +72 -0
  247. package/src/modules/search-highlighting/index.ts +8 -0
  248. package/src/modules/search-highlighting/ports/highlighting-port.ts +14 -0
  249. package/src/modules/search-highlighting/types/highlighting.ts +15 -0
  250. package/src/modules/seo-optimization/application/usecases/index.ts +18 -0
  251. package/src/modules/seo-optimization/domain/index.ts +12 -0
  252. package/src/modules/seo-optimization/domain/seoOperations.ts +92 -0
  253. package/src/modules/seo-optimization/index.ts +8 -0
  254. package/src/modules/seo-optimization/ports/index.ts +18 -0
  255. package/src/modules/seo-optimization/types/index.ts +41 -0
  256. package/src/modules/theme/application/css-theme-adapter.ts +50 -0
  257. package/src/modules/theme/domain/operations/theme-operations.ts +68 -0
  258. package/src/modules/theme/index.ts +8 -0
  259. package/src/modules/theme/ports/theme-port.ts +8 -0
  260. package/src/modules/theme/types/theme.ts +12 -0
  261. package/src/modules/toc/application/markdown-toc-adapter.ts +106 -0
  262. package/src/modules/toc/domain/operations/toc-operations.ts +92 -0
  263. package/src/modules/toc/index.ts +8 -0
  264. package/src/modules/toc/ports/toc-port.ts +21 -0
  265. package/src/modules/toc/types/toc.ts +17 -0
  266. package/src/modules/toc-generator/application/usecases/index.ts +30 -0
  267. package/src/modules/toc-generator/domain/index.ts +12 -0
  268. package/src/modules/toc-generator/domain/tocOperations.ts +104 -0
  269. package/src/modules/toc-generator/index.ts +9 -0
  270. package/src/modules/toc-generator/ports/index.ts +20 -0
  271. package/src/modules/toc-generator/types/index.ts +50 -0
  272. package/src/modules/version-control/domain/events/index.ts +39 -0
  273. package/src/modules/version-control/domain/models/index.ts +25 -0
  274. package/src/modules/version-control/domain/validators/index.ts +50 -0
  275. package/src/modules/versioning/application/fs-version-loader.ts +44 -0
  276. package/src/modules/versioning/domain/operations/versioning-operations.ts +80 -0
  277. package/src/modules/versioning/index.ts +8 -0
  278. package/src/modules/versioning/ports/version-loader-port.ts +18 -0
  279. package/src/modules/versioning/types/versioning.ts +17 -0
  280. package/src/modules/workflow/domain/events/index.ts +55 -0
  281. package/src/modules/workflow/domain/models/index.ts +40 -0
  282. package/src/modules/workflow/domain/validators/index.ts +50 -0
  283. package/src/modules/yaml-parser/application/js-yaml-adapter.ts +34 -0
  284. package/src/modules/yaml-parser/domain/operations/parse-yaml.ts +58 -0
  285. package/src/modules/yaml-parser/index.ts +7 -0
  286. package/src/modules/yaml-parser/ports/yaml-parser-port.ts +18 -0
  287. package/src/navigation/index.ts +9 -0
  288. package/src/plugin/index.ts +4 -0
  289. package/src/presentation/index.ts +1 -0
  290. package/src/presentation/live-editor/index.ts +22 -0
  291. package/src/presentation/live-editor/live-editor-component.ts +219 -0
  292. package/src/presentation/live-editor/virtual-module.ts +16 -0
  293. package/src/presentation/solid/CodeBlock.tsx +120 -0
  294. package/src/presentation/solid/Toc.tsx +58 -0
  295. package/src/presentation/solid/index.ts +11 -0
  296. package/src/presentation/vite-plugin/docs-plugin.ts +212 -0
  297. package/src/presentation/vite-plugin/index.ts +9 -0
  298. package/src/presentation/vite-plugin/transform-markdown.ts +26 -0
  299. package/src/runtime/analytics.ts +59 -0
  300. package/src/runtime/api-diff.ts +115 -0
  301. package/src/runtime/app.tsx +32 -0
  302. package/src/runtime/components/AccentPicker.tsx +114 -0
  303. package/src/runtime/components/ApiPlayground.tsx +332 -0
  304. package/src/runtime/components/AskAiDialog.tsx +127 -0
  305. package/src/runtime/components/BackToTop.tsx +38 -0
  306. package/src/runtime/components/Banner.tsx +75 -0
  307. package/src/runtime/components/Breadcrumbs.tsx +42 -0
  308. package/src/runtime/components/CollectionDropdown.tsx +85 -0
  309. package/src/runtime/components/CustomizeDrawer.tsx +195 -0
  310. package/src/runtime/components/DocMarkdown.tsx +579 -0
  311. package/src/runtime/components/DocPrevNext.tsx +54 -0
  312. package/src/runtime/components/DocToc.tsx +147 -0
  313. package/src/runtime/components/DocsDropdown.tsx +184 -0
  314. package/src/runtime/components/Footer.tsx +52 -0
  315. package/src/runtime/components/GitHubAuth.tsx +82 -0
  316. package/src/runtime/components/GitHubStats.tsx +73 -0
  317. package/src/runtime/components/Head.tsx +225 -0
  318. package/src/runtime/components/LocaleDropdown.tsx +75 -0
  319. package/src/runtime/components/MobileBottomNav.tsx +111 -0
  320. package/src/runtime/components/NotFound.tsx +139 -0
  321. package/src/runtime/components/PageActions.tsx +144 -0
  322. package/src/runtime/components/RelatedDocs.tsx +50 -0
  323. package/src/runtime/components/ScrollProgress.tsx +32 -0
  324. package/src/runtime/components/SearchPalette.tsx +333 -0
  325. package/src/runtime/components/ShowcaseCard.tsx +87 -0
  326. package/src/runtime/components/SidebarNav.tsx +237 -0
  327. package/src/runtime/components/Skeleton.tsx +39 -0
  328. package/src/runtime/components/ThemeToggle.tsx +26 -0
  329. package/src/runtime/components/TopNav.tsx +270 -0
  330. package/src/runtime/components/VersionDropdown.tsx +189 -0
  331. package/src/runtime/components/markdown/components.ts +280 -0
  332. package/src/runtime/config.ts +225 -0
  333. package/src/runtime/content.ts +451 -0
  334. package/src/runtime/context.tsx +30 -0
  335. package/src/runtime/data.ts +93 -0
  336. package/src/runtime/github.ts +226 -0
  337. package/src/runtime/icons.ts +32 -0
  338. package/src/runtime/index.ts +153 -0
  339. package/src/runtime/layouts/DocsLayout.tsx +144 -0
  340. package/src/runtime/markdown-content.css +996 -0
  341. package/src/runtime/pages/AbTestPage.tsx +88 -0
  342. package/src/runtime/pages/AnalyticsPage.tsx +90 -0
  343. package/src/runtime/pages/ApiDiffPage.tsx +86 -0
  344. package/src/runtime/pages/ApiEndpointPage.tsx +248 -0
  345. package/src/runtime/pages/BuilderPage.tsx +150 -0
  346. package/src/runtime/pages/ChangelogPage.tsx +210 -0
  347. package/src/runtime/pages/CollectionPage.tsx +140 -0
  348. package/src/runtime/pages/CommunityPage.tsx +384 -0
  349. package/src/runtime/pages/CreatePage.tsx +448 -0
  350. package/src/runtime/pages/DocPage.tsx +193 -0
  351. package/src/runtime/pages/EditPage.tsx +201 -0
  352. package/src/runtime/pages/HomePage.tsx +187 -0
  353. package/src/runtime/pages/IssuesPage.tsx +140 -0
  354. package/src/runtime/pages/OAuthCallbackPage.tsx +80 -0
  355. package/src/runtime/pages/PluginsPage.tsx +249 -0
  356. package/src/runtime/pages/ShowcasePage.tsx +202 -0
  357. package/src/runtime/pwa.ts +39 -0
  358. package/src/runtime/router.tsx +192 -0
  359. package/src/runtime/seo.ts +192 -0
  360. package/src/runtime/theme.css +175 -0
  361. package/src/runtime/theme.ts +224 -0
  362. package/src/runtime/types.ts +217 -0
  363. package/src/search/index.ts +6 -0
  364. package/src/seo-optimization/index.ts +4 -0
  365. package/src/shared/constants/index.ts +26 -0
  366. package/src/shared/errors/index.ts +195 -0
  367. package/src/shared/index.ts +27 -0
  368. package/src/shared/types/brand.ts +14 -0
  369. package/src/shared/types/client.d.ts +45 -0
  370. package/src/shared/types/either.ts +38 -0
  371. package/src/shared/types/index.ts +42 -0
  372. package/src/shared/types/option.ts +52 -0
  373. package/src/shared/types/result.ts +81 -0
  374. package/src/shared/utils/array.ts +97 -0
  375. package/src/shared/utils/index.ts +46 -0
  376. package/src/shared/utils/object.ts +47 -0
  377. package/src/shared/utils/string.ts +74 -0
  378. package/src/toc-generator/index.ts +1 -0
  379. package/src/types/js-yaml.d.ts +42 -0
  380. package/src/worker.ts +462 -0
package/src/index.ts ADDED
@@ -0,0 +1,174 @@
1
+ /**
2
+ * create-docs — Public API
3
+ *
4
+ * Vite plugin for documentation sites, built on Functional Clean Architecture
5
+ * with Vertical Slice Architecture. SolidJS-only support.
6
+ *
7
+ * ## Layer Map
8
+ * - `src/shared/` — pure utilities, types, errors (no dependencies)
9
+ * - `src/modules/` — feature modules (content, navigation, search, config, plugin)
10
+ * - `src/adapters/` — I/O implementations (Node FS, Vite, config loader)
11
+ * - `src/presentation/` — entry points (Vite plugin, Solid components)
12
+ *
13
+ * ## Quick Start
14
+ * ```ts
15
+ * import { docsPlugin } from 'create-docs';
16
+ *
17
+ * export default defineConfig({
18
+ * plugins: [docsPlugin({ site: { title: 'My Docs' } })]
19
+ * });
20
+ * ```
21
+ */
22
+
23
+ // --- Adapters (advanced usage) ---
24
+ export {
25
+ createFsDocsLoader,
26
+ createMemoryDirectoryScanner,
27
+ createMemoryFileReader,
28
+ createNodeConfigLoader,
29
+ createNodeDocsWatcher,
30
+ memoryFileSystem,
31
+ nodeDirectoryScanner,
32
+ nodeFileReader,
33
+ nodeFileWatcher,
34
+ } from "./adapters";
35
+ export type {
36
+ CodeBlock,
37
+ CodeBlockOptions,
38
+ } from "./code-block-enhancements";
39
+ // --- Code Block Enhancements ---
40
+ export { enhanceCodeBlocks } from "./code-block-enhancements";
41
+ export type {
42
+ ApiConfig,
43
+ ApiEndpoint,
44
+ AuthType,
45
+ DocsConfig,
46
+ DocsPluginOptions,
47
+ EditLinkConfig,
48
+ HttpMethod,
49
+ LastUpdatedConfig,
50
+ ResolvedDocsConfig,
51
+ SearchConfig,
52
+ SiteConfig,
53
+ ThemeConfig,
54
+ } from "./config";
55
+ // --- Config (default + types + operations) ---
56
+ export {
57
+ defaultDocsConfig,
58
+ resolveConfig,
59
+ validateDocsConfig,
60
+ } from "./config";
61
+ export type {
62
+ BadgeVariant,
63
+ DocFile,
64
+ DocId,
65
+ DocPage,
66
+ DocSlug,
67
+ FilePath,
68
+ Frontmatter,
69
+ ParsedContent,
70
+ } from "./content";
71
+ // --- Content (pages, frontmatter, parsing) ---
72
+ export {
73
+ buildDocPage,
74
+ buildDocPageFromRaw,
75
+ parseFrontmatter,
76
+ } from "./content";
77
+ export type {
78
+ ContentValidator,
79
+ ValidationError,
80
+ ValidationOptions,
81
+ ValidationResult,
82
+ } from "./content-validation";
83
+ // --- Content Validation ---
84
+ export { validate } from "./content-validation";
85
+ export type {
86
+ CommitOptions,
87
+ GitAdapter,
88
+ GitStatus,
89
+ PushOptions,
90
+ } from "./live-editor";
91
+ // --- Live Editor with Git Integration ---
92
+ export {
93
+ commitAndPush,
94
+ loadEditorState,
95
+ saveFile,
96
+ } from "./live-editor";
97
+ export type {
98
+ NavItem,
99
+ NavSection,
100
+ Sidebar,
101
+ SidebarGroup,
102
+ SidebarItem,
103
+ } from "./navigation";
104
+ // --- Navigation (sidebar, nav) — canonical owner of nav/sidebar types ---
105
+ export {
106
+ buildNav,
107
+ buildSidebar,
108
+ formatGroupTitle,
109
+ groupDocsByFolder,
110
+ } from "./navigation";
111
+ export type { VirtualModuleSet } from "./plugin";
112
+ // --- Plugin module (orchestration) ---
113
+ export {
114
+ buildVirtualModules,
115
+ isMarkdownPath,
116
+ isVirtualDocsModule,
117
+ } from "./plugin";
118
+ export type { DocsPluginConfig } from "./presentation/vite-plugin";
119
+ // --- Presentation (Vite plugin + Solid components) ---
120
+ export {
121
+ default,
122
+ docsPlugin,
123
+ transformMarkdown,
124
+ } from "./presentation/vite-plugin";
125
+ export type { SearchEntry, SearchIndex } from "./search";
126
+ // --- Search (index + query) ---
127
+ export {
128
+ buildSearchIndex,
129
+ indexPages,
130
+ pageToSearchEntry,
131
+ search,
132
+ } from "./search";
133
+ export type {
134
+ MetaTagGenerator,
135
+ MetaTags,
136
+ SeoOptions,
137
+ } from "./seo-optimization";
138
+ // --- SEO Optimization ---
139
+ export { optimizeSeo } from "./seo-optimization";
140
+ // --- SolidJS UI Components ---
141
+ // Note: Components are in presentation/solid/ directory
142
+ // Import directly in your Solid project
143
+ // --- Constants ---
144
+ export {
145
+ DEFAULT_BASE_ROUTE,
146
+ DEFAULT_DOCS_DIR,
147
+ PLUGIN_NAME,
148
+ SUPPORTED_EXTENSIONS,
149
+ VIRTUAL_PREFIX,
150
+ } from "./shared/constants";
151
+ export type { Brand, Either, Option, Result } from "./shared/types";
152
+ // --- Shared (FP primitives — re-exported for downstream modules) ---
153
+ export {
154
+ err,
155
+ isErr,
156
+ isNone,
157
+ isOk,
158
+ isSome,
159
+ left,
160
+ none,
161
+ ok,
162
+ right,
163
+ some,
164
+ } from "./shared/types";
165
+ export type {
166
+ ContentParser,
167
+ TocItem,
168
+ TocOptions,
169
+ } from "./toc-generator";
170
+ // --- TOC Generator ---
171
+ export {
172
+ generateFlatToc,
173
+ generateToc,
174
+ } from "./toc-generator";
@@ -0,0 +1,7 @@
1
+ export type CommitOptions = unknown;
2
+ export type GitAdapter = unknown;
3
+ export type GitStatus = unknown;
4
+ export type PushOptions = unknown;
5
+ export const commitAndPush = () => null;
6
+ export const loadEditorState = () => null;
7
+ export const saveFile = () => null;
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Plausible adapter implementation.
3
+ * Provides Plausible analytics integration via the REST event API.
4
+ */
5
+
6
+ import { configError, pluginError } from "@create-docs/shared/errors";
7
+ import type { AnalyticsPort } from "../ports/analytics-port";
8
+ import type { AnalyticsConfig, AnalyticsEvent } from "../types/analytics";
9
+
10
+ type PlausibleAnalyticsConfig = AnalyticsConfig & {
11
+ readonly apiHost?: string;
12
+ readonly endpoint?: string;
13
+ };
14
+
15
+ const PLAUSIBLE_DEFAULT_HOST = "https://plausible.io";
16
+
17
+ export const createPlausibleAdapter = (domain: string): AnalyticsPort => {
18
+ if (!domain.trim()) {
19
+ throw configError("Plausible domain is required", {
20
+ context: { domain },
21
+ hint: "Pass the site domain to createPlausibleAdapter.",
22
+ });
23
+ }
24
+
25
+ const resolveApiHost = (
26
+ config: PlausibleAnalyticsConfig | undefined,
27
+ ): string =>
28
+ (config?.apiHost ?? config?.endpoint ?? PLAUSIBLE_DEFAULT_HOST).replace(
29
+ /\/+$/,
30
+ "",
31
+ );
32
+
33
+ const resolveTrackingEndpoint = (apiHost: string): string =>
34
+ apiHost.endsWith("/api/event") ? apiHost : `${apiHost}/api/event`;
35
+
36
+ const resolveUrl = (event: AnalyticsEvent): string => {
37
+ if (event.url) return event.url;
38
+
39
+ if (typeof location !== "undefined") {
40
+ return location.href;
41
+ }
42
+
43
+ return `https://${domain}${
44
+ event.type === "pageview" ? "/" : `/${event.type}`
45
+ }`;
46
+ };
47
+
48
+ return {
49
+ track: async (event: unknown, config?: unknown) => {
50
+ const analyticsEvent = event as AnalyticsEvent;
51
+ const cfg = config as PlausibleAnalyticsConfig | undefined;
52
+ const apiHost = resolveApiHost(cfg);
53
+ const endpoint = resolveTrackingEndpoint(apiHost);
54
+ const url = resolveUrl(analyticsEvent);
55
+
56
+ const payload = {
57
+ name: analyticsEvent.type,
58
+ url,
59
+ domain,
60
+ props: {
61
+ ...(analyticsEvent.query ? { query: analyticsEvent.query } : {}),
62
+ ...(analyticsEvent.target ? { target: analyticsEvent.target } : {}),
63
+ },
64
+ };
65
+
66
+ try {
67
+ const response = await fetch(endpoint, {
68
+ method: "POST",
69
+ headers: { "Content-Type": "application/json" },
70
+ body: JSON.stringify(payload),
71
+ keepalive: true,
72
+ });
73
+
74
+ if (!response.ok) {
75
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
76
+ }
77
+ } catch (error) {
78
+ throw pluginError("Plausible tracking failed", {
79
+ context: { domain, endpoint, event: analyticsEvent },
80
+ hint: "Verify the Plausible API host is reachable and the domain is correct.",
81
+ cause: error,
82
+ });
83
+ }
84
+ },
85
+
86
+ init: async (config?: unknown) => {
87
+ const cfg = config as PlausibleAnalyticsConfig | undefined;
88
+ const apiHost = resolveApiHost(cfg);
89
+
90
+ try {
91
+ const response = await fetch(apiHost, { method: "HEAD" });
92
+ if (!response.ok && response.status !== 404) {
93
+ throw new Error(`Host responded with HTTP ${response.status}`);
94
+ }
95
+ } catch (error) {
96
+ throw pluginError("Plausible initialization failed", {
97
+ context: { domain, apiHost },
98
+ cause: error,
99
+ });
100
+ }
101
+ },
102
+ };
103
+ };
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Umami adapter implementation.
3
+ * Provides Umami analytics integration via the REST tracking API.
4
+ */
5
+
6
+ import { configError, pluginError } from "@create-docs/shared/errors";
7
+ import type { AnalyticsPort } from "../ports/analytics-port";
8
+ import type { AnalyticsConfig, AnalyticsEvent } from "../types/analytics";
9
+
10
+ type UmamiAnalyticsConfig = AnalyticsConfig & {
11
+ readonly umamiHost?: string;
12
+ readonly endpoint?: string;
13
+ };
14
+
15
+ export const createUmamiAdapter = (siteId: string): AnalyticsPort => {
16
+ if (!siteId.trim()) {
17
+ throw configError("Umami siteId is required", {
18
+ context: { siteId },
19
+ hint: "Pass a valid Umami website ID to createUmamiAdapter.",
20
+ });
21
+ }
22
+
23
+ const resolveHost = (
24
+ config: UmamiAnalyticsConfig | undefined,
25
+ ): string | undefined => config?.umamiHost ?? config?.endpoint;
26
+
27
+ const resolveTrackingEndpoint = (host: string): string => {
28
+ const normalized = host.replace(/\/+$/, "");
29
+ return `${normalized}/api/collect`;
30
+ };
31
+
32
+ const resolveUrl = (event: AnalyticsEvent, host: string): string =>
33
+ event.url ?? (typeof location !== "undefined" ? location.href : `${host}/`);
34
+
35
+ return {
36
+ track: async (event: unknown, config?: unknown) => {
37
+ const analyticsEvent = event as AnalyticsEvent;
38
+ const cfg = config as UmamiAnalyticsConfig | undefined;
39
+ const host = resolveHost(cfg);
40
+
41
+ if (!host?.trim()) {
42
+ throw configError("Umami host/endpoint is required", {
43
+ context: { siteId, config },
44
+ hint: "Provide umamiHost or endpoint in the analytics config.",
45
+ });
46
+ }
47
+
48
+ const endpoint = resolveTrackingEndpoint(host);
49
+ const url = resolveUrl(analyticsEvent, host);
50
+ const payload = {
51
+ type: analyticsEvent.type === "pageview" ? "pageview" : "event",
52
+ payload: {
53
+ website: siteId,
54
+ url,
55
+ ...(analyticsEvent.type !== "pageview"
56
+ ? { name: analyticsEvent.type }
57
+ : {}),
58
+ ...(analyticsEvent.target ? { title: analyticsEvent.target } : {}),
59
+ ...(analyticsEvent.query
60
+ ? { data: { query: analyticsEvent.query } }
61
+ : {}),
62
+ },
63
+ };
64
+
65
+ try {
66
+ const response = await fetch(endpoint, {
67
+ method: "POST",
68
+ headers: { "Content-Type": "application/json" },
69
+ body: JSON.stringify(payload),
70
+ keepalive: true,
71
+ });
72
+
73
+ if (!response.ok) {
74
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
75
+ }
76
+ } catch (error) {
77
+ throw pluginError("Umami tracking failed", {
78
+ context: { siteId, endpoint, event: analyticsEvent },
79
+ hint: "Verify the Umami host is reachable and the siteId is correct.",
80
+ cause: error,
81
+ });
82
+ }
83
+ },
84
+
85
+ init: async (config?: unknown) => {
86
+ const cfg = config as UmamiAnalyticsConfig | undefined;
87
+ const host = resolveHost(cfg);
88
+
89
+ if (!host?.trim()) {
90
+ throw configError("Umami host/endpoint is required", {
91
+ context: { siteId, config },
92
+ hint: "Provide umamiHost or endpoint in the analytics config.",
93
+ });
94
+ }
95
+
96
+ try {
97
+ const response = await fetch(host, { method: "HEAD" });
98
+ if (!response.ok && response.status !== 405) {
99
+ throw new Error(`Host responded with HTTP ${response.status}`);
100
+ }
101
+ } catch (error) {
102
+ throw pluginError("Umami initialization failed", {
103
+ context: { siteId, host },
104
+ cause: error,
105
+ });
106
+ }
107
+ },
108
+ };
109
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Domain events for analytics
3
+ */
4
+ export interface PageViewedEvent {
5
+ readonly type: "PAGE_VIEWED";
6
+ readonly timestamp: number;
7
+ readonly path: string;
8
+ }
9
+
10
+ export interface SearchPerformedEvent {
11
+ readonly type: "SEARCH_PERFORMED";
12
+ readonly timestamp: number;
13
+ readonly query: string;
14
+ readonly resultsCount: number;
15
+ }
16
+
17
+ export type AnalyticsDomainEvent = PageViewedEvent | SearchPerformedEvent;
18
+
19
+ export const createPageViewedEvent = (
20
+ path: string,
21
+ now: number = Date.now(),
22
+ ): PageViewedEvent => ({
23
+ type: "PAGE_VIEWED",
24
+ timestamp: now,
25
+ path,
26
+ });
27
+
28
+ export const createSearchPerformedEvent = (
29
+ query: string,
30
+ resultsCount: number,
31
+ now: number = Date.now(),
32
+ ): SearchPerformedEvent => ({
33
+ type: "SEARCH_PERFORMED",
34
+ timestamp: now,
35
+ query,
36
+ resultsCount,
37
+ });
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Domain models for analytics
3
+ */
4
+ export interface PageView {
5
+ readonly path: string;
6
+ readonly timestamp: number;
7
+ readonly duration?: number;
8
+ }
9
+
10
+ export interface SearchQuery {
11
+ readonly query: string;
12
+ readonly timestamp: number;
13
+ readonly resultsCount: number;
14
+ }
15
+
16
+ export const createPageView = (
17
+ path: string,
18
+ options?: { duration?: number; timestamp?: number },
19
+ now: number = Date.now(),
20
+ ): PageView => ({
21
+ path,
22
+ timestamp: options?.timestamp ?? now,
23
+ duration: options?.duration,
24
+ });
25
+
26
+ export const createSearchQuery = (
27
+ query: string,
28
+ resultsCount: number,
29
+ options?: { timestamp?: number },
30
+ now: number = Date.now(),
31
+ ): SearchQuery => ({
32
+ query,
33
+ timestamp: options?.timestamp ?? now,
34
+ resultsCount,
35
+ });
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Pure analytics operations.
3
+ * No I/O. No exceptions thrown. Returns Result types.
4
+ */
5
+
6
+ import type { Result } from "@create-docs/shared/types";
7
+ import { err, ok } from "@create-docs/shared/types";
8
+ import type { AnalyticsConfig } from "../../types/analytics";
9
+
10
+ export type AnalyticsError = {
11
+ readonly kind: "analytics-error";
12
+ readonly message: string;
13
+ };
14
+
15
+ /**
16
+ * Track page view event.
17
+ */
18
+ export const trackPageView = (
19
+ _url: string,
20
+ _config: AnalyticsConfig,
21
+ ): Result<void, AnalyticsError> => {
22
+ try {
23
+ // This will be implemented via adapter
24
+ return ok(undefined);
25
+ } catch (error) {
26
+ return err({
27
+ kind: "analytics-error",
28
+ message: error instanceof Error ? error.message : "Unknown error",
29
+ });
30
+ }
31
+ };
32
+
33
+ /**
34
+ * Track search query event.
35
+ */
36
+ export const trackSearch = (
37
+ _query: string,
38
+ _config: AnalyticsConfig,
39
+ ): Result<void, AnalyticsError> => {
40
+ try {
41
+ // This will be implemented via adapter
42
+ return ok(undefined);
43
+ } catch (error) {
44
+ return err({
45
+ kind: "analytics-error",
46
+ message: error instanceof Error ? error.message : "Unknown error",
47
+ });
48
+ }
49
+ };
50
+
51
+ /**
52
+ * Track click event.
53
+ */
54
+ export const trackClick = (
55
+ _target: string,
56
+ _config: AnalyticsConfig,
57
+ ): Result<void, AnalyticsError> => {
58
+ try {
59
+ // This will be implemented via adapter
60
+ return ok(undefined);
61
+ } catch (error) {
62
+ return err({
63
+ kind: "analytics-error",
64
+ message: error instanceof Error ? error.message : "Unknown error",
65
+ });
66
+ }
67
+ };
@@ -0,0 +1,50 @@
1
+ // Analytics Domain Schemas - Arktype validation schemas
2
+ // Following /follow-arktype workflow for type-safe runtime validation
3
+
4
+ import { type Type, type } from "arktype";
5
+
6
+ /**
7
+ * Path Schema
8
+ */
9
+ export const pathSchema: Type = type("string >= 1");
10
+
11
+ export type Path = typeof pathSchema.infer;
12
+
13
+ /**
14
+ * Search Query Schema
15
+ */
16
+ export const searchQuerySchema: Type = type("string >= 1");
17
+
18
+ export type SearchQuery = typeof searchQuerySchema.infer;
19
+
20
+ /**
21
+ * Validation errors
22
+ */
23
+ export class ValidationError extends Error {
24
+ constructor(message: string) {
25
+ super(message);
26
+ this.name = "ValidationError";
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Validate path using Arktype
32
+ */
33
+ export const validatePath = (path: unknown): Path => {
34
+ const result = pathSchema(path);
35
+ if (result instanceof type.errors) {
36
+ throw new ValidationError("Path must be a non-empty string");
37
+ }
38
+ return result as Path;
39
+ };
40
+
41
+ /**
42
+ * Validate search query using Arktype
43
+ */
44
+ export const validateSearchQuery = (query: unknown): SearchQuery => {
45
+ const result = searchQuerySchema(query);
46
+ if (result instanceof type.errors) {
47
+ throw new ValidationError("Search query must be a non-empty string");
48
+ }
49
+ return result as SearchQuery;
50
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Public API for the analytics module.
3
+ */
4
+
5
+ export { createPlausibleAdapter } from "./application/plausible-adapter";
6
+ export { createUmamiAdapter } from "./application/umami-adapter";
7
+ export * from "./domain/operations/analytics-operations";
8
+ export * from "./ports/analytics-port";
9
+ export * from "./types/analytics";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Port for analytics operations.
3
+ */
4
+
5
+ import type { AnalyticsEvent } from "../types/analytics";
6
+
7
+ export type AnalyticsPort = {
8
+ /**
9
+ * Track analytics event.
10
+ */
11
+ readonly track: (event: AnalyticsEvent, config: unknown) => Promise<void>;
12
+
13
+ /**
14
+ * Initialize analytics.
15
+ */
16
+ readonly init: (config: unknown) => Promise<void>;
17
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Analytics types for tracking page views and user engagement.
3
+ */
4
+
5
+ export type AnalyticsConfig = {
6
+ readonly provider: "plausible" | "umami" | "google-analytics" | "none";
7
+ readonly siteId?: string;
8
+ readonly domain?: string;
9
+ };
10
+
11
+ export type AnalyticsEvent = {
12
+ readonly type: "pageview" | "search" | "click";
13
+ readonly url?: string;
14
+ readonly query?: string;
15
+ readonly target?: string;
16
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * TypeDoc adapter implementation.
3
+ * Provides a safe placeholder for API docs generation from TypeScript.
4
+ */
5
+
6
+ import { configError, ioError, pluginError } from "@create-docs/shared/errors";
7
+ import type { ApiDocsPort } from "../ports/api-docs-port";
8
+
9
+ const TYPEDOC_MISSING_ERROR =
10
+ "TypeDoc is not installed. Generating API docs from TypeScript requires the typedoc package.";
11
+
12
+ export const createTypeDocAdapter = (): ApiDocsPort => ({
13
+ extractEndpoints: async (sourcePath: string, _config?: unknown) => {
14
+ if (!sourcePath.trim()) {
15
+ throw configError("TypeDoc sourcePath is required", {
16
+ context: { sourcePath },
17
+ });
18
+ }
19
+
20
+ throw ioError(sourcePath, TYPEDOC_MISSING_ERROR);
21
+ },
22
+
23
+ generateDocs: async (_endpoints: readonly unknown[], outputPath: string) => {
24
+ if (!outputPath.trim()) {
25
+ throw configError("TypeDoc outputPath is required", {
26
+ context: { outputPath },
27
+ });
28
+ }
29
+
30
+ throw pluginError(TYPEDOC_MISSING_ERROR, {
31
+ context: { outputPath },
32
+ });
33
+ },
34
+ });