micromark utility to splice and push with giant arrays

Downloads in past


2.0.08 months ago3 years agoMinified + gzip package size for micromark-util-chunked in KB


!Buildbuild-badgebuild !Coveragecoverage-badgecoverage !Downloadsdownloads-badgedownloads !Sizebundle-size-badgebundle-size !Sponsorssponsors-badgeopencollective !Backersbackers-badgeopencollective !Chatchat-badgechat
micromark utility to splice and push with giant arrays.


*   [`push(list, items)`](#pushlist-items)
*   [`splice(list, start, remove, items)`](#splicelist-start-remove-items)

What is this?

This package exposes an algorithm to splice for giant arrays, which V8 bugs out on.

When should I use this?

This package might be useful when you are making your own micromark extensions.


This package is ESM onlyesm. In Node.js (version 16+), install with npm:
npm install micromark-util-chunked

In Deno with esm.shesmsh:
import {push, splice} from 'https://esm.sh/micromark-util-chunked@1'

In browsers with esm.shesmsh:
<script type="module">
  import {push, splice} from 'https://esm.sh/micromark-util-chunked@1?bundle'


import {push, splice} from 'micromark-util-chunked'

// …

nextEvents = push(nextEvents, [
  ['enter', events[open][1], context],
  ['exit', events[open][1], context]

// …

splice(events, open - 1, index - open + 3, nextEvents)

// …


This module exports the identifiers pushapi-push and spliceapi-splice. There is no default export.

push(list, items)

Append items (an array) at the end of list (another array). When list was empty, returns items instead.
This prevents a potentially expensive operation when list is empty, and adds items in batches to prevent V8 from hanging.
  • list (Array<unknown>)
— list to operate on
  • items (Array<unknown>)
— items to add to `list`
Either list or items (Array<unknown>).

splice(list, start, remove, items)

Like Array#splice, but smarter for giant arrays.
Array#splice takes all items to be inserted as individual argument which causes a stack overflow in V8 when trying to insert 100k items for instance.
Otherwise, this does not return the removed items, and takes items as an array instead of rest parameters.
  • list (Array<unknown>)
— list to operate on
  • start (number)
— index to remove/insert at (can be negative)
  • remove (number)
— number of items to remove
  • items (Array<unknown>)
— items to inject into `list`
Nothing (undefined).


This package is fully typed with TypeScript. It exports no additional types.


Projects maintained by the unified collective are compatible with maintained versions of Node.js.
When we cut a new major release, we drop support for unmaintained versions of Node. This means we try to keep the current release line, micromark-util-chunked@^2, compatible with Node.js 16. This package works with micromark@^3.


This package is safe. See security.mdsecuritymd in micromark/.githubhealth for how to submit a security report.


See contributing.mdcontributing in micromark/.githubhealth for ways to get started. See support.mdsupport for ways to get help.
This project has a code of conductcoc. By interacting with this repository, organisation, or community you agree to abide by its terms.


MITlicense © Titus Wormerauthor