github-projects/map-labels/utils.ts (24 lines of code) (raw):
import { URL, URLSearchParams } from 'url';
import type { IssueNode } from '../api/projectsGraphQL';
export function getIssueLinks(projectUrl: string, issue: IssueNode) {
const issueBodyUrl = issue.content.url;
const search = new URLSearchParams();
search.set('pane', 'issue');
search.set('itemId', issue.fullDatabaseId.toString());
search.set('issue', issue.content.resourcePath);
const issueRef = new URL(projectUrl);
issueRef.search = search.toString();
return `${issueBodyUrl} | ${issueRef}`;
}
export function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export function merge<T extends object>(target: Partial<T>, source: Partial<T>): Partial<T> {
const merged = { ...target };
(Object.keys(source) as Array<keyof T>).forEach((key) => {
if (source[key] !== undefined) {
merged[key] = source[key];
}
});
return merged;
}