Files
Reactive-Resume/tooling/issue-labels.mjs
T

47 lines
1.2 KiB
JavaScript

import assert from "node:assert/strict";
const fields = [
[
"Product variant",
{
Cloud: "deployment: cloud",
"Self-hosted": "deployment: self-hosted",
},
],
[
"Area",
{
"Resume builder & data": "area: builder",
"Templates, preview & export": "area: rendering",
"Accounts & sharing": "area: account",
"AI & Agent": "area: ai",
"Language & localization": "area: localization",
"Self-hosting": "area: self-hosting",
"API & integrations": "area: integrations",
"Applications & cover letters": "area: applications",
},
],
];
export function getIssueLabels(body) {
return fields.flatMap(([heading, labels]) => {
const answer = body.match(new RegExp(`^### ${heading}\\r?\\n\\r?\\n([^\\r\\n]+)$`, "m"))?.[1].trim();
return answer && labels[answer] ? [labels[answer]] : [];
});
}
if (import.meta.main) {
const issueBody = `### Product variant
Self-hosted
### Area
Templates, preview & export`;
assert.deepEqual(getIssueLabels(issueBody), ["deployment: self-hosted", "area: rendering"]);
assert.deepEqual(getIssueLabels("### Area\n\nOther / unsure"), []);
assert.deepEqual(getIssueLabels("#### Area\n\nAI & Agent"), []);
assert.deepEqual(getIssueLabels("prefix ### Area\n\nAI & Agent"), []);
}