Skip to content

Commit

Permalink
feat: resolve embedded repos overview data
Browse files Browse the repository at this point in the history
  • Loading branch information
EnixCoda committed Dec 15, 2023
1 parent 69cd8d7 commit d29f935
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 12 deletions.
45 changes: 36 additions & 9 deletions src/platforms/GitHub/DOMHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,28 +27,33 @@ const selectors = {
pathContext: '[data-testid="breadcrumbs"]',
pathContextFileName: '[data-testid="breadcrumbs-filename"]',
pathContextScreenReaderHeading: '[data-testid="screen-reader-heading"]',
embeddedData: {
app: 'script[type="application/json"][data-target="react-app.embeddedData"]',
reposOverview:
'[partial-name="repos-overview"] script[type="application/json"][data-target="react-partial.embeddedData"]',
},
},
}

export function resolveMetaFromDOMJSON(): { defaultBranch: string; metaData: MetaData } | void {
// in code page, there is a JSON script tag in DOM with meta data
const json = $('script[type="application/json"][data-target="react-app.embeddedData"]', e => {
const getDOMJSON = (selector: string) =>
$(selector, e => {
try {
return JSON.parse(e.textContent || '')
} catch (error) {
return null
}
})
if (!json) return

const { payload } = json
if (!payload) return

function getMetaFromPayload(payload: any) {
const { repo, refInfo } = payload
if (!repo || !refInfo) return

const { defaultBranch, name: repoName, ownerLogin: userName } = repo
const { name: branchName } = refInfo

// TODO: use runtime type check
if (!defaultBranch || !repoName || !userName || !branchName) return

return {
defaultBranch,
metaData: {
Expand All @@ -59,8 +64,28 @@ export function resolveMetaFromDOMJSON(): { defaultBranch: string; metaData: Met
}
}

// in code page, there is a JSON script tag in DOM with meta data
function resolveEmbeddedAppData() {
const appData = getDOMJSON(selectors.globalNavigation.embeddedData.app)
const payload = appData?.payload
if (payload) return getMetaFromPayload(payload)
}

function resolveEmbeddedReposOverviewData() {
const reposOverviewData = getDOMJSON(selectors.globalNavigation.embeddedData.reposOverview)
const payload = reposOverviewData?.props?.initialPayload
if (payload) return getMetaFromPayload(payload)
}

export function resolveEmbeddedData(): {
defaultBranch: string
metaData: MetaData
} | void {
return resolveEmbeddedAppData() || resolveEmbeddedReposOverviewData()
}

export function resolveMeta(): Partial<MetaData> {
const dataFromJSON = resolveMetaFromDOMJSON()
const dataFromJSON = resolveEmbeddedData()
if (dataFromJSON) return dataFromJSON.metaData

const metaData = {
Expand Down Expand Up @@ -129,7 +154,9 @@ export function getCurrentBranch(passive = false) {
].join()
const branchButtonElement = $(selectedBranchButtonSelector)
if (branchButtonElement) {
const branchNameSpanElement = branchButtonElement.querySelector('span')
const branchNameSpanElement = branchButtonElement.querySelector(
['.ref-selector-button-text-container', 'span'].join(),
)
if (branchNameSpanElement) {
const partialBranchNameFromInnerText = branchNameSpanElement.textContent?.trim() || ''
if (partialBranchNameFromInnerText && !partialBranchNameFromInnerText.includes('…'))
Expand Down
6 changes: 3 additions & 3 deletions src/platforms/GitHub/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import { resolveGitModules } from 'utils/gitSubmodule'
import { sortFoldersToFront } from 'utils/treeParser'
import * as API from './API'
import * as DOMHelper from './DOMHelper'
import * as URLHelper from './URLHelper'
import { getCommitTreeData } from './getCommitTreeData'
import { getPullRequestTreeData } from './getPullRequestTreeData'
import { useEnterpriseStatBarStyleFix } from './hooks/useEnterpriseStatBarStyleFix'
import { useGitHubAttachCopySnippetButton } from './hooks/useGitHubAttachCopySnippetButton'
import { useGitHubCodeFold } from './hooks/useGitHubCodeFold'
import * as URLHelper from './URLHelper'

export function processTree(tree: TreeNode[]): TreeNode {
// nodes are created from items and put onto tree
Expand Down Expand Up @@ -109,7 +109,7 @@ export const GitHub: Platform = {
}

const { type } = metaFromURL
let branchName
let branchName = metaFromDOM.branchName
if (URLHelper.isInPullPage()) {
branchName = DOMHelper.getIssueTitle()
} else if (URLHelper.isInCommitPage()) {
Expand All @@ -130,7 +130,7 @@ export const GitHub: Platform = {
return metaData
},
async getDefaultBranchName({ userName, repoName }, accessToken) {
const dataFromJSON = DOMHelper.resolveMetaFromDOMJSON()
const dataFromJSON = DOMHelper.resolveEmbeddedData()
if (dataFromJSON?.defaultBranch) return dataFromJSON.defaultBranch

return (await API.getRepoMeta(userName, repoName, accessToken)).default_branch
Expand Down

0 comments on commit d29f935

Please sign in to comment.