497 lines · 18.8 KB
import { createServerFn } from "@tanstack/react-start";
import { deleteIssueComment } from "~/server/comment-removal";
import { resolveMentions } from "~/server/mentions";
import type { MentionMap } from "~/server/mentions";
import { limitBrowse, limitWrite, MAX_PAGE } from "~/server/limits";
import { z } from "zod";
import { requireViewer, viewerMiddleware } from "./middleware";
import { first, placeholders, run } from "~/server/db";
import { repoDb, stmt } from "~/server/scoped-db";
import { registerLocator } from "~/server/scoped-db/locators";
import { scopedId } from "~/server/scoped-db/ids";
import { repoActivityStatement } from "~/server/issue-scope";
import { captureServerEvent } from "~/server/analytics";
import { requireRepoAccess, requireRepoMutation } from "~/server/repos";
import type { RepoAccess } from "~/server/repos";
import {
  allocateIssueNumber,
  indexIssue,
  loadIssue,
  setIssueState,
  touchIssue,
  applyLabels,
  issueUrl,
} from "~/server/issues";
import type { IssueRow } from "~/server/issues";
import { createIssueComment, notifyIssueThread } from "~/server/issue-comments";
import { addIssueEvent } from "~/server/pulls";
import { afterPullChange } from "~/server/pull-events";
import { accountOrGhost, accountsById, SYSTEM_ACTOR } from "~/server/people";
import { renderMarkdown } from "~/server/markdown";
import { reactionSummaries } from "~/server/reactions";
import { templateLabelsFor } from "~/server/issue-templates";
import type { ReactionSummary } from "~/lib/reactions";
import { emitWebhook } from "~/server/events/emit";
import { badRequest, forbidden, notFoundError } from "~/server/errors";
import { markdownBody, repoRef, title } from "~/lib/validation";
import type { JsonValue, RepoRow } from "~/lib/types";

const PAGE_SIZE = 25;