@reviewflow/sdk 6.23.0 → 6.24.0

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.
@@ -2307,6 +2307,8 @@ const createGitHubTransport = (send) => ({
2307
2307
  }
2308
2308
  });
2309
2309
 
2310
+ const pluralOf = (count, word, plural = `${word}s`) => `${String(count)} ${count === 1 ? word : plural}`;
2311
+
2310
2312
  const prStatuses = [
2311
2313
  "approved",
2312
2314
  "changesRequested",
@@ -3163,7 +3165,6 @@ const maxFailedCheckNames = 9;
3163
3165
  const bucketsSilentOnPassedChecks = /* @__PURE__ */ new Set(["changes-requested", "drafts"]);
3164
3166
  const reRequestedBucket = "re-requested-reviews";
3165
3167
  const requestingAttentionGroup = "requesting-attention";
3166
- const counted = (count, one, many) => `${String(count)} ${count === 1 ? one : many}`;
3167
3168
  const people = (logins, viewer) => logins.map((login) => login === viewer ? "you" : `@${login}`).join(", ");
3168
3169
  const failedChecksText = ({
3169
3170
  checksConclusion,
@@ -3191,7 +3192,7 @@ const checksProgressText = ({
3191
3192
  checksRunning
3192
3193
  }, bucketKey) => {
3193
3194
  if (checksRunning > 0) {
3194
- return `${counted(checksRunning, "check", "checks")} running`;
3195
+ return `${pluralOf(checksRunning, "check")} running`;
3195
3196
  }
3196
3197
  return checksConclusion === "passed" && !bucketsSilentOnPassedChecks.has(bucketKey) ? "checks passed" : null;
3197
3198
  };
@@ -3216,7 +3217,7 @@ const reviewflowPrProgress = (pr, context) => {
3216
3217
  const parts = [
3217
3218
  checksProgressText(pr, context.bucketKey),
3218
3219
  pr.approvedBy.length === 0 ? null : `approved by ${people(pr.approvedBy, context.viewer)}`,
3219
- pr.unresolvedThreads ? counted(pr.unresolvedThreads, "unresolved thread", "unresolved threads") : null,
3220
+ pr.unresolvedThreads ? pluralOf(pr.unresolvedThreads, "unresolved thread") : null,
3220
3221
  awaitedText(pr, context)
3221
3222
  ].filter((part) => part !== null);
3222
3223
  return parts.length === 0 ? null : parts.join(" \xB7 ");
@@ -3243,7 +3244,7 @@ const formatPrChanges = ({
3243
3244
  changedFiles,
3244
3245
  additions,
3245
3246
  deletions
3246
- }) => `${counted(changedFiles, "file", "files")} +${String(additions)} \u2212${String(deletions)}`;
3247
+ }) => `${pluralOf(changedFiles, "file")} +${String(additions)} \u2212${String(deletions)}`;
3247
3248
 
3248
3249
  const lingerMs = 5 * 6e4;
3249
3250
  const boardReadDelayMs = 3e3;
@@ -3505,5 +3506,5 @@ const insertCheckoutEntry = (source, ownerRepo) => {
3505
3506
  return { source: text, cursor: value };
3506
3507
  };
3507
3508
 
3508
- export { accountOfOwnerRepo, applyPullRequestEdit, applyStreamEvent, applySuggestionsToText, assembleBoard, boardReadDelayMs, buildPrQuery, changedPullRequestParts, checkOutcomes, checksFromReviewflow, coAuthorTrailers, commitSuggestions, createGitHubTransport, createReviewflowClient, createReviewflowFollower, diffLines, diffPaths, diffThemeNames, diffThemeOptions, diffThemes, editPullRequest, fail, fetchCompareDiff, fetchPullRequestCandidates, fetchPullRequestHead, fetchPullRequestPart, fetchPullRequestRevisions, formatPrChanges, formatRelativeDate, insertCheckoutEntry, interpretGraphql, isAttachablePath, isDiffTheme, isDiffWhitespace, isPullRequestOnBoard, isPullRequestPart, isPullRequestReactionContent, isReviewflowFailure, lingerMs, maxExtraPagesPerBucket, maxFailedCheckNames, maxLookupTargets, maxRetryMs, parsePrQueryResponse, parsePullRequestCandidates, parsePullRequestChecks, parsePullRequestCommits, parsePullRequestDetail, parsePullRequestEdit, parsePullRequestFiles, parsePullRequestRevisions, parsePullRequestTimeline, parseSuggestions, partFingerprint, planSuggestions, prFields, prHasConflicts, prNumberOf, prStatus, prStatusLabels, prStatuses, prUrl, pullRequestCandidatesQuery, pullRequestChecksQuery, pullRequestCommitsQuery, pullRequestDetailQuery, pullRequestEditMovesBoard, pullRequestFilesQuery, pullRequestHeadQuery, pullRequestParts, pullRequestPartsStaleAfter, pullRequestReactionContents, pullRequestRevisionsQuery, pullRequestTimelineQuery, readAccountBoards, readPrDetail, readReviewflowStream, reconnectDelayMs, responseFailure, restErrorMessage, reviewflowErrorCode, reviewflowPrChangesRequested, reviewflowPrFailure, reviewflowPrFlowDate, reviewflowPrOwners, reviewflowPrProgress, reviewflowPrStatus, reviewflowReviewDecisions, splitOwnerRepo, streamClosedWithinDays, streamIdleTimeoutMs, subjectsOf, suggestionCommitRefusal, suggestionOriginalLines, suggestionRangesOverlap, toBoardPr, toFetchedPr, withAccountBoard, withFileViewed };
3509
+ export { accountOfOwnerRepo, applyPullRequestEdit, applyStreamEvent, applySuggestionsToText, assembleBoard, boardReadDelayMs, buildPrQuery, changedPullRequestParts, checkOutcomes, checksFromReviewflow, coAuthorTrailers, commitSuggestions, createGitHubTransport, createReviewflowClient, createReviewflowFollower, diffLines, diffPaths, diffThemeNames, diffThemeOptions, diffThemes, editPullRequest, fail, fetchCompareDiff, fetchPullRequestCandidates, fetchPullRequestHead, fetchPullRequestPart, fetchPullRequestRevisions, formatPrChanges, formatRelativeDate, insertCheckoutEntry, interpretGraphql, isAttachablePath, isDiffTheme, isDiffWhitespace, isPullRequestOnBoard, isPullRequestPart, isPullRequestReactionContent, isReviewflowFailure, lingerMs, maxExtraPagesPerBucket, maxFailedCheckNames, maxLookupTargets, maxRetryMs, parsePrQueryResponse, parsePullRequestCandidates, parsePullRequestChecks, parsePullRequestCommits, parsePullRequestDetail, parsePullRequestEdit, parsePullRequestFiles, parsePullRequestRevisions, parsePullRequestTimeline, parseSuggestions, partFingerprint, planSuggestions, pluralOf, prFields, prHasConflicts, prNumberOf, prStatus, prStatusLabels, prStatuses, prUrl, pullRequestCandidatesQuery, pullRequestChecksQuery, pullRequestCommitsQuery, pullRequestDetailQuery, pullRequestEditMovesBoard, pullRequestFilesQuery, pullRequestHeadQuery, pullRequestParts, pullRequestPartsStaleAfter, pullRequestReactionContents, pullRequestRevisionsQuery, pullRequestTimelineQuery, readAccountBoards, readPrDetail, readReviewflowStream, reconnectDelayMs, responseFailure, restErrorMessage, reviewflowErrorCode, reviewflowPrChangesRequested, reviewflowPrFailure, reviewflowPrFlowDate, reviewflowPrOwners, reviewflowPrProgress, reviewflowPrStatus, reviewflowReviewDecisions, splitOwnerRepo, streamClosedWithinDays, streamIdleTimeoutMs, subjectsOf, suggestionCommitRefusal, suggestionOriginalLines, suggestionRangesOverlap, toBoardPr, toFetchedPr, withAccountBoard, withFileViewed };
3509
3510
  //# sourceMappingURL=index-browser.es.js.map
@@ -2307,6 +2307,8 @@ const createGitHubTransport = (send) => ({
2307
2307
  }
2308
2308
  });
2309
2309
 
2310
+ const pluralOf = (count, word, plural = `${word}s`) => `${String(count)} ${count === 1 ? word : plural}`;
2311
+
2310
2312
  const prStatuses = [
2311
2313
  "approved",
2312
2314
  "changesRequested",
@@ -3163,7 +3165,6 @@ const maxFailedCheckNames = 9;
3163
3165
  const bucketsSilentOnPassedChecks = /* @__PURE__ */ new Set(["changes-requested", "drafts"]);
3164
3166
  const reRequestedBucket = "re-requested-reviews";
3165
3167
  const requestingAttentionGroup = "requesting-attention";
3166
- const counted = (count, one, many) => `${String(count)} ${count === 1 ? one : many}`;
3167
3168
  const people = (logins, viewer) => logins.map((login) => login === viewer ? "you" : `@${login}`).join(", ");
3168
3169
  const failedChecksText = ({
3169
3170
  checksConclusion,
@@ -3191,7 +3192,7 @@ const checksProgressText = ({
3191
3192
  checksRunning
3192
3193
  }, bucketKey) => {
3193
3194
  if (checksRunning > 0) {
3194
- return `${counted(checksRunning, "check", "checks")} running`;
3195
+ return `${pluralOf(checksRunning, "check")} running`;
3195
3196
  }
3196
3197
  return checksConclusion === "passed" && !bucketsSilentOnPassedChecks.has(bucketKey) ? "checks passed" : null;
3197
3198
  };
@@ -3216,7 +3217,7 @@ const reviewflowPrProgress = (pr, context) => {
3216
3217
  const parts = [
3217
3218
  checksProgressText(pr, context.bucketKey),
3218
3219
  pr.approvedBy.length === 0 ? null : `approved by ${people(pr.approvedBy, context.viewer)}`,
3219
- pr.unresolvedThreads ? counted(pr.unresolvedThreads, "unresolved thread", "unresolved threads") : null,
3220
+ pr.unresolvedThreads ? pluralOf(pr.unresolvedThreads, "unresolved thread") : null,
3220
3221
  awaitedText(pr, context)
3221
3222
  ].filter((part) => part !== null);
3222
3223
  return parts.length === 0 ? null : parts.join(" \xB7 ");
@@ -3243,7 +3244,7 @@ const formatPrChanges = ({
3243
3244
  changedFiles,
3244
3245
  additions,
3245
3246
  deletions
3246
- }) => `${counted(changedFiles, "file", "files")} +${String(additions)} \u2212${String(deletions)}`;
3247
+ }) => `${pluralOf(changedFiles, "file")} +${String(additions)} \u2212${String(deletions)}`;
3247
3248
 
3248
3249
  const lingerMs = 5 * 6e4;
3249
3250
  const boardReadDelayMs = 3e3;
@@ -3505,5 +3506,5 @@ const insertCheckoutEntry = (source, ownerRepo) => {
3505
3506
  return { source: text, cursor: value };
3506
3507
  };
3507
3508
 
3508
- export { accountOfOwnerRepo, applyPullRequestEdit, applyStreamEvent, applySuggestionsToText, assembleBoard, boardReadDelayMs, buildPrQuery, changedPullRequestParts, checkOutcomes, checksFromReviewflow, coAuthorTrailers, commitSuggestions, createGitHubTransport, createReviewflowClient, createReviewflowFollower, diffLines, diffPaths, diffThemeNames, diffThemeOptions, diffThemes, editPullRequest, fail, fetchCompareDiff, fetchPullRequestCandidates, fetchPullRequestHead, fetchPullRequestPart, fetchPullRequestRevisions, formatPrChanges, formatRelativeDate, insertCheckoutEntry, interpretGraphql, isAttachablePath, isDiffTheme, isDiffWhitespace, isPullRequestOnBoard, isPullRequestPart, isPullRequestReactionContent, isReviewflowFailure, lingerMs, maxExtraPagesPerBucket, maxFailedCheckNames, maxLookupTargets, maxRetryMs, parsePrQueryResponse, parsePullRequestCandidates, parsePullRequestChecks, parsePullRequestCommits, parsePullRequestDetail, parsePullRequestEdit, parsePullRequestFiles, parsePullRequestRevisions, parsePullRequestTimeline, parseSuggestions, partFingerprint, planSuggestions, prFields, prHasConflicts, prNumberOf, prStatus, prStatusLabels, prStatuses, prUrl, pullRequestCandidatesQuery, pullRequestChecksQuery, pullRequestCommitsQuery, pullRequestDetailQuery, pullRequestEditMovesBoard, pullRequestFilesQuery, pullRequestHeadQuery, pullRequestParts, pullRequestPartsStaleAfter, pullRequestReactionContents, pullRequestRevisionsQuery, pullRequestTimelineQuery, readAccountBoards, readPrDetail, readReviewflowStream, reconnectDelayMs, responseFailure, restErrorMessage, reviewflowErrorCode, reviewflowPrChangesRequested, reviewflowPrFailure, reviewflowPrFlowDate, reviewflowPrOwners, reviewflowPrProgress, reviewflowPrStatus, reviewflowReviewDecisions, splitOwnerRepo, streamClosedWithinDays, streamIdleTimeoutMs, subjectsOf, suggestionCommitRefusal, suggestionOriginalLines, suggestionRangesOverlap, toBoardPr, toFetchedPr, withAccountBoard, withFileViewed };
3509
+ export { accountOfOwnerRepo, applyPullRequestEdit, applyStreamEvent, applySuggestionsToText, assembleBoard, boardReadDelayMs, buildPrQuery, changedPullRequestParts, checkOutcomes, checksFromReviewflow, coAuthorTrailers, commitSuggestions, createGitHubTransport, createReviewflowClient, createReviewflowFollower, diffLines, diffPaths, diffThemeNames, diffThemeOptions, diffThemes, editPullRequest, fail, fetchCompareDiff, fetchPullRequestCandidates, fetchPullRequestHead, fetchPullRequestPart, fetchPullRequestRevisions, formatPrChanges, formatRelativeDate, insertCheckoutEntry, interpretGraphql, isAttachablePath, isDiffTheme, isDiffWhitespace, isPullRequestOnBoard, isPullRequestPart, isPullRequestReactionContent, isReviewflowFailure, lingerMs, maxExtraPagesPerBucket, maxFailedCheckNames, maxLookupTargets, maxRetryMs, parsePrQueryResponse, parsePullRequestCandidates, parsePullRequestChecks, parsePullRequestCommits, parsePullRequestDetail, parsePullRequestEdit, parsePullRequestFiles, parsePullRequestRevisions, parsePullRequestTimeline, parseSuggestions, partFingerprint, planSuggestions, pluralOf, prFields, prHasConflicts, prNumberOf, prStatus, prStatusLabels, prStatuses, prUrl, pullRequestCandidatesQuery, pullRequestChecksQuery, pullRequestCommitsQuery, pullRequestDetailQuery, pullRequestEditMovesBoard, pullRequestFilesQuery, pullRequestHeadQuery, pullRequestParts, pullRequestPartsStaleAfter, pullRequestReactionContents, pullRequestRevisionsQuery, pullRequestTimelineQuery, readAccountBoards, readPrDetail, readReviewflowStream, reconnectDelayMs, responseFailure, restErrorMessage, reviewflowErrorCode, reviewflowPrChangesRequested, reviewflowPrFailure, reviewflowPrFlowDate, reviewflowPrOwners, reviewflowPrProgress, reviewflowPrStatus, reviewflowReviewDecisions, splitOwnerRepo, streamClosedWithinDays, streamIdleTimeoutMs, subjectsOf, suggestionCommitRefusal, suggestionOriginalLines, suggestionRangesOverlap, toBoardPr, toFetchedPr, withAccountBoard, withFileViewed };
3509
3510
  //# sourceMappingURL=index-node.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reviewflow/sdk",
3
- "version": "6.23.0",
3
+ "version": "6.24.0",
4
4
  "description": "pull request model shared by the reviewflow app server and its ui: diff and api types, pure utils, the GitHub layer behind an injected transport, and (node only) reading a diff from a local checkout (@reviewflow/sdk/git) and editing a text file in place (@reviewflow/sdk/files)",
5
5
  "keywords": [
6
6
  "code-review",
package/src/index.ts CHANGED
@@ -20,6 +20,7 @@ export type * from "./api/pullRequest.ts";
20
20
  export type * from "./types/entities.ts";
21
21
  export type * from "./types/ids.ts";
22
22
  export type * from "./types/reviewflow.ts";
23
+ export * from "./utils/pluralOf.ts";
23
24
  export * from "./utils/prStatus.ts";
24
25
  export * from "./utils/pullRequestEdit.ts";
25
26
  export * from "./utils/pullRequestPart.ts";
@@ -1,4 +1,5 @@
1
1
  import type { ReviewflowPrChanges } from "../types/reviewflow.ts";
2
+ import { pluralOf } from "../utils/pluralOf.ts";
2
3
  import type { FormatRelativeDateOptions } from "../utils/relativeDate.ts";
3
4
  import { formatRelativeDate } from "../utils/relativeDate.ts";
4
5
  import type { ReviewflowBoardPr } from "./board.ts";
@@ -26,9 +27,6 @@ const reRequestedBucket = "re-requested-reviews";
26
27
  /** someone else's pull request requests a review, the operator's awaits one */
27
28
  const requestingAttentionGroup = "requesting-attention";
28
29
 
29
- const counted = (count: number, one: string, many: string): string =>
30
- `${String(count)} ${count === 1 ? one : many}`;
31
-
32
30
  const people = (logins: string[], viewer: string | null): string =>
33
31
  logins.map((login) => (login === viewer ? "you" : `@${login}`)).join(", ");
34
32
 
@@ -81,7 +79,7 @@ const checksProgressText = (
81
79
  bucketKey: string,
82
80
  ): string | null => {
83
81
  if (checksRunning > 0) {
84
- return `${counted(checksRunning, "check", "checks")} running`;
82
+ return `${pluralOf(checksRunning, "check")} running`;
85
83
  }
86
84
  return checksConclusion === "passed" &&
87
85
  !bucketsSilentOnPassedChecks.has(bucketKey)
@@ -133,7 +131,7 @@ export const reviewflowPrProgress = (
133
131
  ? null
134
132
  : `approved by ${people(pr.approvedBy, context.viewer)}`,
135
133
  pr.unresolvedThreads
136
- ? counted(pr.unresolvedThreads, "unresolved thread", "unresolved threads")
134
+ ? pluralOf(pr.unresolvedThreads, "unresolved thread")
137
135
  : null,
138
136
  awaitedText(pr, context),
139
137
  ].filter((part) => part !== null);
@@ -181,4 +179,4 @@ export const formatPrChanges = ({
181
179
  additions,
182
180
  deletions,
183
181
  }: ReviewflowPrChanges): string =>
184
- `${counted(changedFiles, "file", "files")} +${String(additions)} −${String(deletions)}`;
182
+ `${pluralOf(changedFiles, "file")} +${String(additions)} −${String(deletions)}`;
@@ -0,0 +1,6 @@
1
+ /** "1 file", "2 files"; `plural` defaults to `word` + "s". */
2
+ export const pluralOf = (
3
+ count: number,
4
+ word: string,
5
+ plural = `${word}s`,
6
+ ): string => `${String(count)} ${count === 1 ? word : plural}`;