Skip to content

fix(docs): resolved markdown for function Copy Page - #495

Open
geril07 wants to merge 4 commits into
siberiacancode:mainfrom
geril07:fix-copy-page
Open

fix(docs): resolved markdown for function Copy Page#495
geril07 wants to merge 4 commits into
siberiacancode:mainfrom
geril07:fix-copy-page

Conversation

@geril07

@geril07 geril07 commented Aug 3, 2026

Copy link
Copy Markdown

Дисклеймер

Сгенерировано ИИ, ревью от человека поверхностное + небольшие смоук-тесты.

Для референса брался shadcn/ui (Copy Page / View as Markdown / resolved page content).

Дальше от ИИ:


⚠️ Автоген не в этом PR

В PR только код (generate-functions, generate-static, page.tsx).

Массовый diff public/functions/**/*.md (~177 файлов) не включён, чтобы ревью было читаемым.

После ревью — автоген поверх или отдельным follow-up.

Зачем

На страницах функций Copy Page копировал внутренний MDX-shell, а не документацию. Текст почти бесполезен для AI и шаринга. Тот же shell отдавался как View as Markdown.

Нужен один resolved markdown-артефакт на функцию: полезный контент, порядок секций как на странице (в духе shadcn).

Closes #494

Что сделано

  1. Генерация share-markdown в generate-functions (plain source/types/demo/API → md).
  2. generate-static не перезаписывает public/functions/** MDX-shell'ами.
  3. Copy Page читает public/functions/{hooks|helpers}/{name}.md вместо getText('raw').
  4. Запись share-md в public/functions/** заложена в генераторе (сами файлы — follow-up / автоген после ревью).

Структура md (как страница):

  • demo-код сверху (без отдельного ## Demo)
  • ## Installation — library, CLI, manual + source
  • ## Usage
  • ## Type Declarations
  • ## API — таблицы Parameters / Returns (как FunctionApi), overloads
  • ## Contributors

Как проверить

  • /functions/hooks/useCopy.md — секции как на странице, есть source/API-таблица, нет import metadata
  • Copy Page на /functions/hooks/useCopy — тот же текст, что .md
  • useActiveElement.md — overload-группы в API
  • pnpm run generate:static не затирает share-md

Верификация

Что смотрели

  • Контракт кода: createShareMarkdown / createShareApiMarkdown, createMdxTemplate, function-api.tsx, page.tsx, generate-static skip
  • Артефакты: все 177 public/functions/**/*.md (shell-маркеры, banned H2, parity mdx↔md, API-таблицы, fences)
  • Сэмплы: useCopy, useActiveElement (overloads), useQuery (богатый API), helpers (cn, createContext), warning (useOnce), returns-only / no-API
  • Live: pnpm dev :4000 — curl HTML + .md, Playwright outlines H2/H3, RSC payload Copy Page == disk .md
  • Ранее: E2E Copy Page через intercept clipboard.writeText (resolved md, не shell)

Как

  • Статика: rg по shell/H2, сверка outline, сравнение с MDX/meta
  • Live HTTP: curl 200 + body
  • Браузер: Playwright — headings страницы vs md; payload copy в props/RSC
  • Регрессия: generate:static не clobber'ит share-md

Итог проверки

PASS WITH GAPS — match со страницей достаточный; blockers нет.

Несоответствия page ↔ md (не правили)

  • Installation: на UI табы, в md подряд bash / bash / manual+source — табы это UI-хром; в markdown линейный flatten (как shadcn). Контент тот же.
  • Demo: live banner на UI, в md только raw *.demo.tsx без ## Demo — интерактив в clipboard не переносится; source demo = shadcn-подход с ComponentPreview. Отдельного ## Demo на странице нет.
  • Returns: в md часто + description из JSDoc, на UI в FunctionApi в основном type — description уже в данных; для AI полезнее. Строгий 1:1 с UI не критичен.
  • Header badges (category / usage / test) не в body md — часть frontmatter/хрома страницы, не секции TOC.
  • Demo UI может показывать свои H2/H3 («Account settings» и т.п.) — содержимое демо-компонента, не outline docs; в md остаётся внутри code fence.

Не автоматизировано в последнем прогоне

  • Headless click → system clipboard (в одном прогоне intercept DOM click не сработал; идентичность copy доказана через RSC props == .md)

Коммиты

  • fix(docs): resolve function Copy Page from share markdown
  • fix(docs): align share markdown sections with function page
  • fix(docs): render share markdown API as tables
  • fix(docs): use tsx fences in function share markdown

Автоген public/functions/** в PR не входит (см. секцию выше).

Зачем каждое изменение

packages/newdocs/scripts/generate-functions.ts

Зачем: единственное место с plain source, types, demo и JSDoc API до Shiki/HTML.
Почему так: UI остаётся MDX + meta; для Copy/AI нужен линейный md. Build-time generation = пайплайн репо, без runtime-резолва JSX.
Что внутри:

  • createShareMarkdown — порядок секций как у страницы
  • createShareApiMarkdown — таблицы API как FunctionApi
  • запись в public/functions/..., prune stale shells
  • fences: tsx / bash

packages/newdocs/scripts/generate-static.ts

Зачем: раньше копировал весь content/**/*.mdxpublic/**/*.md, в т.ч. function shells.
Почему обязательно: идёт после generate-functions и без skip затирал resolved md.
Что внутри: skip functions/.

packages/newdocs/app/(docs)/functions/[[...slug]]/page.tsx

Зачем: сюда приходит строка для Copy Page.
Почему так: FunctionHeader уже делает copy(markdown); меняем источник на тот же файл, что и .md URL → Copy и View as Markdown не расходятся.
Что внутри: readFile(public/functions/{type}s/{name}.md) вместо getText('raw').

packages/newdocs/public/functions/**/*.md (не в этом PR)

Зачем: resolved share-md для Copy Page / View as Markdown (tracked gen в репо).
Почему не здесь: ~177 файлов зашумляют diff; после ревью — автоген поверх или отдельным follow-up.

geril07 added 4 commits August 3, 2026 15:32
…down

Generate AI-ready per-function markdown at build time, skip static MDX
mirroring for function pages so it is not clobbered, and wire Copy Page
to the public share artifact instead of raw MDX shells.
…n page

Match interactive page order: demo, Installation (with manual source),
Usage, Type Declarations, API, Contributors. Drop invented Source/Demo/
Dependencies headings.
Match the page FunctionApi layout: Parameters table (Name, Type,
Default, Note) and Returns per overload group.
Align source and type declaration code fences with the page (tsx).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: Copy Page на страницах хуков копирует MDX-shell вместо полезного markdown

1 participant