diff --git a/packages/extension-form/src/internal/guards.ts b/packages/extension-form/src/internal/guards.ts new file mode 100644 index 0000000..73fd7c5 --- /dev/null +++ b/packages/extension-form/src/internal/guards.ts @@ -0,0 +1,14 @@ +import { Array, Predicate, Record, Schema } from "effect" + + +export const isStruct = (u: unknown): u is Schema.Struct => ( + Schema.isSchema(u) && + Predicate.hasProperty(u, "fields") && Predicate.isObject(u.fields) && + Predicate.hasProperty(u, "record") && Array.isArray(u.record) && Array.isEmptyArray(u.record) +) + +export const isRecord = (u: unknown): u is Schema.Record$ => ( + Schema.isSchema(u) && + Predicate.hasProperty(u, "fields") && Predicate.isObject(u.fields) && Record.isEmptyRecord(u.fields) && + Predicate.hasProperty(u, "record") && Array.isArray(u.record) +)