-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
62 lines (50 loc) · 1.51 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import { DateTime } from 'luxon';
export default class GitHubDriver {
#octokit;
constructor(octokit) {
this.#octokit = octokit;
}
async hasReminder(repository, reminder) {
const { owner, name, repo } = repository;
const labels = this.#getKnuffLabels(reminder);
const issues = await this.#octokit.issues.listForRepo({
owner,
repo: repo || name,
state: 'all',
labels,
});
return issues.data.length > 0;
}
async createReminder(repository, reminder) {
const { owner, name, repo } = repository;
const { title, body, labels: customLabels = [] } = reminder;
const labels = this.#getLabels(customLabels, reminder);
return this.#octokit.issues.create({
owner,
repo: repo || name,
title,
body,
labels,
});
}
#getLabels(original, reminder) {
const labels = [...original, ...this.#getKnuffLabels(reminder)];
this.#validateLabels(labels);
return labels;
}
#getKnuffLabels(reminder) {
return [this.#getKnuffIdLabel(reminder), this.#getKnuffDateLabel(reminder)];
}
#getKnuffIdLabel(reminder) {
return `knuff:${reminder.id}`;
}
#getKnuffDateLabel(reminder) {
return `knuff:${DateTime.fromJSDate(reminder.date).setZone(reminder.timezone).toFormat('yyyy-MM-dd')}`;
}
#validateLabels(labels) {
const maxLength = 50;
labels.forEach((label) => {
if (label.length > maxLength) throw new Error(`Label '${label}' is longer than the GitHub max length of ${maxLength} characters`);
});
}
}