index.js 784 B

1234567891011121314151617181920212223242526272829303132
  1. /**
  2. * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'
  3. */
  4. /**
  5. * Call all `resolveAll`s.
  6. *
  7. * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs
  8. * List of constructs, optionally with `resolveAll`s.
  9. * @param {Array<Event>} events
  10. * List of events.
  11. * @param {TokenizeContext} context
  12. * Context used by `tokenize`.
  13. * @returns {Array<Event>}
  14. * Changed events.
  15. */
  16. export function resolveAll(constructs, events, context) {
  17. /** @type {Array<Resolver>} */
  18. const called = []
  19. let index = -1
  20. while (++index < constructs.length) {
  21. const resolve = constructs[index].resolveAll
  22. if (resolve && !called.includes(resolve)) {
  23. events = resolve(events, context)
  24. called.push(resolve)
  25. }
  26. }
  27. return events
  28. }