@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
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Public API for the toc module.
3
+ */
4
+
5
+ export { createMarkdownTocAdapter } from "./application/markdown-toc-adapter";
6
+ export * from "./domain/operations/toc-operations";
7
+ export * from "./ports/toc-port";
8
+ export * from "./types/toc";
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Port for TOC operations.
3
+ */
4
+
5
+ export type TocPort = {
6
+ /**
7
+ * Extract headings from markdown content.
8
+ */
9
+ readonly extractHeadings: (
10
+ content: string,
11
+ config: unknown,
12
+ ) => Promise<readonly unknown[]>;
13
+
14
+ /**
15
+ * Generate TOC from headings.
16
+ */
17
+ readonly generateToc: (
18
+ headings: readonly unknown[],
19
+ config: unknown,
20
+ ) => Promise<unknown>;
21
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Table of Contents types for enhanced TOC features.
3
+ */
4
+
5
+ export type TocConfig = {
6
+ readonly enabled: boolean;
7
+ readonly maxDepth: number;
8
+ readonly minHeadingLevel: number;
9
+ readonly includeSubheadings: boolean;
10
+ };
11
+
12
+ export type TocItemEnhanced = {
13
+ readonly id: string;
14
+ readonly text: string;
15
+ readonly level: number;
16
+ children?: TocItemEnhanced[];
17
+ };
@@ -0,0 +1,30 @@
1
+ /**
2
+ * TOC Generator Use Cases
3
+ *
4
+ * Orchestration layer for TOC generation
5
+ */
6
+
7
+ import { buildTocTree, flattenToc, parseHeadings } from "../../domain";
8
+ import type { TocItem, TocOptions } from "../../types";
9
+
10
+ /**
11
+ * Generate TOC from markdown content
12
+ */
13
+ export const generateToc = (
14
+ content: string,
15
+ options: TocOptions = {},
16
+ ): TocItem[] => {
17
+ const headings = parseHeadings(content);
18
+ return buildTocTree(headings, options);
19
+ };
20
+
21
+ /**
22
+ * Generate flat TOC from markdown content
23
+ */
24
+ export const generateFlatToc = (
25
+ content: string,
26
+ options: TocOptions = {},
27
+ ): TocItem[] => {
28
+ const toc = generateToc(content, options);
29
+ return flattenToc(toc);
30
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * TOC Generator Domain
3
+ *
4
+ * Pure business logic for TOC generation
5
+ */
6
+
7
+ export {
8
+ buildTocTree,
9
+ flattenToc,
10
+ generateSlug,
11
+ parseHeadings,
12
+ } from "./tocOperations";
@@ -0,0 +1,104 @@
1
+ /**
2
+ * TOC Operations
3
+ *
4
+ * Pure functions for table of contents generation
5
+ */
6
+
7
+ import type { Heading, TocItem, TocOptions } from "../types";
8
+
9
+ /**
10
+ * Parse headings from markdown content
11
+ */
12
+ export const parseHeadings = (content: string): Heading[] => {
13
+ const headings: Heading[] = [];
14
+ const lines = content.split("\n");
15
+
16
+ for (const line of lines) {
17
+ const match = line.match(/^(#{1,6})\s+(.+)$/);
18
+ if (match) {
19
+ headings.push({
20
+ text: match[2].trim(),
21
+ level: match[1].length,
22
+ line: lines.indexOf(line) + 1,
23
+ });
24
+ }
25
+ }
26
+
27
+ return headings;
28
+ };
29
+
30
+ /**
31
+ * Generate slug from text
32
+ */
33
+ export const generateSlug = (text: string): string => {
34
+ return text
35
+ .toLowerCase()
36
+ .replace(/[^\w\s-]/g, "")
37
+ .replace(/\s+/g, "-")
38
+ .replace(/-+/g, "-")
39
+ .replace(/^-|-$/g, "");
40
+ };
41
+
42
+ /**
43
+ * Build TOC tree from headings
44
+ */
45
+ export const buildTocTree = (
46
+ headings: Heading[],
47
+ options: TocOptions = {},
48
+ ): TocItem[] => {
49
+ const { maxDepth = 6, minDepth = 1, include = [], exclude = [] } = options;
50
+
51
+ const filteredHeadings = headings.filter((heading) => {
52
+ if (heading.level < minDepth || heading.level > maxDepth) return false;
53
+ if (include.length > 0 && !include.includes(heading.text)) return false;
54
+ if (exclude.length > 0 && exclude.includes(heading.text)) return false;
55
+ return true;
56
+ });
57
+
58
+ const root: TocItem[] = [];
59
+ const stack: { item: TocItem; level: number }[] = [];
60
+
61
+ for (const heading of filteredHeadings) {
62
+ const item: TocItem = {
63
+ text: heading.text,
64
+ level: heading.level,
65
+ id: generateSlug(heading.text),
66
+ };
67
+
68
+ // Pop stack until we find the parent
69
+ while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) {
70
+ stack.pop();
71
+ }
72
+
73
+ if (stack.length === 0) {
74
+ root.push(item);
75
+ } else {
76
+ const parent = stack[stack.length - 1].item;
77
+ if (!parent.children) parent.children = [];
78
+ parent.children.push(item);
79
+ }
80
+
81
+ stack.push({ item, level: heading.level });
82
+ }
83
+
84
+ return root;
85
+ };
86
+
87
+ /**
88
+ * Flatten TOC tree to list
89
+ */
90
+ export const flattenToc = (toc: TocItem[]): TocItem[] => {
91
+ const result: TocItem[] = [];
92
+
93
+ const traverse = (items: TocItem[]) => {
94
+ for (const item of items) {
95
+ result.push(item);
96
+ if (item.children) {
97
+ traverse(item.children);
98
+ }
99
+ }
100
+ };
101
+
102
+ traverse(toc);
103
+ return result;
104
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * TOC Generator Module
3
+ *
4
+ * Table of contents generation for documentation
5
+ */
6
+
7
+ export { generateFlatToc, generateToc } from "./application/usecases";
8
+ export * from "./domain";
9
+ export * from "./types";
@@ -0,0 +1,20 @@
1
+ /**
2
+ * TOC Generator Ports
3
+ *
4
+ * Module-specific interfaces for TOC generation
5
+ */
6
+
7
+ import type { TocItem, TocOptions } from "../types";
8
+
9
+ /**
10
+ * Content parser interface
11
+ */
12
+ export interface ContentParser {
13
+ /** Parse content and return headings */
14
+ parseHeadings(
15
+ content: string,
16
+ ): Promise<{ text: string; level: number; line: number }[]>;
17
+ }
18
+
19
+ // Re-export types for convenience
20
+ export type { TocItem, TocOptions };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * TOC Generator Types
3
+ *
4
+ * Domain types for table of contents generation
5
+ */
6
+
7
+ /**
8
+ * TOC item
9
+ */
10
+ export interface TocItem {
11
+ /** Heading text */
12
+ text: string;
13
+ /** Heading level (1-6) */
14
+ level: number;
15
+ /** Anchor ID */
16
+ id: string;
17
+ /** Child items */
18
+ children?: TocItem[];
19
+ }
20
+
21
+ /**
22
+ * TOC options
23
+ */
24
+ export interface TocOptions {
25
+ /** Max depth */
26
+ maxDepth?: number;
27
+ /** Min depth */
28
+ minDepth?: number;
29
+ /** Include headings */
30
+ include?: string[];
31
+ /** Exclude headings */
32
+ exclude?: string[];
33
+ }
34
+
35
+ /**
36
+ * Heading
37
+ */
38
+ export interface Heading {
39
+ /** Heading text */
40
+ text: string;
41
+ /** Heading level */
42
+ level: number;
43
+ /** Line number */
44
+ line: number;
45
+ }
46
+
47
+ /** Content parser port */
48
+ export interface ContentParser {
49
+ parse: (raw: string) => unknown;
50
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Domain events for version control
3
+ */
4
+ export interface VersionCreatedEvent {
5
+ readonly type: "VERSION_CREATED";
6
+ readonly timestamp: number;
7
+ readonly versionNumber: string;
8
+ readonly author: string;
9
+ }
10
+
11
+ export interface VersionRestoredEvent {
12
+ readonly type: "VERSION_RESTORED";
13
+ readonly timestamp: number;
14
+ readonly versionNumber: string;
15
+ }
16
+
17
+ export type VersionControlDomainEvent =
18
+ | VersionCreatedEvent
19
+ | VersionRestoredEvent;
20
+
21
+ export const createVersionCreatedEvent = (
22
+ versionNumber: string,
23
+ author: string,
24
+ now: number = Date.now(),
25
+ ): VersionCreatedEvent => ({
26
+ type: "VERSION_CREATED",
27
+ timestamp: now,
28
+ versionNumber,
29
+ author,
30
+ });
31
+
32
+ export const createVersionRestoredEvent = (
33
+ versionNumber: string,
34
+ now: number = Date.now(),
35
+ ): VersionRestoredEvent => ({
36
+ type: "VERSION_RESTORED",
37
+ timestamp: now,
38
+ versionNumber,
39
+ });
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Domain models for version control
3
+ */
4
+ export interface Version {
5
+ readonly id: string;
6
+ readonly number: string;
7
+ readonly timestamp: number;
8
+ readonly author: string;
9
+ readonly message: string;
10
+ }
11
+
12
+ export const createVersion = (
13
+ id: string,
14
+ number: string,
15
+ author: string,
16
+ message: string,
17
+ options?: { timestamp?: number },
18
+ now: number = Date.now(),
19
+ ): Version => ({
20
+ id,
21
+ number,
22
+ author,
23
+ message,
24
+ timestamp: options?.timestamp ?? now,
25
+ });
@@ -0,0 +1,50 @@
1
+ // Version Control 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
+ * Version Number Schema
8
+ */
9
+ export const versionNumberSchema: Type = type(/^\d+\.\d+\.\d+$/);
10
+
11
+ export type VersionNumber = typeof versionNumberSchema.infer;
12
+
13
+ /**
14
+ * Author Schema
15
+ */
16
+ export const authorSchema: Type = type("string >= 1");
17
+
18
+ export type Author = typeof authorSchema.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 version number using Arktype
32
+ */
33
+ export const validateVersionNumber = (number: unknown): VersionNumber => {
34
+ const result = versionNumberSchema(number);
35
+ if (result instanceof type.errors) {
36
+ throw new ValidationError("Version number must be in format x.y.z");
37
+ }
38
+ return result as VersionNumber;
39
+ };
40
+
41
+ /**
42
+ * Validate author using Arktype
43
+ */
44
+ export const validateAuthor = (author: unknown): Author => {
45
+ const result = authorSchema(author);
46
+ if (result instanceof type.errors) {
47
+ throw new ValidationError("Author must be a non-empty string");
48
+ }
49
+ return result as Author;
50
+ };
@@ -0,0 +1,44 @@
1
+ /**
2
+ * File system adapter for version loading.
3
+ */
4
+
5
+ import { readdir } from "node:fs/promises";
6
+ import { join } from "node:path";
7
+ import { ioError } from "@create-docs/shared/errors";
8
+ import type { VersionLoaderPort } from "../ports/version-loader-port";
9
+
10
+ export const createFsVersionLoader = (): VersionLoaderPort => ({
11
+ scanVersions: async (docsDir: string) => {
12
+ try {
13
+ const entries = await readdir(docsDir, { withFileTypes: true });
14
+ return entries
15
+ .filter((entry) => entry.isDirectory())
16
+ .map((entry) => entry.name);
17
+ } catch (error) {
18
+ throw ioError(docsDir, "Failed to scan versions", error);
19
+ }
20
+ },
21
+
22
+ loadVersionDocs: async (version: string, docsDir: string) => {
23
+ const versionDir = join(docsDir, version);
24
+ try {
25
+ const entries = await readdir(versionDir, {
26
+ withFileTypes: true,
27
+ recursive: true,
28
+ });
29
+ const results: string[] = [];
30
+ for (const entry of entries) {
31
+ if (
32
+ entry.isFile() &&
33
+ (entry.name.endsWith(".md") || entry.name.endsWith(".mdoc"))
34
+ ) {
35
+ const parentPath = entry.parentPath || versionDir;
36
+ results.push(join(parentPath, entry.name));
37
+ }
38
+ }
39
+ return results;
40
+ } catch (error) {
41
+ throw ioError(versionDir, "Failed to load version docs", error);
42
+ }
43
+ },
44
+ });
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Pure versioning operations.
3
+ * No I/O. No exceptions thrown.
4
+ */
5
+
6
+ import type {
7
+ Version,
8
+ VersionConfig,
9
+ VersionedDocPage,
10
+ } from "../../types/versioning";
11
+
12
+ /**
13
+ * Extract version from a slug path.
14
+ * Example: "v1/getting-started/introduction" -> "v1"
15
+ */
16
+ export const extractVersionFromSlug = (
17
+ slug: string,
18
+ versions: readonly Version[],
19
+ ): Version | null => {
20
+ const parts = slug.split("/");
21
+ const firstPart = parts[0];
22
+ if (firstPart && versions.includes(firstPart)) {
23
+ return firstPart;
24
+ }
25
+ return null;
26
+ };
27
+
28
+ /**
29
+ * Remove version prefix from a slug.
30
+ * Example: "v1/getting-started/introduction" -> "getting-started/introduction"
31
+ */
32
+ export const removeVersionFromSlug = (
33
+ slug: string,
34
+ version: Version,
35
+ ): string => {
36
+ return slug.startsWith(`${version}/`) ? slug.slice(version.length + 1) : slug;
37
+ };
38
+
39
+ /**
40
+ * Add version prefix to a slug.
41
+ * Example: "getting-started/introduction" + "v1" -> "v1/getting-started/introduction"
42
+ */
43
+ export const addVersionToSlug = (slug: string, version: Version): string => {
44
+ return `${version}/${slug}`;
45
+ };
46
+
47
+ /**
48
+ * Group doc pages by version.
49
+ */
50
+ export const groupDocsByVersion = (
51
+ pages: readonly VersionedDocPage[],
52
+ ): Readonly<Record<Version, readonly VersionedDocPage[]>> => {
53
+ const groups: Record<string, VersionedDocPage[]> = {};
54
+ for (const page of pages) {
55
+ const { version } = page;
56
+ if (!groups[version]) {
57
+ groups[version] = [];
58
+ }
59
+ groups[version].push(page);
60
+ }
61
+ return groups;
62
+ };
63
+
64
+ /**
65
+ * Validate version config.
66
+ */
67
+ export const validateVersionConfig = (config: VersionConfig): boolean => {
68
+ if (
69
+ !config.defaultVersion ||
70
+ !config.versions.includes(config.defaultVersion)
71
+ ) {
72
+ return false;
73
+ }
74
+ for (const version of config.versions) {
75
+ if (!config.versionPaths[version]) {
76
+ return false;
77
+ }
78
+ }
79
+ return true;
80
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Public API for the versioning module.
3
+ */
4
+
5
+ export { createFsVersionLoader } from "./application/fs-version-loader";
6
+ export * from "./domain/operations/versioning-operations";
7
+ export * from "./ports/version-loader-port";
8
+ export * from "./types/versioning";
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Port for version loading operations.
3
+ */
4
+
5
+ export type VersionLoaderPort = {
6
+ /**
7
+ * Scan docs directory for version-specific folders.
8
+ */
9
+ readonly scanVersions: (docsDir: string) => Promise<readonly string[]>;
10
+
11
+ /**
12
+ * Load docs for a specific version.
13
+ */
14
+ readonly loadVersionDocs: (
15
+ version: string,
16
+ docsDir: string,
17
+ ) => Promise<readonly string[]>;
18
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Versioning types for multi-version documentation support.
3
+ */
4
+
5
+ export type Version = string;
6
+
7
+ export type VersionConfig = {
8
+ readonly defaultVersion: Version;
9
+ readonly versions: readonly Version[];
10
+ readonly versionPaths: Readonly<Record<Version, string>>;
11
+ };
12
+
13
+ export type VersionedDocPage = {
14
+ readonly version: Version;
15
+ readonly slug: string;
16
+ readonly originalSlug: string;
17
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Domain events for workflow
3
+ */
4
+ export interface WorkflowStartedEvent {
5
+ readonly type: "WORKFLOW_STARTED";
6
+ readonly timestamp: number;
7
+ readonly workflowId: string;
8
+ }
9
+
10
+ export interface WorkflowCompletedEvent {
11
+ readonly type: "WORKFLOW_COMPLETED";
12
+ readonly timestamp: number;
13
+ readonly workflowId: string;
14
+ }
15
+
16
+ export interface StepCompletedEvent {
17
+ readonly type: "STEP_COMPLETED";
18
+ readonly timestamp: number;
19
+ readonly workflowId: string;
20
+ readonly stepId: string;
21
+ }
22
+
23
+ export type WorkflowDomainEvent =
24
+ | WorkflowStartedEvent
25
+ | WorkflowCompletedEvent
26
+ | StepCompletedEvent;
27
+
28
+ export const createWorkflowStartedEvent = (
29
+ workflowId: string,
30
+ now: number = Date.now(),
31
+ ): WorkflowStartedEvent => ({
32
+ type: "WORKFLOW_STARTED",
33
+ timestamp: now,
34
+ workflowId,
35
+ });
36
+
37
+ export const createWorkflowCompletedEvent = (
38
+ workflowId: string,
39
+ now: number = Date.now(),
40
+ ): WorkflowCompletedEvent => ({
41
+ type: "WORKFLOW_COMPLETED",
42
+ timestamp: now,
43
+ workflowId,
44
+ });
45
+
46
+ export const createStepCompletedEvent = (
47
+ workflowId: string,
48
+ stepId: string,
49
+ now: number = Date.now(),
50
+ ): StepCompletedEvent => ({
51
+ type: "STEP_COMPLETED",
52
+ timestamp: now,
53
+ workflowId,
54
+ stepId,
55
+ });
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Domain models for workflow
3
+ */
4
+ export interface WorkflowStep {
5
+ readonly id: string;
6
+ readonly name: string;
7
+ readonly description: string;
8
+ readonly status: "pending" | "in-progress" | "completed" | "failed";
9
+ }
10
+
11
+ export interface Workflow {
12
+ readonly id: string;
13
+ readonly name: string;
14
+ readonly steps: readonly WorkflowStep[];
15
+ readonly currentStepIndex: number;
16
+ }
17
+
18
+ export const createWorkflowStep = (
19
+ id: string,
20
+ name: string,
21
+ description: string,
22
+ status: WorkflowStep["status"] = "pending",
23
+ ): WorkflowStep => ({
24
+ id,
25
+ name,
26
+ description,
27
+ status,
28
+ });
29
+
30
+ export const createWorkflow = (
31
+ id: string,
32
+ name: string,
33
+ steps: readonly WorkflowStep[],
34
+ currentStepIndex: number = 0,
35
+ ): Workflow => ({
36
+ id,
37
+ name,
38
+ steps,
39
+ currentStepIndex,
40
+ });