@rness/cli 0.21.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/pulse/summary.ts"],"sourcesContent":["import { resolve } from 'node:path'\n\nimport { type Context, type Declared, fromGithub } from '../commands/pulse.ts'\nimport { branchOf, commitsBetween } from '../core/git.ts'\nimport { plansInProgress } from '../core/status.ts'\nimport {\n type NotedIssue,\n forgetNotes,\n forgetStart,\n issuesNoted,\n startOf,\n} from './journal-state.ts'\nimport { githubRepo, journalOf, planIssue } from './note.ts'\n\n/**\n * The session-end summary (spec 0030 §6): the commits since the session's\n * start on the current branch, the branch's pull request, the duration; on\n * each issue the session's notes went to, else on the one plan in progress\n * of its scope when there is a commit. No note of the limit. Loaded\n * through `import()` only.\n */\n\nexport interface SummaryInput {\n c: Context\n /** The board that declares `journal-summary`, and so `journal`. */\n board: Declared\n session: string\n /** The session's scope; null, the root's. */\n scope: string | null\n /** The clone the session worked in: a name of `repos`. */\n clone?: string\n}\n\n/** The commits a summary names; the rest are counted. */\nconst SHOWN = 10\n\nfunction commitsLine(commits: readonly string[]): string {\n if (commits.length === 0) return 'no commit'\n const named = commits\n .slice(0, SHOWN)\n .map((s) => `\\`${s}\\``)\n .join(', ')\n const more = commits.length > SHOWN ? ', …' : ''\n return `${commits.length} commit${commits.length === 1 ? '' : 's'} (${named}${more})`\n}\n\n/** The issue of the one plan in progress of the scope: its implementation issue in `repo` mode when there is one. */\nasync function onePlan(\n input: SummaryInput,\n repo: { owner: string; name: string } | null\n): Promise<NotedIssue[]> {\n const { c } = input\n const plans = await plansInProgress(\n { root: c.root, rnessDir: c.rnessDir },\n c.manifest,\n input.scope\n )\n const plan = plans.length === 1 ? plans[0] : undefined\n if (plan === undefined) return []\n if (journalOf([input.board])?.journal.to === 'repo' && repo !== null) {\n const there = await fromGithub(\n c.provider.journalIssue(repo.owner, repo.name, plan)\n )\n if (there !== null)\n return [\n { id: there.id, reference: `${there.repository}#${there.number}` },\n ]\n }\n const issue = await planIssue(c, input.board, plan)\n return [{ id: issue.id, reference: `${issue.repository}#${issue.number}` }]\n}\n\n/** Posts the summary; the issues it went to, none when skipped. The session's records are forgotten either way. */\nexport async function postSummary(input: SummaryInput): Promise<string[]> {\n const { c, session } = input\n const url =\n input.clone === undefined ? undefined : c.manifest.repos[input.clone]?.url\n const dir =\n url === undefined || input.clone === undefined\n ? null\n : resolve(c.root, 'org', input.clone)\n try {\n const start = dir === null ? null : await startOf(dir, session)\n const commits =\n dir === null || start === null\n ? []\n : await commitsBetween(dir, start.head).catch(() => [])\n const found = url === undefined ? null : githubRepo(url)\n // A repository of another owner is not the workspace's (spec 0030 §3.4).\n const repo =\n found !== null && found.owner.toLowerCase() === c.org.toLowerCase()\n ? found\n : null\n const noted = await issuesNoted(c.rnessDir, session)\n const targets =\n noted.length > 0\n ? noted\n : commits.length > 0\n ? await onePlan(input, repo)\n : []\n if (targets.length === 0) return []\n\n const branch = dir === null ? null : await branchOf(dir)\n const pr =\n repo === null || branch === null\n ? null\n : await fromGithub(\n c.provider.pullRequestFor(repo.owner, repo.name, branch)\n )\n const id = session.split(' · ').at(-1) ?? session\n const minutes =\n start === null\n ? null\n : Math.max(1, Math.round((Date.now() - start.at) / 60_000))\n const details = [\n ...(branch === null || start === null\n ? []\n : [`Branch \\`${branch}\\` · ${commitsLine(commits)}`]),\n ...(pr === null || repo === null\n ? []\n : [\n `Pull request ${repo.owner}/${repo.name}#${pr.number} (${pr.state.toLowerCase()})`,\n ]),\n ]\n const body = [\n [\n '**Session summary**',\n session,\n ...(minutes === null ? [] : [`${minutes} min`]),\n ].join(' · '),\n '',\n ...(details.length === 0 ? [] : [...details, '']),\n `<!-- rness note ${id} summary -->`,\n ].join('\\n')\n for (const t of targets) await fromGithub(c.provider.comment(t.id, body))\n return targets.map((t) => t.reference)\n } finally {\n if (dir !== null) await forgetStart(dir, session)\n await forgetNotes(c.rnessDir, session)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,eAAe;AAkCxB,IAAM,QAAQ;AAEd,SAAS,YAAY,SAAoC;AACvD,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,QAAQ,QACX,MAAM,GAAG,KAAK,EACd,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,EACrB,KAAK,IAAI;AACZ,QAAM,OAAO,QAAQ,SAAS,QAAQ,aAAQ;AAC9C,SAAO,GAAG,QAAQ,MAAM,UAAU,QAAQ,WAAW,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG,IAAI;AACpF;AAGA,eAAe,QACb,OACA,MACuB;AACvB,QAAM,EAAE,EAAE,IAAI;AACd,QAAM,QAAQ,MAAM;AAAA,IAClB,EAAE,MAAM,EAAE,MAAM,UAAU,EAAE,SAAS;AAAA,IACrC,EAAE;AAAA,IACF,MAAM;AAAA,EACR;AACA,QAAM,OAAO,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI;AAC7C,MAAI,SAAS,OAAW,QAAO,CAAC;AAChC,MAAI,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,OAAO,UAAU,SAAS,MAAM;AACpE,UAAM,QAAQ,MAAM;AAAA,MAClB,EAAE,SAAS,aAAa,KAAK,OAAO,KAAK,MAAM,IAAI;AAAA,IACrD;AACA,QAAI,UAAU;AACZ,aAAO;AAAA,QACL,EAAE,IAAI,MAAM,IAAI,WAAW,GAAG,MAAM,UAAU,IAAI,MAAM,MAAM,GAAG;AAAA,MACnE;AAAA,EACJ;AACA,QAAM,QAAQ,MAAM,UAAU,GAAG,MAAM,OAAO,IAAI;AAClD,SAAO,CAAC,EAAE,IAAI,MAAM,IAAI,WAAW,GAAG,MAAM,UAAU,IAAI,MAAM,MAAM,GAAG,CAAC;AAC5E;AAGA,eAAsB,YAAY,OAAwC;AACxE,QAAM,EAAE,GAAG,QAAQ,IAAI;AACvB,QAAM,MACJ,MAAM,UAAU,SAAY,SAAY,EAAE,SAAS,MAAM,MAAM,KAAK,GAAG;AACzE,QAAM,MACJ,QAAQ,UAAa,MAAM,UAAU,SACjC,OACA,QAAQ,EAAE,MAAM,OAAO,MAAM,KAAK;AACxC,MAAI;AACF,UAAM,QAAQ,QAAQ,OAAO,OAAO,MAAM,QAAQ,KAAK,OAAO;AAC9D,UAAM,UACJ,QAAQ,QAAQ,UAAU,OACtB,CAAC,IACD,MAAM,eAAe,KAAK,MAAM,IAAI,EAAE,MAAM,MAAM,CAAC,CAAC;AAC1D,UAAM,QAAQ,QAAQ,SAAY,OAAO,WAAW,GAAG;AAEvD,UAAM,OACJ,UAAU,QAAQ,MAAM,MAAM,YAAY,MAAM,EAAE,IAAI,YAAY,IAC9D,QACA;AACN,UAAM,QAAQ,MAAM,YAAY,EAAE,UAAU,OAAO;AACnD,UAAM,UACJ,MAAM,SAAS,IACX,QACA,QAAQ,SAAS,IACf,MAAM,QAAQ,OAAO,IAAI,IACzB,CAAC;AACT,QAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAElC,UAAM,SAAS,QAAQ,OAAO,OAAO,MAAM,SAAS,GAAG;AACvD,UAAM,KACJ,SAAS,QAAQ,WAAW,OACxB,OACA,MAAM;AAAA,MACJ,EAAE,SAAS,eAAe,KAAK,OAAO,KAAK,MAAM,MAAM;AAAA,IACzD;AACN,UAAM,KAAK,QAAQ,MAAM,QAAK,EAAE,GAAG,EAAE,KAAK;AAC1C,UAAM,UACJ,UAAU,OACN,OACA,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,IAAI,IAAI,MAAM,MAAM,GAAM,CAAC;AAC9D,UAAM,UAAU;AAAA,MACd,GAAI,WAAW,QAAQ,UAAU,OAC7B,CAAC,IACD,CAAC,YAAY,MAAM,WAAQ,YAAY,OAAO,CAAC,EAAE;AAAA,MACrD,GAAI,OAAO,QAAQ,SAAS,OACxB,CAAC,IACD;AAAA,QACE,gBAAgB,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;AAAA,MACjF;AAAA,IACN;AACA,UAAM,OAAO;AAAA,MACX;AAAA,QACE;AAAA,QACA;AAAA,QACA,GAAI,YAAY,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM;AAAA,MAC/C,EAAE,KAAK,QAAK;AAAA,MACZ;AAAA,MACA,GAAI,QAAQ,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE;AAAA,MAC/C,mBAAmB,EAAE;AAAA,IACvB,EAAE,KAAK,IAAI;AACX,eAAW,KAAK,QAAS,OAAM,WAAW,EAAE,SAAS,QAAQ,EAAE,IAAI,IAAI,CAAC;AACxE,WAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,SAAS;AAAA,EACvC,UAAE;AACA,QAAI,QAAQ,KAAM,OAAM,YAAY,KAAK,OAAO;AAChD,UAAM,YAAY,EAAE,UAAU,OAAO;AAAA,EACvC;AACF;","names":[]}