{"id":13580697,"url":"https://github.com/styfle/links-awakening","last_synced_at":"2025-06-20T15:09:58.320Z","repository":{"id":101264594,"uuid":"577968866","full_name":"styfle/links-awakening","owner":"styfle","description":"🔗 Recursively check a website for broken links","archived":false,"fork":false,"pushed_at":"2023-09-04T12:58:37.000Z","size":93,"stargazers_count":135,"open_issues_count":2,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-14T03:37:38.196Z","etag":null,"topics":["broken-links","check-links","dead-links","hacktoberfest","hyperlinks"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/styfle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":"styfle"}},"created_at":"2022-12-14T00:09:02.000Z","updated_at":"2024-11-25T13:26:20.000Z","dependencies_parsed_at":"2024-01-29T05:17:48.418Z","dependency_job_id":"188995fe-5282-4b21-b4b3-b2775c4b0599","html_url":"https://github.com/styfle/links-awakening","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/styfle/links-awakening","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styfle%2Flinks-awakening","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styfle%2Flinks-awakening/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styfle%2Flinks-awakening/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styfle%2Flinks-awakening/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/styfle","download_url":"https://codeload.github.com/styfle/links-awakening/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styfle%2Flinks-awakening/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259444954,"owners_count":22858548,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["broken-links","check-links","dead-links","hacktoberfest","hyperlinks"],"created_at":"2024-08-01T15:01:54.334Z","updated_at":"2025-06-12T10:09:02.405Z","avatar_url":"https://github.com/styfle.png","language":"TypeScript","funding_links":["https://github.com/sponsors/styfle"],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/styfle/links-awakening\"\u003e\n    \u003cimg alt=\"Photo of Link waking up\" src=\"https://styfle.dev/images/projects/links-awakening.jpg\" width=\"320\" height=\"160\" /\u003e\n\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch3 align=\"center\"\u003eLinks Awakening\u003c/h3\u003e\n\u003cp align=\"center\"\u003eRecursively check a website for broken links.\u003c/p\u003e\n\n## Usage\n\n```sh\nnpx links-awakening 'https://styfle.dev'\n```\n\nOutput\n\n```sh\n✅ https://styfle.dev/\n✅ https://styfle.dev/projects\n✅ https://styfle.dev/blog\n✅ https://styfle.dev/contact\n✅ https://twitter.com/styfle\n✅ https://keybase.io/styfle\n✅ https://github.com/styfle\n✅ https://www.npmjs.com/~styfle\n✅ https://styfle.dev/blog/copee-released\n✅ http://googlechromereleases.blogspot.com/\n✅ https://developers.google.com/web/updates/\n✅ https://developers.google.com/web/updates/2015/04/cut-and-copy-commands\n❌ http://zeroclipboard.org/ (status: 500, referer: https://styfle.dev/blog/copee-released)\n✅ http://styfle.github.io/copee/\n✅ https://styfle.dev/blog/d3js-graph-prod\n❌ https://styfle.dev/slides/d3js.html (status: 404, referer: https://styfle.dev/blog/d3js-graph-prod)\n```\n\n### Programmatic API\n\n```ts\nimport { awaken, type AwakenResult } from 'links-awakening';\n\nconst onAwaken = ({ url, status }: AwakenResult) =\u003e {\n  const icon = status \u003e= 200 \u0026\u0026 status \u003c= 299 ? '✅' : '❌';\n  console.log(`${icon} ${url}`);\n};\n\nconst url = new URL('https://example.com/blog');\n\nconst results = new Map\u003cstring, AwakenResult\u003e();\n\nawait awaken({ url, onAwaken, results });\n\nconsole.log(`Done! Crawled ${results.size} links.`);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstyfle%2Flinks-awakening","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstyfle%2Flinks-awakening","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstyfle%2Flinks-awakening/lists"}