@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,17 @@
1
+ /**
2
+ * Locale types for i18n support.
3
+ */
4
+
5
+ export type Locale = string;
6
+
7
+ export type LocaleConfig = {
8
+ readonly defaultLocale: Locale;
9
+ readonly locales: readonly Locale[];
10
+ readonly localePaths: Readonly<Record<Locale, string>>;
11
+ };
12
+
13
+ export type LocalizedDocPage = {
14
+ readonly locale: Locale;
15
+ readonly slug: string;
16
+ readonly originalSlug: string;
17
+ };
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Sharp adapter implementation.
3
+ * Provides image optimization using the sharp library.
4
+ */
5
+
6
+ import { configError, ioError } from "@create-docs/shared/errors";
7
+ import type { ImageOptimizerPort } from "../ports/image-optimizer-port";
8
+ import type { ImageConfig } from "../types/image";
9
+
10
+ const SHARP_MISSING_ERROR =
11
+ "sharp is not installed. Image optimization requires the sharp package and native image libraries.";
12
+
13
+ const validateImageConfig = (config: unknown): ImageConfig => {
14
+ const cfg = config as Partial<ImageConfig> | undefined;
15
+
16
+ if (!cfg?.formats?.length) {
17
+ throw configError("Image optimization config requires formats", {
18
+ context: { config: cfg },
19
+ hint: "Provide formats (e.g. ['webp']).",
20
+ });
21
+ }
22
+
23
+ if (!cfg?.widths?.length) {
24
+ throw configError("Image optimization config requires widths", {
25
+ context: { config: cfg },
26
+ hint: "Provide widths (e.g. [640, 1024]).",
27
+ });
28
+ }
29
+
30
+ if (cfg.quality == null || cfg.quality < 1 || cfg.quality > 100) {
31
+ throw configError(
32
+ "Image optimization config requires a quality between 1 and 100",
33
+ {
34
+ context: { config: cfg },
35
+ },
36
+ );
37
+ }
38
+
39
+ return cfg as ImageConfig;
40
+ };
41
+
42
+ export const createSharpAdapter = (): ImageOptimizerPort => ({
43
+ optimize: async (imagePath: string, config?: unknown) => {
44
+ try {
45
+ validateImageConfig(config);
46
+ throw ioError(imagePath, SHARP_MISSING_ERROR);
47
+ } catch (error) {
48
+ if (error && typeof error === "object" && "kind" in error) {
49
+ throw error;
50
+ }
51
+ throw ioError(imagePath, SHARP_MISSING_ERROR);
52
+ }
53
+ },
54
+
55
+ getMetadata: async (imagePath: string) => {
56
+ throw ioError(imagePath, SHARP_MISSING_ERROR);
57
+ },
58
+ });
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Domain events for image optimization
3
+ */
4
+ export interface OptimizationStartedEvent {
5
+ readonly type: "OPTIMIZATION_STARTED";
6
+ readonly timestamp: number;
7
+ readonly imagePath: string;
8
+ }
9
+
10
+ export interface OptimizationCompletedEvent {
11
+ readonly type: "OPTIMIZATION_COMPLETED";
12
+ readonly timestamp: number;
13
+ readonly imagePath: string;
14
+ readonly sizeReduction: number;
15
+ }
16
+
17
+ export type ImageOptimizationDomainEvent =
18
+ | OptimizationStartedEvent
19
+ | OptimizationCompletedEvent;
20
+
21
+ export const createOptimizationStartedEvent = (
22
+ imagePath: string,
23
+ now: number = Date.now(),
24
+ ): OptimizationStartedEvent => ({
25
+ type: "OPTIMIZATION_STARTED",
26
+ timestamp: now,
27
+ imagePath,
28
+ });
29
+
30
+ export const createOptimizationCompletedEvent = (
31
+ imagePath: string,
32
+ sizeReduction: number,
33
+ now: number = Date.now(),
34
+ ): OptimizationCompletedEvent => ({
35
+ type: "OPTIMIZATION_COMPLETED",
36
+ timestamp: now,
37
+ imagePath,
38
+ sizeReduction,
39
+ });
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Domain models for image optimization
3
+ */
4
+ export interface ImageOptimization {
5
+ readonly originalPath: string;
6
+ readonly optimizedPath: string;
7
+ readonly originalSize: number;
8
+ readonly optimizedSize: number;
9
+ readonly format: "webp" | "avif" | "png" | "jpg";
10
+ readonly quality: number;
11
+ }
12
+
13
+ export const createImageOptimization = (
14
+ originalPath: string,
15
+ optimizedPath: string,
16
+ originalSize: number,
17
+ optimizedSize: number,
18
+ format: ImageOptimization["format"],
19
+ quality: number,
20
+ ): ImageOptimization => ({
21
+ originalPath,
22
+ optimizedPath,
23
+ originalSize,
24
+ optimizedSize,
25
+ format,
26
+ quality,
27
+ });
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Pure image optimization 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 { ImageConfig, OptimizedImage } from "../../types/image";
9
+
10
+ export type ImageOptimizationError = {
11
+ readonly kind: "image-optimization-error";
12
+ readonly message: string;
13
+ };
14
+
15
+ /**
16
+ * Generate srcset for responsive images.
17
+ */
18
+ export const generateSrcset = (
19
+ baseSrc: string,
20
+ widths: readonly number[],
21
+ ): string => {
22
+ return widths.map((width) => `${baseSrc}?w=${width} ${width}w`).join(", ");
23
+ };
24
+
25
+ /**
26
+ * Calculate aspect ratio from dimensions.
27
+ */
28
+ export const calculateAspectRatio = (width: number, height: number): number => {
29
+ return width / height;
30
+ };
31
+
32
+ /**
33
+ * Validate image config.
34
+ */
35
+ export const validateImageConfig = (config: ImageConfig): boolean => {
36
+ if (config.formats.length === 0) return false;
37
+ if (config.widths.length === 0) return false;
38
+ if (config.quality < 0 || config.quality > 100) return false;
39
+ return true;
40
+ };
41
+
42
+ /**
43
+ * Process image metadata.
44
+ */
45
+ export const processImageMetadata = (
46
+ _metadata: unknown,
47
+ _config: ImageConfig,
48
+ ): Result<OptimizedImage, ImageOptimizationError> => {
49
+ try {
50
+ // This will be implemented via adapter
51
+ // For now, return a basic optimized image
52
+ return ok({
53
+ src: "",
54
+ srcset: "",
55
+ width: 0,
56
+ height: 0,
57
+ format: "webp",
58
+ });
59
+ } catch (error) {
60
+ return err({
61
+ kind: "image-optimization-error",
62
+ message: error instanceof Error ? error.message : "Unknown error",
63
+ });
64
+ }
65
+ };
@@ -0,0 +1,52 @@
1
+ // Image Optimization 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
+ * Image Path Schema
8
+ */
9
+ export const imagePathSchema: Type = type("string >= 1");
10
+
11
+ export type ImagePath = typeof imagePathSchema.infer;
12
+
13
+ /**
14
+ * Quality Schema
15
+ */
16
+ export const qualitySchema: Type = type("number >= 0").narrow(
17
+ (quality: number) => quality <= 100,
18
+ );
19
+
20
+ export type Quality = typeof qualitySchema.infer;
21
+
22
+ /**
23
+ * Validation errors
24
+ */
25
+ export class ValidationError extends Error {
26
+ constructor(message: string) {
27
+ super(message);
28
+ this.name = "ValidationError";
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Validate image path using Arktype
34
+ */
35
+ export const validateImagePath = (path: unknown): ImagePath => {
36
+ const result = imagePathSchema(path);
37
+ if (result instanceof type.errors) {
38
+ throw new ValidationError("Image path must be a non-empty string");
39
+ }
40
+ return result as ImagePath;
41
+ };
42
+
43
+ /**
44
+ * Validate quality using Arktype
45
+ */
46
+ export const validateQuality = (quality: unknown): Quality => {
47
+ const result = qualitySchema(quality);
48
+ if (result instanceof type.errors) {
49
+ throw new ValidationError("Quality must be a number between 0 and 100");
50
+ }
51
+ return result as Quality;
52
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Public API for the image-optimization module.
3
+ */
4
+
5
+ export { createSharpAdapter } from "./application/sharp-adapter";
6
+ export * from "./domain/operations/image-operations";
7
+ export * from "./ports/image-optimizer-port";
8
+ export * from "./types/image";
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Port for image optimization operations.
3
+ */
4
+
5
+ export type ImageOptimizerPort = {
6
+ /**
7
+ * Optimize image with specified formats and widths.
8
+ */
9
+ readonly optimize: (imagePath: string, config: unknown) => Promise<unknown>;
10
+
11
+ /**
12
+ * Get image metadata.
13
+ */
14
+ readonly getMetadata: (imagePath: string) => Promise<unknown>;
15
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Image optimization types for image processing pipeline.
3
+ */
4
+
5
+ export type ImageConfig = {
6
+ readonly formats: readonly ("webp" | "avif" | "jpeg" | "png")[];
7
+ readonly widths: readonly number[];
8
+ readonly quality: number;
9
+ };
10
+
11
+ export type OptimizedImage = {
12
+ readonly src: string;
13
+ readonly srcset: string;
14
+ readonly width: number;
15
+ readonly height: number;
16
+ readonly format: string;
17
+ };
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Live Editor Use Cases
3
+ *
4
+ * Orchestration layer for live editor operations
5
+ */
6
+
7
+ import type { CommitOptions, GitAdapter, PushOptions } from "../../ports";
8
+ import type { EditorState } from "../../types";
9
+
10
+ /**
11
+ * Load editor state
12
+ */
13
+ export const loadEditorState = async (
14
+ git: GitAdapter,
15
+ _filePath: string,
16
+ ): Promise<EditorState> => {
17
+ try {
18
+ const gitStatus = await git.getStatus();
19
+
20
+ return {
21
+ mode: "split",
22
+ currentFile: null, // Will be loaded separately
23
+ gitStatus,
24
+ loading: false,
25
+ };
26
+ } catch (error) {
27
+ return {
28
+ mode: "split",
29
+ currentFile: null,
30
+ gitStatus: null,
31
+ loading: false,
32
+ error: error instanceof Error ? error.message : String(error),
33
+ };
34
+ }
35
+ };
36
+
37
+ /**
38
+ * Commit and push changes
39
+ */
40
+ export const commitAndPush = async (
41
+ git: GitAdapter,
42
+ options: CommitOptions & { push?: boolean; pushOptions?: PushOptions },
43
+ ): Promise<void> => {
44
+ await git.commit(options);
45
+
46
+ if (options.push) {
47
+ await git.push(options.pushOptions);
48
+ }
49
+ };
50
+
51
+ /**
52
+ * Save file
53
+ */
54
+ export const saveFile = async (
55
+ fileSystem: { writeFile: (path: string, content: string) => Promise<void> },
56
+ filePath: string,
57
+ content: string,
58
+ ): Promise<void> => {
59
+ await fileSystem.writeFile(filePath, content);
60
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Domain events for live editor
3
+ */
4
+ export interface ContentChangedEvent {
5
+ readonly type: "CONTENT_CHANGED";
6
+ readonly timestamp: number;
7
+ readonly contentLength: number;
8
+ }
9
+
10
+ export interface CursorMovedEvent {
11
+ readonly type: "CURSOR_MOVED";
12
+ readonly timestamp: number;
13
+ readonly line: number;
14
+ readonly column: number;
15
+ }
16
+
17
+ export type LiveEditorDomainEvent = ContentChangedEvent | CursorMovedEvent;
18
+
19
+ export const createContentChangedEvent = (
20
+ contentLength: number,
21
+ now: number = Date.now(),
22
+ ): ContentChangedEvent => ({
23
+ type: "CONTENT_CHANGED",
24
+ timestamp: now,
25
+ contentLength,
26
+ });
27
+
28
+ export const createCursorMovedEvent = (
29
+ line: number,
30
+ column: number,
31
+ now: number = Date.now(),
32
+ ): CursorMovedEvent => ({
33
+ type: "CURSOR_MOVED",
34
+ timestamp: now,
35
+ line,
36
+ column,
37
+ });
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Git Operations
3
+ *
4
+ * Pure functions for Git operations using simple-git
5
+ */
6
+
7
+ import type { SimpleGit } from "simple-git";
8
+ import type { CommitOptions, GitStatus, PushOptions } from "../types";
9
+
10
+ interface GitFile {
11
+ path: string;
12
+ index: string;
13
+ working_dir: string;
14
+ }
15
+
16
+ /**
17
+ * Get current branch name
18
+ */
19
+ export const getCurrentBranch = async (git: SimpleGit): Promise<string> => {
20
+ const branch = await git.branch();
21
+ return branch.current;
22
+ };
23
+
24
+ /**
25
+ * Get git status
26
+ */
27
+ export const getGitStatus = async (git: SimpleGit): Promise<GitStatus> => {
28
+ const status = await git.status();
29
+ const branch = await getCurrentBranch(git);
30
+
31
+ return {
32
+ branch,
33
+ hasChanges: status.files.length > 0,
34
+ untracked: status.files
35
+ .filter((f: GitFile) => f.working_dir === "?")
36
+ .map((f: GitFile) => f.path),
37
+ modified: status.files
38
+ .filter((f: GitFile) => f.working_dir === "M")
39
+ .map((f: GitFile) => f.path),
40
+ staged: status.files
41
+ .filter((f: GitFile) => f.index === "M")
42
+ .map((f: GitFile) => f.path),
43
+ };
44
+ };
45
+
46
+ /**
47
+ * Commit changes
48
+ */
49
+ export const commitChanges = async (
50
+ git: SimpleGit,
51
+ options: CommitOptions,
52
+ ): Promise<void> => {
53
+ await git.add(".");
54
+ if (options.author && options.email) {
55
+ await git.commit([
56
+ options.message,
57
+ "--author",
58
+ `${options.author} <${options.email}>`,
59
+ ]);
60
+ } else {
61
+ await git.commit(options.message);
62
+ }
63
+ };
64
+
65
+ /**
66
+ * Push changes
67
+ */
68
+ export const pushChanges = async (
69
+ git: SimpleGit,
70
+ options: PushOptions = {},
71
+ ): Promise<void> => {
72
+ const remote = options.remote || "origin";
73
+ const branch = options.branch || (await getCurrentBranch(git));
74
+
75
+ if (options.force) {
76
+ await git.push(["--force", remote, branch]);
77
+ } else {
78
+ await git.push(remote, branch);
79
+ }
80
+ };
81
+
82
+ /**
83
+ * Stage file
84
+ */
85
+ export const stageFile = async (
86
+ git: SimpleGit,
87
+ path: string,
88
+ ): Promise<void> => {
89
+ await git.add(path);
90
+ };
91
+
92
+ /**
93
+ * Unstage file
94
+ */
95
+ export const unstageFile = async (
96
+ git: SimpleGit,
97
+ path: string,
98
+ ): Promise<void> => {
99
+ await git.reset(["--mixed", path]);
100
+ };
101
+
102
+ /**
103
+ * Discard changes
104
+ */
105
+ export const discardChanges = async (
106
+ git: SimpleGit,
107
+ path: string,
108
+ ): Promise<void> => {
109
+ await git.checkout(["--", path]);
110
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Live Editor Domain
3
+ *
4
+ * Pure business logic for live editor operations
5
+ */
6
+
7
+ export {
8
+ commitChanges,
9
+ discardChanges,
10
+ getCurrentBranch,
11
+ getGitStatus,
12
+ pushChanges,
13
+ stageFile,
14
+ unstageFile,
15
+ } from "./gitOperations";
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Domain models for live editor
3
+ */
4
+ export interface EditorState {
5
+ readonly content: string;
6
+ readonly language: string;
7
+ readonly cursorPosition: { line: number; column: number };
8
+ readonly selection?: { start: number; end: number };
9
+ }
10
+
11
+ export const createEditorState = (
12
+ content: string,
13
+ language: string,
14
+ cursorPosition: { line: number; column: number },
15
+ options?: { selection?: { start: number; end: number } },
16
+ ): EditorState => ({
17
+ content,
18
+ language,
19
+ cursorPosition,
20
+ selection: options?.selection,
21
+ });
@@ -0,0 +1,55 @@
1
+ // Live Editor 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
+ * Content Schema
8
+ */
9
+ export const contentSchema: Type = type("string");
10
+
11
+ export type Content = typeof contentSchema.infer;
12
+
13
+ /**
14
+ * Cursor Position Schema
15
+ */
16
+ export const cursorPositionSchema: Type = type({
17
+ line: "number >= 0",
18
+ column: "number >= 0",
19
+ });
20
+
21
+ export type CursorPosition = typeof cursorPositionSchema.infer;
22
+
23
+ /**
24
+ * Validation errors
25
+ */
26
+ export class ValidationError extends Error {
27
+ constructor(message: string) {
28
+ super(message);
29
+ this.name = "ValidationError";
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Validate content using Arktype
35
+ */
36
+ export const validateContent = (content: unknown): Content => {
37
+ const result = contentSchema(content);
38
+ if (result instanceof type.errors) {
39
+ throw new ValidationError("Content must be a string");
40
+ }
41
+ return result as Content;
42
+ };
43
+
44
+ /**
45
+ * Validate cursor position using Arktype
46
+ */
47
+ export const validateCursorPosition = (position: unknown): CursorPosition => {
48
+ const result = cursorPositionSchema(position);
49
+ if (result instanceof type.errors) {
50
+ throw new ValidationError(
51
+ "Cursor position must be a valid object with line and column",
52
+ );
53
+ }
54
+ return result as CursorPosition;
55
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Live Editor Module
3
+ *
4
+ * Live editor with Git integration for documentation
5
+ */
6
+
7
+ export {
8
+ commitAndPush,
9
+ loadEditorState,
10
+ saveFile,
11
+ } from "./application/usecases";
12
+ export * from "./domain";
13
+ export * from "./ports";
14
+ export * from "./types";
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Live Editor Ports
3
+ *
4
+ * Module-specific interfaces for live editor
5
+ */
6
+
7
+ import type {
8
+ CommitOptions,
9
+ FileContent,
10
+ GitStatus,
11
+ PushOptions,
12
+ } from "../types";
13
+
14
+ /**
15
+ * Git adapter interface
16
+ */
17
+ export interface GitAdapter {
18
+ /** Get current branch */
19
+ getCurrentBranch(): Promise<string>;
20
+ /** Get git status */
21
+ getStatus(): Promise<GitStatus>;
22
+ /** Commit changes */
23
+ commit(options: CommitOptions): Promise<void>;
24
+ /** Push changes */
25
+ push(options?: PushOptions): Promise<void>;
26
+ /** Stage file */
27
+ stageFile(path: string): Promise<void>;
28
+ /** Unstage file */
29
+ unstageFile(path: string): Promise<void>;
30
+ /** Discard changes */
31
+ discardChanges(path: string): Promise<void>;
32
+ }
33
+
34
+ /**
35
+ * File system adapter interface
36
+ */
37
+ export interface FileSystemAdapter {
38
+ /** Read file */
39
+ readFile(path: string): Promise<string>;
40
+ /** Write file */
41
+ writeFile(path: string, content: string): Promise<void>;
42
+ /** Watch file */
43
+ watchFile(path: string, callback: (content: string) => void): () => void;
44
+ /** Get file stats */
45
+ getFileStats(path: string): Promise<{ mtimeMs: number; size: number }>;
46
+ }
47
+
48
+ // Re-export types for convenience
49
+ export type { CommitOptions, FileContent, GitStatus, PushOptions };