mirror of
https://github.com/vercel/streamdown.git
synced 2026-09-19 02:18:37 +08:00
0b80aed583
* Plugin trial * Update docs and tests * Update homepage add new section * Update usage.tsx * Split out CJK plugin * Extract plugins into new packages * Misc fixes * Fix lint / formatting * Fix: The Streamdown component's memo comparison doesn't compare the plugins prop, preventing re-renders when plugins change while other props stay the same Co-authored-by: haydenbleasel <hello@haydenbleasel.com> * Fix: TypeScript type mismatch at line 89 in `index.ts`: the visitor function's `index` parameter is typed as `number | undefined`, but the `visit` function expects `number | null`. The `undefined` type is not assignable to `number | null`. This commit fixes the issue reported at /vercel/path0/packages/streamdown-cjk/index.ts:89 ## TypeScript type incompatibility in visitor callback **What fails:** TypeScript compiler fails during DTS (type definitions) build in `packages/streamdown-cjk/index.ts` at line 89 **How to reproduce:** ```bash cd packages/streamdown-cjk pnpm build ``` **Result:** ``` index.ts(89,3): error TS2769: No overload matches this call. Overload 1 of 2, '(tree: Root, check: "link", visitor: BuildVisitor<Root, "link">, reverse?: boolean | null | undefined): undefined', gave the following error. Argument of type '(node: Link, index: number | null, parent?: Parent) => number | undefined' is not assignable to parameter of type 'BuildVisitor<Root, "link">'. Types of parameters 'index' and 'index' are incompatible. Type 'number | undefined' is not assignable to type 'number | null'. Type 'undefined' is not assignable to type 'number | null'. ``` **Root cause:** The visitor callback function passed to the `visit()` function from `unist-util-visit` was declaring the `index` parameter as `number | null`, but the visitor can also receive `undefined` as the index value. The `BuildVisitor` type signature expects the callback to accept `number | null | undefined` to properly match the library's API. **Fix:** Updated the `index` parameter type annotation on line 89 from `number | null` to `number | null | undefined` to match the actual possible values that the visitor receives and the expected `BuildVisitor` type signature. Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com> Co-authored-by: haydenbleasel <hello@haydenbleasel.com> * Fix tests * Remove CDN paths * Fix tests * More cleanup * Remove shiki from main bundle * Update index.ts * Cleanup test repo * Cleanup website * Delete next-env files * Update .gitignore * Fix lockfile * Upgrade Next and React * Simplify themes * Update test site * Misc fixes * Type fixes * Create perky-cobras-punch.md --------- Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
47 lines
945 B
TypeScript
47 lines
945 B
TypeScript
"use client";
|
|
|
|
import { createContext, useContext } from "react";
|
|
import type { PluginConfig } from "./plugin-types";
|
|
|
|
/**
|
|
* Context for Streamdown plugins
|
|
*/
|
|
export const PluginContext = createContext<PluginConfig | null>(null);
|
|
|
|
/**
|
|
* Hook to access all plugins
|
|
*/
|
|
export const usePlugins = (): PluginConfig | null => useContext(PluginContext);
|
|
|
|
/**
|
|
* Hook to access the code plugin
|
|
*/
|
|
export const useCodePlugin = () => {
|
|
const plugins = usePlugins();
|
|
return plugins?.code ?? null;
|
|
};
|
|
|
|
/**
|
|
* Hook to access the mermaid plugin
|
|
*/
|
|
export const useMermaidPlugin = () => {
|
|
const plugins = usePlugins();
|
|
return plugins?.mermaid ?? null;
|
|
};
|
|
|
|
/**
|
|
* Hook to access the math plugin
|
|
*/
|
|
export const useMathPlugin = () => {
|
|
const plugins = usePlugins();
|
|
return plugins?.math ?? null;
|
|
};
|
|
|
|
/**
|
|
* Hook to access the cjk plugin
|
|
*/
|
|
export const useCjkPlugin = () => {
|
|
const plugins = usePlugins();
|
|
return plugins?.cjk ?? null;
|
|
};
|