index.d.ts 1.5 KB

123456789101112131415161718192021222324252627
  1. /**
  2. * Create a hast element from a simple CSS selector.
  3. *
  4. * @template {string} Selector
  5. * Type of selector.
  6. * @template {string} [DefaultTagName='div']
  7. * Type of default tag name (default: `'div'`).
  8. * @param {Selector | null | undefined} [selector]
  9. * Simple CSS selector (optional).
  10. *
  11. * Can contain a tag name (`foo`), classes (`.bar`), and an ID (`#baz`).
  12. * Multiple classes are allowed.
  13. * Uses the last ID if multiple IDs are found.
  14. * @param {DefaultTagName | null | undefined} [defaultTagName='div']
  15. * Tag name to use if `selector` does not specify one (default: `'div'`).
  16. * @returns {Element & {tagName: ExtractTagName<Selector, DefaultTagName>}}
  17. * Built element.
  18. */
  19. export function parseSelector<Selector extends string, DefaultTagName extends string = "div">(selector?: Selector | null | undefined, defaultTagName?: DefaultTagName | null | undefined): import("hast").Element & {
  20. tagName: ExtractTagName<Selector, DefaultTagName>;
  21. };
  22. export type Element = import('hast').Element;
  23. export type Properties = import('hast').Properties;
  24. /**
  25. * Extract tag name from a simple selector.
  26. */
  27. export type ExtractTagName<SimpleSelector extends string, DefaultTagName extends string> = SimpleSelector extends "" ? DefaultTagName : SimpleSelector extends `${infer TagName}.${infer Rest}` ? ExtractTagName<TagName, DefaultTagName> : SimpleSelector extends `${infer TagName_1}#${infer Rest_1}` ? ExtractTagName<TagName_1, DefaultTagName> : SimpleSelector extends string ? SimpleSelector : DefaultTagName;