| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- export * as Skill from "./skill"
- import { Schema } from "effect"
- import { optional } from "./schema"
- import { AbsolutePath } from "./schema"
- export interface DirectorySource extends Schema.Schema.Type<typeof DirectorySource> {}
- export const DirectorySource = Schema.Struct({
- type: Schema.Literal("directory"),
- path: AbsolutePath,
- }).annotate({ identifier: "SkillV2.DirectorySource" })
- export interface UrlSource extends Schema.Schema.Type<typeof UrlSource> {}
- export const UrlSource = Schema.Struct({
- type: Schema.Literal("url"),
- url: Schema.String,
- }).annotate({ identifier: "SkillV2.UrlSource" })
- export interface Info extends Schema.Schema.Type<typeof Info> {}
- export const Info = Schema.Struct({
- name: Schema.String,
- description: Schema.String.pipe(optional),
- slash: Schema.Boolean.pipe(optional),
- location: AbsolutePath,
- content: Schema.String,
- }).annotate({ identifier: "SkillV2.Info" })
- export interface EmbeddedSource extends Schema.Schema.Type<typeof EmbeddedSource> {}
- export const EmbeddedSource = Schema.Struct({
- type: Schema.Literal("embedded"),
- skill: Schema.suspend(() => Info),
- }).annotate({ identifier: "SkillV2.EmbeddedSource" })
- export type Source = DirectorySource | UrlSource | EmbeddedSource
- export const Source = Object.assign(
- Schema.Union([DirectorySource, UrlSource, EmbeddedSource]).pipe(
- Schema.toTaggedUnion("type"),
- Schema.annotate({ identifier: "SkillV2.Source" }),
- ),
- {
- equals: (a: Source, b: Source) => {
- if (a.type !== b.type) return false
- if (a.type === "directory" && b.type === "directory") return a.path === b.path
- if (a.type === "url" && b.type === "url") return a.url === b.url
- if (a.type === "embedded" && b.type === "embedded") return a.skill.name === b.skill.name
- return false
- },
- key: (source: Source) =>
- source.type === "directory"
- ? `directory:${source.path}`
- : source.type === "url"
- ? `url:${source.url}`
- : `embedded:${source.skill.name}`,
- },
- )
|