| export const $output = Symbol("ZodOutput"); |
| export const $input = Symbol("ZodInput"); |
| export class $ZodRegistry { |
| constructor() { |
| this._map = new Map(); |
| this._idmap = new Map(); |
| } |
| add(schema, ..._meta) { |
| const meta = _meta[0]; |
| this._map.set(schema, meta); |
| if (meta && typeof meta === "object" && "id" in meta) { |
| if (this._idmap.has(meta.id)) { |
| throw new Error(`ID ${meta.id} already exists in the registry`); |
| } |
| this._idmap.set(meta.id, schema); |
| } |
| return this; |
| } |
| clear() { |
| this._map = new Map(); |
| this._idmap = new Map(); |
| return this; |
| } |
| remove(schema) { |
| const meta = this._map.get(schema); |
| if (meta && typeof meta === "object" && "id" in meta) { |
| this._idmap.delete(meta.id); |
| } |
| this._map.delete(schema); |
| return this; |
| } |
| get(schema) { |
| // return this._map.get(schema) as any; |
| // inherit metadata |
| const p = schema._zod.parent; |
| if (p) { |
| const pm = { ...(this.get(p) ?? {}) }; |
| delete pm.id; // do not inherit id |
| return { ...pm, ...this._map.get(schema) }; |
| } |
| return this._map.get(schema); |
| } |
| has(schema) { |
| return this._map.has(schema); |
| } |
| } |
| // registries |
| export function registry() { |
| return new $ZodRegistry(); |
| } |
| export const globalRegistry = /*@__PURE__*/ registry(); |