reference.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. export * as Reference from "./reference.js"
  2. import { Schema } from "effect"
  3. import { optional } from "./schema.js"
  4. import { ephemeral, inventory } from "./event.js"
  5. import { AbsolutePath } from "./schema.js"
  6. const Updated = ephemeral({ type: "reference.updated", schema: {} })
  7. export const Event = { Updated, Definitions: inventory(Updated) }
  8. export interface LocalSource extends Schema.Schema.Type<typeof LocalSource> {}
  9. export const LocalSource = Schema.Struct({
  10. type: Schema.Literal("local"),
  11. path: AbsolutePath,
  12. description: Schema.String.pipe(optional),
  13. hidden: Schema.Boolean.pipe(optional),
  14. }).annotate({ identifier: "Reference.LocalSource" })
  15. export interface GitSource extends Schema.Schema.Type<typeof GitSource> {}
  16. export const GitSource = Schema.Struct({
  17. type: Schema.Literal("git"),
  18. repository: Schema.String,
  19. branch: Schema.String.pipe(optional),
  20. description: Schema.String.pipe(optional),
  21. hidden: Schema.Boolean.pipe(optional),
  22. }).annotate({ identifier: "Reference.GitSource" })
  23. export const Source = Schema.Union([LocalSource, GitSource])
  24. .pipe(Schema.toTaggedUnion("type"))
  25. .annotate({ identifier: "Reference.Source" })
  26. export type Source = typeof Source.Type
  27. export const Info = Schema.Struct({
  28. name: Schema.String,
  29. path: AbsolutePath,
  30. description: Schema.String.pipe(optional),
  31. hidden: Schema.Boolean.pipe(optional),
  32. source: Source,
  33. }).annotate({ identifier: "Reference.Info" })
  34. export interface Info extends Schema.Schema.Type<typeof Info> {}