[{"id":"36949709797","type":"WatchEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":177494633,"name":"ChimeraOS/chimeraos","url":"https://api.github.com/repos/ChimeraOS/chimeraos"},"payload":{"action":"started"},"public":true,"created_at":"2024-03-28T00:02:13Z","org":{"id":75816437,"login":"ChimeraOS","gravatar_id":"","url":"https://api.github.com/orgs/ChimeraOS","avatar_url":"https://avatars.githubusercontent.com/u/75816437?"}},{"id":"36796390063","type":"PullRequestEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":43441403,"name":"strapi/strapi","url":"https://api.github.com/repos/strapi/strapi"},"payload":{"action":"opened","number":19897,"pull_request":{"url":"https://api.github.com/repos/strapi/strapi/pulls/19897","id":1786502528,"node_id":"PR_kwDOApbc-85qe92A","html_url":"https://github.com/strapi/strapi/pull/19897","diff_url":"https://github.com/strapi/strapi/pull/19897.diff","patch_url":"https://github.com/strapi/strapi/pull/19897.patch","issue_url":"https://api.github.com/repos/strapi/strapi/issues/19897","number":19897,"state":"open","locked":false,"title":"Fix OpenAPI required fields","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"body":"WIP\r\n\r\nThe openapi.json file generated by Strapi is missing the required fields.\r\n\r\nThe fields in openapi.json are all nullable and they should not.","created_at":"2024-03-22T12:40:33Z","updated_at":"2024-03-22T12:40:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":true,"commits_url":"https://api.github.com/repos/strapi/strapi/pulls/19897/commits","review_comments_url":"https://api.github.com/repos/strapi/strapi/pulls/19897/comments","review_comment_url":"https://api.github.com/repos/strapi/strapi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/strapi/strapi/issues/19897/comments","statuses_url":"https://api.github.com/repos/strapi/strapi/statuses/2862766efb7009e74764fbb413e917f400078894","head":{"label":"tkrotoff:fix-OpenAPI-required","ref":"fix-OpenAPI-required","sha":"2862766efb7009e74764fbb413e917f400078894","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"repo":{"id":775975502,"node_id":"R_kgDOLkByTg","name":"strapi","full_name":"tkrotoff/strapi","private":false,"owner":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tkrotoff/strapi","description":"🚀 Strapi is the leading open-source headless CMS. It’s 100% JavaScript/TypeScript, fully customizable and developer-first.","fork":true,"url":"https://api.github.com/repos/tkrotoff/strapi","forks_url":"https://api.github.com/repos/tkrotoff/strapi/forks","keys_url":"https://api.github.com/repos/tkrotoff/strapi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tkrotoff/strapi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tkrotoff/strapi/teams","hooks_url":"https://api.github.com/repos/tkrotoff/strapi/hooks","issue_events_url":"https://api.github.com/repos/tkrotoff/strapi/issues/events{/number}","events_url":"https://api.github.com/repos/tkrotoff/strapi/events","assignees_url":"https://api.github.com/repos/tkrotoff/strapi/assignees{/user}","branches_url":"https://api.github.com/repos/tkrotoff/strapi/branches{/branch}","tags_url":"https://api.github.com/repos/tkrotoff/strapi/tags","blobs_url":"https://api.github.com/repos/tkrotoff/strapi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tkrotoff/strapi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tkrotoff/strapi/git/refs{/sha}","trees_url":"https://api.github.com/repos/tkrotoff/strapi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tkrotoff/strapi/statuses/{sha}","languages_url":"https://api.github.com/repos/tkrotoff/strapi/languages","stargazers_url":"https://api.github.com/repos/tkrotoff/strapi/stargazers","contributors_url":"https://api.github.com/repos/tkrotoff/strapi/contributors","subscribers_url":"https://api.github.com/repos/tkrotoff/strapi/subscribers","subscription_url":"https://api.github.com/repos/tkrotoff/strapi/subscription","commits_url":"https://api.github.com/repos/tkrotoff/strapi/commits{/sha}","git_commits_url":"https://api.github.com/repos/tkrotoff/strapi/git/commits{/sha}","comments_url":"https://api.github.com/repos/tkrotoff/strapi/comments{/number}","issue_comment_url":"https://api.github.com/repos/tkrotoff/strapi/issues/comments{/number}","contents_url":"https://api.github.com/repos/tkrotoff/strapi/contents/{+path}","compare_url":"https://api.github.com/repos/tkrotoff/strapi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tkrotoff/strapi/merges","archive_url":"https://api.github.com/repos/tkrotoff/strapi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tkrotoff/strapi/downloads","issues_url":"https://api.github.com/repos/tkrotoff/strapi/issues{/number}","pulls_url":"https://api.github.com/repos/tkrotoff/strapi/pulls{/number}","milestones_url":"https://api.github.com/repos/tkrotoff/strapi/milestones{/number}","notifications_url":"https://api.github.com/repos/tkrotoff/strapi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tkrotoff/strapi/labels{/name}","releases_url":"https://api.github.com/repos/tkrotoff/strapi/releases{/id}","deployments_url":"https://api.github.com/repos/tkrotoff/strapi/deployments","created_at":"2024-03-22T12:31:09Z","updated_at":"2024-03-22T12:31:09Z","pushed_at":"2024-03-22T12:38:11Z","git_url":"git://github.com/tkrotoff/strapi.git","ssh_url":"git@github.com:tkrotoff/strapi.git","clone_url":"https://github.com/tkrotoff/strapi.git","svn_url":"https://github.com/tkrotoff/strapi","homepage":"https://strapi.io","size":469783,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"strapi:develop","ref":"develop","sha":"10659c5ef9d5cf87c701241a11dd3b56f13eee47","user":{"login":"strapi","id":19872173,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5ODcyMTcz","avatar_url":"https://avatars.githubusercontent.com/u/19872173?v=4","gravatar_id":"","url":"https://api.github.com/users/strapi","html_url":"https://github.com/strapi","followers_url":"https://api.github.com/users/strapi/followers","following_url":"https://api.github.com/users/strapi/following{/other_user}","gists_url":"https://api.github.com/users/strapi/gists{/gist_id}","starred_url":"https://api.github.com/users/strapi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strapi/subscriptions","organizations_url":"https://api.github.com/users/strapi/orgs","repos_url":"https://api.github.com/users/strapi/repos","events_url":"https://api.github.com/users/strapi/events{/privacy}","received_events_url":"https://api.github.com/users/strapi/received_events","type":"Organization","site_admin":false},"repo":{"id":43441403,"node_id":"MDEwOlJlcG9zaXRvcnk0MzQ0MTQwMw==","name":"strapi","full_name":"strapi/strapi","private":false,"owner":{"login":"strapi","id":19872173,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5ODcyMTcz","avatar_url":"https://avatars.githubusercontent.com/u/19872173?v=4","gravatar_id":"","url":"https://api.github.com/users/strapi","html_url":"https://github.com/strapi","followers_url":"https://api.github.com/users/strapi/followers","following_url":"https://api.github.com/users/strapi/following{/other_user}","gists_url":"https://api.github.com/users/strapi/gists{/gist_id}","starred_url":"https://api.github.com/users/strapi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strapi/subscriptions","organizations_url":"https://api.github.com/users/strapi/orgs","repos_url":"https://api.github.com/users/strapi/repos","events_url":"https://api.github.com/users/strapi/events{/privacy}","received_events_url":"https://api.github.com/users/strapi/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/strapi/strapi","description":"🚀 Strapi is the leading open-source headless CMS. It’s 100% JavaScript/TypeScript, fully customizable and developer-first.","fork":false,"url":"https://api.github.com/repos/strapi/strapi","forks_url":"https://api.github.com/repos/strapi/strapi/forks","keys_url":"https://api.github.com/repos/strapi/strapi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/strapi/strapi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/strapi/strapi/teams","hooks_url":"https://api.github.com/repos/strapi/strapi/hooks","issue_events_url":"https://api.github.com/repos/strapi/strapi/issues/events{/number}","events_url":"https://api.github.com/repos/strapi/strapi/events","assignees_url":"https://api.github.com/repos/strapi/strapi/assignees{/user}","branches_url":"https://api.github.com/repos/strapi/strapi/branches{/branch}","tags_url":"https://api.github.com/repos/strapi/strapi/tags","blobs_url":"https://api.github.com/repos/strapi/strapi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/strapi/strapi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/strapi/strapi/git/refs{/sha}","trees_url":"https://api.github.com/repos/strapi/strapi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/strapi/strapi/statuses/{sha}","languages_url":"https://api.github.com/repos/strapi/strapi/languages","stargazers_url":"https://api.github.com/repos/strapi/strapi/stargazers","contributors_url":"https://api.github.com/repos/strapi/strapi/contributors","subscribers_url":"https://api.github.com/repos/strapi/strapi/subscribers","subscription_url":"https://api.github.com/repos/strapi/strapi/subscription","commits_url":"https://api.github.com/repos/strapi/strapi/commits{/sha}","git_commits_url":"https://api.github.com/repos/strapi/strapi/git/commits{/sha}","comments_url":"https://api.github.com/repos/strapi/strapi/comments{/number}","issue_comment_url":"https://api.github.com/repos/strapi/strapi/issues/comments{/number}","contents_url":"https://api.github.com/repos/strapi/strapi/contents/{+path}","compare_url":"https://api.github.com/repos/strapi/strapi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/strapi/strapi/merges","archive_url":"https://api.github.com/repos/strapi/strapi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/strapi/strapi/downloads","issues_url":"https://api.github.com/repos/strapi/strapi/issues{/number}","pulls_url":"https://api.github.com/repos/strapi/strapi/pulls{/number}","milestones_url":"https://api.github.com/repos/strapi/strapi/milestones{/number}","notifications_url":"https://api.github.com/repos/strapi/strapi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/strapi/strapi/labels{/name}","releases_url":"https://api.github.com/repos/strapi/strapi/releases{/id}","deployments_url":"https://api.github.com/repos/strapi/strapi/deployments","created_at":"2015-09-30T15:34:48Z","updated_at":"2024-03-22T12:30:45Z","pushed_at":"2024-03-22T12:40:34Z","git_url":"git://github.com/strapi/strapi.git","ssh_url":"git@github.com:strapi/strapi.git","clone_url":"https://github.com/strapi/strapi.git","svn_url":"https://github.com/strapi/strapi","homepage":"https://strapi.io","size":470042,"stargazers_count":59459,"watchers_count":59459,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":7426,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":667,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","cms","cms-framework","content-management","content-management-system","customizable","dashboard","graphql","hacktoberfest","headless-cms","jamstack","javascript","koa","koa2","mysql","no-code","nodejs","rest","strapi","typescript"],"visibility":"public","forks":7426,"open_issues":667,"watchers":59459,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/strapi/strapi/pulls/19897"},"html":{"href":"https://github.com/strapi/strapi/pull/19897"},"issue":{"href":"https://api.github.com/repos/strapi/strapi/issues/19897"},"comments":{"href":"https://api.github.com/repos/strapi/strapi/issues/19897/comments"},"review_comments":{"href":"https://api.github.com/repos/strapi/strapi/pulls/19897/comments"},"review_comment":{"href":"https://api.github.com/repos/strapi/strapi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/strapi/strapi/pulls/19897/commits"},"statuses":{"href":"https://api.github.com/repos/strapi/strapi/statuses/2862766efb7009e74764fbb413e917f400078894"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null,"merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":true,"commits":1,"additions":21,"deletions":0,"changed_files":1}},"public":true,"created_at":"2024-03-22T12:40:34Z","org":{"id":19872173,"login":"strapi","gravatar_id":"","url":"https://api.github.com/orgs/strapi","avatar_url":"https://avatars.githubusercontent.com/u/19872173?"}},{"id":"36796318374","type":"CreateEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":775975502,"name":"tkrotoff/strapi","url":"https://api.github.com/repos/tkrotoff/strapi"},"payload":{"ref":"fix-OpenAPI-required","ref_type":"branch","master_branch":"develop","description":"🚀 Strapi is the leading open-source headless CMS. It’s 100% JavaScript/TypeScript, fully customizable and developer-first.","pusher_type":"user"},"public":true,"created_at":"2024-03-22T12:38:12Z"},{"id":"36796109811","type":"ForkEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":43441403,"name":"strapi/strapi","url":"https://api.github.com/repos/strapi/strapi"},"payload":{"forkee":{"id":775975502,"node_id":"R_kgDOLkByTg","name":"strapi","full_name":"tkrotoff/strapi","private":false,"owner":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tkrotoff/strapi","description":"🚀 Strapi is the leading open-source headless CMS. It’s 100% JavaScript/TypeScript, fully customizable and developer-first.","fork":true,"url":"https://api.github.com/repos/tkrotoff/strapi","forks_url":"https://api.github.com/repos/tkrotoff/strapi/forks","keys_url":"https://api.github.com/repos/tkrotoff/strapi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tkrotoff/strapi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tkrotoff/strapi/teams","hooks_url":"https://api.github.com/repos/tkrotoff/strapi/hooks","issue_events_url":"https://api.github.com/repos/tkrotoff/strapi/issues/events{/number}","events_url":"https://api.github.com/repos/tkrotoff/strapi/events","assignees_url":"https://api.github.com/repos/tkrotoff/strapi/assignees{/user}","branches_url":"https://api.github.com/repos/tkrotoff/strapi/branches{/branch}","tags_url":"https://api.github.com/repos/tkrotoff/strapi/tags","blobs_url":"https://api.github.com/repos/tkrotoff/strapi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tkrotoff/strapi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tkrotoff/strapi/git/refs{/sha}","trees_url":"https://api.github.com/repos/tkrotoff/strapi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tkrotoff/strapi/statuses/{sha}","languages_url":"https://api.github.com/repos/tkrotoff/strapi/languages","stargazers_url":"https://api.github.com/repos/tkrotoff/strapi/stargazers","contributors_url":"https://api.github.com/repos/tkrotoff/strapi/contributors","subscribers_url":"https://api.github.com/repos/tkrotoff/strapi/subscribers","subscription_url":"https://api.github.com/repos/tkrotoff/strapi/subscription","commits_url":"https://api.github.com/repos/tkrotoff/strapi/commits{/sha}","git_commits_url":"https://api.github.com/repos/tkrotoff/strapi/git/commits{/sha}","comments_url":"https://api.github.com/repos/tkrotoff/strapi/comments{/number}","issue_comment_url":"https://api.github.com/repos/tkrotoff/strapi/issues/comments{/number}","contents_url":"https://api.github.com/repos/tkrotoff/strapi/contents/{+path}","compare_url":"https://api.github.com/repos/tkrotoff/strapi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tkrotoff/strapi/merges","archive_url":"https://api.github.com/repos/tkrotoff/strapi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tkrotoff/strapi/downloads","issues_url":"https://api.github.com/repos/tkrotoff/strapi/issues{/number}","pulls_url":"https://api.github.com/repos/tkrotoff/strapi/pulls{/number}","milestones_url":"https://api.github.com/repos/tkrotoff/strapi/milestones{/number}","notifications_url":"https://api.github.com/repos/tkrotoff/strapi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tkrotoff/strapi/labels{/name}","releases_url":"https://api.github.com/repos/tkrotoff/strapi/releases{/id}","deployments_url":"https://api.github.com/repos/tkrotoff/strapi/deployments","created_at":"2024-03-22T12:31:09Z","updated_at":"2024-03-22T12:31:09Z","pushed_at":"2024-03-22T11:34:33Z","git_url":"git://github.com/tkrotoff/strapi.git","ssh_url":"git@github.com:tkrotoff/strapi.git","clone_url":"https://github.com/tkrotoff/strapi.git","svn_url":"https://github.com/tkrotoff/strapi","homepage":"https://strapi.io","size":469783,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"master","public":true}},"public":true,"created_at":"2024-03-22T12:31:10Z","org":{"id":19872173,"login":"strapi","gravatar_id":"","url":"https://api.github.com/orgs/strapi","avatar_url":"https://avatars.githubusercontent.com/u/19872173?"}},{"id":"36565539401","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":756521227,"name":"dcpesses/vite-react-ts-gh","url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/12","repository_url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh","labels_url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/12/labels{/name}","comments_url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/12/comments","events_url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/12/events","html_url":"https://github.com/dcpesses/vite-react-ts-gh/pull/12","id":2187036550,"node_id":"PR_kwDOLReZC85pqtT2","number":12,"title":"Mock Window Location in Tests","user":{"login":"dcpesses","id":184237,"node_id":"MDQ6VXNlcjE4NDIzNw==","avatar_url":"https://avatars.githubusercontent.com/u/184237?v=4","gravatar_id":"","url":"https://api.github.com/users/dcpesses","html_url":"https://github.com/dcpesses","followers_url":"https://api.github.com/users/dcpesses/followers","following_url":"https://api.github.com/users/dcpesses/following{/other_user}","gists_url":"https://api.github.com/users/dcpesses/gists{/gist_id}","starred_url":"https://api.github.com/users/dcpesses/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcpesses/subscriptions","organizations_url":"https://api.github.com/users/dcpesses/orgs","repos_url":"https://api.github.com/users/dcpesses/repos","events_url":"https://api.github.com/users/dcpesses/events{/privacy}","received_events_url":"https://api.github.com/users/dcpesses/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2024-03-14T18:41:17Z","updated_at":"2024-03-14T20:44:14Z","closed_at":"2024-03-14T19:17:42Z","author_association":"OWNER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/pulls/12","html_url":"https://github.com/dcpesses/vite-react-ts-gh/pull/12","diff_url":"https://github.com/dcpesses/vite-react-ts-gh/pull/12.diff","patch_url":"https://github.com/dcpesses/vite-react-ts-gh/pull/12.patch","merged_at":"2024-03-14T19:17:42Z"},"body":"Adds the ability to mock location and history in your unit-tests using [mockWindowLocation](https://gist.github.com/tkrotoff/52f4a29e919445d6e97f9a9e44ada449). (thx @tkrotoff!)\r\n\r\n**Why?**\r\n\r\nWhile we're using [`react-router-dom`](https://reactrouter.com/), there are some situations where its routing components (e.g. [`Link`](https://reactrouter.com/en/main/components/link), [`Navigate`](https://reactrouter.com/en/main/components/navigate), etc) can't (or shouldn't) be used. In those scenarios, we need a way to inspect and evaluate any mutations to window.location between tests, especially since we use HashRouter. Otherwise, your tests may fail with an error similar to the following output:\r\n\r\n```shell\r\n[FAIL] src/api/twitch.spec.ts > TwitchApi > reset > should reset class to initial state\r\nTypeError: Cannot set property hash of [object URL] which has only a getter\r\n ❯ TwitchApi.reset src/api/twitch/index.js:501:26\r\n 499| this.resetState();\r\n 500| this.resetLocalStorageItems();\r\n 501| window.location.hash = '';\r\n | ^\r\n 502| };\r\n 503| \r\n ❯ src/api/twitch.spec.ts:615:17\r\n```\r\n\r\n**Aren't there already simpler ways to stub out the location in tests?**\r\n\r\nYes, but with caveats. You could modify the code to use the `assign` method if it's your own code, but that may not work with any dependencies without monkey patching them. Sometimes you can get away with a function like [safelyStubAndThenCleanup](https://github.com/jestjs/jest/issues/5124#issuecomment-641628284) or other methods listed on that [Jest issue](https://github.com/jestjs/jest/issues/5124), but I've personally found many of those workarounds to be problematic at best when used with Vitest. mockWindowLocation feels like a more robust and thorough solution that automatically works with both Jest & Vitest without rewriting code.\r\n","reactions":{"url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/12/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/12/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/comments/1998453568","html_url":"https://github.com/dcpesses/vite-react-ts-gh/pull/12#issuecomment-1998453568","issue_url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/12","id":1998453568,"node_id":"IC_kwDOLReZC853HftA","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-03-14T20:44:13Z","updated_at":"2024-03-14T20:44:13Z","author_association":"NONE","body":"You're welcome, glad my code and code from others help :-)","reactions":{"url":"https://api.github.com/repos/dcpesses/vite-react-ts-gh/issues/comments/1998453568/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-03-14T20:44:14Z"},{"id":"36133277125","type":"IssuesEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":144774125,"name":"brightcove/react-player-loader","url":"https://api.github.com/repos/brightcove/react-player-loader"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/brightcove/react-player-loader/issues/122","repository_url":"https://api.github.com/repos/brightcove/react-player-loader","labels_url":"https://api.github.com/repos/brightcove/react-player-loader/issues/122/labels{/name}","comments_url":"https://api.github.com/repos/brightcove/react-player-loader/issues/122/comments","events_url":"https://api.github.com/repos/brightcove/react-player-loader/issues/122/events","html_url":"https://github.com/brightcove/react-player-loader/issues/122","id":2161655774,"node_id":"I_kwDOCKET7c6A2D_e","number":122,"title":"Do not inject external scripts","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-02-29T16:33:39Z","updated_at":"2024-02-29T16:33:39Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"We use npm package `@brightcove/react-player-loader` and it injects some external scripts we have no control to.\r\n\r\nThe browser console is riddled with logs:\r\n\r\n\r\n\r\n\r\n\r\nThe file is located here: https://players.brightcove.net/3415345270001/WsNdDuZOos_default/index.min.js\r\n\r\n\r\n\r\n\r\n","reactions":{"url":"https://api.github.com/repos/brightcove/react-player-loader/issues/122/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/brightcove/react-player-loader/issues/122/timeline","performed_via_github_app":null,"state_reason":null}},"public":true,"created_at":"2024-02-29T16:33:41Z","org":{"id":277032,"login":"brightcove","gravatar_id":"","url":"https://api.github.com/orgs/brightcove","avatar_url":"https://avatars.githubusercontent.com/u/277032?"}},{"id":"36085858502","type":"IssuesEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":577291158,"name":"Maggi64/moderndash","url":"https://api.github.com/repos/Maggi64/moderndash"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/Maggi64/moderndash/issues/161","repository_url":"https://api.github.com/repos/Maggi64/moderndash","labels_url":"https://api.github.com/repos/Maggi64/moderndash/issues/161/labels{/name}","comments_url":"https://api.github.com/repos/Maggi64/moderndash/issues/161/comments","events_url":"https://api.github.com/repos/Maggi64/moderndash/issues/161/events","html_url":"https://github.com/Maggi64/moderndash/issues/161","id":2158806798,"node_id":"I_kwDOImjDls6ArMcO","number":161,"title":"Deprecate array `group`","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-02-28T12:04:07Z","updated_at":"2024-02-28T12:04:07Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"JS now natively features [Object.groupBy()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy)\r\n\r\nNot yet supported by all browsers: https://caniuse.com/mdn-javascript_builtins_object_groupby\r\n\r\nThere is a polyfill available in core-js: https://github.com/zloirock/core-js#array-grouping","reactions":{"url":"https://api.github.com/repos/Maggi64/moderndash/issues/161/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/Maggi64/moderndash/issues/161/timeline","performed_via_github_app":null,"state_reason":null}},"public":true,"created_at":"2024-02-28T12:04:08Z"},{"id":"35982101592","type":"WatchEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":454359710,"name":"cirruslabs/tart","url":"https://api.github.com/repos/cirruslabs/tart"},"payload":{"action":"started"},"public":true,"created_at":"2024-02-25T09:40:35Z","org":{"id":29414678,"login":"cirruslabs","gravatar_id":"","url":"https://api.github.com/orgs/cirruslabs","avatar_url":"https://avatars.githubusercontent.com/u/29414678?"}},{"id":"35744703923","type":"WatchEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":266198366,"name":"Dremora/eslint-plugin-no-type-assertion","url":"https://api.github.com/repos/Dremora/eslint-plugin-no-type-assertion"},"payload":{"action":"started"},"public":true,"created_at":"2024-02-16T16:42:58Z"},{"id":"35739912435","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":15062869,"name":"jestjs/jest","url":"https://api.github.com/repos/jestjs/jest"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/jestjs/jest/issues/10419","repository_url":"https://api.github.com/repos/jestjs/jest","labels_url":"https://api.github.com/repos/jestjs/jest/issues/10419/labels{/name}","comments_url":"https://api.github.com/repos/jestjs/jest/issues/10419/comments","events_url":"https://api.github.com/repos/jestjs/jest/issues/10419/events","html_url":"https://github.com/jestjs/jest/issues/10419","id":680161410,"node_id":"MDU6SXNzdWU2ODAxNjE0MTA=","number":10419,"title":"jest.resetAllMocks also resets manual mocks","user":{"login":"nilsm","id":137836,"node_id":"MDQ6VXNlcjEzNzgzNg==","avatar_url":"https://avatars.githubusercontent.com/u/137836?v=4","gravatar_id":"","url":"https://api.github.com/users/nilsm","html_url":"https://github.com/nilsm","followers_url":"https://api.github.com/users/nilsm/followers","following_url":"https://api.github.com/users/nilsm/following{/other_user}","gists_url":"https://api.github.com/users/nilsm/gists{/gist_id}","starred_url":"https://api.github.com/users/nilsm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nilsm/subscriptions","organizations_url":"https://api.github.com/users/nilsm/orgs","repos_url":"https://api.github.com/users/nilsm/repos","events_url":"https://api.github.com/users/nilsm/events{/privacy}","received_events_url":"https://api.github.com/users/nilsm/received_events","type":"User","site_admin":false},"labels":[{"id":843800282,"node_id":"MDU6TGFiZWw4NDM4MDAyODI=","url":"https://api.github.com/repos/jestjs/jest/labels/Needs%20Triage","name":"Needs Triage","color":"006b75","default":false,"description":""},{"id":1277038136,"node_id":"MDU6TGFiZWwxMjc3MDM4MTM2","url":"https://api.github.com/repos/jestjs/jest/labels/Bug%20Report","name":"Bug Report","color":"e0e0e0","default":false,"description":""},{"id":3870353576,"node_id":"LA_kwDOAOXXVc7msOio","url":"https://api.github.com/repos/jestjs/jest/labels/Stale","name":"Stale","color":"B7BC28","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":7,"created_at":"2020-08-17T11:26:53Z","updated_at":"2024-02-16T14:07:02Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"\r\n\r\n## 🐛 Bug Report\r\nCalling jest.resetAllMocks() resets manual mocks created via a _ _ mocks _ _ folder. I'm calling this a bug because it means there is no way to return to the original, manually mocked implementation. The manual mock is wiped out by resetAllMocks(); It also means that you can't easily mix and match manual mocks and the mockResolvedValue, mockValue, mockImplementation, etc. methods.\r\n\r\n## To Reproduce\r\n\r\nUse a manual mock, and call `jest.resetAllMocks()`\r\n\r\n## Expected behavior\r\n\r\nI expect the manual mock to be restored to its manually mocked state, and not to a blank mock.\r\n\r\n## Link to repl or repo (highly encouraged)\r\n\r\nI couldn't create a _ _ mocks _ _ folder in repl.it, can upload a repo later if required.\r\n\r\n## envinfo\r\n\r\n```\r\nSystem:\r\n OS: macOS 10.15.5\r\n CPU: (4) x64 Intel(R) Core(TM) i5-5287U CPU @ 2.90GHz\r\n Binaries:\r\n Node: 12.18.1 - ~/.nvm/versions/node/v12.18.1/bin/node\r\n npm: 6.14.7 - ~/.nvm/versions/node/v12.18.1/bin/npm\r\n npmPackages:\r\n jest: ^26.2.2 => 26.3.0 \r\n```\r\n","reactions":{"url":"https://api.github.com/repos/jestjs/jest/issues/10419/reactions","total_count":29,"+1":29,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jestjs/jest/issues/10419/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/jestjs/jest/issues/comments/1948448529","html_url":"https://github.com/jestjs/jest/issues/10419#issuecomment-1948448529","issue_url":"https://api.github.com/repos/jestjs/jest/issues/10419","id":1948448529,"node_id":"IC_kwDOAOXXVc50IvcR","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-02-16T14:07:00Z","updated_at":"2024-02-16T14:07:00Z","author_association":"CONTRIBUTOR","body":"Please don't close 🙏 (I hate those bots)","reactions":{"url":"https://api.github.com/repos/jestjs/jest/issues/comments/1948448529/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-02-16T14:07:02Z","org":{"id":103283236,"login":"jestjs","gravatar_id":"","url":"https://api.github.com/orgs/jestjs","avatar_url":"https://avatars.githubusercontent.com/u/103283236?"}},{"id":"35554721275","type":"PushEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":606894248,"name":"tkrotoff/moderndash","url":"https://api.github.com/repos/tkrotoff/moderndash"},"payload":{"repository_id":606894248,"push_id":17024151203,"size":2,"distinct_size":2,"ref":"refs/heads/truncate","head":"68a6401d22b1da4ef99c96e25c0dadba38171626","before":"486ff23b711ec29cbaebbcab1d324cf5da43a58d","commits":[{"sha":"204700425318e26063d9a1a53da2169ceab69544","author":{"email":"tkrotoff@gmail.com","name":"Tanguy Krotoff"},"message":"New truncate function","distinct":true,"url":"https://api.github.com/repos/tkrotoff/moderndash/commits/204700425318e26063d9a1a53da2169ceab69544"},{"sha":"68a6401d22b1da4ef99c96e25c0dadba38171626","author":{"email":"tkrotoff@gmail.com","name":"Tanguy Krotoff"},"message":"docs(changeset): Add `truncate` function","distinct":true,"url":"https://api.github.com/repos/tkrotoff/moderndash/commits/68a6401d22b1da4ef99c96e25c0dadba38171626"}]},"public":true,"created_at":"2024-02-09T16:58:35Z"},{"id":"35553523572","type":"PushEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":606894248,"name":"tkrotoff/moderndash","url":"https://api.github.com/repos/tkrotoff/moderndash"},"payload":{"repository_id":606894248,"push_id":17023546201,"size":1,"distinct_size":1,"ref":"refs/heads/truncate","head":"486ff23b711ec29cbaebbcab1d324cf5da43a58d","before":"12f1dcf9e24d88356415e9a9b1947a5c123e2ba6","commits":[{"sha":"486ff23b711ec29cbaebbcab1d324cf5da43a58d","author":{"email":"tkrotoff@gmail.com","name":"Tanguy Krotoff"},"message":"docs(changeset): Add `truncate` function","distinct":true,"url":"https://api.github.com/repos/tkrotoff/moderndash/commits/486ff23b711ec29cbaebbcab1d324cf5da43a58d"}]},"public":true,"created_at":"2024-02-09T16:15:27Z"},{"id":"35553009881","type":"PullRequestEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":577291158,"name":"Maggi64/moderndash","url":"https://api.github.com/repos/Maggi64/moderndash"},"payload":{"action":"opened","number":156,"pull_request":{"url":"https://api.github.com/repos/Maggi64/moderndash/pulls/156","id":1719606654,"node_id":"PR_kwDOImjDls5mfx1-","html_url":"https://github.com/Maggi64/moderndash/pull/156","diff_url":"https://github.com/Maggi64/moderndash/pull/156.diff","patch_url":"https://github.com/Maggi64/moderndash/pull/156.patch","issue_url":"https://api.github.com/repos/Maggi64/moderndash/issues/156","number":156,"state":"open","locked":false,"title":"New truncate function","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"body":"See https://github.com/Maggi64/moderndash/issues/155","created_at":"2024-02-09T15:58:03Z","updated_at":"2024-02-09T15:58:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/Maggi64/moderndash/pulls/156/commits","review_comments_url":"https://api.github.com/repos/Maggi64/moderndash/pulls/156/comments","review_comment_url":"https://api.github.com/repos/Maggi64/moderndash/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Maggi64/moderndash/issues/156/comments","statuses_url":"https://api.github.com/repos/Maggi64/moderndash/statuses/12f1dcf9e24d88356415e9a9b1947a5c123e2ba6","head":{"label":"tkrotoff:truncate","ref":"truncate","sha":"12f1dcf9e24d88356415e9a9b1947a5c123e2ba6","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"repo":{"id":606894248,"node_id":"R_kgDOJCx4qA","name":"moderndash","full_name":"tkrotoff/moderndash","private":false,"owner":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tkrotoff/moderndash","description":"A Typescript-First utility library inspired by Lodash. Optimized for modern browsers.","fork":true,"url":"https://api.github.com/repos/tkrotoff/moderndash","forks_url":"https://api.github.com/repos/tkrotoff/moderndash/forks","keys_url":"https://api.github.com/repos/tkrotoff/moderndash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tkrotoff/moderndash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tkrotoff/moderndash/teams","hooks_url":"https://api.github.com/repos/tkrotoff/moderndash/hooks","issue_events_url":"https://api.github.com/repos/tkrotoff/moderndash/issues/events{/number}","events_url":"https://api.github.com/repos/tkrotoff/moderndash/events","assignees_url":"https://api.github.com/repos/tkrotoff/moderndash/assignees{/user}","branches_url":"https://api.github.com/repos/tkrotoff/moderndash/branches{/branch}","tags_url":"https://api.github.com/repos/tkrotoff/moderndash/tags","blobs_url":"https://api.github.com/repos/tkrotoff/moderndash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tkrotoff/moderndash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tkrotoff/moderndash/git/refs{/sha}","trees_url":"https://api.github.com/repos/tkrotoff/moderndash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tkrotoff/moderndash/statuses/{sha}","languages_url":"https://api.github.com/repos/tkrotoff/moderndash/languages","stargazers_url":"https://api.github.com/repos/tkrotoff/moderndash/stargazers","contributors_url":"https://api.github.com/repos/tkrotoff/moderndash/contributors","subscribers_url":"https://api.github.com/repos/tkrotoff/moderndash/subscribers","subscription_url":"https://api.github.com/repos/tkrotoff/moderndash/subscription","commits_url":"https://api.github.com/repos/tkrotoff/moderndash/commits{/sha}","git_commits_url":"https://api.github.com/repos/tkrotoff/moderndash/git/commits{/sha}","comments_url":"https://api.github.com/repos/tkrotoff/moderndash/comments{/number}","issue_comment_url":"https://api.github.com/repos/tkrotoff/moderndash/issues/comments{/number}","contents_url":"https://api.github.com/repos/tkrotoff/moderndash/contents/{+path}","compare_url":"https://api.github.com/repos/tkrotoff/moderndash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tkrotoff/moderndash/merges","archive_url":"https://api.github.com/repos/tkrotoff/moderndash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tkrotoff/moderndash/downloads","issues_url":"https://api.github.com/repos/tkrotoff/moderndash/issues{/number}","pulls_url":"https://api.github.com/repos/tkrotoff/moderndash/pulls{/number}","milestones_url":"https://api.github.com/repos/tkrotoff/moderndash/milestones{/number}","notifications_url":"https://api.github.com/repos/tkrotoff/moderndash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tkrotoff/moderndash/labels{/name}","releases_url":"https://api.github.com/repos/tkrotoff/moderndash/releases{/id}","deployments_url":"https://api.github.com/repos/tkrotoff/moderndash/deployments","created_at":"2023-02-26T21:29:55Z","updated_at":"2023-04-09T11:33:17Z","pushed_at":"2024-02-09T15:57:02Z","git_url":"git://github.com/tkrotoff/moderndash.git","ssh_url":"git@github.com:tkrotoff/moderndash.git","clone_url":"https://github.com/tkrotoff/moderndash.git","svn_url":"https://github.com/tkrotoff/moderndash","homepage":"https://moderndash.io","size":1813,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main"}},"base":{"label":"Maggi64:main","ref":"main","sha":"17a5f328412312e721d30476467c13834dba7bea","user":{"login":"Maggi64","id":20517052,"node_id":"MDQ6VXNlcjIwNTE3MDUy","avatar_url":"https://avatars.githubusercontent.com/u/20517052?v=4","gravatar_id":"","url":"https://api.github.com/users/Maggi64","html_url":"https://github.com/Maggi64","followers_url":"https://api.github.com/users/Maggi64/followers","following_url":"https://api.github.com/users/Maggi64/following{/other_user}","gists_url":"https://api.github.com/users/Maggi64/gists{/gist_id}","starred_url":"https://api.github.com/users/Maggi64/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Maggi64/subscriptions","organizations_url":"https://api.github.com/users/Maggi64/orgs","repos_url":"https://api.github.com/users/Maggi64/repos","events_url":"https://api.github.com/users/Maggi64/events{/privacy}","received_events_url":"https://api.github.com/users/Maggi64/received_events","type":"User","site_admin":false},"repo":{"id":577291158,"node_id":"R_kgDOImjDlg","name":"moderndash","full_name":"Maggi64/moderndash","private":false,"owner":{"login":"Maggi64","id":20517052,"node_id":"MDQ6VXNlcjIwNTE3MDUy","avatar_url":"https://avatars.githubusercontent.com/u/20517052?v=4","gravatar_id":"","url":"https://api.github.com/users/Maggi64","html_url":"https://github.com/Maggi64","followers_url":"https://api.github.com/users/Maggi64/followers","following_url":"https://api.github.com/users/Maggi64/following{/other_user}","gists_url":"https://api.github.com/users/Maggi64/gists{/gist_id}","starred_url":"https://api.github.com/users/Maggi64/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Maggi64/subscriptions","organizations_url":"https://api.github.com/users/Maggi64/orgs","repos_url":"https://api.github.com/users/Maggi64/repos","events_url":"https://api.github.com/users/Maggi64/events{/privacy}","received_events_url":"https://api.github.com/users/Maggi64/received_events","type":"User","site_admin":false},"html_url":"https://github.com/Maggi64/moderndash","description":"A Typescript-First utility library inspired by Lodash. Optimized for modern browsers.","fork":false,"url":"https://api.github.com/repos/Maggi64/moderndash","forks_url":"https://api.github.com/repos/Maggi64/moderndash/forks","keys_url":"https://api.github.com/repos/Maggi64/moderndash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Maggi64/moderndash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Maggi64/moderndash/teams","hooks_url":"https://api.github.com/repos/Maggi64/moderndash/hooks","issue_events_url":"https://api.github.com/repos/Maggi64/moderndash/issues/events{/number}","events_url":"https://api.github.com/repos/Maggi64/moderndash/events","assignees_url":"https://api.github.com/repos/Maggi64/moderndash/assignees{/user}","branches_url":"https://api.github.com/repos/Maggi64/moderndash/branches{/branch}","tags_url":"https://api.github.com/repos/Maggi64/moderndash/tags","blobs_url":"https://api.github.com/repos/Maggi64/moderndash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Maggi64/moderndash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Maggi64/moderndash/git/refs{/sha}","trees_url":"https://api.github.com/repos/Maggi64/moderndash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Maggi64/moderndash/statuses/{sha}","languages_url":"https://api.github.com/repos/Maggi64/moderndash/languages","stargazers_url":"https://api.github.com/repos/Maggi64/moderndash/stargazers","contributors_url":"https://api.github.com/repos/Maggi64/moderndash/contributors","subscribers_url":"https://api.github.com/repos/Maggi64/moderndash/subscribers","subscription_url":"https://api.github.com/repos/Maggi64/moderndash/subscription","commits_url":"https://api.github.com/repos/Maggi64/moderndash/commits{/sha}","git_commits_url":"https://api.github.com/repos/Maggi64/moderndash/git/commits{/sha}","comments_url":"https://api.github.com/repos/Maggi64/moderndash/comments{/number}","issue_comment_url":"https://api.github.com/repos/Maggi64/moderndash/issues/comments{/number}","contents_url":"https://api.github.com/repos/Maggi64/moderndash/contents/{+path}","compare_url":"https://api.github.com/repos/Maggi64/moderndash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Maggi64/moderndash/merges","archive_url":"https://api.github.com/repos/Maggi64/moderndash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Maggi64/moderndash/downloads","issues_url":"https://api.github.com/repos/Maggi64/moderndash/issues{/number}","pulls_url":"https://api.github.com/repos/Maggi64/moderndash/pulls{/number}","milestones_url":"https://api.github.com/repos/Maggi64/moderndash/milestones{/number}","notifications_url":"https://api.github.com/repos/Maggi64/moderndash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Maggi64/moderndash/labels{/name}","releases_url":"https://api.github.com/repos/Maggi64/moderndash/releases{/id}","deployments_url":"https://api.github.com/repos/Maggi64/moderndash/deployments","created_at":"2022-12-12T12:16:04Z","updated_at":"2024-02-09T10:05:58Z","pushed_at":"2024-02-09T15:58:04Z","git_url":"git://github.com/Maggi64/moderndash.git","ssh_url":"git@github.com:Maggi64/moderndash.git","clone_url":"https://github.com/Maggi64/moderndash.git","svn_url":"https://github.com/Maggi64/moderndash","homepage":"https://moderndash.io","size":2337,"stargazers_count":255,"watchers_count":255,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"has_discussions":false,"forks_count":10,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":16,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["functions","javascript","typescript","utility"],"visibility":"public","forks":10,"open_issues":16,"watchers":255,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/Maggi64/moderndash/pulls/156"},"html":{"href":"https://github.com/Maggi64/moderndash/pull/156"},"issue":{"href":"https://api.github.com/repos/Maggi64/moderndash/issues/156"},"comments":{"href":"https://api.github.com/repos/Maggi64/moderndash/issues/156/comments"},"review_comments":{"href":"https://api.github.com/repos/Maggi64/moderndash/pulls/156/comments"},"review_comment":{"href":"https://api.github.com/repos/Maggi64/moderndash/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Maggi64/moderndash/pulls/156/commits"},"statuses":{"href":"https://api.github.com/repos/Maggi64/moderndash/statuses/12f1dcf9e24d88356415e9a9b1947a5c123e2ba6"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":true,"commits":1,"additions":137,"deletions":0,"changed_files":4}},"public":true,"created_at":"2024-02-09T15:58:05Z"},{"id":"35552984913","type":"CreateEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":606894248,"name":"tkrotoff/moderndash","url":"https://api.github.com/repos/tkrotoff/moderndash"},"payload":{"ref":"truncate","ref_type":"branch","master_branch":"main","description":"A Typescript-First utility library inspired by Lodash. Optimized for modern browsers.","pusher_type":"user"},"public":true,"created_at":"2024-02-09T15:57:14Z"},{"id":"35519509364","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":577291158,"name":"Maggi64/moderndash","url":"https://api.github.com/repos/Maggi64/moderndash"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/Maggi64/moderndash/issues/155","repository_url":"https://api.github.com/repos/Maggi64/moderndash","labels_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/labels{/name}","comments_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/comments","events_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/events","html_url":"https://github.com/Maggi64/moderndash/issues/155","id":2124105457,"node_id":"I_kwDOImjDls5-m0bx","number":155,"title":"Feature request - `truncate`","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-02-07T23:49:58Z","updated_at":"2024-02-08T15:09:20Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"Lodash features `truncate` function: https://lodash.com/docs/4.17.15#truncate\r\n\r\nStack Overflow link to truncate function: https://stackoverflow.com/questions/1199352/smart-way-to-truncate-long-strings","reactions":{"url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/Maggi64/moderndash/issues/comments/1934320386","html_url":"https://github.com/Maggi64/moderndash/issues/155#issuecomment-1934320386","issue_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155","id":1934320386,"node_id":"IC_kwDOImjDls5zS2MC","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-02-08T15:09:19Z","updated_at":"2024-02-08T15:09:19Z","author_association":"CONTRIBUTOR","body":"Proposed implementation:\r\n\r\n```TS\r\n// File truncate.ts\r\n\r\ntype Options = {\r\n /**\r\n * The maximum string length.\r\n *\r\n * Default: 30\r\n */\r\n length?: number;\r\n\r\n /**\r\n * The string to indicate text is omitted.\r\n *\r\n * Also named [ellipsis](https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow)\r\n *\r\n * Default: \"...\", you might want to use \"…\" (… U+02026) instead\r\n */\r\n omission?: string;\r\n\r\n /**\r\n * The separator pattern to truncate to.\r\n *\r\n * Default: none\r\n */\r\n separator?: string;\r\n};\r\n\r\n/**\r\n * Truncates a string if it's longer than the given maximum length.\r\n * The last characters of the truncated string are replaced with the omission\r\n * string which defaults to \"...\".\r\n *\r\n * @param str The string to truncate\r\n * @param options The options object\r\n * @returns The truncated string\r\n */\r\nexport function truncate(str: string, options?: Options) {\r\n // https://stackoverflow.com/q/1199352\r\n // https://github.com/Maggi64/moderndash/issues/155\r\n // https://lodash.com/docs/4.17.15#truncate\r\n\r\n const length = options?.length ?? 30;\r\n const omission = options?.omission ?? '...';\r\n const separator = options?.separator;\r\n\r\n if (str.length <= length) {\r\n return str;\r\n }\r\n\r\n let maxLength = length - omission.length;\r\n if (maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n const subString = str.slice(\r\n 0,\r\n // FYI .slice() is OK if maxLength > text.length\r\n maxLength\r\n );\r\n\r\n return (separator ? subString.slice(0, subString.lastIndexOf(separator)) : subString) + omission;\r\n}\r\n```\r\n\r\nIt passes all tests from Lodash:\r\n\r\n```TS\r\n// File truncate.test.ts\r\n\r\nimport { truncate } from './truncate';\r\n\r\n// Copy-pasted and adapted from https://github.com/lodash/lodash/blob/c7c70a7da5172111b99bb45e45532ed034d7b5b9/test/truncate.spec.js\r\n// See also https://github.com/lodash/lodash/pull/5815\r\n\r\nconst string = 'hi-diddly-ho there, neighborino';\r\n\r\nit('should use a default `length` of `30`', () => {\r\n expect(truncate(string)).toBe('hi-diddly-ho there, neighbo...');\r\n});\r\n\r\nit('should not truncate if `string` is <= `length`', () => {\r\n expect(truncate(string, { length: string.length })).toBe(string);\r\n expect(truncate(string, { length: string.length + 2 })).toBe(string);\r\n});\r\n\r\nit('should truncate string the given length', () => {\r\n expect(truncate(string, { length: 24 })).toBe('hi-diddly-ho there, n...');\r\n});\r\n\r\nit('should support a `omission` option', () => {\r\n expect(truncate(string, { omission: ' [...]' })).toBe('hi-diddly-ho there, neig [...]');\r\n});\r\n\r\nit('should support empty `omission` option', () => {\r\n expect(truncate(string, { omission: '' })).toBe('hi-diddly-ho there, neighborin');\r\n});\r\n\r\nit('should support a `length` option', () => {\r\n expect(truncate(string, { length: 4 })).toBe('h...');\r\n});\r\n\r\nit('should support a `separator` option', () => {\r\n expect(truncate(string, { length: 24, separator: ' ' })).toBe('hi-diddly-ho there,...');\r\n});\r\n\r\nit('should treat negative `length` as `0`', () => {\r\n [0, -2].forEach(length => {\r\n expect(truncate(string, { length })).toBe('...');\r\n });\r\n});\r\n\r\nit('should work as an iteratee for methods like `_.map`', () => {\r\n const actual = [string, string, string].map(str => truncate(str));\r\n const truncated = 'hi-diddly-ho there, neighbo...';\r\n\r\n expect(actual).toEqual([truncated, truncated, truncated]);\r\n});\r\n```\r\n","reactions":{"url":"https://api.github.com/repos/Maggi64/moderndash/issues/comments/1934320386/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-02-08T15:09:20Z"},{"id":"35519014876","type":"PullRequestEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":3955647,"name":"lodash/lodash","url":"https://api.github.com/repos/lodash/lodash"},"payload":{"action":"opened","number":5815,"pull_request":{"url":"https://api.github.com/repos/lodash/lodash/pulls/5815","id":1717763400,"node_id":"PR_kwDOADxbv85mYv1I","html_url":"https://github.com/lodash/lodash/pull/5815","diff_url":"https://github.com/lodash/lodash/pull/5815.diff","patch_url":"https://github.com/lodash/lodash/pull/5815.patch","issue_url":"https://api.github.com/repos/lodash/lodash/issues/5815","number":5815,"state":"open","locked":false,"title":"Fix truncate tests","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"body":"Small fix:\r\n`expect(truncate(string), 'hi-diddly-ho there).toBe(neighbo...')`\r\n=>\r\n`expect(truncate(string)).toBe(\"hi-diddly-ho there, neighbo...\")`","created_at":"2024-02-08T14:55:30Z","updated_at":"2024-02-08T14:55:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/lodash/lodash/pulls/5815/commits","review_comments_url":"https://api.github.com/repos/lodash/lodash/pulls/5815/comments","review_comment_url":"https://api.github.com/repos/lodash/lodash/pulls/comments{/number}","comments_url":"https://api.github.com/repos/lodash/lodash/issues/5815/comments","statuses_url":"https://api.github.com/repos/lodash/lodash/statuses/c8623d6ad95bb8a6f5ab008171d2d2a21b308e99","head":{"label":"tkrotoff:fix-truncate-tests","ref":"fix-truncate-tests","sha":"c8623d6ad95bb8a6f5ab008171d2d2a21b308e99","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"repo":{"id":754393704,"node_id":"R_kgDOLPciaA","name":"lodash","full_name":"tkrotoff/lodash","private":false,"owner":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tkrotoff/lodash","description":"A modern JavaScript utility library delivering modularity, performance, & extras.","fork":true,"url":"https://api.github.com/repos/tkrotoff/lodash","forks_url":"https://api.github.com/repos/tkrotoff/lodash/forks","keys_url":"https://api.github.com/repos/tkrotoff/lodash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tkrotoff/lodash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tkrotoff/lodash/teams","hooks_url":"https://api.github.com/repos/tkrotoff/lodash/hooks","issue_events_url":"https://api.github.com/repos/tkrotoff/lodash/issues/events{/number}","events_url":"https://api.github.com/repos/tkrotoff/lodash/events","assignees_url":"https://api.github.com/repos/tkrotoff/lodash/assignees{/user}","branches_url":"https://api.github.com/repos/tkrotoff/lodash/branches{/branch}","tags_url":"https://api.github.com/repos/tkrotoff/lodash/tags","blobs_url":"https://api.github.com/repos/tkrotoff/lodash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tkrotoff/lodash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tkrotoff/lodash/git/refs{/sha}","trees_url":"https://api.github.com/repos/tkrotoff/lodash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tkrotoff/lodash/statuses/{sha}","languages_url":"https://api.github.com/repos/tkrotoff/lodash/languages","stargazers_url":"https://api.github.com/repos/tkrotoff/lodash/stargazers","contributors_url":"https://api.github.com/repos/tkrotoff/lodash/contributors","subscribers_url":"https://api.github.com/repos/tkrotoff/lodash/subscribers","subscription_url":"https://api.github.com/repos/tkrotoff/lodash/subscription","commits_url":"https://api.github.com/repos/tkrotoff/lodash/commits{/sha}","git_commits_url":"https://api.github.com/repos/tkrotoff/lodash/git/commits{/sha}","comments_url":"https://api.github.com/repos/tkrotoff/lodash/comments{/number}","issue_comment_url":"https://api.github.com/repos/tkrotoff/lodash/issues/comments{/number}","contents_url":"https://api.github.com/repos/tkrotoff/lodash/contents/{+path}","compare_url":"https://api.github.com/repos/tkrotoff/lodash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tkrotoff/lodash/merges","archive_url":"https://api.github.com/repos/tkrotoff/lodash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tkrotoff/lodash/downloads","issues_url":"https://api.github.com/repos/tkrotoff/lodash/issues{/number}","pulls_url":"https://api.github.com/repos/tkrotoff/lodash/pulls{/number}","milestones_url":"https://api.github.com/repos/tkrotoff/lodash/milestones{/number}","notifications_url":"https://api.github.com/repos/tkrotoff/lodash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tkrotoff/lodash/labels{/name}","releases_url":"https://api.github.com/repos/tkrotoff/lodash/releases{/id}","deployments_url":"https://api.github.com/repos/tkrotoff/lodash/deployments","created_at":"2024-02-08T00:26:54Z","updated_at":"2024-02-08T00:26:55Z","pushed_at":"2024-02-08T14:54:38Z","git_url":"git://github.com/tkrotoff/lodash.git","ssh_url":"git@github.com:tkrotoff/lodash.git","clone_url":"https://github.com/tkrotoff/lodash.git","svn_url":"https://github.com/tkrotoff/lodash","homepage":"https://lodash.com/","size":48151,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main"}},"base":{"label":"lodash:main","ref":"main","sha":"c7c70a7da5172111b99bb45e45532ed034d7b5b9","user":{"login":"lodash","id":2565403,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1NjU0MDM=","avatar_url":"https://avatars.githubusercontent.com/u/2565403?v=4","gravatar_id":"","url":"https://api.github.com/users/lodash","html_url":"https://github.com/lodash","followers_url":"https://api.github.com/users/lodash/followers","following_url":"https://api.github.com/users/lodash/following{/other_user}","gists_url":"https://api.github.com/users/lodash/gists{/gist_id}","starred_url":"https://api.github.com/users/lodash/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lodash/subscriptions","organizations_url":"https://api.github.com/users/lodash/orgs","repos_url":"https://api.github.com/users/lodash/repos","events_url":"https://api.github.com/users/lodash/events{/privacy}","received_events_url":"https://api.github.com/users/lodash/received_events","type":"Organization","site_admin":false},"repo":{"id":3955647,"node_id":"MDEwOlJlcG9zaXRvcnkzOTU1NjQ3","name":"lodash","full_name":"lodash/lodash","private":false,"owner":{"login":"lodash","id":2565403,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1NjU0MDM=","avatar_url":"https://avatars.githubusercontent.com/u/2565403?v=4","gravatar_id":"","url":"https://api.github.com/users/lodash","html_url":"https://github.com/lodash","followers_url":"https://api.github.com/users/lodash/followers","following_url":"https://api.github.com/users/lodash/following{/other_user}","gists_url":"https://api.github.com/users/lodash/gists{/gist_id}","starred_url":"https://api.github.com/users/lodash/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lodash/subscriptions","organizations_url":"https://api.github.com/users/lodash/orgs","repos_url":"https://api.github.com/users/lodash/repos","events_url":"https://api.github.com/users/lodash/events{/privacy}","received_events_url":"https://api.github.com/users/lodash/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/lodash/lodash","description":"A modern JavaScript utility library delivering modularity, performance, & extras.","fork":false,"url":"https://api.github.com/repos/lodash/lodash","forks_url":"https://api.github.com/repos/lodash/lodash/forks","keys_url":"https://api.github.com/repos/lodash/lodash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lodash/lodash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lodash/lodash/teams","hooks_url":"https://api.github.com/repos/lodash/lodash/hooks","issue_events_url":"https://api.github.com/repos/lodash/lodash/issues/events{/number}","events_url":"https://api.github.com/repos/lodash/lodash/events","assignees_url":"https://api.github.com/repos/lodash/lodash/assignees{/user}","branches_url":"https://api.github.com/repos/lodash/lodash/branches{/branch}","tags_url":"https://api.github.com/repos/lodash/lodash/tags","blobs_url":"https://api.github.com/repos/lodash/lodash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lodash/lodash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lodash/lodash/git/refs{/sha}","trees_url":"https://api.github.com/repos/lodash/lodash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lodash/lodash/statuses/{sha}","languages_url":"https://api.github.com/repos/lodash/lodash/languages","stargazers_url":"https://api.github.com/repos/lodash/lodash/stargazers","contributors_url":"https://api.github.com/repos/lodash/lodash/contributors","subscribers_url":"https://api.github.com/repos/lodash/lodash/subscribers","subscription_url":"https://api.github.com/repos/lodash/lodash/subscription","commits_url":"https://api.github.com/repos/lodash/lodash/commits{/sha}","git_commits_url":"https://api.github.com/repos/lodash/lodash/git/commits{/sha}","comments_url":"https://api.github.com/repos/lodash/lodash/comments{/number}","issue_comment_url":"https://api.github.com/repos/lodash/lodash/issues/comments{/number}","contents_url":"https://api.github.com/repos/lodash/lodash/contents/{+path}","compare_url":"https://api.github.com/repos/lodash/lodash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lodash/lodash/merges","archive_url":"https://api.github.com/repos/lodash/lodash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lodash/lodash/downloads","issues_url":"https://api.github.com/repos/lodash/lodash/issues{/number}","pulls_url":"https://api.github.com/repos/lodash/lodash/pulls{/number}","milestones_url":"https://api.github.com/repos/lodash/lodash/milestones{/number}","notifications_url":"https://api.github.com/repos/lodash/lodash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lodash/lodash/labels{/name}","releases_url":"https://api.github.com/repos/lodash/lodash/releases{/id}","deployments_url":"https://api.github.com/repos/lodash/lodash/deployments","created_at":"2012-04-07T04:11:46Z","updated_at":"2024-02-08T14:47:47Z","pushed_at":"2024-02-08T14:55:30Z","git_url":"git://github.com/lodash/lodash.git","ssh_url":"git@github.com:lodash/lodash.git","clone_url":"https://github.com/lodash/lodash.git","svn_url":"https://github.com/lodash/lodash","homepage":"https://lodash.com/","size":48151,"stargazers_count":58455,"watchers_count":58455,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":true,"forks_count":7202,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":55,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["javascript","lodash","modules","utilities"],"visibility":"public","forks":7202,"open_issues":55,"watchers":58455,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/lodash/lodash/pulls/5815"},"html":{"href":"https://github.com/lodash/lodash/pull/5815"},"issue":{"href":"https://api.github.com/repos/lodash/lodash/issues/5815"},"comments":{"href":"https://api.github.com/repos/lodash/lodash/issues/5815/comments"},"review_comments":{"href":"https://api.github.com/repos/lodash/lodash/pulls/5815/comments"},"review_comment":{"href":"https://api.github.com/repos/lodash/lodash/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/lodash/lodash/pulls/5815/commits"},"statuses":{"href":"https://api.github.com/repos/lodash/lodash/statuses/c8623d6ad95bb8a6f5ab008171d2d2a21b308e99"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null,"merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":true,"commits":1,"additions":3,"deletions":3,"changed_files":1}},"public":true,"created_at":"2024-02-08T14:55:32Z","org":{"id":2565403,"login":"lodash","gravatar_id":"","url":"https://api.github.com/orgs/lodash","avatar_url":"https://avatars.githubusercontent.com/u/2565403?"}},{"id":"35518983330","type":"PushEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":754393704,"name":"tkrotoff/lodash","url":"https://api.github.com/repos/tkrotoff/lodash"},"payload":{"repository_id":754393704,"push_id":17005778727,"size":1,"distinct_size":1,"ref":"refs/heads/fix-truncate-tests","head":"c8623d6ad95bb8a6f5ab008171d2d2a21b308e99","before":"946786e3481ec3a055a19155e09018764d554eda","commits":[{"sha":"c8623d6ad95bb8a6f5ab008171d2d2a21b308e99","author":{"email":"tkrotoff@gmail.com","name":"Tanguy Krotoff"},"message":"Fix truncate tests","distinct":true,"url":"https://api.github.com/repos/tkrotoff/lodash/commits/c8623d6ad95bb8a6f5ab008171d2d2a21b308e99"}]},"public":true,"created_at":"2024-02-08T14:54:39Z"},{"id":"35518813511","type":"CreateEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":754393704,"name":"tkrotoff/lodash","url":"https://api.github.com/repos/tkrotoff/lodash"},"payload":{"ref":"fix-truncate-tests","ref_type":"branch","master_branch":"main","description":"A modern JavaScript utility library delivering modularity, performance, & extras.","pusher_type":"user"},"public":true,"created_at":"2024-02-08T14:49:57Z"},{"id":"35507343316","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":15062869,"name":"jestjs/jest","url":"https://api.github.com/repos/jestjs/jest"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/jestjs/jest/issues/14743","repository_url":"https://api.github.com/repos/jestjs/jest","labels_url":"https://api.github.com/repos/jestjs/jest/issues/14743/labels{/name}","comments_url":"https://api.github.com/repos/jestjs/jest/issues/14743/comments","events_url":"https://api.github.com/repos/jestjs/jest/issues/14743/events","html_url":"https://github.com/jestjs/jest/issues/14743","id":2030344046,"node_id":"I_kwDOAOXXVc55BJdu","number":14743,"title":"[Bug]: JSDOM environment does not detect open handles","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[{"id":843800282,"node_id":"MDU6TGFiZWw4NDM4MDAyODI=","url":"https://api.github.com/repos/jestjs/jest/labels/Needs%20Triage","name":"Needs Triage","color":"006b75","default":false,"description":""},{"id":1277038136,"node_id":"MDU6TGFiZWwxMjc3MDM4MTM2","url":"https://api.github.com/repos/jestjs/jest/labels/Bug%20Report","name":"Bug Report","color":"e0e0e0","default":false,"description":""},{"id":3870353576,"node_id":"LA_kwDOAOXXVc7msOio","url":"https://api.github.com/repos/jestjs/jest/labels/Stale","name":"Stale","color":"B7BC28","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2023-12-07T09:54:16Z","updated_at":"2024-02-08T08:36:05Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"### Version\r\n\r\n29.7.0\r\n\r\n### Steps to reproduce\r\n\r\nJest node environment detects open handles and bad things that happen after tests are done.\r\nThe tests below will fail:\r\n\r\n```TypeScript\r\ntest(\"error after tests are done\", () => {\r\n setTimeout(() => {\r\n throw new Error(\"after tests are done\");\r\n }, 100);\r\n});\r\n\r\ntest(\"open handles\", () => {\r\n setInterval(() => {}, 100);\r\n});\r\n\r\ntest(\"console usage after tests are done\", () => {\r\n setTimeout(() => {\r\n console.info(\"after tests are done\");\r\n }, 100);\r\n});\r\n```\r\n\r\nUnfortunately, when using JSDOM environment, these tests do not fail.\r\n\r\n### Expected behavior\r\n\r\nAll Jest environments should detect open handles and bad things that happen after tests are done.\r\n\r\n### Actual behavior\r\n\r\nJest JSDOM environment does not detect open handles and bad things that happen after tests are done.\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Environment\r\n\r\n```shell\r\nTried with Jest 29.7.0 and 30.0.0-alpha.2 + Node 20.10.0\r\n\r\nSystem:\r\n OS: macOS 14.1.2\r\n CPU: (10) arm64 Apple M1 Pro\r\n Binaries:\r\n Node: 20.10.0 - /opt/homebrew/opt/node@20/bin/node\r\n npm: 10.2.3 - /opt/homebrew/opt/node@20/bin/npm\r\n pnpm: 8.11.0 - /opt/homebrew/bin/pnpm\r\n npmPackages:\r\n jest: 30.0.0-alpha.2 => 30.0.0-alpha.2\r\n```\r\n","reactions":{"url":"https://api.github.com/repos/jestjs/jest/issues/14743/reactions","total_count":2,"+1":2,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jestjs/jest/issues/14743/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/jestjs/jest/issues/comments/1933590095","html_url":"https://github.com/jestjs/jest/issues/14743#issuecomment-1933590095","issue_url":"https://api.github.com/repos/jestjs/jest/issues/14743","id":1933590095,"node_id":"IC_kwDOAOXXVc5zQD5P","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-02-08T08:36:05Z","updated_at":"2024-02-08T08:36:05Z","author_association":"CONTRIBUTOR","body":"I hate bots","reactions":{"url":"https://api.github.com/repos/jestjs/jest/issues/comments/1933590095/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-02-08T08:36:06Z","org":{"id":103283236,"login":"jestjs","gravatar_id":"","url":"https://api.github.com/orgs/jestjs","avatar_url":"https://avatars.githubusercontent.com/u/103283236?"}},{"id":"35499108834","type":"ForkEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":3955647,"name":"lodash/lodash","url":"https://api.github.com/repos/lodash/lodash"},"payload":{"forkee":{"id":754393704,"node_id":"R_kgDOLPciaA","name":"lodash","full_name":"tkrotoff/lodash","private":false,"owner":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tkrotoff/lodash","description":"A modern JavaScript utility library delivering modularity, performance, & extras.","fork":true,"url":"https://api.github.com/repos/tkrotoff/lodash","forks_url":"https://api.github.com/repos/tkrotoff/lodash/forks","keys_url":"https://api.github.com/repos/tkrotoff/lodash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tkrotoff/lodash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tkrotoff/lodash/teams","hooks_url":"https://api.github.com/repos/tkrotoff/lodash/hooks","issue_events_url":"https://api.github.com/repos/tkrotoff/lodash/issues/events{/number}","events_url":"https://api.github.com/repos/tkrotoff/lodash/events","assignees_url":"https://api.github.com/repos/tkrotoff/lodash/assignees{/user}","branches_url":"https://api.github.com/repos/tkrotoff/lodash/branches{/branch}","tags_url":"https://api.github.com/repos/tkrotoff/lodash/tags","blobs_url":"https://api.github.com/repos/tkrotoff/lodash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tkrotoff/lodash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tkrotoff/lodash/git/refs{/sha}","trees_url":"https://api.github.com/repos/tkrotoff/lodash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tkrotoff/lodash/statuses/{sha}","languages_url":"https://api.github.com/repos/tkrotoff/lodash/languages","stargazers_url":"https://api.github.com/repos/tkrotoff/lodash/stargazers","contributors_url":"https://api.github.com/repos/tkrotoff/lodash/contributors","subscribers_url":"https://api.github.com/repos/tkrotoff/lodash/subscribers","subscription_url":"https://api.github.com/repos/tkrotoff/lodash/subscription","commits_url":"https://api.github.com/repos/tkrotoff/lodash/commits{/sha}","git_commits_url":"https://api.github.com/repos/tkrotoff/lodash/git/commits{/sha}","comments_url":"https://api.github.com/repos/tkrotoff/lodash/comments{/number}","issue_comment_url":"https://api.github.com/repos/tkrotoff/lodash/issues/comments{/number}","contents_url":"https://api.github.com/repos/tkrotoff/lodash/contents/{+path}","compare_url":"https://api.github.com/repos/tkrotoff/lodash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tkrotoff/lodash/merges","archive_url":"https://api.github.com/repos/tkrotoff/lodash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tkrotoff/lodash/downloads","issues_url":"https://api.github.com/repos/tkrotoff/lodash/issues{/number}","pulls_url":"https://api.github.com/repos/tkrotoff/lodash/pulls{/number}","milestones_url":"https://api.github.com/repos/tkrotoff/lodash/milestones{/number}","notifications_url":"https://api.github.com/repos/tkrotoff/lodash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tkrotoff/lodash/labels{/name}","releases_url":"https://api.github.com/repos/tkrotoff/lodash/releases{/id}","deployments_url":"https://api.github.com/repos/tkrotoff/lodash/deployments","created_at":"2024-02-08T00:26:54Z","updated_at":"2024-02-08T00:26:55Z","pushed_at":"2024-02-04T22:25:23Z","git_url":"git://github.com/tkrotoff/lodash.git","ssh_url":"git@github.com:tkrotoff/lodash.git","clone_url":"https://github.com/tkrotoff/lodash.git","svn_url":"https://github.com/tkrotoff/lodash","homepage":"https://lodash.com/","size":48151,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"master","public":true}},"public":true,"created_at":"2024-02-08T00:26:55Z","org":{"id":2565403,"login":"lodash","gravatar_id":"","url":"https://api.github.com/orgs/lodash","avatar_url":"https://avatars.githubusercontent.com/u/2565403?"}},{"id":"35498484092","type":"IssuesEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":577291158,"name":"Maggi64/moderndash","url":"https://api.github.com/repos/Maggi64/moderndash"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/Maggi64/moderndash/issues/155","repository_url":"https://api.github.com/repos/Maggi64/moderndash","labels_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/labels{/name}","comments_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/comments","events_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/events","html_url":"https://github.com/Maggi64/moderndash/issues/155","id":2124105457,"node_id":"I_kwDOImjDls5-m0bx","number":155,"title":"Feature request - `truncate`","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-02-07T23:49:58Z","updated_at":"2024-02-07T23:49:58Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"Lodash features `truncate` function: https://lodash.com/docs/4.17.15#truncate\r\n\r\nStack Overflow link to truncate function: https://stackoverflow.com/questions/1199352/smart-way-to-truncate-long-strings","reactions":{"url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/Maggi64/moderndash/issues/155/timeline","performed_via_github_app":null,"state_reason":null}},"public":true,"created_at":"2024-02-07T23:49:59Z"},{"id":"35352651282","type":"IssuesEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":144774125,"name":"brightcove/react-player-loader","url":"https://api.github.com/repos/brightcove/react-player-loader"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/brightcove/react-player-loader/issues/120","repository_url":"https://api.github.com/repos/brightcove/react-player-loader","labels_url":"https://api.github.com/repos/brightcove/react-player-loader/issues/120/labels{/name}","comments_url":"https://api.github.com/repos/brightcove/react-player-loader/issues/120/comments","events_url":"https://api.github.com/repos/brightcove/react-player-loader/issues/120/events","html_url":"https://github.com/brightcove/react-player-loader/issues/120","id":2115152942,"node_id":"I_kwDOCKET7c5-Eqwu","number":120,"title":"Add types for TypeScript","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-02-02T15:11:41Z","updated_at":"2024-02-02T15:11:41Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"This package doesn't have any types :-/","reactions":{"url":"https://api.github.com/repos/brightcove/react-player-loader/issues/120/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/brightcove/react-player-loader/issues/120/timeline","performed_via_github_app":null,"state_reason":null}},"public":true,"created_at":"2024-02-02T15:11:42Z","org":{"id":277032,"login":"brightcove","gravatar_id":"","url":"https://api.github.com/orgs/brightcove","avatar_url":"https://avatars.githubusercontent.com/u/277032?"}},{"id":"34753277015","type":"PushEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":742027756,"name":"tkrotoff/node-redlock","url":"https://api.github.com/repos/tkrotoff/node-redlock"},"payload":{"repository_id":742027756,"push_id":16600001494,"size":2,"distinct_size":2,"ref":"refs/heads/main","head":"eba9390d376d9542d6d2c9b9b173b920c6b5eed0","before":"51388139356efa700f9dd4616e822eb377a47c95","commits":[{"sha":"56a8f0da138ce7c8c71637fd03ff7fdc114e4ad9","author":{"email":"tkrotoff@gmail.com","name":"Tanguy Krotoff"},"message":"Use npm instead of yarn so no need to install anything beside Node.js","distinct":true,"url":"https://api.github.com/repos/tkrotoff/node-redlock/commits/56a8f0da138ce7c8c71637fd03ff7fdc114e4ad9"},{"sha":"eba9390d376d9542d6d2c9b9b173b920c6b5eed0","author":{"email":"tkrotoff@gmail.com","name":"Tanguy Krotoff"},"message":"Publish dist directory","distinct":true,"url":"https://api.github.com/repos/tkrotoff/node-redlock/commits/eba9390d376d9542d6d2c9b9b173b920c6b5eed0"}]},"public":true,"created_at":"2024-01-11T16:08:22Z"},{"id":"34753079745","type":"ForkEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":36997334,"name":"mike-marcacci/node-redlock","url":"https://api.github.com/repos/mike-marcacci/node-redlock"},"payload":{"forkee":{"id":742027756,"node_id":"R_kgDOLDpx7A","name":"node-redlock","full_name":"tkrotoff/node-redlock","private":false,"owner":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tkrotoff/node-redlock","description":"A node.js redlock implementation for distributed, highly-available redis locks","fork":true,"url":"https://api.github.com/repos/tkrotoff/node-redlock","forks_url":"https://api.github.com/repos/tkrotoff/node-redlock/forks","keys_url":"https://api.github.com/repos/tkrotoff/node-redlock/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tkrotoff/node-redlock/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tkrotoff/node-redlock/teams","hooks_url":"https://api.github.com/repos/tkrotoff/node-redlock/hooks","issue_events_url":"https://api.github.com/repos/tkrotoff/node-redlock/issues/events{/number}","events_url":"https://api.github.com/repos/tkrotoff/node-redlock/events","assignees_url":"https://api.github.com/repos/tkrotoff/node-redlock/assignees{/user}","branches_url":"https://api.github.com/repos/tkrotoff/node-redlock/branches{/branch}","tags_url":"https://api.github.com/repos/tkrotoff/node-redlock/tags","blobs_url":"https://api.github.com/repos/tkrotoff/node-redlock/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tkrotoff/node-redlock/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tkrotoff/node-redlock/git/refs{/sha}","trees_url":"https://api.github.com/repos/tkrotoff/node-redlock/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tkrotoff/node-redlock/statuses/{sha}","languages_url":"https://api.github.com/repos/tkrotoff/node-redlock/languages","stargazers_url":"https://api.github.com/repos/tkrotoff/node-redlock/stargazers","contributors_url":"https://api.github.com/repos/tkrotoff/node-redlock/contributors","subscribers_url":"https://api.github.com/repos/tkrotoff/node-redlock/subscribers","subscription_url":"https://api.github.com/repos/tkrotoff/node-redlock/subscription","commits_url":"https://api.github.com/repos/tkrotoff/node-redlock/commits{/sha}","git_commits_url":"https://api.github.com/repos/tkrotoff/node-redlock/git/commits{/sha}","comments_url":"https://api.github.com/repos/tkrotoff/node-redlock/comments{/number}","issue_comment_url":"https://api.github.com/repos/tkrotoff/node-redlock/issues/comments{/number}","contents_url":"https://api.github.com/repos/tkrotoff/node-redlock/contents/{+path}","compare_url":"https://api.github.com/repos/tkrotoff/node-redlock/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tkrotoff/node-redlock/merges","archive_url":"https://api.github.com/repos/tkrotoff/node-redlock/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tkrotoff/node-redlock/downloads","issues_url":"https://api.github.com/repos/tkrotoff/node-redlock/issues{/number}","pulls_url":"https://api.github.com/repos/tkrotoff/node-redlock/pulls{/number}","milestones_url":"https://api.github.com/repos/tkrotoff/node-redlock/milestones{/number}","notifications_url":"https://api.github.com/repos/tkrotoff/node-redlock/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tkrotoff/node-redlock/labels{/name}","releases_url":"https://api.github.com/repos/tkrotoff/node-redlock/releases{/id}","deployments_url":"https://api.github.com/repos/tkrotoff/node-redlock/deployments","created_at":"2024-01-11T16:02:00Z","updated_at":"2024-01-11T16:02:00Z","pushed_at":"2023-10-23T13:46:27Z","git_url":"git://github.com/tkrotoff/node-redlock.git","ssh_url":"git@github.com:tkrotoff/node-redlock.git","clone_url":"https://github.com/tkrotoff/node-redlock.git","svn_url":"https://github.com/tkrotoff/node-redlock","homepage":"","size":200,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"master","public":true}},"public":true,"created_at":"2024-01-11T16:02:01Z"},{"id":"34668408262","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":15062869,"name":"jestjs/jest","url":"https://api.github.com/repos/jestjs/jest"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/jestjs/jest/issues/14743","repository_url":"https://api.github.com/repos/jestjs/jest","labels_url":"https://api.github.com/repos/jestjs/jest/issues/14743/labels{/name}","comments_url":"https://api.github.com/repos/jestjs/jest/issues/14743/comments","events_url":"https://api.github.com/repos/jestjs/jest/issues/14743/events","html_url":"https://github.com/jestjs/jest/issues/14743","id":2030344046,"node_id":"I_kwDOAOXXVc55BJdu","number":14743,"title":"[Bug]: JSDOM environment does not detect open handles","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[{"id":843800282,"node_id":"MDU6TGFiZWw4NDM4MDAyODI=","url":"https://api.github.com/repos/jestjs/jest/labels/Needs%20Triage","name":"Needs Triage","color":"006b75","default":false,"description":""},{"id":1277038136,"node_id":"MDU6TGFiZWwxMjc3MDM4MTM2","url":"https://api.github.com/repos/jestjs/jest/labels/Bug%20Report","name":"Bug Report","color":"e0e0e0","default":false,"description":""},{"id":3870353576,"node_id":"LA_kwDOAOXXVc7msOio","url":"https://api.github.com/repos/jestjs/jest/labels/Stale","name":"Stale","color":"B7BC28","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2023-12-07T09:54:16Z","updated_at":"2024-01-09T03:42:12Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"### Version\r\n\r\n29.7.0\r\n\r\n### Steps to reproduce\r\n\r\nJest node environment detects open handles and bad things that happen after tests are done.\r\nThe tests below will fail:\r\n\r\n```TypeScript\r\ntest(\"error after tests are done\", () => {\r\n setTimeout(() => {\r\n throw new Error(\"after tests are done\");\r\n }, 100);\r\n});\r\n\r\ntest(\"open handles\", () => {\r\n setInterval(() => {}, 100);\r\n});\r\n\r\ntest(\"console usage after tests are done\", () => {\r\n setTimeout(() => {\r\n console.info(\"after tests are done\");\r\n }, 100);\r\n});\r\n```\r\n\r\nUnfortunately, when using JSDOM environment, these tests do not fail.\r\n\r\n### Expected behavior\r\n\r\nAll Jest environments should detect open handles and bad things that happen after tests are done.\r\n\r\n### Actual behavior\r\n\r\nJest JSDOM environment does not detect open handles and bad things that happen after tests are done.\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Environment\r\n\r\n```shell\r\nTried with Jest 29.7.0 and 30.0.0-alpha.2 + Node 20.10.0\r\n\r\nSystem:\r\n OS: macOS 14.1.2\r\n CPU: (10) arm64 Apple M1 Pro\r\n Binaries:\r\n Node: 20.10.0 - /opt/homebrew/opt/node@20/bin/node\r\n npm: 10.2.3 - /opt/homebrew/opt/node@20/bin/npm\r\n pnpm: 8.11.0 - /opt/homebrew/bin/pnpm\r\n npmPackages:\r\n jest: 30.0.0-alpha.2 => 30.0.0-alpha.2\r\n```\r\n","reactions":{"url":"https://api.github.com/repos/jestjs/jest/issues/14743/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jestjs/jest/issues/14743/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/jestjs/jest/issues/comments/1882361446","html_url":"https://github.com/jestjs/jest/issues/14743#issuecomment-1882361446","issue_url":"https://api.github.com/repos/jestjs/jest/issues/14743","id":1882361446,"node_id":"IC_kwDOAOXXVc5wMo5m","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-01-09T03:42:11Z","updated_at":"2024-01-09T03:42:11Z","author_association":"CONTRIBUTOR","body":"I hate bots ","reactions":{"url":"https://api.github.com/repos/jestjs/jest/issues/comments/1882361446/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-09T03:42:12Z","org":{"id":103283236,"login":"jestjs","gravatar_id":"","url":"https://api.github.com/orgs/jestjs","avatar_url":"https://avatars.githubusercontent.com/u/103283236?"}},{"id":"34579082756","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":545508308,"name":"webpro/knip","url":"https://api.github.com/repos/webpro/knip"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/webpro/knip/issues/420","repository_url":"https://api.github.com/repos/webpro/knip","labels_url":"https://api.github.com/repos/webpro/knip/issues/420/labels{/name}","comments_url":"https://api.github.com/repos/webpro/knip/issues/420/comments","events_url":"https://api.github.com/repos/webpro/knip/issues/420/events","html_url":"https://github.com/webpro/knip/issues/420","id":2063006347,"node_id":"I_kwDOIIPL1M569vqL","number":420,"title":"Allow for tsconfig.json with comments","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[{"id":4613850857,"node_id":"LA_kwDOIIPL1M8AAAABEwHG6Q","url":"https://api.github.com/repos/webpro/knip/labels/bug","name":"bug","color":"d73a4a","default":true,"description":"Something isn't working"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":7,"created_at":"2024-01-02T22:02:02Z","updated_at":"2024-01-04T17:33:52Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"Comments in tsconfig.json are allowed since 2015: https://github.com/microsoft/TypeScript/pull/5450\r\n\r\n\r\n\r\n`tsc --init` command line generates a tsconfig.json file with comments:
\r\n\r\n```JS\r\n{\r\n \"compilerOptions\": {\r\n /* Visit https://aka.ms/tsconfig to read more about this file */\r\n\r\n /* Projects */\r\n // \"incremental\": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */\r\n // \"composite\": true, /* Enable constraints that allow a TypeScript project to be used with project references. */\r\n // \"tsBuildInfoFile\": \"./.tsbuildinfo\", /* Specify the path to .tsbuildinfo incremental compilation file. */\r\n // \"disableSourceOfProjectReferenceRedirect\": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */\r\n // \"disableSolutionSearching\": true, /* Opt a project out of multi-project reference checking when editing. */\r\n // \"disableReferencedProjectLoad\": true, /* Reduce the number of projects loaded automatically by TypeScript. */\r\n\r\n /* Language and Environment */\r\n \"target\": \"es2016\", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */\r\n // \"lib\": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */\r\n // \"jsx\": \"preserve\", /* Specify what JSX code is generated. */\r\n // \"experimentalDecorators\": true, /* Enable experimental support for legacy experimental decorators. */\r\n // \"emitDecoratorMetadata\": true, /* Emit design-type metadata for decorated declarations in source files. */\r\n // \"jsxFactory\": \"\", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */\r\n // \"jsxFragmentFactory\": \"\", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */\r\n // \"jsxImportSource\": \"\", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */\r\n // \"reactNamespace\": \"\", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */\r\n // \"noLib\": true, /* Disable including any library files, including the default lib.d.ts. */\r\n // \"useDefineForClassFields\": true, /* Emit ECMAScript-standard-compliant class fields. */\r\n // \"moduleDetection\": \"auto\", /* Control what method is used to detect module-format JS files. */\r\n\r\n /* Modules */\r\n \"module\": \"commonjs\", /* Specify what module code is generated. */\r\n // \"rootDir\": \"./\", /* Specify the root folder within your source files. */\r\n // \"moduleResolution\": \"node10\", /* Specify how TypeScript looks up a file from a given module specifier. */\r\n // \"baseUrl\": \"./\", /* Specify the base directory to resolve non-relative module names. */\r\n // \"paths\": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */\r\n // \"rootDirs\": [], /* Allow multiple folders to be treated as one when resolving modules. */\r\n // \"typeRoots\": [], /* Specify multiple folders that act like './node_modules/@types'. */\r\n // \"types\": [], /* Specify type package names to be included without being referenced in a source file. */\r\n // \"allowUmdGlobalAccess\": true, /* Allow accessing UMD globals from modules. */\r\n // \"moduleSuffixes\": [], /* List of file name suffixes to search when resolving a module. */\r\n // \"allowImportingTsExtensions\": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */\r\n // \"resolvePackageJsonExports\": true, /* Use the package.json 'exports' field when resolving package imports. */\r\n // \"resolvePackageJsonImports\": true, /* Use the package.json 'imports' field when resolving imports. */\r\n // \"customConditions\": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */\r\n // \"resolveJsonModule\": true, /* Enable importing .json files. */\r\n // \"allowArbitraryExtensions\": true, /* Enable importing files with any extension, provided a declaration file is present. */\r\n // \"noResolve\": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */\r\n\r\n /* JavaScript Support */\r\n // \"allowJs\": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */\r\n // \"checkJs\": true, /* Enable error reporting in type-checked JavaScript files. */\r\n // \"maxNodeModuleJsDepth\": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */\r\n\r\n /* Emit */\r\n // \"declaration\": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */\r\n // \"declarationMap\": true, /* Create sourcemaps for d.ts files. */\r\n // \"emitDeclarationOnly\": true, /* Only output d.ts files and not JavaScript files. */\r\n // \"sourceMap\": true, /* Create source map files for emitted JavaScript files. */\r\n // \"inlineSourceMap\": true, /* Include sourcemap files inside the emitted JavaScript. */\r\n // \"outFile\": \"./\", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */\r\n // \"outDir\": \"./\", /* Specify an output folder for all emitted files. */\r\n // \"removeComments\": true, /* Disable emitting comments. */\r\n // \"noEmit\": true, /* Disable emitting files from a compilation. */\r\n // \"importHelpers\": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */\r\n // \"importsNotUsedAsValues\": \"remove\", /* Specify emit/checking behavior for imports that are only used for types. */\r\n // \"downlevelIteration\": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */\r\n // \"sourceRoot\": \"\", /* Specify the root path for debuggers to find the reference source code. */\r\n // \"mapRoot\": \"\", /* Specify the location where debugger should locate map files instead of generated locations. */\r\n // \"inlineSources\": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */\r\n // \"emitBOM\": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */\r\n // \"newLine\": \"crlf\", /* Set the newline character for emitting files. */\r\n // \"stripInternal\": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */\r\n // \"noEmitHelpers\": true, /* Disable generating custom helper functions like '__extends' in compiled output. */\r\n // \"noEmitOnError\": true, /* Disable emitting files if any type checking errors are reported. */\r\n // \"preserveConstEnums\": true, /* Disable erasing 'const enum' declarations in generated code. */\r\n // \"declarationDir\": \"./\", /* Specify the output directory for generated declaration files. */\r\n // \"preserveValueImports\": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */\r\n\r\n /* Interop Constraints */\r\n // \"isolatedModules\": true, /* Ensure that each file can be safely transpiled without relying on other imports. */\r\n // \"verbatimModuleSyntax\": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */\r\n // \"allowSyntheticDefaultImports\": true, /* Allow 'import x from y' when a module doesn't have a default export. */\r\n \"esModuleInterop\": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */\r\n // \"preserveSymlinks\": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */\r\n \"forceConsistentCasingInFileNames\": true, /* Ensure that casing is correct in imports. */\r\n\r\n /* Type Checking */\r\n \"strict\": true, /* Enable all strict type-checking options. */\r\n // \"noImplicitAny\": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */\r\n // \"strictNullChecks\": true, /* When type checking, take into account 'null' and 'undefined'. */\r\n // \"strictFunctionTypes\": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */\r\n // \"strictBindCallApply\": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */\r\n // \"strictPropertyInitialization\": true, /* Check for class properties that are declared but not set in the constructor. */\r\n // \"noImplicitThis\": true, /* Enable error reporting when 'this' is given the type 'any'. */\r\n // \"useUnknownInCatchVariables\": true, /* Default catch clause variables as 'unknown' instead of 'any'. */\r\n // \"alwaysStrict\": true, /* Ensure 'use strict' is always emitted. */\r\n // \"noUnusedLocals\": true, /* Enable error reporting when local variables aren't read. */\r\n // \"noUnusedParameters\": true, /* Raise an error when a function parameter isn't read. */\r\n // \"exactOptionalPropertyTypes\": true, /* Interpret optional property types as written, rather than adding 'undefined'. */\r\n // \"noImplicitReturns\": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */\r\n // \"noFallthroughCasesInSwitch\": true, /* Enable error reporting for fallthrough cases in switch statements. */\r\n // \"noUncheckedIndexedAccess\": true, /* Add 'undefined' to a type when accessed using an index. */\r\n // \"noImplicitOverride\": true, /* Ensure overriding members in derived classes are marked with an override modifier. */\r\n // \"noPropertyAccessFromIndexSignature\": true, /* Enforces using indexed accessors for keys declared using an indexed type. */\r\n // \"allowUnusedLabels\": true, /* Disable error reporting for unused labels. */\r\n // \"allowUnreachableCode\": true, /* Disable error reporting for unreachable code. */\r\n\r\n /* Completeness */\r\n // \"skipDefaultLibCheck\": true, /* Skip type checking .d.ts files that are included with TypeScript. */\r\n \"skipLibCheck\": true /* Skip type checking all .d.ts files. */\r\n }\r\n}\r\n```\r\n\r\n \r\n\r\nKnip 3.10.0 fails with a tsconfig.json containing comments:\r\n```\r\nAnalyzing workspace ....\r\nError loading tsconfig\r\nReason: tsconfig.json: Expected double-quoted property name in JSON at position 266\r\n ELIFECYCLE Command failed with exit code 2.\r\n```\r\n","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/420/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/webpro/knip/issues/420/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/webpro/knip/issues/comments/1877500265","html_url":"https://github.com/webpro/knip/issues/420#issuecomment-1877500265","issue_url":"https://api.github.com/repos/webpro/knip/issues/420","id":1877500265,"node_id":"IC_kwDOIIPL1M5v6GFp","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-01-04T17:33:51Z","updated_at":"2024-01-04T17:33:51Z","author_association":"CONTRIBUTOR","body":"Other users will be bitten by `\"extends\"` without the .json extension. It would be nicer if Knip supports the way of the official tsconfig.json documentation","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/comments/1877500265/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-04T17:33:52Z"},{"id":"34578872326","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":545508308,"name":"webpro/knip","url":"https://api.github.com/repos/webpro/knip"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/webpro/knip/issues/420","repository_url":"https://api.github.com/repos/webpro/knip","labels_url":"https://api.github.com/repos/webpro/knip/issues/420/labels{/name}","comments_url":"https://api.github.com/repos/webpro/knip/issues/420/comments","events_url":"https://api.github.com/repos/webpro/knip/issues/420/events","html_url":"https://github.com/webpro/knip/issues/420","id":2063006347,"node_id":"I_kwDOIIPL1M569vqL","number":420,"title":"Allow for tsconfig.json with comments","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[{"id":4613850857,"node_id":"LA_kwDOIIPL1M8AAAABEwHG6Q","url":"https://api.github.com/repos/webpro/knip/labels/bug","name":"bug","color":"d73a4a","default":true,"description":"Something isn't working"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2024-01-02T22:02:02Z","updated_at":"2024-01-04T17:25:00Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"Comments in tsconfig.json are allowed since 2015: https://github.com/microsoft/TypeScript/pull/5450\r\n\r\n\r\n\r\n`tsc --init` command line generates a tsconfig.json file with comments:
\r\n\r\n```JS\r\n{\r\n \"compilerOptions\": {\r\n /* Visit https://aka.ms/tsconfig to read more about this file */\r\n\r\n /* Projects */\r\n // \"incremental\": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */\r\n // \"composite\": true, /* Enable constraints that allow a TypeScript project to be used with project references. */\r\n // \"tsBuildInfoFile\": \"./.tsbuildinfo\", /* Specify the path to .tsbuildinfo incremental compilation file. */\r\n // \"disableSourceOfProjectReferenceRedirect\": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */\r\n // \"disableSolutionSearching\": true, /* Opt a project out of multi-project reference checking when editing. */\r\n // \"disableReferencedProjectLoad\": true, /* Reduce the number of projects loaded automatically by TypeScript. */\r\n\r\n /* Language and Environment */\r\n \"target\": \"es2016\", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */\r\n // \"lib\": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */\r\n // \"jsx\": \"preserve\", /* Specify what JSX code is generated. */\r\n // \"experimentalDecorators\": true, /* Enable experimental support for legacy experimental decorators. */\r\n // \"emitDecoratorMetadata\": true, /* Emit design-type metadata for decorated declarations in source files. */\r\n // \"jsxFactory\": \"\", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */\r\n // \"jsxFragmentFactory\": \"\", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */\r\n // \"jsxImportSource\": \"\", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */\r\n // \"reactNamespace\": \"\", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */\r\n // \"noLib\": true, /* Disable including any library files, including the default lib.d.ts. */\r\n // \"useDefineForClassFields\": true, /* Emit ECMAScript-standard-compliant class fields. */\r\n // \"moduleDetection\": \"auto\", /* Control what method is used to detect module-format JS files. */\r\n\r\n /* Modules */\r\n \"module\": \"commonjs\", /* Specify what module code is generated. */\r\n // \"rootDir\": \"./\", /* Specify the root folder within your source files. */\r\n // \"moduleResolution\": \"node10\", /* Specify how TypeScript looks up a file from a given module specifier. */\r\n // \"baseUrl\": \"./\", /* Specify the base directory to resolve non-relative module names. */\r\n // \"paths\": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */\r\n // \"rootDirs\": [], /* Allow multiple folders to be treated as one when resolving modules. */\r\n // \"typeRoots\": [], /* Specify multiple folders that act like './node_modules/@types'. */\r\n // \"types\": [], /* Specify type package names to be included without being referenced in a source file. */\r\n // \"allowUmdGlobalAccess\": true, /* Allow accessing UMD globals from modules. */\r\n // \"moduleSuffixes\": [], /* List of file name suffixes to search when resolving a module. */\r\n // \"allowImportingTsExtensions\": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */\r\n // \"resolvePackageJsonExports\": true, /* Use the package.json 'exports' field when resolving package imports. */\r\n // \"resolvePackageJsonImports\": true, /* Use the package.json 'imports' field when resolving imports. */\r\n // \"customConditions\": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */\r\n // \"resolveJsonModule\": true, /* Enable importing .json files. */\r\n // \"allowArbitraryExtensions\": true, /* Enable importing files with any extension, provided a declaration file is present. */\r\n // \"noResolve\": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */\r\n\r\n /* JavaScript Support */\r\n // \"allowJs\": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */\r\n // \"checkJs\": true, /* Enable error reporting in type-checked JavaScript files. */\r\n // \"maxNodeModuleJsDepth\": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */\r\n\r\n /* Emit */\r\n // \"declaration\": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */\r\n // \"declarationMap\": true, /* Create sourcemaps for d.ts files. */\r\n // \"emitDeclarationOnly\": true, /* Only output d.ts files and not JavaScript files. */\r\n // \"sourceMap\": true, /* Create source map files for emitted JavaScript files. */\r\n // \"inlineSourceMap\": true, /* Include sourcemap files inside the emitted JavaScript. */\r\n // \"outFile\": \"./\", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */\r\n // \"outDir\": \"./\", /* Specify an output folder for all emitted files. */\r\n // \"removeComments\": true, /* Disable emitting comments. */\r\n // \"noEmit\": true, /* Disable emitting files from a compilation. */\r\n // \"importHelpers\": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */\r\n // \"importsNotUsedAsValues\": \"remove\", /* Specify emit/checking behavior for imports that are only used for types. */\r\n // \"downlevelIteration\": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */\r\n // \"sourceRoot\": \"\", /* Specify the root path for debuggers to find the reference source code. */\r\n // \"mapRoot\": \"\", /* Specify the location where debugger should locate map files instead of generated locations. */\r\n // \"inlineSources\": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */\r\n // \"emitBOM\": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */\r\n // \"newLine\": \"crlf\", /* Set the newline character for emitting files. */\r\n // \"stripInternal\": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */\r\n // \"noEmitHelpers\": true, /* Disable generating custom helper functions like '__extends' in compiled output. */\r\n // \"noEmitOnError\": true, /* Disable emitting files if any type checking errors are reported. */\r\n // \"preserveConstEnums\": true, /* Disable erasing 'const enum' declarations in generated code. */\r\n // \"declarationDir\": \"./\", /* Specify the output directory for generated declaration files. */\r\n // \"preserveValueImports\": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */\r\n\r\n /* Interop Constraints */\r\n // \"isolatedModules\": true, /* Ensure that each file can be safely transpiled without relying on other imports. */\r\n // \"verbatimModuleSyntax\": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */\r\n // \"allowSyntheticDefaultImports\": true, /* Allow 'import x from y' when a module doesn't have a default export. */\r\n \"esModuleInterop\": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */\r\n // \"preserveSymlinks\": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */\r\n \"forceConsistentCasingInFileNames\": true, /* Ensure that casing is correct in imports. */\r\n\r\n /* Type Checking */\r\n \"strict\": true, /* Enable all strict type-checking options. */\r\n // \"noImplicitAny\": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */\r\n // \"strictNullChecks\": true, /* When type checking, take into account 'null' and 'undefined'. */\r\n // \"strictFunctionTypes\": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */\r\n // \"strictBindCallApply\": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */\r\n // \"strictPropertyInitialization\": true, /* Check for class properties that are declared but not set in the constructor. */\r\n // \"noImplicitThis\": true, /* Enable error reporting when 'this' is given the type 'any'. */\r\n // \"useUnknownInCatchVariables\": true, /* Default catch clause variables as 'unknown' instead of 'any'. */\r\n // \"alwaysStrict\": true, /* Ensure 'use strict' is always emitted. */\r\n // \"noUnusedLocals\": true, /* Enable error reporting when local variables aren't read. */\r\n // \"noUnusedParameters\": true, /* Raise an error when a function parameter isn't read. */\r\n // \"exactOptionalPropertyTypes\": true, /* Interpret optional property types as written, rather than adding 'undefined'. */\r\n // \"noImplicitReturns\": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */\r\n // \"noFallthroughCasesInSwitch\": true, /* Enable error reporting for fallthrough cases in switch statements. */\r\n // \"noUncheckedIndexedAccess\": true, /* Add 'undefined' to a type when accessed using an index. */\r\n // \"noImplicitOverride\": true, /* Ensure overriding members in derived classes are marked with an override modifier. */\r\n // \"noPropertyAccessFromIndexSignature\": true, /* Enforces using indexed accessors for keys declared using an indexed type. */\r\n // \"allowUnusedLabels\": true, /* Disable error reporting for unused labels. */\r\n // \"allowUnreachableCode\": true, /* Disable error reporting for unreachable code. */\r\n\r\n /* Completeness */\r\n // \"skipDefaultLibCheck\": true, /* Skip type checking .d.ts files that are included with TypeScript. */\r\n \"skipLibCheck\": true /* Skip type checking all .d.ts files. */\r\n }\r\n}\r\n```\r\n\r\n \r\n\r\nKnip 3.10.0 fails with a tsconfig.json containing comments:\r\n```\r\nAnalyzing workspace ....\r\nError loading tsconfig\r\nReason: tsconfig.json: Expected double-quoted property name in JSON at position 266\r\n ELIFECYCLE Command failed with exit code 2.\r\n```\r\n","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/420/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/webpro/knip/issues/420/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/webpro/knip/issues/comments/1877488596","html_url":"https://github.com/webpro/knip/issues/420#issuecomment-1877488596","issue_url":"https://api.github.com/repos/webpro/knip/issues/420","id":1877488596,"node_id":"IC_kwDOIIPL1M5v6DPU","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-01-04T17:24:59Z","updated_at":"2024-01-04T17:24:59Z","author_association":"CONTRIBUTOR","body":"The documentation https://www.typescriptlang.org/tsconfig#extends omits the extension: `\"extends\": \"./configs/base\"`,`\"extends\": \"./tsconfig\",`","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/comments/1877488596/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-04T17:25:01Z"},{"id":"34578408104","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":545508308,"name":"webpro/knip","url":"https://api.github.com/repos/webpro/knip"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/webpro/knip/issues/422","repository_url":"https://api.github.com/repos/webpro/knip","labels_url":"https://api.github.com/repos/webpro/knip/issues/422/labels{/name}","comments_url":"https://api.github.com/repos/webpro/knip/issues/422/comments","events_url":"https://api.github.com/repos/webpro/knip/issues/422/events","html_url":"https://github.com/webpro/knip/issues/422","id":2063065216,"node_id":"I_kwDOIIPL1M569-CA","number":422,"title":"@typescript-eslint/parser as unlisted","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[{"id":4613850857,"node_id":"LA_kwDOIIPL1M8AAAABEwHG6Q","url":"https://api.github.com/repos/webpro/knip/labels/bug","name":"bug","color":"d73a4a","default":true,"description":"Something isn't working"}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2024-01-02T23:27:41Z","updated_at":"2024-01-04T17:06:34Z","closed_at":"2024-01-04T17:06:34Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"```JS\r\n// File .eslintrc.js\r\n\r\n/** @type {import('eslint').Linter.Config} */\r\nconst config = {\r\n root: true,\r\n parser: \"@typescript-eslint/parser\",\r\n ...\r\n};\r\n\r\nmodule.exports = config;\r\n```\r\n\r\npackage.json:\r\n```JSON\r\n{\r\n \"devDependencies\": {\r\n \"@typescript-eslint/eslint-plugin\": \"^6.8.0\"\r\n }\r\n}\r\n```\r\n\r\n\r\nKnip 3.10.0 output:\r\n\r\n```\r\nUnlisted dependencies (1)\r\n@typescript-eslint/parser .eslintrc.js\r\n```","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/422/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/webpro/knip/issues/422/timeline","performed_via_github_app":null,"state_reason":"completed"},"comment":{"url":"https://api.github.com/repos/webpro/knip/issues/comments/1877464057","html_url":"https://github.com/webpro/knip/issues/422#issuecomment-1877464057","issue_url":"https://api.github.com/repos/webpro/knip/issues/422","id":1877464057,"node_id":"IC_kwDOIIPL1M5v59P5","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-01-04T17:06:34Z","updated_at":"2024-01-04T17:06:34Z","author_association":"CONTRIBUTOR","body":"It works when adding @typescript-eslint/parser, sorry for the bad report","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/comments/1877464057/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-04T17:06:36Z"},{"id":"34578407690","type":"IssuesEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":545508308,"name":"webpro/knip","url":"https://api.github.com/repos/webpro/knip"},"payload":{"action":"closed","issue":{"url":"https://api.github.com/repos/webpro/knip/issues/422","repository_url":"https://api.github.com/repos/webpro/knip","labels_url":"https://api.github.com/repos/webpro/knip/issues/422/labels{/name}","comments_url":"https://api.github.com/repos/webpro/knip/issues/422/comments","events_url":"https://api.github.com/repos/webpro/knip/issues/422/events","html_url":"https://github.com/webpro/knip/issues/422","id":2063065216,"node_id":"I_kwDOIIPL1M569-CA","number":422,"title":"@typescript-eslint/parser as unlisted","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[{"id":4613850857,"node_id":"LA_kwDOIIPL1M8AAAABEwHG6Q","url":"https://api.github.com/repos/webpro/knip/labels/bug","name":"bug","color":"d73a4a","default":true,"description":"Something isn't working"}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2024-01-02T23:27:41Z","updated_at":"2024-01-04T17:06:34Z","closed_at":"2024-01-04T17:06:34Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"```JS\r\n// File .eslintrc.js\r\n\r\n/** @type {import('eslint').Linter.Config} */\r\nconst config = {\r\n root: true,\r\n parser: \"@typescript-eslint/parser\",\r\n ...\r\n};\r\n\r\nmodule.exports = config;\r\n```\r\n\r\npackage.json:\r\n```JSON\r\n{\r\n \"devDependencies\": {\r\n \"@typescript-eslint/eslint-plugin\": \"^6.8.0\"\r\n }\r\n}\r\n```\r\n\r\n\r\nKnip 3.10.0 output:\r\n\r\n```\r\nUnlisted dependencies (1)\r\n@typescript-eslint/parser .eslintrc.js\r\n```","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/422/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/webpro/knip/issues/422/timeline","performed_via_github_app":null,"state_reason":"completed"}},"public":true,"created_at":"2024-01-04T17:06:35Z"},{"id":"34576696847","type":"IssueCommentEvent","actor":{"id":643434,"login":"tkrotoff","display_login":"tkrotoff","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","avatar_url":"https://avatars.githubusercontent.com/u/643434?"},"repo":{"id":545508308,"name":"webpro/knip","url":"https://api.github.com/repos/webpro/knip"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/webpro/knip/issues/420","repository_url":"https://api.github.com/repos/webpro/knip","labels_url":"https://api.github.com/repos/webpro/knip/issues/420/labels{/name}","comments_url":"https://api.github.com/repos/webpro/knip/issues/420/comments","events_url":"https://api.github.com/repos/webpro/knip/issues/420/events","html_url":"https://github.com/webpro/knip/issues/420","id":2063006347,"node_id":"I_kwDOIIPL1M569vqL","number":420,"title":"Allow for tsconfig.json with comments","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"labels":[{"id":4613850857,"node_id":"LA_kwDOIIPL1M8AAAABEwHG6Q","url":"https://api.github.com/repos/webpro/knip/labels/bug","name":"bug","color":"d73a4a","default":true,"description":"Something isn't working"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2024-01-02T22:02:02Z","updated_at":"2024-01-04T16:02:50Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"Comments in tsconfig.json are allowed since 2015: https://github.com/microsoft/TypeScript/pull/5450\r\n\r\n\r\n\r\n`tsc --init` command line generates a tsconfig.json file with comments:
\r\n\r\n```JS\r\n{\r\n \"compilerOptions\": {\r\n /* Visit https://aka.ms/tsconfig to read more about this file */\r\n\r\n /* Projects */\r\n // \"incremental\": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */\r\n // \"composite\": true, /* Enable constraints that allow a TypeScript project to be used with project references. */\r\n // \"tsBuildInfoFile\": \"./.tsbuildinfo\", /* Specify the path to .tsbuildinfo incremental compilation file. */\r\n // \"disableSourceOfProjectReferenceRedirect\": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */\r\n // \"disableSolutionSearching\": true, /* Opt a project out of multi-project reference checking when editing. */\r\n // \"disableReferencedProjectLoad\": true, /* Reduce the number of projects loaded automatically by TypeScript. */\r\n\r\n /* Language and Environment */\r\n \"target\": \"es2016\", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */\r\n // \"lib\": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */\r\n // \"jsx\": \"preserve\", /* Specify what JSX code is generated. */\r\n // \"experimentalDecorators\": true, /* Enable experimental support for legacy experimental decorators. */\r\n // \"emitDecoratorMetadata\": true, /* Emit design-type metadata for decorated declarations in source files. */\r\n // \"jsxFactory\": \"\", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */\r\n // \"jsxFragmentFactory\": \"\", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */\r\n // \"jsxImportSource\": \"\", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */\r\n // \"reactNamespace\": \"\", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */\r\n // \"noLib\": true, /* Disable including any library files, including the default lib.d.ts. */\r\n // \"useDefineForClassFields\": true, /* Emit ECMAScript-standard-compliant class fields. */\r\n // \"moduleDetection\": \"auto\", /* Control what method is used to detect module-format JS files. */\r\n\r\n /* Modules */\r\n \"module\": \"commonjs\", /* Specify what module code is generated. */\r\n // \"rootDir\": \"./\", /* Specify the root folder within your source files. */\r\n // \"moduleResolution\": \"node10\", /* Specify how TypeScript looks up a file from a given module specifier. */\r\n // \"baseUrl\": \"./\", /* Specify the base directory to resolve non-relative module names. */\r\n // \"paths\": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */\r\n // \"rootDirs\": [], /* Allow multiple folders to be treated as one when resolving modules. */\r\n // \"typeRoots\": [], /* Specify multiple folders that act like './node_modules/@types'. */\r\n // \"types\": [], /* Specify type package names to be included without being referenced in a source file. */\r\n // \"allowUmdGlobalAccess\": true, /* Allow accessing UMD globals from modules. */\r\n // \"moduleSuffixes\": [], /* List of file name suffixes to search when resolving a module. */\r\n // \"allowImportingTsExtensions\": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */\r\n // \"resolvePackageJsonExports\": true, /* Use the package.json 'exports' field when resolving package imports. */\r\n // \"resolvePackageJsonImports\": true, /* Use the package.json 'imports' field when resolving imports. */\r\n // \"customConditions\": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */\r\n // \"resolveJsonModule\": true, /* Enable importing .json files. */\r\n // \"allowArbitraryExtensions\": true, /* Enable importing files with any extension, provided a declaration file is present. */\r\n // \"noResolve\": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */\r\n\r\n /* JavaScript Support */\r\n // \"allowJs\": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */\r\n // \"checkJs\": true, /* Enable error reporting in type-checked JavaScript files. */\r\n // \"maxNodeModuleJsDepth\": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */\r\n\r\n /* Emit */\r\n // \"declaration\": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */\r\n // \"declarationMap\": true, /* Create sourcemaps for d.ts files. */\r\n // \"emitDeclarationOnly\": true, /* Only output d.ts files and not JavaScript files. */\r\n // \"sourceMap\": true, /* Create source map files for emitted JavaScript files. */\r\n // \"inlineSourceMap\": true, /* Include sourcemap files inside the emitted JavaScript. */\r\n // \"outFile\": \"./\", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */\r\n // \"outDir\": \"./\", /* Specify an output folder for all emitted files. */\r\n // \"removeComments\": true, /* Disable emitting comments. */\r\n // \"noEmit\": true, /* Disable emitting files from a compilation. */\r\n // \"importHelpers\": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */\r\n // \"importsNotUsedAsValues\": \"remove\", /* Specify emit/checking behavior for imports that are only used for types. */\r\n // \"downlevelIteration\": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */\r\n // \"sourceRoot\": \"\", /* Specify the root path for debuggers to find the reference source code. */\r\n // \"mapRoot\": \"\", /* Specify the location where debugger should locate map files instead of generated locations. */\r\n // \"inlineSources\": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */\r\n // \"emitBOM\": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */\r\n // \"newLine\": \"crlf\", /* Set the newline character for emitting files. */\r\n // \"stripInternal\": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */\r\n // \"noEmitHelpers\": true, /* Disable generating custom helper functions like '__extends' in compiled output. */\r\n // \"noEmitOnError\": true, /* Disable emitting files if any type checking errors are reported. */\r\n // \"preserveConstEnums\": true, /* Disable erasing 'const enum' declarations in generated code. */\r\n // \"declarationDir\": \"./\", /* Specify the output directory for generated declaration files. */\r\n // \"preserveValueImports\": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */\r\n\r\n /* Interop Constraints */\r\n // \"isolatedModules\": true, /* Ensure that each file can be safely transpiled without relying on other imports. */\r\n // \"verbatimModuleSyntax\": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */\r\n // \"allowSyntheticDefaultImports\": true, /* Allow 'import x from y' when a module doesn't have a default export. */\r\n \"esModuleInterop\": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */\r\n // \"preserveSymlinks\": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */\r\n \"forceConsistentCasingInFileNames\": true, /* Ensure that casing is correct in imports. */\r\n\r\n /* Type Checking */\r\n \"strict\": true, /* Enable all strict type-checking options. */\r\n // \"noImplicitAny\": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */\r\n // \"strictNullChecks\": true, /* When type checking, take into account 'null' and 'undefined'. */\r\n // \"strictFunctionTypes\": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */\r\n // \"strictBindCallApply\": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */\r\n // \"strictPropertyInitialization\": true, /* Check for class properties that are declared but not set in the constructor. */\r\n // \"noImplicitThis\": true, /* Enable error reporting when 'this' is given the type 'any'. */\r\n // \"useUnknownInCatchVariables\": true, /* Default catch clause variables as 'unknown' instead of 'any'. */\r\n // \"alwaysStrict\": true, /* Ensure 'use strict' is always emitted. */\r\n // \"noUnusedLocals\": true, /* Enable error reporting when local variables aren't read. */\r\n // \"noUnusedParameters\": true, /* Raise an error when a function parameter isn't read. */\r\n // \"exactOptionalPropertyTypes\": true, /* Interpret optional property types as written, rather than adding 'undefined'. */\r\n // \"noImplicitReturns\": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */\r\n // \"noFallthroughCasesInSwitch\": true, /* Enable error reporting for fallthrough cases in switch statements. */\r\n // \"noUncheckedIndexedAccess\": true, /* Add 'undefined' to a type when accessed using an index. */\r\n // \"noImplicitOverride\": true, /* Ensure overriding members in derived classes are marked with an override modifier. */\r\n // \"noPropertyAccessFromIndexSignature\": true, /* Enforces using indexed accessors for keys declared using an indexed type. */\r\n // \"allowUnusedLabels\": true, /* Disable error reporting for unused labels. */\r\n // \"allowUnreachableCode\": true, /* Disable error reporting for unreachable code. */\r\n\r\n /* Completeness */\r\n // \"skipDefaultLibCheck\": true, /* Skip type checking .d.ts files that are included with TypeScript. */\r\n \"skipLibCheck\": true /* Skip type checking all .d.ts files. */\r\n }\r\n}\r\n```\r\n\r\n \r\n\r\nKnip 3.10.0 fails with a tsconfig.json containing comments:\r\n```\r\nAnalyzing workspace ....\r\nError loading tsconfig\r\nReason: tsconfig.json: Expected double-quoted property name in JSON at position 266\r\n ELIFECYCLE Command failed with exit code 2.\r\n```\r\n","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/420/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/webpro/knip/issues/420/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/webpro/knip/issues/comments/1877347479","html_url":"https://github.com/webpro/knip/issues/420#issuecomment-1877347479","issue_url":"https://api.github.com/repos/webpro/knip/issues/420","id":1877347479,"node_id":"IC_kwDOIIPL1M5v5gyX","user":{"login":"tkrotoff","id":643434,"node_id":"MDQ6VXNlcjY0MzQzNA==","avatar_url":"https://avatars.githubusercontent.com/u/643434?v=4","gravatar_id":"","url":"https://api.github.com/users/tkrotoff","html_url":"https://github.com/tkrotoff","followers_url":"https://api.github.com/users/tkrotoff/followers","following_url":"https://api.github.com/users/tkrotoff/following{/other_user}","gists_url":"https://api.github.com/users/tkrotoff/gists{/gist_id}","starred_url":"https://api.github.com/users/tkrotoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkrotoff/subscriptions","organizations_url":"https://api.github.com/users/tkrotoff/orgs","repos_url":"https://api.github.com/users/tkrotoff/repos","events_url":"https://api.github.com/users/tkrotoff/events{/privacy}","received_events_url":"https://api.github.com/users/tkrotoff/received_events","type":"User","site_admin":false},"created_at":"2024-01-04T16:02:49Z","updated_at":"2024-01-04T16:02:49Z","author_association":"CONTRIBUTOR","body":"Here a reproduction: https://codesandbox.io/p/devbox/knip-tsconfig-bug-59qdkw\r\n\r\nThe important part is in packages/app/package.json, if you remove `typescript` from the `devDependencies` it works.\r\n\r\nWith `typescript` in the dependencies, Knip seems to use the TypeScript plugin and tries to read the tsconfig.json file like a regular JSON using https://github.com/webpro/knip/blob/b70b957bd1f1f2c2e3dd0d4ca90e348e1ca4d26e/packages/knip/src/util/loader.ts#L22","reactions":{"url":"https://api.github.com/repos/webpro/knip/issues/comments/1877347479/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-04T16:02:50Z"}]