|
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.addElementToSortedArray = addElementToSortedArray; |
|
exports.addElementsToSortedArray = addElementsToSortedArray; |
|
exports.sortedLastIndex = sortedLastIndex; |
|
exports.hasTypeInfo = hasTypeInfo; |
|
|
|
|
|
|
|
function addElementToSortedArray(array, element, compare) { |
|
const index = sortedLastIndex(array, (target) => compare(target, element)); |
|
array.splice(index, 0, element); |
|
} |
|
|
|
|
|
|
|
function addElementsToSortedArray(array, elements, compare) { |
|
if (!elements.length) { |
|
return; |
|
} |
|
let last = elements[0]; |
|
let index = sortedLastIndex(array, (target) => compare(target, last)); |
|
for (const element of elements) { |
|
if (compare(last, element) > 0) { |
|
index = sortedLastIndex(array, (target) => compare(target, element)); |
|
} |
|
let e = array[index]; |
|
while (e && compare(e, element) <= 0) { |
|
e = array[++index]; |
|
} |
|
array.splice(index, 0, element); |
|
last = element; |
|
} |
|
} |
|
|
|
|
|
|
|
function sortedLastIndex(array, compare) { |
|
let lower = 0; |
|
let upper = array.length; |
|
while (lower < upper) { |
|
const mid = Math.floor(lower + (upper - lower) / 2); |
|
const target = compare(array[mid]); |
|
if (target < 0) { |
|
lower = mid + 1; |
|
} |
|
else if (target > 0) { |
|
upper = mid; |
|
} |
|
else { |
|
return mid + 1; |
|
} |
|
} |
|
return upper; |
|
} |
|
function hasTypeInfo(element) { |
|
var _a; |
|
if ((_a = element.type) === null || _a === void 0 ? void 0 : _a.startsWith("TS")) { |
|
return true; |
|
} |
|
for (const key of Object.keys(element)) { |
|
if (key === "parent") |
|
continue; |
|
const value = element[key]; |
|
if (value == null) |
|
continue; |
|
if (typeof value === "object") { |
|
if (hasTypeInfo(value)) |
|
return true; |
|
} |
|
else if (Array.isArray(value)) { |
|
for (const v of value) { |
|
if (typeof v === "object" && hasTypeInfo(v)) |
|
return true; |
|
} |
|
} |
|
} |
|
return false; |
|
} |
|
|