Files
coopgo/node_modules/micromark/lib/util/chunked-splice.js
sgauthier 6e64e138e2
All checks were successful
Publish To Prod / deploy_and_publish (push) Successful in 35s
planning
2024-10-14 09:15:30 +02:00

47 lines
1.3 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict'
var constants = require('../constant/constants.js')
var splice = require('../constant/splice.js')
// `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.
function chunkedSplice(list, start, remove, items) {
var end = list.length
var chunkStart = 0
var parameters
// Make start between zero and `end` (included).
if (start < 0) {
start = -start > end ? 0 : end + start
} else {
start = start > end ? end : start
}
remove = remove > 0 ? remove : 0
// No need to chunk the items if theres only a couple (10k) items.
if (items.length < constants.v8MaxSafeChunkSize) {
parameters = Array.from(items)
parameters.unshift(start, remove)
splice.apply(list, parameters)
} else {
// Delete `remove` items starting from `start`
if (remove) splice.apply(list, [start, remove])
// Insert the items in chunks to not cause stack overflows.
while (chunkStart < items.length) {
parameters = items.slice(
chunkStart,
chunkStart + constants.v8MaxSafeChunkSize
)
parameters.unshift(start, 0)
splice.apply(list, parameters)
chunkStart += constants.v8MaxSafeChunkSize
start += constants.v8MaxSafeChunkSize
}
}
}
module.exports = chunkedSplice