39 lines · 1.3 KB · TypeScript
RawDownload
import * as Schema from "effect/Schema";import { EnvironmentId } from "@t3tools/contracts"; export const DraftComposerImageAttachmentSchema = Schema.Struct({  id: Schema.String,  previewUri: Schema.String,  type: Schema.Literal("image"),  name: Schema.String,  mimeType: Schema.String,  sizeBytes: Schema.Number,  // Accept future file-backed records before enabling the new image writers.  fileUri: Schema.optional(Schema.String.check(Schema.isNonEmpty())),  dataUrl: Schema.optional(Schema.String.check(Schema.isNonEmpty())),  uploadedAttachmentId: Schema.optional(Schema.String),  uploadEnvironmentId: Schema.optional(EnvironmentId),}).check(  Schema.makeFilter(    ({ fileUri, dataUrl }) =>      fileUri !== undefined ||      dataUrl !== undefined ||      "Image attachment has no file or inline bytes.",  ),); export const DraftComposerFileAttachmentSchema = Schema.Struct({  id: Schema.String,  type: Schema.Literal("file"),  name: Schema.String,  mimeType: Schema.String,  sizeBytes: Schema.Number,  fileUri: Schema.String,  uploadedAttachmentId: Schema.optional(Schema.String),  uploadEnvironmentId: Schema.optional(EnvironmentId),}); export const DraftComposerAttachmentSchema = Schema.Union([  DraftComposerImageAttachmentSchema,  DraftComposerFileAttachmentSchema,]);