/** * @typedef {import('micromark-util-types').Create} Create * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct * @typedef {import('micromark-util-types').ParseContext} ParseContext * @typedef {import('micromark-util-types').ParseOptions} ParseOptions */ import {combineExtensions} from 'micromark-util-combine-extensions' import {content} from './initialize/content.js' import {document} from './initialize/document.js' import {flow} from './initialize/flow.js' import {string, text} from './initialize/text.js' import {createTokenizer} from './create-tokenizer.js' import * as defaultConstructs from './constructs.js' /** * @param {ParseOptions | null | undefined} [options] * @returns {ParseContext} */ export function parse(options) { const settings = options || {} const constructs = /** @type {FullNormalizedExtension} */ ( combineExtensions([defaultConstructs, ...(settings.extensions || [])]) ) /** @type {ParseContext} */ const parser = { defined: [], lazy: {}, constructs, content: create(content), document: create(document), flow: create(flow), string: create(string), text: create(text) } return parser /** * @param {InitialConstruct} initial */ function create(initial) { return creator /** @type {Create} */ function creator(from) { return createTokenizer(parser, initial, from) } } }