This commit is contained in:
38
node_modules/micromark/dist/util/chunked-splice.js
generated
vendored
Normal file
38
node_modules/micromark/dist/util/chunked-splice.js
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
'use strict'
|
||||
|
||||
var splice = require('../constant/splice.js')
|
||||
|
||||
// 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 there’s only a couple (10k) items.
|
||||
|
||||
if (items.length < 10000) {
|
||||
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 + 10000)
|
||||
parameters.unshift(start, 0)
|
||||
splice.apply(list, parameters)
|
||||
chunkStart += 10000
|
||||
start += 10000
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = chunkedSplice
|
||||
Reference in New Issue
Block a user