19 lines
598 B
TypeScript
19 lines
598 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("Workspace.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
|