{"ScriptPreparationCode":"var appTarget = document.getElementById(\u0027app-target\u0027);\r\n\r\nvar distance0 = document.getElementById(\u0027distance-0\u0027);\r\nvar distance3 = document.getElementById(\u0027distance-3\u0027);\r\n\r\nvar noA0 = document.getElementById(\u0027no-a-distance-0\u0027);\r\nvar noA3 = document.getElementById(\u0027no-a-distance-3\u0027);\r\n\r\n/**\r\n * @param {Element} element\r\n * @returns {Element | null}\r\n */\r\nfunction parent_element(element) {\r\n\tlet parent = element.assignedSlot ?? element.parentNode;\r\n\r\n\t// @ts-expect-error handle shadow roots\r\n\tif (parent?.nodeType === 11) parent = parent.host;\r\n\r\n\treturn /** @type {Element} */ (parent);\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n * @param {Element} target\r\n */\r\nfunction find_anchor(element, target) {\r\n\twhile (element !== target) {\r\n\t\tif (element.nodeName.toUpperCase() === \u0027A\u0027) {\r\n\t\t\treturn /** @type {HTMLAnchorElement | SVGAElement} */ (element);\r\n\t\t}\r\n\r\n\t\telement = /** @type {Element} */ (parent_element(element));\r\n\t}\r\n}\r\n\r\nfunction find_anchor_closest(element, target) {\r\n\t// fast path\r\n\tif (element.nodeName.toUpperCase() === \u0027A\u0027) {\r\n\t\treturn element;\r\n\t}\r\n\r\n\tconst a = element.closest(\u0027a\u0027);\r\n\tif (target.contains(a)) {\r\n\t\treturn a;\r\n\t}\r\n}","TestCases":[{"Name":"while distance 3","Code":"const a = find_anchor(distance3, appTarget);\r\nif (!a) { /* return */ }","IsDeferred":false},{"Name":"while distance 0","Code":"const a = find_anchor(distance0, appTarget);\r\nif (!a) { /* return */ }","IsDeferred":false},{"Name":"while no a distance 3","Code":"const a = find_anchor(noA3, appTarget);\r\nif (!a) { /* return */ }","IsDeferred":false},{"Name":"closest distance 3","Code":"const a = find_anchor_closest(distance3, appTarget);\r\nif (!a) { /* return */ }","IsDeferred":false},{"Name":"closest distance 0","Code":"const a = find_anchor_closest(distance0, appTarget);\r\nif (!a) { /* return */ }","IsDeferred":false},{"Name":"closest no a distance 3","Code":"const a = find_anchor_closest(noA3, appTarget);\r\nif (!a) { /* return */ }","IsDeferred":false}]}