opencode/packages/schema/src/workspace-id.ts
2026-07-01 13:33:59 -04:00

19 lines
600 B
TypeScript

import { Schema } from "effect"
import { ascending } from "./identifier.js"
import { statics } from "./schema.js"
export const WorkspaceID = Schema.String.check(Schema.isStartsWith("wrk")).pipe(
Schema.brand("WorkspaceV2.ID"),
statics((schema) => {
const create = () => schema.make("wrk_" + ascending())
return {
ascending: (id?: string) => {
if (!id) return create()
if (!id.startsWith("wrk")) throw new Error(`ID ${id} does not start with wrk`)
return schema.make(id)
},
create,
}
}),
)
export type WorkspaceID = typeof WorkspaceID.Type