/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/schema/src/provider.ts
72 строки
2 KB
Kit Langton
refactor(schema): tighten public contracts (#33771)
25 июн 2026, 20:10
Не верифицирован
25 июн 2026, 20:10
9e9d405
Код
Авторство
О чём код?
export * as Provider from "./provider" import { Schema } from "effect" import { optional } from "./schema" import { Integration } from "./integration" import { statics } from "./schema" export const ID = Schema.String.pipe( Schema.brand("ProviderV2.ID"), statics((schema) => ({ opencode: schema.make("opencode"), anthropic: schema.make("anthropic"), openai: schema.make("openai"), google: schema.make("google"), googleVertex: schema.make("google-vertex"), githubCopilot: schema.make("github-copilot"), amazonBedrock: schema.make("amazon-bedrock"), azure: schema.make("azure"), openrouter: schema.make("openrouter"), mistral: schema.make("mistral"), gitlab: schema.make("gitlab"), })), ) export type ID = typeof ID.Type export interface AISDK extends Schema.Schema.Type<typeof AISDK> {} export const AISDK = Schema.Struct({ type: Schema.Literal("aisdk"), package: Schema.String, url: Schema.String.pipe(optional), settings: Schema.Record(Schema.String, Schema.Unknown).pipe(optional), }).annotate({ identifier: "Provider.AISDK" }) export interface Native extends Schema.Schema.Type<typeof Native> {} export const Native = Schema.Struct({ type: Schema.Literal("native"), url: Schema.String.pipe(optional), settings: Schema.Record(Schema.String, Schema.Unknown), }).annotate({ identifier: "Provider.Native" }) export const Api = Schema.Union([AISDK, Native]) .pipe(Schema.toTaggedUnion("type")) .annotate({ identifier: "Provider.Api" }) export type Api = typeof Api.Type export interface Request extends Schema.Schema.Type<typeof Request> {} export const Request = Schema.Struct({ headers: Schema.Record(Schema.String, Schema.String), body: Schema.Record(Schema.String, Schema.Json), }).annotate({ identifier: "Provider.Request" }) export interface Info extends Schema.Schema.Type<typeof Info> {} export const Info = Schema.Struct({ id: ID, integrationID: Integration.ID.pipe(optional), name: Schema.String, disabled: Schema.Boolean.pipe(optional), api: Api, request: Request, }) .annotate({ identifier: "ProviderV2.Info" }) .pipe( statics((schema) => ({ empty: (id: ID) => schema.make({ id, name: id, api: { type: "native", settings: {} }, request: { headers: {}, body: {} }, }), })), )