This is an automated email from the ASF dual-hosted git repository.

tiagobento pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git


The following commit(s) were added to refs/heads/main by this push:
     new b73df80cd8a kie-issues#151: Make browser extensions work on other 
GitHub instances, like github.ibm.com (#2126)
b73df80cd8a is described below

commit b73df80cd8a617c9c577c3e045face4c89558ccc
Author: Jozef Marko <jozef.ma...@ibm.com>
AuthorDate: Mon Jan 29 17:32:48 2024 +0100

    kie-issues#151: Make browser extensions work on other GitHub instances, 
like github.ibm.com (#2126)
    
    Co-authored-by: Tiago Bento <1584568+tiagobe...@users.noreply.github.com>
---
 .../manifest.dev.json                              |   4 +-
 .../manifest.prod.json                             |   4 +-
 packages/chrome-extension/src/Logger.ts            |   4 +
 packages/chrome-extension/src/app/Dependencies.ts  |  13 ++-
 .../src/app/components/common/GitHubContext.tsx    |  15 ++-
 .../src/app/components/common/KogitoMenu.tsx       |   6 +-
 .../OpenInExternalEditorButton.tsx                 |   8 +-
 .../openRepoInExternalEditorApp.tsx                |   3 +-
 .../src/app/components/pr/PrEditorsApp.tsx         |  22 ++++-
 .../src/app/components/pr/prEditors.tsx            |  15 ++-
 .../src/app/components/single/singleEditorView.tsx |   1 -
 .../src/app/github/GitHubPageType.ts               |   6 +-
 packages/chrome-extension/src/index.ts             | 103 +++++++++++++++------
 packages/chrome-extension/tests/index.test.ts      |  20 +++-
 14 files changed, 165 insertions(+), 59 deletions(-)

diff --git 
a/packages/chrome-extension-pack-kogito-kie-editors/manifest.dev.json 
b/packages/chrome-extension-pack-kogito-kie-editors/manifest.dev.json
index 99bede0733a..0b291071649 100644
--- a/packages/chrome-extension-pack-kogito-kie-editors/manifest.dev.json
+++ b/packages/chrome-extension-pack-kogito-kie-editors/manifest.dev.json
@@ -7,8 +7,8 @@
     {
       "run_at": "document_idle",
       "js": ["content_scripts/github.js"],
-      "matches": ["https://*.github.com/*";],
-      "all_frames": true
+      "matches": ["https://*/*";, "http://*/*";],
+      "all_frames": false
     }
   ],
   "icons": { "16": "resources/icon_16.png", "48": "resources/icon_48.png", 
"128": "resources/icon_128.png" },
diff --git 
a/packages/chrome-extension-pack-kogito-kie-editors/manifest.prod.json 
b/packages/chrome-extension-pack-kogito-kie-editors/manifest.prod.json
index e85e605d4b7..80c54ee8561 100644
--- a/packages/chrome-extension-pack-kogito-kie-editors/manifest.prod.json
+++ b/packages/chrome-extension-pack-kogito-kie-editors/manifest.prod.json
@@ -7,8 +7,8 @@
     {
       "run_at": "document_idle",
       "js": ["content_scripts/github.js"],
-      "matches": ["https://*.github.com/*";],
-      "all_frames": true
+      "matches": ["https://*/*";, "http://*/*";],
+      "all_frames": false
     }
   ],
   "icons": { "16": "resources/icon_16.png", "48": "resources/icon_48.png", 
"128": "resources/icon_128.png" },
diff --git a/packages/chrome-extension/src/Logger.ts 
b/packages/chrome-extension/src/Logger.ts
index 6b1ef6d93b5..a3ead530df2 100644
--- a/packages/chrome-extension/src/Logger.ts
+++ b/packages/chrome-extension/src/Logger.ts
@@ -27,4 +27,8 @@ export class Logger {
   public log(...args: any[]) {
     console.debug(`[${this.extensionName}] -> `, ...args);
   }
+
+  public warn(...args: any[]) {
+    console.warn(`[${this.extensionName}] -> `, ...args);
+  }
 }
diff --git a/packages/chrome-extension/src/app/Dependencies.ts 
b/packages/chrome-extension/src/app/Dependencies.ts
index 1b6faac1bed..fec63f4f4be 100644
--- a/packages/chrome-extension/src/app/Dependencies.ts
+++ b/packages/chrome-extension/src/app/Dependencies.ts
@@ -62,7 +62,7 @@ export class Dependencies {
 
   public readonly openRepoInExternalEditor = {
     buttonContainerOnRepoHome: () => {
-      return document.querySelector("#repository-details-container 
.pagehead-actions") as HTMLElement | null;
+      return document.querySelector(".pagehead-actions") as HTMLElement | null;
     },
     buttonContainerOnRepoFilesList: () => {
       return document.querySelector(".d-flex.gap-2")?.parentElement as 
HTMLElement | null;
@@ -73,6 +73,9 @@ export class Dependencies {
   };
 
   public readonly all = {
+    octiconMarkGitHub: () => {
+      return document.querySelector(".octicon-mark-github") as HTMLElement | 
null;
+    },
     notificationIndicator: () => {
       return (document.querySelector(".notification-indicator") ??
         document.querySelector(".AppHeader-search")) as HTMLElement | null;
@@ -89,9 +92,15 @@ export class Dependencies {
     edit__githubTextAreaWithFileContents: () => {
       return document.getElementById("kie-tools__initial-content") as 
HTMLTextAreaElement | null;
     },
-    pr__mutationObserverTarget: () => {
+    pr__filesMutationObserverTarget: () => {
       return document.getElementById("files") as HTMLElement | null;
     },
+    pr__commitsMutationObserverTarget: () => {
+      return document.getElementById("commits_bucket") as HTMLElement | null;
+    },
+    pr__homeMutationObserverTarget: () => {
+      return document.querySelector(".pull-discussion-timeline") as 
HTMLElement | null;
+    },
     pr__openWithExternalEditorLinkContainer: (container: HTMLElement) => {
       return container.querySelectorAll("details-menu a")[0] as 
HTMLAnchorElement | null;
     },
diff --git 
a/packages/chrome-extension/src/app/components/common/GitHubContext.tsx 
b/packages/chrome-extension/src/app/components/common/GitHubContext.tsx
index 1c14f1e6a5b..e0db3c787da 100644
--- a/packages/chrome-extension/src/app/components/common/GitHubContext.tsx
+++ b/packages/chrome-extension/src/app/components/common/GitHubContext.tsx
@@ -53,6 +53,17 @@ export function getCookie(name: string) {
   }
 }
 
+export function getGitHubApiBaseUrl(baseUrl: string) {
+  if (baseUrl.startsWith("https://";)) {
+    return "https://api."; + baseUrl.slice(8);
+  } else if (baseUrl.startsWith("http://";)) {
+    return "http://api."; + baseUrl.slice(7);
+  } else {
+    console.error(`Unsupported protocol for GitHub API base URL: ${baseUrl}`);
+    return;
+  }
+}
+
 let octokitInstance: Octokit;
 
 export const GitHubContextProvider: React.FC<{}> = (props) => {
@@ -70,10 +81,10 @@ export const GitHubContextProvider: React.FC<{}> = (props) 
=> {
 
   useEffect(() => {
     if (token) {
-      octokitInstance = new Octokit({ auth: token });
+      octokitInstance = new Octokit({ auth: token, baseUrl: 
getGitHubApiBaseUrl(window.location.origin) });
       console.debug("Token found");
     } else {
-      octokitInstance = new Octokit();
+      octokitInstance = new Octokit({ baseUrl: 
getGitHubApiBaseUrl(window.location.origin) });
       console.debug("Token not found.");
     }
     setReady(true);
diff --git a/packages/chrome-extension/src/app/components/common/KogitoMenu.tsx 
b/packages/chrome-extension/src/app/components/common/KogitoMenu.tsx
index e690461fa42..6ca24a314da 100644
--- a/packages/chrome-extension/src/app/components/common/KogitoMenu.tsx
+++ b/packages/chrome-extension/src/app/components/common/KogitoMenu.tsx
@@ -19,7 +19,7 @@
 
 import * as React from "react";
 import { useCallback, useEffect, useRef, useState } from "react";
-import { useGitHubApi } from "./GitHubContext";
+import { getGitHubApiBaseUrl, useGitHubApi } from "./GitHubContext";
 import { Octokit } from "@octokit/rest";
 import { useGlobals } from "./GlobalContext";
 import { useChromeExtensionI18n } from "../../i18n";
@@ -100,7 +100,7 @@ export function KogitoMenu() {
               <a
                 target={"blank"}
                 className="Header-link mr-0 mr-lg-3 py-2 py-lg-0"
-                href="https://github.com/settings/tokens";
+                href={window.location.origin + "/settings/tokens"}
               >
                 {i18n.common.menu.createToken}
               </a>
@@ -176,7 +176,7 @@ async function tokenIsValid(token?: string) {
     return false;
   }
 
-  const testOctokit = new Octokit({ auth: token });
+  const testOctokit = new Octokit({ auth: token, baseUrl: 
getGitHubApiBaseUrl(window.location.origin) });
   return await testOctokit.emojis
     .get({})
     .then(() => true)
diff --git 
a/packages/chrome-extension/src/app/components/openRepoInExternalEditor/OpenInExternalEditorButton.tsx
 
b/packages/chrome-extension/src/app/components/openRepoInExternalEditor/OpenInExternalEditorButton.tsx
index 6eea6e340f2..e8e35a5ea40 100644
--- 
a/packages/chrome-extension/src/app/components/openRepoInExternalEditor/OpenInExternalEditorButton.tsx
+++ 
b/packages/chrome-extension/src/app/components/openRepoInExternalEditor/OpenInExternalEditorButton.tsx
@@ -26,9 +26,13 @@ import { GitHubPageType } from "../../github/GitHubPageType";
 export function OpenInExternalEditorButton(props: { className: string; 
pageType: GitHubPageType }) {
   const globals = useGlobals();
   const repoUrl = useMemo(() => {
-    if (props.pageType === GitHubPageType.PR_HOME || props.pageType === 
GitHubPageType.PR_FILES_OR_COMMITS) {
+    if (
+      props.pageType === GitHubPageType.PR_HOME ||
+      props.pageType === GitHubPageType.PR_FILES ||
+      props.pageType === GitHubPageType.PR_COMMITS
+    ) {
       const prInfo = parsePrInfo(globals.dependencies);
-      return 
`https://github.com/${prInfo.org}/${prInfo.repo}/tree/${prInfo.gitRef}`;
+      return 
`${window.location.origin}/${prInfo.org}/${prInfo.repo}/tree/${prInfo.gitRef}`;
     }
 
     return window.location.href;
diff --git 
a/packages/chrome-extension/src/app/components/openRepoInExternalEditor/openRepoInExternalEditorApp.tsx
 
b/packages/chrome-extension/src/app/components/openRepoInExternalEditor/openRepoInExternalEditorApp.tsx
index e3869e23508..a55504b9cc0 100644
--- 
a/packages/chrome-extension/src/app/components/openRepoInExternalEditor/openRepoInExternalEditorApp.tsx
+++ 
b/packages/chrome-extension/src/app/components/openRepoInExternalEditor/openRepoInExternalEditorApp.tsx
@@ -50,7 +50,7 @@ export function renderOpenRepoInExternalEditorApp(
     >
       {ReactDOM.createPortal(
         <OpenInExternalEditorButton className={args.className} 
pageType={args.pageType} />,
-        GitHubPageType.REPO_HOME === args.pageType
+        GitHubPageType.REPO_HOME === args.pageType || 
GitHubPageType.CAN_NOT_BE_DETERMINED_FROM_URL === args.pageType
           ? openRepoInExternalEditorContainerFromRepositoryHome(args.id, 
args.container())
           : openRepoInExternalEditorContainer(args.id, args.container())
       )}
@@ -64,6 +64,7 @@ function cleanup(id: string) {
   
Array.from(document.querySelectorAll(`.${KOGITO_OPEN_REPO_IN_EXTERNAL_EDITOR_CONTAINER_CLASS}.${id}`)).forEach(
     (e) => {
       removeAllChildren(e);
+      e.remove();
     }
   );
 }
diff --git a/packages/chrome-extension/src/app/components/pr/PrEditorsApp.tsx 
b/packages/chrome-extension/src/app/components/pr/PrEditorsApp.tsx
index 33b0311bc83..394bfad5775 100644
--- a/packages/chrome-extension/src/app/components/pr/PrEditorsApp.tsx
+++ b/packages/chrome-extension/src/app/components/pr/PrEditorsApp.tsx
@@ -18,14 +18,18 @@
  */
 
 import * as React from "react";
-import { useEffect, useState } from "react";
+import { useCallback, useEffect, useState } from "react";
 import { useGlobals } from "../common/GlobalContext";
 import { EditorEnvelopeLocator } from "@kie-tools-core/editor/dist/api";
 import { Dependencies } from "../../Dependencies";
 import { getOriginalFilePath, IsolatedPrEditor, PrInfo } from 
"./IsolatedPrEditor";
 import { Logger } from "../../../Logger";
+import { GitHubPageType } from "../../github/GitHubPageType";
 
-export function PrEditorsApp(props: { prInfo: PrInfo }) {
+export function PrEditorsApp(props: {
+  prInfo: PrInfo;
+  pageType: GitHubPageType.PR_COMMITS | GitHubPageType.PR_FILES | 
GitHubPageType.PR_HOME;
+}) {
   const globals = useGlobals();
 
   const [prFileContainers, setPrFileContainers] = useState<HTMLElement[]>([]);
@@ -34,6 +38,16 @@ export function PrEditorsApp(props: { prInfo: PrInfo }) {
     setPrFileContainers(supportedPrFileElements(globals.logger, 
globals.envelopeLocator, globals.dependencies));
   }, [globals.dependencies, globals.envelopeLocator, globals.logger]);
 
+  const mutationObserverTargetNode = useCallback(() => {
+    if (props.pageType === GitHubPageType.PR_COMMITS) {
+      return globals.dependencies.all.pr__commitsMutationObserverTarget()!;
+    } else if (props.pageType === GitHubPageType.PR_FILES) {
+      return globals.dependencies.all.pr__filesMutationObserverTarget()!;
+    } else {
+      return globals.dependencies.all.pr__homeMutationObserverTarget()!;
+    }
+  }, [globals.dependencies.all, props.pageType]);
+
   useEffect(() => {
     const observer = new MutationObserver((mutations) => {
       const addedNodes = mutations.reduce((l, r) => [...l, 
...Array.from(r.addedNodes)], []);
@@ -51,7 +65,7 @@ export function PrEditorsApp(props: { prInfo: PrInfo }) {
       setPrFileContainers(newContainers);
     });
 
-    observer.observe(globals.dependencies.all.pr__mutationObserverTarget()!, {
+    observer.observe(mutationObserverTargetNode(), {
       childList: true,
       subtree: true,
     });
@@ -59,7 +73,7 @@ export function PrEditorsApp(props: { prInfo: PrInfo }) {
     return () => {
       observer.disconnect();
     };
-  }, [globals.dependencies, globals.envelopeLocator, globals.logger, 
prFileContainers]);
+  }, [globals.dependencies, globals.envelopeLocator, globals.logger, 
mutationObserverTargetNode, prFileContainers]);
 
   return (
     <>
diff --git a/packages/chrome-extension/src/app/components/pr/prEditors.tsx 
b/packages/chrome-extension/src/app/components/pr/prEditors.tsx
index 0d97140abd0..39437ffeea7 100644
--- a/packages/chrome-extension/src/app/components/pr/prEditors.tsx
+++ b/packages/chrome-extension/src/app/components/pr/prEditors.tsx
@@ -33,7 +33,13 @@ import { PrInfo } from "./IsolatedPrEditor";
 import { OpenInExternalEditorButton } from 
"../openRepoInExternalEditor/OpenInExternalEditorButton";
 import { GitHubPageType } from "../../github/GitHubPageType";
 
-export function renderPrEditorsApp(args: Globals) {
+export function renderPrEditorsApp(
+  args: Globals & {
+    className: string;
+    pageType: GitHubPageType.PR_COMMITS | GitHubPageType.PR_FILES | 
GitHubPageType.PR_HOME;
+    container: () => HTMLElement;
+  }
+) {
   // Necessary because GitHub apparently "caches" DOM structures between 
changes on History.
   // Without this method you can observe duplicated elements when using 
back/forward browser buttons.
   cleanup(args.id);
@@ -49,10 +55,10 @@ export function renderPrEditorsApp(args: Globals) {
       resourceContentServiceFactory={args.resourceContentServiceFactory}
       externalEditorManager={args.externalEditorManager}
     >
-      <PrEditorsApp prInfo={parsePrInfo(args.dependencies)} />
+      <PrEditorsApp prInfo={parsePrInfo(args.dependencies)} 
pageType={args.pageType} />
       {ReactDOM.createPortal(
-        <OpenInExternalEditorButton className={"btn btn-sm"} 
pageType={GitHubPageType.PR_FILES_OR_COMMITS} />,
-        openRepoInExternalEditorContainer(args.id, 
args.dependencies.openRepoInExternalEditor.buttonContainerOnPrs()!)
+        <OpenInExternalEditorButton className={args.className} 
pageType={args.pageType} />,
+        openRepoInExternalEditorContainer(args.id, args.container()!)
       )}
     </Main>,
     createAndGetMainContainer(args.id, args.dependencies.all.body()),
@@ -102,6 +108,7 @@ function cleanup(id: string) {
   
Array.from(document.querySelectorAll(`.${KOGITO_OPEN_REPO_IN_EXTERNAL_EDITOR_CONTAINER_CLASS}.${id}`)).forEach(
     (e) => {
       removeAllChildren(e);
+      e.remove();
     }
   );
 }
diff --git 
a/packages/chrome-extension/src/app/components/single/singleEditorView.tsx 
b/packages/chrome-extension/src/app/components/single/singleEditorView.tsx
index 1bbcbc60697..2633714658c 100644
--- a/packages/chrome-extension/src/app/components/single/singleEditorView.tsx
+++ b/packages/chrome-extension/src/app/components/single/singleEditorView.tsx
@@ -57,7 +57,6 @@ export async function renderSingleEditorReadonlyApp(
     args.logger.log(`Doesn't look like the GitHub page is ready yet.`);
     return;
   }
-
   const openFileExtension = extractOpenFileExtension(window.location.href);
   const openFilePath = extractOpenFilePath(window.location.href);
   if (!openFileExtension) {
diff --git a/packages/chrome-extension/src/app/github/GitHubPageType.ts 
b/packages/chrome-extension/src/app/github/GitHubPageType.ts
index b1e7d78d1c0..c030a9e392e 100644
--- a/packages/chrome-extension/src/app/github/GitHubPageType.ts
+++ b/packages/chrome-extension/src/app/github/GitHubPageType.ts
@@ -20,8 +20,10 @@
 export enum GitHubPageType {
   VIEW,
   EDIT,
-  PR_FILES_OR_COMMITS,
-  ANY,
+  PR_FILES,
+  PR_COMMITS,
+  CAN_NOT_BE_DETERMINED_FROM_URL,
+  NOT_SUPPORTED,
   PR_HOME,
   REPO_HOME,
 }
diff --git a/packages/chrome-extension/src/index.ts 
b/packages/chrome-extension/src/index.ts
index 054185bd0a2..6a2d7dbec12 100644
--- a/packages/chrome-extension/src/index.ts
+++ b/packages/chrome-extension/src/index.ts
@@ -91,37 +91,74 @@ function init(globals: Globals) {
   const fileInfo = extractFileInfoFromUrl();
   const pageType = discoverCurrentGitHubPageType();
 
-  if (pageType === GitHubPageType.ANY) {
-    globals.logger.log(`This GitHub page is not supported.`);
+  if (!globals.dependencies.all.octiconMarkGitHub() || pageType === 
GitHubPageType.NOT_SUPPORTED) {
+    globals.logger.warn(
+      `This is not supported GitHub web page. 
'${window.location.origin}${window.location.pathname}'`
+    );
     return;
   }
 
   if (pageType === GitHubPageType.EDIT) {
     renderSingleEditorApp({ ...globals, fileInfo });
   } else if (pageType === GitHubPageType.VIEW) {
-    renderSingleEditorReadonlyApp({
-      ...globals,
-      pageType,
-      className: "btn ml-2 d-none d-md-block",
-      container: () => 
globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoFilesList()!,
-      fileInfo,
-    });
-  } else if (pageType === GitHubPageType.PR_FILES_OR_COMMITS) {
-    renderPrEditorsApp({ ...globals });
-  } else if (pageType === GitHubPageType.PR_HOME) {
-    renderOpenRepoInExternalEditorApp({
-      ...globals,
-      pageType,
-      className: "btn btn-sm",
-      container: () => 
globals.dependencies.openRepoInExternalEditor.buttonContainerOnPrs()!,
-    });
+    if 
(!globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoFilesList())
 {
+      globals.logger.warn(
+        "The extension stopped working for this asset view. Please be sure you 
explore the asset with the latest GitHub instance."
+      );
+    } else {
+      renderSingleEditorReadonlyApp({
+        ...globals,
+        pageType,
+        className: "btn ml-2 d-none d-md-block",
+        container: () => 
globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoFilesList()!,
+        fileInfo,
+      });
+    }
+  } else if (
+    pageType === GitHubPageType.PR_HOME ||
+    pageType === GitHubPageType.PR_FILES ||
+    pageType === GitHubPageType.PR_COMMITS
+  ) {
+    if (!globals.dependencies.openRepoInExternalEditor.buttonContainerOnPrs()) 
{
+      globals.logger.warn(
+        "The extension stopped working for this pull request view. Please be 
sure you explore the pull request on the latest GitHub instance."
+      );
+    } else {
+      renderPrEditorsApp({
+        ...globals,
+        pageType,
+        className: "btn btn-sm",
+        container: () => 
globals.dependencies.openRepoInExternalEditor.buttonContainerOnPrs()!,
+      });
+    }
   } else if (pageType === GitHubPageType.REPO_HOME) {
-    renderOpenRepoInExternalEditorApp({
-      ...globals,
-      pageType,
-      className: "btn btn-sm",
-      container: () => 
globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoHome()!,
-    });
+    if 
(!globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoHome()) {
+      globals.logger.warn(
+        "The extension stopped working for this repository view. Please be 
sure you explore the repository on the latest GitHub instance."
+      );
+    } else {
+      renderOpenRepoInExternalEditorApp({
+        ...globals,
+        pageType,
+        className: "btn btn-sm",
+        container: () => 
globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoHome()!,
+      });
+    }
+  } else if (pageType === GitHubPageType.CAN_NOT_BE_DETERMINED_FROM_URL) {
+    // if user uses [GITHUBINSTANCE_BASE_URL]/[ORG]/[REPO] we can not 
determine it from the url, but it may be still valid scenario for this 
chrome-extension
+    if 
(!globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoHome()) {
+      globals.logger.warn(
+        `The extension stopped working for this view 
'${window.location.origin}${window.location.pathname}'. Please be sure you 
explore repository, asset or pull request on the latest GitHub instance.`
+      );
+    } else {
+      // presence of the 'buttonContainerOnRepoHome' locator should mean, user 
is really on the repository home screen view
+      renderOpenRepoInExternalEditorApp({
+        ...globals,
+        pageType,
+        className: "btn btn-sm",
+        container: () => 
globals.dependencies.openRepoInExternalEditor.buttonContainerOnRepoHome()!,
+      });
+    }
   } else {
     throw new Error(`Unknown GitHubPageType ${pageType}`);
   }
@@ -177,27 +214,33 @@ export function discoverCurrentGitHubPageType() {
     return GitHubPageType.VIEW;
   }
 
-  const isOrgSlashRepo = window.location.pathname.split("/").length === 3;
   const isOrgSlashRepoSlashTreeSlashName =
     window.location.pathname.split("/tree/").length === 2 && 
!window.location.pathname.split("/tree/")[1].includes("/");
 
-  if (isOrgSlashRepo || isOrgSlashRepoSlashTreeSlashName) {
+  if (isOrgSlashRepoSlashTreeSlashName) {
     return GitHubPageType.REPO_HOME;
   }
 
   if (pathnameMatches(`.*/.*/pull/[0-9]+/files.*`)) {
-    return GitHubPageType.PR_FILES_OR_COMMITS;
+    return GitHubPageType.PR_FILES;
   }
 
   if (pathnameMatches(`.*/.*/pull/[0-9]+/commits.*`)) {
-    return GitHubPageType.PR_FILES_OR_COMMITS;
+    return GitHubPageType.PR_COMMITS;
   }
 
-  if (pathnameMatches(`.*/.*/pull/[0-9]+.*`)) {
+  if (pathnameMatches(`^.*/.*/pull/[0-9]+$`)) {
     return GitHubPageType.PR_HOME;
   }
 
-  return GitHubPageType.ANY;
+  if (["/tree/", "/pull/"].some((pathnamePart) => 
window.location.pathname.includes(pathnamePart))) {
+    // if pathanme containing one of these substrings and didn't match 
previous `if` statements, then it is not supperted by our extension
+    // .../tree/main/some/folders/only
+    // .../pull/1/checks
+    return GitHubPageType.NOT_SUPPORTED;
+  }
+
+  return GitHubPageType.CAN_NOT_BE_DETERMINED_FROM_URL;
 }
 
 export * from "./ExternalEditorManager";
diff --git a/packages/chrome-extension/tests/index.test.ts 
b/packages/chrome-extension/tests/index.test.ts
index 54b5563ee4c..58161ffd0a8 100644
--- a/packages/chrome-extension/tests/index.test.ts
+++ b/packages/chrome-extension/tests/index.test.ts
@@ -56,7 +56,7 @@ describe("discoverCurrentGitHubPageType", () => {
   test("repo home", async () => {
     setWindowLocationPathname("github.com/organization/repositoryName");
     const type = index.discoverCurrentGitHubPageType();
-    expect(type).toStrictEqual(GitHubPageType.REPO_HOME);
+    expect(type).toStrictEqual(GitHubPageType.CAN_NOT_BE_DETERMINED_FROM_URL);
   });
 
   test("repo home with branch", async () => {
@@ -65,6 +65,12 @@ describe("discoverCurrentGitHubPageType", () => {
     expect(type).toStrictEqual(GitHubPageType.REPO_HOME);
   });
 
+  test("repo folder with branch", async () => {
+    
setWindowLocationPathname("github.com/organization/repositoryName/tree/main/some/folders/here");
+    const type = index.discoverCurrentGitHubPageType();
+    expect(type).toStrictEqual(GitHubPageType.NOT_SUPPORTED);
+  });
+
   test("pr home", async () => {
     setWindowLocationPathname("/org/repo/pull/1");
     const type = index.discoverCurrentGitHubPageType();
@@ -74,18 +80,24 @@ describe("discoverCurrentGitHubPageType", () => {
   test("pr files", async () => {
     setWindowLocationPathname("/org/repo/pull/1/files");
     const type = index.discoverCurrentGitHubPageType();
-    expect(type).toStrictEqual(GitHubPageType.PR_FILES_OR_COMMITS);
+    expect(type).toStrictEqual(GitHubPageType.PR_FILES);
   });
 
   test("pr commit", async () => {
     setWindowLocationPathname("/org/repo/pull/1/commits");
     const type = index.discoverCurrentGitHubPageType();
-    expect(type).toStrictEqual(GitHubPageType.PR_FILES_OR_COMMITS);
+    expect(type).toStrictEqual(GitHubPageType.PR_COMMITS);
+  });
+
+  test("pr checks", async () => {
+    setWindowLocationPathname("/org/repo/pull/1/checks");
+    const type = index.discoverCurrentGitHubPageType();
+    expect(type).toStrictEqual(GitHubPageType.NOT_SUPPORTED);
   });
 
   test("any", async () => {
     setWindowLocationPathname("/");
     const type = index.discoverCurrentGitHubPageType();
-    expect(type).toStrictEqual(GitHubPageType.ANY);
+    expect(type).toStrictEqual(GitHubPageType.CAN_NOT_BE_DETERMINED_FROM_URL);
   });
 });


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@kie.apache.org
For additional commands, e-mail: commits-h...@kie.apache.org

Reply via email to