micromark Extension Combiner Utility
micromark-util-combine-extensions is a dedicated utility package within the unified collective, designed to efficiently merge multiple micromark syntax extensions or HTML extensions into a single, cohesive extension object. This functionality is crucial for creating and managing markdown processing presets, such as `micromark-extension-gfm`, which bundle several individual extensions into a convenient package. The package is currently at version 2.0.1, which is compatible with Node.js 16+ and works specifically with `micromark@3`. As a component of the `micromark` monorepo, its release cadence generally aligns with the broader `micromark` project, which sees regular updates for performance and bug fixes across its various components. Its primary differentiator is its singular focus on extension combination, providing a streamlined API (`combineExtensions`, `combineHtmlExtensions`) that simplifies complex extension management for developers building custom markdown processing pipelines.
Common errors
-
ERR_REQUIRE_ESM
cause Attempting to import `micromark-util-combine-extensions` using CommonJS `require()` syntax in a Node.js environment.fixChange your import statement to `import { combineExtensions } from 'micromark-util-combine-extensions'`. -
TypeError: (0 , micromark_util_combine_extensions__WEBPACK_IMPORTED_MODULE_0__.combineExtensions) is not a function
cause This error often occurs when bundling (e.g., with Webpack) and attempting to use a CommonJS-style import on an ESM module, or when a named import is incorrectly treated as a default import.fixEnsure your build configuration correctly handles ESM modules. Verify that you are using a named import `import { combineExtensions }` and not a default import `import combineExtensions`. -
TypeError: micromark_extension_gfm_strikethrough_1.gfmStrikethrough is not a function
cause An extension function (like `gfmStrikethrough`) was expected to be called to produce an extension object, but it was passed directly without invocation.fixCall the extension as a function: `gfmStrikethrough()` instead of `gfmStrikethrough` when adding it to the array for `combineExtensions`.
Warnings
- breaking This package is ESM-only and does not support CommonJS `require()`. Attempting to import it with `require` will result in an error.
- gotcha This utility is designed to work with `micromark@3`. Using it with incompatible major versions of `micromark` (e.g., `micromark@2` or `micromark@4`) may lead to unexpected behavior or type mismatches due to changes in the extension object structure.
- gotcha Some micromark extensions are exported as functions that need to be called (e.g., `gfmStrikethrough()`), while others are direct objects (e.g., `gfmAutolinkLiteral`). Not calling the function for extensions that expect it will result in an invalid extension being passed to `combineExtensions`.
Install
-
npm install micromark-util-combine-extensions -
yarn add micromark-util-combine-extensions -
pnpm add micromark-util-combine-extensions
Imports
- combineExtensions
const { combineExtensions } = require('micromark-util-combine-extensions')import { combineExtensions } from 'micromark-util-combine-extensions' - combineHtmlExtensions
import combineHtmlExtensions from 'micromark-util-combine-extensions'
import { combineHtmlExtensions } from 'micromark-util-combine-extensions'
Quickstart
import {gfmAutolinkLiteral} from 'micromark-extension-gfm-autolink-literal'
import {gfmStrikethrough} from 'micromark-extension-gfm-strikethrough'
import {gfmTable} from 'micromark-extension-gfm-table'
import {gfmTaskListItem} from 'micromark-extension-gfm-task-list-item'
import {combineExtensions} from 'micromark-util-combine-extensions'
// This example combines several GFM syntax extensions into a single extension object
// suitable for use with micromark. Note that some extensions are functions that need
// to be called (e.g., gfmStrikethrough()), while others are direct objects.
const combinedGfmSyntaxExtension = combineExtensions([
gfmAutolinkLiteral,
gfmStrikethrough(), // Some extensions are functions that return the actual extension object
gfmTable,
gfmTaskListItem
])
console.log('Successfully combined GFM syntax extensions for micromark:', combinedGfmSyntaxExtension)
// You would typically pass this combined extension to the micromark parser:
// import { micromark } from 'micromark';
// const html = micromark('~Hello~', { extensions: [combinedGfmSyntaxExtension] });
// console.log(html); // Outputs HTML for strikethrough content, e.g., <p><del>Hello</del></p>