/** * @import { * Create, * FullNormalizedExtension, * InitialConstruct, * ParseContext, * ParseOptions * } from 'micromark-util-types' */ 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 * as defaultConstructs from './constructs.js'; import { createTokenizer } from './create-tokenizer.js'; /** * @param {ParseOptions | null | undefined} [options] * Configuration (optional). * @returns {ParseContext} * Parser. */ export function parse(options) { const settings = options || {}; const constructs = /** @type {FullNormalizedExtension} */ combineExtensions([defaultConstructs, ...(settings.extensions || [])]); /** @type {ParseContext} */ const parser = { constructs, content: create(content), defined: [], document: create(document), flow: create(flow), lazy: {}, string: create(string), text: create(text) }; return parser; /** * @param {InitialConstruct} initial * Construct to start with. * @returns {Create} * Create a tokenizer. */ function create(initial) { return creator; /** @type {Create} */ function creator(from) { return createTokenizer(parser, initial, from); } } }