Micromark Normalize Identifier Utility
micromark-util-normalize-identifier is a dedicated utility package within the `micromark` ecosystem, designed to provide a robust algorithm for normalizing identifiers encountered in markdown, such as those in references and definitions. The current stable version is `2.0.1`, which is compatible with `micromark@3` and requires Node.js 16 or later. As part of the actively developed `micromark` monorepo, it follows a release cadence tied to the broader project's updates. Its key differentiator lies in its specific approach to canonicalizing identifiers: it collapses markdown whitespace, trims, and then performs a precise lower- and uppercase transformation. This two-step case conversion addresses edge cases with certain Unicode characters (e.g., U+03F4 vs. U+03B8 vs. U+0398) to ensure a truly canonical form, while also using uppercase last to prevent collisions with `Object.prototype` properties like `constructor`. It is an ESM-only package.
Common errors
-
ERR_REQUIRE_ESM
cause Attempting to import an ESM-only package (`micromark-util-normalize-identifier`) using CommonJS `require()` in a Node.js environment.fixChange `const { normalizeIdentifier } = require('micromark-util-normalize-identifier')` to `import { normalizeIdentifier } from 'micromark-util-normalize-identifier'` and ensure your project is configured for ES modules. -
ReferenceError: normalizeIdentifier is not defined
cause Incorrectly importing `normalizeIdentifier` (e.g., trying to use it before import, or a typo in the named import).fixEnsure you have `import { normalizeIdentifier } from 'micromark-util-normalize-identifier';` at the top of your file and the symbol name is correct.
Warnings
- breaking This package is ESM-only since its major version 1. It cannot be imported using CommonJS `require()` syntax.
- breaking This package requires Node.js 16 or higher for compatibility. Older Node.js versions are not supported.
- gotcha The normalization process involves both lowercasing and uppercasing to achieve a canonical form, particularly to handle Unicode character intricacies where simple uppercase might not yield the desired result (e.g., U+03F4 to U+0398 instead of U+03B8).
Install
-
npm install micromark-util-normalize-identifier -
yarn add micromark-util-normalize-identifier -
pnpm add micromark-util-normalize-identifier
Imports
- normalizeIdentifier
const { normalizeIdentifier } = require('micromark-util-normalize-identifier')import { normalizeIdentifier } from 'micromark-util-normalize-identifier'
Quickstart
import { normalizeIdentifier } from 'micromark-util-normalize-identifier';
// Normalize identifiers with various whitespace and casing scenarios
console.log(normalizeIdentifier(' a ')); // Expected: 'A'
console.log(normalizeIdentifier('a\t\r\nb')); // Expected: 'A B'
console.log(normalizeIdentifier('ТОЛПОЙ')); // Expected: 'ТОЛПОЙ'
console.log(normalizeIdentifier('Толпой')); // Expected: 'ТОЛПОЙ'
console.log(normalizeIdentifier('First Last')); // Expected: 'FIRST LAST'
console.log(normalizeIdentifier(' leading and trailing ')); // Expected: 'LEADING AND TRAILING'