- Extract 4756 source files from cli.js.map (57MB) - Set up Bun build system with bun:bundle feature flag shim - Configure 90+ compile-time feature flags matching production defaults - Inject MACRO constants (VERSION, BUILD_TIME, etc.) - Create stubs for private packages (color-diff-napi, modifiers-napi, etc.) - Install all public dependencies via pnpm - Patch commander v14 to allow multi-char short flags (-d2e) - Build output: dist/cli.js (22MB), verified working
88 lines
2.1 KiB
JavaScript
88 lines
2.1 KiB
JavaScript
"use strict";
|
|
/* exported NodeTraversal */
|
|
var NodeTraversal = module.exports = {
|
|
nextSkippingChildren: nextSkippingChildren,
|
|
nextAncestorSibling: nextAncestorSibling,
|
|
next: next,
|
|
previous: previous,
|
|
deepLastChild: deepLastChild
|
|
};
|
|
|
|
/**
|
|
* @based on WebKit's NodeTraversal::nextSkippingChildren
|
|
* https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.h?rev=179143#L109
|
|
*/
|
|
function nextSkippingChildren(node, stayWithin) {
|
|
if (node === stayWithin) {
|
|
return null;
|
|
}
|
|
if (node.nextSibling !== null) {
|
|
return node.nextSibling;
|
|
}
|
|
return nextAncestorSibling(node, stayWithin);
|
|
}
|
|
|
|
/**
|
|
* @based on WebKit's NodeTraversal::nextAncestorSibling
|
|
* https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.cpp?rev=179143#L93
|
|
*/
|
|
function nextAncestorSibling(node, stayWithin) {
|
|
for (node = node.parentNode; node !== null; node = node.parentNode) {
|
|
if (node === stayWithin) {
|
|
return null;
|
|
}
|
|
if (node.nextSibling !== null) {
|
|
return node.nextSibling;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @based on WebKit's NodeTraversal::next
|
|
* https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.h?rev=179143#L99
|
|
*/
|
|
function next(node, stayWithin) {
|
|
var n;
|
|
n = node.firstChild;
|
|
if (n !== null) {
|
|
return n;
|
|
}
|
|
if (node === stayWithin) {
|
|
return null;
|
|
}
|
|
n = node.nextSibling;
|
|
if (n !== null) {
|
|
return n;
|
|
}
|
|
return nextAncestorSibling(node, stayWithin);
|
|
}
|
|
|
|
/**
|
|
* @based on WebKit's NodeTraversal::deepLastChild
|
|
* https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.cpp?rev=179143#L116
|
|
*/
|
|
function deepLastChild(node) {
|
|
while (node.lastChild) {
|
|
node = node.lastChild;
|
|
}
|
|
return node;
|
|
}
|
|
|
|
/**
|
|
* @based on WebKit's NodeTraversal::previous
|
|
* https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.h?rev=179143#L121
|
|
*/
|
|
function previous(node, stayWithin) {
|
|
var p;
|
|
p = node.previousSibling;
|
|
if (p !== null) {
|
|
return deepLastChild(p);
|
|
}
|
|
p = node.parentNode;
|
|
if (p === stayWithin) {
|
|
return null;
|
|
}
|
|
return p;
|
|
}
|