decruft 0.1.2

Extract clean, readable content from web pages
Documentation
<html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" class="js-focus-visible" data-js-focus-visible="" data-turbo-loaded=""><head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin="">
  <link rel="preconnect" href="https://avatars.githubusercontent.com">
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-d1334f2b22bf.css"><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-f695a361c6b2.css"><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-f73a069fd33e.css"><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-3a0d87f72ad4.css"><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-d1334f2b22bf.css"><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-f695a361c6b2.css"><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-367eb9a4565a.css"><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-183adc0db479.css"><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-2ddc677c041d.css"><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-649962a5702a.css"><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-f73a069fd33e.css"><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-3a0d87f72ad4.css"><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-b17a8392e6c4.css"><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-e9ff47cedc2b.css"><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-a1cc7dba9f73.css"><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-6c4dd39e2b0f.css"><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-55459b36aa6d.css"><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-9a0ef6e40ed3.css">
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-dc7ca6859caf.css">
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-03a65c451725.css">
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-d1aed5b4075c.css">
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-db7b386c190b.css">
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-b58e401b73ae.css">
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.47f1598729334a521d2a.module.css">
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ui_packages_issue-create_dialog_CreateIssueDialogEntry_tsx-ui_packages_date-picker_components-96ce24.08d35b0d7d7020a5c29a.module.css">
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ui_packages_issue-viewer_components_IssueViewer_tsx-ui_packages_issue-viewer_contexts_IssueVi-bb0eb9.a1e66fc2a82f595e5e46.module.css">
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/issues-react.95c5d9982f83e2a1afa8.module.css">
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.4c58e19e87a9dd1b1dfd.module.css">
  <title>Defuddle on Cloudflare Workers · Issue #56 · kepano/defuddle</title>
  <meta name="route-pattern" content="/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)" data-turbo-transient="">
  <meta name="route-controller" content="voltron_issues_fragments" data-turbo-transient="">
  <meta name="route-action" content="issue_layout" data-turbo-transient="">
  <meta name="fetch-nonce" content="v2:37b8b2bb-645c-703a-f367-42e9d1bc97b7">
  <meta name="current-catalog-service-hash" content="81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114">
  <meta name="request-id" content="CB43:273DD6:56D88:59B21:687D2C4D" data-pjax-transient="true"><meta name="html-safe-nonce" content="9e7249d469bd08a9d719be9f68ddb774a9ab33377f0a6901a4bbd2886decfcc0" data-pjax-transient="true"><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDQjQzOjI3M0RENjo1NkQ4ODo1OUIyMTo2ODdEMkM0RCIsInZpc2l0b3JfaWQiOiIxNDA1OTMxNjE3MzgxMDY3ODUzIiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"><meta name="visitor-hmac" content="e3a22bcbd9c62f18dad1e5227ece07d633629435e5ca7c0074340667b5975d84" data-pjax-transient="true">
    <meta name="hovercard-subject-tag" content="issue:3089558116" data-turbo-transient="">
  <meta name="github-keyboard-shortcuts" content="repository,issues,copilot" data-turbo-transient="true">
  <meta name="selected-link" value="repo_issues" data-turbo-transient="">
  <link rel="assets" href="https://github.githubassets.com/">
    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">
<meta name="octolytics-url" content="https://collector.github.com/github/collect">
  <meta name="analytics-location" content="/<user-name>/<repo-name>/voltron/issues_fragments/issue_layout" data-turbo-transient="true">
    <meta name="user-login" content="">
    <meta name="viewport" content="width=device-width">
      <meta name="description" content="Example repo here: https://github.com/jmorrell/defuddle-cloudflare-example I was looking forward to ditching my tenuous readbilityjs fork in my workers project. Defuddle ultimately does run to completion, but I ran into a couple of issue...">
      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/kepano/defuddle/56/issue_layout">
      <meta name="twitter:image" content="https://opengraph.githubassets.com/0e02d1d5d635552a66587cdd18495678a7a64487b7352f56f63045840fb6dd61/kepano/defuddle/issues/56"><meta name="twitter:site" content="@github"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Defuddle on Cloudflare Workers · Issue #56 · kepano/defuddle"><meta name="twitter:description" content="Example repo here: https://github.com/jmorrell/defuddle-cloudflare-example I was looking forward to ditching my tenuous readbilityjs fork in my workers project. Defuddle ultimately does run to comp...">
  <meta property="og:image" content="https://opengraph.githubassets.com/0e02d1d5d635552a66587cdd18495678a7a64487b7352f56f63045840fb6dd61/kepano/defuddle/issues/56"><meta property="og:image:alt" content="Example repo here: https://github.com/jmorrell/defuddle-cloudflare-example I was looking forward to ditching my tenuous readbilityjs fork in my workers project. Defuddle ultimately does run to comp..."><meta property="og:image:width" content="1200"><meta property="og:image:height" content="600"><meta property="og:site_name" content="GitHub"><meta property="og:type" content="object"><meta property="og:title" content="Defuddle on Cloudflare Workers · Issue #56 · kepano/defuddle"><meta property="og:url" content="https://github.com/kepano/defuddle/issues/56"><meta property="og:description" content="Example repo here: https://github.com/jmorrell/defuddle-cloudflare-example I was looking forward to ditching my tenuous readbilityjs fork in my workers project. Defuddle ultimately does run to comp..."><meta property="og:author:username" content="jmorrell">
      <meta name="hostname" content="github.com">
        <meta name="expected-hostname" content="github.com">
  <meta http-equiv="x-pjax-version" content="a10164239a746d51677dd7864bd8a936f1617b21c72f47e9d647f2c061013122" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="352e51c42d5f5727a7c545752bf34d1f83f40219e7036c6959817149a51651bc" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="db5407b34ed7dd78a10c3ffb9090ce21da82a95b43668b04d1de30e3d8a51dde" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="94f5de206406773bbf4cb7d075bea8be0e6e953d36f462380a86b5c178c4c7ca" data-turbo-track="reload">
  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">
        <meta name="voltron-timing" value="473">
      <script type="application/ld+json">{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Defuddle on Cloudflare Workers","articleBody":"Example repo here: https://github.com/jmorrell/defuddle-cloudflare-example\n\nI was looking forward to ditching my tenuous `readbilityjs` fork in my workers project. Defuddle ultimately does run to completion, but I ran into a couple of issues. Supporting this environment fully is likely challenging since `JSDOM` does not work within the Worker environment. I suspect the same will be true of the deno and bun runtimes.\n\nI was able to work around this by using the browser version along with [linkedom](https://github.com/WebReflection/linkedom), however this is not an exact replacement for JSDOM and doesn't implement all the CSS functionality.\n\nSince defuddle relies on these style heuristics, **I'm not sure there is a great path to supporting the full functionality in this environment**, but I wanted to open an issue for discussion and to document these issues for anyone else who might hit this.\n\nWhen running I get two errors:\n\n```\nDefuddle: Error evaluating media queries: TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))\n```\n\nThis is due to linkedom not implementing `doc.styleSheets`: https://github.com/kepano/defuddle/blob/cb4291db0f24cac0d0674d9e35fc0089338da2da/src/defuddle.ts#L213\n\nThis could be silenced by falling back to `[]` if `doc.styleSheets` isn't present, however that may not be the desired behavior.\n\n```ts\nconst sheets = Array.from(doc.styleSheets ?? [])\n```\n\nThe second issue is due to `getComputedStyle` not being supported by linkedom.\n\n```\nDefuddle Error processing document: TypeError: e3.getComputedStyle is not a function\n```\n\nIf you feel like there's nothing to do, or supporting Workers is out-of-scope for the project, feel free to close the issue","author":{"url":"https://github.com/jmorrell","@type":"Person","name":"jmorrell"},"datePublished":"2025-05-25T20:35:48.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":6},"url":"https://github.com/56/defuddle/issues/56"}</script> 
  <meta name="go-import" content="github.com/kepano/defuddle git https://github.com/kepano/defuddle.git">
  <meta name="octolytics-dimension-user_id" content="10565871"><meta name="octolytics-dimension-user_login" content="kepano"><meta name="octolytics-dimension-repository_id" content="940076402"><meta name="octolytics-dimension-repository_nwo" content="kepano/defuddle"><meta name="octolytics-dimension-repository_public" content="true"><meta name="octolytics-dimension-repository_is_fork" content="false"><meta name="octolytics-dimension-repository_network_root_id" content="940076402"><meta name="octolytics-dimension-repository_network_root_nwo" content="kepano/defuddle">
      <link rel="canonical" href="https://github.com/kepano/defuddle/issues/56" data-turbo-transient="">
    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
  <meta name="release" content="af8b8db961ba78e3d23e4b92e239c190ef136f06">
  <meta name="ui-target" content="full">
  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon-dark.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon-dark.svg" data-base-href="https://github.githubassets.com/favicons/favicon">
<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark">
  <link rel="manifest" href="/manifest.json" crossorigin="use-credentials">
  <link rel="stylesheet" type="text/css" href="https://github.githubassets.com/assets/lazy-react-partial-keyboard-shortcuts-dialog.f8fba3bd67fe74f9227b.module.css" crossorigin="anonymous"><link rel="stylesheet" type="text/css" href="https://github.githubassets.com/assets/lazy-react-partial-appearance-settings.76259b61ecc822265749.module.css" crossorigin="anonymous"><link rel="stylesheet" type="text/css" href="chrome-extension://nffaoalbilbmmfgbnbgppjihopabppdk/src/styles/inject.css"></head><body class="logged-out env-production page-responsive vsc-initialized" style="overflow-wrap: break-word; --dialog-scrollgutter: 0px;"><div id="vsc-constants-loaded" style="display: none;">Constants loaded at 2025-07-20T17:50:08.734Z</div><div id="vsc-test-indicator" style="display: none;"></div>
    <div data-turbo-body="" class="logged-out env-production page-responsive" style="word-wrap: break-word;">
    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>
      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.f8fba3bd67fe74f9227b.module.css">
<react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" data-react-profiling="false" data-catalyst="" class="loaded">
  <div data-target="react-partial.reactRoot"><div class="d-none"></div></div>
</react-partial>
      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
        <span class="js-stale-session-flash-signed-in" hidden="">You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden="">You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden="">You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
    <button id="icon-button-328b84ad-2e47-434f-8dc5-ab32d217de42" aria-labelledby="tooltip-a296de8c-d4c6-4669-80d5-ce62907612a7" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  
</button><tool-tip id="tooltip-a296de8c-d4c6-4669-80d5-ce62907612a7" for="icon-button-328b84ad-2e47-434f-8dc5-ab32d217de42" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute" aria-hidden="true" role="tooltip">Dismiss alert</tool-tip>
</div>
    </div>
  <div id="start-of-content" class="show-on-focus"></div>
    <div id="js-flash-container" class="flash-container" data-turbo-replace="">
  <template class="js-flash-template">
<div class="flash flash-full   {{ className }}">
  <div>
    <button autofocus="" class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      <div>{{ message }}</div>
    </div>
  </div>
</div>
  </template>
</div>
  <div class="application-main " data-commit-hovercards-enabled="" data-discussion-hovercards-enabled="" data-issue-and-pr-hovercards-enabled="" data-project-hovercards-enabled="">
        <div itemscope="" itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container">
  <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace="">
      <div class="d-flex flex-nowrap flex-justify-end mb-3  px-3 px-lg-5" style="gap: 1rem;">
        <div class="flex-auto min-width-0 width-fit">
  <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
    <span class="author flex-self-stretch" itemprop="author">
      <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/kepano/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/kepano" aria-keyshortcuts="Alt+ArrowUp">
        kepano
</a>    </span>
    <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
    <strong itemprop="name" class="mr-2 flex-self-stretch">
      <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/kepano/defuddle">defuddle</a>
    </strong>
    <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
  </div>
        </div>
        <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace="" style="max-width: 70%;">
            <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
  <li>
            <a href="/login?return_to=%2Fkepano%2Fdefuddle" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/kepano/defuddle/issues/56&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="cc7ae98c771d2efc8ffabfc1d1335aaf619db2e8426102f3665571061afed76f" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn" aria-describedby="tooltip-f9ebd851-57d7-4458-8ce2-d29005d44452">    Notifications
</a>    <tool-tip id="tooltip-f9ebd851-57d7-4458-8ce2-d29005d44452" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute" role="tooltip">You must be signed in to change notification settings</tool-tip>
  </li>
  <li>
          <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Fkepano%2Fdefuddle" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:940076402,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/kepano/defuddle/issues/56&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="6568d0c785c263f6f106169c143f8433f6c36a831067c2c73d4ec9dc2f9cdf01" data-view-component="true" class="btn-sm btn">    Fork
    <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="73" data-view-component="true" class="Counter">73</span>
</a>
  </li>
  <li>
        <div data-view-component="true" class="BtnGroup d-flex">
        <a href="/login?return_to=%2Fkepano%2Fdefuddle" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:940076402,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/kepano/defuddle/issues/56&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="439b413f184da2a99af244cac9bd19c493d937ff4386d68e9b272c9082b4a0c2" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn">    <span data-view-component="true" class="d-inline">
          Star
</span>          <span id="repo-stars-counter-star" aria-label="2569 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="2,569" data-view-component="true" class="Counter js-social-count">2.6k</span>
</a></div>
  </li>
</ul>
        </div>
      </div>
        <div id="responsive-meta-container" data-turbo-replace="">
</div>
          <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5">
  <ul data-view-component="true" class="UnderlineNav-body list-style-none">
      <li data-view-component="true" class="d-inline-flex">
  <a id="code-tab" href="/kepano/defuddle" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /kepano/defuddle" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
        <span data-content="Code">Code</span>
          <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="issues-tab" href="/kepano/defuddle/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /kepano/defuddle/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
        <span data-content="Issues">Issues</span>
          <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="26" data-view-component="true" class="Counter">26</span>
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="pull-requests-tab" href="/kepano/defuddle/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /kepano/defuddle/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
        <span data-content="Pull requests">Pull requests</span>
          <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="6" data-view-component="true" class="Counter">6</span>
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="actions-tab" href="/kepano/defuddle/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /kepano/defuddle/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
        <span data-content="Actions">Actions</span>
          <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="projects-tab" href="/kepano/defuddle/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /kepano/defuddle/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
        <span data-content="Projects">Projects</span>
          <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="security-tab" href="/kepano/defuddle/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /kepano/defuddle/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
        <span data-content="Security">Security</span>
          </a><div data-show-on-forbidden-error="" hidden=""><a id="security-tab" href="/kepano/defuddle/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /kepano/defuddle/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    </a><div class="Box"><a id="security-tab" href="/kepano/defuddle/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /kepano/defuddle/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
  </a><div class="blankslate-container"><a id="security-tab" href="/kepano/defuddle/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /kepano/defuddle/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    </a><div data-view-component="true" class="blankslate blankslate-spacious color-bg-default rounded-2"><a id="security-tab" href="/kepano/defuddle/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /kepano/defuddle/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
      <h3 data-view-component="true" class="blankslate-heading">        Uh oh!
</h3>
      <p data-view-component="true">        </p></a><p class="color-fg-muted my-2 mb-2 ws-normal"><a id="security-tab" href="/kepano/defuddle/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /kepano/defuddle/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">There was an error while loading. </a><a class="Link--inTextBlock" data-turbo="false" href="" aria-label="Please reload this page">Please reload this page</a>.</p>
<p></p>
</div>  </div>
</div>  </div>
</li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="insights-tab" href="/kepano/defuddle/pulse" data-tab-item="i6insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /kepano/defuddle/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
        <span data-content="Insights">Insights</span>
          <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
</a></li>
</ul>
    <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0">      <action-menu data-select-variant="none" data-view-component="true" data-catalyst="" data-ready="true">
  <focus-group direction="vertical" mnemonics="" retain="">
    <button id="action-menu-d978f1b5-ef5c-4989-aae7-0936762f0b02-button" popovertarget="action-menu-d978f1b5-ef5c-4989-aae7-0936762f0b02-overlay" aria-controls="action-menu-d978f1b5-ef5c-4989-aae7-0936762f0b02-list" aria-haspopup="true" aria-labelledby="tooltip-9fa21903-ca53-43ce-9378-b9bb5cb5f6d5" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item">  
</button><tool-tip id="tooltip-9fa21903-ca53-43ce-9378-b9bb5cb5f6d5" for="action-menu-d978f1b5-ef5c-4989-aae7-0936762f0b02-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute" aria-hidden="true" role="tooltip">Additional navigation options</tool-tip>
<anchored-position data-target="action-menu.overlay" id="action-menu-d978f1b5-ef5c-4989-aae7-0936762f0b02-overlay" anchor="action-menu-d978f1b5-ef5c-4989-aae7-0936762f0b02-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true" style="inset: 36px auto auto 0px;">
  <div data-view-component="true" class="Overlay Overlay--size-auto">
      <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone">          <action-list data-catalyst="">
  <div data-view-component="true">
    <ul aria-labelledby="action-menu-d978f1b5-ef5c-4989-aae7-0936762f0b02-button" id="action-menu-d978f1b5-ef5c-4989-aae7-0936762f0b02-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap">
        <li hidden="" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    <a tabindex="-1" id="item-6c7e2240-4979-45be-99de-9fd07d7eb34e" href="/kepano/defuddle" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
        </span>
        <span data-view-component="true" class="ActionListItem-label">
          Code
</span>      
</a>
</li>
        <li hidden="" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    <a tabindex="-1" id="item-92105f4f-3d0b-48bd-8444-4c857765d1f2" href="/kepano/defuddle/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
        </span>
        <span data-view-component="true" class="ActionListItem-label">
          Issues
</span>      
</a>
</li>
        <li hidden="" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    <a tabindex="-1" id="item-c298be2c-0db1-491a-aa46-5e01cedc0e64" href="/kepano/defuddle/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
        </span>
        <span data-view-component="true" class="ActionListItem-label">
          Pull requests
</span>      
</a>
</li>
        <li hidden="" data-menu-item="i3actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    <a tabindex="-1" id="item-43257e55-3586-43a9-88da-3f3f7fa4b9b3" href="/kepano/defuddle/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
        </span>
        <span data-view-component="true" class="ActionListItem-label">
          Actions
</span>      
</a>
</li>
        <li hidden="" data-menu-item="i4projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    <a tabindex="-1" id="item-ecee3919-9272-43b0-93a4-b3b3954e54ed" href="/kepano/defuddle/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
        </span>
        <span data-view-component="true" class="ActionListItem-label">
          Projects
</span>      
</a>
</li>
        <li hidden="" data-menu-item="i5security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    <a tabindex="-1" id="item-c0843697-1908-4dd7-a1c9-8bda96bdf2be" href="/kepano/defuddle/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
        </span>
        <span data-view-component="true" class="ActionListItem-label">
          Security
</span>      
</a>
</li>
        <li hidden="" data-menu-item="i6insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    <a tabindex="-1" id="item-7913f0be-9180-4e1b-ba3d-4f9f0fe2eb1c" href="/kepano/defuddle/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
        </span>
        <span data-view-component="true" class="ActionListItem-label">
          Insights
</span>      
</a>
</li>
</ul>    
</div></action-list>
</div>
</div></anchored-position>  </focus-group>
</action-menu></div>
</nav>
  </div>
<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content ">
<react-app app-name="issues-react" initial-path="/kepano/defuddle/issues/56" style="display: block; min-height: calc(100vh - 64px);" data-attempted-ssr="true" data-ssr="true" data-lazy="false" data-alternate="false" data-data-router-enabled="false" data-react-profiling="false" data-catalyst="" class="loaded">
  <div data-target="react-app.reactRoot"><div role="region" id="__primerPortalRoot__" style="z-index:15;position:absolute;width:100%"><div style="position: relative; z-index: 1;"><span role="tooltip" aria-label="This user has previously committed to the defuddle repository." data-visible-text="This user has previously committed to the defuddle repository." id=":rk:" class="ControlledTooltip__TooltipBase-sc-b39269ff-0 ksNLFK tooltipped-n" style="position: absolute; left: 913.664px; top: 959.703px;"></span></div><div style="position: relative; z-index: 1;"><span role="tooltip" aria-label="This user is the author of this issue" data-visible-text="This user is the author of this issue" id=":rl:" class="ControlledTooltip__TooltipBase-sc-b39269ff-0 ksNLFK tooltipped-n" style="position: absolute; left: 988.512px; top: 959.703px;"></span></div><div style="position: relative; z-index: 1;"><span role="tooltip" aria-label="This user has previously committed to the defuddle repository." data-visible-text="This user has previously committed to the defuddle repository." id=":r3d:" class="ControlledTooltip__TooltipBase-sc-b39269ff-0 ksNLFK tooltipped-n" style="position: absolute; left: 974.641px; top: 161.711px;"></span></div></div><div class="Box-sc-g0xbh4-0 gjuRkX"><div class="primary-viewer IssueDetail-module__IssueDetailContainer--w0tUF" data-testid="issue-viewer-container"><div class="IssueViewer-module__issueViewerContainer--flht4 IssueViewer-module__mainContainer--xvqRF"><div class="Box-sc-g0xbh4-0 ContentWrapper-module__contentContainer--UBLwW"><div aria-label="Header" role="region" data-testid="issue-header"><div class="prc-PageHeader-PageHeader-sT1Hp HeaderViewer-module__headerContainer--p0Eo1 "><div class="prc-PageHeader-TitleArea-jxJZy HeaderViewer-module__PageHeader_TitleArea--aw8nU" data-component="TitleArea" data-size-variant="medium"><h1 class="Box-sc-g0xbh4-0 fdpFjT prc-PageHeader-Title-LKOsd HeaderViewer-module__PageHeader_Title--FtJ26 prc-Heading-Heading-6CmGO" data-component="PH_Title" data-hidden="false" style="--custom-font-size: 26px,26px,var(--text-title-size-large, 32px),var(--text-title-size-large, 32px);"><bdi class="Box-sc-g0xbh4-0 markdown-title HeaderViewer-module__VerifiedHTMLBox--EQCNM" data-testid="issue-title">Defuddle on Cloudflare Workers</bdi>&nbsp;<span class="HeaderViewer-module__issueNumberText--GQIsT">#56</span></h1></div><div class="prc-PageHeader-ContextArea-6ykSJ" data-hidden-regular="true"><div class="prc-PageHeader-ContextAreaActions-RTJRk HeaderViewer-module__PageHeader_ContextAreaActions--yr4iv" data-hidden-regular="true"><div class="HeaderMenu-module__menuActionsContainer--YhKI5"><div class="Box-sc-g0xbh4-0 kIppVx HeaderMenu-module__buttonContainer--FFZDV"><a type="button" href="/login?return_to=https://github.com/kepano/defuddle/issues/56" target="_blank" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="primary" aria-describedby=":r0:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">New issue</span></span></a></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":r3:-loading-announcement" aria-labelledby=":r1:"></button><span class="CopyToClipboardButton-module__tooltip--Dq1IB prc-TooltipV2-Tooltip-cYMVY" data-direction="s" aria-label="Copy link" aria-hidden="true" id=":r1:" popover="auto">Copy link</span></div></div></div><div class="Box-sc-g0xbh4-0 dXFha-d prc-PageHeader-Actions-ygtmj HeaderViewer-module__PageHeader_Actions--jMiBQ" data-component="PH_Actions"><div class="HeaderMenu-module__menuActionsContainer--YhKI5"><div class="Box-sc-g0xbh4-0 kIppVx HeaderMenu-module__buttonContainer--FFZDV"><a type="button" href="/login?return_to=https://github.com/kepano/defuddle/issues/56" target="_blank" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="primary" aria-describedby=":r4:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">New issue</span></span></a></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":r7:-loading-announcement" aria-labelledby=":r5:"></button><span class="CopyToClipboardButton-module__tooltip--Dq1IB prc-TooltipV2-Tooltip-cYMVY" data-direction="s" aria-label="Copy link" aria-hidden="true" id=":r5:" popover="auto">Copy link</span></div></div></div></div></div><div class="Box-sc-g0xbh4-0 ContentWrapper-module__contentContainer--UBLwW"><div data-testid="issue-metadata-fixed" class="Box-sc-g0xbh4-0 eshSer HeaderMetadata-module__metadataContainer--_PF3H"><div class="HeaderMetadata-module__metadataBorder--D3sHw"><div class="HeaderMetadata-module__metadataContent--xV4If"><div><span data-testid="header-state" class="StateLabel__StateLabelBase-sc-qthdln-0 iZkpsg HeaderState-module__stateLabel--r_Sbk">Open</span></div></div></div></div></div><div data-testid="issue-metadata-sticky" class="Box-sc-g0xbh4-0 giaEbJ js-notification-shelf-offset-top HeaderMetadata-module__stickyContainer--xk69x" data-original-top="auto" style="top: 0px !important;"><div class="Box-sc-g0xbh4-0 ContentWrapper-module__contentContainer--UBLwW"><div class="HeaderMetadata-module__stickyContent--_V4Oe"><div><span data-testid="header-state" class="StateLabel__StateLabelBase-sc-qthdln-0 iZkpsg HeaderState-module__stateLabel--r_Sbk">Open</span></div><div class="HeaderMetadata-module__titleAndMetadata--z52aq"><div class="StickyHeaderTitle-module__stickyTitleContainer--EbzmY"><a class="StickyHeaderTitle-module__stickyTitleLink--nH4Ae prc-Link-Link-85e08" href="#top"><bdi class="Box-sc-g0xbh4-0 markdown-title" data-testid="issue-title-sticky">Defuddle on Cloudflare Workers</bdi></a><span class="StickyHeaderTitle-module__issueNumberText--cvVGn">#56</span></div><div class="Box-sc-g0xbh4-0 buMjBU HeaderMetadata-module__smallMetadataRow--te7E4"></div></div><div><div class="HeaderMenu-module__menuActionsContainer--YhKI5"><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":ra:-loading-announcement" aria-labelledby=":r8:"></button><span class="CopyToClipboardButton-module__tooltip--Dq1IB prc-TooltipV2-Tooltip-cYMVY" data-direction="s" aria-label="Copy link" aria-hidden="true" id=":r8:" popover="auto">Copy link</span></div></div></div></div></div><div class="Box-sc-g0xbh4-0 Header-module__stickyObservableBox--UY7Oc"></div><div class="Header-module__HeaderContentWrapper--KP3yk"><div class="Box-sc-g0xbh4-0 ContentWrapper-module__contentContainer--UBLwW"><div class="Header-module__headerSpacer--LjoEh"></div></div></div><div class="Box-sc-g0xbh4-0 ContentWrapper-module__contentContainer--UBLwW"><div class="Box-sc-g0xbh4-0 hcXOSJ IssueViewer-module__contentAndSidebarWrapper--If3X6"><div class="Box-sc-g0xbh4-0 bkzAXF IssueViewer-module__contentArea--mHr61"><div data-testid="issue-viewer-issue-container"><div class="Box-sc-g0xbh4-0 gRssIw"><a class="Avatar-module__avatarLink--S36bm Avatar-module__avatarOuter--MZJZH prc-Link-Link-85e08" href="https://github.com/jmorrell" data-hovercard-url="/users/jmorrell/hovercard" aria-label="@jmorrell's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__issueViewerAvatar--grA_h prc-Avatar-Avatar-ZRS-m" alt="@jmorrell" width="40" height="40" src="https://avatars.githubusercontent.com/u/175496?u=67732a19ea689bfbf922a11d917aaae341ef5b93&amp;v=4&amp;size=80" data-testid="github-avatar" style="--avatarSize-regular: 40px;"></a><div data-testid="issue-body" class="Box-sc-g0xbh4-0 bDlPR react-issue-body" data-hpc="true"><h2 class="sr-only">Description</h2><div class="Box-sc-g0xbh4-0 crMLA-D"><div class="Box-sc-g0xbh4-0 kFa-ded"><div class="IssueBodyHeader-module__IssueBodyHeaderContainer--K_UcQ IssueBodyHeader-module__viewerDidNotAuthor--AuLdY"><div class="ActivityHeader-module__activityHeader--Flalv IssueBodyHeader-module__activityHeaderWrapper--AuHSB"><div class="Box-sc-g0xbh4-0 Avatar-module__avatarInner--rVuJD IssueBodyHeader-module__avatarContainer--NXjSJ"><a class="Avatar-module__avatarLink--S36bm prc-Link-Link-85e08" href="https://github.com/jmorrell" data-hovercard-url="/users/jmorrell/hovercard" aria-label="@jmorrell's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="prc-Avatar-Avatar-ZRS-m" alt="@jmorrell" width="24" height="24" src="https://avatars.githubusercontent.com/u/175496?u=67732a19ea689bfbf922a11d917aaae341ef5b93&amp;v=4&amp;size=48" data-testid="github-avatar" style="--avatarSize-regular: 24px;"></a></div><div class="ActivityHeader-module__narrowViewportWrapper--Hjl75 IssueBodyHeader-module__narrowViewportWrapper--XfEFl"><div class="IssueBodyHeader-module__titleSection--mIIEU"><a class="Box-sc-g0xbh4-0 bGcKkD IssueBodyHeaderAuthor-module__authorLoginLink--_S7aT prc-Link-Link-85e08" href="https://github.com/jmorrell" data-hovercard-url="/users/jmorrell/hovercard" data-testid="issue-body-header-author" aria-keyshortcuts="Alt+ArrowUp">jmorrell</a></div><div class="ActivityHeader-module__footer--FVHp7 IssueBodyHeader-module__footerSection--mIHCZ"><span>opened </span><a class="IssueBodyHeader-module__dateLink--0HRj6 prc-Link-Link-85e08" href="https://github.com/kepano/defuddle/issues/56#issue-3089558116" data-testid="issue-body-header-link"><relative-time class="sc-aXZVg IssueBodyHeader-module__RelativeTime--YdtKY" datetime="2025-05-25T20:35:48.000Z" title="May 25, 2025, 10:35 PM GMT+2">on May 25, 2025</relative-time></a><span class="MarkdownLastEditedBy-module__lastEditInfoContainer--Zq7l_"><span> · </span><span>edited by <a class="MarkdownLastEditedBy-module__mutedEditorLink--QXVvq prc-Link-Link-85e08" href="https://github.com/jmorrell">jmorrell</a></span></span></div></div><div class="ActivityHeader-module__narrowViewportWrapper--Hjl75 IssueBodyHeader-module__actionsWrapper--fSJZC"><div class="ActivityHeader-module__edits--LwHTE IssueBodyHeader-module__editsSection--dH32c"><div class="MarkdownEditHistoryViewer-module__editHistoryContainer--mTLIa"><button type="button" aria-label="Open edits" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI MarkdownEditHistoryViewer-module__editHistoryMenuButton--xVcT7" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":r3a:-loading-announcement" id=":r3a:"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Edits</span></span><span data-component="trailingAction" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"></span></button></div></div><div class="IssueBodyHeader-module__badgesSection--Elchd"><div class="IssueBodyHeader-module__badgeGroup--ZQNrg"><span class="Box-sc-g0xbh4-0 prc-Label-Label--LG6X" data-size="small" data-variant="secondary" data-testid="comment-author-association" aria-label="This user has previously committed to the defuddle repository." aria-describedby=":r3d:">Contributor</span></div><div class="IssueBodyHeader-module__actionsSection--Y5zwc"><button data-component="IconButton" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":rb:-loading-announcement" aria-labelledby=":rd:" id=":rb:"></button><span class="prc-TooltipV2-Tooltip-cYMVY" data-direction="s" aria-hidden="true" id=":rd:" popover="auto">Issue body actions</span></div></div></div></div></div><div class="IssueBodyViewer-module__IssueBody--MXyFt" id="issue-body-viewer" data-testid="issue-body-viewer"><div data-testid="markdown-body" data-team-hovercards-enabled="true" class="markdown-body" data-turbolinks="false"><div class="Box-sc-g0xbh4-0 markdown-body NewMarkdownViewer-module__safe-html-box--cRsz0"><p dir="auto">Example repo here: <a href="https://github.com/jmorrell/defuddle-cloudflare-example">https://github.com/jmorrell/defuddle-cloudflare-example</a></p>
<p dir="auto">I was looking forward to ditching my tenuous <code class="notranslate">readbilityjs</code> fork in my workers project. Defuddle ultimately does run to completion, but I ran into a couple of issues. Supporting this environment fully is likely challenging since <code class="notranslate">JSDOM</code> does not work within the Worker environment. I suspect the same will be true of the deno and bun runtimes.</p>
<p dir="auto">I was able to work around this by using the browser version along with <a href="https://github.com/WebReflection/linkedom">linkedom</a>, however this is not an exact replacement for JSDOM and doesn't implement all the CSS functionality.</p>
<p dir="auto">Since defuddle relies on these style heuristics, <strong>I'm not sure there is a great path to supporting the full functionality in this environment</strong>, but I wanted to open an issue for discussion and to document these issues for anyone else who might hit this.</p>
<p dir="auto">When running I get two errors:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto"><pre class="notranslate"><code class="notranslate">Defuddle: Error evaluating media queries: TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))
</code></pre><div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w" value="Defuddle: Error evaluating media queries: TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))" tabindex="0" role="button">
    </clipboard-copy>
  </div></div>
<p dir="auto">This is due to linkedom not implementing <code class="notranslate">doc.styleSheets</code>: </p><div class="Box Box--condensed my-2">
  <div class="Box-header f6">
    <p class="mb-0 text-bold">
      <a href="https://github.com/kepano/defuddle/blob/cb4291db0f24cac0d0674d9e35fc0089338da2da/src/defuddle.ts#L213">defuddle/src/defuddle.ts</a>
    </p>
    <p class="mb-0 color-fg-muted">
         Line 213
      in
      <a data-pjax="true" class="commit-tease-sha Link--inTextBlock" href="/kepano/defuddle/commit/cb4291db0f24cac0d0674d9e35fc0089338da2da">cb4291d</a>
    </p>
  </div>
  <div itemprop="text" class="Box-body p-0 blob-wrapper blob-wrapper-embedded data">
    <table class="highlight tab-size mb-0 js-file-line-container" data-tab-size="8" data-paste-markdown-skip="">
        <tbody><tr class="border-0">
          <td id="L213" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="213"></td>
          <td id="LC213" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-k">const</span> <span class="pl-s1">sheets</span> <span class="pl-c1">=</span> <span class="pl-v">Array</span><span class="pl-kos">.</span><span class="pl-en">from</span><span class="pl-kos">(</span><span class="pl-s1">doc</span><span class="pl-kos">.</span><span class="pl-c1">styleSheets</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">filter</span><span class="pl-kos">(</span><span class="pl-s1">sheet</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">{</span> </td>
        </tr>
    </tbody></table>
  </div>
</div>
<p></p>
<p dir="auto">This could be silenced by falling back to <code class="notranslate">[]</code> if <code class="notranslate">doc.styleSheets</code> isn't present, however that may not be the desired behavior.</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto"><pre class="notranslate"><span class="pl-k">const</span> <span class="pl-s1">sheets</span> <span class="pl-c1">=</span> <span class="pl-v">Array</span><span class="pl-kos">.</span><span class="pl-en">from</span><span class="pl-kos">(</span><span class="pl-s1">doc</span><span class="pl-kos">.</span><span class="pl-c1">styleSheets</span> <span class="pl-c1">??</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">)</span></pre><div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w" value="const sheets = Array.from(doc.styleSheets ?? [])" tabindex="0" role="button">
    </clipboard-copy>
  </div></div>
<p dir="auto">The second issue is due to <code class="notranslate">getComputedStyle</code> not being supported by linkedom.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto"><pre class="notranslate"><code class="notranslate">Defuddle Error processing document: TypeError: e3.getComputedStyle is not a function
</code></pre><div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w" value="Defuddle Error processing document: TypeError: e3.getComputedStyle is not a function" tabindex="0" role="button">
    </clipboard-copy>
  </div></div>
<p dir="auto">If you feel like there's nothing to do, or supporting Workers is out-of-scope for the project, feel free to close the issue</p></div></div><div class="IssueBodyViewer-module__IssueBodyTaskList--r4XEH"><div role="toolbar" aria-label="Reactions" class="d-flex gap-1 flex-wrap"></div></div></div></div></div></div></div></div><div data-testid="issue-viewer-comments-container" class="react-comments-container"><div class="IssueViewer-module__commentsContainer--BOa75"><h2 class="sr-only">Activity</h2><div data-testid="issue-timeline-container" class="prc-Timeline-Timeline-iQjcc"><div class="LayoutHelpers-module__timelineElement--tFGhF " data-wrapper-timeline-id="IC_kwDOOAhtcs6tVmI1"><a class="Avatar-module__avatarLink--S36bm Avatar-module__avatarOuter--MZJZH prc-Link-Link-85e08" href="https://github.com/jmorrell" data-hovercard-url="/users/jmorrell/hovercard" aria-label="@jmorrell's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__issueViewerAvatar--grA_h Avatar-module__avatarWithDivider--QAWxt prc-Avatar-Avatar-ZRS-m" alt="jmorrell" width="40" height="40" src="https://avatars.githubusercontent.com/u/175496?u=67732a19ea689bfbf922a11d917aaae341ef5b93&amp;v=4&amp;size=80" data-testid="github-avatar" style="--avatarSize-regular: 40px;"></a><div class="TimelineRowBorder-module__Box--StHNM"><div data-testid="timeline-divider-IC_kwDOOAhtcs6tVmI1" class="Box-sc-g0xbh4-0 hMXUro TimelineDivider-module__Box--mXVKT"><div class="TimelineDivider-module__Box_1--UKj6b"></div><div class="Box-sc-g0xbh4-0 dVlzxM TimelineDivider-module__Box_2--WcW6m"></div></div><div data-timeline-event-id="IC_kwDOOAhtcs6tVmI1" data-highlighted-event="false" data-testid="timeline-row-border-IC_kwDOOAhtcs6tVmI1" class="Box-sc-g0xbh4-0 fFvqfZ"><div class="react-issue-comment IssueCommentViewer-module__IssueCommentLayout--PA204"><div data-testid="comment-viewer-outer-box-IC_kwDOOAhtcs6tVmI1" class="IssueCommentViewer-module__IssueCommentContent--kTuSn"><div id="issuecomment-2908119605" data-testid="comment-header" class="Box-sc-g0xbh4-0 dyvxqL ActivityHeader-module__ActivityHeaderContainer--NuqfC"><div class="Box-sc-g0xbh4-0 gezycG ActivityHeader-module__activityHeader--Flalv ActivityHeader-module__ActivityHeaderGridLayout--A5yGX"><h3 class="sr-only">jmorrell commented <relative-time class="sc-aXZVg" datetime="2025-05-25T22:14:08.000Z" title="May 26, 2025, 12:14 AM GMT+2">on May 26, 2025 </relative-time></h3><div class="Box-sc-g0xbh4-0 bEVFCt Avatar-module__avatarInner--rVuJD ActivityHeader-module__AvatarContainer--biaU3"><a class="Avatar-module__avatarLink--S36bm prc-Link-Link-85e08" href="/jmorrell" data-hovercard-url="/users/jmorrell/hovercard" aria-label="@jmorrell's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__activityAvatar--yNkmi prc-Avatar-Avatar-ZRS-m" alt="@jmorrell" width="24" height="24" src="https://avatars.githubusercontent.com/u/175496?u=67732a19ea689bfbf922a11d917aaae341ef5b93&amp;v=4&amp;size=48" data-testid="github-avatar" style="--avatarSize-regular: 24px;"></a></div><div class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__CommentHeaderContentContainer--Nlw60" data-testid="comment-header-left-side-items"><div class="ActivityHeader-module__TitleContainer--jjcek"><a class="Box-sc-g0xbh4-0 caMfTC ActivityHeader-module__AuthorLink--iofTU prc-Link-Link-85e08" data-testid="avatar-link" href="/jmorrell" data-hovercard-url="/users/jmorrell/hovercard" aria-keyshortcuts="Alt+ArrowUp">jmorrell</a></div><div class="ActivityHeader-module__footer--FVHp7 ActivityHeader-module__FooterContainer--tzPvI"><span class="ActivityHeader-module__HeaderMutedText--wGooR"><a class="ActivityHeader-module__HeaderLink--KAADX prc-Link-Link-85e08" href="https://github.com/kepano/defuddle/issues/56#issuecomment-2908119605" data-turbo="true"><relative-time class="sc-aXZVg" datetime="2025-05-25T22:14:08.000Z" title="May 26, 2025, 12:14 AM GMT+2">on May 26, 2025</relative-time></a></span><span class="MarkdownLastEditedBy-module__lastEditInfoContainer--Zq7l_"><span> · </span><span>edited by <a class="MarkdownLastEditedBy-module__mutedEditorLink--QXVvq prc-Link-Link-85e08" href="https://github.com/jmorrell">jmorrell</a></span></span></div></div><div data-testid="comment-header-right-side-items" class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__ActionsContainer--eBuKL"><div class="ActivityHeader-module__EditsContainer--ktzm1"><div class="MarkdownEditHistoryViewer-module__editHistoryContainer--mTLIa"><button type="button" aria-label="Open edits" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI MarkdownEditHistoryViewer-module__editHistoryMenuButton--xVcT7" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":rh:-loading-announcement" id=":rh:"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Edits</span></span><span data-component="trailingAction" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"></span></button></div></div><div class="ActivityHeader-module__BadgesContainer--gAxNX"><div class="ActivityHeader-module__BadgesGroupContainer--_Byqm"><span class="Box-sc-g0xbh4-0 prc-Label-Label--LG6X" data-size="small" data-variant="secondary" data-testid="comment-author-association" aria-label="This user has previously committed to the defuddle repository." aria-describedby=":rk:">Contributor</span><span class="Box-sc-g0xbh4-0 prc-Label-Label--LG6X" data-size="small" data-variant="secondary" data-testid="comment-subject-author" aria-label="This user is the author of this issue" aria-describedby=":rl:">Author</span></div><div class="ActivityHeader-module__ActionsButtonsContainer--hvWAL"><button data-component="IconButton" type="button" aria-label="Actions for jmorrell's comment, 12:14 AM on May 26" data-testid="comment-header-hamburger" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI CommentActions-module__CommentActionsIconButton--BoTOQ prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":rm:-loading-announcement" id=":rm:"></button></div></div></div></div></div><div class="IssueCommentViewer-module__IssueCommentBody--yozBB"><div data-testid="markdown-body" data-team-hovercards-enabled="true" class="markdown-body" data-turbolinks="false"><div class="Box-sc-g0xbh4-0 markdown-body NewMarkdownViewer-module__safe-html-box--cRsz0"><p dir="auto">For my use-case, I'm already running a headless <a href="https://developers.cloudflare.com/browser-rendering/" rel="nofollow">browser rendering worker</a> to load the page anyway. Instead of downloading the HTML content from the browser and then trying to process it in the worker, I can load defuddle in the browser itself with the page loaded and execute it there. This is a little more awkward but seems to work pretty well!</p>
<p dir="auto">For anyone who might be going down the same path I've created a minimal example here: <a href="https://github.com/jmorrell/defuddle-browser-worker-example">https://github.com/jmorrell/defuddle-browser-worker-example</a></p></div></div><div role="toolbar" aria-label="Reactions" class="d-flex gap-1 flex-wrap"></div></div></div></div></div></div></div><div class="LayoutHelpers-module__timelineElement--tFGhF " data-wrapper-timeline-id="IC_kwDOOAhtcs6upJYu"><a class="Avatar-module__avatarLink--S36bm Avatar-module__avatarOuter--MZJZH prc-Link-Link-85e08" href="https://github.com/masylum" data-hovercard-url="/users/masylum/hovercard" aria-label="@masylum's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__issueViewerAvatar--grA_h Avatar-module__avatarWithDivider--QAWxt prc-Avatar-Avatar-ZRS-m" alt="masylum" width="40" height="40" src="https://avatars.githubusercontent.com/u/28248?v=4&amp;size=80" data-testid="github-avatar" style="--avatarSize-regular: 40px;"></a><div class="TimelineRowBorder-module__Box--StHNM"><div data-testid="timeline-divider-IC_kwDOOAhtcs6upJYu" class="Box-sc-g0xbh4-0 hMXUro TimelineDivider-module__Box--mXVKT"><div class="TimelineDivider-module__Box_1--UKj6b"></div><div class="Box-sc-g0xbh4-0 dVlzxM TimelineDivider-module__Box_2--WcW6m"></div></div><div data-timeline-event-id="IC_kwDOOAhtcs6upJYu" data-highlighted-event="false" data-testid="timeline-row-border-IC_kwDOOAhtcs6upJYu" class="Box-sc-g0xbh4-0 fFvqfZ"><div class="react-issue-comment IssueCommentViewer-module__IssueCommentLayout--PA204"><div data-testid="comment-viewer-outer-box-IC_kwDOOAhtcs6upJYu" class="IssueCommentViewer-module__IssueCommentContent--kTuSn"><div id="issuecomment-2930021934" data-testid="comment-header" class="Box-sc-g0xbh4-0 dyvxqL ActivityHeader-module__ActivityHeaderContainer--NuqfC"><div class="Box-sc-g0xbh4-0 gezycG ActivityHeader-module__activityHeader--Flalv ActivityHeader-module__ActivityHeaderGridLayout--A5yGX"><h3 class="sr-only">masylum commented <relative-time class="sc-aXZVg" datetime="2025-06-02T10:51:41.000Z" title="Jun 2, 2025, 12:51 PM GMT+2">on Jun 2, 2025 </relative-time></h3><div class="Box-sc-g0xbh4-0 bEVFCt Avatar-module__avatarInner--rVuJD ActivityHeader-module__AvatarContainer--biaU3"><a class="Avatar-module__avatarLink--S36bm prc-Link-Link-85e08" href="/masylum" data-hovercard-url="/users/masylum/hovercard" aria-label="@masylum's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__activityAvatar--yNkmi prc-Avatar-Avatar-ZRS-m" alt="@masylum" width="24" height="24" src="https://avatars.githubusercontent.com/u/28248?v=4&amp;size=48" data-testid="github-avatar" style="--avatarSize-regular: 24px;"></a></div><div class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__CommentHeaderContentContainer--Nlw60" data-testid="comment-header-left-side-items"><div class="ActivityHeader-module__TitleContainer--jjcek"><a class="Box-sc-g0xbh4-0 caMfTC ActivityHeader-module__AuthorLink--iofTU prc-Link-Link-85e08" data-testid="avatar-link" href="/masylum" data-hovercard-url="/users/masylum/hovercard" aria-keyshortcuts="Alt+ArrowUp">masylum</a></div><div class="ActivityHeader-module__footer--FVHp7 ActivityHeader-module__FooterContainer--tzPvI"><span class="ActivityHeader-module__HeaderMutedText--wGooR"><a class="ActivityHeader-module__HeaderLink--KAADX prc-Link-Link-85e08" href="https://github.com/kepano/defuddle/issues/56#issuecomment-2930021934" data-turbo="true"><relative-time class="sc-aXZVg" datetime="2025-06-02T10:51:41.000Z" title="Jun 2, 2025, 12:51 PM GMT+2">on Jun 2, 2025</relative-time></a></span></div></div><div data-testid="comment-header-right-side-items" class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__ActionsContainer--eBuKL"><div class="ActivityHeader-module__EditsContainer--ktzm1"></div><div class="ActivityHeader-module__BadgesContainer--gAxNX"><div class="ActivityHeader-module__BadgesGroupContainer--_Byqm"></div><div class="ActivityHeader-module__ActionsButtonsContainer--hvWAL"><button data-component="IconButton" type="button" aria-label="Actions for masylum's comment, 12:51 PM on June 2" data-testid="comment-header-hamburger" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI CommentActions-module__CommentActionsIconButton--BoTOQ prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":r11:-loading-announcement" id=":r11:"></button></div></div></div></div></div><div class="IssueCommentViewer-module__IssueCommentBody--yozBB"><div data-testid="markdown-body" data-team-hovercards-enabled="true" class="markdown-body" data-turbolinks="false"><div class="Box-sc-g0xbh4-0 markdown-body NewMarkdownViewer-module__safe-html-box--cRsz0"><p dir="auto">it would be great to replace the dom calls to cheerio. I've done something similar porting readability to cheerio here: <a href="https://jsr.io/@paoramen/cheer-reader" rel="nofollow">https://jsr.io/@paoramen/cheer-reader</a>. <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kepano/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kepano" aria-keyshortcuts="Alt+ArrowUp">@kepano</a> would you be interested on merging this or should I just maintain my own fork if I do?</p></div></div><div role="toolbar" aria-label="Reactions" class="d-flex gap-1 flex-wrap"></div></div></div></div></div></div></div><div class="LayoutHelpers-module__timelineElement--tFGhF " data-wrapper-timeline-id="IC_kwDOOAhtcs6wCwKD"><a class="Avatar-module__avatarLink--S36bm Avatar-module__avatarOuter--MZJZH prc-Link-Link-85e08" href="https://github.com/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-label="@nbbaier's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__issueViewerAvatar--grA_h Avatar-module__avatarWithDivider--QAWxt prc-Avatar-Avatar-ZRS-m" alt="nbbaier" width="40" height="40" src="https://avatars.githubusercontent.com/u/12950157?u=a75386a5e9d899e27db6e1cb2711c589c016b95d&amp;v=4&amp;size=80" data-testid="github-avatar" style="--avatarSize-regular: 40px;"></a><div class="TimelineRowBorder-module__Box--StHNM"><div data-testid="timeline-divider-IC_kwDOOAhtcs6wCwKD" class="Box-sc-g0xbh4-0 hMXUro TimelineDivider-module__Box--mXVKT"><div class="TimelineDivider-module__Box_1--UKj6b"></div><div class="Box-sc-g0xbh4-0 dVlzxM TimelineDivider-module__Box_2--WcW6m"></div></div><div data-timeline-event-id="IC_kwDOOAhtcs6wCwKD" data-highlighted-event="false" data-testid="timeline-row-border-IC_kwDOOAhtcs6wCwKD" class="Box-sc-g0xbh4-0 fFvqfZ"><div class="react-issue-comment IssueCommentViewer-module__IssueCommentLayout--PA204"><div data-testid="comment-viewer-outer-box-IC_kwDOOAhtcs6wCwKD" class="IssueCommentViewer-module__IssueCommentContent--kTuSn"><div id="issuecomment-2953511555" data-testid="comment-header" class="Box-sc-g0xbh4-0 dyvxqL ActivityHeader-module__ActivityHeaderContainer--NuqfC"><div class="Box-sc-g0xbh4-0 gezycG ActivityHeader-module__activityHeader--Flalv ActivityHeader-module__ActivityHeaderGridLayout--A5yGX"><h3 class="sr-only">nbbaier commented <relative-time class="sc-aXZVg" datetime="2025-06-08T04:05:12.000Z" title="Jun 8, 2025, 6:05 AM GMT+2">on Jun 8, 2025 </relative-time></h3><div class="Box-sc-g0xbh4-0 bEVFCt Avatar-module__avatarInner--rVuJD ActivityHeader-module__AvatarContainer--biaU3"><a class="Avatar-module__avatarLink--S36bm prc-Link-Link-85e08" href="/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-label="@nbbaier's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__activityAvatar--yNkmi prc-Avatar-Avatar-ZRS-m" alt="@nbbaier" width="24" height="24" src="https://avatars.githubusercontent.com/u/12950157?u=a75386a5e9d899e27db6e1cb2711c589c016b95d&amp;v=4&amp;size=48" data-testid="github-avatar" style="--avatarSize-regular: 24px;"></a></div><div class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__CommentHeaderContentContainer--Nlw60" data-testid="comment-header-left-side-items"><div class="ActivityHeader-module__TitleContainer--jjcek"><a class="Box-sc-g0xbh4-0 caMfTC ActivityHeader-module__AuthorLink--iofTU prc-Link-Link-85e08" data-testid="avatar-link" href="/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-keyshortcuts="Alt+ArrowUp">nbbaier</a></div><div class="ActivityHeader-module__footer--FVHp7 ActivityHeader-module__FooterContainer--tzPvI"><span class="ActivityHeader-module__HeaderMutedText--wGooR"><a class="ActivityHeader-module__HeaderLink--KAADX prc-Link-Link-85e08" href="https://github.com/kepano/defuddle/issues/56#issuecomment-2953511555" data-turbo="true"><relative-time class="sc-aXZVg" datetime="2025-06-08T04:05:12.000Z" title="Jun 8, 2025, 6:05 AM GMT+2">on Jun 8, 2025</relative-time></a></span></div></div><div data-testid="comment-header-right-side-items" class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__ActionsContainer--eBuKL"><div class="ActivityHeader-module__EditsContainer--ktzm1"></div><div class="ActivityHeader-module__BadgesContainer--gAxNX"><div class="ActivityHeader-module__BadgesGroupContainer--_Byqm"></div><div class="ActivityHeader-module__ActionsButtonsContainer--hvWAL"><button data-component="IconButton" type="button" aria-label="Actions for nbbaier's comment, 6:05 AM on June 8" data-testid="comment-header-hamburger" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI CommentActions-module__CommentActionsIconButton--BoTOQ prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":r1c:-loading-announcement" id=":r1c:"></button></div></div></div></div></div><div class="IssueCommentViewer-module__IssueCommentBody--yozBB"><div data-testid="markdown-body" data-team-hovercards-enabled="true" class="markdown-body" data-turbolinks="false"><div class="Box-sc-g0xbh4-0 markdown-body NewMarkdownViewer-module__safe-html-box--cRsz0"><p dir="auto">Thanks for this <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmorrell/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmorrell" aria-keyshortcuts="Alt+ArrowUp">@jmorrell</a>. I'm also trying to use linkedom and was running into the same issues. Hope workers can be supported!</p></div></div><div role="toolbar" aria-label="Reactions" class="d-flex gap-1 flex-wrap"></div></div></div></div></div></div></div><div class="LayoutHelpers-module__timelineElement--tFGhF " data-wrapper-timeline-id="IC_kwDOOAhtcs6wFOdS"><a class="Avatar-module__avatarLink--S36bm Avatar-module__avatarOuter--MZJZH prc-Link-Link-85e08" href="https://github.com/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-label="@nbbaier's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__issueViewerAvatar--grA_h Avatar-module__avatarWithDivider--QAWxt prc-Avatar-Avatar-ZRS-m" alt="nbbaier" width="40" height="40" src="https://avatars.githubusercontent.com/u/12950157?u=a75386a5e9d899e27db6e1cb2711c589c016b95d&amp;v=4&amp;size=80" data-testid="github-avatar" style="--avatarSize-regular: 40px;"></a><div class="TimelineRowBorder-module__Box--StHNM"><div data-testid="timeline-divider-IC_kwDOOAhtcs6wFOdS" class="Box-sc-g0xbh4-0 hMXUro TimelineDivider-module__Box--mXVKT"><div class="TimelineDivider-module__Box_1--UKj6b"></div><div class="Box-sc-g0xbh4-0 dVlzxM TimelineDivider-module__Box_2--WcW6m"></div></div><div data-timeline-event-id="IC_kwDOOAhtcs6wFOdS" data-highlighted-event="false" data-testid="timeline-row-border-IC_kwDOOAhtcs6wFOdS" class="Box-sc-g0xbh4-0 fFvqfZ"><div class="react-issue-comment IssueCommentViewer-module__IssueCommentLayout--PA204"><div data-testid="comment-viewer-outer-box-IC_kwDOOAhtcs6wFOdS" class="IssueCommentViewer-module__IssueCommentContent--kTuSn"><div id="issuecomment-2954159954" data-testid="comment-header" class="Box-sc-g0xbh4-0 dyvxqL ActivityHeader-module__ActivityHeaderContainer--NuqfC"><div class="Box-sc-g0xbh4-0 gezycG ActivityHeader-module__activityHeader--Flalv ActivityHeader-module__ActivityHeaderGridLayout--A5yGX"><h3 class="sr-only">nbbaier commented <relative-time class="sc-aXZVg" datetime="2025-06-08T16:19:01.000Z" title="Jun 8, 2025, 6:19 PM GMT+2">on Jun 8, 2025 </relative-time></h3><div class="Box-sc-g0xbh4-0 bEVFCt Avatar-module__avatarInner--rVuJD ActivityHeader-module__AvatarContainer--biaU3"><a class="Avatar-module__avatarLink--S36bm prc-Link-Link-85e08" href="/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-label="@nbbaier's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__activityAvatar--yNkmi prc-Avatar-Avatar-ZRS-m" alt="@nbbaier" width="24" height="24" src="https://avatars.githubusercontent.com/u/12950157?u=a75386a5e9d899e27db6e1cb2711c589c016b95d&amp;v=4&amp;size=48" data-testid="github-avatar" style="--avatarSize-regular: 24px;"></a></div><div class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__CommentHeaderContentContainer--Nlw60" data-testid="comment-header-left-side-items"><div class="ActivityHeader-module__TitleContainer--jjcek"><a class="Box-sc-g0xbh4-0 caMfTC ActivityHeader-module__AuthorLink--iofTU prc-Link-Link-85e08" data-testid="avatar-link" href="/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-keyshortcuts="Alt+ArrowUp">nbbaier</a></div><div class="ActivityHeader-module__footer--FVHp7 ActivityHeader-module__FooterContainer--tzPvI"><span class="ActivityHeader-module__HeaderMutedText--wGooR"><a class="ActivityHeader-module__HeaderLink--KAADX prc-Link-Link-85e08" href="https://github.com/kepano/defuddle/issues/56#issuecomment-2954159954" data-turbo="true"><relative-time class="sc-aXZVg" datetime="2025-06-08T16:19:01.000Z" title="Jun 8, 2025, 6:19 PM GMT+2">on Jun 8, 2025</relative-time></a></span><span class="MarkdownLastEditedBy-module__lastEditInfoContainer--Zq7l_"><span> · </span><span>edited by <a class="MarkdownLastEditedBy-module__mutedEditorLink--QXVvq prc-Link-Link-85e08" href="https://github.com/nbbaier">nbbaier</a></span></span></div></div><div data-testid="comment-header-right-side-items" class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__ActionsContainer--eBuKL"><div class="ActivityHeader-module__EditsContainer--ktzm1"><div class="MarkdownEditHistoryViewer-module__editHistoryContainer--mTLIa"><button type="button" aria-label="Open edits" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI MarkdownEditHistoryViewer-module__editHistoryMenuButton--xVcT7" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":r1n:-loading-announcement" id=":r1n:"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Edits</span></span><span data-component="trailingAction" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"></span></button></div></div><div class="ActivityHeader-module__BadgesContainer--gAxNX"><div class="ActivityHeader-module__BadgesGroupContainer--_Byqm"></div><div class="ActivityHeader-module__ActionsButtonsContainer--hvWAL"><button data-component="IconButton" type="button" aria-label="Actions for nbbaier's comment, 6:19 PM on June 8" data-testid="comment-header-hamburger" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI CommentActions-module__CommentActionsIconButton--BoTOQ prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":r1q:-loading-announcement" id=":r1q:"></button></div></div></div></div></div><div class="IssueCommentViewer-module__IssueCommentBody--yozBB"><div data-testid="markdown-body" data-team-hovercards-enabled="true" class="markdown-body" data-turbolinks="false"><div class="Box-sc-g0xbh4-0 markdown-body NewMarkdownViewer-module__safe-html-box--cRsz0"><p dir="auto">I actually decided to see if I could use a coding agent to implement <code class="notranslate">doc.styleSheets</code> and <code class="notranslate">getComputedStyle</code>. I used <a href="https://github.com/sst/opencode">opencode</a> with Claude 4 Sonnet to do so and, at least in a small test in Bun (not on workers), it's working well. My fork of linkedom is <a href="https://github.com/nbbaier/linkedom">here</a>.</p></div></div><div role="toolbar" aria-label="Reactions" class="d-flex gap-1 flex-wrap"></div></div></div></div></div></div></div><div class="LayoutHelpers-module__timelineElement--tFGhF " data-wrapper-timeline-id="IC_kwDOOAhtcs6xn2Wq"><a class="Avatar-module__avatarLink--S36bm Avatar-module__avatarOuter--MZJZH prc-Link-Link-85e08" href="https://github.com/masylum" data-hovercard-url="/users/masylum/hovercard" aria-label="@masylum's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__issueViewerAvatar--grA_h Avatar-module__avatarWithDivider--QAWxt prc-Avatar-Avatar-ZRS-m" alt="masylum" width="40" height="40" src="https://avatars.githubusercontent.com/u/28248?v=4&amp;size=80" data-testid="github-avatar" style="--avatarSize-regular: 40px;"></a><div class="TimelineRowBorder-module__Box--StHNM"><div data-testid="timeline-divider-IC_kwDOOAhtcs6xn2Wq" class="Box-sc-g0xbh4-0 hMXUro TimelineDivider-module__Box--mXVKT"><div class="TimelineDivider-module__Box_1--UKj6b"></div><div class="Box-sc-g0xbh4-0 dVlzxM TimelineDivider-module__Box_2--WcW6m"></div></div><div data-timeline-event-id="IC_kwDOOAhtcs6xn2Wq" data-highlighted-event="false" data-testid="timeline-row-border-IC_kwDOOAhtcs6xn2Wq" class="Box-sc-g0xbh4-0 fFvqfZ"><div class="react-issue-comment IssueCommentViewer-module__IssueCommentLayout--PA204"><div data-testid="comment-viewer-outer-box-IC_kwDOOAhtcs6xn2Wq" class="IssueCommentViewer-module__IssueCommentContent--kTuSn"><div id="issuecomment-2980013482" data-testid="comment-header" class="Box-sc-g0xbh4-0 dyvxqL ActivityHeader-module__ActivityHeaderContainer--NuqfC"><div class="Box-sc-g0xbh4-0 gezycG ActivityHeader-module__activityHeader--Flalv ActivityHeader-module__ActivityHeaderGridLayout--A5yGX"><h3 class="sr-only">masylum commented <relative-time class="sc-aXZVg" datetime="2025-06-17T11:35:14.000Z" title="Jun 17, 2025, 1:35 PM GMT+2">on Jun 17, 2025 </relative-time></h3><div class="Box-sc-g0xbh4-0 bEVFCt Avatar-module__avatarInner--rVuJD ActivityHeader-module__AvatarContainer--biaU3"><a class="Avatar-module__avatarLink--S36bm prc-Link-Link-85e08" href="/masylum" data-hovercard-url="/users/masylum/hovercard" aria-label="@masylum's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__activityAvatar--yNkmi prc-Avatar-Avatar-ZRS-m" alt="@masylum" width="24" height="24" src="https://avatars.githubusercontent.com/u/28248?v=4&amp;size=48" data-testid="github-avatar" style="--avatarSize-regular: 24px;"></a></div><div class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__CommentHeaderContentContainer--Nlw60" data-testid="comment-header-left-side-items"><div class="ActivityHeader-module__TitleContainer--jjcek"><a class="Box-sc-g0xbh4-0 caMfTC ActivityHeader-module__AuthorLink--iofTU prc-Link-Link-85e08" data-testid="avatar-link" href="/masylum" data-hovercard-url="/users/masylum/hovercard" aria-keyshortcuts="Alt+ArrowUp">masylum</a></div><div class="ActivityHeader-module__footer--FVHp7 ActivityHeader-module__FooterContainer--tzPvI"><span class="ActivityHeader-module__HeaderMutedText--wGooR"><a class="ActivityHeader-module__HeaderLink--KAADX prc-Link-Link-85e08" href="https://github.com/kepano/defuddle/issues/56#issuecomment-2980013482" data-turbo="true"><relative-time class="sc-aXZVg" datetime="2025-06-17T11:35:14.000Z" title="Jun 17, 2025, 1:35 PM GMT+2">on Jun 17, 2025</relative-time></a></span></div></div><div data-testid="comment-header-right-side-items" class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__ActionsContainer--eBuKL"><div class="ActivityHeader-module__EditsContainer--ktzm1"></div><div class="ActivityHeader-module__BadgesContainer--gAxNX"><div class="ActivityHeader-module__BadgesGroupContainer--_Byqm"></div><div class="ActivityHeader-module__ActionsButtonsContainer--hvWAL"><button data-component="IconButton" type="button" aria-label="Actions for masylum's comment, 1:35 PM on June 17" data-testid="comment-header-hamburger" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI CommentActions-module__CommentActionsIconButton--BoTOQ prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":r25:-loading-announcement" id=":r25:"></button></div></div></div></div></div><div class="IssueCommentViewer-module__IssueCommentBody--yozBB"><div data-testid="markdown-body" data-team-hovercards-enabled="true" class="markdown-body" data-turbolinks="false"><div class="Box-sc-g0xbh4-0 markdown-body NewMarkdownViewer-module__safe-html-box--cRsz0"><p dir="auto">wrong link to fork</p></div></div><div role="toolbar" aria-label="Reactions" class="d-flex gap-1 flex-wrap"></div></div></div></div></div></div></div><div class="LayoutHelpers-module__timelineElement--tFGhF " data-wrapper-timeline-id="IC_kwDOOAhtcs6xrrkO"><a class="Avatar-module__avatarLink--S36bm Avatar-module__avatarOuter--MZJZH prc-Link-Link-85e08" href="https://github.com/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-label="@nbbaier's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__issueViewerAvatar--grA_h Avatar-module__avatarWithDivider--QAWxt prc-Avatar-Avatar-ZRS-m" alt="nbbaier" width="40" height="40" src="https://avatars.githubusercontent.com/u/12950157?u=a75386a5e9d899e27db6e1cb2711c589c016b95d&amp;v=4&amp;size=80" data-testid="github-avatar" style="--avatarSize-regular: 40px;"></a><div class="TimelineRowBorder-module__Box--StHNM"><div data-testid="timeline-divider-IC_kwDOOAhtcs6xrrkO" class="Box-sc-g0xbh4-0 hMXUro TimelineDivider-module__Box--mXVKT"><div class="TimelineDivider-module__Box_1--UKj6b"></div><div class="Box-sc-g0xbh4-0 dVlzxM TimelineDivider-module__Box_2--WcW6m"></div></div><div data-timeline-event-id="IC_kwDOOAhtcs6xrrkO" data-highlighted-event="false" data-testid="timeline-row-border-IC_kwDOOAhtcs6xrrkO" class="Box-sc-g0xbh4-0 fFvqfZ"><div class="react-issue-comment IssueCommentViewer-module__IssueCommentLayout--PA204"><div data-testid="comment-viewer-outer-box-IC_kwDOOAhtcs6xrrkO" class="IssueCommentViewer-module__IssueCommentContent--kTuSn"><div id="issuecomment-2981017870" data-testid="comment-header" class="Box-sc-g0xbh4-0 dyvxqL ActivityHeader-module__ActivityHeaderContainer--NuqfC"><div class="Box-sc-g0xbh4-0 gezycG ActivityHeader-module__activityHeader--Flalv ActivityHeader-module__ActivityHeaderGridLayout--A5yGX"><h3 class="sr-only">nbbaier commented <relative-time class="sc-aXZVg" datetime="2025-06-17T16:23:25.000Z" title="Jun 17, 2025, 6:23 PM GMT+2">on Jun 17, 2025 </relative-time></h3><div class="Box-sc-g0xbh4-0 bEVFCt Avatar-module__avatarInner--rVuJD ActivityHeader-module__AvatarContainer--biaU3"><a class="Avatar-module__avatarLink--S36bm prc-Link-Link-85e08" href="/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-label="@nbbaier's profile" aria-keyshortcuts="Alt+ArrowUp"><img data-component="Avatar" class="Avatar-module__activityAvatar--yNkmi prc-Avatar-Avatar-ZRS-m" alt="@nbbaier" width="24" height="24" src="https://avatars.githubusercontent.com/u/12950157?u=a75386a5e9d899e27db6e1cb2711c589c016b95d&amp;v=4&amp;size=48" data-testid="github-avatar" style="--avatarSize-regular: 24px;"></a></div><div class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__CommentHeaderContentContainer--Nlw60" data-testid="comment-header-left-side-items"><div class="ActivityHeader-module__TitleContainer--jjcek"><a class="Box-sc-g0xbh4-0 caMfTC ActivityHeader-module__AuthorLink--iofTU prc-Link-Link-85e08" data-testid="avatar-link" href="/nbbaier" data-hovercard-url="/users/nbbaier/hovercard" aria-keyshortcuts="Alt+ArrowUp">nbbaier</a></div><div class="ActivityHeader-module__footer--FVHp7 ActivityHeader-module__FooterContainer--tzPvI"><span class="ActivityHeader-module__HeaderMutedText--wGooR"><a class="ActivityHeader-module__HeaderLink--KAADX prc-Link-Link-85e08" href="https://github.com/kepano/defuddle/issues/56#issuecomment-2981017870" data-turbo="true"><relative-time class="sc-aXZVg" datetime="2025-06-17T16:23:25.000Z" title="Jun 17, 2025, 6:23 PM GMT+2">on Jun 17, 2025</relative-time></a></span></div></div><div data-testid="comment-header-right-side-items" class="ActivityHeader-module__narrowViewportWrapper--Hjl75 ActivityHeader-module__ActionsContainer--eBuKL"><div class="ActivityHeader-module__EditsContainer--ktzm1"></div><div class="ActivityHeader-module__BadgesContainer--gAxNX"><div class="ActivityHeader-module__BadgesGroupContainer--_Byqm"></div><div class="ActivityHeader-module__ActionsButtonsContainer--hvWAL"><button data-component="IconButton" type="button" aria-label="Actions for nbbaier's comment, 6:23 PM on June 17" data-testid="comment-header-hamburger" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI CommentActions-module__CommentActionsIconButton--BoTOQ prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":r2g:-loading-announcement" id=":r2g:"></button></div></div></div></div></div><div class="IssueCommentViewer-module__IssueCommentBody--yozBB"><div data-testid="markdown-body" data-team-hovercards-enabled="true" class="markdown-body" data-turbolinks="false"><div class="Box-sc-g0xbh4-0 markdown-body NewMarkdownViewer-module__safe-html-box--cRsz0"><p dir="auto">Oops! Yes, fixed in the original post. Thanks, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/masylum/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/masylum" aria-keyshortcuts="Alt+ArrowUp">@masylum</a></p></div></div><div role="toolbar" aria-label="Reactions" class="d-flex gap-1 flex-wrap"></div></div></div></div></div></div></div></div><div class="prc-Flash-Flash-3q4Aj SignedOutBanner-module__signedOutBanner--ycf6Y" data-variant="warning"><a href="/signup?return_to=https://github.com/kepano/defuddle/issues/56" data-jump-to-bottom-target="true" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="primary" aria-describedby="signed-out-banner-sign-up-loading-announcement" id="signed-out-banner-sign-up"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Sign up for free</span></span></a><span><strong> to join this conversation on GitHub.</strong> Already have an account? </span><a class="prc-Link-Link-85e08" href="/login?return_to=https://github.com/kepano/defuddle/issues/56">Sign in to comment</a></div></div></div></div><div data-testid="issue-viewer-metadata-container" class="Box-sc-g0xbh4-0 cLtwuV IssueViewer-module__metadataSidebar--Pw9h0"><div class="IssueViewer-module__issueViewerMetadataPane--Q1n1b" data-testid="issue-viewer-metadata-pane"><h2 class="IssueViewer-module__metadataHeader--ZtOKL prc-Heading-Heading-6CmGO">Metadata</h2><h2 class="IssueViewer-module__largeScreenMetadataHeader--YW31U sr-only prc-Heading-Heading-6CmGO">Metadata</h2><div data-testid="sidebar-section" class="Box-sc-g0xbh4-0 kLjQxV Section-module__SectionContainer--jjjKt"><div class="Section-module__headerContentWrapper--PcBRb"><div class="Box-sc-g0xbh4-0 bwxuvd"><h3 class="Box-sc-g0xbh4-0 bpDFns SectionHeader-module__SectionHeaderTitle--hGC7i prc-Heading-Heading-6CmGO">Assignees</h3></div><span class="Section-module__emptyText--lryRx">No one assigned</span><div class="Section-module__hiddenChildrenContainer--vfTVE"><ul class="prc-ActionList-ActionList-X4RiC Assignees-module__assigneesList--aQ4Cj" data-dividers="false" data-variant="full"></ul></div></div></div><div data-testid="sidebar-section" class="Box-sc-g0xbh4-0 kLjQxV Section-module__SectionContainer--jjjKt"><div class="Section-module__headerContentWrapper--PcBRb"><div class="Box-sc-g0xbh4-0 bwxuvd"><h3 class="Box-sc-g0xbh4-0 bpDFns SectionHeader-module__SectionHeaderTitle--hGC7i prc-Heading-Heading-6CmGO">Labels</h3></div><span class="Section-module__emptyText--lryRx">No labels</span><div class="Section-module__hiddenChildrenContainer--vfTVE"><div tabindex="-1" data-testid="issue-labels" class="Box-sc-g0xbh4-0 LabelsList-module__labelsListContainer--uy37h">No labels</div></div></div></div><div data-testid="sidebar-projects-section" class="Box-sc-g0xbh4-0 kLjQxV Section-module__SectionContainer--jjjKt"><div class="Section-module__headerContentWrapper--PcBRb"><div class="Box-sc-g0xbh4-0 bwxuvd"><h3 class="Box-sc-g0xbh4-0 bpDFns SectionHeader-module__SectionHeaderTitle--hGC7i prc-Heading-Heading-6CmGO">Projects</h3></div><span class="Section-module__emptyText--lryRx">No projects</span><div class="Section-module__hiddenChildrenContainer--vfTVE"><div class="ProjectsSection-module__projectItemsContainer--pjDrS"></div></div></div></div><div data-testid="sidebar-section" class="Box-sc-g0xbh4-0 kLjQxV Section-module__SectionContainer--jjjKt"><div class="Section-module__headerContentWrapper--PcBRb"><div class="Box-sc-g0xbh4-0 bwxuvd"><h3 class="Box-sc-g0xbh4-0 bpDFns SectionHeader-module__SectionHeaderTitle--hGC7i prc-Heading-Heading-6CmGO">Milestone</h3></div><span class="Section-module__emptyText--lryRx">No milestone</span><div class="Section-module__hiddenChildrenContainer--vfTVE"><ul class="prc-ActionList-ActionList-X4RiC" data-dividers="false" data-variant="full"><div class="Milestone-module__hiddenPlaceholder--tPOjC"></div></ul></div></div></div><div data-testid="sidebar-section" class="Box-sc-g0xbh4-0 kLjQxV Section-module__SectionContainer--jjjKt"><div class="Section-module__headerContentWrapper--PcBRb"><div class="d-none"></div><div class="Box-sc-g0xbh4-0 bwxuvd"><h3 class="Box-sc-g0xbh4-0 bpDFns SectionHeader-module__SectionHeaderTitle--hGC7i prc-Heading-Heading-6CmGO">Relationships</h3></div><span class="Section-module__emptyText--lryRx">None yet</span><div class="Section-module__hiddenChildrenContainer--vfTVE"><ul class="prc-ActionList-ActionList-X4RiC RelationshipsSection-module__ActionList_Relationship_Overrides--lsRLl" data-dividers="false" data-variant="full"></ul></div></div></div><div data-testid="sidebar-section" class="Box-sc-g0xbh4-0 kLjQxV Section-module__SectionContainer--jjjKt"><div class="Section-module__headerContentWrapper--PcBRb"><div class="Box-sc-g0xbh4-0 bwxuvd"><h3 class="Box-sc-g0xbh4-0 bpDFns SectionHeader-module__SectionHeaderTitle--hGC7i prc-Heading-Heading-6CmGO">Development</h3></div></div><div class="Section-module__childrenContainer--TxwVF"><div class="DevelopmentSection-module__developmentSectionContainer--Abl_Z"><div class="CopilotAgentModeButton-module__buttonGroup--sXExg prc-ButtonGroup-ButtonGroup-vcMeG"><div><button type="button" data-testid="open-in-copilot-agent-button" class="prc-Button-ButtonBase-c50BI" data-block="block" data-loading="false" data-size="small" data-variant="default" aria-describedby=":r3i:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"></span><span data-component="text" class="prc-Button-Label-pTQ3x">Code with agent mode</span></span></button></div><div><div class="Box-sc-g0xbh4-0" data-loading-wrapper="true"><button aria-disabled="false" data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-describedby=":r3k:-loading-announcement" aria-labelledby=":r3j:"></button></div><span class="prc-TooltipV2-Tooltip-cYMVY" data-direction="s" aria-hidden="true" id=":r3j:" popover="auto">Select code repository</span></div></div><div class="RepositoryPicker-module__repositoryPickerContainer--_1F0T"></div></div><span class="DevelopmentSection-module__developmentHelpText--f7qnx"><span>No branches or pull requests</span></span><ul class="prc-ActionList-ActionList-X4RiC DevelopmentSection-module__developmentActionList--VXl7P" data-dividers="false" data-variant="full" data-testid="issue-viewer-linked-pr-container"></ul></div></div><div data-testid="sidebar-section" class="Box-sc-g0xbh4-0 fQZdXd Section-module__SectionContainer--jjjKt"><div class="Section-module__headerContentWrapper--PcBRb"><div class="Box-sc-g0xbh4-0 bwxuvd"><h3 class="Box-sc-g0xbh4-0 bpDFns SectionHeader-module__SectionHeaderTitle--hGC7i prc-Heading-Heading-6CmGO">Participants</h3></div></div><div class="Section-module__childrenContainer--TxwVF"><div data-testid="sidebar-participants-section" class="ParticipantsSection-module__participantsContainer--yBm6F"><div class="ParticipantsSection-module__participantsListContainer--CuhDN"><a class="prc-Link-Link-85e08" href="/masylum"><img data-component="Avatar" class="Participant-module__GitHubAvatar--QzbCR prc-Avatar-Avatar-ZRS-m" alt="@masylum" width="20" height="20" src="https://avatars.githubusercontent.com/u/28248?s=64&amp;v=4" data-testid="github-avatar" data-hovercard-url="/users/masylum/hovercard" aria-keyshortcuts="Alt+ArrowUp" style="--avatarSize-regular: 20px;"></a><a class="prc-Link-Link-85e08" href="/jmorrell"><img data-component="Avatar" class="Participant-module__GitHubAvatar--QzbCR prc-Avatar-Avatar-ZRS-m" alt="@jmorrell" width="20" height="20" src="https://avatars.githubusercontent.com/u/175496?s=64&amp;u=67732a19ea689bfbf922a11d917aaae341ef5b93&amp;v=4" data-testid="github-avatar" data-hovercard-url="/users/jmorrell/hovercard" aria-keyshortcuts="Alt+ArrowUp" style="--avatarSize-regular: 20px;"></a><a class="prc-Link-Link-85e08" href="/nbbaier"><img data-component="Avatar" class="Participant-module__GitHubAvatar--QzbCR prc-Avatar-Avatar-ZRS-m" alt="@nbbaier" width="20" height="20" src="https://avatars.githubusercontent.com/u/12950157?s=64&amp;u=a75386a5e9d899e27db6e1cb2711c589c016b95d&amp;v=4" data-testid="github-avatar" data-hovercard-url="/users/nbbaier/hovercard" aria-keyshortcuts="Alt+ArrowUp" style="--avatarSize-regular: 20px;"></a></div></div></div></div><h2 class="sr-only prc-Heading-Heading-6CmGO">Issue actions</h2><ul class="prc-ActionList-ActionList-X4RiC OptionsSection-module__ActionListOverrides--M6klF" data-dividers="false" data-variant="full"></ul></div></div></div></div></div></div></div></div>
</react-app>
  </div>
</turbo-frame>
    </main>
  </div>
  </div>
    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-locale="en" data-initial-cookie-consent-allowed="" data-cookie-consent-required="true" data-catalyst=""></ghcc-consent>
  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden="">
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
    </button>
    You can’t perform that action at this time.
  </div>
    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open="">
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog="">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>
    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"></div>
</div>
    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true">Defuddle on Cloudflare Workers · Issue #56 · kepano/defuddle</div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
</body></html>