From 8925fe6336c2d4403799555a2eb1c2ffe76e405f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 14 Apr 2025 03:40:58 +0200 Subject: [PATCH] Guards work --- .../extension-form/src/internal/guards.ts | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/packages/extension-form/src/internal/guards.ts b/packages/extension-form/src/internal/guards.ts index 73fd7c5..a851436 100644 --- a/packages/extension-form/src/internal/guards.ts +++ b/packages/extension-form/src/internal/guards.ts @@ -1,14 +1,37 @@ -import { Array, Predicate, Record, Schema } from "effect" +import { Array, Predicate, Record, Schema, Tuple } from "effect" -export const isStruct = (u: unknown): u is Schema.Struct => ( +export const isTupleSchema = (u: unknown): u is Schema.Tuple => ( + Schema.isSchema(u) && + Predicate.hasProperty(u, "elements") && Array.isArray(u.elements) && + Predicate.hasProperty(u, "rest") && Array.isArray(u.rest) +) + +export const isArraySchema = (u: unknown): u is Schema.Array$ => ( + Schema.isSchema(u) && + Predicate.hasProperty(u, "elements") && Array.isArray(u.elements) && Array.isEmptyArray(u.elements) && + Predicate.hasProperty(u, "rest") && Array.isArray(u.rest) && Tuple.isTupleOf(u.rest, 1) && + Predicate.hasProperty(u, "value") +) + +export const isStructSchema = (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) + Predicate.hasProperty(u, "records") && Array.isArray(u.records) && Array.isEmptyArray(u.records) ) -export const isRecord = (u: unknown): u is Schema.Record$ => ( +export const isRecordSchema = (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) + Predicate.hasProperty(u, "records") && Array.isArray(u.records) && + Predicate.hasProperty(u, "key") && + Predicate.hasProperty(u, "value") ) + + +const myTuple = Schema.Tuple(Schema.String) +const myArray = Schema.Array(Schema.String) +const myStruct = Schema.Struct({}) +const myRecord = Schema.Record({ key: Schema.String, value: Schema.String }) + +console.log(isArraySchema(myTuple))