From dac20e2a571a9b471a5c397ef21cba7358fe727a Mon Sep 17 00:00:00 2001 From: Christian Murphy Date: Thu, 26 Aug 2021 07:10:14 -0700 Subject: [PATCH] Fix to correctly compile intrinsic types Reviewed-by: Remco Haszing Reviewed-by: Titus Wormer Related to GH-31. --- .gitignore | 2 +- lib/complex-types.ts | 43 +++++++++++++++++++++++++++++++++++++++++++ lib/index.js | 20 +------------------- 3 files changed, 45 insertions(+), 20 deletions(-) create mode 100644 lib/complex-types.ts diff --git a/.gitignore b/.gitignore index fa43271..886e8ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ coverage/ node_modules/ .DS_Store -lib/index.d.ts +lib/*.d.ts test.d.ts *.log yarn.lock diff --git a/lib/complex-types.ts b/lib/complex-types.ts new file mode 100644 index 0000000..86ec5a8 --- /dev/null +++ b/lib/complex-types.ts @@ -0,0 +1,43 @@ +import type {ComponentType} from 'react' +import type {Element} from 'hast' + +interface WithNode { + node: Element +} + +export interface ComponentsWithNodeOptions { + /** + * Expose hast elements as a `node` field in components + */ + passNode: true + /** + * Override default elements (such as ``, `

`, etcetera) by passing an + * object mapping tag names to components. + */ + components?: Partial< + { + [TagName in keyof JSX.IntrinsicElements]: + | keyof JSX.IntrinsicElements + | ComponentType + } + > +} + +export interface ComponentsWithoutNodeOptions { + /** + * Expose hast elements as a `node` field in components. + */ + passNode?: false | undefined + + /** + * Override default elements (such as ``, `

`, etcetera) by passing an + * object mapping tag names to components. + */ + components?: Partial< + { + [TagName in keyof JSX.IntrinsicElements]: + | keyof JSX.IntrinsicElements + | ComponentType + } + > +} diff --git a/lib/index.js b/lib/index.js index a23baf4..d8e0603 100644 --- a/lib/index.js +++ b/lib/index.js @@ -20,25 +20,7 @@ * @property {string|undefined} [prefix='h-'] * React key prefix * - * @typedef WithNode - * @property {Element} node - * Current hast element. - * - * @typedef ComponentsWithNodeOptions - * @property {true} passNode - * Expose hast elements as a `node` field in components. - * @property {Partial<{[TagName in keyof JSX.IntrinsicElements]: string|((props: WithNode & JSX.IntrinsicElements[TagName]) => ReactNode)}>} [components] - * Override default elements (such as ``, `

`, etcetera) by passing an - * object mapping tag names to components. - * - * @typedef ComponentsWithoutNodeOptions - * @property {false|undefined} [passNode] - * Expose hast elements as a `node` field in components. - * @property {Partial<{[TagName in keyof JSX.IntrinsicElements]: string|((props: JSX.IntrinsicElements[TagName]) => ReactNode)}>} [components] - * Override default elements (such as ``, `

`, etcetera) by passing an - * object mapping tag names to components. - * - * @typedef {SharedOptions & (ComponentsWithNodeOptions|ComponentsWithoutNodeOptions)} Options + * @typedef {SharedOptions & (import("./complex-types").ComponentsWithNodeOptions|import("./complex-types").ComponentsWithoutNodeOptions)} Options */ import {toH} from 'hast-to-hyperscript'