releaseRecord

tcmts.cli.announce.releaseRecord · #lr5i5cp4 · term · runs on the server

uses Buffer

The record announcing a release of this codebase, fetched from sources.

import type { Codebase } from "#codebase/tcmts/cli/codebase";
import { releaseNamespace } from "#codebase/tcmts/cli/libraries";
import { UsageError } from "#codebase/tcmts/cli/ui";
import { IR_VERSION } from "#codebase/tcmts/core/hash";
import { RELEASE_COLLECTION, releaseLexicon } from "#codebase/tcmts/records";
import type { ReleaseRecord } from "#codebase/tcmts/records";
import type { Release } from "#codebase/tcmts/store";

export async function releaseRecord(
  cb: Codebase,
  r: Release,
  sources: string[],
): Promise<ReleaseRecord> {
  const most = releaseLexicon.defs.main.record.properties.notes.maxLength;
  const size = Buffer.byteLength(r.notes);
  if (size > most)
    throw new UsageError(
      `${r.package}@${r.version}'s notes are ${size} bytes: a release record holds at most ${most}`,
    );
  return {
    $type: RELEASE_COLLECTION,
    package: r.package,
    version: r.version,
    namespace: await releaseNamespace(cb.store, r),
    entry: r.causal,
    hashFormat: IR_VERSION,
    notes: r.notes,
    sources,
    createdAt: new Date(r.ts).toISOString(),
  };
}

uses

used by