{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"\ud83e\udea1 doc-weaver \u2014 TypeScript Documentation Weaver","text":"
doc-weaver is the TypeScript counterpart to doc-forge. It compiles JSDoc-annotated TypeScript into a TypeDoc site (the MkDocs parallel) and a doc-forge-shaped MCP JSON bundle, so React packages document themselves for humans and agents alike.
Doc model: this wiki is written for humans \u2014 guides and conventions. The authoritative API contracts live in the code (JSDoc) and the machine-readable bundle under docs/mcp/.
index.json, nav.json, modules/*.json)component (PascalCase) and hook (use*)docs://index, docs://nav, and docs://modules/{module}npm install\nnpm run build\n This produces the doc-weaver binary under bin/ and dist/.
doc-weaver repositorydoc-weaver build --mcp --module src/index.ts into docs/mcp/doc-weaver (MCP :8010)\u00a9 Aetoskia Internal \u2014 doc-weaver 0.1.0
doc-weaver turns RDFC-compliant TypeScript JSDoc into maintainable reference documentation. It never edits source comments; it reads them, renders them, and assembles documentation from all available material \u2014 exactly as doc-forge does for Python docstrings.
Analysis is static: source is parsed by the TypeScript compiler API via TypeDoc and is never executed.
"},{"location":"01_overview/#which-build-should-you-use","title":"\ud83e\udded Which Build Should You Use?","text":"Flag Source Output--docs (--mkdocs, --lib) JSDoc comments site/lib/** TypeDoc HTML (the MkDocs parallel) --mcp JSDoc comments + model docs/mcp/** doc-forge-shaped JSON --api OpenAPI spec reserved --wiki Hand-written markdown docs/wiki/** (unchanged)"},{"location":"01_overview/#architecture","title":"\ud83c\udfd7\ufe0f Architecture","text":"TypeScript + JSDoc\n |\n TypeDoc (loader) -> serialized reflection JSON\n |\n TypeDocJsonToMCP (renderer) -> MCP bundle (docs/mcp/)\n generateHumanDocs (renderer) -> TypeDoc HTML site (site/lib/)\n The MCP renderer and the human renderer never depend on each other: both read the same serialized reflections, so the machine bundle and the human site can never disagree about a symbol.
"},{"location":"01_overview/#mcp-bundle-shape","title":"\ud83d\udd04 MCP bundle shape","text":"docs/mcp/** is a self-contained, machine-readable reference whose shape is byte-compatible with doc-forge:
docs/mcp/\n index.json { project, type: \"docforge-model\", modules_count, source }\n nav.json [ { module, resource: \"docs://modules/<module>\" } ]\n modules/<module>.json { module, content: { path, docstring, objects } }\n doc-weaver serve --mcp --module doc-weaver serves it over stdio. See the RDFC Guide for how to write the JSDoc that fills it.
RDFC \u2014 the React Doc-forge Convention \u2014 is the TypeScript counterpart to doc-forge's GSDFC. This page is the practical companion to the convention: how to write JSDoc so it renders correctly in the TypeDoc site and stays machine-parsable in the MCP bundle and by AI tooling.
"},{"location":"02_rdfc/#overview","title":"\ud83e\udded Overview","text":"doc-weaver compiles comments; it never rewrites or invents them.Document the file with a leading block comment. It becomes the module docstring in the MCP bundle.
/**\n * # Resource list\n *\n * Renders, filters, and paginates a resource collection.\n *\n * ---\n *\n * Notes:\n * - Reads configuration from the OpenAPI spec.\n * - Pagination is server-driven.\n */\n"},{"location":"02_rdfc/#components","title":"\ud83d\udce6 Components","text":"Document the component function and its props. Components are classified automatically as kind: \"component\" (PascalCase name).
/**\n * Render a single resource row with actions.\n *\n * @param props - Component props.\n * @param props.item - The resource record to display.\n * @param props.onSelect - Invoked when the row is selected.\n * @returns The rendered row element.\n *\n * @example\n * ```tsx\n * <ResourceList item={record} onSelect={handleSelect} />\n * ```\n */\nexport function ResourceList(props: ListCellProps) {\n // ...\n}\n"},{"location":"02_rdfc/#hooks","title":"\ud83d\udce6 Hooks","text":"Hooks are classified automatically as kind: \"hook\" (name starts with use).
/**\n * Subscribe to server-sent events for an item.\n *\n * @param url - SSE endpoint, or `null` to disable.\n * @param handlers - Event handlers keyed by event name.\n * @returns Connection state and the latest payload.\n *\n * @remarks\n * The subscription is torn down on unmount.\n */\nexport function useItemSse(url: string | null, handlers: ItemSseHandlers) {\n // ...\n}\n"},{"location":"02_rdfc/#types-interfaces-and-members","title":"\ud83d\udce6 Types, interfaces, and members","text":"Document the type and each member. Members become nested members entries in the MCP bundle.
/**\n * A single display field extracted from an OpenAPI schema.\n */\nexport interface FieldConfig {\n /** Property name in the payload. */\n name: string;\n /** `x-edit-as: date` \u2014 edit a `date-time` field with a date input. */\n editAs?: string;\n /** Schema-level `default` used to seed create-form state. */\n defaultValue?: unknown;\n}\n"},{"location":"02_rdfc/#notes-subsection-grouping","title":"\ud83d\udce6 Notes subsection grouping","text":"Group related information using labeled subsections (Markdown bold):
Notes:\n **Guarantees:**\n\n - deterministic output\n\n **Lifecycle:**\n\n - created during initialization\n - reused across renders\n"},{"location":"02_rdfc/#heading-map","title":"\ud83d\udce6 Heading map","text":"doc-weaver renders JSDoc block tags into stable markdown headings so both TypeDoc and the MCP bundle agree:
@param **Parameters:** @returns / @return **Returns:** @throws **Throws:** @example **Example:** @deprecated **Deprecated:** @see **See also:** @remarks **Remarks:** other **@tag:**"},{"location":"02_rdfc/#mapping-to-output-kinds","title":"\ud83d\udce6 Mapping to output kinds","text":"TS construct kind interface / type alias interface / type-alias function component (PascalCase) component custom hook (use*) hook plain function function object / class member property / method const / let / var variable An explicit @kind tag overrides the inferred kind.
Unlike doc-forge (which runs pydoclint in CI), doc-weaver performs no signature linting: TypeDoc extracts whatever JSDoc is present. Keep comments complete and accurate \u2014 they are the single source of truth for both the human site and the machine bundle.