MCPcopy
hub / github.com/immutable-js/immutable-js / updateVNode

Function updateVNode

src/List.js:507–549  ·  view source on GitHub ↗
(node, ownerID, level, index, value, didAlter)

Source from the content-addressed store, hash-verified

505}
506
507function updateVNode(node, ownerID, level, index, value, didAlter) {
508 const idx = (index >>> level) & MASK;
509 const nodeHas = node && idx < node.array.length;
510 if (!nodeHas && value === undefined) {
511 return node;
512 }
513
514 let newNode;
515
516 if (level > 0) {
517 const lowerNode = node && node.array[idx];
518 const newLowerNode = updateVNode(
519 lowerNode,
520 ownerID,
521 level - SHIFT,
522 index,
523 value,
524 didAlter
525 );
526 if (newLowerNode === lowerNode) {
527 return node;
528 }
529 newNode = editableVNode(node, ownerID);
530 newNode.array[idx] = newLowerNode;
531 return newNode;
532 }
533
534 if (nodeHas && node.array[idx] === value) {
535 return node;
536 }
537
538 if (didAlter) {
539 SetRef(didAlter);
540 }
541
542 newNode = editableVNode(node, ownerID);
543 if (value === undefined && idx === newNode.array.length - 1) {
544 newNode.array.pop();
545 } else {
546 newNode.array[idx] = value;
547 }
548 return newNode;
549}
550
551function editableVNode(node, ownerID) {
552 if (ownerID && node && ownerID === node.ownerID) {

Callers 1

updateListFunction · 0.85

Calls 3

SetRefFunction · 0.90
editableVNodeFunction · 0.85
popMethod · 0.65

Tested by

no test coverage detected