openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
64 lines (63 loc) • 2.19 kB
JavaScript
import { c as isRecord } from "./record-coerce-DItp3I4t.js";
import { m as readNonBlankString } from "./string-coerce-CIXf7egm.js";
//#region src/gateway/github-remote.ts
/** Parse a GitHub remote in HTTPS, SSH URL, or scp-like form. */
function parseGitHubRemoteUrl(raw) {
const trimmed = raw.trim();
let path;
const scpMatch = /^git@github\.com:(.+)$/i.exec(trimmed);
if (scpMatch) path = scpMatch[1];
else try {
const url = new URL(trimmed);
if (!(url.protocol === "https:" || url.protocol === "http:" || url.protocol === "ssh:") || url.hostname.toLowerCase() !== "github.com") return null;
path = url.pathname;
} catch {
return null;
}
const segments = (path ?? "").split("/").filter(Boolean);
const owner = segments[0];
const repo = segments[1]?.replace(/\.git$/i, "");
if (segments.length !== 2 || !owner || !repo) return null;
return {
owner,
repo
};
}
//#endregion
//#region src/gateway/github-repository-target.ts
function resolveGitHubForkParent(value) {
if (!isRecord(value) || value.fork !== true || !isRecord(value.parent)) return;
const parentOwner = isRecord(value.parent.owner) ? value.parent.owner : void 0;
const owner = readNonBlankString(parentOwner?.login)?.trim();
const repo = readNonBlankString(value.parent.name)?.trim();
return owner && repo ? {
owner,
repo
} : void 0;
}
/** Projects GitHub's repository response into the canonical push/head/base relationship. */
function resolveGitHubRepositoryTarget(value, push) {
if (!isRecord(value)) return;
const defaultBranch = readNonBlankString(value.default_branch)?.trim();
if (value.fork !== true) return defaultBranch ? {
fork: false,
push,
pullRequest: {
...push,
defaultBranch
}
} : void 0;
const parent = resolveGitHubForkParent(value);
const parentRecord = isRecord(value.parent) ? value.parent : void 0;
const parentDefaultBranch = readNonBlankString(parentRecord?.default_branch)?.trim();
return parent && parentDefaultBranch ? {
fork: true,
push,
pullRequest: {
...parent,
defaultBranch: parentDefaultBranch
}
} : void 0;
}
//#endregion
export { resolveGitHubRepositoryTarget as n, parseGitHubRemoteUrl as r, resolveGitHubForkParent as t };