{"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/.

"},{"location":"#key-features","title":"\ud83d\ude80 Key Features","text":""},{"location":"#installation","title":"\ud83d\udce6 Installation","text":"
npm install\nnpm run build\n

This produces the doc-weaver binary under bin/ and dist/.

"},{"location":"#documentation-structure","title":"\ud83d\udcc1 Documentation Structure","text":"Section Description Overview What doc-weaver is and how it fits RDFC Guide How to write RDFC-conformant JSDoc"},{"location":"#related-resources","title":"\ud83d\udd17 Related Resources","text":"

\u00a9 Aetoskia Internal \u2014 doc-weaver 0.1.0

"},{"location":"01_overview/","title":"Library Overview","text":"

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.

"},{"location":"01_overview/#read-next","title":"\u27a1\ufe0f Read Next","text":""},{"location":"02_rdfc/","title":"RDFC Guide","text":"

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":""},{"location":"02_rdfc/#module-file-level","title":"\ud83d\udce6 Module (file) level","text":"

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:

JSDoc tag Rendered heading @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.

"},{"location":"02_rdfc/#enforcement","title":"\ud83d\udee1\ufe0f Enforcement","text":"

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.

"},{"location":"02_rdfc/#related","title":"Related","text":""}]}