* ✨ Create HTML templating node PoC * ♻️ Apply feedback * 🐛 Scope CSS selectors * ✏️ Adjust description * ✏️ Adjust placeholder * ⚡ Replace two custom files with package output * ➕ Add `codemirror-lang-html-n8n` * 👕 Appease linter * 🧪 Skip event bus tests * ⏪ Revert "Skip event bus tests" This reverts commit 5702585d0de3b8465660567132e9003e78f1104c. * ✏️ Update codex * 🧹 Cleanup * 🐛 Restore original for `continueOnFail` * ⚡ Improve `getResolvables`
41 lines
821 B
TypeScript
41 lines
821 B
TypeScript
import type { Range } from './types';
|
|
|
|
/**
|
|
* Return the ranges of a full range that are _not_ within the taken ranges,
|
|
* assuming sorted taken ranges. e.g. `[0, 10]` and `[[2, 3], [7, 8]]`
|
|
* return `[[0, 1], [4, 6], [9, 10]]`
|
|
*/
|
|
export function nonTakenRanges(fullRange: Range, takenRanges: Range[]) {
|
|
const found = [];
|
|
|
|
const [fullStart, fullEnd] = fullRange;
|
|
let i = fullStart;
|
|
let curStart = fullStart;
|
|
|
|
takenRanges = [...takenRanges];
|
|
|
|
while (i < fullEnd) {
|
|
if (takenRanges.length === 0) {
|
|
found.push([curStart, fullEnd]);
|
|
break;
|
|
}
|
|
|
|
const [takenStart, takenEnd] = takenRanges[0];
|
|
|
|
if (i < takenStart) {
|
|
i++;
|
|
continue;
|
|
}
|
|
|
|
if (takenStart !== fullStart) {
|
|
found.push([curStart, i - 1]);
|
|
}
|
|
|
|
i = takenEnd + 1;
|
|
curStart = takenEnd + 1;
|
|
takenRanges.shift();
|
|
}
|
|
|
|
return found;
|
|
}
|